From ad713a090166940dce9635b8b15099ca447d8313 Mon Sep 17 00:00:00 2001 From: Randy Baumgarte Date: Wed, 23 Mar 2011 16:31:07 -0400 Subject: [PATCH] Added the ability to merge tags and corrected some shortcuts. --- src/cx/fbn/nevernote/NeverNote.java | 37 +++++++++- src/cx/fbn/nevernote/dialog/TagMerge.java | 106 ++++++++++++++++++++++++++++ src/cx/fbn/nevernote/gui/ContentView.java | 4 +- src/cx/fbn/nevernote/gui/MainMenuBar.java | 7 ++ src/cx/fbn/nevernote/gui/TagTreeWidget.java | 4 ++ src/cx/fbn/nevernote/sql/NoteTagsTable.java | 20 ++++++ 6 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 src/cx/fbn/nevernote/dialog/TagMerge.java diff --git a/src/cx/fbn/nevernote/NeverNote.java b/src/cx/fbn/nevernote/NeverNote.java index 1eba567..d712f56 100644 --- a/src/cx/fbn/nevernote/NeverNote.java +++ b/src/cx/fbn/nevernote/NeverNote.java @@ -154,6 +154,7 @@ import cx.fbn.nevernote.dialog.SetIcon; import cx.fbn.nevernote.dialog.ShareNotebook; import cx.fbn.nevernote.dialog.StackNotebook; import cx.fbn.nevernote.dialog.TagEdit; +import cx.fbn.nevernote.dialog.TagMerge; import cx.fbn.nevernote.dialog.ThumbnailViewer; import cx.fbn.nevernote.dialog.UpgradeAvailableDialog; import cx.fbn.nevernote.dialog.WatchFolder; @@ -566,6 +567,7 @@ public class NeverNote extends QMainWindow{ emitLog = new ArrayList(); tagTree.setDeleteAction(menuBar.tagDeleteAction); + tagTree.setMergeAction(menuBar.tagMergeAction); tagTree.setEditAction(menuBar.tagEditAction); tagTree.setAddAction(menuBar.tagAddAction); tagTree.setIconAction(menuBar.tagIconAction); @@ -2107,6 +2109,10 @@ public class NeverNote extends QMainWindow{ menuBar.tagDeleteAction.setEnabled(false); menuBar.tagIconAction.setEnabled(true); } + if (selections.size() > 1) + menuBar.tagMergeAction.setEnabled(true); + else + menuBar.tagMergeAction.setEnabled(false); listManager.setSelectedTags(selectedTagGUIDs); listManager.loadNotesIndex(); noteIndexUpdated(false); @@ -2253,6 +2259,7 @@ public class NeverNote extends QMainWindow{ tagTree.clearSelection(); menuBar.noteRestoreAction.setVisible(false); menuBar.tagEditAction.setEnabled(false); + menuBar.tagMergeAction.setEnabled(false); menuBar.tagDeleteAction.setEnabled(false); menuBar.tagIconAction.setEnabled(false); selectedTagGUIDs.clear(); @@ -2291,7 +2298,36 @@ public class NeverNote extends QMainWindow{ } } + // Merge tags + private void mergeTags() { + List tags = new ArrayList(); + List selections = tagTree.selectedItems(); + for (int i=0; i noteGuids = conn.getNoteTable().noteTagsTable.getTagNotes(tags.get(i).getGuid()); + for (int j=0; j<><><><><><><><><><><><><><><><><><><>"); updateQuotaBar(); listManager.refreshLists(currentNote, noteDirty, browserWindow.getContent()); tagIndexUpdated(true); diff --git a/src/cx/fbn/nevernote/dialog/TagMerge.java b/src/cx/fbn/nevernote/dialog/TagMerge.java new file mode 100644 index 0000000..6506ded --- /dev/null +++ b/src/cx/fbn/nevernote/dialog/TagMerge.java @@ -0,0 +1,106 @@ +/* + * This file is part of NeverNote + * Copyright 2009 Randy Baumgarte + * + * This file may be licensed under the terms of of the + * GNU General Public License Version 2 (the ``GPL''). + * + * Software distributed under the License is distributed + * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either + * express or implied. See the GPL for the specific language + * governing rights and limitations. + * + * You should have received a copy of the GPL along with this + * program. If not, go to http://www.gnu.org/licenses/gpl.html + * or write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * +*/ + +package cx.fbn.nevernote.dialog; + +import java.util.List; + +import com.evernote.edam.type.Tag; +import com.trolltech.qt.gui.QComboBox; +import com.trolltech.qt.gui.QDialog; +import com.trolltech.qt.gui.QHBoxLayout; +import com.trolltech.qt.gui.QIcon; +import com.trolltech.qt.gui.QLabel; +import com.trolltech.qt.gui.QPushButton; +import com.trolltech.qt.gui.QSpacerItem; +import com.trolltech.qt.gui.QVBoxLayout; + +public class TagMerge extends QDialog { + private final QComboBox newTag; + private final QPushButton okButton; + private final QPushButton cancelButton; + private boolean okClicked; + private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/"); + + public TagMerge(List tags) { + setWindowIcon(new QIcon(iconPath+"tag.png")); + okClicked = false; + + okButton = new QPushButton(); + okButton.setText(tr("OK")); + okButton.pressed.connect(this, "onClicked()"); + + cancelButton = new QPushButton(); + cancelButton.setText(tr("Cancel")); + cancelButton.pressed.connect(this, "onCancel()"); + + + QVBoxLayout middleLayout = new QVBoxLayout(); + middleLayout.addSpacerItem(new QSpacerItem(1,1)); + middleLayout.addSpacerItem(new QSpacerItem(1,1)); + + QVBoxLayout closeLayout = new QVBoxLayout(); + closeLayout.addWidget(new QLabel(tr("Merge Into"))); + newTag = new QComboBox(); + closeLayout.addWidget(newTag); + + QHBoxLayout buttonLayout = new QHBoxLayout(); + buttonLayout.addStretch(1); + buttonLayout.addWidget(okButton); + buttonLayout.addWidget(cancelButton); + setWindowTitle(tr("Open/Close Notebooks")); + + QHBoxLayout upperLayout = new QHBoxLayout(); + upperLayout.addLayout(middleLayout); + upperLayout.addLayout(closeLayout); + + QVBoxLayout mainLayout = new QVBoxLayout(); + mainLayout.addLayout(upperLayout); + //mainLayout.addStretch(1); + mainLayout.addSpacing(1); + mainLayout.addLayout(buttonLayout); + setLayout(mainLayout); + + for (int i=0; i getTagNotes(String tagGuid) { + if (tagGuid == null) + return null; + List notes = new ArrayList(); + + NSqlQuery query = new NSqlQuery(db.getConnection()); + query.prepare("Select NoteGuid from NoteTags where tagGuid = :guid"); + + query.bindValue(":guid", tagGuid); + if (!query.exec()) { + logger.log(logger.EXTREME, "getTagNotes SQL select has failed."); + logger.log(logger.MEDIUM, query.lastError()); + return notes; + } + while (query.next()) { + notes.add(query.valueString(0)); + } + return notes; + } void prepareGetNoteTagsQuery() { getNoteTagsQuery = new NSqlQuery(db.getConnection()); getNoteTagsQuery.prepare("Select TagGuid from NoteTags where noteGuid = :guid"); -- 2.11.0