OSDN Git Service

メインメニューバーの「新しいタブでノート追加」表示制御も修正。
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / TableView.java
1 /*
2  * This file is part of NixNote/NeighborNote 
3  * Copyright 2009 Randy Baumgarte
4  * Copyright 2013 Yuki Takahashi
5  * 
6  * This file may be licensed under the terms of of the
7  * GNU General Public License Version 2 (the ``GPL'').
8  *
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.
13  *
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.
18  *
19 */
20 package cx.fbn.nevernote.gui;
21
22 import java.util.List;
23 import java.util.SortedMap;
24
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;
43
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;
51
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;
62         // ICHANGED
63         private QAction openNewTabAction;
64         private QAction addNoteNewTabAction;
65     
66     // Note title colors
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;
78
79
80     
81     public TableViewHeader header;
82     int fontHeight;
83     public Signal1<String> rowChanged;
84     public Signal0      resetViewport;
85     public NoteSignal noteSignal;
86         
87         // ICHANGED
88         private final NeverNote parent;
89         
90         // ICHANGED parent引数を追加
91         public TableView(ApplicationLogger l, ListManager m, NeverNote parent) {
92                 // ICHANGED
93                 this.parent = parent;
94                 
95                 logger = l;
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)");
111                 
112                 noteSignal = new NoteSignal();
113                 setAcceptDrops(true);
114                 setDragEnabled(true);
115                 setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);
116                 setDropIndicatorShown(false);
117                 
118                 runner = m;     
119                 
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()");
133        
134         proxyModel = new NoteSortFilterProxyModel(this);
135         proxyModel.setSourceModel(runner.getNoteTableModel());
136         setAlternatingRowColors(false);
137         setModel(proxyModel);
138         runner.getNoteTableModel().setSortProxyModel(proxyModel);
139                
140         setSortingEnabled(true);
141         int sortCol = proxyModel.sortColumn();
142                 SortOrder sortOrder = proxyModel.sortOrder();
143                 sortByColumn(sortCol, sortOrder);
144
145                 setSelectionBehavior(SelectionBehavior.SelectRows);
146                 setSelectionMode(SelectionMode.SingleSelection);
147                 verticalHeader().setVisible(false);
148                 hideColumn(Global.noteTableGuidPosition);  // Hide the guid column
149                 setShowGrid(false);
150                 setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers);
151                 
152                 QFontMetrics f = QApplication.fontMetrics();
153                 fontHeight = f.height();
154                 rowChanged = new Signal1<String>();
155                 resetViewport = new Signal0();
156                 
157                 NoteTableDateDelegate dateDelegate = new NoteTableDateDelegate();
158                 setItemDelegateForColumn(Global.noteTableCreationPosition, dateDelegate);
159                 setItemDelegateForColumn(Global.noteTableChangedPosition, dateDelegate);
160                 setItemDelegateForColumn(Global.noteTableSubjectDatePosition, dateDelegate);
161                 
162         }
163         
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) 
169 //                      return;
170                 
171 //              resetViewport.emit();
172         }
173         
174                 
175         public void load(boolean reload) {
176                 proxyModel.clear();
177                 setSortingEnabled(false);
178                 QFontMetrics f = QApplication.fontMetrics();
179                 if (!Global.isColumnVisible("thumbnail"))
180                                 verticalHeader().setDefaultSectionSize(f.height());
181                 else {
182                         if (Global.getListView() == Global.View_List_Wide)
183                                 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
184                         else
185                                 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
186                 }
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);
192                         }
193                         if (!Global.showDeleted == true && 
194                                         (runner.getNoteIndex().get(i).isActive() || 
195                                                         metaInfo.isPinned())) {         
196                                 proxyModel.addGuid(guid, metaInfo);
197                         }
198                 }
199
200                 if (!reload) {
201                         logger.log(logger.EXTREME, "TableView.load() reload starting.");
202                         proxyModel.filter();
203                         setSortingEnabled(true);
204                         logger.log(logger.EXTREME, "TableView.load() leaving reload.");
205                         return;
206                 }
207                 logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");
208         
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);                                                  
214                         }
215                 } 
216                 proxyModel.invalidate();
217                 
218                 resizeColumnWidths();
219                 repositionColumns();
220                 
221                 proxyModel.filter();
222                 
223                 setSortingEnabled(true);
224                 resetViewport.emit();
225         }
226         
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);
231
232                 from = header.visualIndex(Global.noteTableTitlePosition);
233                 to = Global.getColumnPosition("noteTableTitlePosition");
234                 if (to>=0) header.moveSection(from, to);
235                 
236                 from = header.visualIndex(Global.noteTableTagPosition);
237                 to = Global.getColumnPosition("noteTableTagPosition");
238                 if (to>=0) header.moveSection(from, to);
239                 
240                 from = header.visualIndex(Global.noteTableNotebookPosition);
241                 to = Global.getColumnPosition("noteTableNotebookPosition");
242                 if (to>=0) header.moveSection(from, to);
243                 
244                 from = header.visualIndex(Global.noteTableChangedPosition);
245                 to = Global.getColumnPosition("noteTableChangedPosition");
246                 if (to>=0) header.moveSection(from, to);
247                 
248                 from = header.visualIndex(Global.noteTableSourceUrlPosition);
249                 to = Global.getColumnPosition("noteTableSourceUrlPosition");
250                 if (to>=0) header.moveSection(from, to);
251                 
252                 from = header.visualIndex(Global.noteTableAuthorPosition);
253                 to = Global.getColumnPosition("noteTableAuthorPosition");
254                 if (to>=0) header.moveSection(from, to);
255                 
256                 from = header.visualIndex(Global.noteTableSubjectDatePosition);
257                 to = Global.getColumnPosition("noteTableSubjectDatePosition");
258                 if (to>=0) header.moveSection(from, to);
259                 
260                 from = header.visualIndex(Global.noteTableSynchronizedPosition);
261                 to = Global.getColumnPosition("noteTableSynchronizedPosition");
262                 if (to>=0) header.moveSection(from, to);
263
264                 from = header.visualIndex(Global.noteTablePinnedPosition);
265                 to = Global.getColumnPosition("noteTablePinnedPosition");
266                 if (to>=0) header.moveSection(from, to);
267
268                 
269                 from = header.visualIndex(Global.noteTableGuidPosition);
270                 to = Global.getColumnPosition("noteTableGuidPosition");
271                 if (to>=0) header.moveSection(from, to);
272                 
273                 
274                 from = header.visualIndex(Global.noteTableThumbnailPosition);
275                 to = Global.getColumnPosition("noteTableThumbnailPosition");
276                 if (to>=0) header.moveSection(from, to);
277
278         }
279         
280         public void resizeColumnWidths() {
281                 int width;
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);
308
309         }
310         
311         public void resizeRowHeights() {
312                 int height;
313                 if (!Global.isColumnVisible("thumbnail") || !Global.enableThumbnails()) {
314                         QFontMetrics f = QApplication.fontMetrics();
315                         verticalHeader().setDefaultSectionSize(f.height());
316                         height = fontHeight;
317                 } else {
318                         if (Global.getListView() == Global.View_List_Wide) {
319                                 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
320                                 height = Global.smallThumbnailSize.height();
321                         } else {
322                                 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
323                                 height = Global.largeThumbnailSize.height();
324                         }
325                 }
326                 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
327                         setRowHeight(i, height);
328                 }
329         }
330         
331         public void insertRow(Note tempNote, NoteMetadata meta, boolean newNote, int row) {
332                 if (newNote)
333                         proxyModel.addGuid(tempNote.getGuid(), meta);
334                 if (row > runner.getNoteTableModel().rowCount())
335                         runner.getNoteTableModel().insertRow(0);
336                 
337                 if (row < 0) {
338                         row  = runner.getNoteTableModel().rowCount();
339                         runner.getNoteTableModel().insertRow(row);
340                 }
341                 if (newNote) {
342                         resizeRowHeights();
343                 }
344         }
345         protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {
346                 return true;
347         }
348
349         public void setAddAction(QAction a) {
350                 addAction = a;
351         }
352         
353         public void setMergeNotesAction(QAction a) {
354                 mergeNotesAction = a;
355         }
356         
357         public void setCopyAsUrlAction(QAction a) {
358                 copyAsUrlAction = a;
359         }
360         
361         public void setNoteHistoryAction(QAction a) {
362                 noteHistoryAction = a;
363         }
364         
365         public void setDeleteAction(QAction d) {
366                 deleteAction = d;
367         }
368          
369         public void setRestoreAction(QAction r) {
370                 restoreAction = r;
371         }
372         public void setNoteDuplicateAction(QAction d) {
373                 duplicateAction = d;
374         }
375         
376         // ICHANGED
377         public void setOpenNewTabAction(QAction t) {
378                 openNewTabAction = t;
379         }
380         
381         // ICHANGED
382         public void setAddNoteNewTabAction(QAction t) {
383                 addNoteNewTabAction = t;
384         }
385         
386         @Override
387         public void keyPressEvent(QKeyEvent e) {
388                 if (e.matches(StandardKey.MoveToStartOfDocument)) {
389                         if (runner.getNoteTableModel().rowCount() > 0) {
390                                 clearSelection();
391                                 selectRow(0);
392                         }
393                 }
394                 if (e.matches(StandardKey.MoveToEndOfDocument)) {
395                         if (runner.getNoteTableModel().rowCount() > 0) {
396                                 clearSelection();
397                                 selectRow(model().rowCount()-1);
398                         }
399                 }
400                 super.keyPressEvent(e);
401         }
402         
403         @Override
404         public void contextMenuEvent(QContextMenuEvent event) {
405                 QMenu menu = new QMenu(this);
406                 
407                 // ICHANGED
408                 menu.addAction(openNewTabAction);
409                 
410                 // ICHANGED
411                 menu.addSeparator();
412                 if (Global.showDeleted) {
413                         menu.addAction(restoreAction);
414                 } else {
415                         menu.addAction(addAction);
416                         if (parent.getCurrentNoteGuid() != null && !parent.getCurrentNoteGuid().equals("")) {
417                                 menu.addAction(addNoteNewTabAction);
418                         }
419                 }
420                 menu.addSeparator();
421                 
422                 menu.addAction(deleteAction);
423                 menu.addSeparator();
424                 menu.addAction(duplicateAction);
425                 menu.addAction(copyAsUrlAction);
426                 menu.addSeparator();
427                 menu.addAction(noteHistoryAction);
428                 menu.addAction(mergeNotesAction);
429                 
430                 QMenu titleColorMenu = new QMenu(this);
431                 
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);
443             
444             notePinned = new QAction(titleColorMenu);
445             menu.addAction(notePinned);
446     
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"));
457             
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);
467             
468             noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
469             
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());
481         }
482         
483         
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();}
504         
505
506         @Override
507         public void dragEnterEvent(QDragEnterEvent event) {
508                 StringBuffer guid = new StringBuffer(1000);
509                 
510                 showColumn(Global.noteTableGuidPosition);
511                 List<QModelIndex> selections = selectionModel().selectedRows();
512                 hideColumn(Global.noteTableGuidPosition);
513                 
514         if (selections.size() > 0) {
515                 QModelIndex index;
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]);
521                         guid.append(" ");
522                 }
523         }
524                 event.mimeData().setData("application/x-nevernote-note", new QByteArray(guid.toString()));
525                 event.accept();
526                                 
527         }
528         
529         @Override
530         public void dropEvent(QDropEvent event) {
531                 if (event.source() == this)
532                         event.ignore();
533         }
534         
535         // Return a column width
536         public int getColumnWidth(int col) {
537                 return columnWidth(col);
538         }
539         
540         public void toggleSubjectDate(Boolean toggle) {
541                 Global.saveColumnVisible("dateSubject", toggle);
542                 setColumnHidden(Global.noteTableSubjectDatePosition, !toggle);
543         }
544         
545         public void toggleChangedDate(Boolean toggle) {
546                 Global.saveColumnVisible("dateChanged", toggle);
547                 setColumnHidden(Global.noteTableChangedPosition, !toggle);
548         }
549         
550         
551         public void toggleCreationDate(Boolean toggle) {
552                 Global.saveColumnVisible("dateCreated", toggle);
553                 setColumnHidden(Global.noteTableCreationPosition, !toggle);
554         }
555         
556         public void toggleSourceUrl(Boolean toggle) {
557                 Global.saveColumnVisible("sourceUrl", toggle);
558                 setColumnHidden(Global.noteTableSourceUrlPosition, !toggle);
559         }
560         
561         public void toggleAuthor(Boolean toggle) {
562                 Global.saveColumnVisible("author", toggle);
563                 setColumnHidden(Global.noteTableAuthorPosition, !toggle);
564         }
565         
566         public void toggleNotebook(Boolean toggle) {
567                 Global.saveColumnVisible("notebook", toggle);
568                 setColumnHidden(Global.noteTableNotebookPosition, !toggle);
569         }
570
571         public void toggleTitle(Boolean toggle) {
572                 Global.saveColumnVisible("title", toggle);
573                 setColumnHidden(Global.noteTableTitlePosition, !toggle);
574         }
575
576         public void toggleTags(Boolean toggle) {
577                 Global.saveColumnVisible("tags", toggle);
578                 setColumnHidden(Global.noteTableTagPosition, !toggle);
579         }
580         
581         public void toggleSynchronized(Boolean toggle) {
582                 Global.saveColumnVisible("synchronized", toggle);
583                 setColumnHidden(Global.noteTableSynchronizedPosition, !toggle);
584         }
585         public void togglePinned(Boolean toggle) {
586                 Global.saveColumnVisible("pinned", toggle);
587                 setColumnHidden(Global.noteTablePinnedPosition, !toggle);
588         }
589         public void toggleGuid(Boolean toggle) {
590                 Global.saveColumnVisible("guid", toggle);
591                 setColumnHidden(Global.noteTableGuidPosition, !toggle);
592         }       
593         public void toggleThumbnail(Boolean toggle) {
594                 Global.saveColumnVisible("thumbnail", toggle);
595                 int size;
596                 if (!toggle) {
597                         QFontMetrics f = QApplication.fontMetrics();
598                         size = f.height();
599                         verticalHeader().setDefaultSectionSize(f.height());
600                 } else
601                         size = Global.smallThumbnailSize.height();
602                 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
603                         setRowHeight(i, size);
604                 }
605                         
606                 setColumnHidden(Global.noteTableThumbnailPosition, !toggle);
607         }
608 }