2008-09-25 Carlos Alberto Cortez <calberto.cortez@gmail.com>
authorCarlos Alberto Cortez <calberto.cortez@gmail.com>
Thu, 25 Sep 2008 15:33:59 +0000 (15:33 -0000)
committerCarlos Alberto Cortez <calberto.cortez@gmail.com>
Thu, 25 Sep 2008 15:33:59 +0000 (15:33 -0000)
* FileDialog.cs: Implement basic support for sorting by columns in
Details view. Patch by Eric Petit.
Fixes #428006.

svn path=/trunk/mcs/; revision=114082

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/FileDialog.cs

index 00153e461bf9fb8ad2ff3a40636d8208bc3d8422..86b1b31104d1d9a558774be9a2f2c71640a7b984 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-25  Carlos Alberto Cortez <calberto.cortez@gmail.com> 
+
+       * FileDialog.cs: Implement basic support for sorting by columns in
+       Details view. Patch by Eric Petit.
+       Fixes #428006.
+
 2008-09-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * ThemeWin32Classis.cs: When drawing gridlines take into account the
index 5091c171997aeb420a8157d732c1144ee1bc8009..9f2a98fe910c7920d6a2597a744b145065a94e16 100644 (file)
@@ -23,6 +23,7 @@
 //
 //  Alexander Olk      alex.olk@googlemail.com
 //  Gert Driesen (drieseng@users.sourceforge.net)
+//  Eric Petit (surfzoid2002@yahoo.fr)
 //
 // TODO:
 // Keyboard shortcuts (DEL, F5, F2)
@@ -88,6 +89,7 @@ namespace System.Windows.Forms
                private ComboBox fileNameComboBox;
                private Label fileNameLabel;
                private MWFFileView mwfFileView;
+               private MwfFileViewItemComparer file_view_comparer;
                private Label searchSaveLabel;
                private ToolBarButton newdirToolBarButton;
                private ToolBarButton backToolBarButton;
@@ -364,10 +366,11 @@ namespace System.Windows.Forms
                        mwfFileView.SelectedFileChanged += new EventHandler (OnSelectedFileChangedFileView);
                        mwfFileView.ForceDialogEnd += new EventHandler (OnForceDialogEndFileView);
                        mwfFileView.SelectedFilesChanged += new EventHandler (OnSelectedFilesChangedFileView);
+                       mwfFileView.ColumnClick += new ColumnClickEventHandler(OnColumnClickFileView);
                        
                        dirComboBox.DirectoryChanged += new EventHandler (OnDirectoryChangedDirComboBox);
                        popupButtonPanel.DirectoryChanged += new EventHandler (OnDirectoryChangedPopupButtonPanel);
-                       
+
                        readonlyCheckBox.CheckedChanged += new EventHandler (OnCheckCheckChanged);
 #if NET_2_0
                        form.FormClosed += new FormClosedEventHandler (OnFileDialogFormClosed);
@@ -1211,7 +1214,21 @@ namespace System.Windows.Forms
                        HandleFormClosedEvent (sender);
                }
 #endif
-               
+
+               private void OnColumnClickFileView (object sender, ColumnClickEventArgs e)
+               {
+                       if (file_view_comparer == null)
+                               file_view_comparer = new MwfFileViewItemComparer (true);
+
+                       file_view_comparer.ColumnIndex = e.Column;
+                       file_view_comparer.Ascendent = !file_view_comparer.Ascendent;
+
+                       if (mwfFileView.ListViewItemSorter == null)
+                               mwfFileView.ListViewItemSorter = file_view_comparer;
+                       else
+                               mwfFileView.Sort ();
+               }
+
                void HandleFormClosedEvent (object sender)
                {
                        if (!disable_form_closed_event)
@@ -2890,8 +2907,10 @@ namespace System.Windows.Forms
 
                        if (View == View.Details)
                                Columns.AddRange (columns);
-                       else
+                       else {
+                               ListViewItemSorter = null;
                                Columns.Clear ();
+                       }
 
                        EndUpdate ();
                }
@@ -3053,8 +3072,56 @@ namespace System.Windows.Forms
                        }
                }
        }
+
        #endregion
        
+       #region MwfFileViewItemComparer
+       class MwfFileViewItemComparer : IComparer
+       {
+               int column_index;
+               bool asc;
+
+               public MwfFileViewItemComparer (bool asc)
+               {
+                       this.asc = asc;
+               }
+
+               public int ColumnIndex {
+                       get {
+                               return column_index;
+                       }
+                       set {
+                               column_index = value;
+                       }
+               }
+
+               public bool Ascendent {
+                       get {
+                               return asc;
+                       }
+                       set {
+                               asc = value;
+                       }
+               }
+
+               public int Compare (object a, object b)
+               {
+                       ListViewItem item_a = (ListViewItem)a;
+                       ListViewItem item_b = (ListViewItem)b;
+
+                       int retval;
+                       if (asc)
+                               retval = String.Compare (item_a.SubItems [column_index].Text, 
+                                               item_b.SubItems [column_index].Text);
+                       else
+                               retval = String.Compare (item_b.SubItems [column_index].Text,
+                                               item_a.SubItems [column_index].Text);
+
+                       return retval;
+               }
+       }
+       #endregion
+
        #region IUpdateFolder
        internal interface IUpdateFolder
        {