[Mono-list] ListViewItemSorter property for FileDialog to folow .Net functions

Petit Eric surfzoid at gmail.com
Tue Sep 16 16:51:23 EDT 2008


Hi
i add the listview item comparer for FileDialog, like this in a FSdlg,
yu can click to a collumn header (details view) to change the order,
like in .NET.
a perfect think, should be to add "order by group".

At this time, this patch provide similar way as .NET, except for one
thing, with .NET that work as it, yu click on the first column header
it  order asc and class by the first column item, yu click on the 2th
column header, it order asc and class by the 2th clm header.
Mine patch, change order asc/desc, each time yu click on a column, it
will need to copy paste my method for each column and dont continu to
use the same click event void to use my order function/class.


[root at SurfzoidPC System.Windows.Forms]# svn diff FileDialog.cs
Index: FileDialog.cs
===================================================================
--- FileDialog.cs       (révision 113212)
+++ FileDialog.cs       (copie de travail)
@@ -360,6 +360,9 @@
                        mwfFileView.SelectedFileChanged += new
EventHandler (OnSelectedFileChangedFileView);
                        mwfFileView.ForceDialogEnd += new EventHandler
(OnForceDialogEndFileView);
                        mwfFileView.SelectedFilesChanged += new
EventHandler (OnSelectedFilesChangedFileView);
+
+                       //Add Column click event for manual sorting. line 379
+                       mwfFileView.ColumnClick += new
System.Windows.Forms.ColumnClickEventHandler(mwfFileView_ColumnClick);

                        dirComboBox.DirectoryChanged += new
EventHandler (OnDirectoryChangedDirComboBox);
                        popupButtonPanel.DirectoryChanged += new
EventHandler (OnDirectoryChangedPopupButtonPanel);
@@ -373,6 +376,25 @@
 #endif
                }

+               bool AscDesc = true;
+               private void mwfFileView_ColumnClick(object sender,
ColumnClickEventArgs e)
+               {
+                       try
+                       {
+                               AscDesc = !AscDesc;
+
+                               // Set the ListViewItemSorter property
to a new ListViewItemComparer object.
+                               mwfFileView.ListViewItemSorter = new
ListViewItemComparer(e.Column, AscDesc);
+                               // Call the sort method to manually sort.
+                               mwfFileView.Sort();
+
+                       }
+                       catch (Exception ex)
+                       {
+                               Console.WriteLine(DateTime.Now + ": "
+ ex.Message + Environment.NewLine + ex.StackTrace);
+                       }
+               }
+
                [DefaultValue(true)]
                public bool AddExtension {
                        get {
@@ -2198,6 +2220,41 @@
        }
        #endregion

+       #region ListViewItemComparer Added by surfzoid at gmail.com
+    // Implements the manual sorting of items by column.
+    class ListViewItemComparer : IComparer
+    {
+               private int col;
+               private bool AscDescInternal;
+               public ListViewItemComparer()
+               {
+                       col = 0;
+               }
+
+               public ListViewItemComparer(int column, bool AscDesc)
+               {
+                       col = column;
+                       AscDescInternal = AscDesc;
+               }
+               public int Compare(object x, object y)
+               {
+                       int returnVal = -1;
+                       if (AscDescInternal == true)
+                       {
+                               returnVal =
String.Compare(((ListViewItem)x).SubItems[col].Text,
+                               ((ListViewItem)y).SubItems[col].Text);
+                       }
+
+                       else
+                       {
+                               returnVal =
String.Compare(((ListViewItem)y).SubItems[col].Text,
+                               ((ListViewItem)x).SubItems[col].Text);
+                       }
+               return returnVal;
+               }
+       }
+    #endregion
+
        #region MWFFileView

        internal class MWFFileView : ListView
@@ -2333,14 +2390,14 @@
                        columns [1] = CreateColumnHeader ("Size ", 80,
HorizontalAlignment.Right);
                        columns [2] = CreateColumnHeader (" Type",
100, HorizontalAlignment.Left);
                        columns [3] = CreateColumnHeader (" Last
Access", 150, HorizontalAlignment.Left);
-
+
                        AllowColumnReorder = true;

                        ResumeLayout (false);

                        KeyDown += new KeyEventHandler (MWF_KeyDown);
                }
-
+
                ColumnHeader CreateColumnHeader (string text, int
width, HorizontalAlignment alignment)
                {
                        ColumnHeader col = new ColumnHeader ();


-- 

Cordially.

Small Eric Quotations of the days:
---------------------------------------------------------------------------
If one day one reproaches you that your work is not a work of
professional, say you that:
Amateurs built the arch of Noah, and professionals the Titanic.
---------------------------------------------------------------------------

Few people are done for independence, it is the privilege of the powerful ones.
---------------------------------------------------------------------------

No key was wounded during the drafting of this message.


More information about the Mono-list mailing list