OSDN Git Service

Changed text sorting to be case insensitive to prevent ascii sorting.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / filters / NoteSortFilterProxyModel.java
index 74974d1..8c0ca28 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * This file is part of NeverNote \r
+ * This file is part of NixNote \r
  * Copyright 2009 Randy Baumgarte\r
  * \r
  * This file may be licensed under the terms of of the\r
 package cx.fbn.nevernote.filters;\r
 \r
 import java.util.HashMap;\r
-import java.util.Map;\r
 \r
 import com.trolltech.qt.core.QAbstractItemModel;\r
 import com.trolltech.qt.core.QModelIndex;\r
 import com.trolltech.qt.core.QObject;\r
+import com.trolltech.qt.core.Qt;\r
+import com.trolltech.qt.gui.QIcon;\r
+import com.trolltech.qt.gui.QImage;\r
 import com.trolltech.qt.gui.QSortFilterProxyModel;\r
 \r
 import cx.fbn.nevernote.Global;\r
+import cx.fbn.nevernote.evernote.NoteMetadata;\r
 \r
 public class NoteSortFilterProxyModel extends QSortFilterProxyModel {\r
-       private final Map<String,String> guids;\r
-       private String dateFormat;\r
+       private final HashMap<String, NoteMetadata> guids;\r
+       private final HashMap<String, NoteMetadata> pinnedGuids;\r
+       public Signal2<Integer,Integer> sortChanged;\r
+       public boolean blocked;\r
        \r
        public NoteSortFilterProxyModel(QObject parent) {\r
                super(parent);\r
-               guids = new HashMap<String,String>();\r
-               dateFormat = Global.getDateFormat() + " " + Global.getTimeFormat();\r
+               guids = new HashMap<String, NoteMetadata>();\r
+               pinnedGuids = new HashMap<String, NoteMetadata>();\r
                setDynamicSortFilter(true);\r
-//             logger = new ApplicationLogger("filter.log");\r
+               sortChanged = new Signal2<Integer,Integer>();\r
        }\r
        public void clear() {\r
                guids.clear();\r
        }\r
-       public void addGuid(String guid) {\r
-//             if (!guids.containsKey(guid))\r
-                       guids.put(guid, null);\r
+       public void addGuid(String guid, NoteMetadata meta) {\r
+               if (!guids.containsKey(guid))\r
+                       guids.put(guid, meta);\r
+               if (meta!= null && pinnedGuids != null && meta.isPinned() == true && !pinnedGuids.containsKey(guid))\r
+                       pinnedGuids.put(guid, meta);\r
        }\r
        public void filter() {\r
-               dateFormat = Global.getDateFormat() + " " + Global.getTimeFormat();\r
                invalidateFilter();\r
        }\r
        @Override\r
        protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {\r
-               if (guids.size() == 0)\r
-                       return false;\r
                QAbstractItemModel model = sourceModel();\r
                QModelIndex guidIndex = sourceModel().index(sourceRow, Global.noteTableGuidPosition);\r
                String guid = (String)model.data(guidIndex);\r
                \r
-               if (guids.containsKey(guid))\r
+               if (guids.containsKey(guid) || pinnedGuids.containsKey(guid))\r
                        return true;\r
                else\r
                        return false;\r
        }\r
        \r
+       \r
+       @Override\r
+       public void sort(int col, Qt.SortOrder order) {\r
+               if (col != Global.noteTableThumbnailPosition) {\r
+                       if (!blocked)   {\r
+                               sortChanged.emit(col, order.value());    // Signal that the sort order has been modified\r
+                       }\r
+                       super.sort(col,order);\r
+               }\r
+       }\r
+       \r
        @Override\r
        protected boolean lessThan(QModelIndex left, QModelIndex right) {\r
                Object leftData = sourceModel().data(left);\r
                Object rightData = sourceModel().data(right);\r
                \r
+               if (rightData == null)\r
+                       return true;\r
+               if (leftData instanceof QIcon)\r
+                       return true;\r
+               if (leftData instanceof QImage && rightData instanceof QImage)\r
+                       return true;\r
                if (leftData instanceof Long && rightData instanceof Long) {\r
                          Long leftLong = (Long)leftData;\r
                          Long rightLong = (Long)rightData;\r
@@ -78,7 +99,7 @@ public class NoteSortFilterProxyModel extends QSortFilterProxyModel {
                if (leftData instanceof String && rightData instanceof String) {\r
                        String leftString = (String)leftData;\r
                        String rightString = (String)rightData;\r
-                       return leftString.compareTo(rightString) < 0;\r
+                       return leftString.toLowerCase().compareTo(rightString.toLowerCase()) < 0;\r
                }\r
                \r
                return super.lessThan(left, right);\r