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"));
tagTree.blockSignals(false);
}
// Change the icon for a tag
- // Change the notebook's icon
private void setTagIcon() {
QTreeWidgetItem currentSelection;
List<QTreeWidgetItem> selections = tagTree.selectedItems();
String currentGuid = selectedSavedSearchGUID;
menuBar.savedSearchEditAction.setEnabled(true);
menuBar.savedSearchDeleteAction.setEnabled(true);
+ menuBar.savedSearchIconAction.setEnabled(true);
List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
QTreeWidgetItem currentSelection;
selectedSavedSearchGUID = "";
private void clearSavedSearchFilter() {
menuBar.savedSearchEditAction.setEnabled(false);
menuBar.savedSearchDeleteAction.setEnabled(false);
+ menuBar.savedSearchIconAction.setEnabled(false);
savedSearchTree.blockSignals(true);
savedSearchTree.clearSelection();
savedSearchTree.blockSignals(false);
if (selectedSavedSearchGUID == null)
selectedSavedSearchGUID = new String();
savedSearchTree.blockSignals(true);
+ savedSearchTree.setIcons(conn.getSavedSearchTable().getAllIcons());
savedSearchTree.load(listManager.getSavedSearchIndex());
savedSearchTree.selectGuid(selectedSavedSearchGUID);
savedSearchTree.blockSignals(false);
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);
+ 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);
+ menuBar.savedSearchIconAction.setEnabled(false);
selectedSavedSearchGUID = "";
searchField.setEditText("");
}
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);
+ }
+
+ }
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
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
connectAction = new QAction(tr("Connect"), this);\r
connectAction.setToolTip("Connect to Evernote");\r
connectAction.triggered.connect(parent, "remoteConnect()");\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
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
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
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
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
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
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 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
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
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
- 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
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