/*\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
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