OSDN Git Service

Added the ability to merge tags and corrected some shortcuts.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / NeverNote.java
index c541f33..d712f56 100644 (file)
@@ -154,6 +154,7 @@ import cx.fbn.nevernote.dialog.SetIcon;
 import cx.fbn.nevernote.dialog.ShareNotebook;
 import cx.fbn.nevernote.dialog.StackNotebook;
 import cx.fbn.nevernote.dialog.TagEdit;
+import cx.fbn.nevernote.dialog.TagMerge;
 import cx.fbn.nevernote.dialog.ThumbnailViewer;
 import cx.fbn.nevernote.dialog.UpgradeAvailableDialog;
 import cx.fbn.nevernote.dialog.WatchFolder;
@@ -331,6 +332,7 @@ public class NeverNote extends QMainWindow{
     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/");
@@ -353,7 +355,7 @@ public class NeverNote extends QMainWindow{
             QMessageBox.critical(null, tr("Database Connection Error") ,msg);
                        System.exit(16);
                }
-
+               setObjectName("mainWindow");
 //             thread().setPriority(Thread.MAX_PRIORITY);
                
                logger = new ApplicationLogger("nevernote.log");
@@ -565,6 +567,7 @@ public class NeverNote extends QMainWindow{
                emitLog = new ArrayList<String>();
                
                tagTree.setDeleteAction(menuBar.tagDeleteAction);
+               tagTree.setMergeAction(menuBar.tagMergeAction);
                tagTree.setEditAction(menuBar.tagEditAction);
                tagTree.setAddAction(menuBar.tagAddAction);
                tagTree.setIconAction(menuBar.tagIconAction);
@@ -1203,6 +1206,7 @@ public class NeverNote extends QMainWindow{
        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");   
@@ -1221,16 +1225,19 @@ public class NeverNote extends QMainWindow{
                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);
@@ -1293,6 +1300,7 @@ public class NeverNote extends QMainWindow{
                Global.setColumnWidth("noteTableGuidPosition", width);
        }
        
+       @SuppressWarnings("unused")
        private void toggleSearchWindow() {
                logger.log(logger.HIGH, "Entering NeverNote.toggleSearchWindow");
        searchLayout.toggleSearchField();
@@ -1300,6 +1308,7 @@ public class NeverNote extends QMainWindow{
        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();
@@ -1307,6 +1316,7 @@ public class NeverNote extends QMainWindow{
        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();
@@ -1383,6 +1393,7 @@ public class NeverNote extends QMainWindow{
        listManager.setSelectedNotebooks(selectedNotebookGUIDs);
        listManager.loadNotesIndex();
        noteIndexUpdated(false);
+       refreshEvernoteNote(true);
        listManager.refreshCounters = true;
        listManager.refreshCounters();
                logger.log(logger.HIGH, "Leaving NeverNote.notebookTreeSelection");
@@ -1434,6 +1445,7 @@ public class NeverNote extends QMainWindow{
                logger.log(logger.HIGH, "Leaving NeverNote.notebookIndexUpdated");
     }
     // Show/Hide note information
+       @SuppressWarnings("unused")
        private void toggleNotebookWindow() {
                logger.log(logger.HIGH, "Entering NeverNote.toggleNotebookWindow");
                searchLayout.toggleNotebook();
@@ -1936,6 +1948,14 @@ public class NeverNote extends QMainWindow{
                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())
@@ -1949,6 +1969,11 @@ public class NeverNote extends QMainWindow{
                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);
@@ -2084,9 +2109,14 @@ public class NeverNote extends QMainWindow{
                menuBar.tagDeleteAction.setEnabled(false);
                menuBar.tagIconAction.setEnabled(true);
        }
+       if (selections.size() > 1)
+               menuBar.tagMergeAction.setEnabled(true);
+       else
+               menuBar.tagMergeAction.setEnabled(false);
        listManager.setSelectedTags(selectedTagGUIDs);
        listManager.loadNotesIndex();
        noteIndexUpdated(false);
+       refreshEvernoteNote(true);
        listManager.refreshCounters = true;
        listManager.refreshCounters();
        logger.log(logger.HIGH, "Leaving NeverNote.tagTreeSelection");
@@ -2120,6 +2150,7 @@ public class NeverNote extends QMainWindow{
        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())
@@ -2228,6 +2259,7 @@ public class NeverNote extends QMainWindow{
                tagTree.clearSelection();
                menuBar.noteRestoreAction.setVisible(false);
                menuBar.tagEditAction.setEnabled(false);
+               menuBar.tagMergeAction.setEnabled(false);
                menuBar.tagDeleteAction.setEnabled(false);
                menuBar.tagIconAction.setEnabled(false);
                selectedTagGUIDs.clear();
@@ -2266,7 +2298,36 @@ public class NeverNote extends QMainWindow{
                }
        
        }
+       // 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();
+       }
        
     //***************************************************************
     //***************************************************************
@@ -2459,6 +2520,7 @@ public class NeverNote extends QMainWindow{
        
     }
     // Show/Hide note information
+       @SuppressWarnings("unused")
        private void toggleSavedSearchWindow() {
                logger.log(logger.HIGH, "Entering NeverNote.toggleSavedSearchWindow");
        if (savedSearchTree.isVisible())
@@ -2600,7 +2662,9 @@ public class NeverNote extends QMainWindow{
                                                                +"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
@@ -2720,6 +2784,7 @@ public class NeverNote extends QMainWindow{
                        currentNote = listManager.getNoteIndex().get(0);
                        currentNoteGuid = currentNote.getGuid();
                }
+               refreshEvernoteNote(true);
                if (currentNote != null)
                        loadNoteBrowserInformation(browserWindow);
        }
@@ -2744,6 +2809,7 @@ public class NeverNote extends QMainWindow{
                                listManager.loadNotesIndex();
                                refreshEvernoteNote(true);
                                noteIndexUpdated(false);
+                               refreshEvernoteNote(true);
                        }
                        searchPerformed = false;
                }
@@ -2769,6 +2835,7 @@ public class NeverNote extends QMainWindow{
     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);
@@ -3169,6 +3236,7 @@ public class NeverNote extends QMainWindow{
        }       
    }
     // Show/Hide trash window
+       @SuppressWarnings("unused")
        private void toggleTrashWindow() {
                logger.log(logger.HIGH, "Entering NeverNote.toggleTrashWindow");
        if (trashTree.isVisible())
@@ -3372,6 +3440,7 @@ public class NeverNote extends QMainWindow{
     }
 
     // Show/Hide attribute search window
+       @SuppressWarnings("unused")
        private void toggleAttributesWindow() {
                logger.log(logger.HIGH, "Entering NeverNote.toggleAttributesWindow");
        if (attributeTree.isVisible())
@@ -3965,6 +4034,7 @@ public class NeverNote extends QMainWindow{
                
        showColumns();
        noteTableView.load(false);
+       refreshEvernoteNote(true);
        scrollToCurrentGuid();
     }
     public void wideListView() {
@@ -4031,6 +4101,8 @@ public class NeverNote extends QMainWindow{
        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();
     }
@@ -4164,10 +4236,10 @@ public class NeverNote extends QMainWindow{
                }
                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;
                }
@@ -4778,6 +4850,7 @@ public class NeverNote extends QMainWindow{
                        notebookTree.selectGuid("");
                }
                notebookTreeSelection();
+               refreshEvernoteNote(true);
        }
        // Merge notes
        @SuppressWarnings("unused")
@@ -5303,7 +5376,6 @@ public class NeverNote extends QMainWindow{
        }
        public void refreshLists() {
                logger.log(logger.EXTREME, "Entering NeverNote.refreshLists");
-               System.out.println("<><><><><><><><><><><><><><><><><><><><>");
                updateQuotaBar();
                listManager.refreshLists(currentNote, noteDirty, browserWindow.getContent());
                tagIndexUpdated(true);
@@ -5995,4 +6067,29 @@ public class NeverNote extends QMainWindow{
                        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;
+       }
 }