OSDN Git Service

操作ログの収集を一時停止するボタンを追加した
authoryuki <kimaira7@gmail.com>
Sat, 7 Sep 2013 06:01:47 +0000 (15:01 +0900)
committeryuki <kimaira7@gmail.com>
Sat, 7 Sep 2013 06:01:47 +0000 (15:01 +0900)
src/cx/fbn/nevernote/Global.java
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/gui/RensoNoteList.java
src/cx/fbn/nevernote/gui/RensoNoteListDock.java [new file with mode: 0644]
src/cx/fbn/nevernote/icons/haltLog.png [new file with mode: 0644]
src/cx/fbn/nevernote/sql/HistoryTable.java

index c69f16c..d10d6e4 100644 (file)
@@ -2414,5 +2414,30 @@ public class Global {
                
                return success;
        }
+       
+    // 操作ログを取らないモードのボタン状態
+    public static boolean isHaltLogButton() {
+               settings.beginGroup("RensoNoteList");
+               try {
+                       String text = (String)settings.value("haltOperationLog", "false");
+                       settings.endGroup();
+                       if (text.equalsIgnoreCase("true"))
+                               return true;
+                       else
+                               return false;
+               } catch (java.lang.ClassCastException e) {
+                       Boolean value = (Boolean) settings.value("haltOperationLog", true);
+                       settings.endGroup();
+                       return value;
+               }
+    }
+    public static void saveHaltLogButton(boolean val) {
+               settings.beginGroup("RensoNoteList");
+               if (val)
+                       settings.setValue("haltOperationLog", "true");
+               else
+                       settings.setValue("haltOperationLog", "false");
+               settings.endGroup();
+    }
 }
 
index a0322c9..549c81d 100644 (file)
@@ -106,7 +106,6 @@ import com.trolltech.qt.gui.QComboBox;
 import com.trolltech.qt.gui.QCursor;
 import com.trolltech.qt.gui.QDesktopServices;
 import com.trolltech.qt.gui.QDialog;
-import com.trolltech.qt.gui.QDockWidget;
 import com.trolltech.qt.gui.QFileDialog;
 import com.trolltech.qt.gui.QFileDialog.AcceptMode;
 import com.trolltech.qt.gui.QFileDialog.FileMode;
@@ -181,6 +180,7 @@ import cx.fbn.nevernote.gui.ExternalBrowse;
 import cx.fbn.nevernote.gui.MainMenuBar;
 import cx.fbn.nevernote.gui.NotebookTreeWidget;
 import cx.fbn.nevernote.gui.RensoNoteList;
+import cx.fbn.nevernote.gui.RensoNoteListDock;
 import cx.fbn.nevernote.gui.SavedSearchTreeWidget;
 import cx.fbn.nevernote.gui.SearchPanel;
 import cx.fbn.nevernote.gui.TabBrowse;
@@ -366,8 +366,7 @@ public class NeverNote extends QMainWindow{
        // ICHANGED
        private final TabBrowserWidget tabBrowser; // ブラウザウィンドウをタブ化
        private final HashMap<Integer, TabBrowse> tabWindows; // タブウィンドウ
-       private final RensoNoteList rensoNoteList; // 連想ノートリスト
-       private final QDockWidget rensoNoteListDock; // 連想ノートリストドックウィジェット
+       private final RensoNoteListDock rensoNoteListDock; // 連想ノートリストドックウィジェット
        ClipBoardObserver cbObserver;
        String rensoNotePressedItemGuid;
        
@@ -628,11 +627,7 @@ public class NeverNote extends QMainWindow{
         
                // ICHANGED
                // 連想ノートリストをセットアップ
-               rensoNoteList = new RensoNoteList(conn, this, syncRunner);
-               rensoNoteList.itemPressed.connect(this,
-                               "rensoNoteItemPressed(QListWidgetItem)");
-               rensoNoteListDock = new QDockWidget(tr("Renso Note List"), this);
-               rensoNoteListDock.setWidget(rensoNoteList);
+        rensoNoteListDock = new RensoNoteListDock(conn, this, syncRunner, iconPath, tr("Renso Note List"));
                addDockWidget(DockWidgetArea.RightDockWidgetArea, rensoNoteListDock);
 
                if (Global.getListView() == Global.View_List_Wide) {
@@ -1255,7 +1250,7 @@ public class NeverNote extends QMainWindow{
                saveWindowState();
                
                // 連想ノートリストのEvernote関連ノート取得スレッドを終了
-               rensoNoteList.stopThread();
+               rensoNoteListDock.getRensoNoteList().stopThread();
 
                if (tempFiles != null)
                        tempFiles.clear();
@@ -4062,7 +4057,7 @@ public class NeverNote extends QMainWindow{
 
                // ICHANGED
                // 連想ノートリストを更新
-               rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+               rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
                
                waitCursor(false);
                logger.log(logger.HIGH, "Leaving NeverNote.noteTableSelection");
@@ -6748,7 +6743,7 @@ public class NeverNote extends QMainWindow{
                } else
                        indexThreadDeadCount=0;
 
-               if (!rensoNoteList.getEnRelatedNotesThread().isAlive()) {
+               if (!rensoNoteListDock.getRensoNoteList().getEnRelatedNotesThread().isAlive()) {
                        enRelatedNotesThreadDeadCount++;
                        if (enRelatedNotesThreadDeadCount > MAX && !disableENRelatedNotesThreadCheck) {
                                QMessageBox.information(this, tr("A thread has died."), tr("It appears as the Evernote Related Notes thread has died.  I recommend "+
@@ -7564,7 +7559,7 @@ public class NeverNote extends QMainWindow{
                refreshEvernoteNote(true);
 
                // 連想ノートリストを更新
-               rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+               rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
        }
        
        // ICHANGD
@@ -7624,7 +7619,7 @@ public class NeverNote extends QMainWindow{
        private void rensoNoteItemPressed(QListWidgetItem current) {
                logger.log(logger.HIGH, "Nevernote.rensoNoteSelectionChangeに入った");
 
-               rensoNotePressedItemGuid = rensoNoteList.getNoteGuid(current);
+               rensoNotePressedItemGuid = rensoNoteListDock.getRensoNoteList().getNoteGuid(current);
                
                // 右クリックだったら終了
                if (QApplication.mouseButtons().isSet(MouseButton.RightButton)) {
@@ -7691,7 +7686,7 @@ public class NeverNote extends QMainWindow{
                // 除外ノートテーブルに追加
                conn.getExcludedTable().addExclusion(guid, currentNoteGuid);
                
-               rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+               rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
        }
        
        // ICHANGED
@@ -7710,7 +7705,7 @@ public class NeverNote extends QMainWindow{
                // スター付きノートテーブルに追加
                conn.getStaredTable().addStaredItem(currentNoteGuid, guid);
                
-               rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+               rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
        }
        
        // ICHANGED
@@ -7729,7 +7724,7 @@ public class NeverNote extends QMainWindow{
                // スター付きノートテーブルから削除
                conn.getStaredTable().removeStaredItem(currentNoteGuid, guid);
                
-               rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+               rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
        }
        
        // ICHANGED
@@ -7773,6 +7768,6 @@ public class NeverNote extends QMainWindow{
        
        // 連想ノートリストのgetter
        public RensoNoteList getRensoNoteList() {
-               return rensoNoteList;
+               return rensoNoteListDock.getRensoNoteList();
        }
 }
index 75018a4..bd6b31c 100644 (file)
@@ -65,9 +65,9 @@ public class RensoNoteList extends QListWidget {
        private String guid;
        private int allPointSum;
 
-       public RensoNoteList(DatabaseConnection c, NeverNote p, SyncRunner syncRunner) {
-               logger = new ApplicationLogger("rensoNoteList.log");
-               logger.log(logger.HIGH, "Setting up rensoNoteList");
+       public RensoNoteList(DatabaseConnection c, NeverNote p, SyncRunner syncRunner, ApplicationLogger logger) {
+               this.logger = logger;
+               this.logger.log(this.logger.HIGH, "Setting up rensoNoteList");
                allPointSum = 0;
 
                this.conn = c;
@@ -77,7 +77,7 @@ public class RensoNoteList extends QListWidget {
                this.guid = new String();
                mergedHistory = new HashMap<String, Integer>();
                enRelatedNotesCache = new HashMap<String, List<String>>();
-               this.enRelatedNotesRunner = new ENRelatedNotesRunner(this.syncRunner, logger);
+               this.enRelatedNotesRunner = new ENRelatedNotesRunner(this.syncRunner, this.logger);
                this.enRelatedNotesRunner.enRelatedNotesSignal.getENRelatedNotesFinished.connect(this, "enRelatedNotesComplete()");
                this.enRelatedNotesThread = new QThread(enRelatedNotesRunner, "ENRelatedNotes Thread");
                this.getEnRelatedNotesThread().start();
@@ -110,12 +110,18 @@ public class RensoNoteList extends QListWidget {
                menu.addAction(excludeNoteAction);
                menu.aboutToHide.connect(this, "contextMenuHidden()");
                
-               logger.log(logger.HIGH, "rensoNoteList setup complete");
+               this.logger.log(this.logger.HIGH, "rensoNoteList setup complete");
+       }
+       
+       // オーバーロード
+       // 現在開いているノートの連想ノートリストをリフレッシュ
+       public void refreshRensoNoteList() {
+               refreshRensoNoteList(guid);
        }
 
        // 連想ノートリストをリフレッシュ
        public void refreshRensoNoteList(String guid) {
-               logger.log(logger.HIGH, "Entering RensoNoteList.refreshRensoNoteList");
+               logger.log(logger.HIGH, "Entering RensoNoteList.refreshRensoNoteList guid = " + guid);
 
                this.clear();
                rensoNoteListItems.clear();
@@ -149,6 +155,8 @@ public class RensoNoteList extends QListWidget {
        
        // 操作履歴をデータベースから取得してノートごとの関連度を算出、その後mergedHistoryに追加
        private void calculateHistory(String guid) {
+               logger.log(logger.EXTREME, "Entering RensoNoteList.calculateHistory guid = " + guid);
+               
                // browseHistory<guid, 回数(ポイント)>
                HashMap<String, Integer> browseHistory = conn.getHistoryTable().getBehaviorHistory("browse", guid);
                addWeight(browseHistory, Global.getBrowseWeight());
@@ -178,20 +186,27 @@ public class RensoNoteList extends QListWidget {
                HashMap<String, Integer> sameNotebookHistory = conn.getHistoryTable().getBehaviorHistory("sameNotebook", guid);
                addWeight(sameNotebookHistory, Global.getSameNotebookWeight());
                mergedHistory = mergeHistory(sameNotebookHistory, mergedHistory);
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.calculateHistory");
        }
        
        // 操作回数に重み付けする
        private void addWeight(HashMap<String, Integer> history, int weight){
+               logger.log(logger.EXTREME, "Entering RensoNoteList.addWeight");
+               
                Set<String> keySet = history.keySet();
                Iterator<String> hist_iterator = keySet.iterator();
                while(hist_iterator.hasNext()){
                        String key = hist_iterator.next();
                        history.put(key, history.get(key) * weight);
                }
+               
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.addWeight");
        }
        
        // 連想ノートリストを再描画
        private void repaintRensoNoteList(boolean needClear) {
+               logger.log(logger.EXTREME, "Entering RensoNoteList.repaintRensoNoteList");
+               
                if (needClear) {
                        this.clear();
                        rensoNoteListItems.clear();
@@ -209,10 +224,14 @@ public class RensoNoteList extends QListWidget {
                }
                
                addRensoNoteList(mergedHistory);
+               
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.repaintRensoNoteList");
        }
        
        // 引数1と引数2をマージしたハッシュマップを返す
        private HashMap<String, Integer> mergeHistory(HashMap<String, Integer> History1, HashMap<String, Integer> History2){
+               logger.log(logger.EXTREME, "Entering RensoNoteList.mergeHistory");
+               
                HashMap<String, Integer> mergedHistory = new HashMap<String, Integer>();
                
                mergedHistory.putAll(History1);
@@ -227,12 +246,15 @@ public class RensoNoteList extends QListWidget {
                                mergedHistory.put(key, History2.get(key));
                        }
                }
-
+               
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.mergeHistory");
                return mergedHistory;
        }
        
        // 連想ノートリストにハッシュマップのデータを追加
        private void addRensoNoteList(HashMap<String, Integer> History){
+               logger.log(logger.EXTREME, "Entering RensoNoteList.addRensoNoteList");
+               
                String currentNoteGuid = new String(parent.getCurrentNoteGuid());
                
                // スター付きノートとスター無しノートを分ける
@@ -301,6 +323,7 @@ public class RensoNoteList extends QListWidget {
                                }
                        }
                }
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.addRensoNoteList");
        }
 
        // リストのアイテムから対象ノートのguidを取得
@@ -311,6 +334,8 @@ public class RensoNoteList extends QListWidget {
        // 関連ノートリストの右クリックメニュー
        @Override
        public void contextMenuEvent(QContextMenuEvent event){
+               logger.log(logger.EXTREME, "Entering RensoNoteList.contextMenuEvent");
+               
                if (rensoNotePressedItemGuid == null || rensoNotePressedItemGuid.equals("")) {
                        return;
                }
@@ -337,6 +362,8 @@ public class RensoNoteList extends QListWidget {
                menu.exec(event.globalPos());
                
                rensoNotePressedItemGuid = null;
+               
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.contextMenuEvent");
        }
        
        // コンテキストメニューが表示されているかどうか
@@ -356,16 +383,22 @@ public class RensoNoteList extends QListWidget {
        // ユーザが連想ノートリストのアイテムを選択した時の処理
        @SuppressWarnings("unused")
        private void rensoNoteItemPressed(QListWidgetItem current) {
+               logger.log(logger.HIGH, "Entering RensoNoteList.rensoNoteItemPressed");
+               
                rensoNotePressedItemGuid = null;
                // 右クリックだったときの処理
                if (QApplication.mouseButtons().isSet(MouseButton.RightButton)) {
                        rensoNotePressedItemGuid = getNoteGuid(current);
                }
+               
+               logger.log(logger.HIGH, "Leaving RensoNoteList.rensoNoteItemPressed");
        }
        
        // Evernoteの関連ノートの取得が完了
        @SuppressWarnings("unused")
        private void enRelatedNotesComplete() {
+               logger.log(logger.HIGH, "Entering RensoNoteList.enRelatedNotesComplete");
+               
                Pair<String, List<String>> enRelatedNoteGuidPair = enRelatedNotesRunner.getENRelatedNoteGuids();        // <元ノートguid, 関連ノートguidリスト>
                
                if (enRelatedNoteGuidPair == null) {
@@ -388,10 +421,14 @@ public class RensoNoteList extends QListWidget {
                                }
                        }
                }
+               
+               logger.log(logger.HIGH, "Leaving RensoNoteList.enRelatedNotesComplete");
        }
        
        // Evernote関連ノートの関連度情報をmergedHistoryに追加
        private void addENRelatedNotes(List<String> relatedNoteGuids) {
+               logger.log(logger.EXTREME, "Entering RensoNoteList.addENRelatedNotes");
+               
                // Evernote関連ノート<guid, 関連ポイント>
                HashMap<String, Integer> enRelatedNotes = new HashMap<String, Integer>();
                
@@ -400,13 +437,19 @@ public class RensoNoteList extends QListWidget {
                }
                
                mergedHistory = mergeHistory(enRelatedNotes, mergedHistory);
+               
+               logger.log(logger.EXTREME, "Leaving RensoNoteList.addENRelatedNotes");
        }
        
        // Evernoteの関連ノート取得スレッドを終了させる
        public boolean stopThread() {
+               logger.log(logger.HIGH, "Entering RensoNoteList.stopThread");
+               
                if (enRelatedNotesRunner.addStop()) {
+                       logger.log(logger.HIGH, "RensoNoteList.stopThread succeeded");
                        return true;
                }
+               logger.log(logger.HIGH, "RensoNoteList.stopThread failed");
                return false;
        }
 
diff --git a/src/cx/fbn/nevernote/gui/RensoNoteListDock.java b/src/cx/fbn/nevernote/gui/RensoNoteListDock.java
new file mode 100644 (file)
index 0000000..ad27680
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * This file is part of NeighborNote
+ * Copyright 2013 Yuki Takahashi
+ * 
+ * This file may be licensed under the terms of of the
+ * GNU General Public License Version 2 (the ``GPL'').
+ *
+ * Software distributed under the License is distributed
+ * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied. See the GPL for the specific language
+ * governing rights and limitations.
+ *
+ * You should have received a copy of the GPL along with this
+ * program. If not, go to http://www.gnu.org/licenses/gpl.html
+ * or write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+*/
+
+package cx.fbn.nevernote.gui;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.gui.QDockWidget;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QMessageBox;
+import com.trolltech.qt.gui.QPushButton;
+import com.trolltech.qt.gui.QSizePolicy;
+import com.trolltech.qt.gui.QToolBar;
+import com.trolltech.qt.gui.QVBoxLayout;
+import com.trolltech.qt.gui.QWidget;
+
+import cx.fbn.nevernote.Global;
+import cx.fbn.nevernote.NeverNote;
+import cx.fbn.nevernote.sql.DatabaseConnection;
+import cx.fbn.nevernote.threads.SyncRunner;
+import cx.fbn.nevernote.utilities.ApplicationLogger;
+
+public class RensoNoteListDock extends QDockWidget {
+       private final DatabaseConnection        conn;
+       private final NeverNote                         parent;
+       private final SyncRunner                        syncRunner;
+       private final ApplicationLogger         logger;
+       private final QPushButton                       haltLogButton;                  // 操作ログの取得を停止ボタン
+       private final RensoNoteList                     rensoNoteList;                  // 連想ノートリスト
+       private final QToolBar                          rensoToolBar;                   // 連想ノートリストドックのツールバー
+       
+       private final String                            iconPath;
+       
+       public RensoNoteListDock(DatabaseConnection conn, NeverNote parent, SyncRunner syncRunner, String iconPath, String title) {
+               super(title);
+               
+               this.logger = new ApplicationLogger("rensoNoteList.log");
+               this.logger.log(this.logger.HIGH, "Setting up rensoNoteListDock");
+               
+               this.conn = conn;
+               this.parent = parent;
+               this.iconPath = iconPath;
+               this.syncRunner = syncRunner;
+               
+               QVBoxLayout vLayout = new QVBoxLayout();
+               rensoToolBar = new QToolBar();
+               vLayout.addWidget(rensoToolBar);
+               
+               haltLogButton = new QPushButton();
+               QIcon haltLogIcon = new QIcon(this.iconPath + "haltLog.png");
+               haltLogButton.setIcon(haltLogIcon);
+               haltLogButton.setIconSize(new QSize(24, 24));
+               haltLogButton.setToolTip(tr("Halt Collectiong Operation Log"));
+               haltLogButton.setCheckable(true);
+               haltLogButton.setChecked(Global.isHaltLogButton());
+               haltLogButton.toggled.connect(this, "haltLogToggled(boolean)");
+               
+               // ログ取得停止ボタンを右寄せするためのスペーサ
+               QWidget spacer = new QWidget();
+               spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding);
+               rensoToolBar.addWidget(spacer);
+               rensoToolBar.addWidget(haltLogButton);
+               
+               rensoNoteList = new RensoNoteList(this.conn, this.parent, this.syncRunner, this.logger);
+               getRensoNoteList().itemPressed.connect(this.parent, "rensoNoteItemPressed(QListWidgetItem)");
+               vLayout.addWidget(getRensoNoteList());
+
+               QWidget w = new QWidget();
+               w.setLayout(vLayout);
+               this.setWidget(w);
+       }
+       
+       @SuppressWarnings("unused")
+       private void haltLogToggled(boolean checked) {
+               logger.log(logger.EXTREME, "RensoNoteListDock.haltLogToggled");
+               
+               if (checked) {
+                       QMessageBox.information(this, tr("Halt Collectiong Operation Log"), tr("Collecting operation log halted.\nYou can resume, if you press this button again."));
+               }
+               Global.saveHaltLogButton(checked);
+       }
+
+       public RensoNoteList getRensoNoteList() {
+               return rensoNoteList;
+       }
+}
diff --git a/src/cx/fbn/nevernote/icons/haltLog.png b/src/cx/fbn/nevernote/icons/haltLog.png
new file mode 100644 (file)
index 0000000..8c0df76
Binary files /dev/null and b/src/cx/fbn/nevernote/icons/haltLog.png differ
index 3ba31bf..a00d30b 100644 (file)
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
+import cx.fbn.nevernote.Global;
 import cx.fbn.nevernote.sql.driver.NSqlQuery;
 import cx.fbn.nevernote.utilities.ApplicationLogger;
 
@@ -58,6 +59,11 @@ public class HistoryTable {
                NSqlQuery query = new NSqlQuery(db.getBehaviorConnection());
                boolean excludedCheck = false;
                
+               // 操作ログの取得を停止中
+               if (Global.isHaltLogButton()) {
+                       return;
+               }
+               
                if (behaviorType == null) {
                        return;
                }