OSDN Git Service

noteTableSelection()でcurrentNoteGuidを変更してから(状況によって)元に戻すような設計になっていたのを改良。
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / TableView.java
1 /*
2  * This file is part of NixNote 
3  * Copyright 2009 Randy Baumgarte
4  * 
5  * This file may be licensed under the terms of of the
6  * GNU General Public License Version 2 (the ``GPL'').
7  *
8  * Software distributed under the License is distributed
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
10  * express or implied. See the GPL for the specific language
11  * governing rights and limitations.
12  *
13  * You should have received a copy of the GPL along with this
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html
15  * or write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18 */
19 package cx.fbn.nevernote.gui;
20
21 import java.util.List;
22 import java.util.SortedMap;
23
24 import com.evernote.edam.type.Note;
25 import com.trolltech.qt.core.QByteArray;
26 import com.trolltech.qt.core.QModelIndex;
27 import com.trolltech.qt.core.Qt;
28 import com.trolltech.qt.core.Qt.Orientation;
29 import com.trolltech.qt.core.Qt.SortOrder;
30 import com.trolltech.qt.gui.QAbstractItemView;
31 import com.trolltech.qt.gui.QAction;
32 import com.trolltech.qt.gui.QApplication;
33 import com.trolltech.qt.gui.QColor;
34 import com.trolltech.qt.gui.QContextMenuEvent;
35 import com.trolltech.qt.gui.QDragEnterEvent;
36 import com.trolltech.qt.gui.QDropEvent;
37 import com.trolltech.qt.gui.QFontMetrics;
38 import com.trolltech.qt.gui.QKeyEvent;
39 import com.trolltech.qt.gui.QKeySequence.StandardKey;
40 import com.trolltech.qt.gui.QMenu;
41 import com.trolltech.qt.gui.QTableView;
42
43 import cx.fbn.nevernote.Global;
44 import cx.fbn.nevernote.NeverNote;
45 import cx.fbn.nevernote.evernote.NoteMetadata;
46 import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;
47 import cx.fbn.nevernote.signals.NoteSignal;
48 import cx.fbn.nevernote.utilities.ApplicationLogger;
49 import cx.fbn.nevernote.utilities.ListManager;
50
51 public class TableView extends QTableView {
52         private final ListManager                               runner;
53         private final ApplicationLogger         logger;
54     public NoteSortFilterProxyModel     proxyModel;             // note sort model
55     private QAction deleteAction;
56     private QAction addAction;
57     private QAction restoreAction;
58     private QAction noteHistoryAction;
59     private QAction duplicateAction;
60     private QAction     mergeNotesAction;
61         // ICHANGED
62         private QAction openNewTabAction;
63         private QAction addNoteNewTabAction;
64     
65     // Note title colors
66     private QAction     noteTitleColorWhite;
67     private QAction     noteTitleColorRed;
68     private QAction     noteTitleColorBlue;
69     private QAction     noteTitleColorGreen;
70     private QAction     noteTitleColorYellow;
71     private QAction     noteTitleColorBlack;
72     private QAction     noteTitleColorGray;
73     private QAction     noteTitleColorCyan;
74     private QAction     noteTitleColorMagenta;
75     private QAction notePinned;
76     private QAction copyAsUrlAction;
77
78
79     
80     public TableViewHeader header;
81     int fontHeight;
82     public Signal1<String> rowChanged;
83     public Signal0      resetViewport;
84     public NoteSignal noteSignal;
85         
86         // ICHANGED
87         private final NeverNote parent;
88         
89         // ICHANGED parent引数を追加
90         public TableView(ApplicationLogger l, ListManager m, NeverNote parent) {
91                 // ICHANGED
92                 this.parent = parent;
93                 
94                 logger = l;
95                 header = new TableViewHeader(Orientation.Horizontal,this);
96                 setHorizontalHeader(header);
97                 header.setMovable(true);
98                 header.subjectDateAction.toggled.connect(this, "toggleSubjectDate(Boolean)");
99                 header.createdDateAction.toggled.connect(this, "toggleCreationDate(Boolean)");
100                 header.changedDateAction.toggled.connect(this, "toggleChangedDate(Boolean)");
101                 header.authorAction.toggled.connect(this, "toggleAuthor(Boolean)");
102                 header.urlAction.toggled.connect(this, "toggleSourceUrl(Boolean)");
103                 header.pinnedAction.toggled.connect(this, "togglePinned(Boolean)");
104                 header.tagsAction.toggled.connect(this, "toggleTags(Boolean)");
105                 header.notebookAction.toggled.connect(this, "toggleNotebook(Boolean)");
106                 header.synchronizedAction.toggled.connect(this, "toggleSynchronized(Boolean)");
107                 header.guidAction.toggled.connect(this, "toggleGuid(Boolean)");
108                 header.thumbnailAction.toggled.connect(this, "toggleThumbnail(Boolean)");
109                 header.titleAction.toggled.connect(this, "toggleTitle(Boolean)");
110                 
111                 noteSignal = new NoteSignal();
112                 setAcceptDrops(true);
113                 setDragEnabled(true);
114                 setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);
115                 setDropIndicatorShown(false);
116                 
117                 runner = m;     
118                 
119         runner.getNoteTableModel().setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, tr("Date Created"), Qt.ItemDataRole.DisplayRole);
120         runner.getNoteTableModel().setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, tr("Tags"), Qt.ItemDataRole.DisplayRole);
121         runner.getNoteTableModel().setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, tr("Guid"), Qt.ItemDataRole.DisplayRole);
122         runner.getNoteTableModel().setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, tr("Notebook"), Qt.ItemDataRole.DisplayRole);
123         runner.getNoteTableModel().setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, tr("Title"), Qt.ItemDataRole.DisplayRole);
124         runner.getNoteTableModel().setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, tr("Date Changed"), Qt.ItemDataRole.DisplayRole);
125         runner.getNoteTableModel().setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, tr("Author"), Qt.ItemDataRole.DisplayRole);
126         runner.getNoteTableModel().setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"), Qt.ItemDataRole.DisplayRole);
127         runner.getNoteTableModel().setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"), Qt.ItemDataRole.DisplayRole);
128         runner.getNoteTableModel().setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Sync"), Qt.ItemDataRole.DisplayRole);
129         runner.getNoteTableModel().setHeaderData(Global.noteTablePinnedPosition, Qt.Orientation.Horizontal, tr("Pinned"), Qt.ItemDataRole.DisplayRole);
130         runner.getNoteTableModel().setHeaderData(Global.noteTableThumbnailPosition, Qt.Orientation.Horizontal, tr("Thumbnail"), Qt.ItemDataRole.DisplayRole);
131         header.sortIndicatorChanged.connect(this, "resetViewport()");
132        
133         proxyModel = new NoteSortFilterProxyModel(this);
134         proxyModel.setSourceModel(runner.getNoteTableModel());
135         setAlternatingRowColors(false);
136         setModel(proxyModel);
137         runner.getNoteTableModel().setSortProxyModel(proxyModel);
138                
139         setSortingEnabled(true);
140         int sortCol = proxyModel.sortColumn();
141                 SortOrder sortOrder = proxyModel.sortOrder();
142                 sortByColumn(sortCol, sortOrder);
143
144                 setSelectionBehavior(SelectionBehavior.SelectRows);
145                 setSelectionMode(SelectionMode.SingleSelection);
146                 verticalHeader().setVisible(false);
147                 hideColumn(Global.noteTableGuidPosition);  // Hide the guid column
148                 setShowGrid(false);
149                 setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers);
150                 
151                 QFontMetrics f = QApplication.fontMetrics();
152                 fontHeight = f.height();
153                 rowChanged = new Signal1<String>();
154                 resetViewport = new Signal0();
155                 
156                 NoteTableDateDelegate dateDelegate = new NoteTableDateDelegate();
157                 setItemDelegateForColumn(Global.noteTableCreationPosition, dateDelegate);
158                 setItemDelegateForColumn(Global.noteTableChangedPosition, dateDelegate);
159                 setItemDelegateForColumn(Global.noteTableSubjectDatePosition, dateDelegate);
160                 
161         }
162         
163         // This should rescroll to the current item in the list when a column is 
164         // sorted.  Somehow I can't get this to work, but this part is correct.
165         @SuppressWarnings("unused")
166         private void resetViewport() {
167 //              if (currentIndex() == null) 
168 //                      return;
169                 
170 //              resetViewport.emit();
171         }
172         
173                 
174         public void load(boolean reload) {
175                 proxyModel.clear();
176                 setSortingEnabled(false);
177                 QFontMetrics f = QApplication.fontMetrics();
178                 if (!Global.isColumnVisible("thumbnail"))
179                                 verticalHeader().setDefaultSectionSize(f.height());
180                 else {
181                         if (Global.getListView() == Global.View_List_Wide)
182                                 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
183                         else
184                                 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
185                 }
186                 for (int i=0; i<runner.getNoteIndex().size(); i++) {
187                         String guid = runner.getNoteIndex().get(i).getGuid();
188                         NoteMetadata metaInfo = runner.getNoteMetadata().get(guid);
189                         if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive()) {
190                                 proxyModel.addGuid(guid, null);
191                         }
192                         if (!Global.showDeleted == true && 
193                                         (runner.getNoteIndex().get(i).isActive() || 
194                                                         metaInfo.isPinned())) {         
195                                 proxyModel.addGuid(guid, metaInfo);
196                         }
197                 }
198
199                 if (!reload) {
200                         logger.log(logger.EXTREME, "TableView.load() reload starting.");
201                         proxyModel.filter();
202                         setSortingEnabled(true);
203                         logger.log(logger.EXTREME, "TableView.load() leaving reload.");
204                         return;
205                 }
206                 logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");
207         
208                 for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {
209                         if (runner.getMasterNoteIndex().get(i) != null) {       
210                                 Note note = runner.getMasterNoteIndex().get(i);
211                                 NoteMetadata meta = runner.getNoteMetadata().get(note.getGuid());
212                                 insertRow(runner.getMasterNoteIndex().get(i), meta, false, i);                                                  
213                         }
214                 } 
215                 proxyModel.invalidate();
216                 
217                 resizeColumnWidths();
218                 repositionColumns();
219                 
220                 proxyModel.filter();
221                 
222                 setSortingEnabled(true);
223                 resetViewport.emit();
224         }
225         
226         public void repositionColumns() {
227                 int from = header.visualIndex(Global.noteTableCreationPosition);
228                 int to = Global.getColumnPosition("noteTableCreationPosition");
229                 if (to>=0) header.moveSection(from, to);
230
231                 from = header.visualIndex(Global.noteTableTitlePosition);
232                 to = Global.getColumnPosition("noteTableTitlePosition");
233                 if (to>=0) header.moveSection(from, to);
234                 
235                 from = header.visualIndex(Global.noteTableTagPosition);
236                 to = Global.getColumnPosition("noteTableTagPosition");
237                 if (to>=0) header.moveSection(from, to);
238                 
239                 from = header.visualIndex(Global.noteTableNotebookPosition);
240                 to = Global.getColumnPosition("noteTableNotebookPosition");
241                 if (to>=0) header.moveSection(from, to);
242                 
243                 from = header.visualIndex(Global.noteTableChangedPosition);
244                 to = Global.getColumnPosition("noteTableChangedPosition");
245                 if (to>=0) header.moveSection(from, to);
246                 
247                 from = header.visualIndex(Global.noteTableSourceUrlPosition);
248                 to = Global.getColumnPosition("noteTableSourceUrlPosition");
249                 if (to>=0) header.moveSection(from, to);
250                 
251                 from = header.visualIndex(Global.noteTableAuthorPosition);
252                 to = Global.getColumnPosition("noteTableAuthorPosition");
253                 if (to>=0) header.moveSection(from, to);
254                 
255                 from = header.visualIndex(Global.noteTableSubjectDatePosition);
256                 to = Global.getColumnPosition("noteTableSubjectDatePosition");
257                 if (to>=0) header.moveSection(from, to);
258                 
259                 from = header.visualIndex(Global.noteTableSynchronizedPosition);
260                 to = Global.getColumnPosition("noteTableSynchronizedPosition");
261                 if (to>=0) header.moveSection(from, to);
262
263                 from = header.visualIndex(Global.noteTablePinnedPosition);
264                 to = Global.getColumnPosition("noteTablePinnedPosition");
265                 if (to>=0) header.moveSection(from, to);
266
267                 
268                 from = header.visualIndex(Global.noteTableGuidPosition);
269                 to = Global.getColumnPosition("noteTableGuidPosition");
270                 if (to>=0) header.moveSection(from, to);
271                 
272                 
273                 from = header.visualIndex(Global.noteTableThumbnailPosition);
274                 to = Global.getColumnPosition("noteTableThumbnailPosition");
275                 if (to>=0) header.moveSection(from, to);
276
277         }
278         
279         public void resizeColumnWidths() {
280                 int width;
281                 width = Global.getColumnWidth("noteTableCreationPosition");
282                 if (width>0) setColumnWidth(Global.noteTableCreationPosition, width);
283                 width = Global.getColumnWidth("noteTableChangedPosition");
284                 if (width>0) setColumnWidth(Global.noteTableChangedPosition, width);
285                 width = Global.getColumnWidth("noteTableTitlePosition");
286                 if (width>0) setColumnWidth(Global.noteTableTitlePosition, width);
287                 width = Global.getColumnWidth("noteTableTagPosition");
288                 if (width>0) setColumnWidth(Global.noteTableTagPosition, width);
289                 width = Global.getColumnWidth("noteTableGuidPosition");
290                 if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
291                 width = Global.getColumnWidth("noteTableNotebookPosition");
292                 if (width>0) setColumnWidth(Global.noteTableNotebookPosition, width);
293                 width = Global.getColumnWidth("noteTableSourceUrlPosition");
294                 if (width>0) setColumnWidth(Global.noteTableSourceUrlPosition, width);
295                 width = Global.getColumnWidth("noteTableAuthorPosition");
296                 if (width>0) setColumnWidth(Global.noteTableAuthorPosition, width);
297                 width = Global.getColumnWidth("noteTableSubjectDatePosition");
298                 if (width>0) setColumnWidth(Global.noteTableSubjectDatePosition, width);
299                 width = Global.getColumnWidth("noteTableSynchronizedPosition");
300                 if (width>0) setColumnWidth(Global.noteTableSynchronizedPosition, width);
301                 width = Global.getColumnWidth("noteTableThumbnailPosition");
302                 if (width>0) setColumnWidth(Global.noteTablePinnedPosition, width);
303                 width = Global.getColumnWidth("noteTablePinnedPosition");
304                 if (width>0) setColumnWidth(Global.noteTableThumbnailPosition, width);
305                 width = Global.getColumnWidth("noteTableGuidPosition");
306                 if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);
307
308         }
309         
310         public void resizeRowHeights() {
311                 int height;
312                 if (!Global.isColumnVisible("thumbnail") || !Global.enableThumbnails()) {
313                         QFontMetrics f = QApplication.fontMetrics();
314                         verticalHeader().setDefaultSectionSize(f.height());
315                         height = fontHeight;
316                 } else {
317                         if (Global.getListView() == Global.View_List_Wide) {
318                                 verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());
319                                 height = Global.smallThumbnailSize.height();
320                         } else {
321                                 verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());
322                                 height = Global.largeThumbnailSize.height();
323                         }
324                 }
325                 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
326                         setRowHeight(i, height);
327                 }
328         }
329         
330         public void insertRow(Note tempNote, NoteMetadata meta, boolean newNote, int row) {
331                 if (newNote)
332                         proxyModel.addGuid(tempNote.getGuid(), meta);
333                 if (row > runner.getNoteTableModel().rowCount())
334                         runner.getNoteTableModel().insertRow(0);
335                 
336                 if (row < 0) {
337                         row  = runner.getNoteTableModel().rowCount();
338                         runner.getNoteTableModel().insertRow(row);
339                 }
340                 if (newNote) {
341                         resizeRowHeights();
342                 }
343         }
344         protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {
345                 return true;
346         }
347
348         public void setAddAction(QAction a) {
349                 addAction = a;
350         }
351         
352         public void setMergeNotesAction(QAction a) {
353                 mergeNotesAction = a;
354         }
355         
356         public void setCopyAsUrlAction(QAction a) {
357                 copyAsUrlAction = a;
358         }
359         
360         public void setNoteHistoryAction(QAction a) {
361                 noteHistoryAction = a;
362         }
363         
364         public void setDeleteAction(QAction d) {
365                 deleteAction = d;
366         }
367          
368         public void setRestoreAction(QAction r) {
369                 restoreAction = r;
370         }
371         public void setNoteDuplicateAction(QAction d) {
372                 duplicateAction = d;
373         }
374         
375         // ICHANGED
376         public void setOpenNewTabAction(QAction t) {
377                 openNewTabAction = t;
378         }
379         
380         // ICHANGED
381         public void setAddNoteNewTabAction(QAction t) {
382                 addNoteNewTabAction = t;
383         }
384         
385         @Override
386         public void keyPressEvent(QKeyEvent e) {
387                 if (e.matches(StandardKey.MoveToStartOfDocument)) {
388                         if (runner.getNoteTableModel().rowCount() > 0) {
389                                 clearSelection();
390                                 selectRow(0);
391                         }
392                 }
393                 if (e.matches(StandardKey.MoveToEndOfDocument)) {
394                         if (runner.getNoteTableModel().rowCount() > 0) {
395                                 clearSelection();
396                                 selectRow(model().rowCount()-1);
397                         }
398                 }
399                 super.keyPressEvent(e);
400         }
401         
402         @Override
403         public void contextMenuEvent(QContextMenuEvent event) {
404                 // ICHANGED QMenu から NoteTableContextMenu へ
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                         menu.addAction(addNoteNewTabAction);
417                 }
418                 menu.addSeparator();
419                 
420                 menu.addAction(deleteAction);
421                 menu.addSeparator();
422                 menu.addAction(duplicateAction);
423                 menu.addAction(copyAsUrlAction);
424                 menu.addSeparator();
425                 menu.addAction(noteHistoryAction);
426                 menu.addAction(mergeNotesAction);
427                 
428                 // ICHANGED QMenu から NoteTableContextMenu へ
429                 QMenu titleColorMenu = new QMenu(this);
430                 
431                 titleColorMenu.setTitle(tr("Title Color"));
432                 menu.addMenu(titleColorMenu);
433                 noteTitleColorWhite = new QAction(titleColorMenu);
434             noteTitleColorRed = new QAction(titleColorMenu);
435             noteTitleColorBlue = new QAction(titleColorMenu);
436             noteTitleColorGreen = new QAction(titleColorMenu);
437             noteTitleColorYellow = new QAction(titleColorMenu);
438             noteTitleColorBlack = new QAction(titleColorMenu);
439             noteTitleColorGray = new QAction(titleColorMenu);
440             noteTitleColorCyan = new QAction(titleColorMenu);
441             noteTitleColorMagenta = new QAction(titleColorMenu);
442             
443             notePinned = new QAction(titleColorMenu);
444             menu.addAction(notePinned);
445     
446             noteTitleColorWhite.setText(tr("White"));
447             noteTitleColorRed.setText(tr("Red"));
448             noteTitleColorBlue.setText(tr("Blue"));
449             noteTitleColorGreen.setText(tr("Green"));
450             noteTitleColorYellow.setText(tr("Yellow"));
451             noteTitleColorBlack.setText(tr("Black"));
452             noteTitleColorGray.setText(tr("Gray"));
453             noteTitleColorCyan.setText(tr("Cyan"));
454             noteTitleColorMagenta.setText(tr("Magenta"));
455             notePinned.setText(tr("Pin/Unpin"));
456             
457             titleColorMenu.addAction(noteTitleColorWhite);
458             titleColorMenu.addAction(noteTitleColorRed);
459             titleColorMenu.addAction(noteTitleColorBlue);
460             titleColorMenu.addAction(noteTitleColorGreen);
461             titleColorMenu.addAction(noteTitleColorYellow);
462             titleColorMenu.addAction(noteTitleColorBlack);
463             titleColorMenu.addAction(noteTitleColorGray);
464             titleColorMenu.addAction(noteTitleColorCyan);
465             titleColorMenu.addAction(noteTitleColorMagenta);
466             
467             noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
468             
469             noteTitleColorWhite.triggered.connect(this, "titleColorWhite()");
470             noteTitleColorRed.triggered.connect(this, "titleColorRed()");
471             noteTitleColorBlue.triggered.connect(this, "titleColorBlue()");
472             noteTitleColorGreen.triggered.connect(this, "titleColorGreen()");
473             noteTitleColorYellow.triggered.connect(this, "titleColorYellow()");
474             noteTitleColorBlack.triggered.connect(this, "titleColorBlack()");
475             noteTitleColorGray.triggered.connect(this, "titleColorGray()");
476             noteTitleColorCyan.triggered.connect(this, "titleColorCyan()");
477             noteTitleColorMagenta.triggered.connect(this, "titleColorMagenta()");
478             notePinned.triggered.connect(this, "notePinned()");
479                 menu.exec(event.globalPos());
480         }
481         
482         
483     @SuppressWarnings("unused")
484         private void titleColorWhite() {noteSignal.titleColorChanged.emit(QColor.white.rgb());}
485     @SuppressWarnings("unused")
486         private void titleColorRed() {noteSignal.titleColorChanged.emit(QColor.red.rgb());}
487     @SuppressWarnings("unused")
488         private void titleColorBlue() {noteSignal.titleColorChanged.emit(QColor.blue.rgb());}
489     @SuppressWarnings("unused")
490         private void titleColorGreen() {noteSignal.titleColorChanged.emit(QColor.green.rgb());}
491     @SuppressWarnings("unused")
492         private void titleColorYellow(){noteSignal.titleColorChanged.emit(QColor.yellow.rgb());}
493     @SuppressWarnings("unused")
494         private void titleColorBlack() {noteSignal.titleColorChanged.emit(QColor.black.rgb());}
495     @SuppressWarnings("unused")
496         private void titleColorGray() {noteSignal.titleColorChanged.emit(QColor.gray.rgb());}
497     @SuppressWarnings("unused")
498         private void titleColorCyan() {noteSignal.titleColorChanged.emit(QColor.cyan.rgb());}
499     @SuppressWarnings("unused")
500         private void titleColorMagenta() {noteSignal.titleColorChanged.emit(QColor.magenta.rgb());}
501         @SuppressWarnings("unused")
502         private void notePinned() {noteSignal.notePinned.emit();}
503         
504
505         @Override
506         public void dragEnterEvent(QDragEnterEvent event) {
507                 StringBuffer guid = new StringBuffer(1000);
508                 
509                 showColumn(Global.noteTableGuidPosition);
510                 List<QModelIndex> selections = selectionModel().selectedRows();
511                 hideColumn(Global.noteTableGuidPosition);
512                 
513         if (selections.size() > 0) {
514                 QModelIndex index;
515                 for (int i=0; i<selections.size(); i++) {
516                         int row = selections.get(i).row();
517                         index = proxyModel.index(row, Global.noteTableGuidPosition);
518                         SortedMap<Integer, Object> ix = proxyModel.itemData(index);
519                         guid.append((String)ix.values().toArray()[0]);
520                         guid.append(" ");
521                 }
522         }
523                 event.mimeData().setData("application/x-nevernote-note", new QByteArray(guid.toString()));
524                 event.accept();
525                                 
526         }
527         
528         @Override
529         public void dropEvent(QDropEvent event) {
530                 if (event.source() == this)
531                         event.ignore();
532         }
533         
534         // Return a column width
535         public int getColumnWidth(int col) {
536                 return columnWidth(col);
537         }
538         
539         public void toggleSubjectDate(Boolean toggle) {
540                 Global.saveColumnVisible("dateSubject", toggle);
541                 setColumnHidden(Global.noteTableSubjectDatePosition, !toggle);
542         }
543         
544         public void toggleChangedDate(Boolean toggle) {
545                 Global.saveColumnVisible("dateChanged", toggle);
546                 setColumnHidden(Global.noteTableChangedPosition, !toggle);
547         }
548         
549         
550         public void toggleCreationDate(Boolean toggle) {
551                 Global.saveColumnVisible("dateCreated", toggle);
552                 setColumnHidden(Global.noteTableCreationPosition, !toggle);
553         }
554         
555         public void toggleSourceUrl(Boolean toggle) {
556                 Global.saveColumnVisible("sourceUrl", toggle);
557                 setColumnHidden(Global.noteTableSourceUrlPosition, !toggle);
558         }
559         
560         public void toggleAuthor(Boolean toggle) {
561                 Global.saveColumnVisible("author", toggle);
562                 setColumnHidden(Global.noteTableAuthorPosition, !toggle);
563         }
564         
565         public void toggleNotebook(Boolean toggle) {
566                 Global.saveColumnVisible("notebook", toggle);
567                 setColumnHidden(Global.noteTableNotebookPosition, !toggle);
568         }
569
570         public void toggleTitle(Boolean toggle) {
571                 Global.saveColumnVisible("title", toggle);
572                 setColumnHidden(Global.noteTableTitlePosition, !toggle);
573         }
574
575         public void toggleTags(Boolean toggle) {
576                 Global.saveColumnVisible("tags", toggle);
577                 setColumnHidden(Global.noteTableTagPosition, !toggle);
578         }
579         
580         public void toggleSynchronized(Boolean toggle) {
581                 Global.saveColumnVisible("synchronized", toggle);
582                 setColumnHidden(Global.noteTableSynchronizedPosition, !toggle);
583         }
584         public void togglePinned(Boolean toggle) {
585                 Global.saveColumnVisible("pinned", toggle);
586                 setColumnHidden(Global.noteTablePinnedPosition, !toggle);
587         }
588         public void toggleGuid(Boolean toggle) {
589                 Global.saveColumnVisible("guid", toggle);
590                 setColumnHidden(Global.noteTableGuidPosition, !toggle);
591         }       
592         public void toggleThumbnail(Boolean toggle) {
593                 Global.saveColumnVisible("thumbnail", toggle);
594                 int size;
595                 if (!toggle) {
596                         QFontMetrics f = QApplication.fontMetrics();
597                         size = f.height();
598                         verticalHeader().setDefaultSectionSize(f.height());
599                 } else
600                         size = Global.smallThumbnailSize.height();
601                 for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {
602                         setRowHeight(i, size);
603                 }
604                         
605                 setColumnHidden(Global.noteTableThumbnailPosition, !toggle);
606         }
607 }