OSDN Git Service

Added the ability to show/hide the pinned note column
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / TableView.java
index 3b1d9bb..3255221 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * This file is part of NeverNote \r
+ * This file is part of NixNote \r
  * Copyright 2009 Randy Baumgarte\r
  * \r
  * This file may be licensed under the terms of of the\r
@@ -41,6 +41,7 @@ import com.trolltech.qt.gui.QMenu;
 import com.trolltech.qt.gui.QTableView;\r
 \r
 import cx.fbn.nevernote.Global;\r
+import cx.fbn.nevernote.evernote.NoteMetadata;\r
 import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;\r
 import cx.fbn.nevernote.signals.NoteSignal;\r
 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
@@ -67,6 +68,8 @@ public class TableView extends QTableView {
     private QAction    noteTitleColorGray;\r
     private QAction    noteTitleColorCyan;\r
     private QAction    noteTitleColorMagenta;\r
+    private QAction notePinned;\r
+    private QAction copyAsUrlAction;\r
 \r
 \r
     \r
@@ -86,9 +89,13 @@ public class TableView extends QTableView {
                header.changedDateAction.toggled.connect(this, "toggleChangedDate(Boolean)");\r
                header.authorAction.toggled.connect(this, "toggleAuthor(Boolean)");\r
                header.urlAction.toggled.connect(this, "toggleSourceUrl(Boolean)");\r
+               header.pinnedAction.toggled.connect(this, "togglePinned(Boolean)");\r
                header.tagsAction.toggled.connect(this, "toggleTags(Boolean)");\r
                header.notebookAction.toggled.connect(this, "toggleNotebook(Boolean)");\r
                header.synchronizedAction.toggled.connect(this, "toggleSynchronized(Boolean)");\r
+               header.guidAction.toggled.connect(this, "toggleGuid(Boolean)");\r
+               header.thumbnailAction.toggled.connect(this, "toggleThumbnail(Boolean)");\r
+               header.titleAction.toggled.connect(this, "toggleTitle(Boolean)");\r
                \r
                noteSignal = new NoteSignal();\r
                setAcceptDrops(true);\r
@@ -108,13 +115,14 @@ public class TableView extends QTableView {
         runner.getNoteTableModel().setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"), Qt.ItemDataRole.DisplayRole);\r
         runner.getNoteTableModel().setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"), Qt.ItemDataRole.DisplayRole);\r
         runner.getNoteTableModel().setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Synchronized"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTablePinnedPosition, Qt.Orientation.Horizontal, tr("Pinned"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableThumbnailPosition, Qt.Orientation.Horizontal, tr("Thumbnail"), Qt.ItemDataRole.DisplayRole);\r
         header.sortIndicatorChanged.connect(this, "resetViewport()");\r
        \r
         proxyModel = new NoteSortFilterProxyModel(this);\r
         proxyModel.setSourceModel(runner.getNoteTableModel());\r
         setAlternatingRowColors(false);\r
         setModel(proxyModel);\r
-//        setModel(runner.getNoteTableModel());\r
         runner.getNoteTableModel().setSortProxyModel(proxyModel);\r
                \r
         setSortingEnabled(true);\r
@@ -156,12 +164,25 @@ public class TableView extends QTableView {
                proxyModel.clear();\r
                setSortingEnabled(false);\r
                QFontMetrics f = QApplication.fontMetrics();\r
-               verticalHeader().setDefaultSectionSize(f.height());\r
+               if (!Global.isColumnVisible("thumbnail"))\r
+                               verticalHeader().setDefaultSectionSize(f.height());\r
+               else {\r
+                       if (Global.getListView() == Global.View_List_Wide)\r
+                               verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());\r
+                       else\r
+                               verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());\r
+               }\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
+                       String guid = runner.getNoteIndex().get(i).getGuid();\r
+                       NoteMetadata metaInfo = runner.getNoteMetadata().get(guid);\r
+                       if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive()) {\r
+                               proxyModel.addGuid(guid, null);\r
+                       }\r
+                       if (!Global.showDeleted == true && \r
+                                       (runner.getNoteIndex().get(i).isActive() || \r
+                                                       metaInfo.isPinned())) {         \r
+                               proxyModel.addGuid(guid, metaInfo);\r
+                       }\r
                }\r
 \r
                if (!reload) {\r
@@ -175,33 +196,23 @@ public class TableView extends QTableView {
        \r
                for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {\r
                        if (runner.getMasterNoteIndex().get(i) != null) {       \r
-                               insertRow(runner.getMasterNoteIndex().get(i), false, i);                                                        \r
+                               Note note = runner.getMasterNoteIndex().get(i);\r
+                               NoteMetadata meta = runner.getNoteMetadata().get(note.getGuid());\r
+                               insertRow(runner.getMasterNoteIndex().get(i), meta, false, i);                                                  \r
                        }\r
                } \r
                proxyModel.invalidate();\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
+               resizeColumnWidths();\r
+               repositionColumns();\r
                \r
+               proxyModel.filter();\r
+               \r
+               setSortingEnabled(true);\r
+               resetViewport.emit();\r
+       }\r
+       \r
+       public void repositionColumns() {\r
                int from = header.visualIndex(Global.noteTableCreationPosition);\r
                int to = Global.getColumnPosition("noteTableCreationPosition");\r
                if (to>=0) header.moveSection(from, to);\r
@@ -238,16 +249,76 @@ public class TableView extends QTableView {
                to = Global.getColumnPosition("noteTableSynchronizedPosition");\r
                if (to>=0) header.moveSection(from, to);\r
 \r
-               proxyModel.filter();\r
+               from = header.visualIndex(Global.noteTablePinnedPosition);\r
+               to = Global.getColumnPosition("noteTablePinnedPosition");\r
+               if (to>=0) header.moveSection(from, to);\r
+\r
                \r
-               setSortingEnabled(true);\r
-               resetViewport.emit();\r
+               from = header.visualIndex(Global.noteTableGuidPosition);\r
+               to = Global.getColumnPosition("noteTableGuidPosition");\r
+               if (to>=0) header.moveSection(from, to);\r
+               \r
+               \r
+               from = header.visualIndex(Global.noteTableThumbnailPosition);\r
+               to = Global.getColumnPosition("noteTableThumbnailPosition");\r
+               if (to>=0) header.moveSection(from, to);\r
+\r
        }\r
+       \r
+       public void resizeColumnWidths() {\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
+               width = Global.getColumnWidth("noteTableThumbnailPosition");\r
+               if (width>0) setColumnWidth(Global.noteTablePinnedPosition, width);\r
+               width = Global.getColumnWidth("noteTablePinnedPosition");\r
+               if (width>0) setColumnWidth(Global.noteTableThumbnailPosition, width);\r
+               width = Global.getColumnWidth("noteTableGuidPosition");\r
+               if (width>0) setColumnWidth(Global.noteTableGuidPosition, width);\r
 \r
-       public void insertRow(Note tempNote, boolean newNote, int row) {\r
+       }\r
+       \r
+       public void resizeRowHeights() {\r
+               int height;\r
+               if (!Global.isColumnVisible("thumbnail") || !Global.enableThumbnails()) {\r
+                       QFontMetrics f = QApplication.fontMetrics();\r
+                       verticalHeader().setDefaultSectionSize(f.height());\r
+                       height = fontHeight;\r
+               } else {\r
+                       if (Global.getListView() == Global.View_List_Wide) {\r
+                               verticalHeader().setDefaultSectionSize(Global.smallThumbnailSize.height());\r
+                               height = Global.smallThumbnailSize.height();\r
+                       } else {\r
+                               verticalHeader().setDefaultSectionSize(Global.largeThumbnailSize.height());\r
+                               height = Global.largeThumbnailSize.height();\r
+                       }\r
+               }\r
+               for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {\r
+                       setRowHeight(i, height);\r
+               }\r
+       }\r
+       \r
+       public void insertRow(Note tempNote, NoteMetadata meta, boolean newNote, int row) {\r
                if (newNote)\r
-                       proxyModel.addGuid(tempNote.getGuid());\r
-               \r
+                       proxyModel.addGuid(tempNote.getGuid(), meta);\r
                if (row > runner.getNoteTableModel().rowCount())\r
                        runner.getNoteTableModel().insertRow(0);\r
                \r
@@ -255,12 +326,8 @@ public class TableView extends QTableView {
                        row  = runner.getNoteTableModel().rowCount();\r
                        runner.getNoteTableModel().insertRow(row);\r
                }\r
-               \r
                if (newNote) {\r
-                       QFontMetrics f = QApplication.fontMetrics();\r
-                       fontHeight = f.height();\r
-                       for (int i=0; i<runner.getNoteTableModel().rowCount(); i++)\r
-                               setRowHeight(i, fontHeight);\r
+                       resizeRowHeights();\r
                }\r
        }\r
        protected boolean filterAcceptsRow(int sourceRow, QModelIndex sourceParent) {\r
@@ -275,6 +342,10 @@ public class TableView extends QTableView {
                mergeNotesAction = a;\r
        }\r
        \r
+       public void setCopyAsUrlAction(QAction a) {\r
+               copyAsUrlAction = a;\r
+       }\r
+       \r
        public void setNoteHistoryAction(QAction a) {\r
                noteHistoryAction = a;\r
        }\r
@@ -318,6 +389,8 @@ public class TableView extends QTableView {
                menu.addAction(deleteAction);\r
                menu.addSeparator();\r
                menu.addAction(duplicateAction);\r
+               menu.addAction(copyAsUrlAction);\r
+               menu.addSeparator();\r
                menu.addAction(noteHistoryAction);\r
                menu.addAction(mergeNotesAction);\r
                \r
@@ -333,6 +406,9 @@ public class TableView extends QTableView {
            noteTitleColorGray = new QAction(titleColorMenu);\r
            noteTitleColorCyan = new QAction(titleColorMenu);\r
            noteTitleColorMagenta = new QAction(titleColorMenu);\r
+           \r
+           notePinned = new QAction(titleColorMenu);\r
+           menu.addAction(notePinned);\r
     \r
            noteTitleColorWhite.setText(tr("White"));\r
            noteTitleColorRed.setText(tr("Red"));\r
@@ -343,6 +419,7 @@ public class TableView extends QTableView {
            noteTitleColorGray.setText(tr("Gray"));\r
            noteTitleColorCyan.setText(tr("Cyan"));\r
            noteTitleColorMagenta.setText(tr("Magenta"));\r
+           notePinned.setText(tr("Pin/Unpin"));\r
            \r
            titleColorMenu.addAction(noteTitleColorWhite);\r
            titleColorMenu.addAction(noteTitleColorRed);\r
@@ -365,7 +442,7 @@ public class TableView extends QTableView {
            noteTitleColorGray.triggered.connect(this, "titleColorGray()");\r
            noteTitleColorCyan.triggered.connect(this, "titleColorCyan()");\r
            noteTitleColorMagenta.triggered.connect(this, "titleColorMagenta()");\r
-           \r
+           notePinned.triggered.connect(this, "notePinned()");\r
                menu.exec(event.globalPos());\r
        }\r
        \r
@@ -388,7 +465,8 @@ public class TableView extends QTableView {
        private void titleColorCyan() {noteSignal.titleColorChanged.emit(QColor.cyan.rgb());}\r
     @SuppressWarnings("unused")\r
        private void titleColorMagenta() {noteSignal.titleColorChanged.emit(QColor.magenta.rgb());}\r
-       \r
+       @SuppressWarnings("unused")\r
+       private void notePinned() {noteSignal.notePinned.emit();}\r
        \r
 \r
        @Override\r
@@ -424,33 +502,6 @@ public class TableView extends QTableView {
        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
        public void toggleSubjectDate(Boolean toggle) {\r
                Global.saveColumnVisible("dateSubject", toggle);\r
@@ -482,7 +533,12 @@ public class TableView extends QTableView {
                Global.saveColumnVisible("notebook", toggle);\r
                setColumnHidden(Global.noteTableNotebookPosition, !toggle);\r
        }\r
-       \r
+\r
+       public void toggleTitle(Boolean toggle) {\r
+               Global.saveColumnVisible("title", toggle);\r
+               setColumnHidden(Global.noteTableTitlePosition, !toggle);\r
+       }\r
+\r
        public void toggleTags(Boolean toggle) {\r
                Global.saveColumnVisible("tags", toggle);\r
                setColumnHidden(Global.noteTableTagPosition, !toggle);\r
@@ -492,4 +548,28 @@ public class TableView extends QTableView {
                Global.saveColumnVisible("synchronized", toggle);\r
                setColumnHidden(Global.noteTableSynchronizedPosition, !toggle);\r
        }\r
+       public void togglePinned(Boolean toggle) {\r
+               Global.saveColumnVisible("pinned", toggle);\r
+               setColumnHidden(Global.noteTablePinnedPosition, !toggle);\r
+       }\r
+       public void toggleGuid(Boolean toggle) {\r
+               Global.saveColumnVisible("guid", toggle);\r
+               setColumnHidden(Global.noteTableGuidPosition, !toggle);\r
+       }       \r
+       public void toggleThumbnail(Boolean toggle) {\r
+               Global.saveColumnVisible("thumbnail", toggle);\r
+               int size;\r
+               if (!toggle) {\r
+                       QFontMetrics f = QApplication.fontMetrics();\r
+                       size = f.height();\r
+                       verticalHeader().setDefaultSectionSize(f.height());\r
+               } else\r
+                       size = Global.smallThumbnailSize.height();\r
+               for (int i=0; i<runner.getNoteTableModel().rowCount(); i++) {\r
+                       setRowHeight(i, size);\r
+               }\r
+                       \r
+               setColumnHidden(Global.noteTableThumbnailPosition, !toggle);\r
+       }\r
+       \r
 }\r