OSDN Git Service

キーワード検索の条件追加ほか
authorpeeweedee <peeweedee@users.sourceforge.jp>
Thu, 11 Jul 2013 14:26:09 +0000 (23:26 +0900)
committerpeeweedee <peeweedee@users.sourceforge.jp>
Thu, 11 Jul 2013 14:26:09 +0000 (23:26 +0900)
TinyBannavi/05_history.txt
TinyBannavi/env/keyword.xml
TinyBannavi/src/tainavi/AbsKeywordDialog.java
TinyBannavi/src/tainavi/JComboBoxPanel.java
TinyBannavi/src/tainavi/RecSettingEditorPanel.java
TinyBannavi/src/tainavi/SearchKey.java
TinyBannavi/src/tainavi/SearchProgram.java
TinyBannavi/src/tainavi/VWTreeCellRenderer.java
TinyBannavi/src/tainavi/Viewer.java
TinyBannavi/src/todo.txt

index 85337ca..9bcbd25 100644 (file)
@@ -17,6 +17,9 @@
  ・(リスト形式/新聞形式) 右クリックメニュー最上段に「隣接予約の編集」を追加 ※改変期に同時間帯で番組名が変わった場合などに利用 \r
  ・(その他) 右クリックメニューにの予約実行、予約ON・OFF、予約削除、先週へジャンプなどに開始日時の表示を追加 \r
  ・(レコーダ対応) 予約一覧取得時の、番組詳細/自動予約一覧/録画結果一覧の同時取得有効無効の取扱いを変更 ※既存の設定は破棄、初回実行時に確認ダイアログが出るので設定しなおす \r
+ ・(Web番組表対応) タイトル/番組詳細に「コメンタリ」の文字があったら副音声フラグ([多])を立てるようにした →きんいろモザイク(AT-X)対応\r
+ ・(キーワード検索) 検索条件に「副音声/コメンタリ」を追加 \r
+ ・(予約ダイアログ) EPG予約を選択した際、マージンが0秒以下なら赤字で警告するようにした\r
 ■バグ修正\r
  ・(その他) SwingWorkerで生成したサブスレッド内で想定外のruntime exceptionが発生するとサブスレッドがログも出さずに死んでしまってエラー原因を調査できなかったが、ログが出るように仕掛けをしたのでその仕掛けがうまく動くようなら今後改善が進んでいくはず\r
  ・(予約ダイアログ) 類似予約テーブルで「類似予約を選択しない」を選んでも、番組ID取得ボタンがリセットされない場合がある問題を修正\r
@@ -26,6 +29,7 @@
  ・(新聞形式) 深夜帯(24-29時)の右クリックメニューオープン時の類似/隣接予約の抽出がうまくいってなかったようなそうでもなかったようなところを修正\r
  ・(新聞形式) 改変期などで同一時間帯の番組名が変わった時、旧番組用の予約が右クリックメニューオープン時の類似予約にも近接予約にもひっからず表示されてなかったぽいようなそうでもないようなところを修正\r
  ・(その他) 予約ダイアログを開いたとき、類似予約があると裏番組チェックが走らない問題を修正\r
+ ・(キーワード検索) 条件設定詳細の記入コンボボックスのEnabled/Editableが正しく設定されていなかった問題を修正 \r
 \r
 3.22.1β+1.5.12(2013-05-23)\r
 ■変更点\r
index 61c3e53..c5c8107 100644 (file)
      <string>アニメ/特撮          </string> 
     </void> 
     <void property="label"> 
+     <string>アニメ副音声</string> 
+    </void> 
+    <void property="okiniiri"> 
+     <string>★★★★★</string> 
+    </void> 
+    <void property="target"> 
+     <string>4 20      </string> 
+    </void> 
+   </object> 
+  </void> 
+  <void method="add"> 
+   <object class="tainavi.SearchKey"> 
+    <void property="condition"> 
+     <string>0</string> 
+    </void> 
+    <void property="contain"> 
+     <string>0 0       </string> 
+    </void> 
+    <void property="keyword"> 
+     <string>アニメ/特撮          </string> 
+    </void> 
+    <void property="label"> 
      <string>アニメ視聴年齢制限</string> 
     </void> 
     <void property="okiniiri"> 
index 43285fa..f91dbbf 100644 (file)
@@ -513,63 +513,41 @@ abstract class AbsKeywordDialog extends JDialog {
                        }\r
                        //\r
                        TargetId target = (TargetId) jComboBox_target.getSelectedItem();\r
-                       if (target == TargetId.NEW || target == TargetId.LAST || target == TargetId.REPEAT || target == TargetId.FIRST || target == TargetId.REPEAT || target == TargetId.NOSCRUMBLE) {\r
-                               jComboBox_regex.setEnabled(false);\r
-                               jComboBox_regex.setEditable(false);\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.addItem("");\r
-                       }\r
-                       else if (target == TargetId.LENGTH) {\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(false);\r
+                       \r
+                       jComboBox_regex.setEditable(target.getUseRegexpr());\r
+                       jComboBox_regex.setEnabled(target.getUseKeyword());\r
+                       jComboBox_regex.removeAllItems();\r
+\r
+                       if (target == TargetId.LENGTH) {\r
                                for (int i=1; i <= 120; i++) {\r
                                        jComboBox_regex.addItem(i+" 分以上である");\r
                                }\r
                                jComboBox_regex.setSelectedIndex(29);\r
                        }\r
                        else if (target == TargetId.STARTA) {\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(false);\r
                                for (int i=0; i < 24; i++) {\r
                                        jComboBox_regex.addItem(String.format("%02d:00以降である", (i+5)%24));\r
                                }\r
                                jComboBox_regex.setSelectedIndex(18-5);\r
                        }\r
                        else if (target == TargetId.STARTZ) {\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(false);\r
                                for (int i=0; i < 24; i++) {\r
                                        jComboBox_regex.addItem(String.format("%02d:00以前である", (i+5)%24));\r
                                }\r
                                jComboBox_regex.setSelectedIndex(23-5);\r
                        }\r
                        else if (target == TargetId.GENRE) {\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(false);\r
                                for ( ProgGenre genre : ProgGenre.values()) {\r
                                        jComboBox_regex.addItem(genre.toString());\r
                                }\r
                        }\r
                        else if (target == TargetId.SUBGENRE) {\r
-                               jComboBox_regex.removeAllItems();\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(false);\r
                                for ( ProgSubgenre subgenre : ProgSubgenre.values()) {\r
                                        jComboBox_regex.addItem(subgenre.toString());\r
                                }\r
                        }\r
                        else {\r
-                               // 番組名・番組詳細・放送局・開始日時\r
-                               jComboBox_regex.setEnabled(true);\r
-                               jComboBox_regex.setEditable(true);\r
-                               if (jComboBox_regex.getItemCount() > 1) {\r
-                                       jComboBox_regex.removeAllItems();\r
-                                       jComboBox_regex.addItem("");\r
-                               }\r
+                               jComboBox_regex.addItem("");\r
                        }\r
                }\r
        };\r
@@ -1069,6 +1047,7 @@ abstract class AbsKeywordDialog extends JDialog {
                add_target_item(TargetId.LIVE);\r
                add_target_item(TargetId.BILINGUAL);\r
                add_target_item(TargetId.STANDIN);\r
+               add_target_item(TargetId.MULTIVOICE);\r
                add_target_item(TargetId.LENGTH);\r
                add_target_item(TargetId.STARTA);\r
                add_target_item(TargetId.STARTZ);\r
index d10f634..880aa3e 100644 (file)
@@ -1,5 +1,6 @@
 package tainavi;\r
 \r
+import java.awt.Color;\r
 import java.awt.ItemSelectable;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ItemListener;\r
@@ -15,29 +16,25 @@ public class JComboBoxPanel extends JPanel implements ItemSelectable,WideCompone
 \r
        private static final long serialVersionUID = 1L;\r
 \r
-       private JComboBoxWithPopup jcombobox = null;\r
-       private JLabel jlabel = null;\r
+       private final JComboBoxWithPopup jcombobox;\r
+       private final JLabel jlabel;\r
        \r
        // 旧版\r
-       public JComboBoxPanel(String s, int labelWidth, int comboboxWidth) {\r
-               super();\r
-               makeComboBoxPanel(s, labelWidth, false);\r
+       public JComboBoxPanel(String label, int labelWidth, int comboboxWidth) {\r
+               this(label, labelWidth, 0, false);\r
        }\r
 \r
        // 新版\r
-       public JComboBoxPanel(String s, int labelWidth, int comboboxWidth, boolean horizontal) {\r
+       public JComboBoxPanel(String label, int labelWidth, int comboboxWidth, boolean horizontal) {\r
+\r
                super();\r
-               makeComboBoxPanel(s, labelWidth, horizontal);\r
-       }\r
-       \r
-       private void makeComboBoxPanel(String s, int labelWidth, boolean horizontal) {\r
+               \r
+               jcombobox = new JComboBoxWithPopup();\r
+               jlabel = new JLabel(label);\r
                \r
                SpringLayout layout = new SpringLayout();\r
                setLayout(layout);\r
                \r
-               jlabel = new JLabel(s);\r
-               jcombobox = new JComboBoxWithPopup();\r
-\r
                this.add(jlabel);\r
                this.add(jcombobox);\r
                \r
@@ -152,6 +149,10 @@ public class JComboBoxPanel extends JPanel implements ItemSelectable,WideCompone
                this.jcombobox.removeActionListener(l);\r
        }\r
        \r
+       public void setLabelForeground(Color c) {\r
+               this.jlabel.setForeground(c);\r
+       }\r
+       \r
        // オーバーライド\r
 \r
        @Override\r
index 695cc23..5ad47c8 100644 (file)
@@ -773,6 +773,10 @@ public class RecSettingEditorPanel extends JPanel {
                                return;\r
                        }\r
 \r
+                       jCBXPanel_msChapter.setLabelForeground(Color.BLACK);\r
+                       jCBXPanel_mvChapter.setLabelForeground(Color.BLACK);\r
+                       jCBXPanel_pursues.setEnabled(true);\r
+                       \r
                        String pgtype = (String) jCBXPanel_audiorate.getSelectedItem();\r
                        if ( pgtype == HDDRecorder.ITEM_REC_TYPE_PROG ) {\r
                                // "プラグラム予約"なら触る必要なし\r
@@ -780,7 +784,24 @@ public class RecSettingEditorPanel extends JPanel {
                                jCBXPanel_pursues.setEnabled(false);\r
                        }\r
                        else {\r
-                               jCBXPanel_pursues.setEnabled(true);\r
+                               if ( pgtype == HDDRecorder.ITEM_REC_TYPE_EPG ) {\r
+                                       try {\r
+                                               if ( Integer.valueOf((String) jCBXPanel_msChapter.getSelectedItem()) <= 0 ) {\r
+                                                       jCBXPanel_msChapter.setLabelForeground(Color.RED);\r
+                                               }\r
+                                       }\r
+                                       catch (NumberFormatException ev) {\r
+                                               //\r
+                                       }\r
+                                       try {\r
+                                               if ( Integer.valueOf((String) jCBXPanel_mvChapter.getSelectedItem()) <= 0 ) {\r
+                                                       jCBXPanel_mvChapter.setLabelForeground(Color.RED);\r
+                                               }\r
+                                       }\r
+                                       catch (NumberFormatException ev) {\r
+                                               //\r
+                                       }\r
+                               }\r
                        }\r
                }\r
        };\r
index 1a91e6e..e60b04d 100644 (file)
@@ -25,7 +25,7 @@ public class SearchKey {
                LAST                    ("6",   false,  false,  "最終回"),\r
                REPEAT                  ("7",   false,  false,  "再放送"),\r
                FIRST                   ("8",   false,  false,  "初回放送"),\r
-               LENGTH                  ("9",   false,  false,  "番組長が"),\r
+               LENGTH                  ("9",   false,  true,   "番組長が"),\r
                STARTA                  ("10",  false,  true,   "開始時刻(上限)が"),\r
                STARTZ                  ("11",  false,  true,   "開始時刻(下限)が"),\r
                SPECIAL                 ("12",  false,  false,  "特番"),\r
@@ -36,6 +36,7 @@ public class SearchKey {
                BILINGUAL               ("17",  false,  false,  "二か国語放送"),\r
                STANDIN                 ("18",  false,  false,  "吹替放送"),\r
                RATING                  ("19",  false,  false,  "視聴制限"),\r
+               MULTIVOICE              ("20",  false,  false,  "副音声/コメンタリ"),\r
                ;\r
                \r
                private String id;\r
index f969d4e..def6643 100644 (file)
@@ -391,6 +391,14 @@ public class SearchProgram {
                                        }\r
                                }\r
                                break;\r
+                       case MULTIVOICE:\r
+                               for (ProgOption o : tvd.getOption()) {\r
+                                       if (o == ProgOption.MULTIVOICE) {\r
+                                               isCurMatch = true;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               break;\r
                        case STANDIN:\r
                                for (ProgOption o : tvd.getOption()) {\r
                                        if (o == ProgOption.STANDIN) {\r
index a9591da..b575b11 100644 (file)
@@ -15,6 +15,7 @@ public class VWTreeCellRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(JTree tree, Object value,\r
                        boolean selected, boolean expanded, boolean leaf, int row,\r
                        boolean hasFocus) {\r
+               \r
                Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);\r
                // 'instanceof'は使っていいものやらわるいものやら\r
                if ( value instanceof VWListedTreeNode ) {\r
@@ -23,7 +24,7 @@ public class VWTreeCellRenderer extends DefaultTreeCellRenderer {
                        }\r
                }\r
                else {\r
-                       System.err.println("[error] VWListedTreeNode じゃないよ. "+((DefaultMutableTreeNode)value).toString());\r
+                       //System.err.println("[error] VWListedTreeNode じゃないよ. "+((DefaultMutableTreeNode)value).toString());\r
                }\r
                return c;\r
        }\r
index 10351d5..b3dfcdf 100644 (file)
@@ -158,6 +158,10 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
 //     private static final String ERRID = "[ERROR]"+MSGID;\r
        private static final String DBGID = "[DEBUG]"+MSGID;\r
        \r
+       /*\r
+        * [メモ] enumのtoString()をoverrideすると、シリアライズの際とても困るのでやらないこと\r
+        */\r
+       \r
        /**\r
         * Web番組表のどれとどれを読めばいいのか\r
         */\r
@@ -195,7 +199,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
         * レコーダ情報のどれとどれを読めばいいのか\r
         */\r
        public static enum LoadRsvedFor {\r
-               SETTING         ( "設定情報のみ取得(future use.)" ),\r
+//             SETTING         ( "設定情報のみ取得(future use.)" ),\r
                RECORDED        ( "録画結果一覧のみ取得" ),\r
                AUTORESERVE     ( "自動予約一覧のみ取得" ),\r
                ;\r
@@ -224,6 +228,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
         *  リスト形式のカラム定義\r
         * @deprecated しっぱいした 半年くらいしたら削除する\r
         */\r
+       @Deprecated\r
        public static enum ListedColumn {\r
                RSVMARK         ("予約",                      35),\r
                DUPMARK         ("重複",                      35),\r
@@ -274,6 +279,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
         *  本体予約一覧のカラム定義\r
         * @deprecated しっぱいした 半年くらいしたら削除する\r
         */\r
+       @Deprecated\r
        public static enum RsvedColumn {\r
                PATTERN         ("パタン",                   110),\r
                DUPMARK         ("重複",                      35),\r
@@ -2634,7 +2640,6 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                return doLoadRdRecorded();\r
                        case AUTORESERVE:\r
                                return doLoadRdAutoReserves();\r
-                       case SETTING: \r
                        default:\r
                                break;\r
                        }\r
@@ -3459,6 +3464,10 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                                                                tvd.titlePop = TraceProgram.replacePop(tvd.title);\r
                                                                tvd.SearchStrKeys = TraceProgram.splitKeys(tvd.titlePop);\r
                                                        }\r
+                                                       if ( tvd.title.contains("コメンタリ") || tvd.detail.contains("コメンタリ") ) {\r
+                                                               // "コメンタリ"の記述のあるものは「副音声」扱いにする(副音声でなくても)\r
+                                                               tvd.option.add(ProgOption.MULTIVOICE);\r
+                                                       }\r
                                                        if ( (tvd.title.contains("劇場版") || tvd.detail.contains("映画")) && ! tvd.isEqualsGenre(ProgGenre.MOVIE, ProgSubgenre.MOVIE_ANIME) ) {\r
                                                                // ジャンル=アニメだがタイトルに「劇場版」が含まれるならジャンル=映画(アニメ映画)を追加する\r
                                                                if ( tvd.genrelist == null ) {\r
index b9ce30b..28e9d38 100644 (file)
@@ -22,6 +22,8 @@
 \r
 【自動予約登録】EDCBとTVRockの自動予約登録編集機能の追加(~6月中旬厳守) やばい!やばい!やばい!\r
 \r
+【予約ダイアログ】EPG予約の際にのりしろが0秒以下なら赤字で警告する\r
+\r
 【リスト形式】「バッチ予約では類似予約を参照しないオプション」の追加\r
  \r
 【ツールバー】「タブ内イベントでツールバーの状態を取りに行き処理」の現行ロジックを「ツールバー内のイベントで各タブの処理リスナーをキック」するように根本的に直す\r