・(リスト形式/新聞形式) 右クリックメニュー最上段に「隣接予約の編集」を追加 ※改変期に同時間帯で番組名が変わった場合などに利用 \r
・(その他) 右クリックメニューにの予約実行、予約ON・OFF、予約削除、先週へジャンプなどに開始日時の表示を追加 \r
・(レコーダ対応) 予約一覧取得時の、番組詳細/自動予約一覧/録画結果一覧の同時取得有効無効の取扱いを変更 ※既存の設定は破棄、初回実行時に確認ダイアログが出るので設定しなおす \r
+ ・(Web番組表対応) タイトル/番組詳細に「コメンタリ」の文字があったら副音声フラグ([多])を立てるようにした →きんいろモザイク(AT-X)対応\r
+ ・(キーワード検索) 検索条件に「副音声/コメンタリ」を追加 \r
+ ・(予約ダイアログ) EPG予約を選択した際、マージンが0秒以下なら赤字で警告するようにした\r
■バグ修正\r
・(その他) SwingWorkerで生成したサブスレッド内で想定外のruntime exceptionが発生するとサブスレッドがログも出さずに死んでしまってエラー原因を調査できなかったが、ログが出るように仕掛けをしたのでその仕掛けがうまく動くようなら今後改善が進んでいくはず\r
・(予約ダイアログ) 類似予約テーブルで「類似予約を選択しない」を選んでも、番組ID取得ボタンがリセットされない場合がある問題を修正\r
・(新聞形式) 深夜帯(24-29時)の右クリックメニューオープン時の類似/隣接予約の抽出がうまくいってなかったようなそうでもなかったようなところを修正\r
・(新聞形式) 改変期などで同一時間帯の番組名が変わった時、旧番組用の予約が右クリックメニューオープン時の類似予約にも近接予約にもひっからず表示されてなかったぽいようなそうでもないようなところを修正\r
・(その他) 予約ダイアログを開いたとき、類似予約があると裏番組チェックが走らない問題を修正\r
+ ・(キーワード検索) 条件設定詳細の記入コンボボックスのEnabled/Editableが正しく設定されていなかった問題を修正 \r
\r
3.22.1β+1.5.12(2013-05-23)\r
■変更点\r
<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">
}\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
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
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
\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
this.jcombobox.removeActionListener(l);\r
}\r
\r
+ public void setLabelForeground(Color c) {\r
+ this.jlabel.setForeground(c);\r
+ }\r
+ \r
// オーバーライド\r
\r
@Override\r
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
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
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
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
}\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
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
}\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
// 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
* レコーダ情報のどれとどれを読めばいいのか\r
*/\r
public static enum LoadRsvedFor {\r
- SETTING ( "設定情報のみ取得(future use.)" ),\r
+// SETTING ( "設定情報のみ取得(future use.)" ),\r
RECORDED ( "録画結果一覧のみ取得" ),\r
AUTORESERVE ( "自動予約一覧のみ取得" ),\r
;\r
* リスト形式のカラム定義\r
* @deprecated しっぱいした 半年くらいしたら削除する\r
*/\r
+ @Deprecated\r
public static enum ListedColumn {\r
RSVMARK ("予約", 35),\r
DUPMARK ("重複", 35),\r
* 本体予約一覧のカラム定義\r
* @deprecated しっぱいした 半年くらいしたら削除する\r
*/\r
+ @Deprecated\r
public static enum RsvedColumn {\r
PATTERN ("パタン", 110),\r
DUPMARK ("重複", 35),\r
return doLoadRdRecorded();\r
case AUTORESERVE:\r
return doLoadRdAutoReserves();\r
- case SETTING: \r
default:\r
break;\r
}\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
+ 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
\r
【自動予約登録】EDCBとTVRockの自動予約登録編集機能の追加(~6月中旬厳守) やばい!やばい!やばい!\r
\r
+【予約ダイアログ】EPG予約の際にのりしろが0秒以下なら赤字で警告する\r
+\r
【リスト形式】「バッチ予約では類似予約を参照しないオプション」の追加\r
\r
【ツールバー】「タブ内イベントでツールバーの状態を取りに行き処理」の現行ロジックを「ツールバー内のイベントで各タブの処理リスナーをキック」するように根本的に直す\r