File_Notebook_Delete // Delete the existing notebook
File_Notebook_Close // Open/Close (i.e. archive) a notebook
File_Notebook_Icon // Modify the selected notebook icon
+File_Notebook_Stack // Stack/Unstack notebooks
File_Tag_Add Ctrl+Shift+T // Add a notebook
File_Tag_Edit // Edit an existing notebook
File_Tag_Delete // Delete the existing notebook
import cx.fbn.nevernote.dialog.OnlineNoteHistory;
import cx.fbn.nevernote.dialog.SavedSearchEdit;
import cx.fbn.nevernote.dialog.SetIcon;
+import cx.fbn.nevernote.dialog.StackNotebook;
import cx.fbn.nevernote.dialog.TagEdit;
import cx.fbn.nevernote.dialog.ThumbnailViewer;
import cx.fbn.nevernote.dialog.WatchFolder;
public NeverNote(DatabaseConnection dbConn) {
conn = dbConn;
if (conn.getConnection() == null) {
- String msg = "Unable to connect to the database.\n\nThe most probable reason is that some other process\n" +
+ String msg = new String(tr("Unable to connect to the database.\n\nThe most probable reason is that some other process\n" +
"is accessing the database or NeverNote is already running.\n\n" +
- "Please end any other process or shutdown the other NeverNote before starting.\n\nExiting program.";
+ "Please end any other process or shutdown the other NeverNote before starting.\n\nExiting program."));
- QMessageBox.critical(null, "Database Connection Error",msg);
+ QMessageBox.critical(null, tr("Database Connection Error") ,msg);
System.exit(16);
}
importFilesKeep = new ArrayList<String>();
externalFileSaveTimer.start();
- notebookTree = new NotebookTreeWidget();
+ notebookTree = new NotebookTreeWidget(conn);
attributeTree = new AttributeTreeWidget();
tagTree = new TagTreeWidget(conn);
savedSearchTree = new SavedSearchTreeWidget();
notebookTree.setEditAction(menuBar.notebookEditAction);
notebookTree.setAddAction(menuBar.notebookAddAction);
notebookTree.setIconAction(menuBar.notebookIconAction);
+ notebookTree.setStackAction(menuBar.notebookStackAction);
notebookTree.setVisible(Global.isWindowVisible("notebookTree"));
notebookTree.noteSignal.notebookChanged.connect(this, "updateNoteNotebook(String, String)");
menuBar.hideNotebooks.setChecked(Global.isWindowVisible("notebookTree"));
// Setup the tree containing the user's notebooks.
private void initializeNotebookTree() {
logger.log(logger.HIGH, "Entering NeverNote.initializeNotebookTree");
- // notebookTree.itemSelectionChanged.connect(this, "notebookTreeSelection()");
notebookTree.itemClicked.connect(this, "notebookTreeSelection()");
listManager.notebookSignal.refreshNotebookTreeCounts.connect(notebookTree, "updateCounts(List, List)");
- // notebookTree.resize(Global.getSize("notebookTree"));
logger.log(logger.HIGH, "Leaving NeverNote.initializeNotebookTree");
}
// Listener when a notebook is selected
menuBar.notebookEditAction.setEnabled(true);
menuBar.notebookDeleteAction.setEnabled(true);
menuBar.notebookIconAction.setEnabled(true);
+ menuBar.notebookStackAction.setEnabled(true);
List<QTreeWidgetItem> selections = notebookTree.selectedItems();
QTreeWidgetItem currentSelection;
selectedNotebookGUIDs.clear();
menuBar.notebookEditAction.setEnabled(false);
menuBar.notebookDeleteAction.setEnabled(false);
menuBar.notebookIconAction.setEnabled(false);
+ menuBar.notebookStackAction.setEnabled(false);
}
if (selectedNotebookGUIDs.size() == 1 && selectedNotebookGUIDs.get(0).equals(previousSelectedNotebook)) {
previousSelectedNotebook = selectedNotebookGUIDs.get(0);
}
// Edit an existing notebook
@SuppressWarnings("unused")
+ private void stackNotebook() {
+ logger.log(logger.HIGH, "Entering NeverNote.stackNotebook");
+ StackNotebook edit = new StackNotebook();
+
+ List<QTreeWidgetItem> selections = notebookTree.selectedItems();
+ QTreeWidgetItem currentSelection;
+ for (int i=0; i<selections.size(); i++) {
+ currentSelection = selections.get(0);
+ String guid = currentSelection.text(2);
+ if (guid.equalsIgnoreCase("")) {
+ QMessageBox.critical(this, tr("Unable To Stack") ,tr("You can't stack the \"All Notebooks\" item."));
+ return;
+ }
+ if (guid.equalsIgnoreCase("STACK")) {
+ QMessageBox.critical(this, tr("Unable To Stack") ,tr("You can't stack a stack."));
+ return;
+ }
+ }
+
+ edit.setStackNames(conn.getNotebookTable().getAllStackNames());
+
+
+ edit.exec();
+
+ if (!edit.okPressed())
+ return;
+
+ String stack = edit.getStackName();
+
+ for (int i=0; i<selections.size(); i++) {
+ currentSelection = selections.get(i);
+ String guid = currentSelection.text(2);
+ listManager.updateNotebookStack(guid, stack);
+ }
+ notebookIndexUpdated();
+ logger.log(logger.HIGH, "Leaving NeverNote.stackNotebook");
+ }
+ // Edit an existing notebook
+ @SuppressWarnings("unused")
private void editNotebook() {
logger.log(logger.HIGH, "Entering NeverNote.editNotebook");
NotebookEdit edit = new NotebookEdit();
- edit.setTitle(tr("Edit Notebook"));
- edit.setLocalCheckboxEnabled(false);
+
List<QTreeWidgetItem> selections = notebookTree.selectedItems();
QTreeWidgetItem currentSelection;
currentSelection = selections.get(0);
edit.setNotebook(currentSelection.text(0));
- edit.setNotebooks(listManager.getNotebookIndex());
-
+
String guid = currentSelection.text(2);
- for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
- if (listManager.getNotebookIndex().get(i).getGuid().equals(guid)) {
- edit.setDefaultNotebook(listManager.getNotebookIndex().get(i).isDefaultNotebook());
- i=listManager.getNotebookIndex().size();
+ if (!guid.equalsIgnoreCase("STACK")) {
+ edit.setTitle(tr("Edit Notebook"));
+ edit.setNotebooks(listManager.getNotebookIndex());
+ edit.setLocalCheckboxEnabled(false);
+ for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
+ if (listManager.getNotebookIndex().get(i).getGuid().equals(guid)) {
+ edit.setDefaultNotebook(listManager.getNotebookIndex().get(i).isDefaultNotebook());
+ i=listManager.getNotebookIndex().size();
+ }
}
+ } else {
+ edit.setTitle(tr("Edit Stack"));
+ edit.setStacks(conn.getNotebookTable().getAllStackNames());
+ edit.hideLocalCheckbox();
+ edit.hideDefaultCheckbox();
}
+
edit.exec();
if (!edit.okPressed())
return;
+
+ if (guid.equalsIgnoreCase("STACK")) {
+ conn.getNotebookTable().renameStacks(currentSelection.text(0), edit.getNotebook());
+ for (int j=0; j<listManager.getNotebookIndex().size(); j++) {
+ if (listManager.getNotebookIndex().get(j).getStack().equalsIgnoreCase(currentSelection.text(0)))
+ listManager.getNotebookIndex().get(j).setStack(edit.getNotebook());
+ }
+ conn.getNotebookTable().renameStacks(currentSelection.text(0), edit.getNotebook());
+ currentSelection.setText(0, edit.getNotebook());
+ return;
+ }
+
updateListNotebookName(currentSelection.text(0), edit.getNotebook());
currentSelection.setText(0, edit.getNotebook());
@SuppressWarnings("unused")
private void deleteNotebook() {
logger.log(logger.HIGH, "Entering NeverNote.deleteNotebook");
+ boolean stacksFound = false;
+ boolean notebooksFound = false;
boolean assigned = false;
// Check if any notes have this notebook
List<QTreeWidgetItem> selections = notebookTree.selectedItems();
QTreeWidgetItem currentSelection;
currentSelection = selections.get(i);
String guid = currentSelection.text(2);
- for (int j=0; j<listManager.getNoteIndex().size(); j++) {
- String noteGuid = listManager.getNoteIndex().get(j).getNotebookGuid();
- if (noteGuid.equals(guid)) {
- assigned = true;
- j=listManager.getNoteIndex().size();
- i=selections.size();
+ if (!guid.equalsIgnoreCase("STACK")) {
+ notebooksFound = true;
+ for (int j=0; j<listManager.getNoteIndex().size(); j++) {
+ String noteGuid = listManager.getNoteIndex().get(j).getNotebookGuid();
+ if (noteGuid.equals(guid)) {
+ assigned = true;
+ j=listManager.getNoteIndex().size();
+ i=selections.size();
+ }
}
+ } else {
+ stacksFound = true;
}
}
if (assigned) {
}
// If all notebooks are clear, verify the delete
- if (QMessageBox.question(this, tr("Confirmation"), tr("Delete the selected notebooks?"),
+ String msg1 = new String(tr("Delete selected notebooks?"));
+ String msg2 = new String(tr("Remove selected stacks (notebooks will not be deleted)?"));
+ String msg3 = new String(tr("Delete selected notebooks & remove stacks? Notebooks under the stacks are" +
+ " not deleted unless selected?"));
+ String msg = "";
+ if (stacksFound && notebooksFound)
+ msg = msg3;
+ if (!stacksFound && notebooksFound)
+ msg = msg1;
+ if (stacksFound && !notebooksFound)
+ msg = msg2;
+ if (QMessageBox.question(this, tr("Confirmation"), msg,
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.No)==StandardButton.No.value()) {
return;
QTreeWidgetItem currentSelection;
currentSelection = selections.get(i);
String guid = currentSelection.text(2);
- conn.getNotebookTable().expungeNotebook(guid, true);
- listManager.deleteNotebook(guid);
+ if (currentSelection.text(2).equalsIgnoreCase("STACK")) {
+ conn.getNotebookTable().renameStacks(currentSelection.text(0), "");
+ listManager.renameStack(currentSelection.text(0), "");
+ } else {
+ conn.getNotebookTable().expungeNotebook(guid, true);
+ listManager.deleteNotebook(guid);
+ }
}
-// for (int i=<dbRunner.getLocalNotebooks().size()-1; i>=0; i--) {
- // if (dbRunner.getLocalNotebooks().get(i).equals(arg0))
- // }
+
notebookTreeSelection();
notebookTree.load(listManager.getNotebookIndex(), listManager.getLocalNotebooks());
listManager.countNotebookResults(listManager.getNoteIndex());
-// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
logger.log(logger.HIGH, "Entering NeverNote.deleteNotebook");
}
// A note's notebook has been updated
private final QCheckBox isDefault;
private boolean startDefault;
private String startText;
+ private List<String> stacks;
+ private boolean stackEdit;
+ private final QLabel notebookLabel;
private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
// Constructor
public NotebookEdit() {
okPressed = false;
+ stackEdit = false;
setWindowTitle(tr("Add Notebook"));
setWindowIcon(new QIcon(iconPath+"notebook-green.png"));
QGridLayout grid = new QGridLayout();
QGridLayout textLayout = new QGridLayout();
notebook = new QLineEdit();
- textLayout.addWidget(new QLabel(tr("Notebook Name")), 1,1);
+ notebookLabel = new QLabel(tr("Notebook Name"));
+ textLayout.addWidget(notebookLabel, 1,1);
textLayout.addWidget(notebook, 1, 2);
textLayout.setContentsMargins(10, 10,-10, -10);
grid.addLayout(textLayout,1,1);
return notebook.text();
}
+ // Set the stack names
+ public void setStacks(List<String> s) {
+ stacks = s;
+ stackEdit = true;
+ notebookLabel.setText(new String(tr("Stack Name")));
+ }
+
// Set the notebook name
public void setNotebook(String name) {
if (name.equalsIgnoreCase("All Notebooks")) {
ok.setEnabled(false);
}
+ // Hide checkboxes
+ public void hideDefaultCheckbox() {
+ isDefault.setVisible(false);
+ }
+ public void hideLocalCheckbox() {
+ localRemote.setVisible(false);
+ }
+
// Watch what text is being entered
@SuppressWarnings("unused")
private void textChanged() {
ok.setEnabled(false);
return;
}
- if (currentNotebooks == null) {
- ok.setEnabled(false);
- return;
+ if (stackEdit) {
+ for (int i=0; i<stacks.size(); i++) {
+ if (stacks.get(i).equalsIgnoreCase(notebook.text())) {
+ ok.setEnabled(false);
+ return;
+ }
+ }
}
- for (int i=0; i<currentNotebooks.size(); i++) {
- String s = currentNotebooks.get(i).getName();
- if (s.equalsIgnoreCase(notebook.text())) {
+ if (!stackEdit) {
+ if (currentNotebooks == null) {
ok.setEnabled(false);
return;
}
+ for (int i=0; i<currentNotebooks.size(); i++) {
+ String s = currentNotebooks.get(i).getName();
+ if (s.equalsIgnoreCase(notebook.text())) {
+ ok.setEnabled(false);
+ return;
+ }
+ }
}
ok.setEnabled(true);
}
--- /dev/null
+/*
+ * 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.trolltech.qt.gui.QComboBox;
+import com.trolltech.qt.gui.QDialog;
+import com.trolltech.qt.gui.QGridLayout;
+import com.trolltech.qt.gui.QLabel;
+import com.trolltech.qt.gui.QPushButton;
+
+public class StackNotebook extends QDialog {
+ private boolean okPressed;
+ private final QComboBox stack;
+ QPushButton ok;
+ List<String> currentStacks;
+
+ // Constructor
+ public StackNotebook() {
+ okPressed = false;
+ setWindowTitle(tr("Stack Notebook"));
+ QGridLayout grid = new QGridLayout();
+ setLayout(grid);
+
+ QGridLayout textGrid = new QGridLayout();
+ stack = new QComboBox();
+ stack.setEditable(true);
+ textGrid.addWidget(new QLabel(tr("Stack Name")), 1,1);
+ textGrid.addWidget(stack, 1, 2);
+ textGrid.setContentsMargins(10, 10,-10, -10);
+ grid.addLayout(textGrid,1,1);
+
+ QGridLayout buttonGrid = new QGridLayout();
+ ok = new QPushButton(tr("OK"));
+ ok.clicked.connect(this, "okButtonPressed()");
+ ok.setEnabled(true);
+ QPushButton cancel = new QPushButton(tr("Cancel"));
+ cancel.clicked.connect(this, "cancelButtonPressed()");
+ stack.currentStringChanged.connect(this, "textChanged(String)");
+ buttonGrid.addWidget(ok, 3, 1);
+ buttonGrid.addWidget(cancel, 3,2);
+ grid.addLayout(buttonGrid,2,1);
+ }
+
+ // The OK button was pressed
+ @SuppressWarnings("unused")
+ private void okButtonPressed() {
+ okPressed = true;
+ close();
+ }
+
+ // The CANCEL button was pressed
+ @SuppressWarnings("unused")
+ private void cancelButtonPressed() {
+ okPressed = false;
+ close();
+ }
+
+ // Get the name from the field
+ public String getStackName() {
+ return stack.currentText();
+ }
+
+ public void setStackNames(List<String> names) {
+ currentStacks = names;
+ stack.clear();
+ for (int i=0; i<names.size(); i++) {
+ stack.addItem(names.get(i));
+ }
+ }
+
+ // Set the tag name
+ public void setStackName(String name) {
+ stack.setEditText(name);
+ }
+
+ // Check if the OK button was pressed
+ public boolean okPressed() {
+ return okPressed;
+ }
+
+ // Set the window title
+ public void setTitle(String s) {
+ setWindowTitle(s);
+ }
+ // List of existing tags
+ public void setTagList(List<String> t) {
+ currentStacks = t;
+ }
+ // Watch what text is being entered
+ @SuppressWarnings("unused")
+ private void textChanged(String text) {
+ ok.setEnabled(true);
+ }
+}
public QAction notebookDeleteAction; // Delete a notebook\r
public QAction notebookCloseAction; // Close notebooks\r
public QAction notebookIconAction; // Change the icon\r
+ public QAction notebookStackAction; // Stack/Unstack the icon.\r
\r
public QAction savedSearchAddAction; // Add a saved search\r
public QAction savedSearchEditAction; // Edit a saved search\r
notebookIconAction.triggered.connect(parent, "setNotebookIcon()");\r
setupShortcut(notebookIconAction, "File_Notebook_Icon");\r
\r
+ notebookStackAction = new QAction(tr("Set Stack"), this);\r
+ notebookStackAction.setEnabled(false);\r
+ notebookStackAction.triggered.connect(parent, "stackNotebook()");\r
+ setupShortcut(notebookStackAction, "File_Notebook_Stack");\r
+ \r
tagAddAction = new QAction(tr("Add"),this);\r
tagAddAction.triggered.connect(parent, "addTag()");\r
//tagAddAction.setShortcut("Ctrl+Shift+T");\r
notebookMenu.addAction(notebookEditAction);\r
notebookMenu.addAction(notebookDeleteAction);\r
notebookMenu.addSeparator();\r
+ notebookMenu.addAction(notebookStackAction);\r
notebookMenu.addAction(notebookCloseAction);\r
notebookMenu.addSeparator();\r
notebookMenu.addAction(notebookIconAction);\r
import cx.fbn.nevernote.Global;\r
import cx.fbn.nevernote.filters.NotebookCounter;\r
import cx.fbn.nevernote.signals.NoteSignal;\r
+import cx.fbn.nevernote.sql.DatabaseConnection;\r
\r
public class NotebookTreeWidget extends QTreeWidget {\r
private QAction deleteAction;\r
private QAction addAction;\r
private QAction editAction;\r
private QAction iconAction;\r
+ private QAction stackAction;\r
public NoteSignal noteSignal;\r
private HashMap<String, QIcon> icons;\r
+ private final DatabaseConnection db;\r
+ private List<NotebookCounter> lastCounts;\r
private final HashMap<String, QTreeWidgetItem> stacks;\r
// private final QTreeWidgetItem previousMouseOver;\r
// private boolean previousMouseOverWasSelected;\r
editAction = e;\r
}\r
\r
+ public void setStackAction(QAction e) {\r
+ stackAction = e;\r
+ }\r
+ \r
public void setIconAction(QAction e) {\r
iconAction = e;\r
}\r
\r
- public NotebookTreeWidget() {\r
+ public NotebookTreeWidget(DatabaseConnection db) {\r
noteSignal = new NoteSignal();\r
+ this.db = db;\r
// setProperty("hideTree", true);\r
List<String> labels = new ArrayList<String>();\r
labels.add("Notebooks");\r
Notebook book;\r
QTreeWidgetItem child;\r
clear();\r
+ stacks.clear();\r
\r
if (books == null)\r
return;\r
String stackName = book.getStack();\r
QTreeWidgetItem parent;\r
if (!stacks.containsKey(stackName)) {\r
- String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
- QIcon stackIcon = new QIcon(iconPath+"books2.png");\r
- parent = new QTreeWidgetItem();\r
- stacks.put(stackName, parent);\r
- parent.setText(0, stackName);\r
- parent.setIcon(0, stackIcon);\r
- parent.setText(2, "STACK");\r
- parent.setTextAlignment(1, ra.value());\r
+ parent = createStackIcon(stackName, ra);\r
addTopLevelItem(parent);\r
+ stacks.put(stackName, parent);\r
} else\r
parent = stacks.get(stackName);\r
parent.addChild(child);\r
\r
// update the display with the current number of notes\r
public void updateCounts(List<Notebook> books, List<NotebookCounter> counts) {\r
+ lastCounts = counts;\r
QTreeWidgetItem root = invisibleRootItem();\r
QTreeWidgetItem child;\r
- HashMap<String, Integer> stackCounts = new HashMap<String, Integer>();\r
\r
QBrush blue = new QBrush();\r
QBrush black = new QBrush();\r
menu.addAction(addAction);\r
menu.addAction(editAction);\r
menu.addAction(deleteAction);\r
+ menu.addAction(stackAction);\r
menu.addSeparator();\r
menu.addAction(iconAction);\r
menu.exec(event.globalPos());\r
event.accept();\r
return;\r
}\r
+ if (event.source() == this) {\r
+ event.mimeData().setData("application/x-nevernote-notebook", new QByteArray(currentItem().text(2)));\r
+ List<QTreeWidgetItem> selected = selectedItems();\r
+ for (int i=0; i<selected.size(); i++) {\r
+ if (selected.get(i).text(2).equalsIgnoreCase("STACK") || \r
+ selected.get(i).text(2).equals("")) {\r
+ event.ignore();\r
+ return;\r
+ }\r
+ }\r
+ event.accept();\r
+ return;\r
+ }\r
+ event.ignore();\r
}\r
\r
\r
\r
@Override\r
public boolean dropMimeData(QTreeWidgetItem parent, int index, QMimeData data, Qt.DropAction action) {\r
+ if (data.hasFormat("application/x-nevernote-notebook")) {\r
+ return false;\r
+ }\r
+ \r
+ if (data.hasFormat("application/x-nevernote-notebook")) {\r
+ QByteArray d = data.data("application/x-nevernote-notebook");\r
+ String current = d.toString();\r
+ \r
+ // If dropping to the top level, then remove the stack\r
+ if (parent == null) {\r
+ db.getNotebookTable().clearStack(current);\r
+ return true;\r
+ } \r
+ \r
+ // If trying to drop under the "All notebooks" then ignore\r
+ if (parent.text(2).equals(""))\r
+ return false;\r
+ \r
+ \r
+ // If we are NOT droping directly onto the stack icon\r
+ // we need to find the stack widget\r
+ String stackName;\r
+ QTreeWidgetItem stackItem;\r
+ List<QTreeWidgetItem> currentItems = selectedItems();\r
+ if (!parent.text(2).equalsIgnoreCase("STACK")) {\r
+ \r
+ // If a parent stack exists, then use it.\r
+ if (parent.parent() != null) {\r
+ stackName = parent.parent().text(0);\r
+ stackItem = parent.parent();\r
+ } else {\r
+ \r
+ currentItems.add(parent);\r
+ // If a stack doesn't exist, then we need to create one\r
+ stackName = "New Stack"; \r
+ // Find a new stack name that isn't in use\r
+ for (int i=1; i<101; i++) {\r
+ if (stacks.containsKey(stackName))\r
+ stackName = "New Stack(" +new Integer(i).toString() + ")";\r
+ else\r
+ break;\r
+ }\r
+ db.getNotebookTable().setStack(parent.text(2), stackName);\r
+ Qt.Alignment ra = new Qt.Alignment(Qt.AlignmentFlag.AlignRight);\r
+ stackItem = createStackIcon(stackName, ra);\r
+ addTopLevelItem(stackItem);\r
+ }\r
+ } else {\r
+ stackName = parent.text(0);\r
+ stackItem = parent;\r
+ }\r
+ \r
+ List<QTreeWidgetItem> newItems = new ArrayList<QTreeWidgetItem>();\r
+ for (int i=0; i<currentItems.size(); i++) {\r
+ newItems.add(copyTreeItem(currentItems.get(i)));\r
+ currentItems.get(i).setHidden(true);\r
+ }\r
+ db.getNotebookTable().setStack(current, stackName); \r
+ stackItem.addChildren(newItems);\r
+ \r
+ return true;\r
+ }\r
+ \r
+ \r
+ // If we are dropping a note onto a notebook\r
if (data.hasFormat("application/x-nevernote-note")) {\r
QByteArray d = data.data("application/x-nevernote-note");\r
String s = d.toString();\r
String noteGuidArray[] = s.split(" ");\r
for (String element : noteGuidArray) {\r
- if (!parent.text(0).equalsIgnoreCase("All Notebooks"))\r
+ if (!parent.text(0).equalsIgnoreCase("All Notebooks") && \r
+ !parent.text(2).equalsIgnoreCase("STACK"))\r
noteSignal.notebookChanged.emit(element.trim(), parent.text(2));\r
}\r
return true;\r
}\r
return false;\r
}\r
+ \r
+\r
+ private QTreeWidgetItem createStackIcon(String stackName, Qt.Alignment ra) {\r
+ String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
+ QIcon stackIcon = new QIcon(iconPath+"books2.png");\r
+ QTreeWidgetItem parent = new QTreeWidgetItem();\r
+ stacks.put(stackName, parent);\r
+ parent.setText(0, stackName);\r
+ parent.setIcon(0, stackIcon);\r
+ parent.setText(2, "STACK");\r
+ parent.setTextAlignment(1, ra.value());\r
+ return parent;\r
+ }\r
+\r
+ \r
+ \r
+ // Copy an individual item within the tree. I need to do this because\r
+ // Qt doesn't call the dropMimeData on a move, just a copy.\r
+ private QTreeWidgetItem copyTreeItem(QTreeWidgetItem source) {\r
+ QTreeWidgetItem target = new QTreeWidgetItem(this);\r
+ target.setText(0, source.text(0));\r
+ target.setIcon(0, source.icon(0));\r
+ target.setText(1, source.text(1));\r
+ target.setText(2, source.text(2));\r
+ Qt.Alignment ra = new Qt.Alignment(Qt.AlignmentFlag.AlignRight);\r
+ target.setTextAlignment(1, ra.value());\r
+ source.setHidden(true);\r
+\r
+ return target;\r
+ }\r
+\r
}\r
return false;\r
QTreeWidgetItem newChild;\r
if (parent == null) {\r
- tagSignal.changeParent.emit(current, "");\r
+// tagSignal.changeParent.emit(current, "");\r
db.getTagTable().updateTagParent(current, "");\r
newChild = new QTreeWidgetItem(this);\r
} else {\r
- tagSignal.changeParent.emit(current, parent.text(2));\r
+// tagSignal.changeParent.emit(current, parent.text(2));\r
db.getTagTable().updateTagParent(current, parent.text(2));\r
newChild = new QTreeWidgetItem(parent);\r
}\r
\r
public class TagSignal extends QSignalEmitter {\r
public Signal0 listChanged = new Signal0();\r
- public Signal2<String,String> changeParent = new Signal2<String, String>();\r
+// public Signal2<String,String> changeParent = new Signal2<String, String>();\r
public Signal1<List<TagCounter>> refreshTagTreeCounts = new Signal1<List<TagCounter>>();\r
public Signal1<List<TagCounter>> countsChanged = new Signal1<List<TagCounter>>();\r
\r
Global.setDatabaseVersion(version);
}
if (version.equals("0.86")) {
-/* sharedNotebookTable.dropTable();
- linkedNotebookTable.dropTable();
-
- executeSql("alter table notebook drop column publishingUri");
- executeSql("alter table notebook drop column publishingOrder");
- executeSql("alter table notebook drop column publishingAscending");
- executeSql("alter table notebook drop column publishingPublicDescription");
- executeSql("alter table notebook drop column stack");
- executeSql("alter table notebook drop column icon");
- executeSql("alter table tag drop column icon");
- executeSql("alter table SavedSearch drop column icon");
-
- executeSql("drop index NOTE_THUMBNAIL_INDEX;");
- executeSql("drop index NOTE_EXPUNGED_INDEX;");
- executeSql("drop index NOTE_DUEDATE_INDEX;");
- executeSql("drop index RESOURCES_GUID_INDEX;");
-*/
+
executeSql("alter table notebook add column publishingUri VarChar");
executeSql("alter table notebook add column publishingOrder Integer");
executeSql("alter table notebook add column publishingAscending VarChar");
public void createTables() {
Global.setDatabaseVersion("0.85");
-// Global.setDatabaseVersion("0.95");
Global.setAutomaticLogin(false);
Global.saveCurrentNoteGuid("");
Global.saveUploadAmount(0);
watchFolderTable.createTable();
invalidXMLTable.createTable();
wordsTable.createTable();
- syncTable.createTable();
-
+ syncTable.createTable();
}
public Connection getConnection() {
newnote.setName("My Notebook");\r
newnote.setPublished(false);\r
newnote.setGuid("1");\r
- addNotebook(newnote, true, false);\r
+ \r
+ // Setup an initial notebook\r
+ SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");\r
+ query = new NSqlQuery(db.getConnection());\r
+ query.prepare("Insert Into Notebook (guid, sequence, name, defaultNotebook, "\r
+ +"serviceCreated, serviceUpdated, published, " \r
+ + "isDirty, autoEncrypt, " \r
+ + "local, archived) Values("\r
+ +":guid, :sequence, :name, :defaultNotebook, "\r
+ +":serviceCreated, :serviceUpdated, :published, "\r
+ +":isDirty, :autoEncrypt, "\r
+ +":local, false)");\r
+ query.bindValue(":guid", newnote.getGuid());\r
+ query.bindValue(":sequence", newnote.getUpdateSequenceNum());\r
+ query.bindValue(":name", newnote.getName());\r
+ query.bindValue(":defaultNotebook", newnote.isDefaultNotebook());\r
+ \r
+ StringBuilder serviceCreated = new StringBuilder(simple.format(newnote.getServiceCreated())); \r
+ StringBuilder serviceUpdated = new StringBuilder(simple.format(newnote.getServiceUpdated()));\r
+ if (serviceUpdated.toString() == null)\r
+ serviceUpdated = serviceCreated;\r
+ query.bindValue(":serviceCreated", serviceCreated.toString());\r
+ query.bindValue(":serviceUpdated", serviceCreated.toString());\r
+ query.bindValue(":published",newnote.isPublished());\r
+ \r
+ query.bindValue(":isDirty", true);\r
+ query.bindValue(":autoEncrypt", false);\r
+ query.bindValue(":local", false);\r
+\r
+ boolean check = query.exec();\r
+ if (!check) {\r
+ logger.log(logger.MEDIUM, "Initial Notebook Table insert failed.");\r
+ logger.log(logger.MEDIUM, query.lastError().toString());\r
+ }\r
+\r
\r
}\r
// Drop the table\r
NSqlQuery query = new NSqlQuery(db.getConnection());\r
check = query.prepare("Insert Into Notebook (guid, sequence, name, defaultNotebook, "\r
+"serviceCreated, serviceUpdated, published, " \r
- + "isDirty, autoEncrypt, stack" \r
+ + "isDirty, autoEncrypt, stack, " \r
+ "local, archived) Values("\r
+":guid, :sequence, :name, :defaultNotebook, "\r
+":serviceCreated, :serviceUpdated, :published, "\r
+":isDirty, :autoEncrypt, "\r
- +":local, false, :stack)");\r
+ +":stack, :local, false)");\r
query.bindValue(":guid", tempNotebook.getGuid());\r
query.bindValue(":sequence", tempNotebook.getUpdateSequenceNum());\r
query.bindValue(":name", tempNotebook.getName());\r
NSqlQuery query = new NSqlQuery(db.getConnection());\r
\r
check = query.exec("Select guid, sequence, name, defaultNotebook, " +\r
- "serviceCreated, serviceUpdated, published from Notebook where isDirty = true and local=false");\r
+ "serviceCreated, serviceUpdated, published, stack from Notebook where isDirty = true and local=false");\r
if (!check) \r
logger.log(logger.EXTREME, "Notebook SQL retrieve has failed.");\r
while (query.next()) {\r
e.printStackTrace();\r
}\r
tempNotebook.setPublished(new Boolean(query.valueString(6)));\r
- index.add(tempNotebook); \r
+ tempNotebook.setStack(query.valueString(7));\r
+ index.add(tempNotebook);\r
} \r
return index; \r
}\r
return counts;\r
}\r
\r
+ // Get/Set stacks\r
+ public void clearStack(String guid) {\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ query.prepare("Update notebook set stack='' where guid=:guid");\r
+ query.bindValue(":guid", guid);\r
+ if (!query.exec())\r
+ logger.log(logger.EXTREME, "Error clearing notebook stack.");\r
+ }\r
+ // Get/Set stacks\r
+ public void setStack(String guid, String stack) {\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ query.prepare("Update notebook set stack=:stack, isDirty=true where guid=:guid");\r
+ query.bindValue(":guid", guid);\r
+ query.bindValue(":stack", stack);\r
+ if (!query.exec())\r
+ logger.log(logger.EXTREME, "Error setting notebook stack.");\r
+ }\r
+ // Get all stack names\r
+ public List<String> getAllStackNames() {\r
+ List<String> stacks = new ArrayList<String>();\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ if (!query.exec("Select distinct stack from notebook")) {\r
+ logger.log(logger.EXTREME, "Error getting all stack names.");\r
+ return null;\r
+ }\r
+ \r
+ while (query.next()) {\r
+ if (query.valueString(0) != null && !query.valueString(0).trim().equals(""))\r
+ stacks.add(query.valueString(0));\r
+ }\r
+ return stacks;\r
+ }\r
+ // Rename a stack\r
+ public void renameStacks(String oldName, String newName) {\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ if (!query.prepare("update notebook set stack=:newName where stack=:oldName")) {\r
+ logger.log(logger.EXTREME, "Error preparing in renameStacks.");\r
+ return;\r
+ }\r
+ query.bindValue(":oldName", oldName);\r
+ query.bindValue(":newName", newName);\r
+ if (!query.exec()) {\r
+ logger.log(logger.EXTREME, "Error updating stack names");\r
+ return;\r
+ }\r
+ }\r
+ // Get/Set stacks\r
+ public boolean stackExists(String stack) {\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ query.prepare("Select guid from notebook where stack=:stack limit 1");\r
+ query.bindValue(":stack", stack);\r
+ if (!query.exec())\r
+ logger.log(logger.EXTREME, "Error setting notebook stack.");\r
+ if (query.next())\r
+ return true;\r
+ else\r
+ return false;\r
+ }\r
}\r
\r
}\r
conn.getNotebookTable().expungeNotebook(guid, true); \r
}\r
+ // Rename a stack\r
+ public void renameStack(String oldName, String newName) {\r
+ for (int i=0; i<getNotebookIndex().size(); i++) {\r
+ if (getNotebookIndex().get(i).getStack() != null && \r
+ getNotebookIndex().get(i).getStack().equalsIgnoreCase(oldName)) {\r
+ getNotebookIndex().get(i).setStack(newName);\r
+ }\r
+ } \r
+ }\r
// Update a notebook sequence number\r
public void updateNotebookSequence(String guid, int sequence) {\r
logger.log(logger.HIGH, "Entering ListManager.updateNotebookSequence");\r
logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
\r
}\r
+ // Update a notebook Guid number\r
+ public void updateNotebookStack(String oldGuid, String stack) {\r
+ logger.log(logger.HIGH, "Entering ListManager.updateNotebookGuid");\r
+\r
+ conn.getNotebookTable().setStack(oldGuid, stack);\r
+ \r
+ for (int i=0; i<notebookIndex.size(); i++) {\r
+ if (notebookIndex.get(i).getGuid().equals(oldGuid)) {\r
+ notebookIndex.get(i).setStack(stack);\r
+ i=notebookIndex.size()+1;\r
+ }\r
+ }\r
+ logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
+\r
+ }\r
\r
\r
//************************************************************************************\r