-/*\r
- * This file is part of NeverNote \r
- * Copyright 2009 Randy Baumgarte\r
- * \r
- * This file may be licensed under the terms of of the\r
- * GNU General Public License Version 2 (the ``GPL'').\r
- *\r
- * Software distributed under the License is distributed\r
- * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
- * express or implied. See the GPL for the specific language\r
- * governing rights and limitations.\r
- *\r
- * You should have received a copy of the GPL along with this\r
- * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
- * or write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
- *\r
-*/\r
-package cx.fbn.nevernote.gui;\r
-\r
-import java.text.SimpleDateFormat;\r
-import java.util.List;\r
-import java.util.SortedMap;\r
-\r
-import com.evernote.edam.type.Note;\r
-import com.trolltech.qt.core.QByteArray;\r
-import com.trolltech.qt.core.QDateTime;\r
-import com.trolltech.qt.core.QModelIndex;\r
-import com.trolltech.qt.core.Qt;\r
-import com.trolltech.qt.core.Qt.SortOrder;\r
-import com.trolltech.qt.gui.QAbstractItemView;\r
-import com.trolltech.qt.gui.QAction;\r
-import com.trolltech.qt.gui.QApplication;\r
-import com.trolltech.qt.gui.QColor;\r
-import com.trolltech.qt.gui.QContextMenuEvent;\r
-import com.trolltech.qt.gui.QDragEnterEvent;\r
-import com.trolltech.qt.gui.QDropEvent;\r
-import com.trolltech.qt.gui.QFontMetrics;\r
-import com.trolltech.qt.gui.QHeaderView;\r
-import com.trolltech.qt.gui.QKeyEvent;\r
-import com.trolltech.qt.gui.QMenu;\r
-import com.trolltech.qt.gui.QStandardItemModel;\r
-import com.trolltech.qt.gui.QTableView;\r
-import com.trolltech.qt.gui.QKeySequence.StandardKey;\r
-\r
-import cx.fbn.nevernote.Global;\r
-import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;\r
-import cx.fbn.nevernote.signals.NoteSignal;\r
-import cx.fbn.nevernote.utilities.ApplicationLogger;\r
-import cx.fbn.nevernote.utilities.ListManager;\r
-\r
-public class TableView extends QTableView {\r
-// private final ListManager runner;\r
- private final ApplicationLogger logger;\r
- public QStandardItemModel model; // Standard item model\r
- public NoteSortFilterProxyModel proxyModel; // note sort model\r
- private QAction deleteAction;\r
- private QAction addAction;\r
- private QAction restoreAction;\r
- private QAction noteHistoryAction;\r
- private QAction duplicateAction;\r
- private QAction mergeNotesAction;\r
- \r
- // Note title colors\r
- private QAction noteTitleColorWhite;\r
- private QAction noteTitleColorRed;\r
- private QAction noteTitleColorBlue;\r
- private QAction noteTitleColorGreen;\r
- private QAction noteTitleColorYellow;\r
- private QAction noteTitleColorBlack;\r
- private QAction noteTitleColorGray;\r
- private QAction noteTitleColorCyan;\r
- private QAction noteTitleColorMagenta;\r
-\r
-\r
- \r
- public QHeaderView header;\r
- int fontHeight;\r
- public Signal1<String> rowChanged;\r
- public Signal0 resetViewport;\r
- public NoteSignal noteSignal;\r
- \r
- public TableView(ApplicationLogger l) {\r
- logger = l;\r
- header = horizontalHeader();\r
- header.setMovable(true);\r
- \r
- noteSignal = new NoteSignal();\r
- setAcceptDrops(true);\r
- setDragEnabled(true);\r
- setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);\r
- setDropIndicatorShown(false);\r
- \r
- model = new QStandardItemModel(0,Global.noteTableColumnCount, this);\r
- \r
- model.setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, "Date Created");\r
- model.setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, "Tags");\r
- model.setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, "Guid");\r
- model.setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, "Notebook");\r
- model.setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, "Title");\r
- model.setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, "Date Changed");\r
- model.setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, "Author");\r
- model.setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, "Source Url");\r
- model.setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, "Subject Date");\r
- model.setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, "Synchronized");\r
- header.sortIndicatorChanged.connect(this, "resetViewport()");\r
- \r
- proxyModel = new NoteSortFilterProxyModel(this);\r
- proxyModel.setSourceModel(model);\r
- \r
- setAlternatingRowColors(false);\r
- setModel(proxyModel);\r
- \r
- setSortingEnabled(true);\r
- int sortCol = proxyModel.sortColumn();\r
- SortOrder sortOrder = proxyModel.sortOrder();\r
- sortByColumn(sortCol, sortOrder);\r
-\r
- setSelectionBehavior(SelectionBehavior.SelectRows);\r
- setSelectionMode(SelectionMode.SingleSelection);\r
- verticalHeader().setVisible(false);\r
- hideColumn(Global.noteTableGuidPosition); // Hide the guid column\r
- setShowGrid(false);\r
- setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers);\r
- \r
- QFontMetrics f = QApplication.fontMetrics();\r
- fontHeight = f.height();\r
- rowChanged = new Signal1<String>();\r
- resetViewport = new Signal0();\r
- }\r
- \r
- // This should rescroll to the current item in the list when a column is \r
- // sorted. Somehow I can't get this to work, but this part is correct.\r
- @SuppressWarnings("unused")\r
- private void resetViewport() {\r
-// if (currentIndex() == null) \r
-// return;\r
- \r
-// resetViewport.emit();\r
- }\r
- \r
- \r
- public void load(ListManager runner, boolean reload) {\r
-\r
- proxyModel.clear();\r
- setSortingEnabled(true);\r
- for (int i=0; i<runner.getNoteIndex().size(); i++) {\r
- if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive())\r
- proxyModel.addGuid(runner.getNoteIndex().get(i).getGuid());\r
- if (!Global.showDeleted == true && runner.getNoteIndex().get(i).isActive()) \r
- proxyModel.addGuid(runner.getNoteIndex().get(i).getGuid());\r
- }\r
- if (!reload) {\r
- logger.log(logger.EXTREME, "TableView.load() reload starting.");\r
- proxyModel.filter();\r
- logger.log(logger.EXTREME, "TableView.load() leaving reload.");\r
- QFontMetrics f = QApplication.fontMetrics();\r
- fontHeight = f.height();\r
- for (int i=0; i<model.rowCount(); i++)\r
- setRowHeight(i, fontHeight);\r
- resetViewport.emit();\r
- return;\r
- }\r
- logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");\r
- model.setRowCount(runner.getMasterNoteIndex().size());\r
- \r
- for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {\r
- if (runner.getMasterNoteIndex().get(i) != null) { \r
- insertRow(runner, runner.getMasterNoteIndex().get(i), false, i); \r
- }\r
- }\r
- \r
-\r
- \r
- int width;\r
- width = Global.getColumnWidth("noteTableCreationPosition");\r
- if (width>0) setColumnWidth(Global.noteTableCreationPosition, width);\r
- width = Global.getColumnWidth("noteTableChangedPosition");\r
- if (width>0) setColumnWidth(Global.noteTableChangedPosition, width);\r
- width = Global.getColumnWidth("noteTableTitlePosition");\r
- if (width>0) setColumnWidth(Global.noteTableTitlePosition, width);\r
- width = Global.getColumnWidth("noteTableTagPosition");\r
- if (width>0) setColumnWidth(Global.noteTableTagPosition, width);\r
- width = Global.getColumnWidth("noteTableGuidPosition");\r
- if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);\r
- width = Global.getColumnWidth("noteTableNotebookPosition");\r
- if (width>0) setColumnWidth(Global.noteTableNotebookPosition, width);\r
- width = Global.getColumnWidth("noteTableSourceUrlPosition");\r
- if (width>0) setColumnWidth(Global.noteTableSourceUrlPosition, width);\r
- width = Global.getColumnWidth("noteTableAuthorPosition");\r
- if (width>0) setColumnWidth(Global.noteTableAuthorPosition, width);\r
- width = Global.getColumnWidth("noteTableSubjectDatePosition");\r
- if (width>0) setColumnWidth(Global.noteTableSubjectDatePosition, width);\r
- width = Global.getColumnWidth("noteTableSynchronizedPosition");\r
- if (width>0) setColumnWidth(Global.noteTableSynchronizedPosition, width);\r
- \r
- int from = header.visualIndex(Global.noteTableCreationPosition);\r
- int to = Global.getColumnPosition("noteTableCreationPosition");\r
- if (to>=0) header.moveSection(from, to);\r
-\r
- from = header.visualIndex(Global.noteTableTitlePosition);\r
- to = Global.getColumnPosition("noteTableTitlePosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableTagPosition);\r
- to = Global.getColumnPosition("noteTableTagPosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableNotebookPosition);\r
- to = Global.getColumnPosition("noteTableNotebookPosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableChangedPosition);\r
- to = Global.getColumnPosition("noteTableChangedPosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableSourceUrlPosition);\r
- to = Global.getColumnPosition("noteTableSourceUrlPosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableAuthorPosition);\r
- to = Global.getColumnPosition("noteTableAuthorPosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableSubjectDatePosition);\r
- to = Global.getColumnPosition("noteTableSubjectDatePosition");\r
- if (to>=0) header.moveSection(from, to);\r
- \r
- from = header.visualIndex(Global.noteTableSynchronizedPosition);\r
- to = Global.getColumnPosition("noteTableSynchronizedPosition");\r
- if (to>=0) header.moveSection(from, to);\r
-\r
- proxyModel.filter();\r
- \r
- QFontMetrics f = QApplication.fontMetrics();\r
- fontHeight = f.height();\r
- for (int i=0; i<model.rowCount(); i++)\r
- setRowHeight(i, fontHeight);\r
- \r
- resetViewport.emit();\r
- }\r
-\r
- public void insertRow(ListManager runner, Note tempNote, boolean newNote, int row) {\r
- if (newNote)\r
- proxyModel.addGuid(tempNote.getGuid());\r
- String fmt = Global.getDateFormat() + " " + Global.getTimeFormat();\r
- String dateTimeFormat = new String(fmt);\r
- SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
-\r
- \r
- String tagNames = runner.getTagNamesForNote(tempNote);\r
- StringBuilder creationDate = new StringBuilder(simple.format(tempNote.getCreated())); \r
- StringBuilder changedDate = new StringBuilder(simple.format(tempNote.getUpdated()));\r
- StringBuilder subjectDate;\r
- if (tempNote.getAttributes().getSubjectDate() == 0) \r
- subjectDate = creationDate;\r
- else\r
- subjectDate = new StringBuilder(simple.format(tempNote.getAttributes().getSubjectDate()));\r
-\r
- String sync = "true";\r
- for (int i=0; i<runner.getUnsynchronizedNotes().size(); i++) {\r
- if (runner.getUnsynchronizedNotes().get(i).equalsIgnoreCase(tempNote.getGuid())) {\r
- sync = "false";\r
- i = runner.getUnsynchronizedNotes().size();\r
- }\r
- } \r
- \r
- if (row > model.rowCount())\r
- model.insertRow(0);\r
- \r
- if (row < 0) {\r
- row = model.rowCount();\r
- model.insertRow(row);\r
-// row = model.rowCount()-1;\r
- }\r
-\r
- QColor backgroundColor = new QColor(QColor.white);\r
- QColor foregroundColor = new QColor(QColor.black);\r
- \r
- if (runner.titleColors != null && runner.titleColors.containsKey(tempNote.getGuid())) {\r
- int color = runner.titleColors.get(tempNote.getGuid());\r
- backgroundColor.setRgb(color);\r
- }\r
- if (backgroundColor.rgb() == QColor.black.rgb() || backgroundColor.rgb() == QColor.blue.rgb()) \r
- foregroundColor.setRgb(QColor.white.rgb());\r
- \r
- \r
- QDateTime created = QDateTime.fromString(creationDate.toString(), fmt);\r
- QDateTime changed = QDateTime.fromString(changedDate.toString(), fmt);\r
- QDateTime subjectDateFormat = QDateTime.fromString(subjectDate.toString(), fmt);\r
- model.setData(model.index(row, Global.noteTableCreationPosition), created.toString(fmt));\r
- model.setData(model.index(row, Global.noteTableChangedPosition), changed.toString(fmt));\r
- model.setData(model.index(row, Global.noteTableTitlePosition), tempNote.getTitle());\r
- model.setData(model.index(row, Global.noteTableTagPosition), tagNames);\r
- model.setData(model.index(row, Global.noteTableGuidPosition), tempNote.getGuid());\r
- model.setData(model.index(row, Global.noteTableSubjectDatePosition), subjectDateFormat.toString(fmt));\r
- model.setData(model.index(row, Global.noteTableAuthorPosition), tempNote.getAttributes().getAuthor());\r
- model.setData(model.index(row, Global.noteTableSourceUrlPosition), tempNote.getAttributes().getSourceURL());\r
- model.setData(model.index(row, Global.noteTableNotebookPosition), runner.getNotebookNameByGuid(tempNote.getNotebookGuid()));\r
- model.setData(model.index(row, Global.noteTableSynchronizedPosition), sync);\r
- \r
- for (int i=0; i<Global.noteTableColumnCount; i++) {\r
- model.setData(row, i, backgroundColor, Qt.ItemDataRole.BackgroundRole);\r
- model.setData(row, i, foregroundColor, Qt.ItemDataRole.ForegroundRole);\r
- } \r
- \r
- if (newNote) {\r
- QFontMetrics f = QApplication.fontMetrics();\r
- fontHeight = f.height();\r
- for (int i=0; i<model.rowCount(); i++)\r
- setRowHeight(i, fontHeight);\r
- }\r
- }\r
- protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {\r
- return true;\r
- }\r
-\r
- public void setAddAction(QAction a) {\r
- addAction = a;\r
- }\r
- \r
- public void setMergeNotesAction(QAction a) {\r
- mergeNotesAction = a;\r
- }\r
- \r
- public void setNoteHistoryAction(QAction a) {\r
- noteHistoryAction = a;\r
- }\r
- \r
- public void setDeleteAction(QAction d) {\r
- deleteAction = d;\r
- }\r
- \r
- public void setRestoreAction(QAction r) {\r
- restoreAction = r;\r
- }\r
- public void setNoteDuplicateAction(QAction d) {\r
- duplicateAction = d;\r
- }\r
- \r
- @Override\r
- public void keyPressEvent(QKeyEvent e) {\r
- if (e.matches(StandardKey.MoveToStartOfDocument)) {\r
- if (model.rowCount() > 0) {\r
- clearSelection();\r
- selectRow(0);\r
- }\r
- }\r
- if (e.matches(StandardKey.MoveToEndOfDocument)) {\r
- if (model.rowCount() > 0) {\r
- clearSelection();\r
- selectRow(model().rowCount()-1);\r
- }\r
- }\r
- super.keyPressEvent(e);\r
- }\r
- \r
- @Override\r
- public void contextMenuEvent(QContextMenuEvent event) {\r
- QMenu menu = new QMenu(this);\r
- if (Global.showDeleted) {\r
- menu.addAction(restoreAction);\r
- } else {\r
- menu.addAction(addAction);\r
- }\r
- menu.addAction(deleteAction);\r
- menu.addSeparator();\r
- menu.addAction(duplicateAction);\r
- menu.addAction(noteHistoryAction);\r
- menu.addAction(mergeNotesAction);\r
- \r
- QMenu titleColorMenu = new QMenu();\r
- titleColorMenu.setTitle("Title Color");\r
- menu.addMenu(titleColorMenu);\r
- noteTitleColorWhite = new QAction(titleColorMenu);\r
- noteTitleColorRed = new QAction(titleColorMenu);\r
- noteTitleColorBlue = new QAction(titleColorMenu);\r
- noteTitleColorGreen = new QAction(titleColorMenu);\r
- noteTitleColorYellow = new QAction(titleColorMenu);\r
- noteTitleColorBlack = new QAction(titleColorMenu);\r
- noteTitleColorGray = new QAction(titleColorMenu);\r
- noteTitleColorCyan = new QAction(titleColorMenu);\r
- noteTitleColorMagenta = new QAction(titleColorMenu);\r
- \r
- noteTitleColorWhite.setText("White");\r
- noteTitleColorRed.setText("Red");\r
- noteTitleColorBlue.setText("Blue");\r
- noteTitleColorGreen.setText("Green");\r
- noteTitleColorYellow.setText("Yellow");\r
- noteTitleColorBlack.setText("Black");\r
- noteTitleColorGray.setText("Gray");\r
- noteTitleColorCyan.setText("Cyan");\r
- noteTitleColorMagenta.setText("Magenta");\r
- \r
- titleColorMenu.addAction(noteTitleColorWhite);\r
- titleColorMenu.addAction(noteTitleColorRed);\r
- titleColorMenu.addAction(noteTitleColorBlue);\r
- titleColorMenu.addAction(noteTitleColorGreen);\r
- titleColorMenu.addAction(noteTitleColorYellow);\r
- titleColorMenu.addAction(noteTitleColorBlack);\r
- titleColorMenu.addAction(noteTitleColorGray);\r
- titleColorMenu.addAction(noteTitleColorCyan);\r
- titleColorMenu.addAction(noteTitleColorMagenta);\r
- \r
- noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");\r
- \r
- noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");\r
- noteTitleColorRed.triggered.connect(this, "titleColorRed()");\r
- noteTitleColorBlue.triggered.connect(this, "titleColorBlue()");\r
- noteTitleColorGreen.triggered.connect(this, "titleColorGreen()");\r
- noteTitleColorYellow.triggered.connect(this, "titleColorYellow()");\r
- noteTitleColorBlack.triggered.connect(this, "titleColorBlack()");\r
- noteTitleColorGray.triggered.connect(this, "titleColorGray()");\r
- noteTitleColorCyan.triggered.connect(this, "titleColorCyan()");\r
- noteTitleColorMagenta.triggered.connect(this, "titleColorMagenta()");\r
- \r
- menu.exec(event.globalPos());\r
- }\r
- \r
- \r
- @SuppressWarnings("unused")\r
- private void titleColorWhite() {noteSignal.titleColorChanged.emit(QColor.white.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorRed() {noteSignal.titleColorChanged.emit(QColor.red.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorBlue() {noteSignal.titleColorChanged.emit(QColor.blue.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorGreen() {noteSignal.titleColorChanged.emit(QColor.green.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorYellow(){noteSignal.titleColorChanged.emit(QColor.yellow.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorBlack() {noteSignal.titleColorChanged.emit(QColor.black.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorGray() {noteSignal.titleColorChanged.emit(QColor.gray.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorCyan() {noteSignal.titleColorChanged.emit(QColor.cyan.rgb());}\r
- @SuppressWarnings("unused")\r
- private void titleColorMagenta() {noteSignal.titleColorChanged.emit(QColor.magenta.rgb());}\r
- \r
- \r
-\r
- @Override\r
- public void dragEnterEvent(QDragEnterEvent event) {\r
- StringBuffer guid = new StringBuffer(1000);\r
- \r
- showColumn(Global.noteTableGuidPosition);\r
- List<QModelIndex> selections = selectionModel().selectedRows();\r
- hideColumn(Global.noteTableGuidPosition);\r
- \r
- if (selections.size() > 0) {\r
- QModelIndex index;\r
- for (int i=0; i<selections.size(); i++) {\r
- int row = selections.get(i).row();\r
- index = proxyModel.index(row, Global.noteTableGuidPosition);\r
- SortedMap<Integer, Object> ix = proxyModel.itemData(index);\r
- guid.append((String)ix.values().toArray()[0]);\r
- guid.append(" ");\r
- }\r
- }\r
- event.mimeData().setData("application/x-nevernote-note", new QByteArray(guid.toString()));\r
- event.accept();\r
- \r
- }\r
- \r
- @Override\r
- public void dropEvent(QDropEvent event) {\r
- if (event.source() == this)\r
- event.ignore();\r
- }\r
- \r
- // Return a column width\r
- public int getColumnWidth(int col) {\r
- return columnWidth(col);\r
- }\r
-\r
-/*\r
- @Override\r
- public void scrollTo(final QModelIndex index, ScrollHint hint) {\r
- QRect area = viewport().rect();\r
- QRect rect = visualRect(index);\r
-\r
- if (rect.top() < area.top())\r
- verticalScrollBar().setValue(\r
- verticalScrollBar().value() + rect.top() - area.top());\r
- else if (rect.bottom() > area.bottom())\r
- verticalScrollBar().setValue(\r
- verticalScrollBar().value() + Math.min(\r
- rect.bottom() - area.bottom(), rect.top() - area.top()));\r
- update();\r
- }\r
- \r
- @Override\r
- protected void updateGeometries() {\r
- verticalScrollBar().setPageStep(viewport().height());\r
- verticalScrollBar().setRange(0, Math.max(0, viewport().height()));\r
- }\r
- @Override\r
- protected int verticalOffset() {\r
- return verticalScrollBar().value();\r
- }\r
-*/\r
- \r
-}\r
+/*
+ * This file is part of NixNote/NeighborNote
+ * Copyright 2009 Randy Baumgarte
+ * Copyright 2013 Yuki Takahashi
+ *
+ * This file may be licensed under the terms of of the
+ * GNU General Public License Version 2 (the ``GPL'').
+ *
+ * Software distributed under the License is distributed
+ * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied. See the GPL for the specific language
+ * governing rights and limitations.
+ *
+ * You should have received a copy of the GPL along with this
+ * program. If not, go to http://www.gnu.org/licenses/gpl.html
+ * or write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+*/
+package cx.fbn.nevernote.gui;
+
+import java.util.List;
+import java.util.SortedMap;
+
+import com.evernote.edam.type.Note;
+import com.trolltech.qt.core.QByteArray;
+import com.trolltech.qt.core.QModelIndex;
+import com.trolltech.qt.core.Qt;
+import com.trolltech.qt.core.Qt.Orientation;
+import com.trolltech.qt.core.Qt.SortOrder;
+import com.trolltech.qt.gui.QAbstractItemView;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QContextMenuEvent;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QFontMetrics;
+import com.trolltech.qt.gui.QKeyEvent;
+import com.trolltech.qt.gui.QKeySequence.StandardKey;
+import com.trolltech.qt.gui.QMenu;
+import com.trolltech.qt.gui.QTableView;
+
+import cx.fbn.nevernote.Global;
+import cx.fbn.nevernote.NeverNote;
+import cx.fbn.nevernote.evernote.NoteMetadata;
+import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;
+import cx.fbn.nevernote.signals.NoteSignal;
+import cx.fbn.nevernote.utilities.ApplicationLogger;
+import cx.fbn.nevernote.utilities.ListManager;
+
+public class TableView extends QTableView {
+ private final ListManager runner;
+ private final ApplicationLogger logger;
+ public NoteSortFilterProxyModel proxyModel; // note sort model
+ private QAction deleteAction;
+ private QAction addAction;
+ private QAction restoreAction;
+ private QAction noteHistoryAction;
+ private QAction duplicateAction;
+ private QAction mergeNotesAction;
+ // ICHANGED
+ private QAction openNewTabAction;
+ private QAction addNoteNewTabAction;
+
+ // Note title colors
+ private QAction noteTitleColorWhite;
+ private QAction noteTitleColorRed;
+ private QAction noteTitleColorBlue;
+ private QAction noteTitleColorGreen;
+ private QAction noteTitleColorYellow;
+ private QAction noteTitleColorBlack;
+ private QAction noteTitleColorGray;
+ private QAction noteTitleColorCyan;
+ private QAction noteTitleColorMagenta;
+ private QAction notePinned;
+ private QAction copyAsUrlAction;
+
+
+
+ public TableViewHeader header;
+ int fontHeight;
+ public Signal1<String> rowChanged;
+ public Signal0 resetViewport;
+ public NoteSignal noteSignal;
+
+ // ICHANGED
+ private final NeverNote parent;
+
+ // ICHANGED parent引数を追加
+ public TableView(ApplicationLogger l, ListManager m, NeverNote parent) {
+ // ICHANGED
+ this.parent = parent;
+
+ logger = l;
+ header = new TableViewHeader(Orientation.Horizontal,this);
+ setHorizontalHeader(header);
+ header.setMovable(true);
+ header.subjectDateAction.toggled.connect(this, "toggleSubjectDate(Boolean)");
+ header.createdDateAction.toggled.connect(this, "toggleCreationDate(Boolean)");
+ header.changedDateAction.toggled.connect(this, "toggleChangedDate(Boolean)");
+ header.authorAction.toggled.connect(this, "toggleAuthor(Boolean)");
+ header.urlAction.toggled.connect(this, "toggleSourceUrl(Boolean)");
+ header.pinnedAction.toggled.connect(this, "togglePinned(Boolean)");
+ header.tagsAction.toggled.connect(this, "toggleTags(Boolean)");
+ header.notebookAction.toggled.connect(this, "toggleNotebook(Boolean)");
+ header.synchronizedAction.toggled.connect(this, "toggleSynchronized(Boolean)");
+ header.guidAction.toggled.connect(this, "toggleGuid(Boolean)");
+ header.thumbnailAction.toggled.connect(this, "toggleThumbnail(Boolean)");
+ header.titleAction.toggled.connect(this, "toggleTitle(Boolean)");
+
+ noteSignal = new NoteSignal();
+ setAcceptDrops(true);
+ setDragEnabled(true);
+ setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);
+ setDropIndicatorShown(false);
+
+ runner = m;
+
+ runner.getNoteTableModel().setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, tr("Date Created"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, tr("Tags"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, tr("Guid"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, tr("Notebook"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, tr("Title"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, tr("Date Changed"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, tr("Author"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Sync"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTablePinnedPosition, Qt.Orientation.Horizontal, tr("Pinned"), Qt.ItemDataRole.DisplayRole);
+ runner.getNoteTableModel().setHeaderData(Global.noteTableThumbnailPosition, Qt.Orientation.Horizontal, tr("Thumbnail"), Qt.ItemDataRole.DisplayRole);
+ header.sortIndicatorChanged.connect(this, "resetViewport()");
+
+ proxyModel = new NoteSortFilterProxyModel(this);
+ proxyModel.setSourceModel(runner.getNoteTableModel());
+ setAlternatingRowColors(false);
+ setModel(proxyModel);
+ runner.getNoteTableModel().setSortProxyModel(proxyModel);
+
+ setSortingEnabled(true);
+ int sortCol = proxyModel.sortColumn();
+ SortOrder sortOrder = proxyModel.sortOrder();
+ sortByColumn(sortCol, sortOrder);
+
+ setSelectionBehavior(SelectionBehavior.SelectRows);
+ setSelectionMode(SelectionMode.SingleSelection);
+ verticalHeader().setVisible(false);
+ hideColumn(Global.noteTableGuidPosition); // Hide the guid column
+ setShowGrid(false);
+ setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers);
+
+ QFontMetrics f = QApplication.fontMetrics();
+ fontHeight = f.height();
+ rowChanged = new Signal1<String>();
+ 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
+ // sorted. Somehow I can't get this to work, but this part is correct.
+ @SuppressWarnings("unused")
+ private void resetViewport() {
+// if (currentIndex() == null)
+// return;
+
+// resetViewport.emit();
+ }
+
+
+ public void load(boolean reload) {
+ proxyModel.clear();
+ setSortingEnabled(false);
+ QFontMetrics f = QApplication.fontMetrics();
+ if (!Global.isColumnVisible("thumbnail"))
+ verticalHeader().setDefaultSectionSize(f.height());
+ else {
+ if (Global.getListView() == Global.View_List_Wide)
+ verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
+ else
+ verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
+ }
+ for (int i=0; i<runner.getNoteIndex().size(); i++) {
+ String guid = runner.getNoteIndex().get(i).getGuid();
+ NoteMetadata metaInfo = runner.getNoteMetadata().get(guid);
+ if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive()) {
+ proxyModel.addGuid(guid, null);
+ }
+ if (!Global.showDeleted == true &&
+ (runner.getNoteIndex().get(i).isActive() ||
+ metaInfo.isPinned())) {
+ proxyModel.addGuid(guid, metaInfo);
+ }
+ }
+
+ if (!reload) {
+ logger.log(logger.EXTREME, "TableView.load() reload starting.");
+ proxyModel.filter();
+ setSortingEnabled(true);
+ logger.log(logger.EXTREME, "TableView.load() leaving reload.");
+ return;
+ }
+ logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");
+
+ for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {
+ if (runner.getMasterNoteIndex().get(i) != null) {
+ Note note = runner.getMasterNoteIndex().get(i);
+ NoteMetadata meta = runner.getNoteMetadata().get(note.getGuid());
+ insertRow(runner.getMasterNoteIndex().get(i), meta, false, i);
+ }
+ }
+ proxyModel.invalidate();
+
+ resizeColumnWidths();
+ repositionColumns();
+
+ proxyModel.filter();
+
+ setSortingEnabled(true);
+ resetViewport.emit();
+ }
+
+ public void repositionColumns() {
+ int from = header.visualIndex(Global.noteTableCreationPosition);
+ int to = Global.getColumnPosition("noteTableCreationPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableTitlePosition);
+ to = Global.getColumnPosition("noteTableTitlePosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableTagPosition);
+ to = Global.getColumnPosition("noteTableTagPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableNotebookPosition);
+ to = Global.getColumnPosition("noteTableNotebookPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableChangedPosition);
+ to = Global.getColumnPosition("noteTableChangedPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableSourceUrlPosition);
+ to = Global.getColumnPosition("noteTableSourceUrlPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableAuthorPosition);
+ to = Global.getColumnPosition("noteTableAuthorPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableSubjectDatePosition);
+ to = Global.getColumnPosition("noteTableSubjectDatePosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTableSynchronizedPosition);
+ to = Global.getColumnPosition("noteTableSynchronizedPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ from = header.visualIndex(Global.noteTablePinnedPosition);
+ to = Global.getColumnPosition("noteTablePinnedPosition");
+ if (to>=0) header.moveSection(from, to);
+
+
+ from = header.visualIndex(Global.noteTableGuidPosition);
+ to = Global.getColumnPosition("noteTableGuidPosition");
+ if (to>=0) header.moveSection(from, to);
+
+
+ from = header.visualIndex(Global.noteTableThumbnailPosition);
+ to = Global.getColumnPosition("noteTableThumbnailPosition");
+ if (to>=0) header.moveSection(from, to);
+
+ }
+
+ public void resizeColumnWidths() {
+ int width;
+ width = Global.getColumnWidth("noteTableCreationPosition");
+ if (width>0) setColumnWidth(Global.noteTableCreationPosition, width);
+ width = Global.getColumnWidth("noteTableChangedPosition");
+ if (width>0) setColumnWidth(Global.noteTableChangedPosition, width);
+ width = Global.getColumnWidth("noteTableTitlePosition");
+ if (width>0) setColumnWidth(Global.noteTableTitlePosition, width);
+ width = Global.getColumnWidth("noteTableTagPosition");
+ if (width>0) setColumnWidth(Global.noteTableTagPosition, width);
+ width = Global.getColumnWidth("noteTableGuidPosition");
+ if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
+ width = Global.getColumnWidth("noteTableNotebookPosition");
+ if (width>0) setColumnWidth(Global.noteTableNotebookPosition, width);
+ width = Global.getColumnWidth("noteTableSourceUrlPosition");
+ if (width>0) setColumnWidth(Global.noteTableSourceUrlPosition, width);
+ width = Global.getColumnWidth("noteTableAuthorPosition");
+ if (width>0) setColumnWidth(Global.noteTableAuthorPosition, width);
+ width = Global.getColumnWidth("noteTableSubjectDatePosition");
+ if (width>0) setColumnWidth(Global.noteTableSubjectDatePosition, width);
+ width = Global.getColumnWidth("noteTableSynchronizedPosition");
+ if (width>0) setColumnWidth(Global.noteTableSynchronizedPosition, width);
+ width = Global.getColumnWidth("noteTableThumbnailPosition");
+ if (width>0) setColumnWidth(Global.noteTablePinnedPosition, width);
+ width = Global.getColumnWidth("noteTablePinnedPosition");
+ if (width>0) setColumnWidth(Global.noteTableThumbnailPosition, width);
+ width = Global.getColumnWidth("noteTableGuidPosition");
+ if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
+
+ }
+
+ public void resizeRowHeights() {
+ int height;
+ if (!Global.isColumnVisible("thumbnail") || !Global.enableThumbnails()) {
+ QFontMetrics f = QApplication.fontMetrics();
+ verticalHeader().setDefaultSectionSize(f.height());
+ height = fontHeight;
+ } else {
+ if (Global.getListView() == Global.View_List_Wide) {
+ verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
+ height = Global.smallThumbnailSize.height();
+ } else {
+ verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
+ height = Global.largeThumbnailSize.height();
+ }
+ }
+ for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
+ setRowHeight(i, height);
+ }
+ }
+
+ public void insertRow(Note tempNote, NoteMetadata meta, boolean newNote, int row) {
+ if (newNote)
+ proxyModel.addGuid(tempNote.getGuid(), meta);
+ if (row > runner.getNoteTableModel().rowCount())
+ runner.getNoteTableModel().insertRow(0);
+
+ if (row < 0) {
+ row = runner.getNoteTableModel().rowCount();
+ runner.getNoteTableModel().insertRow(row);
+ }
+ if (newNote) {
+ resizeRowHeights();
+ }
+ }
+ protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {
+ return true;
+ }
+
+ public void setAddAction(QAction a) {
+ addAction = a;
+ }
+
+ public void setMergeNotesAction(QAction a) {
+ mergeNotesAction = a;
+ }
+
+ public void setCopyAsUrlAction(QAction a) {
+ copyAsUrlAction = a;
+ }
+
+ public void setNoteHistoryAction(QAction a) {
+ noteHistoryAction = a;
+ }
+
+ public void setDeleteAction(QAction d) {
+ deleteAction = d;
+ }
+
+ public void setRestoreAction(QAction r) {
+ restoreAction = r;
+ }
+ public void setNoteDuplicateAction(QAction d) {
+ duplicateAction = d;
+ }
+
+ // ICHANGED
+ public void setOpenNewTabAction(QAction t) {
+ openNewTabAction = t;
+ }
+
+ // ICHANGED
+ public void setAddNoteNewTabAction(QAction t) {
+ addNoteNewTabAction = t;
+ }
+
+ @Override
+ public void keyPressEvent(QKeyEvent e) {
+ if (e.matches(StandardKey.MoveToStartOfDocument)) {
+ if (runner.getNoteTableModel().rowCount() > 0) {
+ clearSelection();
+ selectRow(0);
+ }
+ }
+ if (e.matches(StandardKey.MoveToEndOfDocument)) {
+ if (runner.getNoteTableModel().rowCount() > 0) {
+ clearSelection();
+ selectRow(model().rowCount()-1);
+ }
+ }
+ super.keyPressEvent(e);
+ }
+
+ @Override
+ public void contextMenuEvent(QContextMenuEvent event) {
+ // ICHANGED QMenu から NoteTableContextMenu へ
+ QMenu menu = new QMenu(this);
+
+ // ICHANGED
+ menu.addAction(openNewTabAction);
+
+ // ICHANGED
+ menu.addSeparator();
+ if (Global.showDeleted) {
+ menu.addAction(restoreAction);
+ } else {
+ menu.addAction(addAction);
+ menu.addAction(addNoteNewTabAction);
+ }
+ menu.addSeparator();
+
+ menu.addAction(deleteAction);
+ menu.addSeparator();
+ menu.addAction(duplicateAction);
+ menu.addAction(copyAsUrlAction);
+ menu.addSeparator();
+ menu.addAction(noteHistoryAction);
+ menu.addAction(mergeNotesAction);
+
+ // ICHANGED QMenu から NoteTableContextMenu へ
+ QMenu titleColorMenu = new QMenu(this);
+
+ titleColorMenu.setTitle(tr("Title Color"));
+ menu.addMenu(titleColorMenu);
+ noteTitleColorWhite = new QAction(titleColorMenu);
+ noteTitleColorRed = new QAction(titleColorMenu);
+ noteTitleColorBlue = new QAction(titleColorMenu);
+ noteTitleColorGreen = new QAction(titleColorMenu);
+ noteTitleColorYellow = new QAction(titleColorMenu);
+ noteTitleColorBlack = new QAction(titleColorMenu);
+ noteTitleColorGray = new QAction(titleColorMenu);
+ noteTitleColorCyan = new QAction(titleColorMenu);
+ noteTitleColorMagenta = new QAction(titleColorMenu);
+
+ notePinned = new QAction(titleColorMenu);
+ menu.addAction(notePinned);
+
+ noteTitleColorWhite.setText(tr("White"));
+ noteTitleColorRed.setText(tr("Red"));
+ noteTitleColorBlue.setText(tr("Blue"));
+ noteTitleColorGreen.setText(tr("Green"));
+ noteTitleColorYellow.setText(tr("Yellow"));
+ noteTitleColorBlack.setText(tr("Black"));
+ noteTitleColorGray.setText(tr("Gray"));
+ noteTitleColorCyan.setText(tr("Cyan"));
+ noteTitleColorMagenta.setText(tr("Magenta"));
+ notePinned.setText(tr("Pin/Unpin"));
+
+ titleColorMenu.addAction(noteTitleColorWhite);
+ titleColorMenu.addAction(noteTitleColorRed);
+ titleColorMenu.addAction(noteTitleColorBlue);
+ titleColorMenu.addAction(noteTitleColorGreen);
+ titleColorMenu.addAction(noteTitleColorYellow);
+ titleColorMenu.addAction(noteTitleColorBlack);
+ titleColorMenu.addAction(noteTitleColorGray);
+ titleColorMenu.addAction(noteTitleColorCyan);
+ titleColorMenu.addAction(noteTitleColorMagenta);
+
+ noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
+
+ noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
+ noteTitleColorRed.triggered.connect(this, "titleColorRed()");
+ noteTitleColorBlue.triggered.connect(this, "titleColorBlue()");
+ noteTitleColorGreen.triggered.connect(this, "titleColorGreen()");
+ noteTitleColorYellow.triggered.connect(this, "titleColorYellow()");
+ noteTitleColorBlack.triggered.connect(this, "titleColorBlack()");
+ noteTitleColorGray.triggered.connect(this, "titleColorGray()");
+ noteTitleColorCyan.triggered.connect(this, "titleColorCyan()");
+ noteTitleColorMagenta.triggered.connect(this, "titleColorMagenta()");
+ notePinned.triggered.connect(this, "notePinned()");
+ menu.exec(event.globalPos());
+ }
+
+
+ @SuppressWarnings("unused")
+ private void titleColorWhite() {noteSignal.titleColorChanged.emit(QColor.white.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorRed() {noteSignal.titleColorChanged.emit(QColor.red.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorBlue() {noteSignal.titleColorChanged.emit(QColor.blue.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorGreen() {noteSignal.titleColorChanged.emit(QColor.green.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorYellow(){noteSignal.titleColorChanged.emit(QColor.yellow.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorBlack() {noteSignal.titleColorChanged.emit(QColor.black.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorGray() {noteSignal.titleColorChanged.emit(QColor.gray.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorCyan() {noteSignal.titleColorChanged.emit(QColor.cyan.rgb());}
+ @SuppressWarnings("unused")
+ private void titleColorMagenta() {noteSignal.titleColorChanged.emit(QColor.magenta.rgb());}
+ @SuppressWarnings("unused")
+ private void notePinned() {noteSignal.notePinned.emit();}
+
+
+ @Override
+ public void dragEnterEvent(QDragEnterEvent event) {
+ StringBuffer guid = new StringBuffer(1000);
+
+ showColumn(Global.noteTableGuidPosition);
+ List<QModelIndex> selections = selectionModel().selectedRows();
+ hideColumn(Global.noteTableGuidPosition);
+
+ if (selections.size() > 0) {
+ QModelIndex index;
+ for (int i=0; i<selections.size(); i++) {
+ int row = selections.get(i).row();
+ index = proxyModel.index(row, Global.noteTableGuidPosition);
+ SortedMap<Integer, Object> ix = proxyModel.itemData(index);
+ guid.append((String)ix.values().toArray()[0]);
+ guid.append(" ");
+ }
+ }
+ event.mimeData().setData("application/x-nevernote-note", new QByteArray(guid.toString()));
+ event.accept();
+
+ }
+
+ @Override
+ public void dropEvent(QDropEvent event) {
+ if (event.source() == this)
+ event.ignore();
+ }
+
+ // Return a column width
+ public int getColumnWidth(int col) {
+ return columnWidth(col);
+ }
+
+ public void toggleSubjectDate(Boolean toggle) {
+ Global.saveColumnVisible("dateSubject", toggle);
+ setColumnHidden(Global.noteTableSubjectDatePosition, !toggle);
+ }
+
+ public void toggleChangedDate(Boolean toggle) {
+ Global.saveColumnVisible("dateChanged", toggle);
+ setColumnHidden(Global.noteTableChangedPosition, !toggle);
+ }
+
+
+ public void toggleCreationDate(Boolean toggle) {
+ Global.saveColumnVisible("dateCreated", toggle);
+ setColumnHidden(Global.noteTableCreationPosition, !toggle);
+ }
+
+ public void toggleSourceUrl(Boolean toggle) {
+ Global.saveColumnVisible("sourceUrl", toggle);
+ setColumnHidden(Global.noteTableSourceUrlPosition, !toggle);
+ }
+
+ public void toggleAuthor(Boolean toggle) {
+ Global.saveColumnVisible("author", toggle);
+ setColumnHidden(Global.noteTableAuthorPosition, !toggle);
+ }
+
+ public void toggleNotebook(Boolean toggle) {
+ Global.saveColumnVisible("notebook", toggle);
+ setColumnHidden(Global.noteTableNotebookPosition, !toggle);
+ }
+
+ public void toggleTitle(Boolean toggle) {
+ Global.saveColumnVisible("title", toggle);
+ setColumnHidden(Global.noteTableTitlePosition, !toggle);
+ }
+
+ public void toggleTags(Boolean toggle) {
+ Global.saveColumnVisible("tags", toggle);
+ setColumnHidden(Global.noteTableTagPosition, !toggle);
+ }
+
+ public void toggleSynchronized(Boolean toggle) {
+ Global.saveColumnVisible("synchronized", toggle);
+ setColumnHidden(Global.noteTableSynchronizedPosition, !toggle);
+ }
+ public void togglePinned(Boolean toggle) {
+ Global.saveColumnVisible("pinned", toggle);
+ setColumnHidden(Global.noteTablePinnedPosition, !toggle);
+ }
+ public void toggleGuid(Boolean toggle) {
+ Global.saveColumnVisible("guid", toggle);
+ setColumnHidden(Global.noteTableGuidPosition, !toggle);
+ }
+ public void toggleThumbnail(Boolean toggle) {
+ Global.saveColumnVisible("thumbnail", toggle);
+ int size;
+ if (!toggle) {
+ QFontMetrics f = QApplication.fontMetrics();
+ size = f.height();
+ verticalHeader().setDefaultSectionSize(f.height());
+ } else
+ size = Global.smallThumbnailSize.height();
+ for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
+ setRowHeight(i, size);
+ }
+
+ setColumnHidden(Global.noteTableThumbnailPosition, !toggle);
+ }
+}