+
+ // タブが変更された
+ private void tabWindowChanged(int index) {
+ if (index < 0 || index >= tabBrowser.count()) {
+ return;
+ }
+
+ saveNote();
+
+ TabBrowse tab = (TabBrowse) tabBrowser.widget(index);
+ if (tab.getBrowserWindow().getNote() != null) {
+ currentNoteGuid = tab.getBrowserWindow().getNote().getGuid();
+ currentNote = tab.getBrowserWindow().getNote();
+ } else {
+ currentNoteGuid = "";
+ currentNote = null;
+ }
+
+ // 選択ノートを更新
+ selectedNoteGUIDs.clear();
+ if (currentNoteGuid != null && !currentNoteGuid.equals("")) {
+ selectedNoteGUIDs.add(currentNoteGuid);
+ }
+
+ // browserWindowを更新
+ browserWindow.noteSignal.noteChanged.disconnect(this,"setNoteDirty()");
+ browserWindow.focusLost.disconnect(this, "saveNote()");
+ browserWindow = tab.getBrowserWindow();
+ browserWindow.noteSignal.noteChanged.connect(this, "setNoteDirty()");
+ browserWindow.focusLost.connect(this, "saveNote()");
+ // メニューバーのボタンを新しいbrowserWindowに合わせる
+ menuBar.refreshTargetWindow();
+
+ // 現在ゴミ箱かつ移るタブがアクティブなら通常テーブルに、現在通常テーブルかつこれから非アクティブのタブに移るならゴミ箱を表示させる
+ boolean nextIsActive;
+ if (tab.getBrowserWindow().getNote() != null) {
+ nextIsActive = tab.getBrowserWindow().getNote().isActive();
+ } else {
+ nextIsActive = true;
+ }
+ if (Global.showDeleted && nextIsActive) {
+ switchNoteTable(false);
+ } else if (!Global.showDeleted && !nextIsActive) {
+ switchNoteTable(true);
+ }
+
+ // noteTableViewの選択を変更するとselectionChangedが発生してしまうので一度切断
+ noteTableView.selectionModel().selectionChanged.disconnect(this,"noteTableSelection()");
+ scrollToGuid(currentNoteGuid);
+ // 再接続
+ noteTableView.selectionModel().selectionChanged.connect(this,"noteTableSelection()");
+
+ menuBar.noteDuplicateAction.setEnabled(true);
+ menuBar.noteOnlineHistoryAction.setEnabled(true);
+ menuBar.noteMergeAction.setEnabled(true);
+
+ if (Global.showDeleted) {
+ menuBar.noteDuplicateAction.setEnabled(false);
+ }
+ if (!Global.isConnected) {
+ menuBar.noteOnlineHistoryAction.setEnabled(false);
+ }
+ menuBar.noteMergeAction.setEnabled(false);
+ try {
+ int row = noteTableView.selectionModel().selectedRows().get(0).row();
+ if (row == 0)
+ upButton.setEnabled(false);
+ else
+ upButton.setEnabled(true);
+ if (row < listManager.getNoteTableModel().rowCount() - 1)
+ downButton.setEnabled(true);
+ else
+ downButton.setEnabled(false);
+ } catch (Exception e) {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
+
+ int currentIndex = tabBrowser.currentIndex();
+ ArrayList<String> histGuids = historyGuids.get(currentIndex);
+ int histPosition = historyPosition.get(currentIndex);
+
+ // prev, nextボタンの有効・無効化
+ nextButton.setEnabled(true);
+ prevButton.setEnabled(true);
+
+ if (histPosition <= 1){
+ prevButton.setEnabled(false);
+ }
+ if (histPosition == histGuids.size()){
+ nextButton.setEnabled(false);
+ }
+
+ refreshEvernoteNote(true);
+
+ // 連想ノートリストを更新
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
+ }
+
+ // 生存ノートテーブル→ゴミ箱(またはその逆)に切り替える
+ private void switchNoteTable(boolean toDeleted) {
+ clearNotebookFilter();
+ clearTagFilter();
+ clearAttributeFilter();
+ clearSavedSearchFilter();
+
+ listManager.getSelectedNotebooks().clear();
+ listManager.getSelectedTags().clear();
+ listManager.setSelectedSavedSearch("");
+
+ // toggle the add buttons
+ newButton.setEnabled(!newButton.isEnabled());
+ menuBar.noteAdd.setEnabled(newButton.isEnabled());
+ menuBar.noteAddNewTab.setEnabled(newButton.isEnabled());
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
+ }
+ menuBar.noteAdd.setVisible(true);
+
+ if (!toDeleted) { // 生存ノートテーブルへ
+ trashTree.itemSelectionChanged.disconnect(this, "trashTreeSelection()");
+ trashTree.clearSelection();
+ trashTree.itemSelectionChanged.connect(this, "trashTreeSelection()");
+ Global.showDeleted = false;
+ menuBar.noteRestoreAction.setEnabled(false);
+ menuBar.noteRestoreAction.setVisible(false);
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ rensoNoteListDock.setEnabled(true);
+ } else { // ゴミ箱へ
+ trashTree.itemSelectionChanged.disconnect(this, "trashTreeSelection()");
+ trashTree.setCurrentItem(trashTree.getTrashItem());
+ trashTree.itemSelectionChanged.connect(this, "trashTreeSelection()");
+ Global.showDeleted = true;
+ menuBar.noteRestoreAction.setEnabled(true);
+ menuBar.noteRestoreAction.setVisible(true);
+ // ゴミ箱を開く。連想ノートリストをOFFに。
+ rensoNoteListDock.setEnabled(false);
+ }
+
+ listManager.loadNotesIndex();
+ // noteTableViewの選択を変更するとselectionChangedが発生してしまうので一度切断
+ noteTableView.selectionModel().selectionChanged.disconnect(this,"noteTableSelection()");
+ noteIndexUpdated(false);
+ // 再接続
+ noteTableView.selectionModel().selectionChanged.connect(this,"noteTableSelection()");
+
+ browserWindow.setReadOnly(!newButton.isEnabled());
+ }
+
+ // ユーザが連想ノートリストのアイテムを選択した時の処理
+ @SuppressWarnings("unused")
+ private void rensoNoteItemPressed(QListWidgetItem current) {
+ logger.log(logger.HIGH, "Nevernote.rensoNoteSelectionChangeに入った");
+
+ rensoNotePressedItemGuid = rensoNoteListDock.getRensoNoteList().getNoteGuid(current);
+
+ // 右クリックだったら終了
+ if (QApplication.mouseButtons().isSet(MouseButton.RightButton)) {
+ return;
+ }
+
+ saveNote();
+
+ String prevCurrentNoteGuid = new String(currentNoteGuid);
+
+ 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];
+ if (tableGuid.equals(rensoNotePressedItemGuid)) {
+ noteTableView.selectRow(i);
+ break;
+ }
+ }
+ }
+
+ // 連想ノートリストアイテムクリック操作を記録
+ conn.getHistoryTable().addHistory("rensoItemClick", prevCurrentNoteGuid, currentNoteGuid);
+
+ logger.log(logger.HIGH, "Nevernote.rensoNoteSelectionChangeを出た");
+ }
+
+ // 関連ノートリストからノートを除外する
+ @SuppressWarnings("unused")
+ private void excludeNote() {
+ if (rensoNotePressedItemGuid != null) {
+ saveNote();
+ excludeNote(rensoNotePressedItemGuid);
+ }
+ }
+
+ // 関連ノートリストからノートを除外する
+ private void excludeNote(String guid) {
+ if (Global.verifyExclude()) {
+ String msg;
+ Note note = conn.getNoteTable().getNote(guid, false, false, false, false, false);
+ String title = note.getTitle();
+ if (title != null) {
+ msg = new String(tr("Exclude note \"") +title +"\"?");
+ } else {
+ msg = new String(tr("Exclude note selected note?"));
+ }
+
+ if (QMessageBox.question(this, tr("Confirmation"), msg,
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No)==StandardButton.No.value() && Global.verifyDelete() == true) {
+ return;
+ }
+ }
+
+ // Historyデータベースから除外するノートのデータを削除
+ conn.getHistoryTable().expungeHistory(guid, currentNoteGuid);
+
+ // 除外ノートテーブルに追加
+ conn.getExcludedTable().addExclusion(guid, currentNoteGuid);
+
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
+ }
+
+ // 関連ノートリストのノートにスターを付ける
+ @SuppressWarnings("unused")
+ private void starNote() {
+ if (rensoNotePressedItemGuid != null) {
+ saveNote();
+ starNote(rensoNotePressedItemGuid);
+ }
+ }
+
+ // 関連ノートリストのノートにスターを付ける
+ private void starNote(String guid) {
+ // スター付きノートテーブルに追加
+ conn.getStaredTable().addStaredItem(currentNoteGuid, guid);
+
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
+ }
+
+ // 関連ノートリストのノートからスターを外す
+ @SuppressWarnings("unused")
+ private void unstarNote() {
+ if (rensoNotePressedItemGuid != null) {
+ saveNote();
+ unstarNote(rensoNotePressedItemGuid);
+ }
+ }
+
+ // 関連ノートリストのノートからスターを外す
+ private void unstarNote(String guid) {
+ // スター付きノートテーブルから削除
+ conn.getStaredTable().removeStaredItem(currentNoteGuid, guid);
+
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
+ }
+
+ // currentNoteGuidを返す
+ public String getCurrentNoteGuid() {
+ return currentNoteGuid;
+ }
+
+ @SuppressWarnings("unused")
+ // タブ入れ替えによってタブインデックスが変わったので、インデックスで管理しているハッシュマップ達も入れ替える
+ private void tabIndexChanged(int from, int to) {
+ // tabWindows
+ TabBrowse tab = tabWindows.get(from);
+ tabWindows.put(from, tabWindows.get(to));
+ tabWindows.put(to, tab);
+ // noteDirty
+ boolean isNoteDirty = noteDirty.get(from);
+ noteDirty.put(from, noteDirty.get(to));
+ noteDirty.put(to, isNoteDirty);
+ // inkNote
+ boolean isInkNote = inkNote.get(from);
+ inkNote.put(from, inkNote.get(to));
+ inkNote.put(to, isInkNote);
+ // readOnly
+ boolean isReadOnly = readOnly.get(from);
+ readOnly.put(from, readOnly.get(to));
+ readOnly.put(to, isReadOnly);
+ // historyGuids
+ ArrayList<String> histGuids = historyGuids.get(from);
+ historyGuids.put(from, historyGuids.get(to));
+ historyGuids.put(to, histGuids);
+ // historyPosition
+ int histPosition = historyPosition.get(from);
+ historyPosition.put(from, historyPosition.get(to));
+ historyPosition.put(to, histPosition);
+ // fromHistory
+ boolean fromHist = fromHistory.get(from);
+ fromHistory.put(from, fromHistory.get(to));
+ fromHistory.put(to, fromHist);
+ }
+
+ // 連想ノートリストのgetter
+ public RensoNoteList getRensoNoteList() {
+ return rensoNoteListDock.getRensoNoteList();
+ }
+
+ // 帯域制限の超過をユーザに通知
+ @SuppressWarnings("unused")
+ private void informRateLimit(Integer rateLimitDuration) {
+ QMessageBox.warning(this, tr("Rate limit reached"), tr("Evernote usage has been temporarily exceeded. Please try again in ") + + rateLimitDuration + tr(" seconds."));
+ }
+
+ // ツールバーの「新規」ボタンの接続スロットを設定
+ public void connectNewButtonSlot(String slot) {
+ newButton.triggered.disconnect();
+ newButton.triggered.connect(this, slot);
+ }