Forráskód Böngészése

LibGUI: Add SortingProxyModel::sort_role()

This allows you to specify a role to sort by. Defaults to Role::Sort.
Also reordered the Role enum so that Role::Custom is last.
Andreas Kling 5 éve
szülő
commit
a5799ed462

+ 1 - 1
Libraries/LibGUI/Model.h

@@ -54,13 +54,13 @@ public:
     enum class Role {
         Display,
         Sort,
-        Custom,
         ForegroundColor,
         BackgroundColor,
         Icon,
         Font,
         DragData,
         TextAlignment,
+        Custom = 0x100, // Applications are free to use roles above this number as they please
     };
 
     virtual ~Model();

+ 2 - 2
Libraries/LibGUI/SortingProxyModel.cpp

@@ -112,8 +112,8 @@ void SortingProxyModel::resort()
         return;
     }
     quick_sort(m_row_mappings, [&](auto row1, auto row2) -> bool {
-        auto data1 = target().data(target().index(row1, m_key_column), Model::Role::Sort);
-        auto data2 = target().data(target().index(row2, m_key_column), Model::Role::Sort);
+        auto data1 = target().data(target().index(row1, m_key_column), m_sort_role);
+        auto data2 = target().data(target().index(row2, m_key_column), m_sort_role);
         if (data1 == data2)
             return 0;
         bool is_less_than;

+ 4 - 0
Libraries/LibGUI/SortingProxyModel.h

@@ -49,6 +49,9 @@ public:
 
     ModelIndex map_to_target(const ModelIndex&) const;
 
+    Role sort_role() const { return m_sort_role; }
+    void set_sort_role(Role role) { m_sort_role = role; }
+
 private:
     explicit SortingProxyModel(NonnullRefPtr<Model>&&);
 
@@ -64,6 +67,7 @@ private:
     Vector<int> m_row_mappings;
     int m_key_column { -1 };
     SortOrder m_sort_order { SortOrder::Ascending };
+    Role m_sort_role { Role::Sort };
     bool m_sorting_case_sensitive { false };
 };