2 * This file is part of NixNote/NeighborNote
3 * Copyright 2009 Randy Baumgarte
4 * Copyright 2013 Yuki Takahashi
6 * This file may be licensed under the terms of of the
7 * GNU General Public License Version 2 (the ``GPL'').
9 * Software distributed under the License is distributed
10 * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
11 * express or implied. See the GPL for the specific language
12 * governing rights and limitations.
14 * You should have received a copy of the GPL along with this
15 * program. If not, go to http://www.gnu.org/licenses/gpl.html
16 * or write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 package cx.fbn.nevernote.gui;
22 import java.util.List;
23 import java.util.SortedMap;
25 import com.evernote.edam.type.Note;
26 import com.trolltech.qt.core.QByteArray;
27 import com.trolltech.qt.core.QModelIndex;
28 import com.trolltech.qt.core.Qt;
29 import com.trolltech.qt.core.Qt.Orientation;
30 import com.trolltech.qt.core.Qt.SortOrder;
31 import com.trolltech.qt.gui.QAbstractItemView;
32 import com.trolltech.qt.gui.QAction;
33 import com.trolltech.qt.gui.QApplication;
34 import com.trolltech.qt.gui.QColor;
35 import com.trolltech.qt.gui.QContextMenuEvent;
36 import com.trolltech.qt.gui.QDragEnterEvent;
37 import com.trolltech.qt.gui.QDropEvent;
38 import com.trolltech.qt.gui.QFontMetrics;
39 import com.trolltech.qt.gui.QKeyEvent;
40 import com.trolltech.qt.gui.QKeySequence.StandardKey;
41 import com.trolltech.qt.gui.QMenu;
42 import com.trolltech.qt.gui.QTableView;
44 import cx.fbn.nevernote.Global;
45 import cx.fbn.nevernote.NeverNote;
46 import cx.fbn.nevernote.evernote.NoteMetadata;
47 import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;
48 import cx.fbn.nevernote.signals.NoteSignal;
49 import cx.fbn.nevernote.utilities.ApplicationLogger;
50 import cx.fbn.nevernote.utilities.ListManager;
52 public class TableView extends QTableView {
53 private final ListManager runner;
54 private final ApplicationLogger logger;
55 public NoteSortFilterProxyModel proxyModel; // note sort model
56 private QAction deleteAction;
57 private QAction addAction;
58 private QAction restoreAction;
59 private QAction noteHistoryAction;
60 private QAction duplicateAction;
61 private QAction mergeNotesAction;
63 private QAction openNewTabAction;
64 private QAction addNoteNewTabAction;
67 private QAction noteTitleColorWhite;
68 private QAction noteTitleColorRed;
69 private QAction noteTitleColorBlue;
70 private QAction noteTitleColorGreen;
71 private QAction noteTitleColorYellow;
72 private QAction noteTitleColorBlack;
73 private QAction noteTitleColorGray;
74 private QAction noteTitleColorCyan;
75 private QAction noteTitleColorMagenta;
76 private QAction notePinned;
77 private QAction copyAsUrlAction;
81 public TableViewHeader header;
83 public Signal1<String> rowChanged;
84 public Signal0 resetViewport;
85 public NoteSignal noteSignal;
88 private final NeverNote parent;
90 // ICHANGED parent引数を追加
91 public TableView(ApplicationLogger l, ListManager m, NeverNote parent) {
96 header = new TableViewHeader(Orientation.Horizontal,this);
97 setHorizontalHeader(header);
98 header.setMovable(true);
99 header.subjectDateAction.toggled.connect(this, "toggleSubjectDate(Boolean)");
100 header.createdDateAction.toggled.connect(this, "toggleCreationDate(Boolean)");
101 header.changedDateAction.toggled.connect(this, "toggleChangedDate(Boolean)");
102 header.authorAction.toggled.connect(this, "toggleAuthor(Boolean)");
103 header.urlAction.toggled.connect(this, "toggleSourceUrl(Boolean)");
104 header.pinnedAction.toggled.connect(this, "togglePinned(Boolean)");
105 header.tagsAction.toggled.connect(this, "toggleTags(Boolean)");
106 header.notebookAction.toggled.connect(this, "toggleNotebook(Boolean)");
107 header.synchronizedAction.toggled.connect(this, "toggleSynchronized(Boolean)");
108 header.guidAction.toggled.connect(this, "toggleGuid(Boolean)");
109 header.thumbnailAction.toggled.connect(this, "toggleThumbnail(Boolean)");
110 header.titleAction.toggled.connect(this, "toggleTitle(Boolean)");
112 noteSignal = new NoteSignal();
113 setAcceptDrops(true);
114 setDragEnabled(true);
115 setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);
116 setDropIndicatorShown(false);
120 runner.getNoteTableModel().setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, tr("Date Created"), Qt.ItemDataRole.DisplayRole);
121 runner.getNoteTableModel().setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, tr("Tags"), Qt.ItemDataRole.DisplayRole);
122 runner.getNoteTableModel().setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, tr("Guid"), Qt.ItemDataRole.DisplayRole);
123 runner.getNoteTableModel().setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, tr("Notebook"), Qt.ItemDataRole.DisplayRole);
124 runner.getNoteTableModel().setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, tr("Title"), Qt.ItemDataRole.DisplayRole);
125 runner.getNoteTableModel().setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, tr("Date Changed"), Qt.ItemDataRole.DisplayRole);
126 runner.getNoteTableModel().setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, tr("Author"), Qt.ItemDataRole.DisplayRole);
127 runner.getNoteTableModel().setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"), Qt.ItemDataRole.DisplayRole);
128 runner.getNoteTableModel().setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"), Qt.ItemDataRole.DisplayRole);
129 runner.getNoteTableModel().setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Sync"), Qt.ItemDataRole.DisplayRole);
130 runner.getNoteTableModel().setHeaderData(Global.noteTablePinnedPosition, Qt.Orientation.Horizontal, tr("Pinned"), Qt.ItemDataRole.DisplayRole);
131 runner.getNoteTableModel().setHeaderData(Global.noteTableThumbnailPosition, Qt.Orientation.Horizontal, tr("Thumbnail"), Qt.ItemDataRole.DisplayRole);
132 header.sortIndicatorChanged.connect(this, "resetViewport()");
134 proxyModel = new NoteSortFilterProxyModel(this);
135 proxyModel.setSourceModel(runner.getNoteTableModel());
136 setAlternatingRowColors(false);
137 setModel(proxyModel);
138 runner.getNoteTableModel().setSortProxyModel(proxyModel);
140 setSortingEnabled(true);
141 int sortCol = proxyModel.sortColumn();
142 SortOrder sortOrder = proxyModel.sortOrder();
143 sortByColumn(sortCol, sortOrder);
145 setSelectionBehavior(SelectionBehavior.SelectRows);
146 setSelectionMode(SelectionMode.SingleSelection);
147 verticalHeader().setVisible(false);
148 hideColumn(Global.noteTableGuidPosition); // Hide the guid column
150 setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers);
152 QFontMetrics f = QApplication.fontMetrics();
153 fontHeight = f.height();
154 rowChanged = new Signal1<String>();
155 resetViewport = new Signal0();
157 NoteTableDateDelegate dateDelegate = new NoteTableDateDelegate();
158 setItemDelegateForColumn(Global.noteTableCreationPosition, dateDelegate);
159 setItemDelegateForColumn(Global.noteTableChangedPosition, dateDelegate);
160 setItemDelegateForColumn(Global.noteTableSubjectDatePosition, dateDelegate);
164 // This should rescroll to the current item in the list when a column is
165 // sorted. Somehow I can't get this to work, but this part is correct.
166 @SuppressWarnings("unused")
167 private void resetViewport() {
168 // if (currentIndex() == null)
171 // resetViewport.emit();
175 public void load(boolean reload) {
177 setSortingEnabled(false);
178 QFontMetrics f = QApplication.fontMetrics();
179 if (!Global.isColumnVisible("thumbnail"))
180 verticalHeader().setDefaultSectionSize(f.height());
182 if (Global.getListView() == Global.View_List_Wide)
183 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
185 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
187 for (int i=0; i<runner.getNoteIndex().size(); i++) {
188 String guid = runner.getNoteIndex().get(i).getGuid();
189 NoteMetadata metaInfo = runner.getNoteMetadata().get(guid);
190 if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive()) {
191 proxyModel.addGuid(guid, null);
193 if (!Global.showDeleted == true &&
194 (runner.getNoteIndex().get(i).isActive() ||
195 metaInfo.isPinned())) {
196 proxyModel.addGuid(guid, metaInfo);
201 logger.log(logger.EXTREME, "TableView.load() reload starting.");
203 setSortingEnabled(true);
204 logger.log(logger.EXTREME, "TableView.load() leaving reload.");
207 logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");
209 for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {
210 if (runner.getMasterNoteIndex().get(i) != null) {
211 Note note = runner.getMasterNoteIndex().get(i);
212 NoteMetadata meta = runner.getNoteMetadata().get(note.getGuid());
213 insertRow(runner.getMasterNoteIndex().get(i), meta, false, i);
216 proxyModel.invalidate();
218 resizeColumnWidths();
223 setSortingEnabled(true);
224 resetViewport.emit();
227 public void repositionColumns() {
228 int from = header.visualIndex(Global.noteTableCreationPosition);
229 int to = Global.getColumnPosition("noteTableCreationPosition");
230 if (to>=0) header.moveSection(from, to);
232 from = header.visualIndex(Global.noteTableTitlePosition);
233 to = Global.getColumnPosition("noteTableTitlePosition");
234 if (to>=0) header.moveSection(from, to);
236 from = header.visualIndex(Global.noteTableTagPosition);
237 to = Global.getColumnPosition("noteTableTagPosition");
238 if (to>=0) header.moveSection(from, to);
240 from = header.visualIndex(Global.noteTableNotebookPosition);
241 to = Global.getColumnPosition("noteTableNotebookPosition");
242 if (to>=0) header.moveSection(from, to);
244 from = header.visualIndex(Global.noteTableChangedPosition);
245 to = Global.getColumnPosition("noteTableChangedPosition");
246 if (to>=0) header.moveSection(from, to);
248 from = header.visualIndex(Global.noteTableSourceUrlPosition);
249 to = Global.getColumnPosition("noteTableSourceUrlPosition");
250 if (to>=0) header.moveSection(from, to);
252 from = header.visualIndex(Global.noteTableAuthorPosition);
253 to = Global.getColumnPosition("noteTableAuthorPosition");
254 if (to>=0) header.moveSection(from, to);
256 from = header.visualIndex(Global.noteTableSubjectDatePosition);
257 to = Global.getColumnPosition("noteTableSubjectDatePosition");
258 if (to>=0) header.moveSection(from, to);
260 from = header.visualIndex(Global.noteTableSynchronizedPosition);
261 to = Global.getColumnPosition("noteTableSynchronizedPosition");
262 if (to>=0) header.moveSection(from, to);
264 from = header.visualIndex(Global.noteTablePinnedPosition);
265 to = Global.getColumnPosition("noteTablePinnedPosition");
266 if (to>=0) header.moveSection(from, to);
269 from = header.visualIndex(Global.noteTableGuidPosition);
270 to = Global.getColumnPosition("noteTableGuidPosition");
271 if (to>=0) header.moveSection(from, to);
274 from = header.visualIndex(Global.noteTableThumbnailPosition);
275 to = Global.getColumnPosition("noteTableThumbnailPosition");
276 if (to>=0) header.moveSection(from, to);
280 public void resizeColumnWidths() {
282 width = Global.getColumnWidth("noteTableCreationPosition");
283 if (width>0) setColumnWidth(Global.noteTableCreationPosition, width);
284 width = Global.getColumnWidth("noteTableChangedPosition");
285 if (width>0) setColumnWidth(Global.noteTableChangedPosition, width);
286 width = Global.getColumnWidth("noteTableTitlePosition");
287 if (width>0) setColumnWidth(Global.noteTableTitlePosition, width);
288 width = Global.getColumnWidth("noteTableTagPosition");
289 if (width>0) setColumnWidth(Global.noteTableTagPosition, width);
290 width = Global.getColumnWidth("noteTableGuidPosition");
291 if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
292 width = Global.getColumnWidth("noteTableNotebookPosition");
293 if (width>0) setColumnWidth(Global.noteTableNotebookPosition, width);
294 width = Global.getColumnWidth("noteTableSourceUrlPosition");
295 if (width>0) setColumnWidth(Global.noteTableSourceUrlPosition, width);
296 width = Global.getColumnWidth("noteTableAuthorPosition");
297 if (width>0) setColumnWidth(Global.noteTableAuthorPosition, width);
298 width = Global.getColumnWidth("noteTableSubjectDatePosition");
299 if (width>0) setColumnWidth(Global.noteTableSubjectDatePosition, width);
300 width = Global.getColumnWidth("noteTableSynchronizedPosition");
301 if (width>0) setColumnWidth(Global.noteTableSynchronizedPosition, width);
302 width = Global.getColumnWidth("noteTableThumbnailPosition");
303 if (width>0) setColumnWidth(Global.noteTablePinnedPosition, width);
304 width = Global.getColumnWidth("noteTablePinnedPosition");
305 if (width>0) setColumnWidth(Global.noteTableThumbnailPosition, width);
306 width = Global.getColumnWidth("noteTableGuidPosition");
307 if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
311 public void resizeRowHeights() {
313 if (!Global.isColumnVisible("thumbnail") || !Global.enableThumbnails()) {
314 QFontMetrics f = QApplication.fontMetrics();
315 verticalHeader().setDefaultSectionSize(f.height());
318 if (Global.getListView() == Global.View_List_Wide) {
319 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
320 height = Global.smallThumbnailSize.height();
322 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
323 height = Global.largeThumbnailSize.height();
326 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
327 setRowHeight(i, height);
331 public void insertRow(Note tempNote, NoteMetadata meta, boolean newNote, int row) {
333 proxyModel.addGuid(tempNote.getGuid(), meta);
334 if (row > runner.getNoteTableModel().rowCount())
335 runner.getNoteTableModel().insertRow(0);
338 row = runner.getNoteTableModel().rowCount();
339 runner.getNoteTableModel().insertRow(row);
345 protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {
349 public void setAddAction(QAction a) {
353 public void setMergeNotesAction(QAction a) {
354 mergeNotesAction = a;
357 public void setCopyAsUrlAction(QAction a) {
361 public void setNoteHistoryAction(QAction a) {
362 noteHistoryAction = a;
365 public void setDeleteAction(QAction d) {
369 public void setRestoreAction(QAction r) {
372 public void setNoteDuplicateAction(QAction d) {
377 public void setOpenNewTabAction(QAction t) {
378 openNewTabAction = t;
382 public void setAddNoteNewTabAction(QAction t) {
383 addNoteNewTabAction = t;
387 public void keyPressEvent(QKeyEvent e) {
388 if (e.matches(StandardKey.MoveToStartOfDocument)) {
389 if (runner.getNoteTableModel().rowCount() > 0) {
394 if (e.matches(StandardKey.MoveToEndOfDocument)) {
395 if (runner.getNoteTableModel().rowCount() > 0) {
397 selectRow(model().rowCount()-1);
400 super.keyPressEvent(e);
404 public void contextMenuEvent(QContextMenuEvent event) {
405 QMenu menu = new QMenu(this);
408 menu.addAction(openNewTabAction);
412 if (Global.showDeleted) {
413 menu.addAction(restoreAction);
415 menu.addAction(addAction);
416 if (parent.getCurrentNoteGuid() != null && !parent.getCurrentNoteGuid().equals("")) {
417 menu.addAction(addNoteNewTabAction);
422 menu.addAction(deleteAction);
424 menu.addAction(duplicateAction);
425 menu.addAction(copyAsUrlAction);
427 menu.addAction(noteHistoryAction);
428 menu.addAction(mergeNotesAction);
430 QMenu titleColorMenu = new QMenu(this);
432 titleColorMenu.setTitle(tr("Title Color"));
433 menu.addMenu(titleColorMenu);
434 noteTitleColorWhite = new QAction(titleColorMenu);
435 noteTitleColorRed = new QAction(titleColorMenu);
436 noteTitleColorBlue = new QAction(titleColorMenu);
437 noteTitleColorGreen = new QAction(titleColorMenu);
438 noteTitleColorYellow = new QAction(titleColorMenu);
439 noteTitleColorBlack = new QAction(titleColorMenu);
440 noteTitleColorGray = new QAction(titleColorMenu);
441 noteTitleColorCyan = new QAction(titleColorMenu);
442 noteTitleColorMagenta = new QAction(titleColorMenu);
444 notePinned = new QAction(titleColorMenu);
445 menu.addAction(notePinned);
447 noteTitleColorWhite.setText(tr("White"));
448 noteTitleColorRed.setText(tr("Red"));
449 noteTitleColorBlue.setText(tr("Blue"));
450 noteTitleColorGreen.setText(tr("Green"));
451 noteTitleColorYellow.setText(tr("Yellow"));
452 noteTitleColorBlack.setText(tr("Black"));
453 noteTitleColorGray.setText(tr("Gray"));
454 noteTitleColorCyan.setText(tr("Cyan"));
455 noteTitleColorMagenta.setText(tr("Magenta"));
456 notePinned.setText(tr("Pin/Unpin"));
458 titleColorMenu.addAction(noteTitleColorWhite);
459 titleColorMenu.addAction(noteTitleColorRed);
460 titleColorMenu.addAction(noteTitleColorBlue);
461 titleColorMenu.addAction(noteTitleColorGreen);
462 titleColorMenu.addAction(noteTitleColorYellow);
463 titleColorMenu.addAction(noteTitleColorBlack);
464 titleColorMenu.addAction(noteTitleColorGray);
465 titleColorMenu.addAction(noteTitleColorCyan);
466 titleColorMenu.addAction(noteTitleColorMagenta);
468 noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
470 noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
471 noteTitleColorRed.triggered.connect(this, "titleColorRed()");
472 noteTitleColorBlue.triggered.connect(this, "titleColorBlue()");
473 noteTitleColorGreen.triggered.connect(this, "titleColorGreen()");
474 noteTitleColorYellow.triggered.connect(this, "titleColorYellow()");
475 noteTitleColorBlack.triggered.connect(this, "titleColorBlack()");
476 noteTitleColorGray.triggered.connect(this, "titleColorGray()");
477 noteTitleColorCyan.triggered.connect(this, "titleColorCyan()");
478 noteTitleColorMagenta.triggered.connect(this, "titleColorMagenta()");
479 notePinned.triggered.connect(this, "notePinned()");
480 menu.exec(event.globalPos());
484 @SuppressWarnings("unused")
485 private void titleColorWhite() {noteSignal.titleColorChanged.emit(QColor.white.rgb());}
486 @SuppressWarnings("unused")
487 private void titleColorRed() {noteSignal.titleColorChanged.emit(QColor.red.rgb());}
488 @SuppressWarnings("unused")
489 private void titleColorBlue() {noteSignal.titleColorChanged.emit(QColor.blue.rgb());}
490 @SuppressWarnings("unused")
491 private void titleColorGreen() {noteSignal.titleColorChanged.emit(QColor.green.rgb());}
492 @SuppressWarnings("unused")
493 private void titleColorYellow(){noteSignal.titleColorChanged.emit(QColor.yellow.rgb());}
494 @SuppressWarnings("unused")
495 private void titleColorBlack() {noteSignal.titleColorChanged.emit(QColor.black.rgb());}
496 @SuppressWarnings("unused")
497 private void titleColorGray() {noteSignal.titleColorChanged.emit(QColor.gray.rgb());}
498 @SuppressWarnings("unused")
499 private void titleColorCyan() {noteSignal.titleColorChanged.emit(QColor.cyan.rgb());}
500 @SuppressWarnings("unused")
501 private void titleColorMagenta() {noteSignal.titleColorChanged.emit(QColor.magenta.rgb());}
502 @SuppressWarnings("unused")
503 private void notePinned() {noteSignal.notePinned.emit();}
507 public void dragEnterEvent(QDragEnterEvent event) {
508 StringBuffer guid = new StringBuffer(1000);
510 showColumn(Global.noteTableGuidPosition);
511 List<QModelIndex> selections = selectionModel().selectedRows();
512 hideColumn(Global.noteTableGuidPosition);
514 if (selections.size() > 0) {
516 for (int i=0; i<selections.size(); i++) {
517 int row = selections.get(i).row();
518 index = proxyModel.index(row, Global.noteTableGuidPosition);
519 SortedMap<Integer, Object> ix = proxyModel.itemData(index);
520 guid.append((String)ix.values().toArray()[0]);
524 event.mimeData().setData("application/x-nevernote-note", new QByteArray(guid.toString()));
530 public void dropEvent(QDropEvent event) {
531 if (event.source() == this)
535 // Return a column width
536 public int getColumnWidth(int col) {
537 return columnWidth(col);
540 public void toggleSubjectDate(Boolean toggle) {
541 Global.saveColumnVisible("dateSubject", toggle);
542 setColumnHidden(Global.noteTableSubjectDatePosition, !toggle);
545 public void toggleChangedDate(Boolean toggle) {
546 Global.saveColumnVisible("dateChanged", toggle);
547 setColumnHidden(Global.noteTableChangedPosition, !toggle);
551 public void toggleCreationDate(Boolean toggle) {
552 Global.saveColumnVisible("dateCreated", toggle);
553 setColumnHidden(Global.noteTableCreationPosition, !toggle);
556 public void toggleSourceUrl(Boolean toggle) {
557 Global.saveColumnVisible("sourceUrl", toggle);
558 setColumnHidden(Global.noteTableSourceUrlPosition, !toggle);
561 public void toggleAuthor(Boolean toggle) {
562 Global.saveColumnVisible("author", toggle);
563 setColumnHidden(Global.noteTableAuthorPosition, !toggle);
566 public void toggleNotebook(Boolean toggle) {
567 Global.saveColumnVisible("notebook", toggle);
568 setColumnHidden(Global.noteTableNotebookPosition, !toggle);
571 public void toggleTitle(Boolean toggle) {
572 Global.saveColumnVisible("title", toggle);
573 setColumnHidden(Global.noteTableTitlePosition, !toggle);
576 public void toggleTags(Boolean toggle) {
577 Global.saveColumnVisible("tags", toggle);
578 setColumnHidden(Global.noteTableTagPosition, !toggle);
581 public void toggleSynchronized(Boolean toggle) {
582 Global.saveColumnVisible("synchronized", toggle);
583 setColumnHidden(Global.noteTableSynchronizedPosition, !toggle);
585 public void togglePinned(Boolean toggle) {
586 Global.saveColumnVisible("pinned", toggle);
587 setColumnHidden(Global.noteTablePinnedPosition, !toggle);
589 public void toggleGuid(Boolean toggle) {
590 Global.saveColumnVisible("guid", toggle);
591 setColumnHidden(Global.noteTableGuidPosition, !toggle);
593 public void toggleThumbnail(Boolean toggle) {
594 Global.saveColumnVisible("thumbnail", toggle);
597 QFontMetrics f = QApplication.fontMetrics();
599 verticalHeader().setDefaultSectionSize(f.height());
601 size = Global.smallThumbnailSize.height();
602 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
603 setRowHeight(i, size);
606 setColumnHidden(Global.noteTableThumbnailPosition, !toggle);