[dconf-editor] Move sorting logic to BrowserView



commit 3bde5bd2cf77b70c378d2863ef5b5d98842d05e2
Author: Davi da Silva Böger <dsboger gmail com>
Date:   Sun Dec 3 15:57:23 2017 -0200

    Move sorting logic to BrowserView

 editor/browser-view.vala |  140 ++++++++++++++++++++++++++++++++++++++++++-
 editor/dconf-model.vala  |  148 ----------------------------------------------
 2 files changed, 137 insertions(+), 151 deletions(-)
---
diff --git a/editor/browser-view.vala b/editor/browser-view.vala
index 618938c..50192fd 100644
--- a/editor/browser-view.vala
+++ b/editor/browser-view.vala
@@ -75,7 +75,7 @@ class BrowserView : Grid, PathElement
         settings.bind ("sort-folders", sorting_options, "sort-folders", GLib.SettingsBindFlags.GET);
 
         sorting_options.notify.connect (() => {
-                if (current_view_is_browse_view () && current_directory.need_sorting (sorting_options))
+                if (current_view_is_browse_view () && !sorting_options.is_key_model_sorted 
(current_directory.key_model))
                     need_reload_warning_revealer.set_reveal_child (true);
                 // TODO reload search results too
             });
@@ -101,7 +101,7 @@ class BrowserView : Grid, PathElement
     public void set_directory (Directory directory, string? selected)
     {
         current_directory = directory;
-        current_directory.sort_key_model (sorting_options);
+        sorting_options.sort_key_model (current_directory.key_model);
 
         browse_view.set_key_model (directory.key_model);
 
@@ -328,7 +328,7 @@ class BrowserView : Grid, PathElement
     private void reload ()
     {
         string? saved_selection = browse_view.get_selected_row_name ();
-        current_directory.sort_key_model (sorting_options);    // TODO duplicate in set_directory
+        sorting_options.sort_key_model (current_directory.key_model);    // TODO duplicate in set_directory
         show_browse_view (current_path, saved_selection);
     }
 }
@@ -337,3 +337,137 @@ public interface BrowsableView
 {
     public abstract string? get_copy_text ();
 }
+
+/*\
+* * Sorting
+\*/
+
+public enum MergeType {
+    MIXED,
+    FIRST,
+    LAST
+}
+
+public class SortingOptions : Object
+{
+    public bool case_sensitive { get; set; default = false; }
+    public MergeType sort_folders { get; set; default = MergeType.MIXED; }
+
+    public SettingComparator get_comparator ()
+    {
+        if (sort_folders == MergeType.FIRST)
+        {
+            if (case_sensitive)
+                return new FoldersFirstCaseSensitive ();
+            else
+                return new FoldersFirstCaseInsensitive ();
+        }
+        else if (sort_folders == MergeType.LAST)
+        {
+            if (case_sensitive)
+                return new FoldersLastCaseSensitive ();
+            else
+                return new FoldersLastCaseInsensitive ();
+        }
+        else // if (sort_folders == MergeType.MIXED)
+        {
+            if (case_sensitive)
+                return new FoldersMixedCaseSensitive ();
+            else
+                return new FoldersMixedCaseInsensitive ();
+        }
+    }
+
+    public void sort_key_model (GLib.ListStore model)
+    {
+        SettingComparator comparator = get_comparator ();
+
+        model.sort ((a, b) => comparator.compare ((SettingObject) a, (SettingObject) b));
+    }
+
+    public bool is_key_model_sorted (GLib.ListStore model)
+    {
+        SettingComparator comparator = get_comparator ();
+
+        uint last = model.get_n_items () - 1;
+        for (int i = 0; i < last; i++)
+        {
+            SettingObject item = (SettingObject) model.get_item (i);
+            SettingObject next = (SettingObject) model.get_item (i + 1);
+            if (comparator.compare (item, next) > 0)
+                return false;
+        }
+        return true;
+    }
+}
+
+/* Comparison functions */
+
+public interface SettingComparator : Object
+{
+    public abstract int compare (SettingObject a, SettingObject b);
+}
+
+class FoldersMixedCaseInsensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        return a.casefolded_name.collate (b.casefolded_name);
+    }
+}
+
+class FoldersMixedCaseSensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        return strcmp (a.name, b.name);
+    }
+}
+
+class FoldersFirstCaseInsensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        if (a is Directory && !(b is Directory))
+            return -1;
+        if (!(a is Directory) && b is Directory)
+            return 1;
+        return a.casefolded_name.collate (b.casefolded_name);
+    }
+}
+
+class FoldersFirstCaseSensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        if (a is Directory && !(b is Directory))
+            return -1;
+        if (!(a is Directory) && b is Directory)
+            return 1;
+        return strcmp (a.name, b.name);
+    }
+}
+
+class FoldersLastCaseInsensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        if (a is Directory && !(b is Directory))
+            return 1;
+        if (!(a is Directory) && b is Directory)
+            return -1;
+        return a.casefolded_name.collate (b.casefolded_name);
+    }
+}
+
+class FoldersLastCaseSensitive : Object, SettingComparator
+{
+    public int compare (SettingObject a, SettingObject b)
+    {
+        if (a is Directory && !(b is Directory))
+            return 1;
+        if (!(a is Directory) && b is Directory)
+            return -1;
+        return strcmp (a.name, b.name);
+    }
+}
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index 3597386..4321ff0 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -92,21 +92,6 @@ public class Directory : SettingObject
     }
 
     /*\
-    * * Folders creation
-    \*/
-
-    public bool need_sorting (SortingOptions sorting_options)
-    {
-        return !sorting_options.is_key_model_sorted (key_model);
-    }
-
-    public void sort_key_model (SortingOptions sorting_options)
-    {
-        if (need_sorting (sorting_options))
-            sorting_options.sort_key_model (key_model);
-    }
-
-    /*\
     * * GSettings keys creation
     \*/
 
@@ -926,136 +911,3 @@ public class SettingsModel : Object
     }
 }
 
-/*\
-* * Sorting
-\*/
-
-public enum MergeType {
-    MIXED,
-    FIRST,
-    LAST
-}
-
-public class SortingOptions : Object
-{
-    public bool case_sensitive { get; set; default = false; }
-    public MergeType sort_folders { get; set; default = MergeType.MIXED; }
-
-    public SettingComparator get_comparator ()
-    {
-        if (sort_folders == MergeType.FIRST)
-        {
-            if (case_sensitive)
-                return new FoldersFirstCaseSensitive ();
-            else
-                return new FoldersFirstCaseInsensitive ();
-        }
-        else if (sort_folders == MergeType.LAST)
-        {
-            if (case_sensitive)
-                return new FoldersLastCaseSensitive ();
-            else
-                return new FoldersLastCaseInsensitive ();
-        }
-        else // if (sort_folders == MergeType.MIXED)
-        {
-            if (case_sensitive)
-                return new FoldersMixedCaseSensitive ();
-            else
-                return new FoldersMixedCaseInsensitive ();
-        }
-    }
-
-    public void sort_key_model (GLib.ListStore model)
-    {
-        SettingComparator comparator = get_comparator ();
-
-        model.sort ((a, b) => comparator.compare ((SettingObject) a, (SettingObject) b));
-    }
-
-    public bool is_key_model_sorted (GLib.ListStore model)
-    {
-        SettingComparator comparator = get_comparator ();
-
-        uint last = model.get_n_items () - 1;
-        for (int i = 0; i < last; i++)
-        {
-            SettingObject item = (SettingObject) model.get_item (i);
-            SettingObject next = (SettingObject) model.get_item (i + 1);
-            if (comparator.compare (item, next) > 0)
-                return false;
-        }
-        return true;
-    }
-}
-
-/* Comparison functions */
-
-public interface SettingComparator : Object
-{
-    public abstract int compare (SettingObject a, SettingObject b);
-}
-
-class FoldersMixedCaseInsensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        return a.casefolded_name.collate (b.casefolded_name);
-    }
-}
-
-class FoldersMixedCaseSensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        return strcmp (a.name, b.name);
-    }
-}
-
-class FoldersFirstCaseInsensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        if (a is Directory && !(b is Directory))
-            return -1;
-        if (!(a is Directory) && b is Directory)
-            return 1;
-        return a.casefolded_name.collate (b.casefolded_name);
-    }
-}
-
-class FoldersFirstCaseSensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        if (a is Directory && !(b is Directory))
-            return -1;
-        if (!(a is Directory) && b is Directory)
-            return 1;
-        return strcmp (a.name, b.name);
-    }
-}
-
-class FoldersLastCaseInsensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        if (a is Directory && !(b is Directory))
-            return 1;
-        if (!(a is Directory) && b is Directory)
-            return -1;
-        return a.casefolded_name.collate (b.casefolded_name);
-    }
-}
-
-class FoldersLastCaseSensitive : Object, SettingComparator
-{
-    public int compare (SettingObject a, SettingObject b)
-    {
-        if (a is Directory && !(b is Directory))
-            return 1;
-        if (!(a is Directory) && b is Directory)
-            return -1;
-        return strcmp (a.name, b.name);
-    }
-}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]