From: Randy Baumgarte Date: Mon, 23 Aug 2010 12:53:47 +0000 (-0400) Subject: Altered note table to use a display delegate to show dates rather than convert the... X-Git-Tag: version0.1.1~397 X-Git-Url: http://git.sourceforge.jp/view?p=neighbornote%2FNeighborNote.git;a=commitdiff_plain;h=ef447e499dc7b70ae8f7351ef3606b35b4b26c01 Altered note table to use a display delegate to show dates rather than convert the dates directly. This avoids all the conversion overhead when sorting & improves performance. --- diff --git a/src/cx/fbn/nevernote/filters/NoteSortFilterProxyModel.java b/src/cx/fbn/nevernote/filters/NoteSortFilterProxyModel.java index ca65b29..9a651aa 100644 --- a/src/cx/fbn/nevernote/filters/NoteSortFilterProxyModel.java +++ b/src/cx/fbn/nevernote/filters/NoteSortFilterProxyModel.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.Map; import com.trolltech.qt.core.QAbstractItemModel; -import com.trolltech.qt.core.QDateTime; import com.trolltech.qt.core.QModelIndex; import com.trolltech.qt.core.QObject; import com.trolltech.qt.gui.QSortFilterProxyModel; @@ -33,6 +32,7 @@ import cx.fbn.nevernote.Global; public class NoteSortFilterProxyModel extends QSortFilterProxyModel { private final Map guids; private String dateFormat; + private int traceCount; public NoteSortFilterProxyModel(QObject parent) { super(parent); @@ -48,6 +48,7 @@ public class NoteSortFilterProxyModel extends QSortFilterProxyModel { guids.put(guid, null); } public void filter() { + traceCount = 0; dateFormat = Global.getDateFormat() + " " + Global.getTimeFormat(); invalidateFilter(); } @@ -67,15 +68,14 @@ public class NoteSortFilterProxyModel extends QSortFilterProxyModel { @Override protected boolean lessThan(QModelIndex left, QModelIndex right) { + Object leftData = sourceModel().data(left); Object rightData = sourceModel().data(right); - if (sortColumn() == Global.noteTableCreationPosition || - sortColumn() == Global.noteTableChangedPosition || - sortColumn() == Global.noteTableSubjectDatePosition) { - QDateTime leftDate = QDateTime.fromString(leftData.toString(), dateFormat); - QDateTime rightDate = QDateTime.fromString(rightData.toString(), dateFormat); - return leftDate.compareTo(rightDate) < 0; + if (leftData instanceof Long && rightData instanceof Long) { + Long leftLong = (Long)leftData; + Long rightLong = (Long)rightData; + return leftLong.compareTo(rightLong) < 0; } if (leftData instanceof String && rightData instanceof String) { String leftString = (String)leftData; diff --git a/src/cx/fbn/nevernote/gui/NoteTableDateDelegate.java b/src/cx/fbn/nevernote/gui/NoteTableDateDelegate.java new file mode 100644 index 0000000..b1bf164 --- /dev/null +++ b/src/cx/fbn/nevernote/gui/NoteTableDateDelegate.java @@ -0,0 +1,26 @@ +package cx.fbn.nevernote.gui; + +import java.text.SimpleDateFormat; + +import com.trolltech.qt.core.QDateTime; +import com.trolltech.qt.core.QLocale; +import com.trolltech.qt.gui.QStyledItemDelegate; + +import cx.fbn.nevernote.Global; + +public class NoteTableDateDelegate extends QStyledItemDelegate { + + + @Override + public String displayText(Object value, QLocale locale ) { + + String fmt = Global.getDateFormat() + " " + Global.getTimeFormat(); + String dateTimeFormat = new String(fmt); + SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat); + + StringBuilder date = new StringBuilder(simple.format(value)); + QDateTime created = QDateTime.fromString(date.toString(), fmt); + return created.toString(fmt); + } + +} diff --git a/src/cx/fbn/nevernote/gui/NoteTableModel.java b/src/cx/fbn/nevernote/gui/NoteTableModel.java index f901470..3090919 100644 --- a/src/cx/fbn/nevernote/gui/NoteTableModel.java +++ b/src/cx/fbn/nevernote/gui/NoteTableModel.java @@ -1,6 +1,5 @@ package cx.fbn.nevernote.gui; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -77,7 +76,7 @@ public class NoteTableModel extends QAbstractTableModel { return valueAt(index.row(), index.column()); } case Qt.ItemDataRole.BackgroundRole: { - String guid = valueAt(index.row(), Global.noteTableGuidPosition); + String guid = (String)valueAt(index.row(), Global.noteTableGuidPosition); QColor backgroundColor = new QColor(QColor.white); if (titleColors != null && titleColors.containsKey(guid)) { int color = titleColors.get(guid); @@ -86,7 +85,7 @@ public class NoteTableModel extends QAbstractTableModel { return backgroundColor; } case Qt.ItemDataRole.ForegroundRole: { - String guid = valueAt(index.row(), Global.noteTableGuidPosition); + String guid = (String)valueAt(index.row(), Global.noteTableGuidPosition); QColor backgroundColor = new QColor(QColor.white); QColor foregroundColor = new QColor(QColor.black); if (titleColors != null && titleColors.containsKey(guid)) { @@ -112,20 +111,20 @@ public class NoteTableModel extends QAbstractTableModel { } - private String valueAt(int row, int col) { + private Object valueAt(int row, int col) { Note note = listManager.getMasterNoteIndex().get(row); if (col == Global.noteTableGuidPosition) return note.getGuid(); if (col == Global.noteTableCreationPosition) - return formattedDate(note.getCreated()); + return note.getCreated(); if (col == Global.noteTableChangedPosition) - return formattedDate(note.getUpdated()); + return note.getUpdated(); if (col == Global.noteTableSubjectDatePosition) { if (note.getAttributes().getSubjectDate() > 0) - return formattedDate(note.getAttributes().getSubjectDate()); + return note.getAttributes().getSubjectDate(); else - return formattedDate(note.getCreated()); + return note.getCreated(); } if (col == Global.noteTableTitlePosition) return note.getTitle(); @@ -159,40 +158,6 @@ public class NoteTableModel extends QAbstractTableModel { return ""; } - private String formattedDate(long d) { - String fmt = Global.getDateFormat() + " " + Global.getTimeFormat(); - String dateTimeFormat = new String(fmt); - SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat); - - StringBuilder date = new StringBuilder(simple.format(d)); - QDateTime created = QDateTime.fromString(date.toString(), fmt); - return created.toString(fmt); - - } - - /* - @Override - public void sort(int column, Qt.SortOrder order) { - layoutAboutToBeChanged.emit(); - boolean finished = false; - while (!finished) { - finished = true; - for (int i=1; i 0) { - finished = false; - getMasterNoteIndex().set(i-1, n2); - getMasterNoteIndex().set(i, n1); - } - } - } - layoutChanged.emit(); - } - */ @Override public java.lang.Object headerData(int section, Qt.Orientation orientation, int role) { diff --git a/src/cx/fbn/nevernote/gui/TableView.java b/src/cx/fbn/nevernote/gui/TableView.java index f95a844..3f13966 100644 --- a/src/cx/fbn/nevernote/gui/TableView.java +++ b/src/cx/fbn/nevernote/gui/TableView.java @@ -124,6 +124,12 @@ public class TableView extends QTableView { fontHeight = f.height(); rowChanged = new Signal1(); resetViewport = new Signal0(); + + NoteTableDateDelegate dateDelegate = new NoteTableDateDelegate(); + setItemDelegateForColumn(Global.noteTableCreationPosition, dateDelegate); + setItemDelegateForColumn(Global.noteTableChangedPosition, dateDelegate); + setItemDelegateForColumn(Global.noteTableSubjectDatePosition, dateDelegate); + } // This should rescroll to the current item in the list when a column is