Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/windirstat.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.txt18
-rw-r--r--wdsh0407/faq.htm3
-rw-r--r--wdshelp/faq.htm5
-rw-r--r--wdsr0407/resource.h3
-rw-r--r--wdsr0407/windirstat.rc9
-rw-r--r--wdsr040c/resource.h3
-rw-r--r--wdsr040c/wdsr040c.vcproj12
-rw-r--r--wdsr040c/windirstat.rc501
-rw-r--r--windirstat/SelectDrivesDlg.cpp335
-rw-r--r--windirstat/SelectDrivesDlg.h52
-rw-r--r--windirstat/globalhelpers.cpp13
-rw-r--r--windirstat/globalhelpers.h3
-rw-r--r--windirstat/item.cpp2
-rw-r--r--windirstat/resource.h3
-rw-r--r--windirstat/stdafx.h1
-rw-r--r--windirstat/windirstat.cpp16
-rw-r--r--windirstat/windirstat.h1
-rw-r--r--windirstat/windirstat.rc11
18 files changed, 678 insertions, 313 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 6946b3f..72f1090 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,16 +1,22 @@
changelog.txt - What has been done to WinDirStat (newest top)
=============================================================
+2003-12-06 bseifert
+ * If the localized help file is not found, the English one is now tried.
+ * New shortcut F5 for 'Refresh Selected'.
+ * English version: '?' renamed to 'Help'.
+ * Select Drives Dialog: now queries the drives via background threads.
+ * tigroo almost finished French translation of windirstat.rc.
* When the tree is empty (drive selection canceled), the program
- crashed after 'Empty Recycle Bin'.
- It also crashed when 'Show free space' or 'Show unknown' was
- selected.
+ crashed after 'Empty Recycle Bin'. It also crashed when
+ 'Show free space' or 'Show unknown' was selected.
* Due to a bug, 'Empty Recycle Bin' was always enabled, even when
the recycle bin was empty.
- * Due to a bug, 'Empty Recycle Bin' was not enabled on W2k.
+ * Due to a bug, 'Empty Recycle Bin' was never enabled on W2k.
- * Relative paths or trailing backslashes are now handled correctly
- in the 'A folder' field in the drive selection dialog.
+2003-12-03 bseifert
+ * Select Drives Dialog: 'A Folder' field: Relative paths and
+ trailing backslashes are now handled correctly.
* Added "Thanks to" beta testers.
* Contextmenu and doubleclick didn't work correctly if Name-column wasn't leftmost.
diff --git a/wdsh0407/faq.htm b/wdsh0407/faq.htm
index fb75c6a..477b90d 100644
--- a/wdsh0407/faq.htm
+++ b/wdsh0407/faq.htm
@@ -21,7 +21,8 @@
</p>
<h3>Werden für die Leseaufträge Threads gestartet?</h3>
<p>Nein. WinDirStat ist - abgesehen von der Aboutbox, die in einem eigenen Thread
- läuft - zutiefst single-threaded. Alle Arbeit geschieht in OnIdle().
+ läuft und von den Abfragen im Laufwerksauswahldialog - single-threaded.
+ Alle Arbeit geschieht in OnIdle().
</p>
<h3>Was hat es mit dem Eintrag &lt;Dateien&gt; auf sich?</h3>
<p>Siehe <A href="legend.htm">Zeichenerklärung</A>.
diff --git a/wdshelp/faq.htm b/wdshelp/faq.htm
index 8a7a6fe..89c3dd9 100644
--- a/wdshelp/faq.htm
+++ b/wdshelp/faq.htm
@@ -19,8 +19,9 @@
file as <i>one</i> rectangle.
</p>
<h3>Does WinDirStat start threads for the read jobs?</h3>
- <p>No. WinDirStat is - apart from the about box, which runs in an own thread -
- deeply single-threaded. All work is done in OnIdle().
+ <p>No. WinDirStat is - apart from the about box, which runs in an own thread,
+ and apart from the drive querying in the drive selection dialog -
+ single-threaded. All work is done in OnIdle().
</p>
<h3>What does the item &lt;Files&gt; mean?</h3>
<p>See <A href="legend.htm">Legend</A>.
diff --git a/wdsr0407/resource.h b/wdsr0407/resource.h
index 6d37f22..cf60947 100644
--- a/wdsr0407/resource.h
+++ b/wdsr0407/resource.h
@@ -6,7 +6,8 @@
#define ID_VIEW_ARRANGE 127
#define IDR_MAINFRAME 128
#define IDR_windirstatTYPE 129
-#define IDR_11 130
+#define IDS_QUERYING 129
+#define IDS_NOTACCESSIBLE 130
#define IDB_NODES 131
#define IDD_SELECTDRIVES 133
#define IDR_POPUPLIST 134
diff --git a/wdsr0407/windirstat.rc b/wdsr0407/windirstat.rc
index b859963..698009a 100644
--- a/wdsr0407/windirstat.rc
+++ b/wdsr0407/windirstat.rc
@@ -113,7 +113,7 @@ BEGIN
MENUITEM "&Öffnen...\tStrg+O", ID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Alles aktualisieren", ID_REFRESHALL
- MENUITEM "&Markierung aktualisieren", ID_REFRESHSELECTED
+ MENUITEM "&Markierung aktualisieren\tF5", ID_REFRESHSELECTED
MENUITEM SEPARATOR
MENUITEM "&Beenden\tAlt+F4", ID_APP_EXIT
END
@@ -186,7 +186,7 @@ BEGIN
MENUITEM "&Pfad kopieren\tStrg+C", 57634
MENUITEM "&Explorer hier starten\tStrg+E", 32774
MENUITEM "&DOS-Prompt hier starten\tStrg+P", 32808
- MENUITEM "&Markierung aktualisieren", 32817
+ MENUITEM "&Markierung aktualisieren\tF5", 32817
MENUITEM SEPARATOR
MENUITEM "&Löschen (in den Papierkorb)\tEntf", 32809
MENUITEM "Löschen (&irreversibel!)\tUmschalt+Entf", 32810
@@ -223,6 +223,7 @@ IDR_MAINFRAME ACCELERATORS
BEGIN
VK_DELETE, ID_CLEANUP_DELETE, VIRTKEY, SHIFT, NOINVERT
VK_DELETE, ID_CLEANUP_DELETETOTRASHBIN, VIRTKEY, NOINVERT
+ VK_RETURN, ID_CLEANUP_OPEN, VIRTKEY, NOINVERT
"P", ID_CLEANUP_OPENINCONSOLE, VIRTKEY, CONTROL, NOINVERT
"E", ID_CLEANUP_OPENINEXPLORER, VIRTKEY, CONTROL, NOINVERT
"C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
@@ -248,7 +249,7 @@ BEGIN
VK_F6, ID_VIEW_SHOWFREESPACE, VIRTKEY, NOINVERT
VK_F9, ID_VIEW_SHOWTREEMAP, VIRTKEY, NOINVERT
VK_F7, ID_VIEW_SHOWUNKNOWN, VIRTKEY, NOINVERT
- VK_RETURN, ID_CLEANUP_OPEN, VIRTKEY, NOINVERT
+ VK_F5, ID_REFRESHSELECTED, VIRTKEY, NOINVERT
END
@@ -585,6 +586,8 @@ IDR_LICENSE TEXT "res\\license.txt"
STRINGTABLE
BEGIN
IDR_MAINFRAME "WinDirStat\n\nWinDirStat\n\n\n\n"
+ IDS_QUERYING "(Abfrage läuft...)"
+ IDS_NOTACCESSIBLE "(nicht verfügbar)"
END
STRINGTABLE
diff --git a/wdsr040c/resource.h b/wdsr040c/resource.h
index 6d37f22..cf60947 100644
--- a/wdsr040c/resource.h
+++ b/wdsr040c/resource.h
@@ -6,7 +6,8 @@
#define ID_VIEW_ARRANGE 127
#define IDR_MAINFRAME 128
#define IDR_windirstatTYPE 129
-#define IDR_11 130
+#define IDS_QUERYING 129
+#define IDS_NOTACCESSIBLE 130
#define IDB_NODES 131
#define IDD_SELECTDRIVES 133
#define IDR_POPUPLIST 134
diff --git a/wdsr040c/wdsr040c.vcproj b/wdsr040c/wdsr040c.vcproj
index ba067de..c99b21d 100644
--- a/wdsr040c/wdsr040c.vcproj
+++ b/wdsr040c/wdsr040c.vcproj
@@ -130,9 +130,21 @@
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
<File
+ RelativePath=".\res\bitmap1.bmp">
+ </File>
+ <File
+ RelativePath=".\res\icon1.ico">
+ </File>
+ <File
+ RelativePath=".\res\Toolbar.bmp">
+ </File>
+ <File
RelativePath=".\windirstat.rc">
</File>
</Filter>
+ <File
+ RelativePath=".\res\license.txt">
+ </File>
</Files>
<Globals>
</Globals>
diff --git a/wdsr040c/windirstat.rc b/wdsr040c/windirstat.rc
index 9bc7eb4..3a5d6d0 100644
--- a/wdsr040c/windirstat.rc
+++ b/wdsr040c/windirstat.rc
@@ -108,70 +108,74 @@ END
IDR_MAINFRAME MENU
BEGIN
- POPUP "&File"
+ POPUP "&Fichier"
BEGIN
- MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
+ MENUITEM "&Ouvrir...\tCtrl+O", ID_FILE_OPEN
MENUITEM SEPARATOR
- MENUITEM "Refresh &All", ID_REFRESHALL
- MENUITEM "Refresh &Selected", ID_REFRESHSELECTED
+ MENUITEM "&Tout rafraichir", ID_REFRESHALL
+ MENUITEM "Rafraichir la &sélection", ID_REFRESHSELECTED
MENUITEM SEPARATOR
- MENUITEM "&Quit\tAlt+F4", ID_APP_EXIT
+ MENUITEM "&Quitter\tAlt+F4", ID_APP_EXIT
END
- POPUP "&Edit"
+ POPUP "&Edition"
BEGIN
- MENUITEM "&Copy Path\tCtrl+C", ID_EDIT_COPY
+ MENUITEM "&Copier le chemin\tCtrl+C", ID_EDIT_COPY
END
- POPUP "&Clean Up"
+ POPUP "&Nettoyer"
BEGIN
- MENUITEM "&Open\tEnter", ID_CLEANUP_OPEN
+ MENUITEM "&Ouvrir\tEntrée", ID_CLEANUP_OPEN
MENUITEM SEPARATOR
- MENUITEM "&Explorer Here\tCtrl+E", ID_CLEANUP_OPENINEXPLORER
- MENUITEM "&Command Prompt Here\tCtrl+P", ID_CLEANUP_OPENINCONSOLE
- MENUITEM "&Delete (to Recycle Bin)\tDel",
+ MENUITEM "&Explorer ici\tCtrl+E", ID_CLEANUP_OPENINEXPLORER
+ MENUITEM "Ligne de &commande à cet endroit\tCtrl+P",
+ ID_CLEANUP_OPENINCONSOLE
+ MENUITEM "&Effacer (vers la corbeille)\tDel",
ID_CLEANUP_DELETETOTRASHBIN
- MENUITEM "Delete (no &way to undelete!)\tShift+Del",
+ MENUITEM "&Détruire (impossible de récupérer!)\tShift+Del",
ID_CLEANUP_DELETE
MENUITEM SEPARATOR
- MENUITEM "&Properties", ID_CLEANUP_PROPERTIES
+ MENUITEM "&Propriétés", ID_CLEANUP_PROPERTIES
MENUITEM SEPARATOR
- MENUITEM "Empty Recycle &Bin", ID_CLEANUP_EMPTYRECYCLEBIN
+ MENUITEM "&Vider la corbeille", ID_CLEANUP_EMPTYRECYCLEBIN
MENUITEM SEPARATOR
- MENUITEM "User defined cleanup #0", ID_DUMMY_USERDEFINEDCLEANUP
+ MENUITEM "Nettoyage utilisateur #0", ID_DUMMY_USERDEFINEDCLEANUP
, GRAYED
END
- POPUP "&Treemap"
+ POPUP "&Arbre"
BEGIN
- MENUITEM "&Show Treemap\tF9", ID_VIEW_SHOWTREEMAP
+ MENUITEM "&Montrer l'arbre\tF9", ID_VIEW_SHOWTREEMAP
MENUITEM SEPARATOR
- MENUITEM "Zoom &in\t+", ID_TREEMAP_ZOOMIN
- MENUITEM "Zoom &out\t-", ID_TREEMAP_ZOOMOUT
- MENUITEM "&Reselect Child\t*", 33011
- MENUITEM "&Select Parent\t/", ID_TREEMAP_SELECTPARENT
+ MENUITEM "Agrand&ir\t+", ID_TREEMAP_ZOOMIN
+ MENUITEM "Dimin&uer\t-", ID_TREEMAP_ZOOMOUT
+ MENUITEM "&Reselectionner le précedent dossier enfant\t*", 33011
+ MENUITEM "&Selectionner le dossier parent\t/",
+ ID_TREEMAP_SELECTPARENT
MENUITEM SEPARATOR
- MENUITEM "&Help about Treemaps", ID_TREEMAP_HELPABOUTTREEMAPS
+ MENUITEM "&Aide à propos des arbres", ID_TREEMAP_HELPABOUTTREEMAPS
END
- POPUP "&Report"
+ POPUP "&Rapport"
BEGIN
- MENUITEM "&Send Mail to Owner...", ID_SENDMAILTOOWNER
+ MENUITEM "&Envoyer un courriel au propriétaire...",
+ ID_SENDMAILTOOWNER
END
POPUP "&Options"
BEGIN
- MENUITEM "Show &Free Space\tF6", ID_VIEW_SHOWFREESPACE
- MENUITEM "Show &Unknown\tF7", ID_VIEW_SHOWUNKNOWN
+ MENUITEM "Montrer l'espace &libre\tF6", ID_VIEW_SHOWFREESPACE
+ MENUITEM "Montrer l'espace inconnu\tF7", ID_VIEW_SHOWUNKNOWN
MENUITEM SEPARATOR
- MENUITEM "Show File &Types\tF8", ID_VIEW_SHOWFILETYPES
- MENUITEM "Show Tree&map\tF9", ID_VIEW_SHOWTREEMAP
- MENUITEM "Show Tool&bar", ID_VIEW_TOOLBAR
- MENUITEM "Show S&tatusbar", ID_VIEW_STATUS_BAR
+ MENUITEM "Montrer les &types de fichiers\tF8", ID_VIEW_SHOWFILETYPES
+ MENUITEM "Montrer l'&arbre\tF9", ID_VIEW_SHOWTREEMAP
+ MENUITEM "Montrer la barre d'&outils", ID_VIEW_TOOLBAR
+ MENUITEM "Montrer la barre d'é&tat", ID_VIEW_STATUS_BAR
MENUITEM SEPARATOR
- MENUITEM "&Configure WinDirStat...", ID_CONFIGURE
+ MENUITEM "&Configurer WinDirStat...", ID_CONFIGURE
END
POPUP "&?"
BEGIN
- MENUITEM "&Help\tF1", ID_HELP_MANUAL
- MENUITEM "&Report Bug/Feedback...", ID_HELP_REPORTBUG
+ MENUITEM "&Aide\tF1", ID_HELP_MANUAL
+ MENUITEM "&Signaler une erreur / Donner son avis...",
+ ID_HELP_REPORTBUG
MENUITEM SEPARATOR
- MENUITEM "&About WinDirStat...", ID_APP_ABOUT
+ MENUITEM "A &propos de WinDirStat...", ID_APP_ABOUT
END
END
@@ -179,17 +183,18 @@ IDR_POPUPLIST MENU
BEGIN
POPUP "POPUP_LIST"
BEGIN
- MENUITEM "&Open\tEnter", ID_CLEANUP_OPEN
+ MENUITEM "&Ouvrir\tEntrer", ID_CLEANUP_OPEN
MENUITEM SEPARATOR
- MENUITEM "&Copy Path\tCtrl+C", 57634
- MENUITEM "&Explorer Here\tCtrl+E", 32774
- MENUITEM "&Command Prompt Here\tCtrl+P", 32808
- MENUITEM "&Refresh Selected", 32817
+ MENUITEM "&Copier le chemin\tCtrl+C", 57634
+ MENUITEM "&Explorer ici\tCtrl+E", 32774
+ MENUITEM "Ligne de &commande ici\tCtrl+P", 32808
+ MENUITEM "&Rafraichir le dossier sélectionner", 32817
MENUITEM SEPARATOR
- MENUITEM "&Delete (to Recyle Bin)\tDel", 32809
- MENUITEM "Delete (no &way to undelete!)\tShift+Del", 32810
+ MENUITEM "&Effacer (vers la corbeille)\tDel", 32809
+ MENUITEM "&Détruire (impossible de restaurer le fichier!)\tShift+Del",
+ 32810
MENUITEM SEPARATOR
- MENUITEM "&Properties", ID_CLEANUP_PROPERTIES
+ MENUITEM "&Propriétés", ID_CLEANUP_PROPERTIES
MENUITEM SEPARATOR
END
END
@@ -198,16 +203,18 @@ IDR_POPUPGRAPH MENU
BEGIN
POPUP "POPUP_GRAPH"
BEGIN
- MENUITEM "Zoom &in\t+", 32783
- MENUITEM "Zoom &out\t-", 32784
- MENUITEM "&Reselect Child\t*", ID_TREEMAP_RESELECTCHILD
- MENUITEM "&Select Parent\t/", ID_TREEMAP_SELECTPARENT
+ MENUITEM "&Agrandir\t+", 32783
+ MENUITEM "&Diminuer\t-", 32784
+ MENUITEM "&Reselect le dossier enfant précédent\t*",
+ ID_TREEMAP_RESELECTCHILD
+ MENUITEM "&Selectionner le dossier parent\t/",
+ ID_TREEMAP_SELECTPARENT
MENUITEM SEPARATOR
- MENUITEM "&Copy Path\tCtrl+C", 57634
- MENUITEM "&Explorer Here\tCtrl+E", 32774
- MENUITEM "C&ommand Prompt Here\tCtrl+P", 32808
+ MENUITEM "&Copier le chemin\tCtrl+C", 57634
+ MENUITEM "&Explorer ici\tCtrl+E", 32774
+ MENUITEM "Ligne de c&ommande ici", 32808
MENUITEM SEPARATOR
- MENUITEM "C&ancel\tEsc", ID_POPUP_CANCEL
+ MENUITEM "&Annuler\tEsc", ID_POPUP_CANCEL
END
END
@@ -258,7 +265,7 @@ END
IDD_ABOUTBOX DIALOGEX 0, 0, 273, 199
STYLE DS_SETFONT | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
-CAPTION "About WinDirStat"
+CAPTION "A propos de WinDirStat"
FONT 9, "Microsoft Sans Serif", 400, 0, 0x0
BEGIN
CONTROL "",IDC_TAB,"SysTabControl32",WS_TABSTOP,7,22,259,155,
@@ -271,47 +278,48 @@ END
IDD_SELECTDRIVES DIALOGEX 0, 0, 276, 182
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
-CAPTION "WinDirStat - Select Drives"
+CAPTION "WinDirStat - Sélectionner des lecteurs"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "&All Local Drives",IDC_ALLLOCALDRIVES,"Button",
+ CONTROL "Tous les lecteurs loc&aux",IDC_ALLLOCALDRIVES,"Button",
BS_AUTORADIOBUTTON | WS_GROUP,7,7,99,10
- CONTROL "&Individual Drives",IDC_SOMEDRIVES,"Button",
+ CONTROL "Des lecteurs seu&ls",IDC_SOMEDRIVES,"Button",
BS_AUTORADIOBUTTON,7,31,91,10
CONTROL "",IDC_DRIVES,"SysListView32",LVS_REPORT |
LVS_OWNERDRAWFIXED | LVS_ALIGNLEFT | WS_BORDER |
WS_TABSTOP,7,43,262,100
- CONTROL "A &Folder",IDC_AFOLDER,"Button",BS_AUTORADIOBUTTON,7,
+ CONTROL "Un &dossier",IDC_AFOLDER,"Button",BS_AUTORADIOBUTTON,7,
150,100,10
EDITTEXT IDC_FOLDERNAME,6,161,209,14,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_BROWSEFOLDER,219,161,50,14
DEFPUSHBUTTON "OK",IDOK,219,7,50,14
- PUSHBUTTON "Cancel",IDCANCEL,219,24,50,14
+ PUSHBUTTON "Annuler",IDCANCEL,219,24,50,14
END
IDD_DELETE_WARNING DIALOGEX 0, 0, 276, 150
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
-CAPTION "Warning"
+CAPTION "Avertissement"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "No",IDNO,163,129,50,14
PUSHBUTTON "Yes",IDYES,63,129,50,14
- CONTROL "&Don't show this warning again.",IDC_DONTSHOWAGAIN,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,99,139,10
- LTEXT "Do you know what you are doing?",IDC_STATIC,7,7,110,8
- LTEXT "Your are going to remove",IDC_STATIC,7,23,82,8
+ CONTROL "Ne pas montrer cet avertissement &davantage.",
+ IDC_DONTSHOWAGAIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 130,99,139,10
+ LTEXT "Savez vous ce que vous faites ?",IDC_STATIC,7,7,110,8
+ LTEXT "Vous allez effacer",IDC_STATIC,7,23,82,8
CTEXT "<filename>",IDC_FILENAME,7,38,262,8,SS_PATHELLIPSIS
- LTEXT "from your computer.",IDC_STATIC,7,53,67,8
- LTEXT "Deletion of system files or directories can seriously damage your system.",
+ LTEXT "de votre ordinateur.",IDC_STATIC,7,53,67,8
+ LTEXT "La destruction de fichiers ou dossiers systèmes peut sérieusement endommager le fonctionnement de votre système.",
IDC_STATIC,7,76,262,19
- LTEXT "Continue?",IDC_STATIC,7,99,104,8
+ LTEXT "Continuer?",IDC_STATIC,7,99,104,8
END
IDD_MODALAPISHUTTLE DIALOGEX 0, 0, 186, 90
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
-CAPTION "<invisible dialog>"
+CAPTION "<Boite de dialogue masquée>"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
END
@@ -319,172 +327,182 @@ END
IDD_PAGE_CLEANUPS DIALOGEX 0, 0, 380, 202
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION |
WS_SYSMENU
-CAPTION "Cleanups"
+CAPTION "Nettoyage"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LISTBOX IDC_LIST,7,7,113,169,LBS_HASSTRINGS |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
- CONTROL "&Enabled",IDC_ENABLED,"Button",BS_AUTOCHECKBOX |
+ CONTROL "&Activé",IDC_ENABLED,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,129,7,53,10
EDITTEXT IDC_TITLE,212,7,161,14,ES_AUTOHSCROLL
EDITTEXT IDC_COMMANDLINE,129,35,244,14,ES_AUTOHSCROLL
- LTEXT "%p Full Path",IDC_STATIC,128,54,93,8
- LTEXT "%n File/Directory Name without Path",IDC_STATIC,225,54,
- 138,8
- LTEXT "%sp Subdir Full Path",IDC_HINTSP,128,63,94,8
- LTEXT "%sn Subdir Name without Path",IDC_HINTSN,225,63,138,8
- CONTROL "&Drives",IDC_WORKSFORDRIVES,"Button",BS_AUTOCHECKBOX |
+ LTEXT "%p Chemin complet",IDC_STATIC,128,54,93,8
+ LTEXT "%n Nom de fichier ou dossier sans le chemin",IDC_STATIC,
+ 225,54,138,8
+ LTEXT "%sp Chemin complet du sous répertoire",IDC_HINTSP,128,
+ 63,94,8
+ LTEXT "%sn Nom du sous dossier sans le chemin",IDC_HINTSN,225,
+ 63,138,8
+ CONTROL "&Lecteurs",IDC_WORKSFORDRIVES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,138,92,49,10
- CONTROL "D&irectories",IDC_WORKSFORDIRECTORIES,"Button",
+ CONTROL "&Répertoires",IDC_WORKSFORDIRECTORIES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,218,92,69,10
- CONTROL "&Files",IDC_WORKSFORFILES,"Button",BS_AUTOCHECKBOX |
+ CONTROL "&Fichiers",IDC_WORKSFORFILES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,138,107,69,10
- CONTROL "<Files> &Pseudo Entries",IDC_WORKSFORFILESFOLDER,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,217,107,122,10
- PUSHBUTTON "&Help",IDC_HELPBUTTON,323,131,50,14
- CONTROL "&Recurse into Subdirectories",
+ CONTROL "<Fichiers> &pseudo entrées",IDC_WORKSFORFILESFOLDER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,107,122,10
+ PUSHBUTTON "&Aider",IDC_HELPBUTTON,323,131,50,14
+ CONTROL "&Parcourir tous les sous répertoires",
IDC_RECURSEINTOSUBDIRECTORIES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,128,132,160,10
- CONTROL "&Ask for Confirmation",IDC_ASKFORCONFIRMATION,"Button",
+ CONTROL "&Demander confirmation",IDC_ASKFORCONFIRMATION,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,128,146,160,10
- CONTROL "&Show Console Window",IDC_SHOWCONSOLEWINDOW,"Button",
+ CONTROL "Montrer la &console",IDC_SHOWCONSOLEWINDOW,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,128,160,100,10
- CONTROL "&Wait for Completion",IDC_WAITFORCOMPLETION,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,250,160,100,10
+ CONTROL "&Attendre la fin de la tâche",IDC_WAITFORCOMPLETION,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,250,160,100,10
COMBOBOX IDC_REFRESHPOLICY,128,183,245,93,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "&Up",IDC_UP,21,181,37,14
- PUSHBUTTON "&Down",IDC_DOWN,66,181,37,14
- LTEXT "Refresh &Policy",IDC_STATIC,128,174,108,8
- LTEXT "&Title",IDC_STATIC,186,7,24,8
- LTEXT "&Command Line",IDC_STATIC,129,25,83,8
- GROUPBOX "Works for",IDC_STATIC,129,81,244,40
+ PUSHBUTTON "&Monter",IDC_UP,21,181,37,14
+ PUSHBUTTON "&Descendre",IDC_DOWN,66,181,37,14
+ LTEXT "&Règles de rafraichissement",IDC_STATIC,128,174,108,8
+ LTEXT "&Titre",IDC_STATIC,186,7,24,8
+ LTEXT "Invite de &commande",IDC_STATIC,129,25,83,8
+ GROUPBOX "Travail sur",IDC_STATIC,129,81,244,40
END
IDD_PAGE_TREELIST DIALOGEX 0, 0, 380, 199
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION |
WS_SYSMENU
-CAPTION "Directory List"
+CAPTION "Liste des répertoires"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "&Show Grid",IDC_TREELISTGRID,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,23,25,97,10
- PUSHBUTTON "Tree Level &1",IDC_COLORBUTTON0,151,19,175,14,0,
+ CONTROL "&Montrer la grille",IDC_TREELISTGRID,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,23,25,97,10
+ PUSHBUTTON "Branche de niveau &1",IDC_COLORBUTTON0,135,19,195,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &2",IDC_COLORBUTTON1,167,40,159,14,0,
+ PUSHBUTTON "Branche de niveau &2",IDC_COLORBUTTON1,151,40,179,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &3",IDC_COLORBUTTON2,181,61,145,14,0,
+ PUSHBUTTON "Branche de niveau &3",IDC_COLORBUTTON2,165,61,165,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &4",IDC_COLORBUTTON3,195,82,131,14,0,
+ PUSHBUTTON "Branche de niveau &4",IDC_COLORBUTTON3,179,82,151,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &5",IDC_COLORBUTTON4,207,103,119,14,0,
+ PUSHBUTTON "Branche de niveau &5",IDC_COLORBUTTON4,191,103,139,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &6",IDC_COLORBUTTON5,218,124,108,14,0,
+ PUSHBUTTON "Branche de niveau &6",IDC_COLORBUTTON5,202,124,128,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &7",IDC_COLORBUTTON6,227,145,99,14,0,
+ PUSHBUTTON "Branche de niveau &7",IDC_COLORBUTTON6,211,145,119,14,0,
WS_EX_RIGHT
- PUSHBUTTON "Tree Level &8",IDC_COLORBUTTON7,236,166,90,14,0,
+ PUSHBUTTON "Branche de niveau &8",IDC_COLORBUTTON7,220,166,110,14,0,
WS_EX_RIGHT
CONTROL "",IDC_SLIDER,"msctls_trackbar32",TBS_VERT | TBS_BOTH |
TBS_NOTICKS | WS_TABSTOP,339,29,18,160
- GROUPBOX "Subtree Percentage &Colors",IDC_STATIC,129,7,244,185
+ GROUPBOX "&Couleurs des pourcentages de l'arbre",IDC_STATIC,129,7,
+ 244,185
END
IDD_PAGE_TREEMAP DIALOGEX 0, 0, 380, 202
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION |
WS_SYSMENU
-CAPTION "Treemap"
+CAPTION "Arbre"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "&Use Cushion Shading",IDC_CUSHIONSHADING,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,18,15,122,10
- LTEXT "&Height",IDC_STATIC,31,32,54,8
+ CONTROL "&Utiliser un ombrage en coussin",IDC_CUSHIONSHADING,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,15,122,10
+ LTEXT "&Hauteur",IDC_STATIC,31,32,54,8
EDITTEXT IDC_HEIGHTFACTOR,88,30,35,14,ES_AUTOHSCROLL
CONTROL "",IDC_HEIGHTFACTORSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS,125,30,
11,14
- LTEXT "&Scale Factor",IDC_STATIC,31,53,54,8
+ LTEXT "&Facteur d'agrandissement",IDC_STATIC,31,53,54,8
EDITTEXT IDC_SCALEFACTOR,88,51,35,14,ES_AUTOHSCROLL
CONTROL "",IDC_SCALEFACTORSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_AUTOBUDDY | UDS_ARROWKEYS,125,51,11,14
- LTEXT "&Ambient Light",IDC_STATIC,31,74,53,8
+ LTEXT "Lumière &ambiante",IDC_STATIC,31,74,53,8
EDITTEXT IDC_AMBIENTLIGHT,88,73,35,14,ES_AUTOHSCROLL
CONTROL "",IDC_AMBIENTLIGHTSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS,125,73,
11,14
- PUSHBUTTON "&Reset to defaults",IDC_RESETTODEFAULTS,31,94,105,14
- CONTROL "Show &Grid",IDC_TREEMAPGRID,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,18,144,48,10
- PUSHBUTTON "Grid &Color",IDC_TREEMAPGRIDCOLOR,74,143,62,14,0,
+ PUSHBUTTON "&Remettre les valeurs par défaut",IDC_RESETTODEFAULTS,
+ 31,94,105,14
+ CONTROL "Montrer la &grille",IDC_TREEMAPGRID,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,18,144,62,10
+ PUSHBUTTON "&Couleur de grille",IDC_TREEMAPGRIDCOLOR,89,143,98,14,0,
WS_EX_RIGHT
CONTROL "",IDC_DEMO,"Static",SS_BLACKFRAME | WS_BORDER,147,30,
118,78,WS_EX_TRANSPARENT
- PUSHBUTTON "H&ighlight Rectangle",IDC_TREEMAPHIGHLIGHTCOLOR,18,166,
- 117,14,0,WS_EX_RIGHT
+ PUSHBUTTON "&Sélection",IDC_TREEMAPHIGHLIGHTCOLOR,18,166,169,14,0,
+ WS_EX_RIGHT
END
IDD_PAGE_GENERAL DIALOGEX 0, 0, 380, 202
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION |
WS_SYSMENU
-CAPTION "General"
+CAPTION "Général"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "&Cross File System Boundaries",IDC_FOLLOWMOUNTPOINTS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,13,229,10
- CONTROL "&Show Sizes in GB/MB/KB/Bytes Format",IDC_HUMANFORMAT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,32,229,10
- CONTROL "&Pacman Animation in Directory List",
+ CONTROL "Parcourir tous les points de &montage des lecteurs",
+ IDC_FOLLOWMOUNTPOINTS,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,32,13,229,10
+ CONTROL "&Montrer la taille des fichiers en Go/Mo/Ko/octets",
+ IDC_HUMANFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,
+ 32,229,10
+ CONTROL "Animation ""&Pacman"" dans la liste des répetoires",
IDC_PACMANANIMATION,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,32,51,216,10
- CONTROL "Show &Time spent in Directory List",IDC_SHOWTIMESPENT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,70,216,10
- LTEXT "&Language",IDC_STATIC,32,97,166,8
+ CONTROL "Montrer le &temps passé dans le répertoire",
+ IDC_SHOWTIMESPENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 32,70,216,10
+ LTEXT "&Langue",IDC_STATIC,32,97,166,8
COMBOBOX IDC_COMBO,32,110,156,140,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
- LTEXT "Language changes take not effect until the application is restarted.",
+ LTEXT "Le changement de la langue ne prendra effet qu'après redémarrage du programme.",
IDC_STATIC,200,110,173,35
+ LTEXT "Language changes take not effect until the application is restarted.",
+ IDC_STATIC,200,143,173,35
END
IDD_REPORTBUG DIALOGEX 0, 0, 360, 233
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
-CAPTION "WinDirStat - Submit Bug Report/Feedback"
+CAPTION "WinDirStat - Signaler une erreur / Donner son avis"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "&Critical",IDC_CRITICAL,"Button",BS_AUTORADIOBUTTON |
+ CONTROL "&Critique",IDC_CRITICAL,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,14,43,43,10
CONTROL "&Grave",IDC_GRAVE,"Button",BS_AUTORADIOBUTTON,73,43,43,
10
CONTROL "&Normal",IDC_NORMAL,"Button",BS_AUTORADIOBUTTON,132,43,
43,10
- CONTROL "&Wish",IDC_WISH,"Button",BS_AUTORADIOBUTTON,191,43,43,
+ CONTROL "&Idée",IDC_WISH,"Button",BS_AUTORADIOBUTTON,191,43,43,
10
- CONTROL "General &Feedback",IDC_FEEDBACK,"Button",
+ CONTROL "Commentaire &général",IDC_FEEDBACK,"Button",
BS_AUTORADIOBUTTON,250,43,79,10
EDITTEXT IDC_INAWORD,60,61,293,14,ES_AUTOHSCROLL
EDITTEXT IDC_TEXT,7,118,346,80,ES_MULTILINE | ES_AUTOHSCROLL |
ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
DEFPUSHBUTTON "OK",IDOK,154,212,50,14
- PUSHBUTTON "Cancel",IDCANCEL,303,212,50,14
- LTEXT "From:",IDC_STATIC,7,7,20,8
- LTEXT "To:",IDC_STATIC_TO,185,7,12,8
+ PUSHBUTTON "Annuler",IDCANCEL,303,212,50,14
+ LTEXT "De :",IDC_STATIC,7,7,20,8
+ LTEXT "A :",IDC_STATIC_TO,185,7,12,8
LTEXT "<from>",IDC_FROM,51,7,122,8
LTEXT "<to>",IDC_TO,230,7,123,8
- GROUPBOX "Severity",IDC_STATIC_SEVERITY,7,33,346,24,0,
+ GROUPBOX "Séverité",IDC_STATIC_SEVERITY,7,33,346,24,0,
WS_EX_TRANSPARENT
- LTEXT "In a &word:",IDC_STATIC,7,65,49,8
- LTEXT "&Enter the text (in English or German, please) that you wish to submit for the bug report or comment.",
- IDC_STATIC,7,84,346,12
+ LTEXT "En un &mot :",IDC_STATIC,7,65,49,8
+ LTEXT "&Entrez vos idées, commentaires ici (en anglais ou allemand s'il vous plaît), ou l'erreur que vous souhaitez signaler.",
+ IDC_STATIC,7,79,346,16
LTEXT "Application:",IDC_STATIC,7,18,38,8
LTEXT "<application>",IDC_APPLICATION,51,18,123,8
- LTEXT "Platform:",IDC_STATIC_PLATFORM,185,18,30,8
+ LTEXT "Platteforme:",IDC_STATIC_PLATFORM,185,18,30,8
LTEXT "<platform>",IDC_PLATFORM,230,18,123,8
- LTEXT "For a bug report, it's best if you describe the symptom, including the exact wording of the error message, and, if possible, the steps to reproduce the behavior.",
+ LTEXT "Pour signaler une erreur, il est mieux de décrire le symptome, en donner le message d'erreur exact, et si possible les étapes ayant donné l'erreur (ou pour la reproduire).",
IDC_HINT,7,99,346,19
- LTEXT "When you press OK, you will be able to review the message in your e-mail program.",
+ LTEXT "Vous pouvez aller presser ""OK"", vous pourrez alors voir votre message dans votre logiciel de messagerie.",
IDC_STATIC_OKHINT,7,201,346,8
END
+
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
@@ -583,12 +601,14 @@ IDR_LICENSE TEXT "res\\license.txt"
STRINGTABLE
BEGIN
IDR_MAINFRAME "WinDirStat\n\nWinDirStat\n\n\n\n"
+ IDS_QUERYING "(querying...)"
+ IDS_NOTACCESSIBLE "(unavailable)"
END
STRINGTABLE
BEGIN
AFX_IDS_APP_TITLE "WinDirStat"
- AFX_IDS_IDLEMESSAGE "Ready"
+ AFX_IDS_IDLEMESSAGE "Prêt"
END
STRINGTABLE
@@ -599,196 +619,197 @@ BEGIN
ID_INDICATOR_SCRL "SCRL"
ID_INDICATOR_OVR "OVR"
ID_INDICATOR_REC "REC"
- ID_INDICATOR_MEMORYUSAGE "RAM Usage: 123.456.789"
+ ID_INDICATOR_MEMORYUSAGE "Utilisation de la mémoire RAM : 123.456.789"
END
STRINGTABLE
BEGIN
- ID_FILE_OPEN "Opens a Collection of Drives.\nOpen"
+ ID_FILE_OPEN "Ouvre une liste de lecteurs.\nOuvrir"
END
STRINGTABLE
BEGIN
- ID_APP_ABOUT "Shows Program, Version, and Copyright Information.\nInfo"
- ID_APP_EXIT "Quits the Application.\nQuit"
+ ID_APP_ABOUT "Affiche la version du programme, et le copyright.\nInformations"
+ ID_APP_EXIT "Ferme l'application.\nQuitter"
END
STRINGTABLE
BEGIN
- ID_EDIT_COPY "Copies the Selected Path into the Clipboard.\nCopy Path"
+ ID_EDIT_COPY "Copie le chemin sélectionné dans le presse-papier.\nCopier le chemin"
END
STRINGTABLE
BEGIN
- ID_VIEW_TOOLBAR "Shows/hides the Toolbar\nToolbar"
- ID_VIEW_STATUS_BAR "Shows/hides the Statusbar.\nStatusbar"
+ ID_VIEW_TOOLBAR "Cache ou affiche la barre d'outils\nBarre d'outils."
+ ID_VIEW_STATUS_BAR "Cache ou affiche la barre d'état.\nBarre d'état."
END
STRINGTABLE
BEGIN
- AFX_IDS_SCSIZE "Change the window size"
- AFX_IDS_SCMOVE "Change the window position"
- AFX_IDS_SCMINIMIZE "Reduce the window to an icon"
- AFX_IDS_SCMAXIMIZE "Enlarge the window to full size"
- AFX_IDS_SCCLOSE "Close the application"
+ AFX_IDS_SCSIZE "Change la taille de la fenêtre"
+ AFX_IDS_SCMOVE "Change la position de la fenêtre"
+ AFX_IDS_SCMINIMIZE "Réduit le programme"
+ AFX_IDS_SCMAXIMIZE "Agrandi la fenêtre sur tout l'écran"
+ AFX_IDS_SCCLOSE "Ferme le programme"
END
STRINGTABLE
BEGIN
- AFX_IDS_SCRESTORE "Restore the window to normal size"
- AFX_IDS_SCTASKLIST "Activate Task List"
+ AFX_IDS_SCRESTORE "Remet la fenêtre à sa taille normale"
+ AFX_IDS_SCTASKLIST "Active la liste des tâches"
END
STRINGTABLE
BEGIN
- ID_FILE_REFRESHALL "Re-Reads the Whole Tree"
+ ID_FILE_REFRESHALL "Relit l'arbre entier"
ID_CLEANUP_OPENINEXPLORER
- "Opens an Explorer at the Selected Location.\nExplorer"
- ID_TREEMAP_ZOOMIN "Enlarges the Treemap.\nZoom in"
+ "Ouvre l'explorateur à l'endroit sélectionné.\nExplorer"
+ ID_TREEMAP_ZOOMIN "Agrandi l'arbre.\nAgrandir"
END
STRINGTABLE
BEGIN
- ID_FILE_REFRESHSELECTED "Re-Reads the Selected Subtree"
+ ID_FILE_REFRESHSELECTED "Relit la branche sélectionnée"
ID_CLEANUP_OPENINCONSOLE
- "Opens a Command Prompt at the Selected Location.\nCommand Prompt"
+ "Ouvre une invite de commande à l'emplacement sélectionné.\nInvite de commande"
ID_CLEANUP_DELETETOTRASHBIN
- "Moves the Selected Item to the Recycle Bin.\nDelete (to Recycle Bin)"
- ID_CLEANUP_DELETE "Deletes the Selected Item (no way to undelete!).\nDelete (no way to undelete!)"
- ID_CONFIGURE "Opens the Settings Dialog.\nConfigure"
- ID_HELP_MANUAL "Opens the WinDirStat Online Help\nManual"
+ "Déplace l'élément sélectionné dans la corbeille.\nEffacer (dans la corbeille)"
+ ID_CLEANUP_DELETE "Détruit l'élément sélectionné (impossible d'annuler!).\nDétruire (impossible d'annuler!)"
+ ID_CONFIGURE "Ouvrir la boite de réglages.\nConfigurer"
+ ID_HELP_MANUAL "Ouvrir l'aide en ligne de WinDirStat\nManuel"
END
STRINGTABLE
BEGIN
- ID_TREEMAP_ZOOMOUT "Reduces the Treemap.\nZoom out"
- ID_TREEMAP_SELECTPARENT "Selects the Current Item's Parent.\nSelect Parent"
+ ID_TREEMAP_ZOOMOUT "Réduit l'arbre.\nRéduire"
+ ID_TREEMAP_SELECTPARENT "Sélectionne le parent de l'élément actuel.\nSélectionne le parent"
ID_TREEMAP_HELPABOUTTREEMAPS
- "Displays Help about Treemaps.\nHelp about Treemaps"
- ID_VIEW_SHOWTREEMAP "Shows/hides the Treemap.\nTreemap"
- ID_HELP_REPORTBUG "Composes a Bug/Feedback Mail.\nReport Bug/Feedback"
+ "Affiche l'aide sur les arbres.\nAide sur les arbres"
+ ID_VIEW_SHOWTREEMAP "Cache/Affiche l'arbre.\nArbre"
+ ID_HELP_REPORTBUG "Ecrire une description d'erreur/son avis.\nSoumettre une erreur ou un avis"
END
STRINGTABLE
BEGIN
- ID_REFRESHALL "Rescans the whole directory tree.\nRefresh All"
- ID_REFRESHSELECTED "Rescans the selected subtree.\nRefresh Selected"
- ID_CLEANUP_EMPTYRECYCLEBIN "Empties the Recycle Bin.\nEmpty Recycle Bin"
- ID_VIEW_SHOWFREESPACE "Shows/hides the <Free Space> Item.\nShow Free Space"
- ID_VIEW_SHOWUNKNOWN "Shows/hides the <Unknown> Item.\nShow Unknown"
+ ID_REFRESHALL "Re-parcoure toute l'arboresence de répertoires.\nRafraichi tout"
+ ID_REFRESHSELECTED "Re-parcoure le sous-arbre sélectionné.\nRafraichi la sélection"
+ ID_CLEANUP_EMPTYRECYCLEBIN "Vide la corbeille.\nVide la corbeille"
+ ID_VIEW_SHOWFREESPACE "Cache/Affiche l'<espace libre>.\nMontre l'espace libre"
+ ID_VIEW_SHOWUNKNOWN "Cache/Affiche les élements <inconnus>.\nMontre l'espace inconnu"
END
STRINGTABLE
BEGIN
ID_DUMMY_USERDEFINEDCLEANUP
- "Calls up User definied Cleanup #0\nUser defined Cleanup"
+ "Lance un nettoyage #0 défini par l'utilisateur #0\nNettoyage utilisateur"
END
STRINGTABLE
BEGIN
- ID_SENDMAILTOOWNER "Composes an e-mail report on the currently selected item.\nSend Mail"
+ ID_SENDMAILTOOWNER "Envoie un rapport par courriel au sujet de l'élément sélectionné.\nEnvoyer un courriel"
END
STRINGTABLE
BEGIN
- ID_VIEW_SHOWFILETYPES "Shows/hides the Extension List.\nShow File Types"
+ ID_VIEW_SHOWFILETYPES "Cache/Affiche la liste des extensions de fichiers.\nAfficher les extensions"
END
STRINGTABLE
BEGIN
- ID_TREEMAP_RESELECTCHILD "Re-selects the child.\nReselect Child"
- ID_CLEANUP_OPEN "Opens the selected item.\r\nOpen Item"
- ID_CLEANUP_PROPERTIES "Show the properties of the selected item.\r\nShow Properties"
+ ID_TREEMAP_RESELECTCHILD
+ "Re-sélectionne le descendant.\nResélectionne de descendant"
+ ID_CLEANUP_OPEN "Ouvre l'élément sélectionné.\r\nOuvre l'élément"
+ ID_CLEANUP_PROPERTIES "Montrer les attributs de la sélection.\r\nAffiche les attributs"
END
STRINGTABLE
BEGIN
- IDS_RESOURCEVERSION "Resource Version 1"
- IDS_ABOUT_ABOUTTEXTss "\r\nWinDirStat - Directory Statistics\r\n\r\n""Shows where all your disk space has gone\r\nand helps you clean it up.""\r\n\r\nRe-programmed for MS Windows by\r\nBernhard Seifert (mailto:%1!s!),\r\n\r\nbased on Stefan Hundhammer's KDE (Linux) program KDirStat\r\n(http://kdirstat.sourceforge.net/).\r\n\r\nWinDirStat's home is http://%2!s!/\r\n\r\nCopyright (c) 2003 Bernhard Seifert\r\nFrench translation: Pascal Delrot (mailto:tigroo@users.sourceforge.net)"
- IDS_ABOUT_THANKSTOTEXT "\r\nStefan Hundhammer for his superb Linux tool KDirStat.\r\nUsing KDirStat (2.3.7) as a specification saved me a lot of time.\r\nhttp://kdirstat.sourceforge.net/\r\n\r\nThe authors of SequoiaView for showing just how useful treemaps really can be.\r\nhttp://www.win.tue.nl/sequoiaview/\r\n\r\nJarke J. van Wijk, Huub van de Wetering, Mark Bruls and Kees Huizing\r\nfor their papers about cushion treemaps and squarified treemaps.\r\nhttp://www.win.tue.nl/~vanwijk/\r\n\r\nBen Shneiderman for his ingenious idea of treemaps -\r\na truly intuitive way of visualizing tree contents.\r\nhttp://www.cs.umd.edu/hcil/treemap-history/\r\n\r\nMy colleagues for their feedback on the early releases of WinDirStat.\r\nhttp://www.daccord.net/\r\n"
- IDS_ABOUT_ABOUT "About"
- IDS_ABOUT_THANKSTO "Thanks To"
- IDS_ABOUT_LICENSEAGREEMENT "License Agreement"
- IDS_MYCOMPUTER "My Computer"
- IDS_UDC_CONFIRMATIONss "You are going to call the user defined cleanup\r\n'%1!s!'\r\n\r\non '%2!s!'.\r\n\r\nContinue?"
- IDS_RUDC_CONFIRMATIONss "You are going to call the recursive user defined cleanup\r\n'%1!s!'\r\n\r\non '%2!s!'.\r\n\r\nContinue?"
+ IDS_RESOURCEVERSION "Resource Version 2"
+ IDS_ABOUT_ABOUTTEXTss "\r\nWinDirStat - Statistiques sur les systèmes de fichiers\r\n\r\n""Montre où est passé tout votre espace dique\r\net vous aide à faire le nettoyage.""\r\n\r\nRe-programmé pour MS Windows par\r\nBernhard Seifert (mailto:%1!s!),\r\n\r\nà partir du travail de Stefan Hundhammer sous KDE (Linux) KDirStat\r\n(http://kdirstat.sourceforge.net/).\r\n\r\nLa page Internet de WinDirStat est http://%2!s!/\r\n\r\nFrench translation: Pascal Delrot (mailto:tigroo@users.sourceforge.net)\r\n\r\nCopyright (c) 2003 Bernhard Seifert"
+ IDS_ABOUT_THANKSTOTEXT "\r\nStefan Hundhammer pour son superbe outil Linux ""KDirStat"".\r\nUtiliser KDirStat (2.3.7) comme spécification m'a permis de gagner beaucoup de temps.\r\nhttp://kdirstat.sourceforge.net/\r\n\r\nLes auteurs de ""SequoiaView"" pour m'avoir montré à quel point les arbres sont utiles.\r\nhttp://www.win.tue.nl/sequoiaview/\r\n\r\nJarke J. van Wijk, Huub van de Wetering, Mark Bruls and Kees Huizing\r\npour leurs articles sur les arbres en coussins et rectangulaires.\r\nhttp://www.win.tue.nl/~vanwijk/\r\n\r\nBen Shneiderman pour son idée ingénieuse des arbres -\r\nune manière vraiment intuitive de visualiser le contenu des répertoires.\r\nhttp://www.cs.umd.edu/hcil/treemap-history/\r\n\r\nMes collègues pour leurs remarques sur les toutes premières versions de WinDirStat.\r\nhttp://www.daccord.net/\r\n\r\nNick Lines and Beatrix Lödige for beta testing.\r\n"
+ IDS_ABOUT_ABOUT "A propos de"
+ IDS_ABOUT_THANKSTO "Merci à"
+ IDS_ABOUT_LICENSEAGREEMENT "Accord de license"
+ IDS_MYCOMPUTER "Poste de travail"
+ IDS_UDC_CONFIRMATIONss "Vous allez exécuter unn nettoyage personnalisé\r\n'%1!s!'\r\n\r\nsur '%2!s!'.\r\n\r\nContinuer ?"
+ IDS_RUDC_CONFIRMATIONss "Vous allez exécuter unn nettoyage personnalisé de manière récursive\r\n'%1!s!'\r\n\r\nsur '%2!s!'.\r\n\r\nContinuer ?"
END
STRINGTABLE
BEGIN
- IDS_THEDIRECTORYsDOESNOTEXIST "The directory '%1!s!' doesn't exist."
- IDS_THEFILEsDOESNOTEXIST "The file '%1!s!' doesn't exist."
+ IDS_THEDIRECTORYsDOESNOTEXIST "Le répertoire '%1!s!' n'existe pas."
+ IDS_THEFILEsDOESNOTEXIST "Le fichier '%1!s!' n'existe pas."
IDS_COULDNOTCREATEPROCESSssss
- "Could not create process.\r\n\r\nApplication: '%1!s!',\r\nCommand Line: '%2!s!',\r\nWorking Directory: '%3!s!'\r\nError Message:\r\n%4!s!\r\n(Refreshing will not take place.)"
- IDS_TREECOL_NAME "Name"
- IDS_TREECOL_SUBTREEPERCENTAGE "Subtree Percentage"
- IDS_TREECOL_PERCENTAGE "Percentage"
- IDS_TREECOL_SIZE "Size"
- IDS_TREECOL_ITEMS "Items"
- IDS_TREECOL_FILES "Files"
- IDS_TREECOL_SUBDIRS "Subdirs"
- IDS_TREECOL_LASTCHANGE "Last Change"
+ "Impossible de créer un processus.\r\n\r\nApplication: '%1!s!',\r\nLigne de commande: '%2!s!',\r\nRépertoire de travail: '%3!s!'\r\nMessage d'erreur:\r\n%4!s!\r\n(Le rafraichissement n'aura pas lieu.)"
+ IDS_TREECOL_NAME "Nom"
+ IDS_TREECOL_SUBTREEPERCENTAGE "Pourcentage sur la branche"
+ IDS_TREECOL_PERCENTAGE "Pourcentage"
+ IDS_TREECOL_SIZE "Taille"
+ IDS_TREECOL_ITEMS "Eléments"
+ IDS_TREECOL_FILES "Fichiers"
+ IDS_TREECOL_SUBDIRS "Sous-dossiers"
+ IDS_TREECOL_LASTCHANGE "Dernier changement"
IDS_PLEASECHECKYOURDISKUSAGE
- "Please check your disk usage and clean up if you can. Thank you.\r\n\r\n"
+ "S'il vous plait veuillez vérifier l'utilisation de votre espace disque et nettoyez le si vous pouvez. Merci.\r\n\r\n"
IDS_DISKUSAGEREPORTGENERATEDBYWINDIRSTAT
- "\r\n\r\nDisk usage report generated by WinDirStat.\r\n"
- IDS__UNKNOWN_ "<unknown>"
- IDS_FREESPACE_ITEM "<Free Space>"
- IDS_UNKNOWN_ITEM "<Unknown>"
+ "\r\n\r\nUtilisation de l'espace disque créé par WinDirStat.\r\n"
+ IDS__UNKNOWN_ "<inconnu>"
+ IDS_FREESPACE_ITEM "<Espace libre>"
+ IDS_UNKNOWN_ITEM "<inconnu>"
END
STRINGTABLE
BEGIN
- IDS_FILES_ITEM "<Files>"
- IDS_ONEREADJOB "[1 Read Job]"
- IDS_sREADJOBS "[%1!s! Read Jobs]"
- IDS_CANNOTOPENCLIPBOARD "Cannot open the clipboard."
- IDS_CANNOTEMTPYCLIPBOARD "Cannot empty the clipboard."
- IDS_CANNOTSETCLIPBAORDDATA "Cannot set clipboard data."
- IDS_WINDIRSTAT_SETTINGS "WinDirStat - Settings"
- IDS_SCANNING_ "Scanning "
- IDS_EMPTYRECYCLEBIN "&Empty Recycle Bin"
- IDS__ONEITEMss " (1 Item, %1!s!%2!s!)"
- IDS__sITEMSss " (%1!s! Items, %2!s!%3!s!)"
+ IDS_FILES_ITEM "<Fichiers>"
+ IDS_ONEREADJOB "[1 travail de lecture]"
+ IDS_sREADJOBS "[%1!s! travaux de lecture]"
+ IDS_CANNOTOPENCLIPBOARD "Impossible d'ouvrir le presse-papier."
+ IDS_CANNOTEMTPYCLIPBOARD "Impossible de vider le presse-papier."
+ IDS_CANNOTSETCLIPBAORDDATA "Impossible de copier dans le presse-papier."
+ IDS_WINDIRSTAT_SETTINGS "WinDirStat - Paramètres"
+ IDS_SCANNING_ "Parcours "
+ IDS_EMPTYRECYCLEBIN "&Vider la corbeille"
+ IDS__ONEITEMss " (1 élément, %1!s!%2!s!)"
+ IDS__sITEMSss " (%1!s! éléments, %2!s!%3!s!)"
IDS_UDCsCTRLd "%1!s!\tCtrl+%2!d!"
- IDS_USERDEFINEDCLEANUP0 "User defined cleanup #0"
- IDS_REPORT_DISKUSAGE "Disk Usage"
- IDS_USERDEFINEDCLEANUPd "User defined cleanup #%1!d!"
- IDS_POLICY_NOREFRESH "No refresh"
+ IDS_USERDEFINEDCLEANUP0 "Nettoyage personnalisé #0"
+ IDS_REPORT_DISKUSAGE "Utilisation du disque"
+ IDS_USERDEFINEDCLEANUPd "Nettoyage personnalisé #%1!d!"
+ IDS_POLICY_NOREFRESH "Pas de rafraîchissement"
END
STRINGTABLE
BEGIN
- IDS_POLICY_REFRESHTHISENTRY "Refresh this entry"
- IDS_POLICY_REFRESHPARENT "Refresh this entry's parent"
- IDS_BUGREPORTHINT "For a bug report, it's best if you describe the symptom, including the complete wording of the error message, and, if possible, the steps to reproduce the behavior."
- IDS_FEEDBACKHINT "Feedback is always appreciated."
- IDS_FROMsPLATFORMs "From: %1!s!. Platform: %2!s!.\r\n\r\n"
- IDS_SEV_CRITICAL "Critical Bug"
- IDS_SEV_GRAVE "Grave Bug"
- IDS_SEV_NORMAL "Bug"
- IDS_SEV_WISH "Wish"
- IDS_SEV_FEEDBACK "Feedback"
- IDS_DRIVECOL_NAME "Name"
+ IDS_POLICY_REFRESHTHISENTRY "Rafraichir cette entrée"
+ IDS_POLICY_REFRESHPARENT "Rafraichir le dossier parent de cette entrée"
+ IDS_BUGREPORTHINT "For signaler une erreur, il est mieux de décrire les symptômes, en donnant le message d'erreur complet, et si possible, la manière de provoquer l'erreur en question."
+ IDS_FEEDBACKHINT "Les commentaires sont toujours les bienvenus."
+ IDS_FROMsPLATFORMs "De : %1!s!. Platte-forme : %2!s!.\r\n\r\n"
+ IDS_SEV_CRITICAL "Erreur critique"
+ IDS_SEV_GRAVE "Erreur grave"
+ IDS_SEV_NORMAL "Erreur"
+ IDS_SEV_WISH "Idée"
+ IDS_SEV_FEEDBACK "Commentaire"
+ IDS_DRIVECOL_NAME "Nom"
IDS_DRIVECOL_TOTAL "Total"
- IDS_DRIVECOL_FREE "Free"
- IDS_DRIVECOL_GRAPH "Used/Total"
- IDS_DRIVECOL_PERCENTUSED "Used/Total"
- IDS_SELECTFOLDER "WinDirStat - Select Folder"
+ IDS_DRIVECOL_FREE "Libre"
+ IDS_DRIVECOL_GRAPH "Utilisé/Total"
+ IDS_DRIVECOL_PERCENTUSED "Utilisé/Total"
+ IDS_SELECTFOLDER "WinDirStat - Choisissez un répertoire"
END
STRINGTABLE
BEGIN
IDS_EXTCOL_EXTENSION "Extension"
- IDS_EXTCOL_COLOR "Color"
- IDS_EXTCOL_BYTES "Bytes"
- IDS_EXTCOL_FILES "Files"
+ IDS_EXTCOL_COLOR "Couleur"
+ IDS_EXTCOL_BYTES "Octets"
+ IDS_EXTCOL_FILES "Fichiers"
IDS_EXTCOL_DESCRIPTION "Description"
- IDS_RAMUSAGEs "RAM Usage: %1!s!"
+ IDS_RAMUSAGEs "Utilisation de la mémoire RAM: %1!s!"
IDS_HELPFILEsCOULDNOTBEFOUND
- "The help file %1!s! could not be found.\r\nIt is expected to be in the same folder where windirstat.exe is.\r\nYou should have received it along with windirstat.exe.\r\nYou can download one from WinDirStat's home site (see About box)."
- IDS_SUSPENDED_ "(suspended) "
- IDS_SUSPEND "Suspend"
+ "Le fichier d'aide %1!s! ne peut pas être trouvé.\r\nIt is expected to be in the same folder where windirstat.exe is.\r\nYou should have received it along with windirstat.exe.\r\nVous pouvez le télécharger depuis le site Internet de WinDirStat (voir la boite de dialogue ""A propos de"")."
+ IDS_SUSPENDED_ "(suspendu) "
+ IDS_SUSPEND "Suspendre"
END
#endif // French (France) resources
diff --git a/windirstat/SelectDrivesDlg.cpp b/windirstat/SelectDrivesDlg.cpp
index ce1606e..dcb5313 100644
--- a/windirstat/SelectDrivesDlg.cpp
+++ b/windirstat/SelectDrivesDlg.cpp
@@ -23,6 +23,10 @@
#include "windirstat.h"
#include ".\selectdrivesdlg.h"
+#ifdef _DEBUG
+//#define TESTTHREADS //####
+#endif
+
namespace
{
enum
@@ -36,6 +40,26 @@ namespace
};
const UINT WMU_OK = WM_USER + 100;
+
+ UINT WMU_THREADFINISHED = RegisterWindowMessage("{F03D3293-86E0-4c87-B559-5FD103F5AF58}");
+
+ // Return: false, if drive not accessible
+ bool RetrieveDriveInformation(LPCTSTR path, CString& name, LONGLONG& total, LONGLONG& free)
+ {
+ CString volumeName;
+
+ if (!GetVolumeName(path, volumeName))
+ return false;
+
+ name= FormatVolumeName(path, volumeName);
+
+ MyGetDiskFreeSpace(path, total, free);
+
+ ASSERT(free <= total);
+
+ return true;
+ }
+
}
@@ -43,20 +67,64 @@ namespace
/////////////////////////////////////////////////////////////////////////////
CDriveItem::CDriveItem(CDrivesList *list, LPCTSTR pszPath)
+ : m_list(list)
+ , m_path(pszPath)
{
- m_list= list;
- m_path= pszPath;
+ m_success= false;
- m_name= FormatVolumeName(m_path);
-
- MyGetDiskFreeSpace(m_path, m_totalBytes, m_freeBytes);
-
- ASSERT(m_freeBytes <= m_totalBytes);
+ m_name= m_path;
+ m_totalBytes= 0;
+ m_freeBytes= 0;
m_used= 0;
- if (m_totalBytes > 0)
- m_used= (double)(m_totalBytes - m_freeBytes) / m_totalBytes;
m_isRemote= (DRIVE_REMOTE == GetDriveType(m_path));
+
+ m_querying= true;
+
+ /*
+ For local drives we could do this synchronously:
+ if (!m_isRemote)
+ {
+ m_querying= false;
+
+ CString name= m_name;
+ LONGLONG total = 0;
+ LONGLONG free = 0;
+
+ bool success= RetrieveDriveInformation(m_path, name, total, free);
+ SetDriveInformation(success, name, total, free);
+ }
+ */
+}
+
+void CDriveItem::StartQuery(HWND dialog, UINT serial)
+{
+ ASSERT(dialog != NULL);
+
+ ASSERT(m_querying); // The synchronous query in the constructor is commented out.
+
+ if (m_querying)
+ {
+ new CDriveInformationThread(m_path, (LPARAM)this, dialog, serial);
+ // (will delete itself when finished.)
+ }
+}
+
+void CDriveItem::SetDriveInformation(bool success, LPCTSTR name, LONGLONG total, LONGLONG free)
+{
+ m_querying= false;
+ m_success= success;
+
+ if (m_success)
+ {
+ m_name= name;
+ m_totalBytes= total;
+ m_freeBytes= free;
+
+ m_used= 0;
+ if (m_totalBytes > 0)
+ m_used= (double)(m_totalBytes - m_freeBytes) / m_totalBytes;
+ }
}
bool CDriveItem::IsRemote() const
@@ -100,6 +168,12 @@ bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *w
}
else if (subitem == COL_GRAPH)
{
+ if (!m_success)
+ {
+ return false;
+ }
+
+
if (width != NULL)
{
*width= 100;
@@ -120,7 +194,7 @@ bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *w
CString CDriveItem::GetText(int subitem) const
{
- CString s= m_name;
+ CString s;
switch (subitem)
{
@@ -129,18 +203,25 @@ CString CDriveItem::GetText(int subitem) const
break;
case COL_TOTAL:
- s= FormatBytes((LONGLONG)m_totalBytes);
+ if (m_success)
+ s= FormatBytes((LONGLONG)m_totalBytes);
break;
case COL_FREE:
- s= FormatBytes((LONGLONG)m_freeBytes);
+ if (m_success)
+ s= FormatBytes((LONGLONG)m_freeBytes);
break;
case COL_GRAPH:
+ if (m_querying)
+ s.LoadString(IDS_QUERYING);
+ else if (!m_success)
+ s.LoadString(IDS_NOTACCESSIBLE);
break;
case COL_PERCENTUSED:
- s= FormatDouble(m_used * 100) + _T("%");
+ if (m_success)
+ s= FormatDouble(m_used * 100) + _T("%");
break;
default:
@@ -163,6 +244,127 @@ CString CDriveItem::GetDrive() const
/////////////////////////////////////////////////////////////////////////////
+CSet<CDriveInformationThread *, CDriveInformationThread *> CDriveInformationThread::_runningThreads;
+CCriticalSection CDriveInformationThread::_csRunningThreads;
+
+void CDriveInformationThread::AddRunningThread()
+{
+ CSingleLock lock(&_csRunningThreads, true);
+ _runningThreads.SetKey(this);
+}
+
+void CDriveInformationThread::RemoveRunningThread()
+{
+ CSingleLock lock(&_csRunningThreads, true);
+ _runningThreads.RemoveKey(this);
+}
+
+
+// This static method is called by the dialog when the dialog gets closed.
+// We set the m_dialog members of all running threads to null, so that
+// they don't send messages around to a no-more-existing window.
+//
+void CDriveInformationThread::InvalidateDialogHandle()
+{
+ CSingleLock lock(&_csRunningThreads, true);
+
+ POSITION pos= _runningThreads.GetStartPosition();
+ while (pos != NULL)
+ {
+ CDriveInformationThread *thread;
+ _runningThreads.GetNextAssoc(pos, thread);
+
+ CSingleLock lockObj(&thread->m_cs, true);
+ thread->m_dialog= NULL;
+ }
+}
+
+void CDriveInformationThread::OnAppExit()
+{
+ // The documentation for ExitProcess() says:
+ //
+ // Terminating a process causes the following:
+ // 2. All of the threads in the process terminate their execution.
+ // 3. The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate.
+
+ // So we need not do anything here.
+ // (we may have some memory leak, if threads are still running.)
+}
+
+
+// The constructor starts the thread.
+//
+CDriveInformationThread::CDriveInformationThread(LPCTSTR path, LPARAM driveItem, HWND dialog, UINT serial)
+ : m_path(path)
+ , m_driveItem(driveItem)
+ , m_serial(serial)
+{
+ ASSERT(m_bAutoDelete);
+
+ m_dialog= dialog;
+
+ m_totalBytes= 0;
+ m_freeBytes= 0;
+ m_success= false;
+
+ AddRunningThread();
+
+ VERIFY(CreateThread());
+}
+
+BOOL CDriveInformationThread::InitInstance()
+{
+ m_success= RetrieveDriveInformation(m_path, m_name, m_totalBytes, m_freeBytes);
+
+#ifdef TESTTHREADS
+ srand(GetTickCount());
+ Sleep((rand() & 0x07) * 1000);
+#endif
+
+ HWND dialog = NULL;
+
+ {
+ CSingleLock lock(&m_cs, true);
+ dialog= m_dialog;
+ // Of course, we must release m_cs here to avoid deadlocks.
+ }
+
+ if (dialog != NULL)
+ {
+ // Theoretically the dialog may have been closed at this point.
+ // SendMessage() to a non-existing window simply fails immediately.
+ // If in the meantime the system recycled the window handle,
+ // (it may even belong to another process now?!),
+ // we are safe, because WMU_THREADFINISHED is a unique registered message.
+ // (Well if the other process crashes because of our message, there is nothing we can do about it.)
+ // If the window handle is recycled by a new Select drives dialog,
+ // its new serial will prevent it from reacting.
+ SendMessage(dialog, WMU_THREADFINISHED, m_serial, (LPARAM)this);
+ }
+
+ RemoveRunningThread();
+
+ ASSERT(m_bAutoDelete); // Object will delete itself.
+ return false; // no Run(), please!
+}
+
+// This method is only called by the gui thread, while we hang
+// in SendMessage(dialog, WMU_THREADFINISHED, 0, this).
+// So we need no synchronization.
+//
+LPARAM CDriveInformationThread::GetDriveInformation(bool& success, CString& name, LONGLONG& total, LONGLONG& free)
+{
+ name= m_name;
+ total= m_totalBytes;
+ free= m_freeBytes;
+ success= m_success;
+
+ return m_driveItem;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+
IMPLEMENT_DYNAMIC(CDrivesList, COwnerDrawnListControl)
CDrivesList::CDrivesList()
@@ -249,10 +451,13 @@ void CDrivesList::MeasureItem(LPMEASUREITEMSTRUCT mis)
IMPLEMENT_DYNAMIC(CSelectDrivesDlg, CDialog)
+UINT CSelectDrivesDlg::_serial;
+
CSelectDrivesDlg::CSelectDrivesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSelectDrivesDlg::IDD, pParent)
, m_layout(this, _T("sddlg"))
{
+ _serial++;
}
CSelectDrivesDlg::~CSelectDrivesDlg()
@@ -281,6 +486,7 @@ BEGIN_MESSAGE_MAP(CSelectDrivesDlg, CDialog)
ON_WM_GETMINMAXINFO()
ON_WM_DESTROY()
ON_MESSAGE(WMU_OK, OnWmuOk)
+ ON_REGISTERED_MESSAGE(WMU_THREADFINISHED, OnWmuThreadFinished)
END_MESSAGE_MAP()
@@ -290,6 +496,12 @@ BOOL CSelectDrivesDlg::OnInitDialog()
CDialog::OnInitDialog();
+ if (WMU_THREADFINISHED == 0)
+ {
+ TRACE("RegisterMessage() failed. Using WM_USER + 123\r\n");
+ WMU_THREADFINISHED = WM_USER + 123;
+ }
+
ModifyStyle(0, WS_CLIPCHILDREN);
m_layout.AddControl(IDOK, 1, 0, 0, 0);
@@ -307,10 +519,10 @@ BOOL CSelectDrivesDlg::OnInitDialog()
// If we set an ImageList here, OnMeasureItem will have no effect ?!
m_list.InsertColumn(COL_NAME, LoadString(IDS_DRIVECOL_NAME), LVCFMT_LEFT, 120, COL_NAME);
- m_list.InsertColumn(COL_TOTAL, LoadString(IDS_DRIVECOL_TOTAL), LVCFMT_RIGHT, 120, COL_TOTAL);
- m_list.InsertColumn(COL_FREE, LoadString(IDS_DRIVECOL_FREE), LVCFMT_RIGHT, 120, COL_FREE);
- m_list.InsertColumn(COL_GRAPH, LoadString(IDS_DRIVECOL_GRAPH), LVCFMT_RIGHT, 120, COL_GRAPH);
- m_list.InsertColumn(COL_PERCENTUSED,LoadString(IDS_DRIVECOL_PERCENTUSED),LVCFMT_RIGHT, 80, COL_PERCENTUSED);
+ m_list.InsertColumn(COL_TOTAL, LoadString(IDS_DRIVECOL_TOTAL), LVCFMT_RIGHT, 55, COL_TOTAL);
+ m_list.InsertColumn(COL_FREE, LoadString(IDS_DRIVECOL_FREE), LVCFMT_RIGHT, 55, COL_FREE);
+ m_list.InsertColumn(COL_GRAPH, LoadString(IDS_DRIVECOL_GRAPH), LVCFMT_LEFT, 100, COL_GRAPH);
+ m_list.InsertColumn(COL_PERCENTUSED,LoadString(IDS_DRIVECOL_PERCENTUSED),LVCFMT_RIGHT, 55, COL_PERCENTUSED);
m_list.OnColumnsInserted();
@@ -327,35 +539,30 @@ BOOL CSelectDrivesDlg::OnInitDialog()
DWORD mask= 0x00000001;
for (i=0; i < 32; i++, mask <<= 1)
{
- if ((drives & mask) != 0)
- {
- CString s;
- s.Format(_T("%c:\\"), i + _T('A'));
+ if ((drives & mask) == 0)
+ continue;
- UINT type= GetDriveType(s);
- if (type == DRIVE_UNKNOWN || type == DRIVE_NO_ROOT_DIR)
- {
- continue;
- }
+ CString s;
+ s.Format(_T("%c:\\"), i + _T('A'));
- if (!DriveExists(s))
- {
- continue;
- }
+ UINT type= GetDriveType(s);
+ if (type == DRIVE_UNKNOWN || type == DRIVE_NO_ROOT_DIR)
+ continue;
+
+ // The check of remote drives will be done in the backgound by the CDriveInformationThread.
+ if (type != DRIVE_REMOTE && !DriveExists(s))
+ continue;
- CDriveItem *item= new CDriveItem(&m_list, s);
- m_list.InsertListItem(m_list.GetItemCount(), item);
- for (int col=0; col < COLUMN_COUNT; col++)
- m_list.AdjustColumnWidth(col);
- m_list.UpdateWindow();
+ CDriveItem *item= new CDriveItem(&m_list, s);
+ m_list.InsertListItem(m_list.GetItemCount(), item);
+ item->StartQuery(m_hWnd, _serial);
- for (int k=0; k < m_selectedDrives.GetSize(); k++)
+ for (int k=0; k < m_selectedDrives.GetSize(); k++)
+ {
+ if (item->GetDrive() == m_selectedDrives[k])
{
- if (item->GetDrive() == m_selectedDrives[k])
- {
- m_list.SelectItem(item);
- break;
- }
+ m_list.SelectItem(item);
+ break;
}
}
}
@@ -538,6 +745,8 @@ void CSelectDrivesDlg::OnGetMinMaxInfo(MINMAXINFO* mmi)
void CSelectDrivesDlg::OnDestroy()
{
+ CDriveInformationThread::InvalidateDialogHandle();
+
m_layout.OnDestroy();
CDialog::OnDestroy();
}
@@ -547,3 +756,47 @@ LRESULT CSelectDrivesDlg::OnWmuOk(WPARAM, LPARAM)
OnOK();
return 0;
}
+
+// This message is _sent_ by a CDriveInformationThread.
+//
+LRESULT CSelectDrivesDlg::OnWmuThreadFinished(WPARAM serial, LPARAM lparam)
+{
+ if (serial != _serial)
+ {
+ TRACE("OnWmuThreadFinished: invalid serial (window handle recycled?)\r\n");
+ return 0;
+ }
+
+ CDriveInformationThread *thread= (CDriveInformationThread *)lparam;
+
+ bool success;
+ CString name;
+ LONGLONG total;
+ LONGLONG free;
+
+ LPARAM driveItem = thread->GetDriveInformation(success, name, total, free);
+
+ // For paranoia's sake we check, whether driveItem is in our list.
+ // (and we so find its index.)
+ LVFINDINFO fi;
+ ZeroMemory(&fi, sizeof(fi));
+ fi.flags= LVFI_PARAM;
+ fi.lParam= driveItem;
+
+ int i= m_list.FindItem(&fi);
+ if (i == -1)
+ {
+ TRACE("OnWmuThreadFinished: item not found!\r\n");
+ return 0;
+ }
+
+ CDriveItem *item= (CDriveItem *)driveItem;
+
+ item->SetDriveInformation(success, name, total, free);
+
+ m_list.RedrawItems(i, i);
+
+ m_list.SortItems();
+
+ return 0;
+}
diff --git a/windirstat/SelectDrivesDlg.h b/windirstat/SelectDrivesDlg.h
index df18cfe..00a51be 100644
--- a/windirstat/SelectDrivesDlg.h
+++ b/windirstat/SelectDrivesDlg.h
@@ -39,11 +39,16 @@ class CDrivesList;
//
// CDriveItem. An item in the CDrivesList Control.
+// All methods are called by the gui thread.
//
class CDriveItem: public COwnerDrawnListItem
{
public:
CDriveItem(CDrivesList *list, LPCTSTR pszPath);
+ void StartQuery(HWND dialog, UINT serial);
+
+ void SetDriveInformation(bool success, LPCTSTR name, LONGLONG total, LONGLONG free);
+
virtual int Compare(const CSortingListItem *other, int subitem) const;
CString GetPath() const;
@@ -56,13 +61,56 @@ public:
private:
CDrivesList *m_list; // Backpointer
CString m_path; // e.g. "C:\"
+ bool m_isRemote; // Whether the drive type is DRIVE_REMOTE (network drive)
+
+ bool m_querying; // Information thread is running.
+ bool m_success; // Drive is accessible. false while m_querying is true.
+
CString m_name; // e.g. "BOOT (C:)"
LONGLONG m_totalBytes; // Capacity
LONGLONG m_freeBytes; // Free space
- bool m_isRemote; // Whether the drive type is DRIVE_REMOTE (network drive)
+
double m_used; // used space / total space
};
+//
+// CDriveInformationThread. Does the GetVolumeInformation() call, which
+// may hang for ca. 30 sec, it a network drive is not accessible.
+//
+class CDriveInformationThread: public CWinThread
+{
+ // Set of all running CDriveInformationThreads.
+ // Used by InvalidateDialogHandle().
+ static CSet<CDriveInformationThread *, CDriveInformationThread *> _runningThreads;
+ static CCriticalSection _csRunningThreads;
+
+ // The objects register and deregister themselves in _runningThreads
+ void AddRunningThread();
+ void RemoveRunningThread();
+
+public:
+ static void InvalidateDialogHandle();
+ static void OnAppExit();
+
+ CDriveInformationThread(LPCTSTR path, LPARAM driveItem, HWND dialog, UINT serial);
+ virtual BOOL InitInstance();
+
+ LPARAM GetDriveInformation(bool& success, CString& name, LONGLONG& total, LONGLONG& free);
+
+private:
+ const CString m_path; // Path like "C:\"
+ const LPARAM m_driveItem; // The list item, we belong to
+
+ CCriticalSection m_cs; // for m_dialog
+ HWND m_dialog; // synchronized by m_cs
+ const UINT m_serial; // serial number of m_dialog
+
+ // "[out]"-parameters
+ CString m_name; // Result: name like "BOOT (C:)", valid if m_success
+ LONGLONG m_totalBytes; // Result: capacity of the drive, valid if m_success
+ LONGLONG m_freeBytes; // Result: free space on the drive, valid if m_success
+ bool m_success; // Result: false, iff drive is unaccessible.
+};
//
// CDrivesList.
@@ -112,6 +160,7 @@ protected:
void UpdateButtons();
+ static UINT _serial; // Each Instance of this dialog gets a serial number
CDrivesList m_list;
CButton m_okButton;
CStringArray m_selectedDrives;
@@ -130,4 +179,5 @@ protected:
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
afx_msg void OnDestroy();
afx_msg LRESULT OnWmuOk(WPARAM, LPARAM);
+ afx_msg LRESULT OnWmuThreadFinished(WPARAM, LPARAM lparam);
};
diff --git a/windirstat/globalhelpers.cpp b/windirstat/globalhelpers.cpp
index fa27e33..667be0f 100644
--- a/windirstat/globalhelpers.cpp
+++ b/windirstat/globalhelpers.cpp
@@ -247,14 +247,14 @@ bool GetVolumeName(LPCTSTR rootPath, CString& volumeName)
// Given a root path like "C:\", this function
// obtains the volume name and returns a complete display string
// like "BOOT (C:)".
-CString FormatVolumeName(CString rootPath)
+CString FormatVolumeNameOfRootPath(CString rootPath)
{
CString ret;
CString volumeName;
bool b= GetVolumeName(rootPath, volumeName);
if (b)
{
- ret.Format(_T("%s (%s)"), volumeName, rootPath.Left(2));
+ ret= FormatVolumeName(rootPath, volumeName);
}
else
{
@@ -263,7 +263,14 @@ CString FormatVolumeName(CString rootPath)
return ret;
}
-// The inverse of FormatVolumeName().
+CString FormatVolumeName(CString rootPath, CString volumeName)
+{
+ CString ret;
+ ret.Format(_T("%s (%s)"), volumeName, rootPath.Left(2));
+ return ret;
+}
+
+// The inverse of FormatVolumeNameOfRootPath().
// Given a name like "BOOT (C:)", it returns "C:" (without trailing backslash).
// Or, if name like "C:\", it returns "C:".
CString PathFromVolumeName(CString name)
diff --git a/windirstat/globalhelpers.h b/windirstat/globalhelpers.h
index 117d752..cdba61e 100644
--- a/windirstat/globalhelpers.h
+++ b/windirstat/globalhelpers.h
@@ -37,7 +37,8 @@ CString GetParseNameOfMyComputer() throw (CException *);
void GetPidlOfMyComputer(LPITEMIDLIST *ppidl) throw (CException *);
void ShellExecuteWithAssocDialog(HWND hwnd, LPCTSTR filename) throw (CException *);
bool GetVolumeName(LPCTSTR rootPath, CString& volumeName);
-CString FormatVolumeName(CString rootPath);
+CString FormatVolumeNameOfRootPath(CString rootPath);
+CString FormatVolumeName(CString rootPath, CString volumeName);
CString PathFromVolumeName(CString name);
void MyGetDiskFreeSpace(LPCTSTR pszRootPath, LONGLONG& total, LONGLONG& unused);
bool Is256Colors();
diff --git a/windirstat/item.cpp b/windirstat/item.cpp
index e15e0f5..d56cd79 100644
--- a/windirstat/item.cpp
+++ b/windirstat/item.cpp
@@ -58,7 +58,7 @@ CItem::CItem(ITEMTYPE type, LPCTSTR name, bool dontFollow)
if (GetType() == IT_DRIVE)
{
- m_name= FormatVolumeName(m_name);
+ m_name= FormatVolumeNameOfRootPath(m_name);
}
ZeroMemory(&m_lastChange, sizeof(m_lastChange));
diff --git a/windirstat/resource.h b/windirstat/resource.h
index 6d37f22..cf60947 100644
--- a/windirstat/resource.h
+++ b/windirstat/resource.h
@@ -6,7 +6,8 @@
#define ID_VIEW_ARRANGE 127
#define IDR_MAINFRAME 128
#define IDR_windirstatTYPE 129
-#define IDR_11 130
+#define IDS_QUERYING 129
+#define IDS_NOTACCESSIBLE 130
#define IDB_NODES 131
#define IDD_SELECTDRIVES 133
#define IDR_POPUPLIST 134
diff --git a/windirstat/stdafx.h b/windirstat/stdafx.h
index 63a45d0..c2538b9 100644
--- a/windirstat/stdafx.h
+++ b/windirstat/stdafx.h
@@ -56,6 +56,7 @@
#include <afxdtctl.h> // MFC IE 4
#include <afxcmn.h> // MFC Common Controls
#include <afxtempl.h> // MFC Container classes
+#include <afxmt.h> // MFC Multithreading
#include <io.h> // _access()
#include <math.h> // floor(), fmod(), sqrt() etc.
diff --git a/windirstat/windirstat.cpp b/windirstat/windirstat.cpp
index c8c0418..2ec67db 100644
--- a/windirstat/windirstat.cpp
+++ b/windirstat/windirstat.cpp
@@ -213,13 +213,10 @@ CString CDirstatApp::FindHelpfilePathByLangid(LANGID langid)
if (!s.IsEmpty())
return s;
- // If our primary language is English, try windirstat.chm again.
- if (PRIMARYLANGID(langid) == PRIMARYLANGID(GetBuiltInLanguage()))
- {
- s= GetAppFolder() + _T("\\windirstat.chm");
- if (FileExists(s))
- return s;
- }
+ // Else, try windirstat.chm again.
+ s= GetAppFolder() + _T("\\windirstat.chm");
+ if (FileExists(s))
+ return s;
// Not found.
return _T("");
@@ -483,6 +480,11 @@ BOOL CDirstatApp::InitInstance()
return TRUE;
}
+int CDirstatApp::ExitInstance()
+{
+ return CWinApp::ExitInstance();
+}
+
LANGID CDirstatApp::GetLangid()
{
return m_langid;
diff --git a/windirstat/windirstat.h b/windirstat/windirstat.h
index a2fd63a..4a0eff4 100644
--- a/windirstat/windirstat.h
+++ b/windirstat/windirstat.h
@@ -56,6 +56,7 @@ class CDirstatApp : public CWinApp
public:
CDirstatApp();
virtual BOOL InitInstance();
+ virtual int ExitInstance();
LANGID GetBuiltInLanguage() ;
LANGID GetLangid();
diff --git a/windirstat/windirstat.rc b/windirstat/windirstat.rc
index b7a8005..fbdc2d2 100644
--- a/windirstat/windirstat.rc
+++ b/windirstat/windirstat.rc
@@ -113,7 +113,7 @@ BEGIN
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "Refresh &All", ID_REFRESHALL
- MENUITEM "Refresh &Selected", ID_REFRESHSELECTED
+ MENUITEM "Refresh &Selected\tF5", ID_REFRESHSELECTED
MENUITEM SEPARATOR
MENUITEM "&Quit\tAlt+F4", ID_APP_EXIT
END
@@ -166,7 +166,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Configure WinDirStat...", ID_CONFIGURE
END
- POPUP "&?"
+ POPUP "&Help"
BEGIN
MENUITEM "&Help\tF1", ID_HELP_MANUAL
MENUITEM "&Report Bug/Feedback...", ID_HELP_REPORTBUG
@@ -184,7 +184,7 @@ BEGIN
MENUITEM "&Copy Path\tCtrl+C", 57634
MENUITEM "&Explorer Here\tCtrl+E", 32774
MENUITEM "&Command Prompt Here\tCtrl+P", 32808
- MENUITEM "&Refresh Selected", 32817
+ MENUITEM "&Refresh Selected\tF5", 32817
MENUITEM SEPARATOR
MENUITEM "&Delete (to Recyle Bin)\tDel", 32809
MENUITEM "Delete (no &way to undelete!)\tShift+Del", 32810
@@ -221,6 +221,7 @@ IDR_MAINFRAME ACCELERATORS
BEGIN
VK_DELETE, ID_CLEANUP_DELETE, VIRTKEY, SHIFT, NOINVERT
VK_DELETE, ID_CLEANUP_DELETETOTRASHBIN, VIRTKEY, NOINVERT
+ VK_RETURN, ID_CLEANUP_OPEN, VIRTKEY, NOINVERT
"P", ID_CLEANUP_OPENINCONSOLE, VIRTKEY, CONTROL, NOINVERT
"E", ID_CLEANUP_OPENINEXPLORER, VIRTKEY, CONTROL, NOINVERT
"C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
@@ -246,7 +247,7 @@ BEGIN
VK_F6, ID_VIEW_SHOWFREESPACE, VIRTKEY, NOINVERT
VK_F9, ID_VIEW_SHOWTREEMAP, VIRTKEY, NOINVERT
VK_F7, ID_VIEW_SHOWUNKNOWN, VIRTKEY, NOINVERT
- VK_RETURN, ID_CLEANUP_OPEN, VIRTKEY, NOINVERT
+ VK_F5, ID_REFRESHSELECTED, VIRTKEY, NOINVERT
END
@@ -632,6 +633,8 @@ IDR_LICENSE TEXT "res\\license.txt"
STRINGTABLE
BEGIN
IDR_MAINFRAME "WinDirStat\n\nWinDirStat\n\n\n\n"
+ IDS_QUERYING "(querying...)"
+ IDS_NOTACCESSIBLE "(unavailable)"
END
STRINGTABLE