OSDN Git Service

Add the ability to customize saved search icons.
authorRandy Baumgarte <randy@fbn.cx>
Sun, 7 Nov 2010 18:23:53 +0000 (13:23 -0500)
committerRandy Baumgarte <randy@fbn.cx>
Wed, 15 Dec 2010 15:15:46 +0000 (10:15 -0500)
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/gui/MainMenuBar.java
src/cx/fbn/nevernote/gui/SavedSearchTreeWidget.java
src/cx/fbn/nevernote/sql/SavedSearchTable.java
src/cx/fbn/nevernote/sql/TagTable.java

index 743873f..86714c1 100644 (file)
@@ -522,6 +522,7 @@ public class NeverNote extends QMainWindow{
                savedSearchTree.setAddAction(menuBar.savedSearchAddAction);
                savedSearchTree.setEditAction(menuBar.savedSearchEditAction);
                savedSearchTree.setDeleteAction(menuBar.savedSearchDeleteAction);
                savedSearchTree.setAddAction(menuBar.savedSearchAddAction);
                savedSearchTree.setEditAction(menuBar.savedSearchEditAction);
                savedSearchTree.setDeleteAction(menuBar.savedSearchDeleteAction);
+               savedSearchTree.setIconAction(menuBar.savedSearchIconAction);
                savedSearchTree.itemSelectionChanged.connect(this, "updateSavedSearchSelection()");
                savedSearchTree.setVisible(Global.isWindowVisible("savedSearchTree"));
                menuBar.hideSavedSearches.setChecked(Global.isWindowVisible("savedSearchTree"));
                savedSearchTree.itemSelectionChanged.connect(this, "updateSavedSearchSelection()");
                savedSearchTree.setVisible(Global.isWindowVisible("savedSearchTree"));
                menuBar.hideSavedSearches.setChecked(Global.isWindowVisible("savedSearchTree"));
@@ -1872,7 +1873,6 @@ public class NeverNote extends QMainWindow{
        tagTree.blockSignals(false);
        }
        // Change the icon for a tag
        tagTree.blockSignals(false);
        }
        // Change the icon for a tag
-       // Change the notebook's icon
        private void setTagIcon() {
                QTreeWidgetItem currentSelection;
                List<QTreeWidgetItem> selections = tagTree.selectedItems();
        private void setTagIcon() {
                QTreeWidgetItem currentSelection;
                List<QTreeWidgetItem> selections = tagTree.selectedItems();
@@ -2018,6 +2018,7 @@ public class NeverNote extends QMainWindow{
        String currentGuid = selectedSavedSearchGUID;
        menuBar.savedSearchEditAction.setEnabled(true);
        menuBar.savedSearchDeleteAction.setEnabled(true);
        String currentGuid = selectedSavedSearchGUID;
        menuBar.savedSearchEditAction.setEnabled(true);
        menuBar.savedSearchDeleteAction.setEnabled(true);
+       menuBar.savedSearchIconAction.setEnabled(true);
        List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
        QTreeWidgetItem currentSelection;
        selectedSavedSearchGUID = "";
        List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
        QTreeWidgetItem currentSelection;
        selectedSavedSearchGUID = "";
@@ -2044,6 +2045,7 @@ public class NeverNote extends QMainWindow{
     private void clearSavedSearchFilter() {
        menuBar.savedSearchEditAction.setEnabled(false);
        menuBar.savedSearchDeleteAction.setEnabled(false);
     private void clearSavedSearchFilter() {
        menuBar.savedSearchEditAction.setEnabled(false);
        menuBar.savedSearchDeleteAction.setEnabled(false);
+       menuBar.savedSearchIconAction.setEnabled(false);
        savedSearchTree.blockSignals(true);
        savedSearchTree.clearSelection();
        savedSearchTree.blockSignals(false);
        savedSearchTree.blockSignals(true);
        savedSearchTree.clearSelection();
        savedSearchTree.blockSignals(false);
@@ -2057,6 +2059,7 @@ public class NeverNote extends QMainWindow{
                if (selectedSavedSearchGUID == null)
                        selectedSavedSearchGUID = new String();
                savedSearchTree.blockSignals(true);
                if (selectedSavedSearchGUID == null)
                        selectedSavedSearchGUID = new String();
                savedSearchTree.blockSignals(true);
+               savedSearchTree.setIcons(conn.getSavedSearchTable().getAllIcons());
        savedSearchTree.load(listManager.getSavedSearchIndex());
        savedSearchTree.selectGuid(selectedSavedSearchGUID);
        savedSearchTree.blockSignals(false);
        savedSearchTree.load(listManager.getSavedSearchIndex());
        savedSearchTree.selectGuid(selectedSavedSearchGUID);
        savedSearchTree.blockSignals(false);
@@ -2068,17 +2071,20 @@ public class NeverNote extends QMainWindow{
                
        menuBar.savedSearchEditAction.setEnabled(true);
        menuBar.savedSearchDeleteAction.setEnabled(true);
                
        menuBar.savedSearchEditAction.setEnabled(true);
        menuBar.savedSearchDeleteAction.setEnabled(true);
+       menuBar.savedSearchIconAction.setEnabled(true);
        List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
 
        if (selections.size() > 0) {
                menuBar.savedSearchEditAction.setEnabled(true);
                menuBar.savedSearchDeleteAction.setEnabled(true);
        List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
 
        if (selections.size() > 0) {
                menuBar.savedSearchEditAction.setEnabled(true);
                menuBar.savedSearchDeleteAction.setEnabled(true);
+               menuBar.savedSearchIconAction.setEnabled(true);
                selectedSavedSearchGUID = selections.get(0).text(1);
                SavedSearch s = conn.getSavedSearchTable().getSavedSearch(selectedSavedSearchGUID);
                searchField.setEditText(s.getQuery());
        } else { 
                menuBar.savedSearchEditAction.setEnabled(false);
                menuBar.savedSearchDeleteAction.setEnabled(false);
                selectedSavedSearchGUID = selections.get(0).text(1);
                SavedSearch s = conn.getSavedSearchTable().getSavedSearch(selectedSavedSearchGUID);
                searchField.setEditText(s.getQuery());
        } else { 
                menuBar.savedSearchEditAction.setEnabled(false);
                menuBar.savedSearchDeleteAction.setEnabled(false);
+               menuBar.savedSearchIconAction.setEnabled(false);
                selectedSavedSearchGUID = "";
                searchField.setEditText("");
        }
                selectedSavedSearchGUID = "";
                searchField.setEditText("");
        }
@@ -2100,6 +2106,36 @@ public class NeverNote extends QMainWindow{
                Global.saveWindowVisible("savedSearchTree", savedSearchTree.isVisible());
        logger.log(logger.HIGH, "Leaving NeverNote.toggleSavedSearchWindow");
     }
                Global.saveWindowVisible("savedSearchTree", savedSearchTree.isVisible());
        logger.log(logger.HIGH, "Leaving NeverNote.toggleSavedSearchWindow");
     }
+       // Change the icon for a saved search
+       private void setSavedSearchIcon() {
+               QTreeWidgetItem currentSelection;
+               List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
+               if (selections.size() == 0)
+                       return;
+               
+               currentSelection = selections.get(0);   
+               String guid = currentSelection.text(1);
+
+               QIcon currentIcon = currentSelection.icon(0);
+               QIcon icon = conn.getSavedSearchTable().getIcon(guid);
+               SetIcon dialog;
+               if (icon == null) {
+                       dialog = new SetIcon(currentIcon);
+                       dialog.setUseDefaultIcon(true);
+               } else {
+                       dialog = new SetIcon(icon);
+                       dialog.setUseDefaultIcon(false);
+               }
+               dialog.exec();
+               if (dialog.okPressed()) {
+                       QIcon newIcon = dialog.getIcon();
+                       conn.getSavedSearchTable().setIcon(guid, newIcon, dialog.getFileType());
+                       if (newIcon == null) 
+                               newIcon = new QIcon(iconPath+"search.png");
+                       currentSelection.setIcon(0, newIcon);
+               }
+       
+       }
        
        
        
        
        
        
index eed7874..39a03d4 100644 (file)
@@ -107,6 +107,7 @@ public class MainMenuBar extends QMenuBar {
        public QAction                  savedSearchAddAction;           // Add a saved search\r
        public QAction                  savedSearchEditAction;          // Edit a saved search\r
        public QAction                  savedSearchDeleteAction;        // Delete a saved search\r
        public QAction                  savedSearchAddAction;           // Add a saved search\r
        public QAction                  savedSearchEditAction;          // Edit a saved search\r
        public QAction                  savedSearchDeleteAction;        // Delete a saved search\r
+       public QAction                  savedSearchIconAction;          // Change a saved search icon\r
        \r
        public QAction                  tagEditAction;                          // Edit a tag\r
        public QAction                  tagAddAction;                           // Add a tag\r
        \r
        public QAction                  tagEditAction;                          // Edit a tag\r
        public QAction                  tagAddAction;                           // Add a tag\r
@@ -491,8 +492,12 @@ public class MainMenuBar extends QMenuBar {
                savedSearchDeleteAction.triggered.connect(parent, "deleteSavedSearch()");\r
                savedSearchDeleteAction.setEnabled(false);              \r
                setupShortcut(savedSearchDeleteAction, "File_SavedSearch_Delete");\r
                savedSearchDeleteAction.triggered.connect(parent, "deleteSavedSearch()");\r
                savedSearchDeleteAction.setEnabled(false);              \r
                setupShortcut(savedSearchDeleteAction, "File_SavedSearch_Delete");\r
+\r
+               savedSearchIconAction = new QAction(tr("Change Icon"), this);\r
+               savedSearchIconAction.triggered.connect(parent, "setSavedSearchIcon()");\r
+               savedSearchIconAction.setEnabled(false);                \r
+               setupShortcut(savedSearchIconAction, "File_SavedSearch_Icon");          \r
                                \r
                                \r
-                       \r
                connectAction = new QAction(tr("Connect"), this);\r
                connectAction.setToolTip("Connect to Evernote");\r
                connectAction.triggered.connect(parent, "remoteConnect()");\r
                connectAction = new QAction(tr("Connect"), this);\r
                connectAction.setToolTip("Connect to Evernote");\r
                connectAction.triggered.connect(parent, "remoteConnect()");\r
@@ -676,6 +681,8 @@ public class MainMenuBar extends QMenuBar {
                savedSearchMenu.addAction(savedSearchAddAction);\r
                savedSearchMenu.addAction(savedSearchEditAction);\r
                savedSearchMenu.addAction(savedSearchDeleteAction);\r
                savedSearchMenu.addAction(savedSearchAddAction);\r
                savedSearchMenu.addAction(savedSearchEditAction);\r
                savedSearchMenu.addAction(savedSearchDeleteAction);\r
+               savedSearchMenu.addSeparator();\r
+               savedSearchMenu.addAction(savedSearchIconAction);\r
                \r
                onlineMenu = addMenu(tr("&Online"));\r
                onlineMenu.addAction(synchronizeAction);\r
                \r
                onlineMenu = addMenu(tr("&Online"));\r
                onlineMenu.addAction(synchronizeAction);\r
index d508426..c30c5d4 100644 (file)
@@ -20,6 +20,7 @@
 package cx.fbn.nevernote.gui;\r
 \r
 import java.util.ArrayList;\r
 package cx.fbn.nevernote.gui;\r
 \r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.List;\r
 \r
 import com.evernote.edam.type.SavedSearch;\r
 import java.util.List;\r
 \r
 import com.evernote.edam.type.SavedSearch;\r
@@ -36,6 +37,8 @@ public class SavedSearchTreeWidget extends QTreeWidget {
        private QAction editAction;\r
        private QAction deleteAction;\r
        private QAction addAction;\r
        private QAction editAction;\r
        private QAction deleteAction;\r
        private QAction addAction;\r
+       private QAction iconAction;\r
+       private HashMap<String, QIcon>  icons;\r
        \r
        \r
        public SavedSearchTreeWidget() {\r
        \r
        \r
        public SavedSearchTreeWidget() {\r
@@ -58,6 +61,12 @@ public class SavedSearchTreeWidget extends QTreeWidget {
        public void setAddAction(QAction a) {\r
                addAction = a;\r
        }\r
        public void setAddAction(QAction a) {\r
                addAction = a;\r
        }\r
+       public void setIconAction(QAction a) {\r
+               iconAction = a;\r
+       }\r
+       public void setIcons(HashMap<String, QIcon> i) {\r
+               icons = i;\r
+       }\r
        \r
        public void load(List<SavedSearch> tempList) {\r
        SavedSearch search;\r
        \r
        public void load(List<SavedSearch> tempList) {\r
        SavedSearch search;\r
@@ -72,7 +81,11 @@ public class SavedSearchTreeWidget extends QTreeWidget {
                        search = tempList.get(i);\r
                        QTreeWidgetItem child = new QTreeWidgetItem();\r
                        child.setText(0, search.getName());\r
                        search = tempList.get(i);\r
                        QTreeWidgetItem child = new QTreeWidgetItem();\r
                        child.setText(0, search.getName());\r
-                       child.setIcon(0,icon);\r
+               if (icons != null && !icons.containsKey(search.getGuid())) {\r
+                       child.setIcon(0, icon);\r
+                   } else {\r
+                       child.setIcon(0, icons.get(search.getGuid()));\r
+                       }\r
                        child.setText(1, search.getGuid());\r
                        index.add(child);\r
                        addTopLevelItem(child);\r
                        child.setText(1, search.getGuid());\r
                        index.add(child);\r
                        addTopLevelItem(child);\r
@@ -102,6 +115,8 @@ public class SavedSearchTreeWidget extends QTreeWidget {
                menu.addAction(addAction);\r
                menu.addAction(editAction);\r
                menu.addAction(deleteAction);\r
                menu.addAction(addAction);\r
                menu.addAction(editAction);\r
                menu.addAction(deleteAction);\r
+               menu.addSeparator();\r
+               menu.addAction(iconAction);\r
                menu.exec(event.globalPos());\r
        }\r
        \r
                menu.exec(event.globalPos());\r
        }\r
        \r
index fe26133..df2d765 100644 (file)
 package cx.fbn.nevernote.sql;\r
 \r
 import java.util.ArrayList;\r
 package cx.fbn.nevernote.sql;\r
 \r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.List;\r
 \r
 import com.evernote.edam.type.QueryFormat;\r
 import com.evernote.edam.type.SavedSearch;\r
 import java.util.List;\r
 \r
 import com.evernote.edam.type.QueryFormat;\r
 import com.evernote.edam.type.SavedSearch;\r
+import com.trolltech.qt.core.QBuffer;\r
+import com.trolltech.qt.core.QByteArray;\r
+import com.trolltech.qt.core.QIODevice;\r
+import com.trolltech.qt.gui.QIcon;\r
+import com.trolltech.qt.gui.QImage;\r
+import com.trolltech.qt.gui.QPixmap;\r
 \r
 import cx.fbn.nevernote.sql.driver.NSqlQuery;\r
 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
 \r
 import cx.fbn.nevernote.sql.driver.NSqlQuery;\r
 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
@@ -281,4 +288,70 @@ public class SavedSearchTable {
                if (!query.exec())\r
                        logger.log(logger.EXTREME, "Error resetting SavedSearch dirty field in resetDirtyFlag().");\r
        }\r
                if (!query.exec())\r
                        logger.log(logger.EXTREME, "Error resetting SavedSearch dirty field in resetDirtyFlag().");\r
        }\r
+\r
+       \r
+       // Get the custom icon\r
+       public QIcon getIcon(String guid) {\r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               \r
+               if (!query.prepare("Select icon from SavedSearch where guid=:guid"))\r
+                       logger.log(logger.EXTREME, "Error preparing saved search icon select.");\r
+               query.bindValue(":guid", guid);\r
+               if (!query.exec())\r
+                       logger.log(logger.EXTREME, "Error finding saved search icon.");\r
+               if (!query.next() || query.getBlob(0) == null)\r
+                       return null;\r
+               \r
+               QByteArray blob = new QByteArray(query.getBlob(0));\r
+               QIcon icon = new QIcon(QPixmap.fromImage(QImage.fromData(blob)));\r
+               return icon;\r
+       }\r
+       // Set the custom icon\r
+       public void setIcon(String guid, QIcon icon, String type) {\r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               if (icon == null) {\r
+                       if (!query.prepare("update SavedSearch set icon=null where guid=:guid"))\r
+                               logger.log(logger.EXTREME, "Error preparing saved search icon set.");\r
+               } else {\r
+                       if (!query.prepare("update SavedSearch set icon=:icon where guid=:guid"))\r
+                               logger.log(logger.EXTREME, "Error preparing tag icon set.");\r
+                       QBuffer buffer = new QBuffer();\r
+               if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {\r
+                       logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");\r
+                       return;\r
+               }\r
+               QPixmap p = icon.pixmap(32, 32);\r
+               QImage i = p.toImage();\r
+               i.save(buffer, type.toUpperCase());\r
+               buffer.close();\r
+               QByteArray b = new QByteArray(buffer.buffer());\r
+               if (!b.isNull() && !b.isEmpty())\r
+                       query.bindValue(":icon", b.toByteArray());\r
+               else\r
+                       return;\r
+               }\r
+               query.bindValue(":guid", guid);\r
+               if (!query.exec()) \r
+                       logger.log(logger.LOW, "Error setting SavedSearch icon. " +query.lastError());\r
+       }\r
+\r
+       // Get a list of all icons\r
+       public HashMap<String, QIcon> getAllIcons() {\r
+               HashMap<String, QIcon> values = new HashMap<String, QIcon>();\r
+               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+       \r
+               if (!query.exec("SELECT guid, icon from SavedSearch"))\r
+                       logger.log(logger.EXTREME, "Error executing SavedSearch getAllIcons select.");\r
+               while (query.next()) {\r
+                       if (query.getBlob(1) != null) {\r
+                               String guid = query.valueString(0);\r
+                               QByteArray blob = new QByteArray(query.getBlob(1));\r
+                               QIcon icon = new QIcon(QPixmap.fromImage(QImage.fromData(blob)));\r
+                               values.put(guid, icon);\r
+                       }\r
+               }\r
+               return values;\r
+       }\r
+\r
+\r
 }\r
 }\r
index 6457544..aaaf30e 100644 (file)
@@ -366,10 +366,10 @@ public class TagTable {
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
                if (icon == null) {\r
                        if (!query.prepare("update tag set icon=null where guid=:guid"))\r
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
                if (icon == null) {\r
                        if (!query.prepare("update tag set icon=null where guid=:guid"))\r
-                               logger.log(logger.EXTREME, "Error preparing tag icon select.");\r
+                               logger.log(logger.EXTREME, "Error preparing tag icon update.");\r
                } else {\r
                        if (!query.prepare("update tag set icon=:icon where guid=:guid"))\r
                } else {\r
                        if (!query.prepare("update tag set icon=:icon where guid=:guid"))\r
-                               logger.log(logger.EXTREME, "Error preparing tag icon select.");\r
+                               logger.log(logger.EXTREME, "Error preparing tag icon update.");\r
                        QBuffer buffer = new QBuffer();\r
                if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {\r
                        logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");\r
                        QBuffer buffer = new QBuffer();\r
                if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {\r
                        logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");\r
@@ -396,7 +396,7 @@ public class TagTable {
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
        \r
                if (!query.exec("SELECT guid, icon from tag"))\r
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
        \r
                if (!query.exec("SELECT guid, icon from tag"))\r
-                       logger.log(logger.EXTREME, "Error executing notebook getAllIcons select.");\r
+                       logger.log(logger.EXTREME, "Error executing SavedSearch getAllIcons select.");\r
                while (query.next()) {\r
                        if (query.getBlob(1) != null) {\r
                                String guid = query.valueString(0);\r
                while (query.next()) {\r
                        if (query.getBlob(1) != null) {\r
                                String guid = query.valueString(0);\r