OSDN Git Service

キーボードショートカットの追加
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / Viewer.java
index d607136..a63189c 100644 (file)
@@ -20,14 +20,7 @@ import java.awt.Toolkit;
 import java.awt.TrayIcon;\r
 import java.awt.datatransfer.Clipboard;\r
 import java.awt.datatransfer.StringSelection;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ComponentAdapter;\r
-import java.awt.event.ComponentEvent;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.awt.event.WindowAdapter;\r
-import java.awt.event.WindowEvent;\r
+import java.awt.event.*;\r
 import java.io.File;\r
 import java.io.IOException;\r
 import java.io.UnsupportedEncodingException;\r
@@ -50,21 +43,11 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;\r
 \r
 import javax.imageio.ImageIO;\r
-import javax.swing.ImageIcon;\r
-import javax.swing.JComponent;\r
-import javax.swing.JFrame;\r
-import javax.swing.JLabel;\r
-import javax.swing.JMenuItem;\r
-import javax.swing.JOptionPane;\r
-import javax.swing.JPopupMenu;\r
-import javax.swing.SwingUtilities;\r
-import javax.swing.ToolTipManager;\r
-import javax.swing.UIManager;\r
+import javax.swing.*;\r
 import javax.swing.event.ChangeEvent;\r
 import javax.swing.event.ChangeListener;\r
 \r
 import tainavi.HDDRecorder.RecType;\r
-import tainavi.SearchKey.TargetId;\r
 import tainavi.TVProgram.ProgFlags;\r
 import tainavi.TVProgram.ProgGenre;\r
 import tainavi.TVProgram.ProgOption;\r
@@ -73,12 +56,13 @@ import tainavi.TVProgram.ProgSubtype;
 import tainavi.TVProgram.ProgType;\r
 import tainavi.VWMainWindow.MWinTab;\r
 import tainavi.VWUpdate.UpdateResult;\r
+import tainavi.plugintv.Syobocal;\r
 \r
 \r
 /**\r
  * メインな感じ\r
  */\r
-public class Viewer extends JFrame implements ChangeListener,TickTimerListener,HDDRecorderListener {\r
+public class Viewer extends JFrame implements ChangeListener,TickTimerListener,HDDRecorderListener,CancelListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
        \r
@@ -420,6 +404,8 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        toolBar.setBatchReservationEnabled(true);\r
                        // スナップショットを有効にする\r
                        toolBar.setSnapShotEnabled(true);\r
+                       // 新聞形式以外ではマッチ枠を無効にする\r
+                       toolBar.setBorderToggleEnabled(true, bounds.getShowReservedBackground());\r
                }\r
 \r
                @Override\r
@@ -430,6 +416,8 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        toolBar.setBatchReservationEnabled(false);\r
                        // スナップショットを無効にする\r
                        toolBar.setSnapShotEnabled(false);\r
+                       // 新聞形式以外ではマッチ枠を無効にする\r
+                       toolBar.setBorderToggleEnabled(false, bounds.getShowReservedBackground());\r
                }\r
 \r
                @Override\r
@@ -569,7 +557,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        // ジャンル別背景色を有効にする\r
                        toolBar.setPaperColorDialogEnabled(true);\r
                        // マッチ枠を有効にする\r
-                       toolBar.setBorderToggleEnabled(true);\r
+                       toolBar.setBorderToggleEnabled(true, bounds.getShowMatchedBorder());\r
                }\r
 \r
                @Override\r
@@ -581,7 +569,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        // 新聞形式以外ではジャンル別背景色を無効にする\r
                        toolBar.setPaperColorDialogEnabled(false);\r
                        // 新聞形式以外ではマッチ枠を無効にする\r
-                       toolBar.setBorderToggleEnabled(false);\r
+                       toolBar.setBorderToggleEnabled(false, bounds.getShowMatchedBorder());\r
                }\r
 \r
                @Override\r
@@ -1248,7 +1236,12 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                reserved.redrawListByKeywordFilter(search, kStr);\r
                        }\r
                        else if ( mainWindow.getSelectedTab() == MWinTab.RECED ) {\r
-                               recorded.redrawListByKeywordFilter(search, kStr);\r
+                               if ( ! doFilter ) {\r
+                                       recorded.redrawListByKeyword(search, kStr);\r
+                               }\r
+                               else {\r
+                                       recorded.redrawListByErrorFilter();\r
+                               }\r
                        }\r
                        else {\r
                                if ( search != null ) {\r
@@ -1301,7 +1294,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                @Override\r
                protected boolean jumpToPassed(String passed) {\r
                        timer_now.pause();\r
-                       boolean b = paper.jumpToBangumi(null,passed);\r
+                       boolean b = paper.jumpToPassed(passed);\r
                        timer_now.start();\r
                        return b;\r
                }\r
@@ -1315,9 +1308,14 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                }\r
 \r
                @Override\r
-               protected void toggleMatchBorder() {\r
+               protected void toggleMatchBorder(boolean b) {\r
                        timer_now.pause();\r
-                       paper.toggleMatchBorder();\r
+                       if ( mainWindow.isTabSelected(MWinTab.LISTED) ) {\r
+                               listed.toggleReservedBackground(b);\r
+                       }\r
+                       else if ( mainWindow.isTabSelected(MWinTab.PAPER) ) {\r
+                               paper.toggleMatchBorder(b);\r
+                       }\r
                        timer_now.start();\r
                }\r
 \r
@@ -1386,11 +1384,6 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                }\r
 \r
                @Override\r
-               protected void toggleSettingTabVisible() {\r
-                       mainWindow.toggleShowSettingTabs();\r
-               }\r
-\r
-               @Override\r
                protected boolean isTabSelected(MWinTab tab) {\r
                        return mainWindow.isTabSelected(tab);\r
                }\r
@@ -1403,7 +1396,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        AbsKeywordDialog kD = new VWKeywordDialog();\r
                        CommonSwingUtils.setLocationCenter(Viewer.this,kD);\r
                        \r
-                       kD.open(search.getLabel(), search, srKeys, srGrps);\r
+                       kD.open(search.getLabel(), srKeys, srGrps, search);\r
                        kD.setVisible(true);\r
                        \r
                        if (kD.isRegistered()) {\r
@@ -1492,6 +1485,23 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
        }\r
        \r
        /**\r
+        * \r
+        */\r
+       @Override\r
+       public void cancelRised(CancelEvent e) {\r
+               if ( mainWindow.isTabSelected(MWinTab.RSVED) ) {\r
+                       if ( e.getCause() == CancelEvent.Cause.TOOLBAR_SEARCH ) {\r
+                               reserved.redrawListByKeywordFilter(null,null);\r
+                       }\r
+               }\r
+               else if ( mainWindow.isTabSelected(MWinTab.RECED) ) {\r
+                       if ( e.getCause() == CancelEvent.Cause.TOOLBAR_SEARCH ) {\r
+                               recorded.redrawListByKeyword(null,null);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /**\r
         * タイマーイベントが発生\r
         */\r
        @Override\r
@@ -1731,29 +1741,18 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                \r
                // 番組追跡へ追加する\r
                {\r
-                       final String label = tvd.title+" ("+tvd.center+")";\r
+                       final String label = TraceProgram.getNewLabel(tvd.title, tvd.center);\r
                        JMenuItem menuItem = new JMenuItem("番組追跡への追加【"+label+"】");\r
                        menuItem.addActionListener(new ActionListener() {\r
                                public void actionPerformed(ActionEvent e) {\r
                                        //\r
-                                       for (TraceKey tr : trKeys.getTraceKeys()) {\r
-                                               if (tr.getLabel().equals(label)) {\r
-                                                       mwin.appendMessage("【警告】すでに番組追跡に登録されています:"+label);\r
-                                                       ringBeep();\r
-                                                       return;\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       //\r
-                                       trKeys.add(label, tvd.title, tvd.center, env.getDefaultFazzyThreshold());\r
-\r
                                        VWTraceKeyDialog tD = new VWTraceKeyDialog(0,0);\r
                                        CommonSwingUtils.setLocationCenter(mainWindow,tD);\r
                                        \r
-                                       tD.reopen(label, trKeys);\r
+                                       tD.open(trKeys, tvd, env.getDefaultFazzyThreshold());\r
                                        tD.setVisible(true);\r
                                        \r
-                                       if (tD.isRegistered()) { \r
+                                       if (tD.isRegistered()) {\r
                                                //\r
                                                trKeys.save();\r
                                                \r
@@ -1784,51 +1783,28 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        JMenuItem menuItem = new JMenuItem("キーワード検索への追加【"+label+"】");\r
                        menuItem.addActionListener(new ActionListener(){\r
                                public void actionPerformed(ActionEvent e){\r
-                                       //\r
-                                       for (SearchKey sr : srKeys.getSearchKeys()) {\r
-                                               if (sr.getLabel().equals(tvd.title)) {\r
-                                                       ringBeep();\r
-                                                       String msg = "すでにキーワード検索に登録されています: "+tvd.title;\r
-                                                       mwin.appendMessage(msg);\r
-                                                       JOptionPane.showConfirmDialog(null, msg, "警告", JOptionPane.CLOSED_OPTION);                                                  // キーワード検索の追加ではダイアログで修正できるので止めない\r
-                                                       //return;\r
-                                               }\r
-                                       }\r
+                                       \r
                                        // 「キーワード検索の設定」ウィンドウを開く\r
-                                       SearchKey search = new SearchKey();\r
-                                       {\r
-                                               search.setCondition("0");\r
-                                               search.alTarget.add(TargetId.TITLE);\r
-                                               search.alContain.add("0");\r
-                                               search.alKeyword.add(tvd.title);\r
-                                       }\r
-                                       {\r
-                                               search.setCondition("0");\r
-                                               search.alTarget.add(TargetId.CHANNEL);\r
-                                               search.alContain.add("0");\r
-                                               search.alKeyword.add(tvd.center);\r
-                                       }\r
-                                       {\r
-                                               AbsKeywordDialog kD = new VWKeywordDialog();\r
-                                               CommonSwingUtils.setLocationCenter(mainWindow,kD);\r
-                                               \r
-                                               kD.open(tvd.title, search, srKeys, srGrps);\r
-                                               kD.setVisible(true);\r
+                                       \r
+                                       AbsKeywordDialog kD = new VWKeywordDialog();\r
+                                       CommonSwingUtils.setLocationCenter(mainWindow,kD);\r
+                                       \r
+                                       kD.open(srKeys, srGrps, tvd);\r
+                                       kD.setVisible(true);\r
+                                       \r
+                                       if (kD.isRegistered()) {\r
+                                               // 検索結果の再構築\r
+                                               mpList.clear(env.getDisableFazzySearch(), env.getDisableFazzySearchReverse());\r
+                                               mpList.build(tvprograms, trKeys.getTraceKeys(), srKeys.getSearchKeys());\r
                                                \r
-                                               if (kD.isRegistered()) {\r
-                                                       // 検索結果の再構築\r
-                                                       mpList.clear(env.getDisableFazzySearch(), env.getDisableFazzySearchReverse());\r
-                                                       mpList.build(tvprograms, trKeys.getTraceKeys(), srKeys.getSearchKeys());\r
-                                                       \r
-                                                       // ツリーに反映する\r
-                                                       listed.redrawTreeByKeyword();\r
+                                               // ツリーに反映する\r
+                                               listed.redrawTreeByKeyword();\r
 \r
-                                                       // 表示を更新する\r
-                                                       paper.updateBangumiColumns();\r
-                                                       listed.reselectTree();\r
-                                                       \r
-                                                       mwin.appendMessage("キーワード検索へ追加しました【"+label+"】");\r
-                                               }\r
+                                               // 表示を更新する\r
+                                               paper.updateBangumiColumns();\r
+                                               listed.reselectTree();\r
+                                               \r
+                                               mwin.appendMessage("キーワード検索へ追加しました【"+label+"】");\r
                                        }\r
                                }\r
                        });\r
@@ -2357,12 +2333,12 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                        \r
                                        @Override\r
                                        protected void doFinally() {\r
-                                               stwin.setVisible(false);\r
+                                               StWinSetVisible(false);\r
                                        }\r
                                }.execute();\r
                                \r
                                CommonSwingUtils.setLocationCenter(Viewer.this, stwin);\r
-                               stwin.setVisible(true);\r
+                               StWinSetVisible(true);\r
                                \r
                                // 予約状況を更新\r
                                listed.updateReserveMark();\r
@@ -3141,7 +3117,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
        \r
        /**\r
         * Web番組表をDLする\r
-        * <P>単体実行の場合はこちらを呼び出す:{@link #doLoadTVProgram(LoadFor)}\r
+        * <P>単体実行の場合はこちらを呼び出す:{@link #doLoadTVProgram(boolean, tainavi.Viewer.LoadFor)}\r
         * <P>部品実行の場合はこちらを呼び出す\r
         */\r
        private boolean loadTVProgram(final boolean force, final LoadFor lf) {\r
@@ -3427,6 +3403,8 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
        \r
        // 番組タイトルを整形する\r
        private void fixTitle() {\r
+               // 番組追跡からサブタイトルを除外するかどうかのフラグ\r
+               ProgDetailList.tracenOnlyTitle = env.getFixTitle() && env.getTraceOnlyTitle();\r
                //\r
                if ( ! env.getFixTitle()) {\r
                        return;\r
@@ -3451,7 +3429,6 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                                                // NHK系で先頭が「アニメ 」ではじまるものから「アニメ 」を削除する\r
                                                                tvd.title = tvd.title.replaceFirst("^アニメ[  ・]+","");\r
                                                                tvd.titlePop = TraceProgram.replacePop(tvd.title);\r
-                                                               tvd.SearchStrKeys = TraceProgram.splitKeys(tvd.titlePop);\r
                                                        }\r
                                                        if ( tvd.title.contains("コメンタリ") || tvd.detail.contains("コメンタリ") ) {\r
                                                                // "コメンタリ"の記述のあるものは「副音声」扱いにする(副音声でなくても)\r
@@ -3477,11 +3454,6 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                                        // ジャンル=映画でサブジャンルが複数ありアニメが優先されてないものはアニメを優先する\r
                                                        tvd.subgenre = ProgSubgenre.MOVIE_ANIME;\r
                                                }\r
-                                               \r
-                                               // サブタイトルを番組追跡の対象から外す\r
-                                               if ( env.getTraceOnlyTitle() && tvd.title != tvd.splitted_title ) {\r
-                                                       tvd.SearchStrKeys = TraceProgram.splitKeys(TraceProgram.replacePop(tvd.splitted_title));        // 番組追跡の検索用インデックスは、サブタイトルを削除したもので置き換える\r
-                                               }\r
                                        }\r
                                }\r
                        }\r
@@ -3703,6 +3675,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                // ほにゃらら\r
                toolBar.setDebug(env.getDebug());\r
                autores.setDebug(env.getDebug());\r
+               rdialog.setDebug(env.getDebug());\r
 \r
                // PassedProgramListの設定変更\r
                tvprograms.getPassed().setPassedDir(env.getPassedDir());\r
@@ -3729,6 +3702,8 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                // 列の表示・非表示\r
                listed.setMarkColumnVisible(env.getSplitMarkAndTitle());\r
                listed.setDetailColumnVisible(env.getShowDetailOnList());\r
+               listed.setPickupColumnVisible(env.getShowRsvPickup());\r
+               listed.setDupColumnVisible(env.getShowRsvDup());\r
                listed.setRowHeaderVisible(env.getRowHeaderVisible());\r
                reserved.setRowHeaderVisible(env.getRowHeaderVisible());\r
                \r
@@ -4065,7 +4040,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                \r
                //\r
                ArrayList<String> recIda = new ArrayList<String>();\r
-               for ( File f : new File(CommonUtils.joinPath(new String[]{"bin","tainavi"})).listFiles() ) {\r
+               for ( File f : new File(CommonUtils.joinPath(new String[]{"bin","tainavi","pluginrec"})).listFiles() ) {\r
                        Matcher ma = Pattern.compile("^(PlugIn_Rec[^$]+)[^$]*\\.class$").matcher(f.getName());\r
                        if ( ma.find() ) {\r
                                if ( ! isMailPluginEnabled && f.getName().toLowerCase().contains("mail") ) {\r
@@ -4086,7 +4061,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                // servicesに追記\r
                StringBuilder sb = new StringBuilder();\r
                for ( String recId : recIdd ) {\r
-                       sb.append("tainavi.");\r
+                       sb.append("tainavi.pluginrec.");\r
                        sb.append(recId);\r
                        sb.append("\n");\r
                }\r
@@ -4236,7 +4211,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                 */\r
 \r
                ArrayList<String> prgIda = new ArrayList<String>();\r
-               for ( File f : new File(CommonUtils.joinPath("bin","tainavi")).listFiles() ) {\r
+               for ( File f : new File(CommonUtils.joinPath("bin","tainavi","plugintv")).listFiles() ) {\r
                        Matcher ma = Pattern.compile("^(PlugIn_(TV|CS|RAD)P[^$]+)\\.class$").matcher(f.getName());\r
                        if (ma.find()) {\r
                                prgIda.add(ma.group(1));\r
@@ -4248,7 +4223,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                // servicesに追記\r
                StringBuilder sb = new StringBuilder();\r
                for ( String prgId : prgIdd ) {\r
-                       sb.append("tainavi.");\r
+                       sb.append("tainavi.plugintv.");\r
                        sb.append(prgId);\r
                        sb.append("\n");\r
                }\r
@@ -4574,6 +4549,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        // 設定\r
                        toolBar.setDebug(env.getDebug());\r
                        autores.setDebug(env.getDebug());\r
+                       rdialog.setDebug(env.getDebug());\r
        \r
                        // ページャーの設定\r
                        toolBar.setPagerItems();\r
@@ -4620,7 +4596,8 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                }\r
                else {\r
                        // 設定が存在する場合\r
-                       mainWindow.setSelectedTab(MWinTab.getAt(bounds.getSelectedTab()));\r
+                       MWinTab tab = MWinTab.getAt(bounds.getSelectedTab());\r
+                       mainWindow.setSelectedTab(tab);\r
                }\r
        }\r
        \r
@@ -4777,7 +4754,80 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                listed.saveTreeExpansion();\r
                paper.saveTreeExpansion();\r
        }\r
-       \r
+\r
+       private void setKeyboardShortCut() {\r
+               class ShortCut {\r
+                       final String action;\r
+                       final int key;\r
+                       final int mask;\r
+                       final Action callback;\r
+\r
+                       public ShortCut(String aAction, int aKey, int aMask, Action aCallback) {\r
+                               action = aAction;\r
+                               key = aKey;\r
+                               mask = aMask;\r
+                               callback = aCallback;\r
+                       }\r
+               }\r
+\r
+               final String FIND_ACTION = "find";\r
+               final String SELECT_ACTION_LISTTAB = "listtab";\r
+               final String SELECT_ACTION_PAPERTAB = "papertab";\r
+               final String SELECT_ACTION_RSVEDTAB = "rsvedtab";\r
+               final String SELECT_ACTION_RECEDTAB = "recedtab";\r
+               final String SELECT_ACTION_AUTORESTAB = "autorestab";\r
+\r
+               final Action find_action =  new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               toolBar.setFocusInSearchBox();\r
+                       }\r
+               };\r
+               final Action select_action_listtab = new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               mainWindow.setSelectedTab(MWinTab.LISTED);\r
+                       }\r
+               };\r
+               final Action select_action_papertab = new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               mainWindow.setSelectedTab(MWinTab.PAPER);\r
+                       }\r
+               };\r
+               final Action select_action_rsvedtab = new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               mainWindow.setSelectedTab(MWinTab.RSVED);\r
+                       }\r
+               };\r
+               final Action select_action_recedtab = new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               mainWindow.setSelectedTab(MWinTab.RECED);\r
+                       }\r
+               };\r
+               final Action select_action_autorestab = new AbstractAction() {\r
+                       @Override\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               mainWindow.setSelectedTab(MWinTab.AUTORES);\r
+                       }\r
+               };\r
+\r
+               ArrayList<ShortCut> sca = new ArrayList<ShortCut>();\r
+               sca.add(new ShortCut(FIND_ACTION, KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK, find_action));\r
+               sca.add(new ShortCut(SELECT_ACTION_LISTTAB, KeyEvent.VK_1, KeyEvent.ALT_DOWN_MASK, select_action_listtab));\r
+               sca.add(new ShortCut(SELECT_ACTION_PAPERTAB, KeyEvent.VK_2, KeyEvent.ALT_DOWN_MASK, select_action_papertab));\r
+               sca.add(new ShortCut(SELECT_ACTION_RSVEDTAB, KeyEvent.VK_3, KeyEvent.ALT_DOWN_MASK, select_action_rsvedtab));\r
+               sca.add(new ShortCut(SELECT_ACTION_RECEDTAB, KeyEvent.VK_4, KeyEvent.ALT_DOWN_MASK, select_action_recedtab));\r
+               sca.add(new ShortCut(SELECT_ACTION_AUTORESTAB, KeyEvent.VK_5, KeyEvent.ALT_DOWN_MASK, select_action_autorestab));\r
+\r
+               InputMap imap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);\r
+               for ( ShortCut sc : sca ) {\r
+                       imap.put(KeyStroke.getKeyStroke(sc.key, sc.mask), sc.action);\r
+                       getRootPane().getActionMap().put(sc.action, sc.callback);\r
+               }\r
+       }\r
 \r
        /*******************************************************************************\r
         * main()\r
@@ -5067,6 +5117,9 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                toolBar.addHDDRecorderSelectionListener(paper);         // 新聞形式\r
                toolBar.addHDDRecorderSelectionListener(autores);       // 自動予約一覧\r
                toolBar.addHDDRecorderSelectionListener(rdialog);       // 予約ダイアログ\r
+\r
+               // [ツールバー/キーワード入力] キャンセル動作\r
+               toolBar.addKeywordCancelListener(this);\r
                \r
                // [タイマー] タイトルバー更新/リスト形式の現在時刻ノード/新聞形式の現在時刻ノード\r
                timer_now.addTickTimerRiseListener(this);\r
@@ -5096,7 +5149,9 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                setTitleBar();  // タイトルバー更新\r
                \r
                ShowInitTab();  // 前回開いていたタブを開く\r
-               \r
+\r
+               setKeyboardShortCut();\r
+\r
                // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
                // タイマーを起動する\r
                // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r