diff options
author | bseifert <none@none> | 2004-01-21 01:17:41 +0300 |
---|---|---|
committer | bseifert <none@none> | 2004-01-21 01:17:41 +0300 |
commit | df0f96c7af8493ad6ee49796342aa300923065d6 (patch) | |
tree | 3fd8c0c2124d94715be8228fe0ce8daa02d8269c | |
parent | 2f0ee94f846241baa0cf800f76bd666da2833c85 (diff) |
Full row selection.
-rw-r--r-- | CHANGELOG.txt | 6 | ||||
-rw-r--r-- | README.txt | 2 | ||||
-rw-r--r-- | common/version.h | 6 | ||||
-rw-r--r-- | wdsr0407/resource.h | 1 | ||||
-rw-r--r-- | wdsr0407/windirstat.rc | 16 | ||||
-rw-r--r-- | wdsr040c/resource.h | 1 | ||||
-rw-r--r-- | wdsr040c/windirstat.rc | 12 | ||||
-rw-r--r-- | windirstat/PageGeneral.cpp | 9 | ||||
-rw-r--r-- | windirstat/PageGeneral.h | 2 | ||||
-rw-r--r-- | windirstat/SelectDrivesDlg.cpp | 9 | ||||
-rw-r--r-- | windirstat/SelectDrivesDlg.h | 2 | ||||
-rw-r--r-- | windirstat/TreeListControl.cpp | 4 | ||||
-rw-r--r-- | windirstat/TreeListControl.h | 2 | ||||
-rw-r--r-- | windirstat/aboutdlg.cpp | 4 | ||||
-rw-r--r-- | windirstat/dirstatview.cpp | 2 | ||||
-rw-r--r-- | windirstat/item.cpp | 14 | ||||
-rw-r--r-- | windirstat/item.h | 2 | ||||
-rw-r--r-- | windirstat/options.cpp | 19 | ||||
-rw-r--r-- | windirstat/options.h | 4 | ||||
-rw-r--r-- | windirstat/ownerdrawnlistcontrol.cpp | 163 | ||||
-rw-r--r-- | windirstat/ownerdrawnlistcontrol.h | 28 | ||||
-rw-r--r-- | windirstat/resource.h | 2 | ||||
-rw-r--r-- | windirstat/typeview.cpp | 12 | ||||
-rw-r--r-- | windirstat/typeview.h | 2 | ||||
-rw-r--r-- | windirstat/windirstat.rc | 19 |
25 files changed, 270 insertions, 73 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 338f499..dfe0ff9 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,7 +1,11 @@ changelog.txt - What has been done to WinDirStat (newest top) ============================================================= -2003-01-11 bseifert +2004-01-20 bseifert + * Temporarily removed French translation from setup and Aboutbox for release 1.0.2. + * New option: Full row selection (default). + +2004-01-11 bseifert * Completed French translation. * Added rc2-files. @@ -1,6 +1,6 @@ ============================================================================= WinDirStat - Windows Directory Statistics -(c) 2003 Bernhard Seifert (bseifert@users.sourceforge.net) +(c) 2003-2004 Bernhard Seifert (bseifert@users.sourceforge.net) ============================================================================= This project, made up of diff --git a/common/version.h b/common/version.h index 7fe3ebc..4d131a8 100644 --- a/common/version.h +++ b/common/version.h @@ -28,8 +28,8 @@ // //#define BC_DEVEL // Development version. The usual setting. File version is 0.0.0.buildno. -#define BC_RELEASECANDIDATE // Release candidate. Version number is relevant but not yet official. About-box shows x.y.zrcn. File version is x.y.z.buildno. -//#define BC_RELEASE // Set this only during official builds. About-box shows x.y.z. File version is x.y.z.buildno +//#define BC_RELEASECANDIDATE // Release candidate. Version number is relevant but not yet official. About-box shows x.y.zrcn. File version is x.y.z.buildno. +#define BC_RELEASE // Set this only during official builds. About-box shows x.y.z. File version is x.y.z.buildno //------------------------------------------------------------------- @@ -41,7 +41,7 @@ // The following line is automatically incremented by linkcounter.exe. // Format: #define blank LINKCOUNT blanks decimal // Reset this to zero only when you increment VERNUM_MAJOR/MINOR/REVISION. -#define LINKCOUNT 74 +#define LINKCOUNT 116 //------------------------------------------------------------------- // Release candidate number. Relevant for BC_RELEASECANDIDATE. diff --git a/wdsr0407/resource.h b/wdsr0407/resource.h index 4dc7f0e..4674ac3 100644 --- a/wdsr0407/resource.h +++ b/wdsr0407/resource.h @@ -131,6 +131,7 @@ #define IDC_TREEMAPGRIDCOLOR 1030 #define IDC_SHOWGRID2 1030 #define IDC_SHOWSTRIPES 1030 +#define IDC_FULLROWSELECTION 1031 #define IDC_RESET 1034 #define IDC_LIST 1036 #define IDC_TITLE 1037 diff --git a/wdsr0407/windirstat.rc b/wdsr0407/windirstat.rc index b53b100..4a9c3a1 100644 --- a/wdsr0407/windirstat.rc +++ b/wdsr0407/windirstat.rc @@ -37,7 +37,7 @@ END BEGIN "#include ""afxres.h""\r\n" "#include ""../common/version.h""\r\n" - "\0" + "\0" END 3 TEXTINCLUDE @@ -447,13 +447,15 @@ BEGIN CONTROL "&Größen im GB/MB/KB/Bytes-Format anzeigen", IDC_HUMANFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32, 33,207,10 - GROUPBOX "&Listenstil",IDC_STATIC,30,52,77,45 + GROUPBOX "&Listenstil",IDC_STATIC,30,52,99,65 + CONTROL "Ganze &Zeile markieren",IDC_FULLROWSELECTION,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,38,67,88,10 CONTROL "&Raster",IDC_SHOWGRID,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,38,65,58,10 + WS_TABSTOP,38,84,58,10 CONTROL "S&treifen",IDC_SHOWSTRIPES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,38,81,58,10 - LTEXT "&Sprache",IDC_STATIC,32,112,166,8 - COMBOBOX IDC_COMBO,32,125,156,140,CBS_DROPDOWNLIST | CBS_SORT | + WS_TABSTOP,38,101,58,10 + LTEXT "&Sprache",IDC_STATIC,32,132,166,8 + COMBOBOX IDC_COMBO,32,145,156,140,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -739,7 +741,7 @@ END STRINGTABLE BEGIN IDS_RESOURCEVERSION "Resource Version 3" - IDS_ABOUT_ABOUTTEXTss "\r\nWinDirStat - Verzeichnisstatistik\r\n\r\nZeigt an, wo all der Plattenplatz geblieben ist,\r\nund hilft aufzuräumen.\r\n\r\nNeu programmiert für MS Windows von\r\nBernhard Seifert (mailto:%1!s!),\r\n\r\nauf Grundlage von Stefan Hundhammers KDE (Linux)-Programm KDirStat\r\n(http://kdirstat.sourceforge.net/).\r\n\r\nWinDirStats Homepage ist http://%2!s!/\r\n\r\nFranzösische Übersetzung: Pascal Delrot (mailto:tigroo@users.sourceforge.net).\r\n\r\nCopyright (c) 2003-2004 Bernhard Seifert" + IDS_ABOUT_ABOUTTEXTss "\r\nWinDirStat - Verzeichnisstatistik\r\n\r\nZeigt an, wo all der Plattenplatz geblieben ist,\r\nund hilft aufzuräumen.\r\n\r\nNeu programmiert für MS Windows von\r\nBernhard Seifert (mailto:%1!s!),\r\n\r\nauf Grundlage von Stefan Hundhammers KDE (Linux)-Programm KDirStat\r\n(http://kdirstat.sourceforge.net/).\r\n\r\nWinDirStats Homepage ist http://%2!s!/\r\n\r\nCopyright (c) 2003-2004 Bernhard Seifert" IDS_ABOUT_THANKSTOTEXT "\r\nStefan Hundhammer für sein vorzügliches Linux-Tool KDirStat.\r\nKDirStat (2.3.7) als Vorlage zu nehmen hat mir eine Menge Zeit gespart.\r\nhttp://kdirstat.sourceforge.net/\r\n\r\nDen Autoren von SequoiaView, die gezeigt haben, wie nützlich Baumkarten sein können.\r\nhttp://www.win.tue.nl/sequoiaview/\r\n\r\nJarke J. van Wijk, Huub van de Wetering, Mark Bruls und Kees Huizing\r\nfür ihre Dokumente über ""Cushion Treemaps"" und ""Squarified Treemaps"".\r\nhttp://www.win.tue.nl/~vanwijk/\r\n\r\nBen Shneiderman für seine geniale Erfindung von Treemaps -\r\neiner wirklich intuitiven Art und Weise, Bäume zu visualisieren.\r\nhttp://www.cs.umd.edu/hcil/treemap-history/\r\n\r\nMeinen Kollegen für ihr Feedback zu den frühen Versionen von WinDirStat.\r\nhttp://www.daccord.net/\r\n\r\nBeatrix Lödige und Nick Lines fürs Betatesten.\r\n" IDS_ABOUT_ABOUT "Über WinDirStat" IDS_ABOUT_THANKSTO "Dank" diff --git a/wdsr040c/resource.h b/wdsr040c/resource.h index 4dc7f0e..4674ac3 100644 --- a/wdsr040c/resource.h +++ b/wdsr040c/resource.h @@ -131,6 +131,7 @@ #define IDC_TREEMAPGRIDCOLOR 1030 #define IDC_SHOWGRID2 1030 #define IDC_SHOWSTRIPES 1030 +#define IDC_FULLROWSELECTION 1031 #define IDC_RESET 1034 #define IDC_LIST 1036 #define IDC_TITLE 1037 diff --git a/wdsr040c/windirstat.rc b/wdsr040c/windirstat.rc index 356d295..319b219 100644 --- a/wdsr040c/windirstat.rc +++ b/wdsr040c/windirstat.rc @@ -464,13 +464,15 @@ BEGIN CONTROL "&Montrer la taille des fichiers en Go/Mo/Ko/octets", IDC_HUMANFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32, 32,229,10 - GROUPBOX "Style de la &liste",IDC_STATIC,30,52,90,45 + GROUPBOX "Style de la &liste",IDC_STATIC,30,52,90,65 + CONTROL "&Full Row Selection",IDC_FULLROWSELECTION,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,38,67,76,10 CONTROL "&Montrer la grille",IDC_SHOWGRID,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,38,65,68,10 + BS_AUTOCHECKBOX | WS_TABSTOP,38,84,68,10 CONTROL "Faire des &rayures",IDC_SHOWSTRIPES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,38,81,68,10 - LTEXT "&Langue",IDC_STATIC,32,109,166,8 - COMBOBOX IDC_COMBO,32,122,156,140,CBS_DROPDOWNLIST | CBS_SORT | + BS_AUTOCHECKBOX | WS_TABSTOP,38,101,68,10 + LTEXT "&Langue",IDC_STATIC,32,129,166,8 + COMBOBOX IDC_COMBO,32,142,156,140,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END diff --git a/windirstat/PageGeneral.cpp b/windirstat/PageGeneral.cpp index cc15141..126081c 100644 --- a/windirstat/PageGeneral.cpp +++ b/windirstat/PageGeneral.cpp @@ -55,6 +55,7 @@ void CPageGeneral::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_FOLLOWMOUNTPOINTS, m_ctlFollowMountPoints); DDX_Check(pDX, IDC_SHOWGRID, m_listGrid); DDX_Check(pDX, IDC_SHOWSTRIPES, m_listStripes); + DDX_Check(pDX, IDC_FULLROWSELECTION, m_listFullRowSelection); } @@ -64,6 +65,7 @@ BEGIN_MESSAGE_MAP(CPageGeneral, CPropertyPage) ON_CBN_SELENDOK(IDC_COMBO, OnCbnSelendokCombo) ON_BN_CLICKED(IDC_SHOWGRID, OnBnClickedListGrid) ON_BN_CLICKED(IDC_SHOWSTRIPES, OnBnClickedListStripes) + ON_BN_CLICKED(IDC_FULLROWSELECTION, OnBnClickedListFullRowSelection) END_MESSAGE_MAP() @@ -74,6 +76,7 @@ BOOL CPageGeneral::OnInitDialog() m_humanFormat= GetOptions()->IsHumanFormat(); m_listGrid= GetOptions()->IsListGrid(); m_listStripes= GetOptions()->IsListStripes(); + m_listFullRowSelection= GetOptions()->IsListFullRowSelection(); m_followMountPoints= GetOptions()->IsFollowMountPoints(); CVolumeApi va; @@ -117,6 +120,7 @@ void CPageGeneral::OnOK() GetOptions()->SetFollowMountPoints(m_followMountPoints); GetOptions()->SetListGrid(m_listGrid); GetOptions()->SetListStripes(m_listStripes); + GetOptions()->SetListFullRowSelection(m_listFullRowSelection); LANGID id= (LANGID)m_combo.GetItemData(m_combo.GetCurSel()); CLanguageOptions::SetLanguage(id); @@ -144,6 +148,11 @@ void CPageGeneral::OnBnClickedListStripes() SetModified(); } +void CPageGeneral::OnBnClickedListFullRowSelection() +{ + SetModified(); +} + void CPageGeneral::OnCbnSelendokCombo() { int i= m_combo.GetCurSel(); diff --git a/windirstat/PageGeneral.h b/windirstat/PageGeneral.h index 5aaae88..0e892da 100644 --- a/windirstat/PageGeneral.h +++ b/windirstat/PageGeneral.h @@ -46,6 +46,7 @@ protected: BOOL m_humanFormat; BOOL m_listGrid; BOOL m_listStripes; + BOOL m_listFullRowSelection; CComboBox m_combo; CButton m_ctlFollowMountPoints; @@ -58,4 +59,5 @@ protected: afx_msg void OnCbnSelendokCombo(); afx_msg void OnBnClickedListGrid(); afx_msg void OnBnClickedListStripes(); + afx_msg void OnBnClickedListFullRowSelection(); }; diff --git a/windirstat/SelectDrivesDlg.cpp b/windirstat/SelectDrivesDlg.cpp index 46c72a0..f88799e 100644 --- a/windirstat/SelectDrivesDlg.cpp +++ b/windirstat/SelectDrivesDlg.cpp @@ -170,11 +170,11 @@ int CDriveItem::GetImage() const return GetMyImageList()->GetFileImage(m_path); } -bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const +bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem == COL_NAME) { - DrawLabel(m_list, GetMyImageList(), pdc, rc, state, width); + DrawLabel(m_list, GetMyImageList(), pdc, rc, state, width, focusLeft); return true; } else if (subitem == COL_GRAPH) @@ -191,7 +191,9 @@ bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *w return true; } - rc.DeflateRect(3, 3); + DrawSelection(m_list, pdc, rc, state); + + rc.DeflateRect(3, 5); DrawPercentage(pdc, rc, m_used, RGB(0,0,170)); @@ -535,6 +537,7 @@ BOOL CSelectDrivesDlg::OnInitDialog() m_list.ShowGrid(GetOptions()->IsListGrid()); m_list.ShowStripes(GetOptions()->IsListStripes()); + m_list.ShowFullRowSelection(GetOptions()->IsListFullRowSelection()); m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_HEADERDRAGDROP); // If we set an ImageList here, OnMeasureItem will have no effect ?! diff --git a/windirstat/SelectDrivesDlg.h b/windirstat/SelectDrivesDlg.h index a21e001..57ce74e 100644 --- a/windirstat/SelectDrivesDlg.h +++ b/windirstat/SelectDrivesDlg.h @@ -55,7 +55,7 @@ public: CString GetDrive() const; bool IsRemote() const; bool IsSUBSTed() const; - virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const; + virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const; virtual CString GetText(int subitem) const; int GetImage() const; diff --git a/windirstat/TreeListControl.cpp b/windirstat/TreeListControl.cpp index 1191027..7913d5c 100644 --- a/windirstat/TreeListControl.cpp +++ b/windirstat/TreeListControl.cpp @@ -61,7 +61,7 @@ CTreeListItem::~CTreeListItem() delete m_vi; } -bool CTreeListItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const +bool CTreeListItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem != 0) return false; @@ -72,7 +72,7 @@ bool CTreeListItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int CRect rcLabel= rc; rcLabel.left= rcNode.right; - DrawLabel(GetTreeListControl(), GetMyImageList(), pdc, rcLabel, state, width, false); + DrawLabel(GetTreeListControl(), GetMyImageList(), pdc, rcLabel, state, width, focusLeft, false); if (width != NULL) { diff --git a/windirstat/TreeListControl.h b/windirstat/TreeListControl.h index 6029d76..e770a6a 100644 --- a/windirstat/TreeListControl.h +++ b/windirstat/TreeListControl.h @@ -60,7 +60,7 @@ public: virtual int CompareSibling(const CTreeListItem *tlib, int subitem) const =0; - virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const; + virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const; virtual CString GetText(int subitem) const; virtual int GetImage() const; virtual int Compare(const CSortingListItem *other, int subitem) const; diff --git a/windirstat/aboutdlg.cpp b/windirstat/aboutdlg.cpp index 44e38da..d1cbd12 100644 --- a/windirstat/aboutdlg.cpp +++ b/windirstat/aboutdlg.cpp @@ -212,8 +212,10 @@ CAboutDlg::CAboutDlg() CString CAboutDlg::GetAppVersion() { + USES_CONVERSION; + CString s; - s.Format(_T("WinDirStat %s"), _T(VN_STRING)); + s.Format(_T("WinDirStat %s"), A2T(VN_STRING)); return s; } diff --git a/windirstat/dirstatview.cpp b/windirstat/dirstatview.cpp index e264268..fadc4ba 100644 --- a/windirstat/dirstatview.cpp +++ b/windirstat/dirstatview.cpp @@ -236,6 +236,7 @@ int CDirstatView::OnCreate(LPCREATESTRUCT lpCreateStruct) m_treeListControl.ShowGrid(GetOptions()->IsListGrid()); m_treeListControl.ShowStripes(GetOptions()->IsListStripes()); + m_treeListControl.ShowFullRowSelection(GetOptions()->IsListFullRowSelection()); m_treeListControl.InsertColumn(COL_NAME, LoadString(IDS_TREECOL_NAME), LVCFMT_LEFT, 200, COL_NAME); m_treeListControl.InsertColumn(COL_SUBTREEPERCENTAGE, LoadString(IDS_TREECOL_SUBTREEPERCENTAGE), LVCFMT_RIGHT, CItem::GetSubtreePercentageWidth(), COL_SUBTREEPERCENTAGE); @@ -325,6 +326,7 @@ void CDirstatView::OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint) case HINT_LISTSTYLECHANGED: m_treeListControl.ShowGrid(GetOptions()->IsListGrid()); m_treeListControl.ShowStripes(GetOptions()->IsListStripes()); + m_treeListControl.ShowFullRowSelection(GetOptions()->IsListFullRowSelection()); break; case HINT_SOMEWORKDONE: diff --git a/windirstat/item.cpp b/windirstat/item.cpp index f036027..3a5bd67 100644 --- a/windirstat/item.cpp +++ b/windirstat/item.cpp @@ -34,7 +34,7 @@ namespace CString GetFreeSpaceItemName() { return LoadString(IDS_FREESPACE_ITEM); } CString GetUnknownItemName() { return LoadString(IDS_UNKNOWN_ITEM); } - const SIZE sizeDeflatePacman = { 0, 2 }; + const SIZE sizeDeflatePacman = { 1, 2 }; } @@ -72,11 +72,11 @@ CItem::~CItem() delete m_children[i]; } -bool CItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const +bool CItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem == COL_NAME) { - return CTreeListItem::DrawSubitem(subitem, pdc, rc, state, width); + return CTreeListItem::DrawSubitem(subitem, pdc, rc, state, width, focusLeft); } if (subitem != COL_SUBTREEPERCENTAGE) return false; @@ -95,14 +95,16 @@ bool CItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) return true; } + DrawSelection(GetTreeListControl(), pdc, rc, state); + if (showReadJobs) { rc.DeflateRect(sizeDeflatePacman); - DrawPacman(pdc, rc, GetTreeListControl()->GetItemBackgroundColor(this)); + DrawPacman(pdc, rc, GetTreeListControl()->GetItemSelectionBackgroundColor(this)); } else { - rc.DeflateRect(2, 3); + rc.DeflateRect(2, 5); for (int i=0; i < GetIndent(); i++) rc.left+= rc.Width() / 10; @@ -1485,6 +1487,6 @@ void CItem::DrivePacman() CClientDC dc(GetTreeListControl()); CRect rc= GetTreeListControl()->GetWholeSubitemRect(i, COL_SUBTREEPERCENTAGE); rc.DeflateRect(sizeDeflatePacman); - DrawPacman(&dc, rc, GetTreeListControl()->GetItemBackgroundColor(i)); + DrawPacman(&dc, rc, GetTreeListControl()->GetItemSelectionBackgroundColor(i)); } diff --git a/windirstat/item.h b/windirstat/item.h index 7603a08..a8946c4 100644 --- a/windirstat/item.h +++ b/windirstat/item.h @@ -107,7 +107,7 @@ public: ~CItem(); // CTreeListItem Interface - virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const; + virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const; virtual CString GetText(int subitem) const; virtual int CompareSibling(const CTreeListItem *tlib, int subitem) const; virtual int GetChildrenCount() const; diff --git a/windirstat/options.cpp b/windirstat/options.cpp index c1caf85..12e13b4 100644 --- a/windirstat/options.cpp +++ b/windirstat/options.cpp @@ -60,6 +60,7 @@ namespace const LPCTSTR sectionOptions = _T("options"); const LPCTSTR entryListGrid = _T("treelistGrid"); // for compatibility with 1.0.1, this entry is named treelistGrid. const LPCTSTR entryListStripes = _T("listStripes"); + const LPCTSTR entryListFullRowSelection = _T("listFullRowSelection"); const LPCTSTR entryTreelistColorCount = _T("treelistColorCount"); const LPCTSTR entryTreelistColorN = _T("treelistColor%d"); const LPCTSTR entryHumanFormat = _T("humanFormat"); @@ -568,6 +569,20 @@ void COptions::SetListStripes(bool show) } } +bool COptions::IsListFullRowSelection() +{ + return m_listFullRowSelection; +} + +void COptions::SetListFullRowSelection(bool show) +{ + if (m_listFullRowSelection != show) + { + m_listFullRowSelection= show; + GetDocument()->UpdateAllViews(NULL, HINT_LISTSTYLECHANGED); + } +} + void COptions::GetTreelistColors(COLORREF color[TREELISTCOLORCOUNT]) { for (int i=0; i < TREELISTCOLORCOUNT; i++) @@ -783,6 +798,7 @@ void COptions::SaveToRegistry() { SetProfileBool(sectionOptions, entryListGrid, m_listGrid); SetProfileBool(sectionOptions, entryListStripes, m_listStripes); + SetProfileBool(sectionOptions, entryListFullRowSelection, m_listFullRowSelection); SetProfileInt(sectionOptions, entryTreelistColorCount, m_treelistColorCount); for (int i=0; i < TREELISTCOLORCOUNT; i++) @@ -836,6 +852,7 @@ void COptions::LoadFromRegistry() { m_listGrid= GetProfileBool(sectionOptions, entryListGrid, false); m_listStripes= GetProfileBool(sectionOptions, entryListStripes, false); + m_listFullRowSelection= GetProfileBool(sectionOptions, entryListFullRowSelection, true); m_treelistColorCount= GetProfileInt(sectionOptions, entryTreelistColorCount, 4); CheckRange(m_treelistColorCount, 1, TREELISTCOLORCOUNT); @@ -848,7 +865,7 @@ void COptions::LoadFromRegistry() m_humanFormat= GetProfileBool(sectionOptions, entryHumanFormat, true); m_pacmanAnimation= GetProfileBool(sectionOptions, entryPacmanAnimation, true); m_showTimeSpent= GetProfileBool(sectionOptions, entryShowTimeSpent, false); - m_treemapHighlightColor= GetProfileInt(sectionOptions, entryTreemapHighlightColor, RGB(0,255,255)); + m_treemapHighlightColor= GetProfileInt(sectionOptions, entryTreemapHighlightColor, RGB(255,255,255)); ReadTreemapOptions(); diff --git a/windirstat/options.h b/windirstat/options.h index 5278995..eb25849 100644 --- a/windirstat/options.h +++ b/windirstat/options.h @@ -196,6 +196,9 @@ public: bool IsListStripes(); void SetListStripes(bool show); + bool IsListFullRowSelection(); + void SetListFullRowSelection(bool show); + void GetTreelistColors(COLORREF color[TREELISTCOLORCOUNT]); void SetTreelistColors(const COLORREF color[TREELISTCOLORCOUNT]); COLORREF GetTreelistColor(int i); @@ -249,6 +252,7 @@ private: bool m_listGrid; bool m_listStripes; + bool m_listFullRowSelection; COLORREF m_treelistColor[TREELISTCOLORCOUNT]; int m_treelistColorCount; bool m_humanFormat; diff --git a/windirstat/ownerdrawnlistcontrol.cpp b/windirstat/ownerdrawnlistcontrol.cpp index 485a42f..354af35 100644 --- a/windirstat/ownerdrawnlistcontrol.cpp +++ b/windirstat/ownerdrawnlistcontrol.cpp @@ -32,8 +32,8 @@ namespace { const int TEXT_X_MARGIN = 6; // Horizontal distance of the text from the edge of the item rectangle - const UINT LABEL_INFLATE_CX = 3;// How much the label is enlarged, to get the selection and - const UINT LABEL_INFLATE_CY = 2;// focus rectangle + const UINT LABEL_INFLATE_CX = 3;// How much the label is enlarged, to get the selection and focus rectangle + const UINT LABEL_Y_MARGIN = 2; const UINT GENERAL_INDENT = 5; } @@ -48,10 +48,8 @@ COwnerDrawnListItem::~COwnerDrawnListItem() { } -void COwnerDrawnListItem::DrawLabel(COwnerDrawnListControl *list, CImageList *il, CDC *pdc, CRect& rc, UINT state, int *width, bool indent) const +void COwnerDrawnListItem::DrawLabel(COwnerDrawnListControl *list, CImageList *il, CDC *pdc, CRect& rc, UINT state, int *width, int *focusLeft, bool indent) const { - bool haveFocus = (GetFocus() == list->m_hWnd); - CRect rcRest= rc; if (indent) rcRest.left+= GENERAL_INDENT; @@ -77,28 +75,31 @@ void COwnerDrawnListItem::DrawLabel(COwnerDrawnListControl *list, CImageList *il CRect rcLabel= rcRest; pdc->DrawText(GetText(0), rcLabel, DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_CALCRECT); - rcLabel.top= rcRest.top + (rcRest.bottom - rcLabel.bottom); - rcLabel.InflateRect(LABEL_INFLATE_CX, LABEL_INFLATE_CY); + + rcLabel.InflateRect(LABEL_INFLATE_CX, 0); + rcLabel.top= rcRest.top + LABEL_Y_MARGIN; + rcLabel.bottom= rcRest.bottom - LABEL_Y_MARGIN; CSetBkMode bk(pdc, TRANSPARENT); COLORREF textColor= GetSysColor(COLOR_WINDOWTEXT); - if (width == NULL && (state & ODS_SELECTED) != 0 && (haveFocus || (list->GetStyle() & LVS_SHOWSELALWAYS) != 0)) + if (width == NULL && (state & ODS_SELECTED) != 0 && (list->HasFocus() || list->IsShowSelectionAlways())) { - static const COLORREF nonFocusBgColor = RGB(120, 120, 120); // RGB(190,190,190): this would be Windows conforming, but has too little contrast. - static const COLORREF nonFocusTextColor = RGB(255,255,255); // RGB(0,0,0) - COLORREF bgColor= (haveFocus ? GetSysColor(COLOR_HIGHLIGHT) : nonFocusBgColor); - pdc->FillSolidRect(rcLabel, bgColor); - textColor= (haveFocus ? GetSysColor(COLOR_HIGHLIGHTTEXT) : nonFocusTextColor); + textColor= list->GetHighlightTextColor(); + + CRect selection= rcLabel; + if (list->IsFullRowSelection()) + selection.right= rc.right; + pdc->FillSolidRect(selection, list->GetHighlightColor()); } CSetTextColor stc(pdc, textColor); if (width == NULL) pdc->DrawText(GetText(0), rcRest, DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS); - else - pdc->DrawText(GetText(0), rcRest, DT_SINGLELINE | DT_VCENTER | DT_CALCRECT); rcLabel.InflateRect(1, 1); + + *focusLeft= rcLabel.left; - if ((state & ODS_FOCUS) != 0 && haveFocus && width == NULL) + if ((state & ODS_FOCUS) != 0 && list->HasFocus() && width == NULL && !list->IsFullRowSelection()) pdc->DrawFocusRect(rcLabel); if (width == NULL) @@ -111,6 +112,19 @@ void COwnerDrawnListItem::DrawLabel(COwnerDrawnListControl *list, CImageList *il *width= rcLabel.Width() + 5; // Don't know, why +5 } +void COwnerDrawnListItem::DrawSelection(COwnerDrawnListControl *list, CDC *pdc, CRect rc, UINT state) const +{ + if (!list->IsFullRowSelection()) + return; + if (!list->HasFocus() && !list->IsShowSelectionAlways()) + return; + if ((state & ODS_SELECTED) == 0) + return; + + rc.DeflateRect(0, LABEL_Y_MARGIN); + pdc->FillSolidRect(rc, list->GetHighlightColor()); +} + void COwnerDrawnListItem::DrawPercentage(CDC *pdc, CRect rc, double fraction, COLORREF color) const { const int LIGHT = 198; // light edge @@ -151,6 +165,7 @@ COwnerDrawnListControl::COwnerDrawnListControl(LPCTSTR name, int rowHeight) m_rowHeight= rowHeight; m_showGrid= false; m_showStripes= false; + m_showFullRowSelection= false; InitializeColors(); } @@ -208,16 +223,58 @@ void COwnerDrawnListControl::ShowStripes(bool show) InvalidateRect(NULL); } +void COwnerDrawnListControl::ShowFullRowSelection(bool show) +{ + m_showFullRowSelection= show; + if (IsWindow(m_hWnd)) + InvalidateRect(NULL); +} + +bool COwnerDrawnListControl::IsFullRowSelection() +{ + return m_showFullRowSelection; +} + +// Normal window background color COLORREF COwnerDrawnListControl::GetWindowColor() { return m_windowColor; } +// Shaded window background color (for stripes) COLORREF COwnerDrawnListControl::GetStripeColor() { return m_stripeColor; } +// Highlight color if we have no focus +COLORREF COwnerDrawnListControl::GetNonFocusHighlightColor() +{ + return RGB(190,190,190); //RGB(120, 120, 120): more contrast +} + +// Highlight text color if we have no focus +COLORREF COwnerDrawnListControl::GetNonFocusHighlightTextColor() +{ + return RGB(0,0,0); // RGB(255,255,255): more contrast +} + +COLORREF COwnerDrawnListControl::GetHighlightColor() +{ + if (HasFocus()) + return GetSysColor(COLOR_HIGHLIGHT); + else + return GetNonFocusHighlightColor(); +} + +COLORREF COwnerDrawnListControl::GetHighlightTextColor() +{ + if (HasFocus()) + return GetSysColor(COLOR_HIGHLIGHTTEXT); + else + return GetNonFocusHighlightTextColor(); +} + bool COwnerDrawnListControl::IsItemStripeColor(int i) { return (m_showStripes && (i % 2 != 0)); @@ -238,6 +295,29 @@ COLORREF COwnerDrawnListControl::GetItemBackgroundColor(const COwnerDrawnListIte return GetItemBackgroundColor(FindListItem(item)); } +COLORREF COwnerDrawnListControl::GetItemSelectionBackgroundColor(int i) +{ + bool selected = (GetItemState(i, LVIS_SELECTED) & LVIS_SELECTED) != 0; + if (selected && IsFullRowSelection() && (HasFocus() || IsShowSelectionAlways())) + return GetHighlightColor(); + else + return GetItemBackgroundColor(i); +} + +COLORREF COwnerDrawnListControl::GetItemSelectionBackgroundColor(const COwnerDrawnListItem *item) +{ + return GetItemSelectionBackgroundColor(FindListItem(item)); +} + +COLORREF COwnerDrawnListControl::GetItemSelectionTextColor(int i) +{ + bool selected = (GetItemState(i, LVIS_SELECTED) & LVIS_SELECTED) != 0; + if (selected && IsFullRowSelection() && (HasFocus() || IsShowSelectionAlways())) + return GetHighlightTextColor(); + else + return GetSysColor(COLOR_WINDOWTEXT); +} + int COwnerDrawnListControl::GetTextXMargin() { return TEXT_X_MARGIN; @@ -312,27 +392,53 @@ void COwnerDrawnListControl::DrawItem(LPDRAWITEMSTRUCT pdis) dcmem.FillSolidRect(rcItem - rcItem.TopLeft(), GetItemBackgroundColor(pdis->itemID)); - for (int i=0; i < GetHeaderCtrl()->GetItemCount(); i++) + bool drawFocus = (pdis->itemState & ODS_FOCUS) != 0 && HasFocus() && IsFullRowSelection(); + + CArray<int, int> order; + order.SetSize(GetHeaderCtrl()->GetItemCount()); + GetHeaderCtrl()->GetOrderArray(order.GetData(), order.GetSize()); + + CRect rcFocus= rcItem; + rcFocus.DeflateRect(0, LABEL_Y_MARGIN - 1); + + for (int i=0; i < order.GetSize(); i++) { - CRect rc= GetWholeSubitemRect(pdis->itemID, i); + int subitem = order[i]; + + CRect rc= GetWholeSubitemRect(pdis->itemID, subitem); CRect rcDraw= rc - rcItem.TopLeft(); - if (!item->DrawSubitem(i, &dcmem, rcDraw, pdis->itemState, NULL)) + int focusLeft= rcDraw.left; + if (!item->DrawSubitem(subitem, &dcmem, rcDraw, pdis->itemState, NULL, &focusLeft)) { + item->DrawSelection(this, &dcmem, rcDraw, pdis->itemState); + CRect rcText= rcDraw; rcText.DeflateRect(TEXT_X_MARGIN, 0); CSetBkMode bk(&dcmem, TRANSPARENT); CSelectObject sofont(&dcmem, GetFont()); - CString s= item->GetText(i); - UINT align= IsColumnRightAligned(i) ? DT_RIGHT : DT_LEFT; - CSetTextColor tc(&dcmem, GetSysColor(COLOR_WINDOWTEXT)); + CString s= item->GetText(subitem); + UINT align= IsColumnRightAligned(subitem) ? DT_RIGHT : DT_LEFT; + + CSetTextColor tc(&dcmem, GetItemSelectionTextColor(pdis->itemID)); dcmem.DrawText(s, rcText, DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | align); // Test: dcmem.FillSolidRect(rcDraw, 0); } + + if (focusLeft > rcDraw.left) + { + if (drawFocus && i > 0) + pdc->DrawFocusRect(rcFocus); + rcFocus.left= focusLeft; + } + rcFocus.right= rcDraw.right; pdc->BitBlt(rcItem.left + rcDraw.left, rcItem.top + rcDraw.top, rcDraw.Width(), rcDraw.Height(), &dcmem, rcDraw.left, rcDraw.top, SRCCOPY); } + + if (drawFocus) + pdc->DrawFocusRect(rcFocus); } bool COwnerDrawnListControl::IsColumnRightAligned(int col) @@ -375,6 +481,16 @@ CRect COwnerDrawnListControl::GetWholeSubitemRect(int item, int subitem) return rc; } +bool COwnerDrawnListControl::HasFocus() +{ + return ::GetFocus() == m_hWnd; +} + +bool COwnerDrawnListControl::IsShowSelectionAlways() +{ + return (GetStyle() & LVS_SHOWSELALWAYS) != 0; +} + int COwnerDrawnListControl::GetSubItemWidth(COwnerDrawnListItem *item, int subitem) { int width; @@ -382,7 +498,8 @@ int COwnerDrawnListControl::GetSubItemWidth(COwnerDrawnListItem *item, int subit CClientDC dc(this); CRect rc(0, 0, 1000, 1000); - if (item->DrawSubitem(subitem, &dc, rc, 0, &width)) + int dummy= rc.left; + if (item->DrawSubitem(subitem, &dc, rc, 0, &width, &dummy)) return width; CString s= item->GetText(subitem); diff --git a/windirstat/ownerdrawnlistcontrol.h b/windirstat/ownerdrawnlistcontrol.h index b5a930c..b055363 100644 --- a/windirstat/ownerdrawnlistcontrol.h +++ b/windirstat/ownerdrawnlistcontrol.h @@ -39,12 +39,20 @@ public: COwnerDrawnListItem(); virtual ~COwnerDrawnListItem(); + // This text is drawn, if DrawSubitem returns false virtual CString GetText(int subitem) const =0; - virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const =0; + + // Returnvalue is true, if the item draws itself. + // whith != NULL -> only determine width, do not draw. + // If focus rectangle shall not begin leftmost, set *focusLeft + // to the left edge of the desired focus rectangle. + virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const =0; + virtual void DrawAdditionalState(CDC * /*pdc*/, const CRect& /*rcLabel*/) const {} + void DrawSelection(COwnerDrawnListControl *list, CDC *pdc, CRect rc, UINT state) const; protected: - void DrawLabel(COwnerDrawnListControl *list, CImageList *il, CDC *pdc, CRect& rc, UINT state, int *width, bool indent = true) const; + void DrawLabel(COwnerDrawnListControl *list, CImageList *il, CDC *pdc, CRect& rc, UINT state, int *width, int *focusLeft, bool indent = true) const; void DrawPercentage(CDC *pdc, CRect rc, double fraction, COLORREF color) const; }; @@ -65,14 +73,24 @@ public: int GetRowHeight(); void ShowGrid(bool show); void ShowStripes(bool show); + void ShowFullRowSelection(bool show); + bool IsFullRowSelection(); COLORREF GetWindowColor(); COLORREF GetStripeColor(); + COLORREF GetNonFocusHighlightColor(); + COLORREF GetNonFocusHighlightTextColor(); + COLORREF GetHighlightColor(); + COLORREF GetHighlightTextColor(); + bool IsItemStripeColor(int i); bool IsItemStripeColor(const COwnerDrawnListItem *item); COLORREF GetItemBackgroundColor(int i); COLORREF GetItemBackgroundColor(const COwnerDrawnListItem *item); - + COLORREF GetItemSelectionBackgroundColor(int i); + COLORREF GetItemSelectionBackgroundColor(const COwnerDrawnListItem *item); + COLORREF GetItemSelectionTextColor(int i); + COwnerDrawnListItem *GetItem(int i); int FindListItem(const COwnerDrawnListItem *item); int GetTextXMargin(); @@ -80,6 +98,9 @@ public: void AdjustColumnWidth(int col); CRect GetWholeSubitemRect(int item, int subitem); + bool HasFocus(); + bool IsShowSelectionAlways(); + protected: void InitializeColors(); virtual void DrawItem(LPDRAWITEMSTRUCT pdis); @@ -89,6 +110,7 @@ protected: int m_rowHeight; // Height of an item bool m_showGrid; // Whether to draw a grid bool m_showStripes; // Whether to show stripes + bool m_showFullRowSelection; // Whether to draw full row selection int m_yFirstItem; // Top of a first list item COLORREF m_windowColor; // The default background color if !m_showStripes COLORREF m_stripeColor; // The stripe color, used for every other item if m_showStripes diff --git a/windirstat/resource.h b/windirstat/resource.h index 4dc7f0e..6fcb50b 100644 --- a/windirstat/resource.h +++ b/windirstat/resource.h @@ -131,6 +131,8 @@ #define IDC_TREEMAPGRIDCOLOR 1030 #define IDC_SHOWGRID2 1030 #define IDC_SHOWSTRIPES 1030 +#define IDC_SHOWGRID3 1031 +#define IDC_FULLROWSELECTION 1031 #define IDC_RESET 1034 #define IDC_LIST 1036 #define IDC_TITLE 1037 diff --git a/windirstat/typeview.cpp b/windirstat/typeview.cpp index b0379a6..a5e9fce 100644 --- a/windirstat/typeview.cpp +++ b/windirstat/typeview.cpp @@ -41,11 +41,11 @@ CExtensionListControl::CListItem::CListItem(CExtensionListControl *list, LPCTSTR m_image= -1; } -bool CExtensionListControl::CListItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const +bool CExtensionListControl::CListItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem == COL_EXTENSION) { - DrawLabel(m_list, GetMyImageList(), pdc, rc, state, width); + DrawLabel(m_list, GetMyImageList(), pdc, rc, state, width, focusLeft); } else if (subitem == COL_COLOR) { @@ -59,7 +59,7 @@ bool CExtensionListControl::CListItem::DrawSubitem(int subitem, CDC *pdc, CRect return true; } -void CExtensionListControl::CListItem::DrawColor(CDC *pdc, CRect rc, UINT /*state*/, int *width) const +void CExtensionListControl::CListItem::DrawColor(CDC *pdc, CRect rc, UINT state, int *width) const { if (width != NULL) { @@ -67,6 +67,8 @@ void CExtensionListControl::CListItem::DrawColor(CDC *pdc, CRect rc, UINT /*stat return; } + DrawSelection(m_list, pdc, rc, state); + rc.DeflateRect(2, 3); if (rc.right <= rc.left || rc.bottom <= rc.top) @@ -278,7 +280,7 @@ void CExtensionListControl::SelectExtension(LPCTSTR ext) } if (i < GetItemCount()) { - SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); + SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); EnsureVisible(i, false); } } @@ -408,6 +410,7 @@ int CTypeView::OnCreate(LPCREATESTRUCT lpCreateStruct) m_extensionListControl.ShowGrid(GetOptions()->IsListGrid()); m_extensionListControl.ShowStripes(GetOptions()->IsListStripes()); + m_extensionListControl.ShowFullRowSelection(GetOptions()->IsListFullRowSelection()); m_extensionListControl.Initialize(); return 0; @@ -462,6 +465,7 @@ void CTypeView::OnUpdate(CView * /*pSender*/, LPARAM lHint, CObject *) case HINT_LISTSTYLECHANGED: m_extensionListControl.ShowGrid(GetOptions()->IsListGrid()); m_extensionListControl.ShowStripes(GetOptions()->IsListStripes()); + m_extensionListControl.ShowFullRowSelection(GetOptions()->IsListFullRowSelection()); break; default: diff --git a/windirstat/typeview.h b/windirstat/typeview.h index 8abfb80..2776730 100644 --- a/windirstat/typeview.h +++ b/windirstat/typeview.h @@ -48,7 +48,7 @@ protected: public: CListItem(CExtensionListControl *list, LPCTSTR extension, SExtensionRecord r); - virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width) const; + virtual bool DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const; virtual CString GetText(int subitem) const; CString GetExtension() const; diff --git a/windirstat/windirstat.rc b/windirstat/windirstat.rc index 6288eb2..4825b16 100644 --- a/windirstat/windirstat.rc +++ b/windirstat/windirstat.rc @@ -36,8 +36,8 @@ END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" - "#include ""../common/version.h""\r\n" - "\0" + "#include ""../common/version.h""\r\n" + "\0" END 3 TEXTINCLUDE @@ -450,13 +450,15 @@ BEGIN "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 - GROUPBOX "&List Style",IDC_STATIC,30,52,90,45 + GROUPBOX "&List Style",IDC_STATIC,30,52,90,65 + CONTROL "&Full Row Selection",IDC_FULLROWSELECTION,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,38,67,75,10 CONTROL "Show &Grid",IDC_SHOWGRID,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,38,65,68,10 + WS_TABSTOP,38,84,68,10 CONTROL "Show S&tripes",IDC_SHOWSTRIPES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,38,81,68,10 - LTEXT "&Language",IDC_STATIC,32,115,166,8 - COMBOBOX IDC_COMBO,32,128,156,140,CBS_DROPDOWNLIST | CBS_SORT | + WS_TABSTOP,38,101,68,10 + LTEXT "&Language",IDC_STATIC,32,135,166,8 + COMBOBOX IDC_COMBO,32,148,156,140,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -520,7 +522,6 @@ BEGIN END - ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -757,7 +758,7 @@ END STRINGTABLE BEGIN IDS_RESOURCEVERSION "Resource Version 3" - 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\nFrench translation: Pascal Delrot (mailto:tigroo@users.sourceforge.net).\r\n\r\nCopyright (c) 2003-2004 Bernhard Seifert" + 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-2004 Bernhard Seifert" 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\r\nBeatrix Lödige and Nick Lines for beta testing.\r\n" IDS_ABOUT_ABOUT "About" IDS_ABOUT_THANKSTO "Thanks To" |