import java.util.SortedMap;
import java.util.Vector;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.h2.tools.ChangeFileEncryption;
import com.evernote.edam.notestore.NoteFilter;
import com.evernote.edam.notestore.NoteVersionId;
import com.evernote.edam.type.Data;
+import com.evernote.edam.type.LinkedNotebook;
import com.evernote.edam.type.Note;
import com.evernote.edam.type.NoteAttributes;
import com.evernote.edam.type.Notebook;
+import com.evernote.edam.type.Publishing;
import com.evernote.edam.type.QueryFormat;
import com.evernote.edam.type.Resource;
import com.evernote.edam.type.SavedSearch;
import com.trolltech.qt.gui.QColor;
import com.trolltech.qt.gui.QComboBox;
import com.trolltech.qt.gui.QComboBox.InsertPolicy;
+import com.trolltech.qt.gui.QCursor;
import com.trolltech.qt.gui.QDesktopServices;
import com.trolltech.qt.gui.QDialog;
import com.trolltech.qt.gui.QFileDialog;
import cx.fbn.nevernote.dialog.NotebookArchive;
import cx.fbn.nevernote.dialog.NotebookEdit;
import cx.fbn.nevernote.dialog.OnlineNoteHistory;
+import cx.fbn.nevernote.dialog.PublishNotebook;
import cx.fbn.nevernote.dialog.SavedSearchEdit;
+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.ThumbnailViewer;
import cx.fbn.nevernote.dialog.WatchFolder;
+import cx.fbn.nevernote.filters.FilterEditorNotebooks;
+import cx.fbn.nevernote.filters.FilterEditorTags;
import cx.fbn.nevernote.gui.AttributeTreeWidget;
import cx.fbn.nevernote.gui.BrowserWindow;
import cx.fbn.nevernote.gui.DateAttributeFilterTable;
String currentNoteGuid; // GUID of the current note
Note currentNote; // The currently viewed note
boolean noteDirty; // Has the note been changed?
- boolean inkNote; // if this is an ink note, it is read only
+ boolean inkNote; // if this is an ink note, it is read only
+ boolean readOnly; // Is this note read-only?
+
ListManager listManager; // DB runnable task
QAction synchronizeButton; // Synchronize with Evernote
QAction allNotesButton; // Reset & view all notes
QTimer synchronizeAnimationTimer; // Timer to change animation button
- double synchronizeIconAngle; // Used to rotate sync icon
+ int synchronizeIconAngle; // Used to rotate sync icon
QAction printButton; // Print Button
QAction tagButton; // Tag edit button
QAction attributeButton; // Attribute information button
int saveThreadDeadCount=0; // number of consecutive dead times for the save thread
HashMap<String, String> noteCache; // Cash of note content
+ HashMap<String, Boolean> readOnlyCache; // List of cashe notes that are read-only
+ HashMap<String, Boolean> inkNoteCache; // List of cache notes that are ink notes
List<String> historyGuids; // GUIDs of previously viewed items
int historyPosition; // Position within the viewed items
boolean fromHistory; // Is this from the history queue?
Signal0 minimizeToTray;
boolean windowMaximized = false; // Keep track of the window state for restores
List<String> pdfReadyQueue; // Queue of PDFs that are ready to be rendered.
+ List<QPixmap> syncIcons; // Array of icons used in sync animation
+ private boolean closeAction = false; // Used to say when to close or when to minimize
+ private static Logger log = Logger.getLogger(NeverNote.class);
String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
//***************************************************************
//***************************************************************
// Application Constructor
+ @SuppressWarnings("static-access")
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);
}
logger.log(logger.EXTREME, "Building index runners & timers");
indexRunner = new IndexRunner("indexRunner.log", Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);
indexThread = new QThread(indexRunner, "Index Thread");
+ indexRunner.indexAttachmentsLocally = Global.indexAttachmentsLocally();
indexThread.start();
synchronizeAnimationTimer = new QTimer();
thumbnailTimer = new QTimer();
thumbnailTimer.timeout.connect(this, "thumbnailTimer()");
thumbnailTimer();
- thumbnailTimer.setInterval(5*1000); // Thumbnail every 2 min
+ thumbnailTimer.setInterval(60*1000); // Thumbnail every minute
thumbnailTimer.start();
logger.log(logger.EXTREME, "Starting authentication timer");
importFilesKeep = new ArrayList<String>();
externalFileSaveTimer.start();
- notebookTree = new NotebookTreeWidget();
+ notebookTree = new NotebookTreeWidget(conn);
attributeTree = new AttributeTreeWidget();
tagTree = new TagTreeWidget(conn);
savedSearchTree = new SavedSearchTreeWidget();
// Setup the browser window
noteCache = new HashMap<String,String>();
+ readOnlyCache = new HashMap<String, Boolean>();
+ inkNoteCache = new HashMap<String, Boolean>();
browserWindow = new BrowserWindow(conn);
mainLeftRightSplitter.addWidget(leftSplitter1);
tagTree.setDeleteAction(menuBar.tagDeleteAction);
tagTree.setEditAction(menuBar.tagEditAction);
tagTree.setAddAction(menuBar.tagAddAction);
+ tagTree.setIconAction(menuBar.tagIconAction);
tagTree.setVisible(Global.isWindowVisible("tagTree"));
tagTree.noteSignal.tagsAdded.connect(this, "tagsAdded(String, String)");
menuBar.hideTags.setChecked(Global.isWindowVisible("tagTree"));
notebookTree.setDeleteAction(menuBar.notebookDeleteAction);
notebookTree.setEditAction(menuBar.notebookEditAction);
notebookTree.setAddAction(menuBar.notebookAddAction);
+ notebookTree.setIconAction(menuBar.notebookIconAction);
+ notebookTree.setStackAction(menuBar.notebookStackAction);
+ notebookTree.setPublishAction(menuBar.notebookPublishAction);
+ notebookTree.setShareAction(menuBar.notebookShareAction);
notebookTree.setVisible(Global.isWindowVisible("notebookTree"));
notebookTree.noteSignal.notebookChanged.connect(this, "updateNoteNotebook(String, String)");
+ notebookTree.noteSignal.tagsChanged.connect(this, "updateNoteTags(String, List)");
+ notebookTree.noteSignal.tagsChanged.connect(this, "updateListTags(String, List)");
menuBar.hideNotebooks.setChecked(Global.isWindowVisible("notebookTree"));
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"));
trayExitAction = new QAction("Exit", this);
trayAddNoteAction = new QAction("Add Note", this);
- trayExitAction.triggered.connect(this, "close()");
+ trayExitAction.triggered.connect(this, "closeNeverNote()");
trayAddNoteAction.triggered.connect(this, "addNote()");
trayShowAction.triggered.connect(this, "trayToggleVisible()");
historyGuids.add(currentNoteGuid);
historyPosition = 1;
+ menuBar.blockSignals(true);
+ menuBar.narrowListView.blockSignals(true);
+ menuBar.wideListView.blockSignals(true);
if (Global.getListView() == Global.View_List_Narrow) {
menuBar.narrowListView.setChecked(true);
-// narrowListView();
}
else{
menuBar.wideListView.setChecked(true);
-// wideListView();
}
+ menuBar.blockSignals(false);
+ menuBar.narrowListView.blockSignals(false);
+ menuBar.wideListView.blockSignals(false);
if (Global.getListView() == Global.View_List_Wide) {
browserIndexSplitter.addWidget(noteTableView);
// Main entry point
public static void main(String[] args) {
+ log.setLevel(Level.FATAL);
QApplication.initialize(args);
QPixmap pixmap = new QPixmap("classpath:cx/fbn/nevernote/icons/splash_logo.png");
QSplashScreen splash = new QSplashScreen(pixmap);
dbConn = setupDatabaseConnection();
// Must be last stage of setup - only safe once DB is open hence we know we are the only instance running
- Global.getFileManager().purgeResDirectory();
+ Global.getFileManager().purgeResDirectory(true);
} catch (InitializationException e) {
// Fatal
// Exit point
@Override
public void closeEvent(QCloseEvent event) {
+ if (Global.minimizeOnClose() && !closeAction && Global.showTrayIcon()) {
+ event.ignore();
+ hide();
+ return;
+ }
logger.log(logger.HIGH, "Entering NeverNote.closeEvent");
waitCursor(true);
logger.log(logger.HIGH, "Leaving NeverNote.closeEvent");
}
+ @SuppressWarnings("unused")
+ private void closeNeverNote() {
+ closeAction = true;
+ close();
+ }
public void setMessage(String s) {
logger.log(logger.HIGH, "Entering NeverNote.setMessage");
logger.log(logger.HIGH, "Message: " +s);
}
private void waitCursor(boolean wait) {
-// if (wait)
-// QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.WaitCursor));
-// else
-// QApplication.restoreOverrideCursor();
+ if (wait) {
+ if (QApplication.overrideCursor() == null)
+ QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.WaitCursor));
+ }
+ else {
+ while (QApplication.overrideCursor() != null)
+ QApplication.restoreOverrideCursor();
+ }
}
private void setupIndexListeners() {
- indexRunner.noteSignal.noteIndexed.connect(this, "indexThreadComplete(String)");
- indexRunner.resourceSignal.resourceIndexed.connect(this, "indexThreadComplete(String)");
-// indexRunner.threadSignal.indexNeeded.connect(listManager, "setIndexNeeded(String, String, Boolean)");
+// indexRunner.noteSignal.noteIndexed.connect(this, "indexThreadComplete(String)");
+// indexRunner.resourceSignal.resourceIndexed.connect(this, "indexThreadComplete(String)");
+ indexRunner.signal.indexStarted.connect(this, "indexStarted()");
+ indexRunner.signal.indexFinished.connect(this, "indexComplete()");
}
private void setupSyncSignalListeners() {
syncRunner.tagSignal.listChanged.connect(this, "tagIndexUpdated()");
indexTimer.start(indexTime); // reset indexing timer
settings.exec();
+ indexRunner.indexAttachmentsLocally = Global.indexAttachmentsLocally();
if (Global.showTrayIcon())
trayIcon.show();
else
// if (!dateFormat.equals(Global.getDateFormat()) ||
// !timeFormat.equals(Global.getTimeFormat())) {
noteCache.clear();
+ readOnlyCache.clear();
+ inkNoteCache.clear();
noteIndexUpdated(true);
// }
// 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()");
+ notebookTree.selectionSignal.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.noteRestoreAction.setVisible(false);
menuBar.notebookEditAction.setEnabled(true);
menuBar.notebookDeleteAction.setEnabled(true);
+ menuBar.notebookPublishAction.setEnabled(true);
+ menuBar.notebookShareAction.setEnabled(true);
+ menuBar.notebookIconAction.setEnabled(true);
+ menuBar.notebookStackAction.setEnabled(true);
List<QTreeWidgetItem> selections = notebookTree.selectedItems();
- QTreeWidgetItem currentSelection;
selectedNotebookGUIDs.clear();
- if (!Global.mimicEvernoteInterface) {
- for (int i=0; i<selections.size(); i++) {
- currentSelection = selections.get(i);
- selectedNotebookGUIDs.add(currentSelection.text(2));
- }
-
-
- // There is the potential for no notebooks to be selected if this
- // happens then we make it look like all notebooks were selecetd.
- // If that happens, just select the "all notebooks"
- selections = notebookTree.selectedItems();
- if (selections.size()==0) {
- selectedNotebookGUIDs.clear();
- menuBar.notebookEditAction.setEnabled(false);
- menuBar.notebookDeleteAction.setEnabled(false);
- }
+ String guid = "";
+ String stackName = "";
+ if (selections.size() > 0) {
+ guid = (selections.get(0).text(2));
+ stackName = selections.get(0).text(0);
+ }
+ if (!Global.mimicEvernoteInterface) {
+ // If no notebooks are selected, we make it look like the "all notebooks" one was selected
+ if (selections.size()==0) {
+ selectedNotebookGUIDs.clear();
+ for (int i=0; i < listManager.getNotebookIndex().size(); i++) {
+ selectedNotebookGUIDs.add(listManager.getNotebookIndex().get(i).getGuid());
+ }
+ menuBar.notebookEditAction.setEnabled(false);
+ menuBar.notebookDeleteAction.setEnabled(false);
+ menuBar.notebookStackAction.setEnabled(false);
+ menuBar.notebookIconAction.setEnabled(false);
+ }
+ }
+ if (!guid.equals("") && !guid.equals("STACK")) {
+ selectedNotebookGUIDs.add(guid);
+ menuBar.notebookIconAction.setEnabled(true);
} else {
- String guid = "";
- if (selections.size() > 0)
- guid = (selections.get(0).text(2));
- if (!guid.equals(""))
- selectedNotebookGUIDs.add(guid);
+ menuBar.notebookIconAction.setEnabled(true);
+ for (int j=0; j<listManager.getNotebookIndex().size(); j++) {
+ Notebook book = listManager.getNotebookIndex().get(j);
+ if (book.getStack() != null && book.getStack().equalsIgnoreCase(stackName))
+ selectedNotebookGUIDs.add(book.getGuid());
+ }
}
listManager.setSelectedNotebooks(selectedNotebookGUIDs);
listManager.loadNotesIndex();
// Triggered when the notebook DB has been updated
private void notebookIndexUpdated() {
logger.log(logger.HIGH, "Entering NeverNote.notebookIndexUpdated");
- if (selectedNotebookGUIDs == null)
+
+ // Get the possible icons
+ HashMap<String, QIcon> icons = conn.getNotebookTable().getAllIcons();
+ notebookTree.setIcons(icons);
+
+ if (selectedNotebookGUIDs == null)
selectedNotebookGUIDs = new ArrayList<String>();
List<Notebook> books = conn.getNotebookTable().getAll();
for (int i=books.size()-1; i>=0; i--) {
}
// 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());
conn.getNotebookTable().setDefaultNotebook(listManager.getNotebookIndex().get(i).getGuid());
}
conn.getNotebookTable().updateNotebook(listManager.getNotebookIndex().get(i), true);
+ if (conn.getNotebookTable().isLinked(listManager.getNotebookIndex().get(i).getGuid())) {
+ LinkedNotebook linkedNotebook = conn.getLinkedNotebookTable().getByNotebookGuid(listManager.getNotebookIndex().get(i).getGuid());
+ linkedNotebook.setShareName(edit.getNotebook());
+ conn.getLinkedNotebookTable().updateNotebook(linkedNotebook, true);
+ }
i=listManager.getNotebookIndex().size();
}
}
browserWindow.setNotebookList(nbooks);
logger.log(logger.HIGH, "Leaving NeverNote.editNotebook");
}
+ // Publish a notebook
+ @SuppressWarnings("unused")
+ private void publishNotebook() {
+ List<QTreeWidgetItem> selections = notebookTree.selectedItems();
+ QTreeWidgetItem currentSelection;
+ currentSelection = selections.get(0);
+ String guid = currentSelection.text(2);
+
+ if (guid.equalsIgnoreCase("STACK") || guid.equalsIgnoreCase(""))
+ return;
+
+ Notebook n = null;
+ int position = 0;
+ for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
+ if (guid.equals(listManager.getNotebookIndex().get(i).getGuid())) {
+ n = listManager.getNotebookIndex().get(i);
+ position = i;
+ i = listManager.getNotebookIndex().size();
+ }
+ }
+ if (n == null)
+ return;
+
+ PublishNotebook publish = new PublishNotebook(Global.username, Global.getServer(), n);
+ publish.exec();
+
+ if (!publish.okClicked())
+ return;
+
+ Publishing p = publish.getPublishing();
+ boolean isPublished = !publish.isStopPressed();
+ conn.getNotebookTable().setPublishing(n.getGuid(), isPublished, p);
+ n.setPublished(isPublished);
+ n.setPublishing(p);
+ listManager.getNotebookIndex().set(position, n);
+ notebookIndexUpdated();
+ }
+ // Publish a notebook
+ @SuppressWarnings("unused")
+ private void shareNotebook() {
+ List<QTreeWidgetItem> selections = notebookTree.selectedItems();
+ QTreeWidgetItem currentSelection;
+ currentSelection = selections.get(0);
+ String guid = currentSelection.text(2);
+
+ if (guid.equalsIgnoreCase("STACK") || guid.equalsIgnoreCase(""))
+ return;
+
+ Notebook n = null;;
+ for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
+ if (guid.equals(listManager.getNotebookIndex().get(i).getGuid())) {
+ n = listManager.getNotebookIndex().get(i);
+ i = listManager.getNotebookIndex().size();
+ }
+ }
+
+ String authToken = null;
+ if (syncRunner.isConnected)
+ authToken = syncRunner.authToken;
+ ShareNotebook share = new ShareNotebook(n.getName(), conn, n, syncRunner);
+ share.exec();
+
+ }
+
// Delete an existing notebook
@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());
+
+ notebookIndexUpdated();
+// notebookTreeSelection();
+// notebookTree.load(listManager.getNotebookIndex(), listManager.getLocalNotebooks());
+// listManager.countNotebookResults(listManager.getNoteIndex());
logger.log(logger.HIGH, "Entering NeverNote.deleteNotebook");
}
// A note's notebook has been updated
listManager.loadNotesIndex();
notebookIndexUpdated();
noteIndexUpdated(false);
+ reloadTagTree(true);
// noteIndexUpdated(false);
// Build a list of non-closed notebooks
waitCursor(false);
browserWindow.setNotebookList(nbooks);
}
+ // Change the notebook's icon
+ @SuppressWarnings("unused")
+ private void setNotebookIcon() {
+ boolean stackSelected = false;
+ boolean allNotebookSelected = false;
+
+ QTreeWidgetItem currentSelection;
+ List<QTreeWidgetItem> selections = notebookTree.selectedItems();
+ if (selections.size() == 0)
+ return;
+
+ currentSelection = selections.get(0);
+ String guid = currentSelection.text(2);
+ if (guid.equalsIgnoreCase(""))
+ allNotebookSelected = true;
+ if (guid.equalsIgnoreCase("STACK"))
+ stackSelected = true;
+ QIcon currentIcon = currentSelection.icon(0);
+ QIcon icon;
+ SetIcon dialog;
+
+ if (!stackSelected && !allNotebookSelected) {
+ icon = conn.getNotebookTable().getIcon(guid);
+ if (icon == null) {
+ dialog = new SetIcon(currentIcon);
+ dialog.setUseDefaultIcon(true);
+ } else {
+ dialog = new SetIcon(icon);
+ dialog.setUseDefaultIcon(false);
+ }
+ } else {
+ if (stackSelected) {
+ icon = conn.getSystemIconTable().getIcon(currentSelection.text(0), "STACK");
+ } else {
+ icon = conn.getSystemIconTable().getIcon(currentSelection.text(0), "ALLNOTEBOOK");
+ }
+ 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();
+ if (stackSelected) {
+ conn.getSystemIconTable().setIcon(currentSelection.text(0), "STACK", newIcon, dialog.getFileType());
+ if (newIcon == null) {
+ newIcon = new QIcon(iconPath+"books2.png");
+ }
+ currentSelection.setIcon(0,newIcon);
+ return;
+ }
+ if (allNotebookSelected) {
+ conn.getSystemIconTable().setIcon(currentSelection.text(0), "ALLNOTEBOOK", newIcon, dialog.getFileType());
+ if (newIcon == null) {
+ newIcon = new QIcon(iconPath+"notebook-green.png");
+ }
+ currentSelection.setIcon(0,newIcon);
+ return;
+ }
+ conn.getNotebookTable().setIcon(guid, newIcon, dialog.getFileType());
+ if (newIcon == null) {
+ boolean isPublished = false;;
+ boolean found = false;
+ for (int i=0; i<listManager.getNotebookIndex().size() && !found; i++) {
+ if (listManager.getNotebookIndex().get(i).getGuid().equals(guid)) {
+ isPublished = listManager.getNotebookIndex().get(i).isPublished();
+ found = true;
+ }
+ }
+ newIcon = notebookTree.findDefaultIcon(guid, currentSelection.text(1), listManager.getLocalNotebooks(), isPublished);
+ }
+ currentSelection.setIcon(0, newIcon);
+ }
-
+ }
//***************************************************************
newTag.setName(edit.getTag());
conn.getTagTable().addTag(newTag, true);
listManager.getTagIndex().add(newTag);
- reloadTagTree();
+ reloadTagTree(true);
logger.log(logger.HIGH, "Leaving NeverNote.addTag");
}
+ @SuppressWarnings("unused")
private void reloadTagTree() {
+ reloadTagTree(false);
+ }
+ private void reloadTagTree(boolean reload) {
logger.log(logger.HIGH, "Entering NeverNote.reloadTagTree");
- tagIndexUpdated(false);
+ tagIndexUpdated(reload);
boolean filter = false;
listManager.countTagResults(listManager.getNoteIndex());
if (notebookTree.selectedItems().size() > 0
// Setup the tree containing the user's tags
private void initializeTagTree() {
logger.log(logger.HIGH, "Entering NeverNote.initializeTagTree");
- tagTree.itemSelectionChanged.connect(this, "tagTreeSelection()");
+// tagTree.itemSelectionChanged.connect(this, "tagTreeSelection()");
+// tagTree.itemClicked.connect(this, "tagTreeSelection()");
+ tagTree.selectionSignal.connect(this, "tagTreeSelection()");
listManager.tagSignal.refreshTagTreeCounts.connect(tagTree, "updateCounts(List)");
logger.log(logger.HIGH, "Leaving NeverNote.initializeTagTree");
}
if (selections.size() > 0) {
menuBar.tagEditAction.setEnabled(true);
menuBar.tagDeleteAction.setEnabled(true);
+ menuBar.tagIconAction.setEnabled(true);
}
else {
menuBar.tagEditAction.setEnabled(false);
menuBar.tagDeleteAction.setEnabled(false);
+ menuBar.tagIconAction.setEnabled(true);
}
listManager.setSelectedTags(selectedTagGUIDs);
listManager.loadNotesIndex();
logger.log(logger.HIGH, "Entering NeverNote.tagIndexUpdated");
if (selectedTagGUIDs == null)
selectedTagGUIDs = new ArrayList<String>();
-// selectedTagGUIDs.clear(); // clear out old entries
+ if (reload)
+ listManager.reloadTagIndex();
tagTree.blockSignals(true);
- if (reload)
+ if (reload) {
+ tagTree.setIcons(conn.getTagTable().getAllIcons());
tagTree.load(listManager.getTagIndex());
+ }
for (int i=selectedTagGUIDs.size()-1; i>=0; i--) {
boolean found = tagTree.selectGuid(selectedTagGUIDs.get(i));
if (!found)
menuBar.noteRestoreAction.setVisible(false);
menuBar.tagEditAction.setEnabled(false);
menuBar.tagDeleteAction.setEnabled(false);
+ menuBar.tagIconAction.setEnabled(false);
selectedTagGUIDs.clear();
listManager.setSelectedTags(selectedTagGUIDs);
tagTree.blockSignals(false);
}
+ // Change the icon for a tag
+ @SuppressWarnings("unused")
+ private void setTagIcon() {
+ QTreeWidgetItem currentSelection;
+ List<QTreeWidgetItem> selections = tagTree.selectedItems();
+ if (selections.size() == 0)
+ return;
+
+ currentSelection = selections.get(0);
+ String guid = currentSelection.text(2);
+
+ QIcon currentIcon = currentSelection.icon(0);
+ QIcon icon = conn.getTagTable().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.getTagTable().setIcon(guid, newIcon, dialog.getFileType());
+ if (newIcon == null)
+ newIcon = new QIcon(iconPath+"tag.png");
+ currentSelection.setIcon(0, newIcon);
+ }
+ }
+
//***************************************************************
//***************************************************************
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
+ @SuppressWarnings("unused")
+ 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);
+ }
+
+ }
status.setUnindexed(unindexed);
status.setNoteCount(conn.getNoteTable().getNoteCount());
status.setNotebookCount(listManager.getNotebookIndex().size());
+ status.setUnindexedResourceCount(conn.getNoteTable().noteResourceTable.getUnindexedCount());
status.setSavedSearchCount(listManager.getSavedSearchIndex().size());
status.setTagCount(listManager.getTagIndex().size());
status.setResourceCount(conn.getNoteTable().noteResourceTable.getResourceCount());
//***************************************************************
// Text in the search bar has been cleared
private void searchFieldCleared() {
+ saveNote();
+
+ // This is done because we want to force a reload of
+ // images. Some images we may want to highlight the text.
+ readOnlyCache.clear();
+ inkNoteCache.clear();
+ noteCache.clear();
+ QWebSettings.setMaximumPagesInCache(0);
+ QWebSettings.setObjectCacheCapacities(0, 0, 0);
+
searchField.setEditText("");
saveNoteColumnPositions();
saveNoteIndexWidth();
+ noteIndexUpdated(true);
+ if (currentNote == null && listManager.getNoteIndex().size() > 0) {
+ currentNote = listManager.getNoteIndex().get(0);
+ currentNoteGuid = currentNote.getGuid();
+ }
+ if (currentNote != null)
+ loadNoteBrowserInformation(browserWindow);
}
// text in the search bar changed. We only use this to tell if it was cleared,
// otherwise we trigger off searchFieldChanged.
if (text.trim().equals("")) {
searchFieldCleared();
if (searchPerformed) {
+
+ // This is done because we want to force a reload of
+ // images. Some images we may want to highlight the text.
noteCache.clear();
+ readOnlyCache.clear();
+ inkNoteCache.clear();
+ QWebSettings.setMaximumPagesInCache(0);
+ QWebSettings.setObjectCacheCapacities(0, 0, 0);
+
listManager.setEnSearch("");
-///// listManager.clearNoteIndexSearch();
- //noteIndexUpdated(true);
listManager.loadNotesIndex();
refreshEvernoteNote(true);
noteIndexUpdated(false);
private void searchFieldChanged() {
logger.log(logger.HIGH, "Entering NeverNote.searchFieldChanged");
noteCache.clear();
+ readOnlyCache.clear();
+ inkNoteCache.clear();
saveNoteColumnPositions();
saveNoteIndexWidth();
String text = searchField.currentText();
@SuppressWarnings("unused")
private void updateSyncButton() {
- /* synchronizeFrame++;
- if (synchronizeFrame == 4)
- synchronizeFrame = 0;
- synchronizeButton.setIcon(synchronizeAnimation.get(synchronizeFrame));
- */
-/*
- QPixmap pix = new QPixmap(iconPath+"synchronize.png");
- QMatrix matrix = new QMatrix();
- synchronizeIconAngle = synchronizeIconAngle + 1.0;
- if (synchronizeIconAngle >= 365.0)
- synchronizeIconAngle = 0.0;
- matrix.translate(pix.size().width()/2, pix.size().height()/2);
- matrix.rotate( synchronizeIconAngle );
- matrix.translate(-pix.size().width()/2, -pix.size().height()/2);
- pix = pix.transformed(matrix, TransformationMode.SmoothTransformation);
- synchronizeButton.setIcon(pix);
-*/
-
-
- QPixmap pix = new QPixmap(iconPath+"synchronize.png");
- QPixmap rotatedPix = new QPixmap(pix.size());
- QPainter p = new QPainter(rotatedPix);
-
- rotatedPix.fill(toolBar.palette().color(ColorRole.Button));
- QSize size = pix.size();
- p.translate(size.width()/2, size.height()/2);
- synchronizeIconAngle = synchronizeIconAngle+1.0;
- if (synchronizeIconAngle >= 359.0)
- synchronizeIconAngle = 0.0;
- p.rotate(synchronizeIconAngle);
- p.setBackgroundMode(BGMode.OpaqueMode);
- p.translate(-size.width()/2, -size.height()/2);
- p.drawPixmap(0,0, pix);
- p.end();
- synchronizeButton.setIcon(rotatedPix);
+
+ if (syncIcons == null) {
+ syncIcons = new ArrayList<QPixmap>();
+ double angle = 0.0;
+ synchronizeIconAngle = 0;
+ QPixmap pix = new QPixmap(iconPath+"synchronize.png");
+ syncIcons.add(pix);
+ for (int i=0; i<=360; i++) {
+ QPixmap rotatedPix = new QPixmap(pix.size());
+ QPainter p = new QPainter(rotatedPix);
+ rotatedPix.fill(toolBar.palette().color(ColorRole.Button));
+ QSize size = pix.size();
+ p.translate(size.width()/2, size.height()/2);
+ angle = angle+1.0;
+ p.rotate(angle);
+ p.setBackgroundMode(BGMode.OpaqueMode);
+ p.translate(-size.width()/2, -size.height()/2);
+ p.drawPixmap(0,0, pix);
+ p.end();
+ syncIcons.add(rotatedPix);
+ }
+ }
+
+ synchronizeIconAngle++;
+ if (synchronizeIconAngle > 359)
+ synchronizeIconAngle=0;
+ synchronizeButton.setIcon(syncIcons.get(synchronizeIconAngle));
}
// Synchronize with Evernote
if (!Global.isConnected)
remoteConnect();
if (Global.isConnected)
- synchronizeAnimationTimer.start(10);
+ synchronizeAnimationTimer.start(5);
// synchronizeAnimationTimer.start(200);
syncTimer();
logger.log(logger.HIGH, "Leaving NeverNote.evernoteSync");
@SuppressWarnings("unused")
private void attributeTreeClicked(QTreeWidgetItem item, Integer integer) {
- clearTagFilter();
- clearNotebookFilter();
+// clearTagFilter();
+// clearNotebookFilter();
clearTrashFilter();
- clearSavedSearchFilter();
+// clearSavedSearchFilter();
if (attributeTreeSelected == null || item.nativeId() != attributeTreeSelected.nativeId()) {
if (item.childCount() > 0) {
refreshEvernoteNote(true);
} else {
//we can reload if note not dirty
- refreshEvernoteNote(!noteDirty);
+// refreshEvernoteNote(!noteDirty);
+ refreshEvernoteNote(false);
}
- reloadTagTree();
+ reloadTagTree(false);
logger.log(logger.HIGH, "Leaving NeverNote.refreshEvernoteNoteList");
}
}
logger.log(logger.HIGH, "Leaving NeverNote.updateListAuthor");
}
+ @SuppressWarnings("unused")
private void updateListGuid(String oldGuid, String newGuid) {
logger.log(logger.HIGH, "Entering NeverNote.updateListTitle");
}
logger.log(logger.HIGH, "Leaving NeverNote.updateListDateCreated");
}
- @SuppressWarnings("unused")
private void updateListDateChanged(String guid, QDateTime date) {
logger.log(logger.HIGH, "Entering NeverNote.updateListDateChanged");
logger.log(logger.HIGH, "Leaving NeverNote.updateListDateChanged");
}
// Redo scroll
- @SuppressWarnings("unused")
private void scrollToCurrentGuid() {
//scrollToGuid(currentNoteGuid);
List<QModelIndex> selections = noteTableView.selectionModel().selectedRows();
saveNoteColumnPositions();
saveNoteIndexWidth();
saveWindowState();
- Global.setListView(Global.View_List_Narrow);
+ int sortCol = noteTableView.proxyModel.sortColumn();
+ int sortOrder = noteTableView.proxyModel.sortOrder().value();
+ Global.setSortColumn(sortCol);
+ Global.setSortOrder(sortOrder);
+
+ Global.setListView(Global.View_List_Narrow);
menuBar.wideListView.blockSignals(true);
menuBar.narrowListView.blockSignals(true);
noteTableView.repositionColumns();
noteTableView.resizeColumnWidths();
noteTableView.resizeRowHeights();
+
+ sortCol = Global.getSortColumn();
+ sortOrder = Global.getSortOrder();
+ noteTableView.sortByColumn(sortCol, SortOrder.resolve(sortOrder));
+
showColumns();
noteTableView.load(false);
scrollToCurrentGuid();
}
public void wideListView() {
- saveWindowState();
+ int sortCol = noteTableView.proxyModel.sortColumn();
+ int sortOrder = noteTableView.proxyModel.sortOrder().value();
+ Global.setSortColumn(sortCol);
+ Global.setSortOrder(sortOrder);
+
+ saveWindowState();
saveNoteColumnPositions();
saveNoteIndexWidth();
Global.setListView(Global.View_List_Wide);
noteTableView.repositionColumns();
noteTableView.resizeColumnWidths();
noteTableView.resizeRowHeights();
+
+ sortCol = Global.getSortColumn();
+ sortOrder = Global.getSortOrder();
+ noteTableView.sortByColumn(sortCol, SortOrder.resolve(sortOrder));
+
showColumns();
noteTableView.load(false);
scrollToCurrentGuid();
//** External editor window functions
//***************************************************************
//***************************************************************
- @SuppressWarnings("unused")
private void listDoubleClick() {
saveNote();
if (externalWindows.containsKey(currentNoteGuid)) {
externalWindows.get(currentNoteGuid).raise();
return;
}
-
// We have a new external editor to create
QIcon appIcon = new QIcon(iconPath+"nevernote.png");
ExternalBrowse newBrowser = new ExternalBrowse(conn);
browserWindow.setTitle(text);
}
}
- @SuppressWarnings("unused")
+ @SuppressWarnings({ "rawtypes", "unused" })
private void externalWindowTagsEdited(String guid, List values) {
StringBuffer line = new StringBuffer(100);
for (int i=0; i<values.size(); i++) {
browserWindow.getBrowser().setContent(unicode);
}
if (save) {
+ thumbnailRunner.addWork("GENERATE "+ guid);
saveNote(guid, browser);
}
private void saveNote() {
if (noteDirty) {
saveNote(currentNoteGuid, browserWindow);
+ thumbnailRunner.addWork("GENERATE "+ currentNoteGuid);
noteDirty = false;
}
}
// Get a note from Evernote (and put it in the browser)
private void refreshEvernoteNote(boolean reload) {
logger.log(logger.HIGH, "Entering NeverNote.refreshEvernoteNote");
+
if (Global.disableViewing) {
browserWindow.setEnabled(false);
return;
}
inkNote = false;
- if (!Global.showDeleted)
- browserWindow.setReadOnly(false);
+ readOnly = false;
+ if (Global.showDeleted)
+ readOnly = true;
Global.cryptCounter =0;
if (currentNoteGuid.equals("")) {
browserWindow.setReadOnly(true);
loadNoteBrowserInformation(browserWindow);
}
+
private void loadNoteBrowserInformation(BrowserWindow browser) {
- NoteFormatter formatter = new NoteFormatter(logger, conn, tempFiles);
+ NoteFormatter formatter = new NoteFormatter(logger, conn, tempFiles);
formatter.setNote(currentNote, Global.pdfPreview());
formatter.setHighlight(listManager.getEnSearch());
QByteArray js;
js.replace("<?xml version='1.0' encoding='UTF-8'?>", "");
browser.getBrowser().setContent(js);
noteCache.put(currentNoteGuid, js.toString());
+
+ if (formatter.resourceError)
+ resourceErrorMessage();
+ readOnly = formatter.readOnly;
+ inkNote = formatter.inkNote;
+ if (readOnly)
+ readOnlyCache.put(currentNoteGuid, true);
+ if (inkNote)
+ inkNoteCache.put(currentNoteGuid, true);
} else {
logger.log(logger.HIGH, "Note content is being pulled from the cache");
String cachedContent = formatter.modifyCachedTodoTags(noteCache.get(currentNoteGuid));
js = new QByteArray(cachedContent);
browser.getBrowser().setContent(js);
+ if (readOnlyCache.containsKey(currentNoteGuid))
+ readOnly = true;
+ if (inkNoteCache.containsKey(currentNoteGuid))
+ inkNote = true;
}
if (conn.getNoteTable().isThumbnailNeeded(currentNoteGuid)) {
thumbnailHTMLReady(currentNoteGuid, js, Global.calculateThumbnailZoom(js.toString()));
}
- if (formatter.resourceError)
- resourceErrorMessage();
- inkNote = formatter.readOnly;
-
- browser.getBrowser().page().setContentEditable(!inkNote); // We don't allow editing of ink notes
+ if (readOnly || inkNote)
+ browser.getBrowser().page().setContentEditable(false); // We don't allow editing of ink notes
+ else
+ browser.getBrowser().page().setContentEditable(true);
+ browser.setReadOnly(readOnly);
+ deleteButton.setEnabled(!readOnly);
+ tagButton.setEnabled(!readOnly);
+ menuBar.noteDelete.setEnabled(!readOnly);
+ menuBar.noteTags.setEnabled(!readOnly);
browser.setNote(currentNote);
+ if (conn.getNotebookTable().isLinked(currentNote.getNotebookGuid())) {
+ deleteButton.setEnabled(false);
+ menuBar.notebookDeleteAction.setEnabled(false);
+ } else {
+ deleteButton.setEnabled(true);
+ menuBar.notebookDeleteAction.setEnabled(true);
+ }
+
// Build a list of non-closed notebooks
List<Notebook> nbooks = new ArrayList<Notebook>();
for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
nbooks.add(listManager.getNotebookIndex().get(i));
}
- browser.setNotebookList(nbooks);
+// browser.setNotebookList(nbooks);
+
+ FilterEditorNotebooks notebookFilter = new FilterEditorNotebooks(conn, logger);
+ browserWindow.setNotebookList(notebookFilter.getValidNotebooks(currentNote, listManager.getNotebookIndex()));
+
browser.setTitle(currentNote.getTitle());
browser.setTag(getTagNamesForNote(currentNote));
browser.setAuthor(currentNote.getAttributes().getAuthor());
else
browser.setSubjectDate(currentNote.getCreated());
browser.setUrl(currentNote.getAttributes().getSourceURL());
- browser.setAllTags(listManager.getTagIndex());
+
+// browser.setAllTags(listManager.getTagIndex());
+ FilterEditorTags tagFilter = new FilterEditorTags(conn, logger);
+ List<Tag> tagList = tagFilter.getValidTags(currentNote);
+ browser.setAllTags(tagList);
+
browser.setCurrentTags(currentNote.getTagNames());
noteDirty = false;
scrollToGuid(currentNoteGuid);
@SuppressWarnings("unused")
private void fullReindex() {
logger.log(logger.HIGH, "Entering NeverNote.fullReindex");
- // If we are deleting non-trash notes
- if (currentNote == null) return;
- if (currentNote.getDeleted() == 0) {
- if (QMessageBox.question(this, tr("Confirmation"), tr("This will cause all notes & attachments to be reindexed, "+
- "but please be aware that depending upon the size of your database updating all these records " +
- "can be time consuming and NeverNote will be unresponsive until it is complete. Do you wish to continue?"),
- QMessageBox.StandardButton.Yes,
- QMessageBox.StandardButton.No)==StandardButton.No.value() && Global.verifyDelete() == true) {
- return;
- }
- }
- waitCursor(true);
- setMessage(tr("Marking notes for reindex."));
- conn.getNoteTable().reindexAllNotes();
- conn.getNoteTable().noteResourceTable.reindexAll();
+ indexRunner.addWork("REINDEXALL");
setMessage(tr("Database will be reindexed."));
- waitCursor(false);
- logger.log(logger.HIGH, "Leaving NeverNote.fullRefresh");
+ logger.log(logger.HIGH, "Leaving NeverNote.fullReindex");
}
// Listener when a user wants to reindex a specific note
@SuppressWarnings("unused")
private void reindexNote() {
logger.log(logger.HIGH, "Entering NeverNote.reindexNote");
for (int i=0; i<selectedNoteGUIDs.size(); i++) {
- conn.getNoteTable().setIndexNeeded(selectedNoteGUIDs.get(i), true);
+ indexRunner.addWork("REINDEXNOTE "+selectedNoteGUIDs.get(i));
}
if (selectedNotebookGUIDs.size() > 1)
setMessage(tr("Notes will be reindexed."));
listManager.countNotebookResults(listManager.getNoteIndex());
browserWindow.titleLabel.setFocus();
browserWindow.titleLabel.selectAll();
-// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
+// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
+
+ // If the window is hidden, then we want to popup this in an external window &
+ if (!isVisible())
+ listDoubleClick();
logger.log(logger.HIGH, "Leaving NeverNote.addNote");
}
// Restore a note from the trash;
browserWindow.getBrowser().page().findText(find.getText(), find.getFlags());
find.setFocus();
}
- private void updateNoteTitle(String guid, String title) {
+ @SuppressWarnings("unused")
+ private void updateNoteTitle(String guid, String title) {
listManager.setNoteSynchronized(guid, false);
}
// Signal received that note content has changed. Normally we just need the guid to remove
@SuppressWarnings("unused")
private void invalidateNoteCache(String guid, String content) {
String v = noteCache.remove(guid);
- if (content != null) {
- //noteCache.put(guid, content);
- }
+// if (guid.equals(currentNoteGuid) && !noteDirty)
+ refreshEvernoteNote(true);
}
// Signal received that a note guid has changed
@SuppressWarnings("unused")
private void noteGuidChanged(String oldGuid, String newGuid) {
if (noteCache.containsKey(oldGuid)) {
- String cache = noteCache.get(oldGuid);
- noteCache.put(newGuid, cache);
- noteCache.remove(oldGuid);
+ if (!oldGuid.equals(currentNoteGuid)) {
+ String cache = noteCache.get(oldGuid);
+ noteCache.put(newGuid, cache);
+ noteCache.remove(oldGuid);
+ } else {
+ noteCache.remove(oldGuid);
+ noteCache.put(newGuid, browserWindow.getContent());
+ }
}
+
listManager.updateNoteGuid(oldGuid, newGuid, false);
if (currentNoteGuid.equals(oldGuid)) {
if (currentNote != null)
currentNote.setGuid(newGuid);
currentNoteGuid = newGuid;
}
- if (externalWindows.containsKey(oldGuid)) {
+
+ if (externalWindows.containsKey(oldGuid)) {
ExternalBrowse b = externalWindows.get(oldGuid);
externalWindows.remove(oldGuid);
b.getBrowserWindow().getNote().setGuid(newGuid);
externalWindows.put(newGuid, b);
}
+
for (int i=0; i<listManager.getNoteIndex().size(); i++) {
if (listManager.getNoteIndex().get(i).getGuid().equals(newGuid)) {
noteTableView.proxyModel.addGuid(newGuid);
i=listManager.getNoteIndex().size();
}
}
+
if (listManager.getNoteTableModel().titleColors.containsKey(oldGuid)) {
int color = listManager.getNoteTableModel().titleColors.get(oldGuid);
listManager.getNoteTableModel().titleColors.put(newGuid, color);
waitCursor(false);
}
// View all notes
+ @SuppressWarnings("unused")
private void allNotes() {
clearAttributeFilter();
clearNotebookFilter();
}
}
private void thumbnailHTMLReady(String guid, QByteArray html, Integer zoom) {
-
logger.log(logger.HIGH, "Entering thumnailHTMLReady()");
logger.log(logger.HIGH, "Thumbnail ready for " +guid);
// Find an idle preview object
syncRunner.syncDeletedContent = Global.synchronizeDeletedContent();
if (syncThreadsReady > 0) {
+ indexRunner.interrupt = true;
saveNoteIndexWidth();
saveNoteColumnPositions();
if (syncRunner.addWork("SYNC")) {
logger.log(logger.EXTREME, "Index timer activated. Sync running="+syncRunning);
if (syncRunning)
return;
- // Look for any unindexed notes. We only refresh occasionally
- // and do one at a time to keep overhead down.
- if (!indexDisabled && indexRunner.getWorkQueueSize() == 0) {
- List<String> notes = conn.getNoteTable().getNextUnindexed(1);
- String unindexedNote = null;
- if (notes.size() > 0)
- unindexedNote = notes.get(0);
- if (unindexedNote != null && Global.keepRunning) {
- indexNoteContent(unindexedNote);
- }
- if (notes.size()>0) {
- indexTimer.setInterval(100);
- return;
- }
- List<String> unindexedResources = conn.getNoteTable().noteResourceTable.getNextUnindexed(1);
- if (unindexedResources.size() > 0 && indexRunner.getWorkQueueSize() == 0) {
- String unindexedResource = unindexedResources.get(0);
- if (unindexedResource != null && Global.keepRunning) {
- indexNoteResource(unindexedResource);
- }
- }
- if (unindexedResources.size() > 0) {
- indexTimer.setInterval(100);
- return;
- } else {
- indexTimer.setInterval(indexTime);
- }
- if (indexRunning) {
- setMessage(tr("Index completed."));
- logger.log(logger.LOW, "Indexing has completed.");
- indexRunning = false;
- indexTimer.setInterval(indexTime);
- }
+ if (!indexDisabled && indexRunner.idle) {
+ indexRunner.addWork("SCAN");
}
logger.log(logger.EXTREME, "Leaving neverNote index timer");
}
- private synchronized void indexNoteContent(String unindexedNote) {
- logger.log(logger.EXTREME, "Entering NeverNote.indexNoteContent()");
- logger.log(logger.MEDIUM, "Unindexed Note found: "+unindexedNote);
- indexRunner.setIndexType(indexRunner.CONTENT);
- indexRunner.addWork("CONTENT "+unindexedNote);
- if (!indexRunning) {
- setMessage(tr("Indexing notes."));
- logger.log(logger.LOW, "Beginning to index note contents.");
- indexRunning = true;
- }
- logger.log(logger.EXTREME, "Leaving NeverNote.indexNoteContent()");
- }
- private synchronized void indexNoteResource(String unindexedResource) {
- logger.log(logger.EXTREME, "Leaving NeverNote.indexNoteResource()");
- indexRunner.addWork(new String("RESOURCE "+unindexedResource));
- if (!indexRunning) {
- setMessage(tr("Indexing notes."));
- indexRunning = true;
- }
- logger.log(logger.EXTREME, "Leaving NeverNote.indexNoteResource()");
+
+ @SuppressWarnings("unused")
+ private void indexStarted() {
+ setMessage(tr("Indexing notes"));
}
@SuppressWarnings("unused")
- private void indexThreadComplete(String guid) {
- logger.log(logger.MEDIUM, "Index complete for "+guid);
+ private void indexComplete() {
+ setMessage(tr("Index complete"));
}
@SuppressWarnings("unused")
private synchronized void toggleNoteIndexing() {
}
private void thumbnailTimer() {
- if (Global.enableThumbnails())
+ if (Global.enableThumbnails() && conn.getNoteTable().getThumbnailNeededCount() > 1) {
+ thumbnailTimer.setInterval(10*1000);
thumbnailRunner.addWork("SCAN");
+ } else {
+ thumbnailTimer.setInterval(60*1000);
+ }
}
//**************************************************