import com.trolltech.qt.gui.QCloseEvent;
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 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;
import cx.fbn.nevernote.gui.MainMenuBar;
import cx.fbn.nevernote.gui.NotebookTreeWidget;
import cx.fbn.nevernote.gui.SavedSearchTreeWidget;
+import cx.fbn.nevernote.gui.SearchPanel;
import cx.fbn.nevernote.gui.TableView;
import cx.fbn.nevernote.gui.TagTreeWidget;
import cx.fbn.nevernote.gui.Thumbnailer;
QSpinBox zoomSpinner; // Zoom zoom
QAction searchClearButton; // Clear the search field
+ SearchPanel searchLayout; // Widget to hold search field, zoom, & quota
+
QSplitter mainLeftRightSplitter; // main splitter for left/right side
QSplitter leftSplitter1; // first left hand splitter
QSplitter browserIndexSplitter; // splitter between note index & note text
private static Logger log = Logger.getLogger(NeverNote.class);
private String saveLastPath; // last path we used
private final QTimer messageTimer; // Timer to clear the status message.
+ private long blockTime; // When the app. is blocked, this is the time to unblock it.
String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
QMessageBox.critical(null, tr("Database Connection Error") ,msg);
System.exit(16);
}
-
+ setObjectName("mainWindow");
// thread().setPriority(Thread.MAX_PRIORITY);
logger = new ApplicationLogger("nevernote.log");
trashTree = new TrashTreeWidget();
noteTableView = new TableView(logger, listManager);
+
+ searchField = new QComboBox();
+ searchField.setObjectName("searchField");
+ //setStyleSheet("QComboBox#searchField { background-color: yellow }");
+ searchField.setEditable(true);
+ searchField.activatedIndex.connect(this, "searchFieldChanged()");
+ searchField.setDuplicatesEnabled(false);
+ searchField.editTextChanged.connect(this,"searchFieldTextChanged(String)");
+ searchShortcut = new QShortcut(this);
+ setupShortcut(searchShortcut, "Focus_Search");
+ searchShortcut.activated.connect(this, "focusSearch()");
+
+ quotaBar = new QuotaProgressBar();
+ // Setup the zoom
+ zoomSpinner = new QSpinBox();
+ zoomSpinner.setMinimum(10);
+ zoomSpinner.setMaximum(1000);
+ zoomSpinner.setAccelerated(true);
+ zoomSpinner.setSingleStep(10);
+ zoomSpinner.setValue(100);
+ zoomSpinner.valueChanged.connect(this, "zoomChanged()");
+
+ searchLayout = new SearchPanel(searchField, quotaBar, notebookTree, zoomSpinner);
+
+
QGridLayout leftGrid = new QGridLayout();
+ leftSplitter1.setContentsMargins(5, 0, 0, 7);
leftSplitter1.setLayout(leftGrid);
- leftGrid.addWidget(notebookTree, 1, 1);
+ leftGrid.addWidget(searchLayout,1,1);
leftGrid.addWidget(tagTree,2,1);
leftGrid.addWidget(attributeTree,3,1);
leftGrid.addWidget(savedSearchTree,4,1);
- leftGrid.addWidget(trashTree, 5, 1);
+ leftGrid.addWidget(trashTree,5, 1);
// Setup the browser window
noteCache = new HashMap<String,String>();
mainLeftRightSplitter.addWidget(noteTableView);
mainLeftRightSplitter.addWidget(browserWindow);
}
-
- searchField = new QComboBox();
- searchField.setEditable(true);
- searchField.activatedIndex.connect(this, "searchFieldChanged()");
- searchField.setDuplicatesEnabled(false);
- searchField.editTextChanged.connect(this,"searchFieldTextChanged(String)");
- searchShortcut = new QShortcut(this);
- setupShortcut(searchShortcut, "Focus_Search");
- searchShortcut.activated.connect(this, "focusSearch()");
-
- quotaBar = new QuotaProgressBar();
// Setup the thumbnail viewer
thumbnailViewer = new ThumbnailViewer();
emitLog = new ArrayList<String>();
tagTree.setDeleteAction(menuBar.tagDeleteAction);
+ tagTree.setMergeAction(menuBar.tagMergeAction);
tagTree.setEditAction(menuBar.tagEditAction);
tagTree.setAddAction(menuBar.tagAddAction);
tagTree.setIconAction(menuBar.tagIconAction);
tagTree.setVisible(Global.isWindowVisible("tagTree"));
+ leftSplitter1.setVisible(Global.isWindowVisible("leftPanel"));
tagTree.noteSignal.tagsAdded.connect(this, "tagsAdded(String, String)");
menuBar.hideTags.setChecked(Global.isWindowVisible("tagTree"));
listManager.tagSignal.listChanged.connect(this, "reloadTagTree()");
+
+ if (!Global.isWindowVisible("zoom")) {
+ searchLayout.hideZoom();
+ menuBar.hideZoom.setChecked(false);
+ }
notebookTree.setDeleteAction(menuBar.notebookDeleteAction);
notebookTree.setEditAction(menuBar.notebookEditAction);
noteTableView.setNoteHistoryAction(menuBar.noteOnlineHistoryAction);
noteTableView.noteSignal.titleColorChanged.connect(this, "titleColorChanged(Integer)");
noteTableView.setMergeNotesAction(menuBar.noteMergeAction);
- noteTableView.rowChanged.connect(this, "scrollToGuid(String)");
- noteTableView.resetViewport.connect(this, "scrollToCurrentGuid()");
noteTableView.doubleClicked.connect(this, "listDoubleClick()");
listManager.trashSignal.countChanged.connect(trashTree, "updateCounts(Integer)");
menuBar.hideLeftSide.setChecked(true);
if (Global.isWindowVisible("noteInformation"))
toggleNoteInformation();
+ quotaBar.setVisible(Global.isWindowVisible("quota"));
+ if (!quotaBar.isVisible())
+ menuBar.hideQuota.setChecked(false);
+ searchField.setVisible(Global.isWindowVisible("searchField"));
+ if (!searchField.isVisible())
+ menuBar.hideSearch.setChecked(false);
+
+ if (searchField.isHidden() && quotaBar.isHidden() && zoomSpinner.isHidden() && notebookTree.isHidden())
+ searchLayout.hide();
setMenuBar(menuBar);
setupToolBar();
setMessage(tr("Performing synchronization before closing."));
syncRunner.syncNeeded = true;
syncRunner.addWork("SYNC");
- syncRunner.addWork("STOP");
} else {
- syncRunner.addWork("STOP");
syncRunner.keepRunning = false;
}
+ syncRunner.addWork("STOP");
setMessage("Closing Program.");
threadMonitorTimer.stop();
e1.printStackTrace();
}
- syncRunner.addWork("STOP");
- if (!syncRunner.isIdle()) {
- //try {
- logger.log(logger.MEDIUM, "Waiting for syncThread to stop");
+ if (!syncRunner.thread().isAlive()) {
+ logger.log(logger.MEDIUM, "Waiting for syncThread to stop");
+ if (syncRunner.thread().isAlive()) {
System.out.println(tr("Synchronizing. Please be patient."));
- while (!syncRunner.isIdle());
- logger.log(logger.MEDIUM, "Sync thread has stopped");
- //} catch (InterruptedException e1) {
- // e1.printStackTrace();
- //}
+ for(;syncRunner.thread().isAlive();) {
+ try {
+ wait(10);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ logger.log(logger.MEDIUM, "Sync thread has stopped");
}
if (encryptOnShutdown) {
while (QApplication.overrideCursor() != null)
QApplication.restoreOverrideCursor();
}
+ listManager.refreshCounters();
}
private void setupIndexListeners() {
private void restoreWindowState(boolean mainWindow) {
// We need to name things or this doesn't work.
setObjectName("NeverNote");
+ restoreState(Global.restoreState(objectName()));
mainLeftRightSplitter.setObjectName("mainLeftRightSplitter");
browserIndexSplitter.setObjectName("browserIndexSplitter");
leftSplitter1.setObjectName("leftSplitter1");
Global.saveState(mainLeftRightSplitter.objectName(), mainLeftRightSplitter.saveState());
Global.saveState(browserIndexSplitter.objectName(), browserIndexSplitter.saveState());
Global.saveState(leftSplitter1.objectName(), leftSplitter1.saveState());
+ Global.saveState(objectName(), saveState());
}
// Load the style sheet
private void loadStyleSheet() {
+ String styleSheetName = "default.qss";
+ if (Global.getStyle().equalsIgnoreCase("cleanlooks"))
+ styleSheetName = "default-cleanlooks.qss";
String fileName = Global.getFileManager().getQssDirPathUser("default.qss");
- fileName = Global.getFileManager().getQssDirPath("default.qss");
QFile file = new QFile(fileName);
// If a user default.qss doesn't exist, we use the one shipped with NeverNote
if (!file.exists()) {
- fileName = Global.getFileManager().getQssDirPath("default.qss");
+ fileName = Global.getFileManager().getQssDirPath(styleSheetName);
file = new QFile(fileName);
}
file.open(OpenModeFlag.ReadOnly);
Global.setColumnWidth("noteTableGuidPosition", width);
}
+ @SuppressWarnings("unused")
+ private void toggleSearchWindow() {
+ logger.log(logger.HIGH, "Entering NeverNote.toggleSearchWindow");
+ searchLayout.toggleSearchField();
+ menuBar.hideSearch.setChecked(searchField.isVisible());
+ Global.saveWindowVisible("searchField", searchField.isVisible());
+ logger.log(logger.HIGH, "Leaving NeverNote.toggleSearchWindow");
+ }
+ @SuppressWarnings("unused")
+ private void toggleQuotaWindow() {
+ logger.log(logger.HIGH, "Entering NeverNote.toggleQuotaWindow");
+ searchLayout.toggleQuotaBar();
+ menuBar.hideQuota.setChecked(quotaBar.isVisible());
+ Global.saveWindowVisible("quota", quotaBar.isVisible());
+ logger.log(logger.HIGH, "Leaving NeverNote.toggleQuotaWindow");
+ }
+ @SuppressWarnings("unused")
+ private void toggleZoomWindow() {
+ logger.log(logger.HIGH, "Entering NeverNote.toggleZoomWindow");
+ searchLayout.toggleZoom();
+ menuBar.hideZoom.setChecked(zoomSpinner.isVisible());
+ Global.saveWindowVisible("zoom", zoomSpinner.isVisible());
+ logger.log(logger.HIGH, "Leaving NeverNote.toggleZoomWindow");
+ }
+
+
//***************************************************************
//***************************************************************
listManager.setSelectedNotebooks(selectedNotebookGUIDs);
listManager.loadNotesIndex();
noteIndexUpdated(false);
+ refreshEvernoteNote(true);
+ listManager.refreshCounters = true;
+ listManager.refreshCounters();
logger.log(logger.HIGH, "Leaving NeverNote.notebookTreeSelection");
}
if (!found)
selectedNotebookGUIDs.remove(i);
}
+ listManager.refreshCounters = true;
+ listManager.refreshCounters();
notebookTree.blockSignals(false);
logger.log(logger.HIGH, "Leaving NeverNote.notebookIndexUpdated");
}
// Show/Hide note information
+ @SuppressWarnings("unused")
private void toggleNotebookWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleNotebookWindow");
- if (notebookTree.isVisible())
- notebookTree.hide();
- else
- notebookTree.show();
+ searchLayout.toggleNotebook();
menuBar.hideNotebooks.setChecked(notebookTree.isVisible());
Global.saveWindowVisible("notebookTree", notebookTree.isVisible());
logger.log(logger.HIGH, "Leaving NeverNote.toggleNotebookWindow");
logger.log(logger.HIGH, "Inside NeverNote.addTag");
TagEdit edit = new TagEdit();
edit.setTagList(listManager.getTagIndex());
+
+ List<QTreeWidgetItem> selections = tagTree.selectedItems();
+ QTreeWidgetItem currentSelection = null;
+ if (selections.size() > 0) {
+ currentSelection = selections.get(0);
+ edit.setParentTag(currentSelection.text(0));
+ }
+
edit.exec();
if (!edit.okPressed())
newTag.setUpdateSequenceNum(0);
newTag.setGuid(randint);
newTag.setName(edit.getTag());
+ if (edit.getParentTag().isChecked()) {
+ newTag.setParentGuid(currentSelection.text(2));
+ newTag.setParentGuidIsSet(true);
+ currentSelection.setExpanded(true);
+ }
conn.getTagTable().addTag(newTag, true);
listManager.getTagIndex().add(newTag);
reloadTagTree(true);
logger.log(logger.HIGH, "Entering NeverNote.reloadTagTree");
tagIndexUpdated(reload);
boolean filter = false;
- listManager.countTagResults(listManager.getNoteIndex());
+ if (reload)
+ listManager.countTagResults(listManager.getNoteIndex());
if (notebookTree.selectedItems().size() > 0
&& !notebookTree.selectedItems().get(0).text(0).equalsIgnoreCase("All Notebooks"))
filter = true;
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);
+ refreshEvernoteNote(true);
+ listManager.refreshCounters = true;
+ listManager.refreshCounters();
logger.log(logger.HIGH, "Leaving NeverNote.tagTreeSelection");
}
// trigger the tag index to be refreshed
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)
logger.log(logger.HIGH, "Leaving NeverNote.tagIndexUpdated");
}
// Show/Hide note information
+ @SuppressWarnings("unused")
private void toggleTagWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleTagWindow");
if (tagTree.isVisible())
tagTree.clearSelection();
menuBar.noteRestoreAction.setVisible(false);
menuBar.tagEditAction.setEnabled(false);
+ menuBar.tagMergeAction.setEnabled(false);
menuBar.tagDeleteAction.setEnabled(false);
menuBar.tagIconAction.setEnabled(false);
selectedTagGUIDs.clear();
}
}
+ // Merge tags
+ private void mergeTags() {
+ List<Tag> tags = new ArrayList<Tag>();
+ List<QTreeWidgetItem> selections = tagTree.selectedItems();
+ for (int i=0; i<selections.size(); i++) {
+ Tag record = new Tag();
+ record.setGuid(selections.get(i).text(2));
+ record.setName(selections.get(i).text(0));
+ tags.add(record);
+ }
+ TagMerge mergeDialog = new TagMerge(tags);
+ mergeDialog.exec();
+ if (!mergeDialog.okClicked())
+ return;
+ String newGuid = mergeDialog.getNewTagGuid();
+
+ for (int i=0; i<tags.size(); i++) {
+ if (!tags.get(i).getGuid().equals(newGuid)) {
+ List<String> noteGuids = conn.getNoteTable().noteTagsTable.getTagNotes(tags.get(i).getGuid());
+ for (int j=0; j<noteGuids.size(); j++) {
+ String noteGuid = noteGuids.get(j);
+ conn.getNoteTable().noteTagsTable.deleteNoteTag(noteGuid);
+ if (!conn.getNoteTable().noteTagsTable.checkNoteNoteTags(noteGuid, newGuid))
+ conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, newGuid);
+ }
+ }
+ }
+ listManager.reloadIndexes();
+ }
//***************************************************************
//***************************************************************
}
// Show/Hide note information
+ @SuppressWarnings("unused")
private void toggleSavedSearchWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleSavedSearchWindow");
if (savedSearchTree.isVisible())
+"JTidy is copyrighted under the World Wide Web Consortium<br>"
+"Apache Common Utilities licensed under the Apache License Version 2.0<br>"
+"Jazzy is licened under the LGPL<br>"
- +"Java is a registered trademark of Oracle Corporation.<br><hr>"));
+ +"Java is a registered trademark of Oracle Corporation.<br><hr>"
+ +"Special thanks to:<br>BitRock InstallBuilder for the Windows installer"
+ +"<br>CodeCogs (www.codecogs.com) for the LaTeX image rendering."));
logger.log(logger.HIGH, "Leaving NeverNote.about");
}
// Hide the entire left hand side
hidden = !menuBar.hideLeftSide.isChecked();
menuBar.hideLeftSide.setChecked(!hidden);
- if (notebookTree.isVisible() != hidden)
- toggleNotebookWindow();
- if (savedSearchTree.isVisible() != hidden)
- toggleSavedSearchWindow();
- if (tagTree.isVisible() != hidden)
- toggleTagWindow();
- if (attributeTree.isVisible() != hidden)
- toggleAttributesWindow();
- if (trashTree.isVisible() != hidden)
- toggleTrashWindow();
+ if (!hidden)
+ leftSplitter1.setHidden(true);
+ else
+ leftSplitter1.setHidden(false);
Global.saveWindowVisible("leftPanel", hidden);
currentNote = listManager.getNoteIndex().get(0);
currentNoteGuid = currentNote.getGuid();
}
+ refreshEvernoteNote(true);
if (currentNote != null)
loadNoteBrowserInformation(browserWindow);
}
listManager.loadNotesIndex();
refreshEvernoteNote(true);
noteIndexUpdated(false);
+ refreshEvernoteNote(true);
}
searchPerformed = false;
}
String text = searchField.currentText();
listManager.setEnSearch(text.trim());
listManager.loadNotesIndex();
-//--->>> noteIndexUpdated(true);
noteIndexUpdated(false);
refreshEvernoteNote(true);
searchPerformed = true;
private void setupToolBar() {
logger.log(logger.HIGH, "Entering NeverNote.setupToolBar");
toolBar = addToolBar(tr("Tool Bar"));
+ toolBar.setObjectName("toolBar");
menuBar.setupToolBarVisible();
if (!Global.isWindowVisible("toolBar"))
toolBar.setVisible(false);
else
toolBar.setVisible(true);
+// toolBar.addWidget(menuBar);
+// menuBar.setSizePolicy(Policy.Minimum, Policy.Minimum);
+// toolBar.addSeparator();
prevButton = toolBar.addAction("Previous");
QIcon prevIcon = new QIcon(iconPath+"back.png");
prevButton.setIcon(prevIcon);
allNotesButton.setIcon(allIcon);
toggleAllNotesButton(Global.isToolbarButtonVisible("allNotes"));
- toolBar.addSeparator();
- toolBar.addWidget(new QLabel(tr("Quota:")));
- toolBar.addWidget(quotaBar);
+ //toolBar.addSeparator();
+ //toolBar.addWidget(new QLabel(tr("Quota:")));
+ //toolBar.addWidget(quotaBar);
//quotaBar.setSizePolicy(Policy.Minimum, Policy.Minimum);
updateQuotaBar();
- toolBar.addSeparator();
+ //toolBar.addSeparator();
- // Setup the zoom
- zoomSpinner = new QSpinBox();
- zoomSpinner.setMinimum(10);
- zoomSpinner.setMaximum(1000);
- zoomSpinner.setAccelerated(true);
- zoomSpinner.setSingleStep(10);
- zoomSpinner.setValue(100);
- zoomSpinner.valueChanged.connect(this, "zoomChanged()");
- toolBar.addWidget(new QLabel(tr("Zoom")));
- toolBar.addWidget(zoomSpinner);
+ //toolBar.addWidget(new QLabel(tr("Zoom")));
+ //toolBar.addWidget(zoomSpinner);
//toolBar.addWidget(new QLabel(" "));
- toolBar.addSeparator();
- toolBar.addWidget(new QLabel(tr(" Search:")));
- toolBar.addWidget(searchField);
+ //toolBar.addSeparator();
+ //toolBar.addWidget(new QLabel(tr(" Search:")));
+ //toolBar.addWidget(searchField);
QSizePolicy sizePolicy = new QSizePolicy();
sizePolicy.setHorizontalPolicy(Policy.MinimumExpanding);
- searchField.setSizePolicy(sizePolicy);
- searchField.setInsertPolicy(InsertPolicy.InsertAtTop);
+ QLabel spacer = new QLabel("");
+ spacer.setSizePolicy(sizePolicy);
+ toolBar.addWidget(spacer);
+ //searchField.setInsertPolicy(InsertPolicy.InsertAtTop);
- searchClearButton = toolBar.addAction("Search Clear");
- QIcon searchClearIcon = new QIcon(iconPath+"searchclear.png");
- searchClearButton.setIcon(searchClearIcon);
- searchClearButton.triggered.connect(this, "searchFieldCleared()");
- toggleSearchClearButton(Global.isToolbarButtonVisible("searchClear"));
+ //searchClearButton = toolBar.addAction("Search Clear");
+ //QIcon searchClearIcon = new QIcon(iconPath+"searchclear.png");
+ //searchClearButton.setIcon(searchClearIcon);
+ //searchClearButton.triggered.connect(this, "searchFieldCleared()");
+ //toggleSearchClearButton(Global.isToolbarButtonVisible("searchClear"));
logger.log(logger.HIGH, "Leaving NeverNote.setupToolBar");
}
allNotesButton.setVisible(toggle);
Global.saveToolbarButtonsVisible("allNotes", toggle);
}
- private void toggleSearchClearButton(Boolean toggle) {
+ @SuppressWarnings("unused")
+ private void toggleSearchClearButton(Boolean toggle) {
searchClearButton.setVisible(toggle);
Global.saveToolbarButtonsVisible("searchClear", toggle);
}
menuBar.noteRestoreAction.setVisible(false);
listManager.loadNotesIndex();
-//--->>> noteIndexUpdated(true);
noteIndexUpdated(false);
}
}
// Show/Hide trash window
+ @SuppressWarnings("unused")
private void toggleTrashWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleTrashWindow");
if (trashTree.isVisible())
}
// Show/Hide attribute search window
+ @SuppressWarnings("unused")
private void toggleAttributesWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleAttributesWindow");
if (attributeTree.isVisible())
QModelIndex i = noteTableView.proxyModel.index(pos-1, Global.noteTableGuidPosition);
if (i!=null) {
currentNoteGuid = (String)i.data();
- noteTableView.selectRow(pos-1);
}
}
}
- showColumns();
- scrollToGuid(currentNoteGuid);
+ if (!noteTableView.isColumnHidden(Global.noteTableGuidPosition))
+ showColumns();
+ scrollToGuid(currentNoteGuid);
logger.log(logger.HIGH, "Leaving NeverNote.noteIndexUpdated");
}
// Called when the list of notes is updated
String guid = (String)index.model().index(row, Global.noteTableGuidPosition).data();
scrollToGuid(guid);
}
+ // Scroll to the current GUID in tthe list.
// Scroll to a particular index item
private void scrollToGuid(String guid) {
if (currentNote == null || guid == null)
}
}
}
-
if (!currentNote.isActive() && !Global.showDeleted) {
for (int i=0; i<listManager.getNoteIndex().size(); i++) {
if (listManager.getNoteIndex().get(i).isActive()) {
}
}
}
-
QModelIndex index;
for (int i=0; i<noteTableView.model().rowCount(); i++) {
index = noteTableView.model().index(i, Global.noteTableGuidPosition);
if (currentNoteGuid.equals(index.data())) {
-// noteTableView.setCurrentIndex(index);
+// noteTableView.selectionModel().blockSignals(true);
noteTableView.selectRow(i);
+// noteTableView.selectionModel().blockSignals(false);
noteTableView.scrollTo(index, ScrollHint.EnsureVisible); // This should work, but it doesn't
i=listManager.getNoteTableModel().rowCount();
}
showColumns();
noteTableView.load(false);
+ refreshEvernoteNote(true);
scrollToCurrentGuid();
}
public void wideListView() {
browserWindow.noteSignal.tagsChanged.connect(newBrowser, "updateTags(String, List)");
browserWindow.noteSignal.titleChanged.connect(newBrowser, "updateTitle(String, String)");
browserWindow.noteSignal.notebookChanged.connect(newBrowser, "updateNotebook(String, String)");
+ browserWindow.blockApplication.connect(this, "blockApplication(Long)");
+ browserWindow.unblockApplication.connect(this, "unblockApplication()");
newBrowser.show();
}
}
inkNote = false;
readOnly = false;
- if (Global.showDeleted)
+ if (Global.showDeleted || currentNoteGuid == null || currentNoteGuid.equals(""))
readOnly = true;
Global.cryptCounter =0;
- if (currentNoteGuid.equals("")) {
+ if (readOnly) {
browserWindow.setReadOnly(true);
return;
}
currentNote = conn.getNoteTable().getNote(currentNoteGuid, true,true,false,false,true);
if (currentNote == null)
return;
-
loadNoteBrowserInformation(browserWindow);
}
if (conn.getNoteTable().isThumbnailNeeded(currentNoteGuid)) {
thumbnailHTMLReady(currentNoteGuid, js, Global.calculateThumbnailZoom(js.toString()));
}
-
if (readOnly || inkNote)
browser.getBrowser().page().setContentEditable(false); // We don't allow editing of ink notes
else
browser.setTitle(currentNote.getTitle());
browser.setTag(getTagNamesForNote(currentNote));
browser.setAuthor(currentNote.getAttributes().getAuthor());
-
+
browser.setAltered(currentNote.getUpdated());
browser.setCreation(currentNote.getCreated());
if (currentNote.getAttributes().getSubjectDate() > 0)
return;
if (currentNoteGuid.equals(""))
return;
-
+ String title = null;
+ if (selectedNoteGUIDs.size() == 1)
+ title = conn.getNoteTable().getNote(selectedNoteGUIDs.get(0),false,false,false,false,false).getTitle();
+
// If we are deleting non-trash notes
if (currentNote.isActive()) {
if (Global.verifyDelete()) {
- if (QMessageBox.question(this, tr("Confirmation"), tr("Delete selected note(s)?"),
+ String msg;
+ if (selectedNoteGUIDs.size() > 1) {
+ msg = new String(tr("Delete ") +selectedNoteGUIDs.size() +" notes?");
+ } else {
+ if (title != null)
+ msg = new String(tr("Delete note \"") +title +"\"?");
+ else
+ msg = new String(tr("Delete note selected note?"));
+ }
+ if (QMessageBox.question(this, tr("Confirmation"), msg,
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.No)==StandardButton.No.value() && Global.verifyDelete() == true) {
return;
} else {
// If we are deleting from the trash.
if (Global.verifyDelete()) {
- if (QMessageBox.question(this, "Confirmation", "Permanently delete selected note(s)?",
+ String msg;
+ if (selectedNoteGUIDs.size() > 1) {
+ msg = new String(tr("Permanently delete ") +selectedNoteGUIDs.size() +" notes?");
+ } else {
+ if (title != null)
+ msg = new String(tr("Permanently delete note \"") +title +"\"?");
+ else
+ msg = new String(tr("Permanently delete note selected note?"));
+ }
+ if (QMessageBox.question(this, "Confirmation", msg,
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.No)==StandardButton.No.value()) {
return;
notebookTree.selectGuid("");
}
notebookTreeSelection();
+ refreshEvernoteNote(true);
}
// Merge notes
@SuppressWarnings("unused")
return true;
}
+
+ //*************************************************
+ // Block the program. This is used for things
+ // like async web calls.
+ //*************************************************
+ @SuppressWarnings("unused")
+ private void blockApplication(Long time) {
+ Calendar currentTime = new GregorianCalendar();
+ waitCursor(true);
+ blockTime = new Long(currentTime.getTimeInMillis())+time;
+
+ for (;currentTime.getTimeInMillis()>blockTime;) {
+ try {
+ wait(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ waitCursor(false);
+ }
+
+ }
+ @SuppressWarnings("unused")
+ private void unblockApplication() {
+ blockTime = -1;
+ }
}