OSDN Git Service

Altered note table list to use QAbstractTableModel instead of QStandardTableModel...
authorRandy Baumgarte <randy@fbn.cx>
Tue, 17 Aug 2010 18:29:07 +0000 (14:29 -0400)
committerRandy Baumgarte <randy@fbn.cx>
Sun, 22 Aug 2010 22:47:28 +0000 (18:47 -0400)
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/filters/NoteSortFilterProxyModel.java
src/cx/fbn/nevernote/gui/NoteTableModel.java [new file with mode: 0644]
src/cx/fbn/nevernote/gui/TableView.java
src/cx/fbn/nevernote/utilities/ListManager.java

index 4114db8..1f3ca33 100644 (file)
@@ -338,7 +338,7 @@ public class NeverNote extends QMainWindow{
         QThreadPool.globalInstance().setMaxThreadCount(indexRunnerCount+5);    // increase max thread count
 
                logger.log(logger.EXTREME, "Building list manager");
-        listManager = new ListManager(conn, logger, Global.mainThreadId);
+        listManager = new ListManager(conn, logger);
         
                logger.log(logger.EXTREME, "Building index runners & timers");
         indexRunner = new IndexRunner("indexRunner.log", Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);
@@ -408,7 +408,7 @@ public class NeverNote extends QMainWindow{
         tagTree = new TagTreeWidget(conn);
         savedSearchTree = new SavedSearchTreeWidget();
         trashTree = new TrashTreeWidget();
-        noteTableView = new TableView(logger);
+        noteTableView = new TableView(logger, listManager);
         
         QGridLayout leftGrid = new QGridLayout();
         leftSplitter1.setLayout(leftGrid);
@@ -825,23 +825,16 @@ public class NeverNote extends QMainWindow{
                browserWindow.noteSignal.noteChanged.connect(this, "invalidateNoteCache(String, String)");
            browserWindow.noteSignal.noteChanged.connect(this, "setNoteDirty()");
            browserWindow.noteSignal.titleChanged.connect(listManager, "updateNoteTitle(String, String)");
-           browserWindow.noteSignal.titleChanged.connect(this, "updateListTitle(String, String)");
-           browserWindow.noteSignal.notebookChanged.connect(this, "updateNoteNotebook(String, String)");
+//         browserWindow.noteSignal.notebookChanged.connect(this, "updateNoteNotebook(String, String)");
            browserWindow.noteSignal.createdDateChanged.connect(listManager, "updateNoteCreatedDate(String, QDateTime)");
-           browserWindow.noteSignal.createdDateChanged.connect(this, "updateListDateCreated(String, QDateTime)");
            browserWindow.noteSignal.alteredDateChanged.connect(listManager, "updateNoteAlteredDate(String, QDateTime)");
-           browserWindow.noteSignal.alteredDateChanged.connect(this, "updateListDateChanged(String, QDateTime)");
            browserWindow.noteSignal.subjectDateChanged.connect(listManager, "updateNoteSubjectDate(String, QDateTime)");
-           browserWindow.noteSignal.subjectDateChanged.connect(this, "updateListDateSubject(String, QDateTime)");
            browserWindow.noteSignal.authorChanged.connect(listManager, "updateNoteAuthor(String, String)");
            browserWindow.noteSignal.geoChanged.connect(listManager, "updateNoteGeoTag(String, Double,Double,Double)");
-           browserWindow.noteSignal.authorChanged.connect(this, "updateListAuthor(String, String)");
            browserWindow.noteSignal.geoChanged.connect(this, "setNoteDirty()");
            browserWindow.noteSignal.sourceUrlChanged.connect(listManager, "updateNoteSourceUrl(String, String)");
-           browserWindow.noteSignal.sourceUrlChanged.connect(this, "updateListSourceUrl(String, String)");
            browserWindow.focusLost.connect(this, "saveNote()");
            browserWindow.resourceSignal.contentChanged.connect(this, "externalFileEdited(String)");
-//         browserWindow.resourceSignal.externalFileEdit.connect(this, "saveResourceLater(String, String)");
        }
 
        
@@ -1534,22 +1527,22 @@ public class NeverNote extends QMainWindow{
                if (tagName == null)
                        return;
                
-               for (int i=0; i<noteTableView.model.rowCount(); i++) {
-                       QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+               for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+                       QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                        if (modelIndex != null) {
-                               SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                               SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                                String titleGuid = (String)ix.values().toArray()[0];
                                if (titleGuid.equals(noteGuid)) {
-                                       String text = (String)noteTableView.model.data(i, Global.noteTableTagPosition);
+                                       String text = (String)listManager.getNoteTableModel().data(i, Global.noteTableTagPosition);
                                        if (!text.trim().equals(""))
                                                text = text + Global.tagDelimeter + " " +tagName;
                                        else
                                                text = tagName;
-                                       noteTableView.model.setData(i, Global.noteTableTagPosition, text);
-                                       noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                                       listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition, text);
+                                       listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                        if (noteGuid.equals(currentNoteGuid))
                                                browserWindow.setTag(text);
-                                       i=noteTableView.model.rowCount();
+                                       i=listManager.getNoteTableModel().rowCount();
                                }
                        }
                }
@@ -2416,7 +2409,7 @@ public class NeverNote extends QMainWindow{
                                upButton.setEnabled(false);
                        else
                                upButton.setEnabled(true);
-                       if (row < noteTableView.model.rowCount()-1)
+                       if (row < listManager.getNoteTableModel().rowCount()-1)
                                downButton.setEnabled(true);
                        else
                                downButton.setEnabled(false);
@@ -2450,11 +2443,10 @@ public class NeverNote extends QMainWindow{
        // Trigger a refresh when the note db has been updated
        private void noteIndexUpdated(boolean reload) {
                logger.log(logger.HIGH, "Entering NeverNote.noteIndexUpdated");
-               Global.traceReset();  
                saveNote();
        refreshEvernoteNoteList();
        logger.log(logger.HIGH, "Calling note table reload in NeverNote.noteIndexUpdated() - "+reload);
-       noteTableView.load(listManager, reload);
+       noteTableView.load(reload);
        scrollToGuid(currentNoteGuid);
                logger.log(logger.HIGH, "Leaving NeverNote.noteIndexUpdated");
     }
@@ -2559,7 +2551,7 @@ public class NeverNote extends QMainWindow{
        private void downAction() {
        List<QModelIndex> selections = noteTableView.selectionModel().selectedRows();
        int row = selections.get(0).row();
-       int max = noteTableView.model.rowCount();
+       int max = listManager.getNoteTableModel().rowCount();
        if (row < max-1) {
                noteTableView.selectRow(row+1);
        }
@@ -2575,14 +2567,14 @@ public class NeverNote extends QMainWindow{
                        tagBuffer.append(", ");
        }
        
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableTagPosition,tagBuffer.toString());
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition,tagBuffer.toString());
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                return;
                        }
                }
@@ -2591,40 +2583,19 @@ public class NeverNote extends QMainWindow{
     }
     // Update a title for a specific note in the list
     @SuppressWarnings("unused")
-       private void updateListTitle(String guid, String title) {
-       logger.log(logger.HIGH, "Entering NeverNote.updateListTitle");
-
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               //QModelIndex modelIndex =  noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
-               if (modelIndex != null) {
-//                     SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
-                       String tableGuid =  (String)ix.values().toArray()[0];
-                       if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableTitlePosition,title);
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               return;
-                       }       
-               }
-       }
-       logger.log(logger.HIGH, "Leaving NeverNote.updateListTitle");
-    }
-    // Update a title for a specific note in the list
-    @SuppressWarnings("unused")
        private void updateListAuthor(String guid, String author) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListAuthor");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
                //QModelIndex modelIndex =  noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
 //                     SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableAuthorPosition,author);
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableAuthorPosition,author);
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                return;
                        }       
                }
@@ -2634,16 +2605,16 @@ public class NeverNote extends QMainWindow{
        private void updateListNoteNotebook(String guid, String notebook) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListNoteNotebook");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
                //QModelIndex modelIndex =  noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
 //                     SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableNotebookPosition,notebook);
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableNotebookPosition,notebook);
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                return;
                        }       
                }
@@ -2655,16 +2626,16 @@ public class NeverNote extends QMainWindow{
        private void updateListSourceUrl(String guid, String url) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListAuthor");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
                //QModelIndex modelIndex =  noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
 //                     SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               noteTableView.model.setData(i, Global.noteTableSourceUrlPosition,url);
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSourceUrlPosition,url);
                                return;
                        }       
                }
@@ -2674,14 +2645,14 @@ public class NeverNote extends QMainWindow{
        private void updateListGuid(String oldGuid, String newGuid) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListTitle");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(oldGuid)) {
-                               noteTableView.model.setData(i, Global.noteTableGuidPosition,newGuid);
-                               //noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableGuidPosition,newGuid);
+                               //listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                return;
                        }       
                }
@@ -2695,15 +2666,15 @@ public class NeverNote extends QMainWindow{
                        if (listManager.getNoteIndex().get(j).getTagGuids().contains(guid)) {
                                String newName = listManager.getTagNamesForNote(listManager.getNoteIndex().get(j));
 
-                               for (int i=0; i<noteTableView.model.rowCount(); i++) {
-                                       QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+                               for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+                                       QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                                        if (modelIndex != null) {
-                                               SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                                               SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                                                String noteGuid = (String)ix.values().toArray()[0];
                                                if (noteGuid.equalsIgnoreCase(listManager.getNoteIndex().get(j).getGuid())) {
-                                                       noteTableView.model.setData(i, Global.noteTableTagPosition, newName);
-                                                       //noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                                                       i=noteTableView.model.rowCount();
+                                                       listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition, newName);
+                                                       //listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                                                       i=listManager.getNoteTableModel().rowCount();
                                                }
                                        }
                                }
@@ -2722,15 +2693,15 @@ public class NeverNote extends QMainWindow{
                                }
                                
                                String newName = listManager.getTagNamesForNote(listManager.getNoteIndex().get(j));
-                               for (int i=0; i<noteTableView.model.rowCount(); i++) {
-                                       QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+                               for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+                                       QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                                        if (modelIndex != null) {
-                                               SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                                               SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                                                String noteGuid = (String)ix.values().toArray()[0];
                                                if (noteGuid.equalsIgnoreCase(listManager.getNoteIndex().get(j).getGuid())) {
-                                                       noteTableView.model.setData(i, Global.noteTableTagPosition, newName);
-//                                                     noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                                                       i=noteTableView.model.rowCount();
+                                                       listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition, newName);
+//                                                     listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                                                       i=listManager.getNoteTableModel().rowCount();
                                                }
                                        }
                                }
@@ -2741,14 +2712,14 @@ public class NeverNote extends QMainWindow{
     private void updateListNotebookName(String oldName, String newName) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListNotebookName");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableNotebookPosition); 
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableNotebookPosition); 
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableName =  (String)ix.values().toArray()[0];
                        if (tableName.equalsIgnoreCase(oldName)) {
-//                             noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               noteTableView.model.setData(i, Global.noteTableNotebookPosition, newName);
+//                             listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableNotebookPosition, newName);
                        }
                }
        }
@@ -2758,13 +2729,13 @@ public class NeverNote extends QMainWindow{
        private void updateListDateCreated(String guid, QDateTime date) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListDateCreated");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableCreationPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+                               listManager.getNoteTableModel().setData(i, Global.noteTableCreationPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
                                return;
                        }
                }
@@ -2775,14 +2746,14 @@ public class NeverNote extends QMainWindow{
        private void updateListDateSubject(String guid, QDateTime date) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListDateSubject");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               noteTableView.model.setData(i, Global.noteTableSubjectDatePosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSubjectDatePosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
                                return;
                        }
                }
@@ -2793,14 +2764,14 @@ public class NeverNote extends QMainWindow{
        private void updateListDateChanged(String guid, QDateTime date) {
        logger.log(logger.HIGH, "Entering NeverNote.updateListDateChanged");
 
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(guid)) {
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               noteTableView.model.setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
                                return;
                        }
                }
@@ -2810,14 +2781,14 @@ public class NeverNote extends QMainWindow{
     private void updateListDateChanged() {
        logger.log(logger.HIGH, "Entering NeverNote.updateListDateChanged");
        QDateTime date = new QDateTime(QDateTime.currentDateTime());
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(currentNoteGuid)) {
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
-                               noteTableView.model.setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
                                return;
                        }
                }
@@ -2867,7 +2838,7 @@ public class NeverNote extends QMainWindow{
 //                     noteTableView.setCurrentIndex(index);
                                noteTableView.selectRow(i);
                        noteTableView.scrollTo(index, ScrollHint.EnsureVisible);  // This should work, but it doesn't
-                               i=noteTableView.model.rowCount();
+                               i=listManager.getNoteTableModel().rowCount();
                }
        }
     }
@@ -2903,18 +2874,18 @@ public class NeverNote extends QMainWindow{
                        selectedNoteGUIDs.add(currentNoteGuid);
                
        for (int j=0; j<selectedNoteGUIDs.size(); j++) {
-               for (int i=0; i<noteTableView.model.rowCount(); i++) {
-                       QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+               for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+                       QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                        if (modelIndex != null) {
-                               SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                               SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                                String tableGuid =  (String)ix.values().toArray()[0];
                                if (tableGuid.equals(selectedNoteGUIDs.get(j))) {
                                        for (int k=0; k<Global.noteTableColumnCount; k++) {
-                                               noteTableView.model.setData(i, k, backgroundColor, Qt.ItemDataRole.BackgroundRole);
-                                               noteTableView.model.setData(i, k, foregroundColor, Qt.ItemDataRole.ForegroundRole);
+                                               listManager.getNoteTableModel().setData(i, k, backgroundColor, Qt.ItemDataRole.BackgroundRole);
+                                               listManager.getNoteTableModel().setData(i, k, foregroundColor, Qt.ItemDataRole.ForegroundRole);
                                                listManager.updateNoteTitleColor(selectedNoteGUIDs.get(j), backgroundColor.rgb());
                                        }
-                                       i=noteTableView.model.rowCount();
+                                       i=listManager.getNoteTableModel().rowCount();
                                }
                        }
                }
@@ -2934,13 +2905,13 @@ public class NeverNote extends QMainWindow{
        noteDirty = true;
 
        listManager.getUnsynchronizedNotes().add(currentNoteGuid);
-       for (int i=0; i<noteTableView.model.rowCount(); i++) {
-               QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
+       for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+               QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                       SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                        String tableGuid =  (String)ix.values().toArray()[0];
                        if (tableGuid.equals(currentNoteGuid)) {
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+                               listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
                                return;
                        }
                }
@@ -3221,13 +3192,13 @@ public class NeverNote extends QMainWindow{
                if (selectedNoteGUIDs.size() == 0 && !currentNoteGuid.equals("")) 
                        selectedNoteGUIDs.add(currentNoteGuid);
                for (int i=selectedNoteGUIDs.size()-1; i>=0; i--) {
-                       for (int j=noteTableView.model.rowCount()-1; j>=0; j--) {
-                       QModelIndex modelIndex =  noteTableView.model.index(j, Global.noteTableGuidPosition);
+                       for (int j=listManager.getNoteTableModel().rowCount()-1; j>=0; j--) {
+                       QModelIndex modelIndex =  listManager.getNoteTableModel().index(j, Global.noteTableGuidPosition);
                        if (modelIndex != null) {
-                               SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+                               SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
                                String tableGuid =  (String)ix.values().toArray()[0];
                                if (tableGuid.equals(selectedNoteGUIDs.get(i))) {
-                                       noteTableView.model.removeRow(j);
+                                       listManager.getNoteTableModel().removeRow(j);
                                        j=-1;
                                }
                        }
@@ -3315,11 +3286,11 @@ public class NeverNote extends QMainWindow{
        newNote.setAttributes(new NoteAttributes());
        conn.getNoteTable().addNote(newNote, true);
        listManager.getUnsynchronizedNotes().add(newNote.getGuid());
-       noteTableView.insertRow(listManager, newNote, true, -1);
+       listManager.addNote(newNote);
+       noteTableView.insertRow(newNote, true, -1);
        
        currentNote = newNote;
        currentNoteGuid = currentNote.getGuid();
-       listManager.addNote(newNote);
        refreshEvernoteNote(true);
        listManager.countNotebookResults(listManager.getNoteIndex());
        browserWindow.titleLabel.setFocus();
@@ -3489,7 +3460,7 @@ public class NeverNote extends QMainWindow{
                listManager.addNote(newNote);
                conn.getNoteTable().addNote(newNote, true);
                listManager.getUnsynchronizedNotes().add(newNote.getGuid());
-               noteTableView.insertRow(listManager, newNote, true, -1);
+               noteTableView.insertRow(newNote, true, -1);
                listManager.countNotebookResults(listManager.getNoteIndex());
                waitCursor(false);
        }
@@ -4122,46 +4093,22 @@ public class NeverNote extends QMainWindow{
                syncRunning = false;
                syncRunner.syncNeeded = false;
                synchronizeAnimationTimer.stop();
-               noteIndexUpdated(true);
                synchronizeButton.setIcon(synchronizeAnimation.get(0));
                saveNote();
-//             noteTableView.selectionModel().selectionChanged.disconnect(this, "noteTableSelection()");
+               listManager.setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());
+               listManager.reloadIndexes();
+               noteIndexUpdated(true);
                noteTableView.selectionModel().blockSignals(true);
                scrollToGuid(currentNoteGuid);
                noteTableView.selectionModel().blockSignals(false);
-//             noteTableView.selectionModel().selectionChanged.connect(this, "noteTableSelection()");
-//             indexRunner.setKeepRunning(Global.keepRunning);
-               
-               listManager.setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());
-               for (int i=0; i<noteTableView.model.rowCount(); i++) {
-                       QModelIndex modelIndex =  noteTableView.model.index(i, Global.noteTableGuidPosition);
-                       if (modelIndex != null) {
-                       SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
-                               String tableGuid =  (String)ix.values().toArray()[0];
-                               String synch = "true";
-                               for (int j=0; j<listManager.getUnsynchronizedNotes().size(); j++) {
-                                       if (listManager.getUnsynchronizedNotes().get(j).equalsIgnoreCase(tableGuid)) {
-                                               synch = "false";
-                                               j = listManager.getUnsynchronizedNotes().size();
-                                       }
-                               }
-                               noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, synch);
-                       }
-               }       
                refreshEvernoteNote(false);
                scrollToGuid(currentNoteGuid);
                setMessage(tr("Synchronization Complete"));
                logger.log(logger.MEDIUM, "Sync complete.");
        }   
-//     public void setSequenceDate(long t) {
-//             Global.setSequenceDate(t);
-//     }
        public void saveUploadAmount(long t) {
                Global.saveUploadAmount(t);
        }
-//     public void setUpdateSequenceNumber(int t) {
-//             Global.setUpdateSequenceNumber(t);
-//     }
        public void saveUserInformation(User user) {
                Global.saveUserInformation(user);
        }
@@ -4645,7 +4592,7 @@ public class NeverNote extends QMainWindow{
                                        listManager.addNote(newNote);
                                        conn.getNoteTable().addNote(newNote, true);
                                        listManager.getUnsynchronizedNotes().add(newNote.getGuid());
-                                       noteTableView.insertRow(listManager, newNote, true, -1);
+                                       noteTableView.insertRow(newNote, true, -1);
                                        listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
                                        listManager.countNotebookResults(listManager.getNoteIndex());
                                        importedFiles.add(list.get(i).absoluteFilePath());
@@ -4686,7 +4633,7 @@ public class NeverNote extends QMainWindow{
                                listManager.addNote(newNote);
                                conn.getNoteTable().addNote(newNote, true);
                                listManager.getUnsynchronizedNotes().add(newNote.getGuid());
-                               noteTableView.insertRow(listManager, newNote, true, -1);
+                               noteTableView.insertRow(newNote, true, -1);
                                listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
                                listManager.countNotebookResults(listManager.getNoteIndex());
                                dir.remove(dir.at(i));
index 9a49fe5..ca65b29 100644 (file)
@@ -39,7 +39,6 @@ public class NoteSortFilterProxyModel extends QSortFilterProxyModel {
                guids = new HashMap<String,String>();\r
                dateFormat = Global.getDateFormat() + " " + Global.getTimeFormat();\r
                setDynamicSortFilter(true);\r
-//             logger = new ApplicationLogger("filter.log");\r
        }\r
        public void clear() {\r
                guids.clear();\r
diff --git a/src/cx/fbn/nevernote/gui/NoteTableModel.java b/src/cx/fbn/nevernote/gui/NoteTableModel.java
new file mode 100644 (file)
index 0000000..95c64a0
--- /dev/null
@@ -0,0 +1,404 @@
+package cx.fbn.nevernote.gui;\r
+\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+\r
+import com.evernote.edam.type.Note;\r
+import com.trolltech.qt.core.QDateTime;\r
+import com.trolltech.qt.core.QModelIndex;\r
+import com.trolltech.qt.core.Qt;\r
+import com.trolltech.qt.gui.QAbstractTableModel;\r
+import com.trolltech.qt.gui.QColor;\r
+\r
+import cx.fbn.nevernote.Global;\r
+import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;\r
+import cx.fbn.nevernote.utilities.ListManager;\r
+\r
+public class NoteTableModel extends QAbstractTableModel {\r
+       private final ListManager               listManager;\r
+       private final Object[]                  headers;\r
+       private List<Note>                              noteIndex;\r
+       private List<Note>                              masterNoteIndex;\r
+       private List<String>                    unsynchronizedNotes;\r
+       public HashMap<String,Integer>  titleColors;\r
+       public NoteSortFilterProxyModel proxyModel;             // note sort model\r
+       \r
+       public NoteTableModel(ListManager m) {\r
+               headers = new Object[Global.noteTableColumnCount];\r
+               listManager = m;\r
+               masterNoteIndex = null;\r
+               unsynchronizedNotes = new ArrayList<String>();\r
+       }\r
+       \r
+       public List<Note> getNoteIndex() {\r
+               return noteIndex;\r
+       }\r
+       public void setNoteIndex(List<Note> list) {\r
+               noteIndex = list;\r
+       }\r
+       public List<Note> getMasterNoteIndex() {\r
+               return masterNoteIndex;\r
+       }\r
+       public void setMasterNoteIndex(List<Note> list) {\r
+               masterNoteIndex = list;\r
+       }\r
+       public void setSortProxyModel(NoteSortFilterProxyModel m) {\r
+               proxyModel = m;\r
+       }\r
+       \r
+       public List<String> getUnsynchronizedNotes() {\r
+               return unsynchronizedNotes;\r
+       }\r
+       public void setUnsynchronizedNotes(List<String> list) {\r
+               unsynchronizedNotes = list;\r
+       }\r
+       \r
+       public HashMap<String, Integer> getTitleColors() {\r
+               return titleColors;\r
+       }\r
+       public void setTitleColors(HashMap<String, Integer> map) {\r
+               titleColors = map;\r
+       }\r
+       \r
+       @Override\r
+       public int columnCount(QModelIndex arg0) {\r
+               return Global.noteTableColumnCount;\r
+       }\r
+\r
+       @Override\r
+       public Object data(QModelIndex index, int role) {\r
+               if (index == null)\r
+                       return null;\r
+        switch (role) {\r
+        case Qt.ItemDataRole.DisplayRole: {\r
+            return valueAt(index.row(), index.column());\r
+        }\r
+        case Qt.ItemDataRole.BackgroundRole: {\r
+               String guid = valueAt(index.row(), Global.noteTableGuidPosition);\r
+               QColor backgroundColor = new QColor(QColor.white);\r
+               if (titleColors != null && titleColors.containsKey(guid)) {\r
+                       int color = titleColors.get(guid);\r
+                       backgroundColor.setRgb(color);\r
+               }\r
+               return backgroundColor;\r
+        }\r
+        case Qt.ItemDataRole.ForegroundRole: {\r
+               String guid = valueAt(index.row(), Global.noteTableGuidPosition);\r
+               QColor backgroundColor = new QColor(QColor.white);\r
+               QColor foregroundColor = new QColor(QColor.black);\r
+               if (titleColors != null && titleColors.containsKey(guid)) {\r
+                       int color = titleColors.get(guid);\r
+                       backgroundColor.setRgb(color);\r
+                       if (backgroundColor.rgb() == QColor.black.rgb() || backgroundColor.rgb() == QColor.blue.rgb()) \r
+                               foregroundColor.setRgb(QColor.white.rgb());\r
+               } \r
+               return foregroundColor;\r
+        }\r
+        default:\r
+            break;\r
+        }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public int rowCount(QModelIndex arg0) {\r
+               if (listManager != null && listManager.getMasterNoteIndex() != null) \r
+                       return listManager.getMasterNoteIndex().size();\r
+               else\r
+                       return 0;\r
+       }\r
+\r
+       \r
+       private String valueAt(int row, int col) {\r
+               Note note = listManager.getMasterNoteIndex().get(row);\r
+               \r
+               if (col == Global.noteTableGuidPosition)\r
+                       return note.getGuid();\r
+               if (col == Global.noteTableCreationPosition) \r
+                       return formattedDate(note.getCreated());\r
+               if (col == Global.noteTableChangedPosition) \r
+                       return formattedDate(note.getUpdated());\r
+               if (col == Global.noteTableSubjectDatePosition) {\r
+                       if (note.getAttributes().getSubjectDate() > 0)\r
+                               return formattedDate(note.getAttributes().getSubjectDate());\r
+                       else\r
+                               return formattedDate(note.getCreated());                                \r
+               }\r
+               if (col == Global.noteTableTitlePosition)\r
+                       return note.getTitle();\r
+               if (col == Global.noteTableAuthorPosition)\r
+                       return note.getAttributes().getAuthor();\r
+               if (col == Global.noteTableSourceUrlPosition)\r
+                       return note.getAttributes().getSourceURL();\r
+               if (col == Global.noteTableSynchronizedPosition) {\r
+                       String guid = note.getGuid();\r
+                       for (int i=0; i<unsynchronizedNotes.size(); i++) {\r
+                               if (unsynchronizedNotes.get(i).equalsIgnoreCase(guid)) \r
+                                       return "false";\r
+                       }\r
+                       return "true";\r
+               }\r
+               if (col == Global.noteTableTagPosition) {\r
+                       String tags = new String();\r
+                       for (int i=0; i<note.getTagNamesSize(); i++) {\r
+                               tags = tags + note.getTagNames().get(i);\r
+                               if (i!=note.getTagNamesSize()-1)\r
+                                       tags = tags + ", ";\r
+                       }\r
+                       return tags;\r
+               }\r
+               if (col == Global.noteTableNotebookPosition) {\r
+                       for (int i=0; i<listManager.getNotebookIndex().size(); i++) {\r
+                               if (listManager.getNotebookIndex().get(i).getGuid().equals(note.getNotebookGuid()))\r
+                                       return listManager.getNotebookIndex().get(i).getName();\r
+                       }\r
+               }\r
+               return "";\r
+       }\r
+       \r
+       private String formattedDate(long d) {\r
+               String fmt = Global.getDateFormat() + " " + Global.getTimeFormat();\r
+               String dateTimeFormat = new String(fmt);\r
+               SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
+               \r
+               StringBuilder date = new StringBuilder(simple.format(d));\r
+               QDateTime created = QDateTime.fromString(date.toString(), fmt);\r
+               return created.toString(fmt);\r
+\r
+       }\r
+\r
+       /*\r
+       @Override\r
+       public void sort(int column, Qt.SortOrder order) {\r
+               layoutAboutToBeChanged.emit();\r
+               boolean finished = false;\r
+               while (!finished) {\r
+                       finished = true;\r
+                       for (int i=1; i<rowCount(); i++) {\r
+                               String val1 = valueAt(i-1,column-1);\r
+                               Note n1 = getMasterNoteIndex().get(i-1);\r
+                               String val2 = valueAt(i,column);\r
+                               Note n2 = getMasterNoteIndex().get(i);\r
+                               \r
+                               if (val1.compareTo(val2) > 0) {\r
+                                       finished = false;\r
+                                       getMasterNoteIndex().set(i-1, n2);\r
+                                       getMasterNoteIndex().set(i, n1);\r
+                               }\r
+                       }\r
+               }\r
+               layoutChanged.emit();\r
+       }\r
+       */\r
+       \r
+       @Override\r
+       public java.lang.Object headerData(int section, Qt.Orientation orientation, int role) {\r
+               if (role != Qt.ItemDataRole.DisplayRole)\r
+                       return null;\r
+               \r
+               if (orientation == Qt.Orientation.Horizontal && section < headers.length) { \r
+                       return headers[section];\r
+               }\r
+               return null;\r
+               \r
+       }\r
+       \r
+       \r
+       @Override\r
+       public boolean setHeaderData(int section, Qt.Orientation orientation, Object value, int role) {\r
+               if (orientation == Qt.Orientation.Horizontal && section < headers.length && role == Qt.ItemDataRole.DisplayRole) {\r
+                       headers[section] = value;\r
+                       headerDataChanged.emit(orientation, section, section);\r
+                       return true;\r
+               }\r
+               return false;\r
+       }\r
+\r
+       \r
+       // Update a note title\r
+       public void updateNoteTitle(String guid, String title) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setTitle(title);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableTitlePosition, nativePointer());\r
+                               setData(idx, title, Qt.ItemDataRole.EditRole); \r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).setTitle(title);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void updateNoteCreatedDate(String guid, QDateTime date) {\r
+               \r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setCreated((long)date.toTime_t()*1000);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableCreationPosition, nativePointer());\r
+                               setData(idx, new Long(getMasterNoteIndex().get(i).getCreated()), Qt.ItemDataRole.EditRole); \r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               \r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).setCreated((long)date.toTime_t()*1000);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void updateNoteSubjectDate(String guid, QDateTime date) {\r
+               \r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).getAttributes().setSubjectDate((long)date.toTime_t()*1000);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableSubjectDatePosition, nativePointer());\r
+                               setData(idx, new Long(getMasterNoteIndex().get(i).getAttributes().getSubjectDate()), Qt.ItemDataRole.EditRole); \r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               \r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).getAttributes().setSubjectDate((long)date.toTime_t()*1000);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void updateNoteChangedDate(String guid, QDateTime date) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setUpdated((long)date.toTime_t()*1000);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableChangedPosition, nativePointer());\r
+                               setData(idx, new Long(getMasterNoteIndex().get(i).getAttributes().getSubjectDate()), Qt.ItemDataRole.EditRole); \r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).setUpdated((long)date.toTime_t()*1000);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void updateNoteGuid(String oldGuid, String newGuid) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid() != null && getMasterNoteIndex().get(i).getGuid().equals(oldGuid)) {\r
+                               getMasterNoteIndex().get(i).setGuid(newGuid);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableGuidPosition, nativePointer());\r
+                               setData(idx, new Long(getMasterNoteIndex().get(i).getGuid()), Qt.ItemDataRole.EditRole); \r
+                               i=getMasterNoteIndex().size()+1;\r
+                       }\r
+               }\r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid() != null && getNoteIndex().get(i).getGuid().equals(oldGuid)) {\r
+                               getNoteIndex().get(i).setGuid(newGuid);; \r
+                               i=getNoteIndex().size()+1;\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void updateNoteNotebook(String guid, String notebookGuid) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setNotebookGuid(notebookGuid);\r
+                               for (int j=0; j<listManager.getNotebookIndex().size(); j++) {\r
+                                       if (listManager.getNotebookIndex().get(j).getGuid().equals(notebookGuid)) {\r
+                                               String name = listManager.getNotebookIndex().get(j).getName();\r
+                                               QModelIndex idx = createIndex(i, Global.noteTableNotebookPosition, nativePointer());\r
+                                               setData(idx, name, Qt.ItemDataRole.EditRole); \r
+                                               j=listManager.getNotebookIndex().size();\r
+                                       }\r
+                               }\r
+                               i=getMasterNoteIndex().size();\r
+                       }\r
+               }\r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).setNotebookGuid(notebookGuid);\r
+                               i=getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void updateNoteAuthor(String guid, String author) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).getAttributes().setAuthor(author);\r
+                               getMasterNoteIndex().get(i).getAttributes().setAltitudeIsSet(true);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableAuthorPosition, nativePointer());\r
+                               setData(idx, author, Qt.ItemDataRole.EditRole); \r
+\r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).getAttributes().setAuthor(author);\r
+                               getNoteIndex().get(i).getAttributes().setAuthorIsSet(true);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void updateNoteSourceUrl(String guid, String url) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).getAttributes().setSourceURL(url);\r
+                               getMasterNoteIndex().get(i).getAttributes().setSourceURLIsSet(true);\r
+                               QModelIndex idx = createIndex(i, Global.noteTableSourceUrlPosition, nativePointer());\r
+                               setData(idx, url, Qt.ItemDataRole.EditRole); \r
+                               i = getMasterNoteIndex().size();\r
+                       }       \r
+               }\r
+               // Update the list tables \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).getAttributes().setSourceURL(url);\r
+                               getNoteIndex().get(i).getAttributes().setSourceURLIsSet(true);\r
+                               i = getNoteIndex().size();\r
+                       }\r
+               }\r
+       }\r
+\r
+       \r
+       public void addNote(Note n) {\r
+               beginInsertRows(null, 0, 1);\r
+               getNoteIndex().add(n);\r
+               getMasterNoteIndex().add(n);\r
+               proxyModel.addGuid(n.getGuid());\r
+               endInsertRows();\r
+       }\r
+       \r
+       \r
+       @Override\r
+       public boolean setData(QModelIndex index, Object value,int role) {\r
+               if (role == Qt.ItemDataRole.EditRole) {\r
+                       dataChanged.emit(index, index);\r
+                       return true;\r
+               } else {\r
+                       return super.setData(index, value, role);\r
+               }\r
+       }\r
+       \r
+       public void updateNoteTitleColor(String guid, Integer color) {\r
+               getTitleColors().remove(guid);\r
+               getTitleColors().put(guid, color);\r
+               layoutChanged.emit();\r
+       }\r
+       \r
+}\r
index 3368ef2..25c43cf 100644 (file)
 */\r
 package cx.fbn.nevernote.gui;\r
 \r
-import java.text.SimpleDateFormat;\r
 import java.util.List;\r
 import java.util.SortedMap;\r
 \r
 import com.evernote.edam.type.Note;\r
 import com.trolltech.qt.core.QByteArray;\r
-import com.trolltech.qt.core.QDateTime;\r
 import com.trolltech.qt.core.QModelIndex;\r
 import com.trolltech.qt.core.Qt;\r
 import com.trolltech.qt.core.Qt.SortOrder;\r
@@ -38,10 +36,9 @@ import com.trolltech.qt.gui.QDropEvent;
 import com.trolltech.qt.gui.QFontMetrics;\r
 import com.trolltech.qt.gui.QHeaderView;\r
 import com.trolltech.qt.gui.QKeyEvent;\r
+import com.trolltech.qt.gui.QKeySequence.StandardKey;\r
 import com.trolltech.qt.gui.QMenu;\r
-import com.trolltech.qt.gui.QStandardItemModel;\r
 import com.trolltech.qt.gui.QTableView;\r
-import com.trolltech.qt.gui.QKeySequence.StandardKey;\r
 \r
 import cx.fbn.nevernote.Global;\r
 import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;\r
@@ -50,10 +47,9 @@ import cx.fbn.nevernote.utilities.ApplicationLogger;
 import cx.fbn.nevernote.utilities.ListManager;\r
 \r
 public class TableView extends QTableView {\r
-//     private final ListManager                               runner;\r
+       private final ListManager                               runner;\r
        private final ApplicationLogger         logger;\r
-    public QStandardItemModel                  model;                                  // Standard item model\r
-    public NoteSortFilterProxyModel    proxyModel;                             // note sort model\r
+    public NoteSortFilterProxyModel    proxyModel;             // note sort model\r
     private QAction deleteAction;\r
     private QAction addAction;\r
     private QAction restoreAction;\r
@@ -80,7 +76,7 @@ public class TableView extends QTableView {
     public Signal0     resetViewport;\r
     public NoteSignal noteSignal;\r
        \r
-       public TableView(ApplicationLogger l) {\r
+       public TableView(ApplicationLogger l, ListManager m) {\r
                logger = l;\r
                header = horizontalHeader();\r
                header.setMovable(true);\r
@@ -91,26 +87,27 @@ public class TableView extends QTableView {
                setDragDropMode(QAbstractItemView.DragDropMode.DragDrop);\r
                setDropIndicatorShown(false);\r
                \r
-               model = new QStandardItemModel(0,Global.noteTableColumnCount, this);\r
+               runner = m;     \r
                \r
-        model.setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, tr("Date Created"));\r
-        model.setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, tr("Tags"));\r
-        model.setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, tr("Guid"));\r
-        model.setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, tr("Notebook"));\r
-        model.setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, tr("Title"));\r
-        model.setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, tr("Date Changed"));\r
-        model.setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, tr("Author"));\r
-        model.setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"));\r
-        model.setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"));\r
-        model.setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Synchronized"));\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableCreationPosition, Qt.Orientation.Horizontal, tr("Date Created"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableTagPosition, Qt.Orientation.Horizontal, tr("Tags"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableGuidPosition, Qt.Orientation.Horizontal, tr("Guid"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableNotebookPosition, Qt.Orientation.Horizontal, tr("Notebook"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableTitlePosition, Qt.Orientation.Horizontal, tr("Title"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableChangedPosition, Qt.Orientation.Horizontal, tr("Date Changed"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableAuthorPosition, Qt.Orientation.Horizontal, tr("Author"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableSourceUrlPosition, Qt.Orientation.Horizontal, tr("Source Url"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableSubjectDatePosition, Qt.Orientation.Horizontal, tr("Subject Date"), Qt.ItemDataRole.DisplayRole);\r
+        runner.getNoteTableModel().setHeaderData(Global.noteTableSynchronizedPosition, Qt.Orientation.Horizontal, tr("Synchronized"), Qt.ItemDataRole.DisplayRole);\r
         header.sortIndicatorChanged.connect(this, "resetViewport()");\r
        \r
         proxyModel = new NoteSortFilterProxyModel(this);\r
-        proxyModel.setSourceModel(model);\r
-        \r
+        proxyModel.setSourceModel(runner.getNoteTableModel());\r
         setAlternatingRowColors(false);\r
         setModel(proxyModel);\r
-        \r
+//        setModel(runner.getNoteTableModel());\r
+        runner.getNoteTableModel().setSortProxyModel(proxyModel);\r
+               \r
         setSortingEnabled(true);\r
         int sortCol = proxyModel.sortColumn();\r
                SortOrder sortOrder = proxyModel.sortOrder();\r
@@ -140,37 +137,37 @@ public class TableView extends QTableView {
        }\r
        \r
                \r
-       public void load(ListManager runner, boolean reload) {\r
-\r
+       public void load(boolean reload) {\r
                proxyModel.clear();\r
-               setSortingEnabled(true);\r
+               setSortingEnabled(false);\r
                for (int i=0; i<runner.getNoteIndex().size(); i++) {\r
                        if (Global.showDeleted == true && !runner.getNoteIndex().get(i).isActive())\r
                                proxyModel.addGuid(runner.getNoteIndex().get(i).getGuid());\r
                        if (!Global.showDeleted == true && runner.getNoteIndex().get(i).isActive())                     \r
                                proxyModel.addGuid(runner.getNoteIndex().get(i).getGuid());\r
                }\r
+\r
                if (!reload) {\r
                        logger.log(logger.EXTREME, "TableView.load() reload starting.");\r
                        proxyModel.filter();\r
                        logger.log(logger.EXTREME, "TableView.load() leaving reload.");\r
                        QFontMetrics f = QApplication.fontMetrics();\r
                        fontHeight = f.height();\r
-                       for (int i=0; i<model.rowCount(); i++)\r
+                       for (int i=0; i<runner.getNoteTableModel().rowCount(); i++)\r
                                setRowHeight(i, fontHeight);\r
+                       proxyModel.invalidate();\r
+                       setSortingEnabled(true);\r
                        resetViewport.emit();\r
                        return;\r
                }\r
                logger.log(logger.EXTREME, "TableView.load() Filling table data from scratch");\r
-               model.setRowCount(runner.getMasterNoteIndex().size());\r
-               \r
+       \r
                for (int i=0; i<runner.getMasterNoteIndex().size(); i++) {\r
                        if (runner.getMasterNoteIndex().get(i) != null) {       \r
-                               insertRow(runner, runner.getMasterNoteIndex().get(i), false, i);                                                        \r
+                               insertRow(runner.getMasterNoteIndex().get(i), false, i);                                                        \r
                        }\r
-               }\r
-               \r
-\r
+               } \r
+               proxyModel.invalidate();\r
                \r
                int width;\r
                width = Global.getColumnWidth("noteTableCreationPosition");\r
@@ -234,80 +231,29 @@ public class TableView extends QTableView {
                \r
                QFontMetrics f = QApplication.fontMetrics();\r
                fontHeight = f.height();\r
-               for (int i=0; i<model.rowCount(); i++)\r
+               for (int i=0; i<runner.getNoteTableModel().rowCount(); i++)\r
                        setRowHeight(i, fontHeight);\r
                \r
+               setSortingEnabled(true);\r
                resetViewport.emit();\r
        }\r
 \r
-       public void insertRow(ListManager runner, Note tempNote, boolean newNote, int row) {\r
+       public void insertRow(Note tempNote, boolean newNote, int row) {\r
                if (newNote)\r
                        proxyModel.addGuid(tempNote.getGuid());\r
-               String fmt = Global.getDateFormat() + " " + Global.getTimeFormat();\r
-               String dateTimeFormat = new String(fmt);\r
-               SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);\r
-\r
                \r
-               String tagNames = runner.getTagNamesForNote(tempNote);\r
-               StringBuilder creationDate = new StringBuilder(simple.format(tempNote.getCreated()));   \r
-               StringBuilder changedDate = new StringBuilder(simple.format(tempNote.getUpdated()));\r
-               StringBuilder subjectDate;\r
-               if (tempNote.getAttributes().getSubjectDate() == 0) \r
-                       subjectDate = creationDate;\r
-               else\r
-                       subjectDate = new StringBuilder(simple.format(tempNote.getAttributes().getSubjectDate()));\r
-\r
-               String sync = "true";\r
-               for (int i=0; i<runner.getUnsynchronizedNotes().size(); i++) {\r
-                       if (runner.getUnsynchronizedNotes().get(i).equalsIgnoreCase(tempNote.getGuid())) {\r
-                               sync = "false";\r
-                               i = runner.getUnsynchronizedNotes().size();\r
-                       }\r
-               }       \r
-                               \r
-               if (row > model.rowCount())\r
-                       model.insertRow(0);\r
+               if (row > runner.getNoteTableModel().rowCount())\r
+                       runner.getNoteTableModel().insertRow(0);\r
                \r
                if (row < 0) {\r
-                       row  = model.rowCount();\r
-                       model.insertRow(row);\r
-//                     row = model.rowCount()-1;\r
+                       row  = runner.getNoteTableModel().rowCount();\r
+                       runner.getNoteTableModel().insertRow(row);\r
                }\r
-\r
-               QColor backgroundColor = new QColor(QColor.white);\r
-               QColor foregroundColor = new QColor(QColor.black);\r
-               \r
-               if (runner.titleColors != null && runner.titleColors.containsKey(tempNote.getGuid())) {\r
-                       int color = runner.titleColors.get(tempNote.getGuid());\r
-                       backgroundColor.setRgb(color);\r
-               }\r
-               if (backgroundColor.rgb() == QColor.black.rgb() || backgroundColor.rgb() == QColor.blue.rgb()) \r
-                       foregroundColor.setRgb(QColor.white.rgb());\r
-                       \r
-               \r
-               QDateTime created = QDateTime.fromString(creationDate.toString(), fmt);\r
-               QDateTime changed = QDateTime.fromString(changedDate.toString(), fmt);\r
-               QDateTime subjectDateFormat = QDateTime.fromString(subjectDate.toString(), fmt);\r
-               model.setData(model.index(row, Global.noteTableCreationPosition), created.toString(fmt));\r
-               model.setData(model.index(row, Global.noteTableChangedPosition), changed.toString(fmt));\r
-               model.setData(model.index(row, Global.noteTableTitlePosition), tempNote.getTitle());\r
-               model.setData(model.index(row, Global.noteTableTagPosition), tagNames);\r
-               model.setData(model.index(row, Global.noteTableGuidPosition), tempNote.getGuid());\r
-               model.setData(model.index(row, Global.noteTableSubjectDatePosition), subjectDateFormat.toString(fmt));\r
-               model.setData(model.index(row, Global.noteTableAuthorPosition), tempNote.getAttributes().getAuthor());\r
-               model.setData(model.index(row, Global.noteTableSourceUrlPosition), tempNote.getAttributes().getSourceURL());\r
-               model.setData(model.index(row, Global.noteTableNotebookPosition), runner.getNotebookNameByGuid(tempNote.getNotebookGuid()));\r
-               model.setData(model.index(row, Global.noteTableSynchronizedPosition), sync);\r
-               \r
-               for (int i=0; i<Global.noteTableColumnCount; i++) {\r
-                       model.setData(row, i, backgroundColor, Qt.ItemDataRole.BackgroundRole);\r
-                       model.setData(row, i, foregroundColor, Qt.ItemDataRole.ForegroundRole);\r
-               }               \r
                \r
                if (newNote) {\r
                        QFontMetrics f = QApplication.fontMetrics();\r
                        fontHeight = f.height();\r
-                       for (int i=0; i<model.rowCount(); i++)\r
+                       for (int i=0; i<runner.getNoteTableModel().rowCount(); i++)\r
                                setRowHeight(i, fontHeight);\r
                }\r
        }\r
@@ -341,13 +287,13 @@ public class TableView extends QTableView {
        @Override\r
        public void keyPressEvent(QKeyEvent e) {\r
                if (e.matches(StandardKey.MoveToStartOfDocument)) {\r
-                       if (model.rowCount() > 0) {\r
+                       if (runner.getNoteTableModel().rowCount() > 0) {\r
                                clearSelection();\r
                                selectRow(0);\r
                        }\r
                }\r
                if (e.matches(StandardKey.MoveToEndOfDocument)) {\r
-                       if (model.rowCount() > 0) {\r
+                       if (runner.getNoteTableModel().rowCount() > 0) {\r
                                clearSelection();\r
                                selectRow(model().rowCount()-1);\r
                        }\r
index 3694608..ed8d88a 100644 (file)
@@ -44,6 +44,7 @@ import cx.fbn.nevernote.Global;
 import cx.fbn.nevernote.filters.EnSearch;\r
 import cx.fbn.nevernote.filters.NotebookCounter;\r
 import cx.fbn.nevernote.filters.TagCounter;\r
+import cx.fbn.nevernote.gui.NoteTableModel;\r
 import cx.fbn.nevernote.signals.NotebookSignal;\r
 import cx.fbn.nevernote.signals.StatusSignal;\r
 import cx.fbn.nevernote.signals.TagSignal;\r
@@ -66,13 +67,13 @@ public class ListManager  {
        private List<Notebook>                  notebookIndex;\r
        private List<Notebook>                  archiveNotebookIndex;\r
        private List<String>                    localNotebookIndex;\r
-       private List<Note>                              noteIndex;\r
+\r
        private List<SavedSearch>               searchIndex;\r
 \r
        private List<String>                    selectedNotebooks;\r
+       private final NoteTableModel                    noteModel;\r
+       \r
        \r
-       private List<Note>                              masterNoteIndex;\r
-       private List<String>                    unsynchronizedNotes;\r
        private List<String>                    selectedTags;\r
        private String                                  selectedSearch;\r
        ThreadSignal                                    signals;\r
@@ -83,9 +84,8 @@ public class ListManager  {
        private final QThread                   tagThread;\r
        \r
        private final CounterRunner             trashCounterRunner;\r
-       private final QThread                                   trashThread;\r
+       private final QThread                   trashThread;\r
        public TrashSignal                              trashSignal;\r
-       public HashMap<String,Integer>  titleColors;\r
        \r
        private List<NotebookCounter>   notebookCounter;                                // count of displayed notes in each notebook\r
        private List<TagCounter>                tagCounter;                                             // count of displayed notes for each tag\r
@@ -96,15 +96,13 @@ public class ListManager  {
        public TagSignal                                tagSignal;\r
        public NotebookSignal                   notebookSignal;\r
        private int                                             trashCount;\r
-       private final int id;\r
     SaveRunner                 saveRunner;                                     // Thread used to save content.  Used because the xml conversion is slowwwww\r
     QThread                            saveThread;\r
        \r
        // Constructor\r
-       public ListManager(DatabaseConnection d, ApplicationLogger l, int instance_id) {\r
+       public ListManager(DatabaseConnection d, ApplicationLogger l) {\r
                conn = d;\r
                logger = l;\r
-               id = instance_id;\r
                \r
        status = new StatusSignal();\r
                signals = new ThreadSignal();\r
@@ -113,14 +111,13 @@ public class ListManager  {
                enSearchChanged = false;\r
                \r
                // Setup arrays\r
-               masterNoteIndex = null;\r
+               noteModel = new NoteTableModel(this);\r
                selectedTags = new ArrayList<String>();\r
 \r
                notebookCounter = new ArrayList<NotebookCounter>();\r
                tagCounter = new ArrayList<TagCounter>();\r
                selectedNotebooks = new ArrayList<String>();\r
-               unsynchronizedNotes = new ArrayList<String>();\r
-               \r
+                               \r
                reloadIndexes();\r
                \r
                notebookSignal = new NotebookSignal();\r
@@ -215,22 +212,22 @@ public class ListManager  {
                for (int i=0; i<local.size(); i++)\r
                        localNotebookIndex.add(local.get(i).getGuid());\r
                \r
-               masterNoteIndex = conn.getNoteTable().getAllNotes();\r
+               noteModel.setMasterNoteIndex(conn.getNoteTable().getAllNotes());\r
                // For performance reasons, we didn't get the tags for every note individually.  We now need to \r
                // get them\r
                List<cx.fbn.nevernote.sql.NoteTagsRecord> noteTags = conn.getNoteTable().noteTagsTable.getAllNoteTags();\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
                        List<String> tags = new ArrayList<String>();\r
                        List<String> names = new ArrayList<String>();\r
                        for (int j=0; j<noteTags.size(); j++) {\r
-                               if (masterNoteIndex.get(i).getGuid().equals(noteTags.get(j).noteGuid)) {\r
+                               if (getMasterNoteIndex().get(i).getGuid().equals(noteTags.get(j).noteGuid)) {\r
                                        tags.add(noteTags.get(j).tagGuid);\r
                                        names.add(getTagNameByGuid(noteTags.get(j).tagGuid));\r
                                }\r
                        }\r
                        \r
-                       masterNoteIndex.get(i).setTagGuids(tags);\r
-                       masterNoteIndex.get(i).setTagNames(names);\r
+                       getMasterNoteIndex().get(i).setTagGuids(tags);\r
+                       getMasterNoteIndex().get(i).setTagNames(names);\r
                }\r
                \r
                \r
@@ -259,27 +256,27 @@ public class ListManager  {
                enSearch = new EnSearch(conn,  logger, "", getTagIndex(), Global.getMinimumWordLength(), Global.getRecognitionWeight());\r
                logger.log(logger.HIGH, "Building note index");\r
 \r
-               if (masterNoteIndex == null) { \r
-                       masterNoteIndex = conn.getNoteTable().getAllNotes();\r
-               }\r
+//             if (getMasterNoteIndex() == null) { \r
+                       noteModel.setMasterNoteIndex(conn.getNoteTable().getAllNotes());\r
+//             }\r
                // For performance reasons, we didn't get the tags for every note individually.  We now need to \r
                // get them\r
                List<cx.fbn.nevernote.sql.NoteTagsRecord> noteTags = conn.getNoteTable().noteTagsTable.getAllNoteTags();\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
                        List<String> tags = new ArrayList<String>();\r
                        List<String> names = new ArrayList<String>();\r
                        for (int j=0; j<noteTags.size(); j++) {\r
-                               if (masterNoteIndex.get(i).getGuid().equals(noteTags.get(j).noteGuid)) {\r
+                               if (getMasterNoteIndex().get(i).getGuid().equals(noteTags.get(j).noteGuid)) {\r
                                        tags.add(noteTags.get(j).tagGuid);\r
                                        names.add(getTagNameByGuid(noteTags.get(j).tagGuid));\r
                                }\r
                        }\r
                        \r
-                       masterNoteIndex.get(i).setTagGuids(tags);\r
-                       masterNoteIndex.get(i).setTagNames(names);\r
+                       getMasterNoteIndex().get(i).setTagGuids(tags);\r
+                       getMasterNoteIndex().get(i).setTagNames(names);\r
                }\r
                \r
-               setNoteIndex(masterNoteIndex);\r
+               setNoteIndex(getMasterNoteIndex());\r
 \r
        }\r
        \r
@@ -305,6 +302,10 @@ public class ListManager  {
     //** These functions deal with setting & retrieving the master lists\r
     //***************************************************************\r
     //***************************************************************\r
+       // Get the note table model\r
+       public NoteTableModel getNoteTableModel() {\r
+               return noteModel;\r
+       }\r
        // save the saved search index\r
        private void setSavedSearchIndex(List<SavedSearch> t) {\r
                searchIndex = t;\r
@@ -338,11 +339,11 @@ public class ListManager  {
        }\r
        // Save the current note list\r
        private void setNoteIndex(List<Note> n) {\r
-               noteIndex = n;\r
+               noteModel.setNoteIndex(n);\r
        }\r
        // Get the note index\r
        public synchronized List<Note> getNoteIndex() {\r
-               return noteIndex;\r
+               return noteModel.getNoteIndex();\r
        }\r
        // Save the count of notes per notebook\r
        public void setNotebookCounter(List<NotebookCounter> n) {\r
@@ -365,10 +366,10 @@ public class ListManager  {
        }\r
        // Unsynchronized Note List\r
        public List<String> getUnsynchronizedNotes() {\r
-               return unsynchronizedNotes;\r
+               return noteModel.getUnsynchronizedNotes();\r
        }\r
        public void setUnsynchronizedNotes(List<String> l) {\r
-               unsynchronizedNotes = l;\r
+               noteModel.setUnsynchronizedNotes(l);\r
        }\r
        // Return a count of items in the trash\r
        public int getTrashCount() {\r
@@ -379,7 +380,7 @@ public class ListManager  {
                return enSearch;\r
        }\r
        public List<Note> getMasterNoteIndex() {\r
-               return masterNoteIndex;\r
+               return noteModel.getMasterNoteIndex();\r
        }\r
        \r
     //***************************************************************\r
@@ -457,11 +458,11 @@ public class ListManager  {
                        }\r
                }\r
                \r
-               for (int i=0; i<noteIndex.size(); i++) {\r
-                       if (noteIndex.get(i).getGuid().equals(noteGuid)) {\r
-                               noteIndex.get(i).setTagNames(tags);\r
-                               noteIndex.get(i).setTagGuids(tagGuids);\r
-                               i=noteIndex.size()+1;\r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(noteGuid)) {\r
+                               getNoteIndex().get(i).setTagNames(tags);\r
+                               getNoteIndex().get(i).setTagGuids(tagGuids);\r
+                               i=getNoteIndex().size()+1;\r
                        }\r
                }\r
                if (newTagCreated)\r
@@ -479,11 +480,11 @@ public class ListManager  {
                        l=currentTime.getTimeInMillis();\r
                }\r
                \r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setActive(false);\r
-                               masterNoteIndex.get(i).setDeleted(l);\r
-                               i=masterNoteIndex.size();\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setActive(false);\r
+                               getMasterNoteIndex().get(i).setDeleted(l);\r
+                               i=getMasterNoteIndex().size();\r
                        }\r
                }\r
                for (int i=0; i<getNoteIndex().size(); i++) {\r
@@ -499,11 +500,11 @@ public class ListManager  {
        // Delete a note\r
        public void restoreNote(String guid) {\r
                trashCounterRunner.abortCount = true;\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setActive(true);\r
-                               masterNoteIndex.get(i).setDeleted(0);\r
-                               i=masterNoteIndex.size();\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).setActive(true);\r
+                               getMasterNoteIndex().get(i).setDeleted(0);\r
+                               i=getMasterNoteIndex().size();\r
                        }\r
                }\r
                for (int i=0; i<getNoteIndex().size(); i++) {\r
@@ -518,10 +519,10 @@ public class ListManager  {
        }\r
        public void updateNote(Note n) {\r
                \r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(n.getGuid())) {\r
-                               masterNoteIndex.remove(i);\r
-                               masterNoteIndex.add(n);\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(n.getGuid())) {\r
+                               getMasterNoteIndex().remove(i);\r
+                               getMasterNoteIndex().add(n);\r
                        }\r
                }\r
                for (int i=0; i<getNoteIndex().size(); i++) {\r
@@ -535,16 +536,15 @@ public class ListManager  {
        }\r
        // Add a note.  \r
        public void addNote(Note n) {\r
-               getNoteIndex().add(n);\r
-               masterNoteIndex.add(n);\r
+               noteModel.addNote(n);\r
        }\r
        // Expunge a note\r
        public void expungeNote(String guid) {\r
                trashCounterRunner.abortCount = true;\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.remove(i);\r
-                               i=masterNoteIndex.size();\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().remove(i);\r
+                               i=getMasterNoteIndex().size();\r
                        }\r
                }\r
                for (int i=0; i<getNoteIndex().size(); i++) {\r
@@ -559,9 +559,9 @@ public class ListManager  {
        // Expunge a note\r
        public void emptyTrash() {\r
                trashCounterRunner.abortCount = true;           \r
-               for (int i=masterNoteIndex.size()-1; i>=0; i--) {\r
-                       if (!masterNoteIndex.get(i).isActive()) {\r
-                               masterNoteIndex.remove(i);\r
+               for (int i=getMasterNoteIndex().size()-1; i>=0; i--) {\r
+                       if (!getMasterNoteIndex().get(i).isActive()) {\r
+                               getMasterNoteIndex().remove(i);\r
                        }\r
                }\r
                \r
@@ -621,68 +621,30 @@ public class ListManager  {
        }\r
        // Update a note creation date\r
        public void updateNoteCreatedDate(String guid, QDateTime date) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setCreated(date.toTime_t()*1000);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).setCreated(date.toTime_t()*1000);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
+               noteModel.updateNoteCreatedDate(guid, date);\r
                conn.getNoteTable().updateNoteCreatedDate(guid, date);\r
        }\r
        // Subject date has been changed\r
        public void updateNoteSubjectDate(String guid, QDateTime date) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).getAttributes().setSubjectDate(date.toTime_t()*1000);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).setCreated(date.toTime_t()*1000);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
+               noteModel.updateNoteSubjectDate(guid, date);\r
                conn.getNoteTable().updateNoteSubjectDate(guid, date);\r
        }\r
        // Author has changed\r
        public void updateNoteAuthor(String guid, String author) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).getAttributes().setAuthor(author);\r
-                               masterNoteIndex.get(i).getAttributes().setAltitudeIsSet(true);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).getAttributes().setAuthor(author);\r
-                               getNoteIndex().get(i).getAttributes().setAuthorIsSet(true);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
+               noteModel.updateNoteAuthor(guid, author);\r
                conn.getNoteTable().updateNoteAuthor(guid, author);\r
        }\r
        // Author has changed\r
        public void updateNoteGeoTag(String guid, Double lon, Double lat, Double alt) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).getAttributes().setLongitude(lon);\r
-                               masterNoteIndex.get(i).getAttributes().setLongitudeIsSet(true);\r
-                               masterNoteIndex.get(i).getAttributes().setLatitude(lat);\r
-                               masterNoteIndex.get(i).getAttributes().setLatitudeIsSet(true);\r
-                               masterNoteIndex.get(i).getAttributes().setAltitude(alt);\r
-                               masterNoteIndex.get(i).getAttributes().setAltitudeIsSet(true);\r
-                               i = masterNoteIndex.size();\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getMasterNoteIndex().get(i).getAttributes().setLongitude(lon);\r
+                               getMasterNoteIndex().get(i).getAttributes().setLongitudeIsSet(true);\r
+                               getMasterNoteIndex().get(i).getAttributes().setLatitude(lat);\r
+                               getMasterNoteIndex().get(i).getAttributes().setLatitudeIsSet(true);\r
+                               getMasterNoteIndex().get(i).getAttributes().setAltitude(alt);\r
+                               getMasterNoteIndex().get(i).getAttributes().setAltitudeIsSet(true);\r
+                               i = getMasterNoteIndex().size();\r
                        }       \r
                }\r
                // Update the list tables \r
@@ -699,79 +661,27 @@ public class ListManager  {
                }\r
                conn.getNoteTable().updateNoteGeoTags(guid, lon, lat, alt);\r
        }\r
-       // Author has changed\r
+       // Source URL changed\r
        public void updateNoteSourceUrl(String guid, String url) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).getAttributes().setSourceURL(url);\r
-                               masterNoteIndex.get(i).getAttributes().setSourceURLIsSet(true);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).getAttributes().setSourceURL(url);\r
-                               getNoteIndex().get(i).getAttributes().setSourceURLIsSet(true);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
+               noteModel.updateNoteSourceUrl(guid, url);\r
                conn.getNoteTable().updateNoteSourceUrl(guid, url);\r
        }\r
        // Update a note last changed date\r
        public void updateNoteAlteredDate(String guid, QDateTime date) {\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setUpdated(date.toTime_t()*1000);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).setUpdated(date.toTime_t()*1000);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
-               \r
+               noteModel.updateNoteChangedDate(guid, date);\r
                conn.getNoteTable().updateNoteAlteredDate(guid, date);\r
        }\r
        // Update a note title\r
        public void updateNoteTitle(String guid, String title) {\r
                logger.log(logger.HIGH, "Entering ListManager.updateNoteTitle");\r
                conn.getNoteTable().updateNoteTitle(guid, title);\r
-               \r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setTitle(title);\r
-                               i = masterNoteIndex.size();\r
-                       }       \r
-               }\r
-               // Update the list tables \r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).setTitle(title);\r
-                               i = getNoteIndex().size();\r
-                       }\r
-               }\r
-               \r
+               noteModel.updateNoteTitle(guid, title);\r
                logger.log(logger.HIGH, "Leaving ListManager.updateNoteTitle");\r
        }\r
        // Update a note's notebook\r
        public void updateNoteNotebook(String guid, String notebookGuid) {\r
                logger.log(logger.HIGH, "Entering ListManager.updateNoteNotebook");\r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid().equals(guid)) {\r
-                               masterNoteIndex.get(i).setNotebookGuid(notebookGuid);\r
-                               i=masterNoteIndex.size();\r
-                       }\r
-               }\r
-               for (int i=0; i<getNoteIndex().size(); i++) {\r
-                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
-                               getNoteIndex().get(i).setNotebookGuid(notebookGuid);\r
-                               i=masterNoteIndex.size();\r
-                       }\r
-               }\r
+               noteModel.updateNoteNotebook(guid, notebookGuid);\r
                conn.getNoteTable().updateNoteNotebook(guid, notebookGuid, true);\r
                logger.log(logger.HIGH, "Leaving ListManager.updateNoteNotebook");\r
        }\r
@@ -781,32 +691,26 @@ public class ListManager  {
 \r
                conn.getNoteTable().updateNoteSequence(guid, sequence);\r
                \r
-               for (int i=0; i<noteIndex.size(); i++) {\r
-                       if (noteIndex.get(i).getGuid().equals(guid)) {\r
-                               noteIndex.get(i).setUpdateSequenceNum(sequence);\r
-                               i=noteIndex.size()+1;\r
+               for (int i=0; i<noteModel.getMasterNoteIndex().size(); i++) {\r
+                       if (noteModel.getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               noteModel.getMasterNoteIndex().get(i).setUpdateSequenceNum(sequence);\r
+                               i=noteModel.getMasterNoteIndex().size()+1;\r
+                       }\r
+               }\r
+               \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               getNoteIndex().get(i).setUpdateSequenceNum(sequence);\r
+                               i=getNoteIndex().size()+1;\r
                        }\r
                }\r
                logger.log(logger.HIGH, "Leaving ListManager.updateNoteSequence");\r
        }\r
        public void updateNoteGuid(String oldGuid, String newGuid, boolean updateDatabase) {\r
                logger.log(logger.HIGH, "Entering ListManager.updateNoteGuid");\r
-               \r
                if (updateDatabase) \r
                        conn.getNoteTable().updateNoteGuid(oldGuid, newGuid);\r
-               \r
-               for (int i=0; i<masterNoteIndex.size(); i++) {\r
-                       if (masterNoteIndex.get(i).getGuid() != null && masterNoteIndex.get(i).getGuid().equals(oldGuid)) {\r
-                               masterNoteIndex.get(i).setGuid(newGuid);\r
-                               i=masterNoteIndex.size()+1;\r
-                       }\r
-               }\r
-               for (int i=0; i<noteIndex.size(); i++) {\r
-                       if (noteIndex.get(i).getGuid() != null && noteIndex.get(i).getGuid().equals(oldGuid)) {\r
-                               noteIndex.get(i).setGuid(newGuid);\r
-                               i=noteIndex.size()+1;\r
-                       }\r
-               }\r
+               noteModel.updateNoteGuid(oldGuid, newGuid);\r
                logger.log(logger.HIGH, "Leaving ListManager.updateNoteGuid");\r
 \r
        }\r
@@ -844,14 +748,7 @@ public class ListManager  {
                logger.log(logger.HIGH, "Leaving ListManager.updateTagGuid");\r
 \r
        }\r
-       // Count tag results\r
-//     @SuppressWarnings("unused")\r
-//     private void reloadTagCount() {\r
-//             tagCounterRunner.threadLock.lock(); \r
-//             tagCounterRunner.setNoteIndex(getNoteIndex());\r
-//             QThreadPool.globalInstance().tryStart(tagCounterRunner);\r
-//             tagCounterRunner.threadLock.unlock();\r
-//     }\r
+\r
 \r
        //************************************************************************************\r
        //************************************************************************************\r
@@ -863,7 +760,7 @@ public class ListManager  {
                for (int i=0; i<getNotebookIndex().size(); i++) {\r
                        if (getNotebookIndex().get(i).getGuid().equals(guid)) {\r
                                getNotebookIndex().remove(i);\r
-                               i=masterNoteIndex.size();\r
+                               i=getMasterNoteIndex().size();\r
                        }\r
                }\r
                conn.getNotebookTable().expungeNotebook(guid, true);            \r
@@ -905,9 +802,6 @@ public class ListManager  {
        //**  Load and filter the note index\r
        //************************************************************************************\r
        //************************************************************************************\r
-//     public void clearNoteIndexSearch() {\r
-//             setNoteIndex(masterNoteIndex);\r
-//     }\r
        // Load the note index based upon what the user wants.\r
        public void loadNotesIndex() {\r
                logger.log(logger.EXTREME, "Entering ListManager.loadNotesIndex()");\r
@@ -918,13 +812,13 @@ public class ListManager  {
                List<Note> index = new ArrayList<Note>();\r
                \r
                List<Note> matches;\r
-               if (enSearchChanged || masterNoteIndex == null)\r
+               if (enSearchChanged || getMasterNoteIndex() == null)\r
                        matches = enSearch.matchWords();\r
                else\r
-                       matches = masterNoteIndex;\r
+                       matches = getMasterNoteIndex();\r
                \r
                if (matches == null)\r
-                       matches = masterNoteIndex;\r
+                       matches = getMasterNoteIndex();\r
                \r
                for (int i=0; i<matches.size(); i++) {\r
                        Note n = matches.get(i);\r
@@ -964,7 +858,7 @@ public class ListManager  {
                        notebookCounterRunner.setNoteIndex(index);\r
                        notebookCounterRunner.release(CounterRunner.NOTEBOOK);\r
                } else {\r
-                       notebookCounterRunner.setNoteIndex(masterNoteIndex);\r
+                       notebookCounterRunner.setNoteIndex(getMasterNoteIndex());\r
                        notebookCounterRunner.release(CounterRunner.NOTEBOOK_ALL);\r
                }\r
                logger.log(logger.EXTREME, "Leaving ListManager.countNotebookResults()");\r
@@ -1021,18 +915,17 @@ public class ListManager  {
        \r
        \r
        public void updateNoteTitleColor(String guid, Integer color) {\r
-               titleColors.remove(guid);\r
-               titleColors.put(guid, color);\r
+               noteModel.updateNoteTitleColor(guid, color);\r
                conn.getNoteTable().setNoteTitleColor(guid, color);\r
        }\r
        public void loadNoteTitleColors() {\r
                List<Pair<String,Integer>> colors = conn.getNoteTable().getNoteTitleColors();\r
-               if (titleColors == null)\r
-                       titleColors = new HashMap<String,Integer>();\r
+               if (noteModel.getTitleColors() == null)\r
+                       noteModel.setTitleColors(new HashMap<String,Integer>());\r
                else\r
-                       titleColors.clear();\r
+                       noteModel.getTitleColors().clear();\r
                for (int i=0; i<colors.size(); i++) {\r
-                       titleColors.put(colors.get(i).getFirst(), colors.get(i).getSecond());\r
+                       noteModel.getTitleColors().put(colors.get(i).getFirst(), colors.get(i).getSecond());\r
                }\r
        }\r
        \r
@@ -1050,8 +943,6 @@ public class ListManager  {
                }\r
        }\r
        \r
-       \r
-       \r
        public boolean threadCheck(int id) {\r
                if (id == Global.notebookCounterThreadId) \r
                        return notebookThread.isAlive();\r