package tainavi;\r
\r
import java.awt.BorderLayout;\r
-import java.awt.Color;\r
import java.awt.Component;\r
import java.awt.Dimension;\r
-import java.awt.Font;\r
-import java.awt.Rectangle;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
import java.awt.event.ItemEvent;\r
import java.awt.event.ItemListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.awt.event.MouseListener;\r
import java.awt.event.WindowAdapter;\r
import java.awt.event.WindowEvent;\r
import java.awt.event.WindowListener;\r
import java.util.ArrayList;\r
import java.util.Calendar;\r
import java.util.GregorianCalendar;\r
-import java.util.HashMap;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
\r
-import javax.swing.JButton;\r
-import javax.swing.JComboBox;\r
import javax.swing.JDialog;\r
-import javax.swing.JLabel;\r
import javax.swing.JPanel;\r
import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.JTextArea;\r
-import javax.swing.JTextField;\r
-import javax.swing.JViewport;\r
-import javax.swing.SpringLayout;\r
-import javax.swing.SwingUtilities;\r
-import javax.swing.border.LineBorder;\r
-import javax.swing.table.DefaultTableCellRenderer;\r
-import javax.swing.table.DefaultTableColumnModel;\r
-import javax.swing.table.DefaultTableModel;\r
-import javax.swing.table.TableColumn;\r
\r
+import tainavi.TitleEditorPanel.TimeVal;\r
import tainavi.HDDRecorder.RecType;\r
import tainavi.TVProgram.ProgGenre;\r
import tainavi.TVProgram.ProgOption;\r
/**\r
* 予約ダイアログのクラス\r
* @since 3.15.4β ReserveDialogからクラス名変更\r
+ * @version 3.22.2β コンポーネントを、番組情報部・録画設定部、類似予約部の3つに分離(このまま突き進めばロジックとSwingコンポーネントを分離できるんじゃないかしら?)\r
*/\r
-abstract class AbsReserveDialog extends JDialog implements HDDRecorderListener {\r
+abstract class AbsReserveDialog extends JDialog implements HDDRecorderListener,RecordExecutable,RecSettingSelectable,LikeReserveSelectable {\r
\r
private static final long serialVersionUID = 1L;\r
\r
public void setDebug(boolean b) { debug = b; }\r
private static boolean debug = false;\r
\r
+ \r
/*******************************************************************************\r
* 抽象メソッド\r
******************************************************************************/\r
// クラス内のイベントから呼び出されるもの\r
protected abstract LikeReserveList findLikeReserves(ProgDetailList tvd, String keyword, int threshold);\r
\r
+ \r
/*******************************************************************************\r
* 呼び出し元から引き継いだもの\r
******************************************************************************/\r
\r
private enum ChangedSelector { ALL, RECORDER, GENRE, LIKELIST };\r
\r
- private static final String ITEM_YES = "する";\r
- private static final String ITEM_NO = "しない";\r
- \r
- private static final String ITEM_EVIDNEEDED = "番組ID取得";\r
- \r
- private static final int LIKERSVTABLE_NOTSELECTED = -1;\r
- \r
- private static final String LIKERSVID_NONE = "(類似予約なし)";\r
- private static final String LIKERSVID_NOTSELECTED = "類似予約を選択しない";\r
- \r
- // レイアウト関連\r
- \r
- private static final int PARTS_HEIGHT = 25;\r
- private static final int SEP_WIDTH = 10;\r
- private static final int SEP_WIDTH_NARROW = 5;\r
- private static final int SEP_HEIGHT = 10;\r
- private static final int SEP_HEIGHT_NALLOW = 5;\r
- \r
- private static final int COMBO_WIDTH = 115;\r
- private static final int COMBO_WIDTH_WIDE = 155;\r
- private static final int COMBO_HEIGHT = 43;\r
-\r
- private static final int TITLE_WIDTH = COMBO_WIDTH_WIDE+COMBO_WIDTH*2+SEP_WIDTH*2;\r
- private static final int CHNAME_WIDTH = COMBO_WIDTH*2+SEP_WIDTH;\r
- private static final int DETAIL_WIDTH = TITLE_WIDTH+CHNAME_WIDTH+SEP_WIDTH;\r
- private static final int DETAIL_HEIGHT = 100;\r
- private static final int DATE_WIDTH = 175;\r
- private static final int LIKELIST_WIDTH = 730;\r
- private static final int LIKELIST_ROWS = 5;\r
- \r
- private static final int LABEL_WIDTH = 150;\r
- private static final int BUTTON_WIDTH = 75;\r
-\r
- private static final int RECORDER_WIDTH = COMBO_WIDTH_WIDE*2+SEP_WIDTH_NARROW;\r
- private static final int ENCODER_WIDTH = COMBO_WIDTH*2+SEP_WIDTH_NARROW;\r
- \r
- private static final int LRT_HEADER_WIDTH = 20;\r
- private static final int LRT_TITLE_WIDTH = 325;\r
- private static final int LRT_START_WIDTH = 120;\r
- private static final int LRT_RECORDER_WIDTH = 200;\r
- private static final int LRT_ENCODER_WIDTH = 80;\r
- \r
- public static enum LikeRsvColumn {\r
- TITLE ("予約名", LRT_TITLE_WIDTH),\r
- START ("開始日時", LRT_START_WIDTH),\r
- RECORDER ("レコーダ", LRT_RECORDER_WIDTH),\r
- TUNER ("エンコーダ", LRT_ENCODER_WIDTH),\r
- ;\r
-\r
- private String name;\r
- private int iniWidth;\r
-\r
- private LikeRsvColumn(String name, int iniWidth) {\r
- this.name = name;\r
- this.iniWidth = iniWidth;\r
- }\r
-\r
- public String getName() {\r
- return name;\r
- }\r
-\r
- public int getIniWidth() {\r
- return iniWidth;\r
- }\r
- \r
- public int getColumn() {\r
- return ordinal();\r
- }\r
- \r
- public boolean equals(String s) {\r
- return name.equals(s);\r
- }\r
- };\r
- \r
- //\r
- \r
- private static final String TEXT_SAVEDEFAULT = "<HTML>録画設定を開いた時の枠内のデフォルト値として<BR>現在の値を使用するようにします。<BR><FONT COLOR=#FF0000>※ジャンル別AV設定があればそちらが優先されます。</FONT></HTML>";\r
- \r
// ログ関連\r
\r
private static final String MSGID = "["+getViewName()+"] ";\r
\r
private JPanel jContentPane_rsv = null;\r
\r
- // 番組設定\r
- \r
- private JPanel jPane_title = null;\r
- \r
- private JLabel jLabel_title = null;\r
- private JButton jButton_getEventId = null;\r
- private JButton jButton_addDate = null;\r
- private JComboBoxWithPopup jComboBox_title = null;\r
- private JLabel jLabel_ch = null;\r
- private JComboBox jComboBox_ch = null;\r
- \r
- private JComboBoxPanel jCBXPanel_recorder = null;\r
- private JComboBoxPanel jCBXPanel_encoder = null;\r
- private JLabel jLabel_encoderemptywarn = null;\r
- \r
- private JLabel jLabel_date = null;\r
- private JComboBox jComboBox_date = null;\r
- \r
- private JButton jButton_aTime = null;\r
- private JTextField jTextField_ahh = null;\r
- private JLabel jLabel_asep = null;\r
- private JTextField jTextField_amm = null;\r
- private JButton jButton_amm_up = null;\r
- private JButton jButton_amm_down = null;\r
- \r
- private JButton jButton_zTime = null;\r
- private JTextField jTextField_zhh = null;\r
- private JLabel jLabel_zsep = null;\r
- private JTextField jTextField_zmm = null;\r
- private JButton jButton_zmm_up = null;\r
- private JButton jButton_zmm_down = null;\r
- \r
- private JLabel jLabel_detail = null;\r
- private JScrollPane jScrollPane_detail = null;\r
- private JTextAreaWithPopup jTextArea_detail = null;\r
- \r
- private JCheckBoxPanel jCheckBox_OverlapDown2 = null;\r
- private JCheckBoxPanel jCheckBox_spoex_extend = null;\r
- \r
- private JCheckBoxPanel jCheckBox_Exec = null;\r
- private JCheckBoxPanel jCheckBox_Autocomplete = null;\r
-\r
- private JButton jButton_update = null;\r
- private JButton jButton_record = null;\r
- private JButton jButton_cancel = null;\r
-\r
- // 録画設定\r
- private JPanel jPane_recsetting = null;\r
-\r
- private JComboBoxPanel jCBXPanel_genre = null;\r
- private JComboBoxPanel jCBXPanel_subgenre = null;\r
- private JComboBoxPanel jCBXPanel_videorate = null;\r
- private JComboBoxPanel jCBXPanel_audiorate = null;\r
- private JComboBoxPanel jCBXPanel_folder = null;\r
- private JComboBoxPanel jCBXPanel_dvdcompat = null;\r
- private JComboBoxPanel jCBXPanel_device = null;\r
- private JComboBoxPanel jCBXPanel_aspect = null;\r
- private JComboBoxPanel jCBXPanel_bvperf = null;\r
- private JComboBoxPanel jCBXPanel_lvoice = null;\r
- private JComboBoxPanel jCBXPanel_autodel = null;\r
- private JComboBoxPanel jCBXPanel_pursues = null;\r
- private JComboBoxPanel jCBXPanel_xChapter = null;\r
- private JComboBoxPanel jCBXPanel_msChapter = null;\r
- private JComboBoxPanel jCBXPanel_mvChapter = null;\r
- \r
- private JLabel jLabel_rectype = null;\r
- private JButton jButton_load = null;\r
- private JButton jButton_save = null;\r
- private JButton jButton_savedefault = null;\r
- \r
- // 類似予約\r
- \r
- private JScrollPane jPane_likersv = null;\r
- \r
- private LikeRsvTable jtbl_likersv = null;\r
- private LikeRsvRowHeader jrhdr_likersv = null;\r
+ private TitleEditorPanel jPane_title = null; // 番組設定\r
+ private RecSettingEditorPanel jPane_recsetting = null; // 録画設定\r
+ private LikeReserveEditorPanel jPane_likersv = null; // 類似予約\r
+ \r
\r
/*\r
* その他\r
private class Vals {\r
\r
// 検索した類似予約を保持する\r
- LikeReserveList likeRsvList = null;\r
- LikeReserveItem selectedLikeRsv = null; \r
+ LikeReserveList hide_likersvlist = null;\r
\r
// 類似予約抽出条件(タイトル)\r
String keyword = "";\r
+ \r
// 類似予約抽出条件(あいまい度)\r
int threshold = 0;\r
\r
- // オープン時の単日指定の値(状態リセット用)\r
- String byDateIni = "";\r
- // オープン時の週次予約の値(状態リセット用)\r
- String byWeeklyIni = "";\r
- // オープン時の時刻の値\r
- String ahh = "";\r
- String amm = "";\r
- String zhh = "";\r
- String zmm = "";\r
- \r
- // 延長警告分のばすかどうか\r
- boolean isExtended = false;\r
- // おしりを1分削るかどうか\r
- boolean isClipped = false;\r
// 実行のON/OFFのみの更新かどうか\r
boolean isUpdateOnlyExec = false;\r
\r
// 予約する番組情報\r
+ HDDRecorder hide_recorder = null;\r
ProgDetailList hide_tvd = null;\r
- // 番組IDはUI上には表示されない隠し項目\r
- String hide_content_id = null;\r
- // 未編集の番組開始日時\r
- String hide_startdatetime = null;\r
- \r
- // 開いたときの選択レコーダ\r
- HDDRecorder hide_default_recorder = null;\r
- \r
- // 本体予約一覧から開かれたかどうか\r
- boolean hide_atreservedlist = false;\r
+ AVs hide_avs = null;\r
\r
}\r
\r
/**\r
* 予約操作が成功したかどうかを返す。\r
*/\r
- public boolean isReserved() { return doneReserve; }\r
+ public boolean isSucceededReserve() { return doneReserve; }\r
\r
private boolean doneReserve = false;\r
\r
\r
super();\r
\r
- this.setModal(true);\r
- this.setContentPane(getJContentPane_rsv());\r
+ setModal(true);\r
+ setContentPane(getJContentPane_rsv());\r
\r
// タイトルバーの高さも考慮する必要がある\r
Dimension d = getJContentPane_rsv().getPreferredSize();\r
- this.pack();\r
- this.setBounds(\r
+ pack();\r
+ setBounds(\r
x,\r
y,\r
d.width+(this.getInsets().left+this.getInsets().right),\r
d.height+(this.getInsets().top+this.getInsets().bottom));\r
- this.setResizable(false);\r
- //\r
- this.setTitle("録画設定");\r
- \r
- this.addWindowListener(wl_opened);\r
- }\r
- \r
- \r
- /*******************************************************************************\r
- * アクション\r
- ******************************************************************************/\r
-\r
- /**\r
- * 新規登録\r
- * @see #doUpdate()\r
- */\r
- public void doRecord() {\r
- \r
- if (debug) System.out.println(DBGID+"doRecord "+vals.toString());\r
- \r
- // 新規処理\r
- final ReserveList r = new ReserveList();\r
- //r.setNo(-1); // PostRdEntry()中で取得するのでここはダミー(旧)\r
- r.setId(null); // PostRdEntry()中で取得するのでここはダミー(新)\r
- r.setRec_pattern((String)jComboBox_date.getSelectedItem());\r
- r.setRec_pattern_id(-1); // PostRdEntry()中で取得するのでここはダミー\r
- r.setRec_nextdate((String)jComboBox_date.getItemAt(0)); // PostRdEntry()中で取得するのでここはダミー(日付を入れるのはDIGA用)\r
- r.setAhh(String.format("%02d", Integer.valueOf(getJTextField_ahh().getText())));\r
- r.setAmm(String.format("%02d", Integer.valueOf(getJTextField_amm().getText())));\r
- r.setZhh(String.format("%02d", Integer.valueOf(getJTextField_zhh().getText())));\r
- r.setZmm(String.format("%02d", Integer.valueOf(getJTextField_zmm().getText())));\r
- r.setRec_min(""); // PostRdEntry()中で取得するのでここはダミー\r
- r.setTuner((String)jCBXPanel_encoder.getSelectedItem());\r
- r.setRec_mode((String)jCBXPanel_videorate.getSelectedItem());\r
- r.setRec_audio((String)jCBXPanel_audiorate.getSelectedItem());\r
- r.setRec_folder((String)jCBXPanel_folder.getSelectedItem());\r
- r.setRec_genre((String)jCBXPanel_genre.getSelectedItem());\r
- r.setRec_subgenre((String)jCBXPanel_subgenre.getSelectedItem());\r
- r.setRec_dvdcompat((String)jCBXPanel_dvdcompat.getSelectedItem());\r
- r.setRec_device((String)jCBXPanel_device.getSelectedItem());\r
- // 自動チャプタ関連\r
- r.setRec_xchapter((String)jCBXPanel_xChapter.getSelectedItem());\r
- r.setRec_mschapter((String)jCBXPanel_msChapter.getSelectedItem());\r
- r.setRec_mvchapter((String)jCBXPanel_mvChapter.getSelectedItem());\r
- // その他\r
- r.setRec_aspect((String)jCBXPanel_aspect.getSelectedItem());\r
- r.setRec_bvperf((String)jCBXPanel_bvperf.getSelectedItem());\r
- r.setRec_lvoice((String)jCBXPanel_lvoice.getSelectedItem());\r
- r.setRec_autodel((String)jCBXPanel_autodel.getSelectedItem());\r
- \r
- //r.setPursues(jCheckBox_Pursues.isSelected());\r
- r.setPursues(ITEM_YES.equals((String) jCBXPanel_pursues.getSelectedItem()));\r
- \r
- r.setTitle((String)jComboBox_title.getSelectedItem());\r
- r.setTitlePop(TraceProgram.replacePop(r.getTitle()));\r
- r.setDetail(jTextArea_detail.getText());\r
- r.setChannel(""); // PostRdEntry()中で取得するのでここはダミー\r
- r.setCh_name((String)jComboBox_ch.getSelectedItem());\r
- r.setStartDateTime(""); // PostRdEntry()中で取得するのでここはダミー\r
- r.setEndDateTime(""); // PostRdEntry()中で取得するのでここはダミー\r
- r.setExec(jCheckBox_Exec.isSelected());\r
- r.setAutocomplete(jCheckBox_Autocomplete.isSelected());\r
- \r
- r.setContentId(vals.hide_content_id);\r
- \r
- // 予約実行\r
- StWin.clear();\r
- new SwingBackgroundWorker(false) {\r
- \r
- @Override\r
- protected Object doWorks() throws Exception {\r
- \r
- String myself = (String)jCBXPanel_recorder.getSelectedItem();\r
- for ( HDDRecorder recorder : recorders.findInstance(myself) ) {\r
- \r
- StWin.appendMessage(MSGID+"予約を登録します:"+r.getTitle());\r
- \r
- if ( recorder.PostRdEntry(r) ) {\r
- \r
- MWin.appendMessage(MSGID+"正常に登録できました:"+r.getTitle()+"("+r.getCh_name()+")");\r
- doneReserve = true;\r
- \r
- // カレンダーに登録する\r
- if ( recorder.getUseCalendar() && jCheckBox_Exec.isSelected() ) {\r
- \r
- for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
- \r
- StWin.appendMessage(MSGID+"カレンダーに予約情報を登録します");\r
- \r
- if ( ! calendar.PostRdEntry(r)) {\r
- MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
- ringBeep();\r
- }\r
- }\r
- }\r
- }\r
- else {\r
- MWin.appendError(ERRID+"登録に失敗しました:"+r.getTitle()+"("+r.getCh_name()+")");\r
- }\r
- \r
- if ( ! recorder.getErrmsg().equals("")) {\r
- MWin.appendMessage(MSGID+"[追加情報] "+recorder.getErrmsg());\r
- ringBeep();\r
- }\r
- \r
- break; // 一回限り\r
- }\r
- return null;\r
- }\r
- \r
- @Override\r
- protected void doFinally() {\r
- //CommonUtils.milSleep(0);\r
- StWin.setVisible(false);\r
- }\r
- }.execute();\r
- \r
- CommonSwingUtils.setLocationCenter(parent, (Component)StWin);\r
- StWin.setVisible(true);\r
+ setResizable(false);\r
\r
- //setVisible(false);\r
- resetWhenWindowClosed();\r
- dispose();\r
- }\r
- \r
- /**\r
- * 更新処理\r
- * @see #doRecord()\r
- */\r
- public void doUpdate() {\r
- if (vals.likeRsvList.size() <= 0) {\r
- return;\r
- }\r
+ setTitle(getViewName());\r
\r
- // 更新処理\r
- final ReserveList newRsv = vals.selectedLikeRsv.getRsv().clone();\r
- //newRsv.setNo(-1);\r
- //newRsv.setId(null);\r
- newRsv.setRec_pattern((String)jComboBox_date.getSelectedItem());\r
- newRsv.setRec_pattern_id(-1); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setRec_nextdate(""); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setAhh(String.format("%02d", Integer.valueOf(getJTextField_ahh().getText())));\r
- newRsv.setAmm(String.format("%02d", Integer.valueOf(getJTextField_amm().getText())));\r
- newRsv.setZhh(String.format("%02d", Integer.valueOf(getJTextField_zhh().getText())));\r
- newRsv.setZmm(String.format("%02d", Integer.valueOf(getJTextField_zmm().getText())));\r
- newRsv.setRec_min(""); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setTuner((String)jCBXPanel_encoder.getSelectedItem());\r
- newRsv.setRec_mode((String)jCBXPanel_videorate.getSelectedItem());;\r
- newRsv.setRec_audio((String)jCBXPanel_audiorate.getSelectedItem());\r
- newRsv.setRec_folder((String)jCBXPanel_folder.getSelectedItem());\r
- newRsv.setRec_genre((String)jCBXPanel_genre.getSelectedItem());\r
- newRsv.setRec_subgenre((String)jCBXPanel_subgenre.getSelectedItem());\r
- newRsv.setRec_dvdcompat((String)jCBXPanel_dvdcompat.getSelectedItem());\r
- newRsv.setRec_device((String)jCBXPanel_device.getSelectedItem());\r
- // 自動チャプタ関連\r
- newRsv.setRec_xchapter((String)jCBXPanel_xChapter.getSelectedItem());\r
- newRsv.setRec_mschapter((String)jCBXPanel_msChapter.getSelectedItem());\r
- newRsv.setRec_mvchapter((String)jCBXPanel_mvChapter.getSelectedItem());\r
- // その他\r
- newRsv.setRec_aspect((String)jCBXPanel_aspect.getSelectedItem());\r
- newRsv.setRec_bvperf((String)jCBXPanel_bvperf.getSelectedItem());\r
- newRsv.setRec_lvoice((String)jCBXPanel_lvoice.getSelectedItem());\r
- newRsv.setRec_autodel((String)jCBXPanel_autodel.getSelectedItem());\r
- \r
- //newRsv.setPursues(jCheckBox_Pursues.isSelected());\r
- newRsv.setPursues(ITEM_YES.equals((String) jCBXPanel_pursues.getSelectedItem()));\r
- \r
- newRsv.setTitle((String)jComboBox_title.getSelectedItem());\r
- newRsv.setTitlePop(TraceProgram.replacePop(newRsv.getTitle()));\r
- newRsv.setDetail(jTextArea_detail.getText());\r
- newRsv.setChannel(""); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setCh_name((String)jComboBox_ch.getSelectedItem());\r
- newRsv.setStartDateTime(""); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setEndDateTime(""); // UpdateRdEntry()中で取得するのでここはダミー\r
- newRsv.setExec(jCheckBox_Exec.isSelected());\r
- newRsv.setAutocomplete(jCheckBox_Autocomplete.isSelected());\r
- newRsv.setUpdateOnlyExec(vals.isUpdateOnlyExec);\r
- \r
- newRsv.setContentId(vals.hide_content_id);\r
-\r
- // 更新実行\r
- StWin.clear();\r
- new SwingBackgroundWorker(false) {\r
- \r
- @Override\r
- protected Object doWorks() throws Exception {\r
- \r
- StWin.appendMessage(MSGID+"予約を更新します:"+newRsv.getTitle());\r
- \r
- if ( vals.selectedLikeRsv.getRec().UpdateRdEntry(vals.selectedLikeRsv.getRsv(), newRsv) ) {\r
- \r
- // 成功したよ\r
- MWin.appendMessage(MSGID+"正常に更新できました:"+vals.selectedLikeRsv.getRsv().getTitle()+"("+vals.selectedLikeRsv.getRsv().getCh_name()+")");\r
- \r
- doneReserve = true;\r
- \r
- // カレンダーを更新する\r
- if ( vals.selectedLikeRsv.getRec().getUseCalendar() ) {\r
- for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
- \r
- StWin.appendMessage(MSGID+"カレンダーの予約情報を更新します");\r
- \r
- if ( ! calendar.UpdateRdEntry(vals.selectedLikeRsv.getRsv(), (jCheckBox_Exec.isSelected())?(newRsv):(null))) {\r
- MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
- ringBeep();\r
- }\r
- }\r
- }\r
- }\r
- else {\r
- MWin.appendError(ERRID+"更新に失敗しました:"+vals.selectedLikeRsv.getRsv().getTitle()+"("+vals.selectedLikeRsv.getRsv().getCh_name()+")");\r
- }\r
- \r
- if ( ! vals.selectedLikeRsv.getRec().getErrmsg().equals("")) {\r
- MWin.appendMessage(MSGID+"[追加情報] "+vals.selectedLikeRsv.getRec().getErrmsg());\r
- ringBeep();\r
- }\r
- return null;\r
- }\r
- \r
- @Override\r
- protected void doFinally() {\r
- StWin.setVisible(false);\r
- }\r
- }.execute();\r
-\r
- StWin.setVisible(true);\r
-\r
- vals.selectedLikeRsv = null;\r
+ // とりあえず起動時のみ設定可能\r
+ jPane_recsetting.setDebug(env.getDebug());\r
\r
- //setVisible(false);\r
- resetWhenWindowClosed();\r
- dispose();\r
+ addWindowListener(wl_opened);\r
}\r
\r
\r
* ダイアログオープン\r
******************************************************************************/\r
\r
+ /***************************************\r
+ * 番組情報からのオープン2種+α\r
+ **************************************/\r
+ \r
/**\r
* 実行のON/OFFだけしか操作しない場合に呼び出す(画面にウィンドウは表示しない)\r
* ※これがあるので、各openでは vals != null チェックの必要がある\r
if (vals == null) vals = new Vals();\r
\r
vals.isUpdateOnlyExec = true;\r
- jCheckBox_Exec.setSelected(b);\r
+ jPane_recsetting.setExecValue(b);\r
}\r
\r
/**\r
- * 類似予約抽出条件なしオープン\r
+ * 類似予約抽出条件なしオープン\r
+ * @see #doSelectLikeReserve(int)\r
*/\r
public boolean open(ProgDetailList tvd) {\r
return open(tvd,null,0);\r
\r
/**\r
* 類似予約抽出条件ありオープン\r
+ * @see #doSelectLikeReserve(int)\r
*/\r
public boolean open(ProgDetailList tvd, String keywordVal, int thresholdVal) {\r
\r
+ // 予約は行われてないよー\r
+ doneReserve = false;\r
+ \r
if (recorders.size() == 0) {\r
return false; // レコーダがひとつもないのはやばい\r
}\r
// 初期パラメータの保存場所\r
if (vals == null) vals = new Vals();\r
\r
- // 番組ID取得ボタン\r
- getEventIdOnOpen(tvd);\r
- setGetEventIdButton(tvd.progid,true);\r
- \r
// 選択中のレコーダ\r
String myself = getSelectedRecorderId(); // ツールバーで選択されているのはどれかな?\r
HDDRecorder myrec = getSelectedRecorderList().get(0); // 先頭を選んでおけばおけ\r
\r
- // 隠しパラメータ\r
- vals.hide_tvd = tvd;\r
- vals.hide_content_id = tvd.progid;\r
- vals.hide_startdatetime = tvd.startDateTime;\r
- vals.hide_atreservedlist = false;\r
+ vals.hide_recorder = myrec; // 隠しパラメータ\r
+ vals.hide_tvd = tvd; // 隠しパラメータ\r
+ \r
+ // ダイアログオープン時に自動で取得する\r
+ if ( env.getAutoEventIdComplete() ) {\r
+ tvd.progid = getEventIdOnOpen(tvd);\r
+ }\r
\r
// 類似予約抽出条件\r
if ( thresholdVal > 0 ) {\r
- vals.keyword = keywordVal;\r
- vals.threshold = thresholdVal;\r
+ vals.keyword = keywordVal; // 隠しパラメータ\r
+ vals.threshold = thresholdVal; // 隠しパラメータ\r
}\r
\r
// 類似予約情報\r
ReserveList myrsv = null;\r
- vals.likeRsvList = findLikeReserves(vals.hide_tvd, vals.keyword, vals.threshold);\r
+ int myrsvidx = -1;\r
+ LikeReserveList likersvlist = findLikeReserves(tvd, vals.keyword, vals.threshold); // 類似予約リストの作成\r
if ( env.getGivePriorityToReserved() ) {\r
- // 類似予約が優先される場合\r
- if ( vals.likeRsvList.size() > 0 ) {\r
- LikeReserveItem lr = vals.likeRsvList.getClosest(myself);\r
- if ( lr != null ) {\r
- // 選択中のレコーダの類似予約があれば\r
- myrec = lr.getRec();\r
- myrsv = lr.getRsv();\r
- vals.selectedLikeRsv = lr;\r
- \r
- if ( myself == HDDRecorder.SELECTED_ALL || myself == HDDRecorder.SELECTED_PICKUP ) {\r
- // "すべて" or "ピックアップのみ"\r
- if (debug) System.out.println(DBGID+"選択中のレコーダがないので先頭の類似予約を使う: "+myself);\r
- }\r
- }\r
- else {\r
- // 類似予約があってもコンボボックスで選択したレコーダのものがない場合は無視\r
- if (debug) System.out.println(DBGID+"類似予約に選択中のレコーダのものはなかった: "+myself);\r
- }\r
+ // 類似予約が優先される\r
+ LikeReserveItem likersv = findClosestLikeReserve(likersvlist, myself); // 類似予約の絞り込み\r
+ if ( likersv != null ) {\r
+ myrsvidx = likersvlist.getClosestIndex();\r
+ myrsv = likersv.getRsv();\r
+ myrec = likersv.getRec();\r
}\r
}\r
\r
- // ジャンル別AV設定の確認\r
+ vals.hide_likersvlist = likersvlist; // 隠しパラメータ\r
+ \r
+ // ジャンル別AV設定の確認(該当するものがあれば)\r
AVs myavs = null;\r
if ( myrsv == null ) {\r
// 類似予約がないか、あっても優先されない場合\r
- myavs = getSelectedAVs(vals.hide_tvd.genre, vals.hide_tvd.center, myrec.getRecorderId());\r
+ myavs = findAVs(tvd.genre, tvd.center, myrec.getRecorderId());\r
}\r
else {\r
- MWin.appendMessage(MSGID+"ç\94»è³ªã\83»é\9f³è³ªã\81¯é¡\9eä¼¼äº\88ç´\84ã\81®è¨å®\9aã\81\8cç¶\99æ\89¿ã\81\95ã\82\8cã\81¾ã\81\99");\r
+ MWin.appendMessage(MSGID+"ç\94»è³ªã\83»é\9f³è³ªã\82\92é¡\9eä¼¼äº\88ç´\84ã\81\8bã\82\89ç¶\99æ\89¿ã\81\97ã\81¾ã\81\99.");\r
}\r
\r
- // 予約情報\r
- vals.hide_default_recorder = myrec;\r
+ vals.hide_avs = myavs; // 隠しパラメータ\r
+\r
+ // 類似予約リストのアイテム設定\r
+ setLikeRsvItems(likersvlist);\r
\r
- return _open(myself, myrec, myrsv, myavs);\r
- \r
+ // 初期値の選択\r
+ if ( env.getGivePriorityToReserved() && myrsv != null ) {\r
+ // それっぽい類似予約を選択する\r
+ jPane_likersv.setRowSelection(myrsvidx);\r
+ }\r
+ else {\r
+ // 番組情報から選択する\r
+ jPane_likersv.setRowSelection(LikeReserveEditorPanel.LIKERSVTABLE_NONE);\r
+ }\r
+ \r
+ return true;\r
}\r
\r
+ /***************************************\r
+ * 予約情報からのオープン1種\r
+ **************************************/\r
+ \r
/**\r
* 本体予約一覧からのオープン、または予約ON/OFFメニュー\r
+ * @see #doSelectLikeReserve(int)\r
*/\r
public boolean open(String myself, String rsvId) {\r
\r
- HDDRecorderList recs = recorders.findInstance(myself);\r
- if ( recs.size() == 0 ) {\r
+ // 予約は行われてないよー\r
+ doneReserve = false;\r
+ \r
+ HDDRecorderList myrecs = recorders.findInstance(myself);\r
+ if ( myrecs.size() == 0 ) {\r
return false; // ここに来たらバグ\r
}\r
- HDDRecorder myrec = recs.get(0);\r
+ HDDRecorder myrec = myrecs.get(0);\r
\r
ReserveList myrsv = myrec.getReserveList(rsvId);\r
if ( myrsv == null ) {\r
+ MWin.appendMessage(ERRID+"更新すべき予約情報が見つかりません: "+myself+", "+rsvId);\r
+ ringBeep();\r
return false; // ここに来たらバグ\r
}\r
+ if ( myrsv.getCh_name() == null ) {\r
+ MWin.appendMessage(ERRID+"予約情報の放送局名が不正です: "+myrsv.getStartDateTime()+", "+myrsv.getTitle());\r
+ ringBeep();\r
+ return false;\r
+ }\r
\r
// 初期パラメータの保存場所\r
if (vals == null) vals = new Vals();\r
\r
- // 番組ID取得ボタンを無効にする\r
- setGetEventIdButton(null,false);\r
-\r
// 予約情報から番組情報を組み立てる\r
- ProgDetailList tvd = new ProgDetailList();\r
- CommonUtils.getNextDate(myrsv);\r
- tvd.center = myrsv.getCh_name();\r
- tvd.title = myrsv.getTitle();\r
- tvd.detail = myrsv.getDetail();\r
- tvd.start = myrsv.getAhh()+":"+myrsv.getAmm();\r
- tvd.end = myrsv.getZhh()+":"+myrsv.getZmm();\r
- //tvd.accurateDate = myrsv.getRec_pattern(); // これは特殊\r
- tvd.progid = myrsv.getContentId();\r
- tvd.genre = ProgGenre.get(myrsv.getRec_genre());\r
- tvd.subgenre = ProgSubgenre.get(tvd.genre,myrsv.getRec_subgenre());\r
- \r
- // 予約情報から類似予約情報を組み立てる\r
- LikeReserveItem likersv = new LikeReserveItem(myrec,myrsv,0);\r
+ ProgDetailList tvd = getProgDetails(myrsv);\r
\r
- // 隠しパラメータ\r
- vals.hide_tvd = tvd;\r
- vals.hide_content_id = null;\r
- vals.hide_startdatetime = null; // 予約一覧からは番組IDの取得はできないので開始日時は保存しない\r
- vals.hide_atreservedlist = true;\r
+ vals.hide_recorder = myrec; // 隠しパラメータ\r
+ vals.hide_tvd = tvd; // 隠しパラメータ\r
\r
- // 予約情報\r
- vals.selectedLikeRsv = likersv; \r
- vals.likeRsvList = new LikeReserveList();\r
- vals.likeRsvList.add(vals.selectedLikeRsv);\r
-\r
- vals.hide_default_recorder = myrec;\r
+ // 予約情報(類似予約の一個目として設定)\r
+ LikeReserveList likersvlist = new LikeReserveList();\r
+ likersvlist.add(new LikeReserveItem(myrec, myrsv, 0));\r
+ \r
+ vals.hide_likersvlist = likersvlist; // 隠しパラメータ\r
+ \r
+ // 類似予約リストのアイテム設定\r
+ setLikeRsvItems(likersvlist);\r
+ \r
+ // 初期値の選択(類似予約の一個目を選択)\r
+ jPane_likersv.setRowSelection(0);\r
\r
- return _open(myself, myrec, myrsv, null);\r
+ // 各コンポーネントの強制状態変更\r
+ jPane_title.setEnabledRecordButton(false); // 新規ボタンは操作不能に\r
+ jPane_likersv.setEnabledTable(false); // 類似予約は選択不能に\r
+ \r
+ return true;\r
}\r
\r
+ /***************************************\r
+ * オープン用部品\r
+ **************************************/\r
+ \r
/**\r
- * ダイアログオープン(共通処理)\r
+ * 類似予約リストの取得\r
*/\r
- private boolean _open(String myself, HDDRecorder myrec, ReserveList myrsv, AVs myavs) {\r
+ private LikeReserveItem findClosestLikeReserve(LikeReserveList lrl, String myself) {\r
\r
- // 予約は行われてないよー\r
- doneReserve = false;\r
- \r
- if ( vals.hide_content_id == null || ! ContentIdEDCB.isValid(vals.hide_content_id) ) {\r
- if ( myrsv != null && ContentIdEDCB.isValid(myrsv.getContentId()) ) {\r
- vals.hide_content_id = myrsv.getContentId();\r
- setGetEventIdButton(vals.hide_content_id,false);\r
- }\r
+ if ( lrl.size() == 0 ) {\r
+ // 類似予約がない\r
+ return null;\r
}\r
-\r
- // 一旦選択系リスナーは全部止めてしまう\r
- setEnabledSelectionListeners(false);\r
- \r
- // 初期値を設定(固定部分)\r
- setInitFixies(myrec, myrsv);\r
-\r
- // 初期値を設定(可変部分)\r
- setInitVariables(myrec);\r
-\r
- // 初期値を選択\r
- setSelectedVariables(myrec, myrsv, myavs, null, null);\r
- \r
- // 項目ラベルのオーバーライド\r
- setLabels(myrec);\r
-\r
- // リスナーを全部戻す\r
- setEnabledSelectionListeners(true);\r
- \r
- // 選択行が表示されるようにする\r
- CommonSwingUtils.setSelectedRowShown(jtbl_likersv);\r
\r
- // リセット用データ収集\r
- {\r
- vals.isExtended = jCheckBox_spoex_extend.isSelected();\r
- vals.isClipped = jCheckBox_OverlapDown2.isSelected();\r
- vals.byDateIni = (String) jComboBox_date.getItemAt(0);\r
- vals.byWeeklyIni = (String) jComboBox_date.getItemAt(1);\r
- vals.ahh = jTextField_ahh.getText();\r
- vals.amm = jTextField_amm.getText();\r
- vals.zhh = jTextField_zhh.getText();\r
- vals.zmm = jTextField_zmm.getText();\r
+ LikeReserveItem lr = lrl.getClosest(myself);\r
+ if ( lr == null ) {\r
+ // 類似予約があってもコンボボックスで選択したレコーダのものがない\r
+ if (debug) System.out.println(DBGID+"類似予約に選択中のレコーダのものはなかった: "+myself);\r
+ return null;\r
}\r
\r
- return(true);\r
+ // 選択中のレコーダの類似予約があった\r
+ return lr;\r
}\r
\r
/**\r
- * open()時に設定したら内容の変更のないコンボボックスの選択肢の設定\r
- * @see #setInitVariables\r
+ * ジャンル別AV設定の取得\r
*/\r
- private void setInitFixies(HDDRecorder myrec, ReserveList myrsv) {\r
- // レコーダコンボボックスの設定\r
- {\r
- jCBXPanel_recorder.removeAllItems();\r
- for ( HDDRecorder rec : recorders ) {\r
- if ( rec.isBackgroundOnly() ) {\r
- continue; // Googleカレンダープラグインとかははずす\r
- }\r
- jCBXPanel_recorder.addItem(rec.Myself());\r
- }\r
- jCBXPanel_recorder.setEnabled( jCBXPanel_recorder.getItemCount() > 0 );\r
- \r
- if ( vals.hide_atreservedlist ) {\r
- jCBXPanel_recorder.setEnabled(false);\r
- }\r
- else {\r
- jCBXPanel_recorder.setEnabled(true);\r
- }\r
- }\r
+ private AVs findAVs(ProgGenre key_genre, String key_webChName, String recId) {\r
\r
- // 予約名\r
- {\r
- jComboBox_title.removeAllItems();\r
- jComboBox_title.addItem(vals.hide_tvd.title);\r
- for ( LikeReserveItem ll : vals.likeRsvList ) {\r
- for ( int i=0; i<jComboBox_title.getItemCount(); i++ ) {\r
- String t = (String) jComboBox_title.getItemAt(i);\r
- if ( t != null && ! t.equals(ll.getRsv().getTitle()) ) {\r
- jComboBox_title.addItem(ll.getRsv().getTitle());\r
- break;\r
- }\r
- }\r
- }\r
- \r
- // 予約名の初期選択\r
- if ( env.getGivePriorityToReserved() && env.getGivePriorityToReservedTitle() && myrsv != null ) {\r
- jComboBox_title.setSelectedItem(myrsv.getTitle());\r
- }\r
- ((JTextField)jComboBox_title.getEditor().getEditorComponent()).setCaretPosition(0);\r
+ String selected_key = key_genre.toString();\r
+ AVSetting xavs = avs;\r
+ if ( env.getEnableCHAVsetting() ) {\r
+ selected_key = key_webChName;\r
+ xavs = chavs;\r
}\r
\r
- // 詳細\r
- {\r
- jTextArea_detail.setText(vals.hide_tvd.detail+"\n"+vals.hide_tvd.getAddedDetail());\r
- jTextArea_detail.setCaretPosition(0);\r
- }\r
-\r
- // ジャンル\r
- {\r
- jCBXPanel_genre.removeAllItems();\r
- jCBXPanel_subgenre.removeAllItems();\r
- \r
- for ( ProgGenre g : ProgGenre.values() ) {\r
- jCBXPanel_genre.addItem(g.toString());\r
- }\r
- jCBXPanel_genre.setEnabled( jCBXPanel_genre.getItemCount() > 0 );\r
- \r
- if ( vals.hide_tvd.subgenre == null ) {\r
- jCBXPanel_subgenre.setEnabled(false);\r
+ AVs myavs = xavs.getSelectedAVs(selected_key, recId);\r
+ if ( myavs != null ) {\r
+ if ( myavs.getGenre() != null ) {\r
+ MWin.appendMessage(MSGID+"画質・音質を自動設定します: "+recId+" & "+myavs.getGenre());\r
}\r
else {\r
- for ( ProgSubgenre sg : ProgSubgenre.values(vals.hide_tvd.genre)) {\r
- jCBXPanel_subgenre.addItem(sg.toString());\r
- }\r
- jCBXPanel_subgenre.setEnabled( jCBXPanel_subgenre.getItemCount() > 0 );\r
- }\r
- \r
- // ジャンルの初期選択\r
- if ( vals.hide_tvd.genre != null ) {\r
- jCBXPanel_genre.setSelectedItem(vals.hide_tvd.genre.toString());\r
- if ( vals.hide_tvd.subgenre != null ) {\r
- jCBXPanel_subgenre.setSelectedItem(vals.hide_tvd.subgenre.toString());\r
- }\r
+ MWin.appendMessage(MSGID+"画質・音質にデフォルト設定を適用します: "+recId);\r
}\r
}\r
+ else {\r
+ MWin.appendMessage(MSGID+"画質・音質の自動設定候補がありません: "+recId+" & "+selected_key);\r
+ }\r
\r
- boolean OverlapException = false; // 日付コンボボックスでも使うよ\r
+ return myavs;\r
+ }\r
+ \r
+ /**\r
+ * 番組情報から予約情報を生成する\r
+ */\r
+ private ReserveList getReserveList(HDDRecorder recorder, String enc) {\r
\r
- // 開始・終了時刻は長いよ\r
- {\r
- int ahh = Integer.valueOf(vals.hide_tvd.start.substring(0,vals.hide_tvd.start.indexOf(":")));\r
- int amm = Integer.valueOf(vals.hide_tvd.start.substring(vals.hide_tvd.start.indexOf(":")+1,vals.hide_tvd.start.length()));\r
- int zhh = Integer.valueOf(vals.hide_tvd.end.substring(0,vals.hide_tvd.end.indexOf(":")));\r
- int zmm = Integer.valueOf(vals.hide_tvd.end.substring(vals.hide_tvd.end.indexOf(":")+1,vals.hide_tvd.end.length()));\r
- \r
- if ( ! vals.hide_atreservedlist ) {\r
- // のりしろ処理\r
- if (env.getOverlapUp() == true) {\r
- int a = ahh*60+amm-1;\r
- if (a<0) {\r
- a+=24*60;\r
- OverlapException = true;\r
- }\r
- amm = a % 60;\r
- ahh = (a-amm)/60;\r
- }\r
- if (env.getOverlapDown() == true) {\r
- int z = zhh*60+zmm+1;\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- jCheckBox_OverlapDown2.setSelected(false);\r
- jCheckBox_OverlapDown2.setForeground(Color.BLACK);\r
- }\r
- else if (\r
- env.getOverlapDown2() == true &&\r
- ! vals.hide_tvd.dontoverlapdown && // NHKは縮めない\r
- ! (env.getNoOverlapDown2Sp() && vals.hide_tvd.option.contains(ProgOption.SPECIAL)) // OVAとかは縮めない \r
- ) {\r
- jCheckBox_OverlapDown2.setSelected(true);\r
- jCheckBox_OverlapDown2.setForeground(Color.RED);\r
- int z = zhh*60+zmm-1;\r
- if (z<0) {\r
- z+=24*60;\r
- }\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- }\r
- else {\r
- jCheckBox_OverlapDown2.setSelected(false);\r
- jCheckBox_OverlapDown2.setForeground(Color.BLACK);\r
- }\r
- \r
- // 延長警告処理\r
- int spoexLength = Integer.valueOf(env.getSpoexLength());\r
- if (vals.hide_tvd.extension == true && spoexLength>0) {\r
- jCheckBox_spoex_extend.setSelected(true);\r
- jCheckBox_spoex_extend.setForeground(Color.RED);\r
- int z = zhh*60+zmm+spoexLength;\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- }\r
- else {\r
- jCheckBox_spoex_extend.setSelected(false);\r
- jCheckBox_spoex_extend.setForeground(Color.BLACK);\r
- }\r
- }\r
- else {\r
- jCheckBox_spoex_extend.setEnabled(false);\r
- jCheckBox_spoex_extend.setSelected(false);\r
- jCheckBox_spoex_extend.setForeground(Color.BLACK);\r
- jCheckBox_OverlapDown2.setEnabled(false);\r
- jCheckBox_OverlapDown2.setSelected(false);\r
- jCheckBox_OverlapDown2.setForeground(Color.BLACK);\r
- }\r
- \r
- jTextField_ahh.setText(String.format("%02d", ahh));\r
- jTextField_amm.setText(String.format("%02d", amm));\r
- jTextField_zhh.setText(String.format("%02d", zhh));\r
- jTextField_zmm.setText(String.format("%02d", zmm));\r
- }\r
+ ReserveList r = new ReserveList();\r
+ \r
+ // チューナー\r
+ r.setTuner(enc);\r
+ \r
+ // 画質・音質\r
+ r.setRec_mode(getDefaultText(recorder, recorder.getVideoRateList()));\r
+ r.setRec_audio(getDefaultText(recorder, recorder.getAudioRateList()));\r
+ r.setRec_folder(getDefaultText(recorder, recorder.getFolderList()));\r
\r
- // 録画日付(のりしろ処理が必要な場合あり)\r
- {\r
- jComboBox_date.removeAllItems();\r
- if ( ! vals.hide_atreservedlist ) {\r
- // リスト/新聞形式からの呼び出しなら番組情報をもとに\r
- GregorianCalendar c = CommonUtils.getCalendar(vals.hide_tvd.accurateDate);\r
- if ( c != null ) {\r
- if (OverlapException == true) {\r
- c.add(Calendar.DATE, -1);\r
- }\r
- jComboBox_date.addItem(CommonUtils.getDate(c));\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[c.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY]);\r
- }\r
- }\r
- else {\r
- // 本体予約一覧からの呼び出しなら既存の予約情報からの引継ぎ\r
- GregorianCalendar c = CommonUtils.getCalendar(myrsv.getRec_pattern());\r
- if ( c != null ) {\r
- jComboBox_date.addItem(myrsv.getRec_pattern());\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[c.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY]);\r
- }\r
- else {\r
- jComboBox_date.addItem(myrsv.getRec_nextdate());\r
- jComboBox_date.addItem(myrsv.getRec_pattern());\r
- }\r
- }\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[7]);\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[8]);\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[9]);\r
- jComboBox_date.addItem(HDDRecorder.RPTPTN[10]);\r
+ r.setRec_dvdcompat(getDefaultText(recorder, recorder.getDVDCompatList()));\r
+ r.setRec_device(getDefaultText(recorder, recorder.getDeviceList()));\r
+ \r
+ // 自動チャプタ関連\r
+ r.setRec_xchapter(getDefaultText(recorder, recorder.getXChapter()));\r
+ r.setRec_mschapter(getDefaultText(recorder, recorder.getMsChapter()));\r
+ r.setRec_mvchapter(getDefaultText(recorder, recorder.getMvChapter()));\r
+ \r
+ // その他\r
+ r.setRec_aspect(getDefaultText(recorder, recorder.getAspect()));\r
+ r.setRec_bvperf(getDefaultText(recorder, recorder.getBVperf()));\r
+ r.setRec_lvoice(getDefaultText(recorder, recorder.getLVoice()));\r
+ r.setRec_autodel(getDefaultText(recorder, recorder.getAutodel()));\r
+ \r
+ r.setExec(true);\r
+ \r
+ return r;\r
+ }\r
+ \r
+ private String getDefaultText(HDDRecorder myrec, ArrayList<TextValueSet> tvs) {\r
+ TextValueSet t = myrec.getDefaultSet(tvs);\r
+ if ( t != null ) {\r
+ return t.getText();\r
}\r
+ if ( tvs.size() > 0 ) {\r
+ return tvs.get(0).getText();\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ /**\r
+ * 予約情報から番組情報を生成する\r
+ */\r
+ private ProgDetailList getProgDetails(ReserveList myrsv) {\r
+ \r
+ ProgDetailList tvd = new ProgDetailList();\r
+ \r
+ tvd.title = myrsv.getTitle();\r
+ tvd.detail = myrsv.getDetail();\r
+ \r
+ tvd.center = myrsv.getCh_name();\r
\r
- // 類似予約コンボボックスと抽出条件、その関連\r
{\r
- //vals.likeRsvList.clear();\r
- int selectedrow = LIKERSVTABLE_NOTSELECTED;\r
- if ( ! vals.hide_atreservedlist ) {\r
- jButton_record.setForeground(Color.RED);\r
- jButton_record.setEnabled(true);\r
- if ( vals.likeRsvList.size() > 0 ) {\r
- //jButton_update.setForeground(Color.RED);\r
- //jButton_update.setEnabled(true);\r
- jtbl_likersv.setEnabled(true);\r
- \r
- // 類似予約中の一番近い予約を探す\r
- long score = 86400;\r
- if ( env.getGivePriorityToReserved() ) {\r
- for ( int i=0; i<vals.likeRsvList.size(); i++) {\r
- if ( vals.likeRsvList.getRec(i).isMyself(myrec.Myself()) ) {\r
- long sc = CommonUtils.getDiffDateTime(vals.likeRsvList.getRsv(i).getStartDateTime(), vals.hide_tvd.startDateTime);\r
- if ( selectedrow == -1 || score > sc ) {\r
- selectedrow = i;\r
- score = sc;\r
- }\r
- }\r
- }\r
- }\r
-\r
- }\r
- else {\r
- jtbl_likersv.setEnabled(false);\r
- }\r
- }\r
- else {\r
- // 本体予約一覧の場合は1個だけ追加すればよい\r
- jButton_record.setForeground(Color.GRAY);\r
- jButton_record.setEnabled(false);\r
- jtbl_likersv.setEnabled(false);\r
- selectedrow = 0;\r
- //vals.likeRsvList.add(new LikeReserveItem(myrec,myrsv));\r
- }\r
-\r
- ((DefaultTableModel)jtbl_likersv.getModel()).fireTableDataChanged();\r
- ((DefaultTableModel)jrhdr_likersv.getModel()).fireTableDataChanged();\r
+ String nextdate = CommonUtils.getNextDate(myrsv);\r
+ GregorianCalendar ca = CommonUtils.getCalendar(nextdate);\r
\r
- jtbl_likersv.setRowSelectionInterval(selectedrow,selectedrow);\r
+ ca.add(Calendar.HOUR_OF_DAY, Integer.valueOf(myrsv.getAhh())-ca.get(Calendar.HOUR_OF_DAY));\r
+ ca.add(Calendar.MINUTE, Integer.valueOf(myrsv.getAmm())-ca.get(Calendar.MINUTE));\r
+ tvd.startDateTime = CommonUtils.getDateTime(ca);\r
+ tvd.start = CommonUtils.getTime(ca);\r
\r
- setEnabledUpdateButton(jtbl_likersv.getSelectedRow());\r
+ ca.add(Calendar.MINUTE, Integer.valueOf(myrsv.getRec_min()));\r
+ tvd.endDateTime = CommonUtils.getDateTime(ca);\r
+ tvd.end = CommonUtils.getTime(ca);\r
}\r
+ \r
+ tvd.progid = myrsv.getContentId();\r
+ \r
+ tvd.genre = ProgGenre.get(myrsv.getRec_genre());\r
+ tvd.subgenre = ProgSubgenre.get(tvd.genre,myrsv.getRec_subgenre());\r
+ \r
+ // 特殊\r
+ tvd.accurateDate = null;\r
+ tvd.dontoverlapdown = true;\r
+ \r
+ return tvd;\r
+ }\r
+ \r
+ /***************************************\r
+ * 番組情報部の設定\r
+ **************************************/\r
+ \r
+ private TimeVal setTitleItems(HDDRecorder myrec, ProgDetailList tvd, LikeReserveList lrl, boolean atrsvlst) {\r
+ \r
+ jPane_title.setContentIdValue(tvd.progid, ! atrsvlst);\r
+ jPane_title.setTitleItems(tvd, lrl, env.getUseAutocomplete());\r
+ jPane_title.setChItem(myrec, tvd);\r
+ \r
+ TimeVal tVal = getTimeValue(tvd);\r
+ jPane_title.setTimeValue(tVal);\r
+ jPane_title.setDateItems(tvd, tVal);\r
+ \r
+ return tVal;\r
+ }\r
+ \r
+ /***************************************\r
+ * 録画設定部の設定\r
+ **************************************/\r
+ \r
+ private void setRecSettingItems(HDDRecorderList reclst, HDDRecorder myrec, ProgDetailList tvd) {\r
+ \r
+ jPane_recsetting.setLabels(myrec); // 項目ラベル\r
+ jPane_recsetting.setFixedItems(reclst); // 固定アイテム\r
+ jPane_recsetting.setFlexItems(myrec,tvd.center); // 可変アイテム\r
+ }\r
+ \r
+ /***************************************\r
+ * 類似予約部の設定\r
+ **************************************/\r
+ \r
+ private void setLikeRsvItems(LikeReserveList lrl) {\r
+ jPane_likersv.setListItems(lrl);\r
}\r
\r
+ \r
+ /*******************************************************************************\r
+ * ほげほげ\r
+ ******************************************************************************/\r
+ \r
/**\r
- * 更新ボタンの有効無効\r
+ * 延長警告などを加味した録画開始・終了日時を算出する\r
*/\r
- private void setEnabledUpdateButton(int selectedrow) {\r
- if ( selectedrow == LIKERSVTABLE_NOTSELECTED ) {\r
- jButton_update.setForeground(Color.BLACK);\r
- jButton_update.setEnabled(false);\r
- }\r
- else {\r
- jButton_update.setForeground(Color.RED);\r
- jButton_update.setEnabled(true);\r
+ private TimeVal getTimeValue(ProgDetailList tvd) {\r
+ \r
+ TimeVal tVal = new TimeVal();\r
+ \r
+ GregorianCalendar ca = CommonUtils.getCalendar(tvd.startDateTime);\r
+ GregorianCalendar cz = CommonUtils.getCalendar(tvd.endDateTime);\r
+ \r
+ if ( tvd.accurateDate != null ) {\r
+ // のりしろ処理(開始時刻)\r
+ if ( env.getOverlapUp() ) {\r
+ // 開始1分前倒し\r
+ ca.add(Calendar.MINUTE, -1);\r
+ \r
+ tVal.margined = true;\r
+ }\r
+ \r
+ // のりしろ処理(終了時刻)\r
+ if ( env.getOverlapDown() ) {\r
+ // 終了1分延長\r
+ cz.add(Calendar.MINUTE, +1);\r
+ }\r
+ else if (\r
+ env.getOverlapDown2() &&\r
+ ! tvd.dontoverlapdown && // NHKは縮めない\r
+ ! (env.getNoOverlapDown2Sp() && tvd.option.contains(ProgOption.SPECIAL)) // OVAとかは縮めない \r
+ ) {\r
+ // 終了1分前倒し\r
+ cz.add(Calendar.MINUTE, -1);\r
+ \r
+ tVal.clipped = true;\r
+ }\r
+ \r
+ // 延長警告処理\r
+ int spoexlen = Integer.valueOf(env.getSpoexLength());\r
+ if ( tvd.extension == true && spoexlen > 0 ) {\r
+ // 指定時間分延長\r
+ cz.add(Calendar.MINUTE, +spoexlen);\r
+ \r
+ tVal.spoex = true;\r
+ tVal.spoexlen = spoexlen;\r
+ }\r
}\r
+ \r
+ tVal.date = CommonUtils.getDate(ca);\r
+ \r
+ tVal.ahh = ca.get(Calendar.HOUR_OF_DAY);\r
+ tVal.amm = ca.get(Calendar.MINUTE);\r
+ tVal.zhh = cz.get(Calendar.HOUR_OF_DAY);\r
+ tVal.zmm = cz.get(Calendar.MINUTE);\r
+ \r
+ tVal.startDateTime = CommonUtils.getDateTime(ca);\r
+ tVal.endDateTime = CommonUtils.getDateTime(cz);\r
+\r
+ return tVal;\r
}\r
\r
+ \r
/**\r
* 他のコンボボックスの操作によって内容が変わるコンボボックスの選択肢の入れ替え\r
* @see #setInitFixies\r
*/\r
+ /*\r
private void setInitVariables(HDDRecorder myrec) {\r
\r
// 番組追従\r
{\r
if ( myrec.isPursuesEditable() ) {\r
- jCBXPanel_pursues.setEnabled( ! ITEM_EVIDNEEDED.equals(jButton_getEventId.getText()));\r
+ jPane_recsetting.setEnebledPursues( ! ITEM_EVIDNEEDED.equals(jButton_getEventId.getText()));\r
}\r
else {\r
- jCBXPanel_pursues.setEnabled(false);\r
+ jPane_recsetting.setEnebledPursues(false);\r
}\r
}\r
\r
jComboBox_ch.setEnabled( jComboBox_ch.getItemCount() > 0 );\r
}\r
\r
- // エンコーダ\r
- {\r
- jCBXPanel_encoder.removeAllItems();\r
- for ( String enc : getFilteredEncoders(myrec, vals.hide_tvd.center) ) {\r
- jCBXPanel_encoder.addItem(enc);\r
- }\r
- jCBXPanel_encoder.setEnabled( jCBXPanel_encoder.getItemCount() > 0 );\r
- }\r
- \r
// 日付\r
{\r
if ( myrec.isRepeatReserveSupported() ) {\r
}\r
}\r
\r
- // AV設定\r
- refCBX(jCBXPanel_videorate, myrec.getVideoRateList());\r
- refCBX(jCBXPanel_folder, myrec.getFolderList());\r
- refCBX(jCBXPanel_audiorate, myrec.getAudioRateList());\r
- \r
- refCBX(jCBXPanel_device, myrec.getDeviceList());\r
- refCBX(jCBXPanel_bvperf, myrec.getBVperf());\r
- refCBX(jCBXPanel_dvdcompat, myrec.getDVDCompatList());\r
- \r
- refCBX(jCBXPanel_autodel, myrec.getAutodel());\r
- refCBX(jCBXPanel_lvoice, myrec.getLVoice());\r
- refCBX(jCBXPanel_aspect, myrec.getAspect());\r
+ // エンコーダ\r
+ jPane_recsetting.initEncoders(getFilteredEncoders(myrec, vals.hide_tvd.center));\r
\r
- refCBX(jCBXPanel_msChapter, myrec.getMsChapter());\r
- refCBX(jCBXPanel_mvChapter, myrec.getMvChapter());\r
- refCBX(jCBXPanel_xChapter, myrec.getXChapter());\r
-\r
- {\r
- jCBXPanel_pursues.removeAllItems();\r
- jCBXPanel_pursues.addItem(ITEM_YES);\r
- jCBXPanel_pursues.addItem(ITEM_NO);\r
- }\r
+ // AV設定\r
+ jPane_recsetting.initAVSettings(myrec);\r
}\r
+ */\r
\r
/**\r
* コンボボックス操作によって連動して選択しなおし\r
*/\r
+ /*\r
private void setSelectedVariables(HDDRecorder myrec, ReserveList myrsv, AVs myavs, String mychname, String myenc) {\r
\r
// 予約実行\r
- if ( myrsv == null ) {\r
- jCheckBox_Exec.setSelected(true);\r
- jCheckBox_Exec.setForeground(Color.BLACK);\r
- }\r
- else {\r
- jCheckBox_Exec.setSelected(myrsv.getExec());\r
- jCheckBox_Exec.setForeground((myrsv.getExec())?(Color.BLACK):(Color.RED));\r
- }\r
+ jPane_recsetting.setExec((myrsv==null) ? true : myrsv.getExec());\r
\r
// タイトル\r
if ( myrsv == null ) {\r
}\r
\r
// 番組追従\r
- jCBXPanel_pursues.setEnabled(myrec.isPursuesEditable());\r
- if ( ! vals.hide_atreservedlist ) {\r
- if ( myrec.isPursuesEditable() ) {\r
- jCBXPanel_pursues.setEnabled(true);\r
- if ( myrsv != null ) {\r
- // 類似予約からの継承\r
- jCBXPanel_pursues.setSelectedItem((myrsv.getPursues())?(ITEM_YES):(ITEM_NO));\r
- }\r
- else {\r
- // デフォルトはON\r
- if ( ITEM_EVIDNEEDED.equals(jButton_getEventId.getText()) ) {\r
- jCBXPanel_pursues.setEnabled(false);\r
- jCBXPanel_pursues.setSelectedItem(ITEM_NO);\r
- }\r
- else {\r
- jCBXPanel_pursues.setSelectedItem(ITEM_YES);\r
- }\r
- }\r
- }\r
- else {\r
- jCBXPanel_pursues.setEnabled(false);\r
- jCBXPanel_pursues.setSelectedItem(ITEM_NO);\r
- }\r
- }\r
- else {\r
- if ( myrec.isPursuesEditable() ) { \r
- // 既存予約の継承(番組IDが取得できるまではdisable)\r
- jCBXPanel_pursues.setEnabled( myrsv.getContentId() != null && myrsv.getContentId().length() > 0 );\r
- jCBXPanel_pursues.setSelectedItem((myrsv.getPursues())?(ITEM_YES):(ITEM_NO));\r
- }\r
- else {\r
- jCBXPanel_pursues.setEnabled(false);\r
- jCBXPanel_pursues.setSelectedItem((myrsv.getPursues())?(ITEM_YES):(ITEM_NO));\r
- }\r
- }\r
+ jPane_recsetting.setPursues(myrec,myrsv,vals.hide_atreservedlist,ITEM_EVIDNEEDED.equals(jButton_getEventId.getText()));\r
\r
// レコーダ\r
- jCBXPanel_recorder.setSelectedItem(myrec.Myself());\r
+ jPane_recsetting.setRecorder(myrec.Myself());\r
\r
// エンコーダ(移動しました)\r
\r
// サブジャンル\r
- {\r
- ProgGenre mygenre = ProgGenre.get((String) jCBXPanel_genre.getSelectedItem());\r
- jCBXPanel_subgenre.removeAllItems();\r
- for ( ProgSubgenre sg : ProgSubgenre.values(mygenre) ) {\r
- jCBXPanel_subgenre.addItem(sg.toString());\r
- }\r
- if ( myrsv != null && mygenre == ProgGenre.get(myrsv.getRec_genre()) ) {\r
- jCBXPanel_subgenre.setSelectedItem(myrsv.getRec_subgenre());\r
- }\r
- else if ( mygenre == vals.hide_tvd.genre ) {\r
- jCBXPanel_subgenre.setSelectedItem(vals.hide_tvd.subgenre.toString());\r
- }\r
- }\r
+ jPane_recsetting.setSubgenre(myrsv, vals.hide_tvd.genre, vals.hide_tvd.subgenre);\r
\r
// 連動するAV設定\r
setSelectedAVItems(myrec.getRecorderId(), myrsv, myavs);\r
{\r
\r
if ( vals.hide_atreservedlist ) {\r
- jCBXPanel_encoder.setSelectedItem(myrsv.getTuner());\r
+ jPane_recsetting.setEncoder(myrsv.getTuner());\r
}\r
else if ( jCBXPanel_encoder.getItemCount() > 0 ) {\r
// 裏番組チェックとかやるよ\r
catch ( NumberFormatException e) {\r
System.err.println(ERRID+"時刻の指定が数値ではありません");\r
}\r
+ \r
String enc = getEmptyEncorder(myrec, vals.hide_tvd.center, vals.hide_tvd.accurateDate, starttm, endtm, vrate);\r
\r
if ( myrsv != null ) {\r
// 類似予約最優先\r
- jCBXPanel_encoder.setSelectedItem(myrsv.getTuner());\r
+ jPane_recsetting.setEncoder(myrsv.getTuner());\r
}\r
else if ( myrec.isAutoEncSelectEnabled() && ! vals.hide_atreservedlist ) {\r
// 番組情報に近い予約を探してエンコーダを絞り込む\r
- jCBXPanel_encoder.setSelectedItem(enc);\r
+ jPane_recsetting.setEncoder(enc);\r
showUraList(myrec.Myself());\r
}\r
else if ( jCBXPanel_encoder.getItemCount() > 0 ) {\r
// 類似予約や自動選択がない場合は極力もとのエンコーダを選択したい\r
if ( myenc != null ) {\r
- jCBXPanel_encoder.setSelectedItem(myenc);\r
+ jPane_recsetting.setEncoder(myenc);\r
myenc = (String) jCBXPanel_encoder.getSelectedItem();\r
}\r
if ( myenc == null ) {\r
- jCBXPanel_encoder.setSelectedIndex(0);\r
+ jPane_recsetting.setEncoder(null);\r
}\r
showUraList(myrec.Myself());\r
}\r
jComboBox_date.setSelectedIndex(dateid);\r
}\r
}\r
-\r
+ */\r
+ /*\r
private void setSelectedAVItems(String myrecid, ReserveList myrsv, AVs myavs) {\r
if ( myrsv != null ) {\r
- selCBX(jCBXPanel_videorate, myrsv.getRec_mode());\r
- selCBX(jCBXPanel_folder, myrsv.getRec_folder());\r
- selCBX(jCBXPanel_audiorate, myrsv.getRec_audio());\r
- \r
- selCBX(jCBXPanel_device, myrsv.getRec_device());\r
- selCBX(jCBXPanel_bvperf, myrsv.getRec_bvperf());\r
- selCBX(jCBXPanel_dvdcompat, myrsv.getRec_dvdcompat());\r
- \r
- selCBX(jCBXPanel_autodel, myrsv.getRec_autodel());\r
- selCBX(jCBXPanel_lvoice, myrsv.getRec_lvoice());\r
- selCBX(jCBXPanel_aspect, myrsv.getRec_aspect());\r
- \r
- selCBX(jCBXPanel_msChapter, myrsv.getRec_mschapter());\r
- selCBX(jCBXPanel_mvChapter, myrsv.getRec_mvchapter());\r
- selCBX(jCBXPanel_xChapter, myrsv.getRec_xchapter());\r
+ jPane_recsetting.setSelectedAVSettings(myrsv);\r
}\r
else if ( myavs != null ) {\r
- selCBX(jCBXPanel_videorate, myavs.getVideorate());\r
- selCBX(jCBXPanel_folder, myavs.getFolder());\r
- selCBX(jCBXPanel_audiorate, myavs.getAudiorate());\r
- \r
- selCBX(jCBXPanel_device, myavs.getDevice());\r
- selCBX(jCBXPanel_bvperf, myavs.getBvperf());\r
- selCBX(jCBXPanel_dvdcompat, myavs.getDVDCompat());\r
- \r
- selCBX(jCBXPanel_autodel, myavs.getAutodel());\r
- selCBX(jCBXPanel_lvoice, myavs.getLvoice());\r
- selCBX(jCBXPanel_aspect, myavs.getAspect());\r
- \r
- selCBX(jCBXPanel_msChapter, myavs.getMsChapter());\r
- selCBX(jCBXPanel_mvChapter, myavs.getMvChapter());\r
- selCBX(jCBXPanel_xChapter, myavs.getXChapter());\r
- \r
- {\r
- jCBXPanel_pursues.setSelectedItem(myavs.getPursues()?ITEM_YES:ITEM_NO);\r
- }\r
+ jPane_recsetting.setSelectedAVSettings(myavs);\r
}\r
else {\r
// 特殊アイテム\r
}\r
}\r
}\r
+ */\r
\r
/**\r
* <P>指定したレコーダによってフォルダを変える\r
* <P>うーん、folderを他の用途に転用してるけど問題おきないかな?\r
*/\r
+ /*\r
private void setSelectedFolder() {\r
\r
// タイトルに連動\r
jCBXPanel_folder.setSelectedIndex(defaultFolderIdx);\r
}\r
}\r
- \r
- private void setLabels(HDDRecorder recorder) {\r
- String val;\r
- \r
- val = recorder.getLabel_Videorate();\r
- jCBXPanel_videorate.setText((val!=null)?(val):("画質"));\r
- val = recorder.getLabel_Audiorate();\r
- jCBXPanel_audiorate.setText((val!=null)?(val):("音質"));\r
- val = recorder.getLabel_Folder();\r
- jCBXPanel_folder.setText((val!=null)?(val):("記録先フォルダ"));\r
- val = recorder.getLabel_Device();\r
- jCBXPanel_device.setText((val!=null)?(val):("記録先デバイス"));\r
- val = recorder.getLabel_DVDCompat();\r
- jCBXPanel_dvdcompat.setText((val!=null)?(val):("BD/DVD互換モード"));\r
- val = recorder.getLabel_XChapter();\r
- jCBXPanel_xChapter.setText((val!=null)?(val):("無音部分チャプタ分割"));\r
- val = recorder.getLabel_MsChapter();\r
- jCBXPanel_msChapter.setText((val!=null)?(val):("マジックチャプタ(シーン)"));\r
- val = recorder.getLabel_MvChapter();\r
- jCBXPanel_mvChapter.setText((val!=null)?(val):("マジックチャプタ(本編)"));\r
- val = recorder.getLabel_Aspect();\r
- jCBXPanel_aspect.setText((val!=null)?(val):("録画のりしろ"));\r
- val = recorder.getLabel_BVperf();\r
- jCBXPanel_bvperf.setText((val!=null)?(val):("録画優先度"));\r
- val = recorder.getLabel_LVoice();\r
- jCBXPanel_lvoice.setText((val!=null)?(val):("ライン音声選択"));\r
- val = recorder.getLabel_Autodel();\r
- jCBXPanel_autodel.setText((val!=null)?(val):("自動削除"));\r
- }\r
- \r
+ */\r
\r
/*******************************************************************************\r
* 共通部品的な\r
******************************************************************************/\r
\r
/**\r
- * コンボボックスのアイテムのリフレッシュ\r
- */\r
- private void refCBX(JComboBoxPanel combo, ArrayList<TextValueSet> tvs) {\r
- combo.removeAllItems();\r
- for ( TextValueSet t : tvs ) {\r
- combo.addItem(t.getText());\r
- if (t.getDefval()) combo.setSelectedIndex(combo.getItemCount()-1); // デフォルト値があるならば\r
- }\r
- \r
- combo.setEnabled( combo.getItemCount() > 0 );\r
- }\r
- \r
- /**\r
- * コンボボックスのアイテム選択\r
- */\r
- private void selCBX(JComboBoxPanel combo, String selected) {\r
- if ( selected != null ) combo.setSelectedItem(selected);\r
- }\r
-\r
- /**\r
* コンボボックス系のリスナーの設定/解除\r
*/\r
private void setEnabledSelectionListeners(boolean b) {\r
+ /*\r
// 重複呼び出しがこわいので一回全部削除してしまう\r
jCBXPanel_encoder.removeItemListener(il_encoderChanged);\r
jCBXPanel_videorate.removeItemListener(il_videorateChanged);\r
jCBXPanel_genre.addItemListener(il_genreChanged);\r
jtbl_likersv.addMouseListener(ml_likelistSelected);\r
}\r
+ */\r
}\r
\r
private void removeAllSelectionItems() {\r
+ /*\r
jCBXPanel_encoder.removeAllItems();\r
jCBXPanel_videorate.removeAllItems();\r
jCBXPanel_recorder.removeAllItems();\r
jCBXPanel_genre.removeAllItems();\r
//likersvtable.removeAllItems();\r
+ */\r
}\r
\r
\r
+ \r
/*******************************************************************************\r
* ネットから番組IDを取得する\r
******************************************************************************/\r
\r
/**\r
- * ã\82¸ã\83£ã\83³ã\83«å\88¥ï¼¡ï¼¶è¨å®\9aã\81®å\8f\96å¾\97\r
+ * ã\83\80ã\82¤ã\82¢ã\83ã\82°ã\82ªã\83¼ã\83\97ã\83³æ\99\82ã\81®ç\95ªçµ\84IDå\8f\96å¾\97å\87¦ç\90\86\r
*/\r
- private AVs getSelectedAVs(ProgGenre key_genre, String key_webChName, String recId) {\r
+ private String getEventIdOnOpen(ProgDetailList tvd) {\r
\r
- AVs myavs = new AVs();\r
+ if (debug) System.err.println(DBGID+"ダイアログ表示時の自動番組ID取得 id=\""+tvd.progid+"\"");\r
\r
- String selected_key = null;\r
- AVSetting xavs = null;\r
- if ( env.getEnableCHAVsetting() ) {\r
- selected_key = key_webChName;\r
- xavs = chavs;\r
+ if ( ContentIdEDCB.isValid(tvd.progid) ) {\r
+ if (debug) System.err.println(DBGID+"番組ID取得済み");\r
+ return tvd.progid;\r
}\r
- else {\r
- selected_key = key_genre.toString();\r
- xavs = avs;\r
+ if ( ! env.getAutoEventIdComplete() ) {\r
+ if (debug) System.err.println(DBGID+"番組ID自動取得OFF");\r
+ return tvd.progid; // 有効な値かもしれないし、nullかもしれない\r
}\r
\r
- jButton_load.setEnabled(true);\r
- myavs = xavs.get(recId, selected_key);\r
- if (myavs == null) { \r
- jButton_load.setEnabled(false);\r
- \r
- // デフォルトの設定があれば再チャレンジ!\r
- myavs = xavs.get(recId, null);\r
- if ( myavs != null ) {\r
- selected_key = "デフォルト";\r
- }\r
+ // キャッシュに情報を持っていないか探す\r
+ String content_id = getContentId(tvd, false);\r
+ if ( content_id != null ) {\r
+ if (debug) System.err.println(DBGID+"番組IDキャッシュ有効");\r
+ return content_id;\r
}\r
+ \r
+ // ネットに探しに行く\r
+ return doGetEventId();\r
+ }\r
\r
- if ( myavs != null ) {\r
- MWin.appendMessage(MSGID+"画質・音質を自動設定します: "+recId+" & "+selected_key);\r
+\r
+ /*******************************************************************************\r
+ * 自動エンコーダ選択と裏番組抽出\r
+ ******************************************************************************/\r
+\r
+ private void showUrabanList(ArrayList<ReserveList> urabanlist) {\r
+ if ( urabanlist == null ) {\r
+ return;\r
+ }\r
+ String MID = MSGID+"[裏番組チェック] ";\r
+ if ( urabanlist.size() > 0 ) {\r
+ for ( ReserveList ura : urabanlist ) {\r
+ MWin.appendMessage(String.format("%s裏番組あり: %s:%s-%s:%s, %-10s, %-12s, %s", MID, ura.getAhh(), ura.getAmm(), ura.getZhh(), ura.getZmm(), ura.getTuner(), ura.getCh_name(), ura.getTitle()));\r
+ }\r
}\r
else {\r
- MWin.appendMessage(MSGID+"画質・音質の自動設定候補がありません: "+recId+" & "+selected_key);\r
+ // 裏番組がない場合に分かりにくかったので追加\r
+ MWin.appendMessage(MID+"裏番組はありません");\r
}\r
- \r
- return myavs;\r
}\r
\r
\r
/*******************************************************************************\r
- * ã\83\8dã\83\83ã\83\88ã\81\8bã\82\89ç\95ªçµ\84IDã\82\92å\8f\96å¾\97ã\81\99ã\82\8b\r
+ * ã\82¨ã\83³ã\82³ã\83¼ã\83\80ã\82³ã\83³ã\83\9cã\83\9cã\83\83ã\82¯ã\82¹ã\81®ã\83ªã\83\95ã\83¬ã\83\83ã\82·ã\83¥\r
******************************************************************************/\r
\r
- /**\r
- * ダイアログオープン時の番組ID取得処理\r
+ /*\r
+ * 項目連動のためのメソッド群\r
*/\r
- private void getEventIdOnOpen(final ProgDetailList tvd) {\r
- \r
- if (debug) System.err.println(DBGID+vals.hide_content_id+" "+ContentIdEDCB.isValid(vals.hide_content_id)+" "+vals.hide_content_id.length());\r
- \r
- if ( ContentIdEDCB.isValid(vals.hide_content_id) || ! env.getAutoEventIdComplete() ) {\r
- return; // すでに番組ID取得ずみか、自動取得がOFFか\r
- }\r
- \r
- Integer evid = null;\r
- if ( ContentIdDIMORA.isValid(vals.hide_content_id) ) {\r
- ContentIdDIMORA.decodeContentId(vals.hide_content_id);\r
- String chid = ContentIdDIMORA.getChId();\r
- evid = doGetEventIdById(chid, false);\r
- }\r
- else {\r
- evid = doGetEventIdByName(tvd.center, false);\r
- }\r
- if ( evid != null ) {\r
- // on cache\r
- tvd.progid = vals.hide_content_id;\r
- tvd.setContentIdStr();\r
- }\r
- else {\r
- // online\r
- StWin.clear();\r
- \r
- new SwingBackgroundWorker(false) {\r
- @Override\r
- protected Object doWorks() throws Exception {\r
- StWin.appendMessage(MSGID+"番組IDを取得します");\r
- \r
- // 番組IDを探したい\r
- Integer evid = null;\r
- if ( ContentIdDIMORA.isValid(vals.hide_content_id) ) {\r
- ContentIdDIMORA.decodeContentId(vals.hide_content_id);\r
- String chid = ContentIdDIMORA.getChId();\r
- evid = doGetEventIdById(chid, true);\r
- }\r
- else {\r
- evid = doGetEventIdByName(tvd.center, true);\r
- }\r
- if ( evid != null ) {\r
- tvd.progid = vals.hide_content_id;\r
- tvd.setContentIdStr();\r
- }\r
- return null;\r
- }\r
- @Override\r
- protected void doFinally() {\r
- StWin.setVisible(false);\r
- }\r
- }.execute();\r
- \r
- CommonSwingUtils.setLocationCenter(parent, (Component) StWin);\r
- StWin.setVisible(true);\r
- }\r
- }\r
\r
+ \r
/**\r
- * ç\95ªçµ\84表ã\81«å\98å\9c¨ã\81\99ã\82\8bæ\94¾é\80\81å±\80IDã\81§\r
+ * ç\94»è³ªã\81«é\80£å\8b\95ã\81\97ã\81¦ã\82¨ã\83³ã\82³ã\83¼ã\83\80ã\82\92å¤\89ã\81\88ã\82\8bï¼\88RDç³»ï¼\89\r
*/\r
- private Integer doGetEventIdById(String chid, boolean force) {\r
- \r
- Integer evid = geteventid.getEvId(chid,vals.hide_startdatetime, force);\r
- \r
- if ( force && evid == null ) {\r
- MWin.appendError(ERRID+"番組ID取得でエラーが発生しました: "+chid+", "+vals.hide_startdatetime);\r
- ringBeep();\r
- return null; // 一発死に\r
- }\r
- else if ( ! force && evid == null ) {\r
- System.out.println(MSGID+"キャッシュにヒットしませんでした: "+chid+", "+vals.hide_startdatetime);\r
- return null;\r
+ /*\r
+ private void setEncoderComboBoxByVrate(String enc1, String enc2) {\r
+ int index = -1;\r
+ for (int i=0; i<jCBXPanel_encoder.getItemCount(); i++) {\r
+ if (enc1 != null && jCBXPanel_encoder.getItemAt(i).equals(enc1)) {\r
+ index = i;\r
+ break;\r
+ }\r
+ if (enc2 != null && jCBXPanel_encoder.getItemAt(i).equals(enc2)) {\r
+ index = i;\r
+ break;\r
+ }\r
}\r
- else if ( evid == -1 ) {\r
- MWin.appendError(ERRID+"番組IDが取得できませんでした: "+chid+", "+vals.hide_startdatetime);\r
- return null;\r
- }\r
- \r
- ContentIdDIMORA.decodeContentId(vals.hide_content_id);\r
- vals.hide_content_id = ContentIdDIMORA.getContentId(evid);\r
-\r
- MWin.appendMessage(MSGID+"番組IDを取得しました(byId): "+vals.hide_content_id);\r
- setGetEventIdButton(vals.hide_content_id, true);\r
- \r
- return evid;\r
- }\r
- \r
- /**\r
- * レコーダに登録された放送局IDで\r
- */\r
- private Integer doGetEventIdByName(String centername, boolean force) {\r
- \r
- String chid = null;\r
- String chidEDCB = null;\r
- String chidREGZA = null;\r
- \r
- Integer evid = null;\r
- \r
- // 登録済みのレコーダプラグインを全部チェックしてみる\r
- for ( HDDRecorder rec : recorders ) {\r
- if ( rec.isBackgroundOnly() ) {\r
- continue;\r
- }\r
-\r
- chidEDCB = chidREGZA = chid = null;\r
- Integer tmpEvid = null;\r
- \r
- String chcode = rec.getChCode().getCH_WEB2CODE(centername);\r
- if ( chcode == null ) {\r
- System.err.println(ERRID+"「Web番組表の放送局名」を「放送局コード」に変換できません: "+rec.getRecorderId()+" "+centername);\r
- continue;\r
- }\r
- \r
- chidEDCB = chid = ContentIdEDCB.getChId(chcode);\r
- if ( chid == null ) {\r
- chidREGZA = chid = ContentIdREGZA.getChId(chcode);\r
- if ( chid == null ) {\r
- System.err.println(ERRID+"番組IDの取得に未対応のレコーダです: "+rec.getRecorderId());\r
- continue;\r
- }\r
- }\r
- \r
- if (debug) System.out.println(MSGID+"番組IDを取得します: "+rec.getRecorderId());\r
- \r
- tmpEvid = geteventid.getEvId(chid,vals.hide_startdatetime, force);\r
- \r
- if (evid == null) evid = tmpEvid;\r
- \r
- if ( force && tmpEvid == null ) {\r
- MWin.appendError(ERRID+"番組ID取得でエラーが発生しました: "+chid+", "+vals.hide_startdatetime);\r
- ringBeep();\r
- return null; // 一発死に\r
- }\r
- else if ( ! force && tmpEvid == null ) {\r
- System.out.println(MSGID+"キャッシュにヒットしませんでした: "+chid+", "+vals.hide_startdatetime);\r
- return null;\r
- }\r
- else if ( tmpEvid == -1 ) {\r
- System.err.println(ERRID+"番組IDが取得できませんでした: "+chid+", "+vals.hide_startdatetime);\r
- continue;\r
- }\r
- \r
- break;\r
- }\r
- \r
- if ( evid == null ) {\r
- MWin.appendError(ERRID+"【致命的エラー】放送局IDを持つレコーダプラグインが存在しません");\r
- ringBeep();\r
- return null;\r
- }\r
- else if ( evid == -1 ) {\r
- MWin.appendError(ERRID+"【警告】番組IDの取得に失敗しました。開始時刻の移動や、まだ番組表サイトに情報が用意されていない場合などが考えられます。");\r
- ringBeep();\r
- return null;\r
- }\r
- \r
- if ( chidREGZA != null ) {\r
- vals.hide_content_id = ContentIdREGZA.getContentId(chidREGZA, evid);\r
- }\r
- else {\r
- vals.hide_content_id = ContentIdEDCB.getContentId(chidEDCB, evid);\r
- } \r
- \r
- MWin.appendMessage(MSGID+"番組IDを取得しました(byName): "+vals.hide_content_id);\r
- setGetEventIdButton(vals.hide_content_id, true);\r
- \r
- return evid;\r
- }\r
-\r
- /**\r
- * @param enabled 番組IDの取得ができないシチュエーション(予約一覧から開くとか)では取得ボタンをfalseに。\r
- */\r
- private boolean setGetEventIdButton(String cId, boolean enabled) {\r
- \r
- Integer evid = null;\r
- if ( ContentIdEDCB.decodeContentId(cId) ) {\r
- evid = ContentIdEDCB.getEvId();\r
- }\r
- else if ( ContentIdREGZA.decodeContentId(cId) && ContentIdREGZA.getEvId() != 0x0000 ) {\r
- evid = ContentIdREGZA.getEvId();\r
- }\r
- else if ( ContentIdDIMORA.decodeContentId(cId) && ContentIdDIMORA.getEvId() != 0x0000 ) {\r
- evid = ContentIdDIMORA.getEvId();\r
- }\r
- if ( evid == null ) {\r
- jButton_getEventId.setText(ITEM_EVIDNEEDED);\r
- if (enabled) {\r
- jButton_getEventId.setForeground(Color.BLUE);\r
- jButton_getEventId.setEnabled(true);\r
- }\r
- else {\r
- jButton_getEventId.setForeground(Color.GRAY);\r
- jButton_getEventId.setEnabled(false);\r
- }\r
- // 番組IDが取得できるまではdisable\r
- return false;\r
- }\r
- else {\r
- jButton_getEventId.setText(String.format("番組ID:%04X",evid));\r
- jButton_getEventId.setForeground(Color.GRAY);\r
- jButton_getEventId.setEnabled(false);\r
- // 番組IDが取得できるまではdisable\r
- return true;\r
- }\r
- }\r
- \r
-\r
- /*******************************************************************************\r
- * 自動エンコーダ選択と裏番組抽出\r
- ******************************************************************************/\r
-\r
- /**\r
- * <P>使用されていないエンコーダをリストアップする\r
- * <P>裏番組リストも一緒に作成する\r
- */\r
- private String getEmptyEncorder(HDDRecorder recorder, String ch, String date, String stime, String etime, String vrate) {\r
- // 予約の開始・終了日時を算出する\r
- GregorianCalendar c = CommonUtils.getCalendar(date);\r
- String start = String.format("%s %s", CommonUtils.getDate(c,false),stime);\r
- if (stime.compareTo(etime) > 0) {\r
- c.add(Calendar.DATE, 1);\r
- }\r
- String end = String.format("%s %s", CommonUtils.getDate(c,false),etime);\r
- \r
- // エンコーダの一覧を作成する\r
- ArrayList<String> encs = getFilteredEncoders(recorder, ch);\r
- if ( encs.size() == 0 ) {\r
- if ( recorder.getEncoderList().size() > 0 ) {\r
- MWin.appendError(ERRID+"エンコーダ候補が見つからない: "+recorder.Myself());\r
- }\r
- return null;\r
- }\r
- \r
- // 空きエンコーダがみつからなかった場合の選択肢\r
- String firstenc = encs.get(0);\r
- \r
- // 予約リストをなめて予約済みエンコーダーをさがす\r
- \r
- String rsvedTuner = null;\r
- uraban.clear();\r
- for ( ReserveList r : recorder.getReserves() ) {\r
- // 実行予定のもののみ\r
- if (r.getExec()) {\r
- // 予約時間が重なるものを抽出する\r
- ArrayList<String> starts = new ArrayList<String>();\r
- ArrayList<String> ends = new ArrayList<String>();\r
- CommonUtils.getStartEndList(starts, ends, r);\r
- for (int i=0;i<starts.size(); i++) {\r
- // 既に予約済みの場合\r
- if (starts.get(i).equals(start) && ends.get(i).equals(end) && ch.equals(r.getCh_name())) {\r
- rsvedTuner = r.getTuner();\r
- continue;\r
- }\r
- \r
- // 時間の重なる番組\r
- if ( CommonUtils.isOverlap(start, end, starts.get(i), ends.get(i), env.getAdjoiningNotRepetition()) ) {\r
- \r
- String msg = starts.get(i)+", "+r.getTuner()+", "+r.getTitle();\r
- for ( String ura : uraban ) {\r
- if ( ura.equals(msg)) {\r
- msg = "";\r
- break;\r
- }\r
- }\r
- if ( ! msg.equals("")) {\r
- uraban.add(msg);\r
- }\r
- \r
- // 予約時間が重なるものはエンコーダーの一覧から削除する\r
- HashMap<String,Boolean> rems = new HashMap<String,Boolean>();\r
- for ( String enc : encs ) {\r
- if (enc.equals(r.getTuner())) {\r
- rems.put(enc, true);\r
- \r
- // ---- RDデジタルW録向け暫定コード ----\r
- if (enc.equals("TS1") || enc.equals("DR1")) {\r
- // TS1が埋まっていればREは使えない\r
- rems.put("RE", true);\r
- }\r
- else if (enc.equals("RE")) {\r
- // REが埋まっていればTS1は使えない\r
- rems.put("TS1", true);\r
- rems.put("DR1", true);\r
- }\r
- // ---- RDデジタルW録向け暫定コード ----\r
- \r
- break;\r
- }\r
- }\r
- for ( String key : rems.keySet() ) {\r
- encs.remove(key);\r
- }\r
- }\r
- }\r
- }\r
- }\r
- if ( recorder.isAutoEncSelectEnabled() ) {\r
- \r
- // 旧RDデジ系 - ここから\r
- if ( vrate != null ) {\r
- if ( ! vrate.equals("[TS]") && ! vrate.equals("[DR]")) {\r
- if ( ! encs.contains("RE") ) {\r
- // 空きエンコーダはなかった\r
- jLabel_encoderemptywarn.setText("空きエンコーダ不足");\r
- jLabel_encoderemptywarn.setForeground(Color.RED);\r
- }\r
- return "RE";\r
- }\r
-\r
- encs.remove("RE");\r
- }\r
- // 旧RDデジ系 - ここまで\r
- \r
- if ( encs.size() == 0 ) {\r
- // 空きエンコーダはなかった\r
- jLabel_encoderemptywarn.setText("空きエンコーダ不足");\r
- jLabel_encoderemptywarn.setForeground(Color.RED);\r
- return firstenc;\r
- }\r
- \r
- jLabel_encoderemptywarn.setText("");\r
- if (rsvedTuner != null) {\r
- // 予約済みなら同じのでいいよね\r
- return rsvedTuner;\r
- }\r
- if ( encs.size() > 0 ) {\r
- // エンコーダーが残っていればそれらの先頭を返す(裏番組がない場合は除く)\r
- return encs.get(0);\r
- }\r
- }\r
- else {\r
- jLabel_encoderemptywarn.setText("空きエンコーダ検索無効");\r
- jLabel_encoderemptywarn.setForeground(Color.BLACK);\r
- return firstenc;\r
- }\r
- return null;\r
- }\r
- \r
- ArrayList<String> uraban = new ArrayList<String>(); // 裏番組の一覧\r
- \r
- private void showUraList(String myself) {\r
- if (uraban.size() > 0) {\r
- for (String ura : uraban) {\r
- String msg = MSGID+"[裏番組チェック] "+((String) jComboBox_title.getItemAt(0))+" の裏番組: "+ura;\r
- MWin.appendMessage(msg);\r
- }\r
- }\r
- else {\r
- // 裏番組がない場合に分かりにくかったので追加\r
- String msg = MSGID+"[裏番組チェック] "+((String) jComboBox_title.getItemAt(0))+" の裏番組はありません";\r
- MWin.appendMessage(msg);\r
- }\r
- }\r
- \r
- \r
- /*******************************************************************************\r
- * 放送波種別によって利用できるエンコーダを絞り込んでみる\r
- ******************************************************************************/\r
- \r
- /**\r
- * エンコーダを絞る\r
- */\r
- private ArrayList<String> getFilteredEncoders(HDDRecorder recorder, String webChName) {\r
- \r
- ArrayList<String> encs = new ArrayList<String>();\r
- \r
- if ( recorder.getEncoderList().size() == 0 ) {\r
- encs.add("■");\r
- return encs;\r
- }\r
- \r
- if ( recorder.isBroadcastTypeNeeded() ) {\r
- \r
- // エンコーダーに地上波・BS/CSの区別のあるとき\r
- \r
- String code = recorder.getChCode().getCH_WEB2CODE(webChName);\r
- if (code != null) {\r
- for ( TextValueSet enc : recorder.getEncoderList() ) {\r
- if ((code.startsWith(BroadcastType.TERRA.getName()+":") && enc.getText().startsWith("地上")) ||\r
- ((code.startsWith(BroadcastType.BS.getName()+":")||code.startsWith(BroadcastType.CS.getName()+":")) && enc.getText().startsWith("BS")) ||\r
- (code.startsWith(BroadcastType.CAPTURE.getName()+":") && enc.getText().startsWith("キャプチャ"))) {\r
- encs.add(enc.getText());\r
- }\r
- }\r
- }\r
- if ( encs.size() > 0 ) {\r
- return encs;\r
- }\r
- }\r
-\r
- // エンコーダーに地上波・BS/CSの区別のないとき、フィルタ結果が0件のとき\r
- \r
- for ( TextValueSet enc : recorder.getEncoderList() ) {\r
- encs.add(enc.getText());\r
- }\r
- \r
- return encs;\r
- }\r
- \r
- \r
- /**\r
- * 当初はRD専用だったのですが\r
- */\r
- \r
- private boolean isRD( String myrecid ) {\r
- return ( myrecid.startsWith("RD-") || myrecid.startsWith("VARDIA RD-") || myrecid.startsWith("REGZA RD-") || myrecid.startsWith("REGZA DBR-Z") ) ;\r
- }\r
- \r
- private boolean isVARDIA( String myrecid ) {\r
- return ( myrecid.startsWith("VARDIA RD-") || myrecid.startsWith("REGZA RD-") ) ;\r
- }\r
- \r
- \r
- /*******************************************************************************\r
- * ここから下は古いコード\r
- ******************************************************************************/\r
-\r
- \r
- \r
- \r
- \r
- /*******************************************************************************\r
- * エンコーダコンボボックスのリフレッシュ\r
- ******************************************************************************/\r
- \r
- /**\r
- * コンボボックスの内容をリフレッシュする(日付専用)\r
- */\r
- private void refreshComboBox_date(int updown) {\r
- GregorianCalendar cal = CommonUtils.getCalendar((String) jComboBox_date.getItemAt(0));\r
- if ( cal == null ) {\r
- return;\r
- }\r
- cal.add(Calendar.DAY_OF_MONTH, updown);\r
- String date = CommonUtils.getDate(cal);\r
- String ptrn = String.format("毎%s曜日",date.substring(11,12));\r
- Integer idx = jComboBox_date.getSelectedIndex();\r
- jComboBox_date.removeItemAt(0);\r
- jComboBox_date.insertItemAt(date, 0);\r
- jComboBox_date.removeItemAt(1);\r
- jComboBox_date.insertItemAt(ptrn, 1);\r
- jComboBox_date.setSelectedIndex(idx);\r
- }\r
-\r
- /*\r
- * 項目連動のためのメソッド群\r
- */\r
-\r
- /**\r
- * エンコーダに連動して画質を変える(RD系)\r
- */\r
- private void setVrateComboBoxByEncoder(String vrate1, String vrate2) {\r
- int index = -1;\r
- for (int i=0; i<jCBXPanel_videorate.getItemCount(); i++) {\r
- if (vrate1 != null && ((String)jCBXPanel_videorate.getItemAt(i)).startsWith(vrate1)) {\r
- index = i;\r
- break;\r
- }\r
- if (vrate2 != null && ((String)jCBXPanel_videorate.getItemAt(i)).startsWith(vrate2)) {\r
- index = i;\r
- break;\r
- }\r
- }\r
- if (index >= 0) {\r
- jCBXPanel_videorate.setSelectedIndex(index);\r
- }\r
- }\r
- \r
- /**\r
- * 画質に連動してエンコーダを変える(RD系)\r
- */\r
- private void setEncoderComboBoxByVrate(String enc1, String enc2) {\r
- int index = -1;\r
- for (int i=0; i<jCBXPanel_encoder.getItemCount(); i++) {\r
- if (enc1 != null && jCBXPanel_encoder.getItemAt(i).equals(enc1)) {\r
- index = i;\r
- break;\r
- }\r
- if (enc2 != null && jCBXPanel_encoder.getItemAt(i).equals(enc2)) {\r
- index = i;\r
- break;\r
- }\r
- }\r
- if (index >= 0) {\r
- jCBXPanel_encoder.setSelectedIndex(index);\r
+ if (index >= 0) {\r
+ jCBXPanel_encoder.setSelectedIndex(index);\r
}\r
}\r
+ */\r
\r
/**\r
* 自分のかツールバーのかわかりにくいので名前にMyって付け足した\r
*/\r
+ /*\r
private HDDRecorder getMySelectedRecorder() {\r
String myself = (String) jCBXPanel_recorder.getSelectedItem();\r
if ( myself == null ) {\r
}\r
return recs.get(0);\r
}\r
+ */\r
\r
+ /*\r
private ProgGenre getMySelectedGenre() {\r
String mygenre = (String) jCBXPanel_genre.getSelectedItem();\r
if ( mygenre == null ) {\r
}\r
return ProgGenre.get(mygenre);\r
}\r
- \r
- /*******************************************************************************\r
- * ハンドラ―メソッド\r
- ******************************************************************************/\r
- \r
- /**\r
- * ツールバーでレコーダの選択イベントが発生\r
- */\r
- @Override\r
- public void valueChanged(HDDRecorderSelectionEvent e) {\r
- if (debug) System.out.println(DBGID+"recorder selection rised");\r
- \r
- // 選択中のレコーダ情報を保存する\r
- src_recsel = (HDDRecorderSelectable) e.getSource();\r
- }\r
- \r
- private String getSelectedRecorderId() {\r
- return ( src_recsel!=null ? src_recsel.getSelectedId() : null );\r
- }\r
- \r
- private HDDRecorderList getSelectedRecorderList() {\r
- return ( src_recsel!=null ? src_recsel.getSelectedList() : null );\r
- }\r
- \r
- private HDDRecorderSelectable src_recsel;\r
- \r
- \r
- /**\r
- * レコーダ情報の変更イベントが発生\r
- */\r
- @Override\r
- public void stateChanged(HDDRecorderChangeEvent e) {\r
- }\r
- \r
+ */\r
\r
/*******************************************************************************\r
* リスナー\r
public void windowOpened(WindowEvent e) {\r
if (debug) System.out.println(DBGID+"wl_opened/windowOpened");\r
// 開いたときは、タイトル入力エリアにフォーカスを移します\r
- jComboBox_title.requestFocusInWindow();\r
+// jComboBox_title.requestFocusInWindow();\r
}\r
};\r
\r
* 項目連動のためのリスナー群\r
*/\r
\r
- /**\r
- * レコーダー/ジャンル/類似予約の変更にAV設定他が連動\r
- */\r
- private final ItemListener il_recorderChanged = new ItemListener() {\r
- @Override\r
- public void itemStateChanged(ItemEvent e) {\r
- selectionChangedComm(e.getStateChange(), ChangedSelector.RECORDER);\r
- }\r
- };\r
- \r
- private final ItemListener il_genreChanged = new ItemListener() {\r
- @Override\r
- public void itemStateChanged(ItemEvent e) {\r
- selectionChangedComm(e.getStateChange(), ChangedSelector.GENRE);\r
- }\r
- };\r
-\r
- private final MouseListener ml_likelistSelected = new MouseAdapter() {\r
- @Override\r
- public void mouseClicked(MouseEvent e) {\r
- if ( ! jtbl_likersv.isEnabled() ) {\r
- return;\r
- }\r
- if (SwingUtilities.isLeftMouseButton(e)) {\r
- selectionChangedComm(ItemEvent.SELECTED, ChangedSelector.LIKELIST);\r
- }\r
- }\r
- };\r
\r
private void selectionChangedComm(int stateChange, ChangedSelector changed) {\r
- \r
+ /*\r
if ( stateChange != ItemEvent.SELECTED ) {\r
return;\r
}\r
setLabels(myrec);\r
\r
setEnabledSelectionListeners(true);\r
+ */\r
}\r
\r
/**\r
- * エンコーダに画質が連動\r
- */\r
- private final ItemListener il_encoderChanged = new ItemListener() {\r
- @Override\r
- public void itemStateChanged(ItemEvent e) {\r
- if (e.getStateChange() != ItemEvent.SELECTED) {\r
- return;\r
- }\r
-\r
- String myself = (String) jCBXPanel_recorder.getSelectedItem();\r
- if ( myself == null ) {\r
- return;\r
- }\r
- String myrecId = recorders.findInstance(myself).get(0).getRecorderId();\r
- if ( ! isVARDIA(myrecId) ) {\r
- return;\r
- }\r
- \r
- String encoder = (String) jCBXPanel_encoder.getSelectedItem();\r
- if ( encoder == null ) {\r
- return;\r
- }\r
-\r
- setEnabledSelectionListeners(false);\r
-\r
- // TS1/2では画質に[TS]、DR1/2では[DR]を選ぶ\r
- if (encoder.startsWith("TS")) {\r
- setVrateComboBoxByEncoder("[TS]",null);\r
- }\r
- else if (encoder.startsWith("DR")) {\r
- setVrateComboBoxByEncoder("[DR]",null);\r
- }\r
- else if (encoder.startsWith("RE")) {\r
- setVrateComboBoxByEncoder("[TSE] ","[AVC] ");\r
- }\r
- \r
- setEnabledSelectionListeners(true);\r
- }\r
- };\r
- \r
- /**\r
* 画質にエンコーダと音質が連動\r
*/\r
private final ItemListener il_videorateChanged = new ItemListener() {\r
@Override\r
public void itemStateChanged(ItemEvent e) {\r
+ /*\r
if (e.getStateChange() != ItemEvent.SELECTED) {\r
return;\r
}\r
\r
- String myself = (String) jCBXPanel_recorder.getSelectedItem();\r
+ String myself = jPane_recsetting.getSelectedRecorder();\r
if ( myself == null ) {\r
return;\r
}\r
return;\r
}\r
\r
- String vrate = (String)jCBXPanel_videorate.getSelectedItem(); \r
+ String vrate = jPane_recsetting.getSelectedVideorate(); \r
if (vrate == null) {\r
return;\r
}\r
}\r
\r
setEnabledSelectionListeners(true);\r
- }\r
- };\r
- \r
- /**\r
- * 延長警告のON/OFF\r
- */\r
- private final ActionListener al_spoexClicked = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- if (jCheckBox_spoex_extend.isSelected() == true) {\r
- int spoexLength = Integer.valueOf(env.getSpoexLength());\r
- if (spoexLength>0) {\r
- int zhh = Integer.valueOf(jTextField_zhh.getText());\r
- int zmm = Integer.valueOf(jTextField_zmm.getText());\r
- \r
- int z = zhh*60+zmm+spoexLength;\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- \r
- jTextField_zhh.setText(String.format("%02d", zhh));\r
- jTextField_zmm.setText(String.format("%02d", zmm));\r
- }\r
- }\r
- else {\r
- int spoexLength = Integer.valueOf(env.getSpoexLength());\r
- if (spoexLength>0) {\r
- int zhh = Integer.valueOf(jTextField_zhh.getText());\r
- int zmm = Integer.valueOf(jTextField_zmm.getText());\r
- \r
- int z = zhh*60+zmm-spoexLength;\r
- if (z < 0) {\r
- z +=24*60;\r
- }\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- \r
- jTextField_zhh.setText(String.format("%02d", zhh));\r
- jTextField_zmm.setText(String.format("%02d", zmm));\r
- }\r
- }\r
- }\r
- };\r
- \r
- /**\r
- * 1分短縮のON/OFF\r
- */\r
- private final ActionListener al_overlapClipClicked = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- if (jCheckBox_OverlapDown2.isSelected() == true) {\r
- int zhh = Integer.valueOf(jTextField_zhh.getText());\r
- int zmm = Integer.valueOf(jTextField_zmm.getText());\r
- \r
- int z = zhh*60+zmm-1;\r
- if (z < 0) {\r
- z +=24*60;\r
- }\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- \r
- jTextField_zhh.setText(String.format("%02d", zhh));\r
- jTextField_zmm.setText(String.format("%02d", zmm));\r
- }\r
- else {\r
- int zhh = Integer.valueOf(jTextField_zhh.getText());\r
- int zmm = Integer.valueOf(jTextField_zmm.getText());\r
- \r
- int z = zhh*60+zmm+1;\r
- zmm = z % 60;\r
- zhh = (z-zmm)/60%24;\r
- \r
- jTextField_zhh.setText(String.format("%02d", zhh));\r
- jTextField_zmm.setText(String.format("%02d", zmm));\r
- }\r
- }\r
- };\r
- \r
- /**\r
- * ジャンル別AV設定のロード\r
- */\r
- private final ActionListener al_loadAction = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- ProgGenre key_genre = ProgGenre.get((String) jCBXPanel_genre.getSelectedItem());\r
- String key_webChName = (String) jComboBox_ch.getSelectedItem();\r
- String recId = recorders.findInstance((String) jCBXPanel_recorder.getSelectedItem()).get(0).getRecorderId();\r
- setSelectedAVItems(recId, null, getSelectedAVs(key_genre, key_webChName, recId));\r
- MWin.appendMessage(MSGID+"画質・音質等の設定を取得しました");\r
- }\r
- };\r
- \r
- /**\r
- * ジャンル別AV設定のセーブ\r
- */\r
- private final ActionListener al_saveAction = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- Matcher ma = Pattern.compile("^.+?:.+?:(.+?)$").matcher((String)jCBXPanel_recorder.getSelectedItem());\r
- if (ma.find()) {\r
- if (env.getEnableCHAVsetting()) {\r
- String key_webChName = (String) jComboBox_ch.getSelectedItem();\r
- _save_avsettings(ma.group(1),key_webChName);\r
- }\r
- else {\r
- String key_genre = (String) jCBXPanel_genre.getSelectedItem();\r
- _save_avsettings(ma.group(1),key_genre);\r
- }\r
- }\r
- }\r
- };\r
- \r
- /**\r
- * 既定AV設定のセーブ\r
- */\r
- private final ActionListener al_saveDefault = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- Matcher ma = Pattern.compile("^.+?:.+?:(.+?)$").matcher((String)jCBXPanel_recorder.getSelectedItem());\r
- if (ma.find()) {\r
- _save_avsettings(ma.group(1),null);\r
- }\r
+ */\r
}\r
};\r
\r
c.setRecorderId(key_recorderId);\r
c.setGenre(key_genre);\r
\r
- c.setVideorate((String)jCBXPanel_videorate.getSelectedItem());\r
- c.setAudiorate((String)jCBXPanel_audiorate.getSelectedItem());\r
- c.setDVDCompat((String)jCBXPanel_dvdcompat.getSelectedItem());\r
- c.setDevice((String)jCBXPanel_device.getSelectedItem());\r
- c.setXChapter((String)jCBXPanel_xChapter.getSelectedItem());\r
- c.setMsChapter((String)jCBXPanel_msChapter.getSelectedItem());\r
- c.setMvChapter((String)jCBXPanel_mvChapter.getSelectedItem());\r
- c.setAspect((String)jCBXPanel_aspect.getSelectedItem());\r
- c.setBvperf((String)jCBXPanel_bvperf.getSelectedItem());\r
- c.setLvoice((String)jCBXPanel_lvoice.getSelectedItem());\r
- c.setAutodel((String)jCBXPanel_autodel.getSelectedItem());\r
- c.setFolder((String)jCBXPanel_folder.getSelectedItem());\r
- c.setPursues(ITEM_YES.equals((String) jCBXPanel_pursues.getSelectedItem()));\r
+ jPane_recsetting.getSelectedSetting(c);\r
\r
xavs.add(key_recorderId, key_genre, c);\r
xavs.save();\r
\r
MWin.appendMessage(MSGID+"画質・音質等の設定を保存しました:"+key_recorderId+" & "+((key_genre!=null)?(key_genre):("デフォルト")));\r
}\r
-\r
- /**\r
- * タイトルが入力されたよ\r
- */\r
- private final ItemListener il_titleEntered = new ItemListener() {\r
- @Override\r
- public void itemStateChanged(ItemEvent e) {\r
- if (e.getStateChange() == ItemEvent.SELECTED) {\r
- // キャレットを先頭へ\r
- ((JTextField)jComboBox_title.getEditor().getEditorComponent()).setCaretPosition(0);\r
- }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * コンポーネント\r
+ ******************************************************************************/\r
+ \r
+ private JPanel getJContentPane_rsv() {\r
+ if (jContentPane_rsv == null) {\r
+ jContentPane_rsv = new JPanel();\r
+ \r
+ jContentPane_rsv.setLayout(new BorderLayout());\r
+ \r
+ jContentPane_rsv.add(getJPane_title(),BorderLayout.NORTH);\r
+ jContentPane_rsv.add(getJPane_recsetting(),BorderLayout.CENTER);\r
+ jContentPane_rsv.add(getJPane_likersv(),BorderLayout.SOUTH);\r
}\r
- };\r
+ return jContentPane_rsv;\r
+ }\r
\r
/**\r
- * 番組IDを取得する\r
+ * 番組情報のエリア\r
*/\r
- private final ActionListener al_getEventId = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- \r
- StWin.clear();\r
- \r
- new SwingBackgroundWorker(false) {\r
- \r
- @Override\r
- protected Object doWorks() throws Exception {\r
- TatCount tc = new TatCount();\r
- StWin.appendMessage(MSGID+"番組IDを取得します");\r
- Integer evid = null;\r
- if ( ContentIdDIMORA.isValid(vals.hide_content_id) ) {\r
- ContentIdDIMORA.decodeContentId(vals.hide_content_id);\r
- String chid = ContentIdDIMORA.getChId();\r
- evid = doGetEventIdById(chid, true);\r
- }\r
- else {\r
- evid = doGetEventIdByName((String) jComboBox_ch.getSelectedItem(), true);\r
- }\r
- if ( evid == null ) {\r
- StWin.appendError(ERRID+String.format("番組IDの取得に失敗しました。所要時間: %.2f秒",tc.end()));\r
- }\r
- else {\r
- StWin.appendMessage(MSGID+String.format("番組IDを取得しました。所要時間: %.2f秒",tc.end()));\r
- if ( vals.hide_tvd != null ) {\r
- vals.hide_tvd.progid = vals.hide_content_id;\r
- vals.hide_tvd.setContentIdStr();\r
- }\r
- HDDRecorderList recs = recorders.findInstance((String) jCBXPanel_recorder.getSelectedItem());\r
- if ( recs.size() > 0 ) {\r
- jCBXPanel_pursues.setEnabled(recs.get(0).isPursuesEditable());\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- @Override\r
- protected void doFinally() {\r
- StWin.setVisible(false);\r
- }\r
- }.execute();\r
+ private JPanel getJPane_title() {\r
+ if ( jPane_title == null ) {\r
+ jPane_title = new TitleEditorPanel();\r
\r
- CommonSwingUtils.setLocationCenter(AbsReserveDialog.this, (Component) StWin);\r
- StWin.setVisible(true);\r
+ jPane_title.setRecordExecuter(this); // 予約実行ボタン押下時のコールバックの設定\r
}\r
- };\r
+ return jPane_title;\r
+ }\r
\r
/**\r
- * タイトルに日付を追加する\r
+ * 録画設定のエリア\r
*/\r
- private ActionListener al_addDate = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- String date = (String) jComboBox_date.getSelectedItem();\r
- if ( ! date.matches("^\\d\\d\\d\\d/\\d\\d/\\d\\d.*$") ) {\r
- // 日付指定でなければ\r
- return;\r
- }\r
- date = date.substring(5,10).replaceAll("/","_");\r
- \r
- String title = (String) jComboBox_title.getSelectedItem();\r
- if ( title.matches("^.* \\d\\d_\\d\\d$") ) {\r
- // 日付更新\r
- title = title.substring(0,title.length()-6);\r
- }\r
- title = title + " " + date;\r
- if ( title.equals((String) jComboBox_title.getSelectedItem()) ) {\r
- // 変化なければ\r
- return;\r
- }\r
- \r
- int index = jComboBox_title.getSelectedIndex();\r
- jComboBox_title.insertItemAt(title,index);\r
- jComboBox_title.setSelectedIndex(index);\r
+ private JPanel getJPane_recsetting() {\r
+ if ( jPane_recsetting == null ) {\r
+ jPane_recsetting = new RecSettingEditorPanel();\r
\r
- // キャレットを末尾へ\r
- ((JTextField)jComboBox_title.getEditor().getEditorComponent()).setCaretPosition(title.length());\r
+ jPane_recsetting.setRecSettingSelector(this); // アイテム選択時のコールバックの設定\r
}\r
- };\r
+ return jPane_recsetting;\r
+ }\r
\r
/**\r
- * é\96\8bå§\8bæ\99\82å\88»ã\82\92ï¼\91å\88\86é\80²ã\82\81ã\82\8b\r
+ * é¡\9eä¼¼äº\88ç´\84ã\81®ã\82¨ã\83ªã\82¢\r
*/\r
- private final ActionListener al_upAmm = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- if ( _upmm(jTextField_ahh,jTextField_amm) ) {\r
- refreshComboBox_date(+1);\r
- }\r
+ private JScrollPane getJPane_likersv() {\r
+ if ( jPane_likersv == null ) {\r
+ jPane_likersv = new LikeReserveEditorPanel();\r
+ \r
+ jPane_likersv.setLikeReserveSelector(this); // 予約実行ボタン押下時のコールバックの設定\r
}\r
- };\r
+ return jPane_likersv;\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * ハンドラ―メソッドの実装\r
+ ******************************************************************************/\r
\r
/**\r
- * 開始時刻を1分戻す\r
+ * ツールバーでレコーダの選択イベントが発生\r
*/\r
- private final ActionListener al_downAmm = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- if ( _downmm(jTextField_ahh,jTextField_amm) ) {\r
- refreshComboBox_date(-1);\r
- }\r
- }\r
- };\r
+ @Override\r
+ public void valueChanged(HDDRecorderSelectionEvent e) {\r
+ if (debug) System.out.println(DBGID+"recorder selection rised");\r
+ \r
+ // 選択中のレコーダ情報を保存する\r
+ src_recsel = (HDDRecorderSelectable) e.getSource();\r
+ }\r
\r
/**\r
- * 終了時刻を1分進める\r
+ * ツールバーの操作によって選択されたレコーダのIDを取得する\r
*/\r
- private final ActionListener al_upZmm = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- _upmm(jTextField_zhh,jTextField_zmm);\r
- }\r
- };\r
+ private String getSelectedRecorderId() {\r
+ return ( src_recsel!=null ? src_recsel.getSelectedId() : null );\r
+ }\r
\r
/**\r
- * 終了時刻を1分戻す\r
+ * ツールバーの操作によって選択されたレコーダのプラグインインスタンスリストを取得する\r
*/\r
- private final ActionListener al_downZmm = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- _downmm(jTextField_zhh,jTextField_zmm);\r
- }\r
- };\r
- \r
- private boolean _upmm(JTextField hh, JTextField mm) {\r
- boolean b = false;\r
- Integer amm = Integer.valueOf(mm.getText()) + 1;\r
- Integer ahh = amm / 60;\r
- if (ahh > 0) {\r
- ahh += Integer.valueOf(hh.getText());\r
- ahh %= 24;\r
- hh.setText(String.format("%02d",ahh));\r
- // 日付変更線を超えた\r
- if (ahh == 0) {\r
- b = true;\r
- }\r
- }\r
- amm = amm % 60;\r
- mm.setText(String.format("%02d",amm));\r
- return b;\r
+ private HDDRecorderList getSelectedRecorderList() {\r
+ return ( src_recsel!=null ? src_recsel.getSelectedList() : null );\r
}\r
\r
- private boolean _downmm(JTextField hh, JTextField mm) {\r
- boolean b = false;\r
- Integer amm = Integer.valueOf(mm.getText()) + 59;\r
- amm %= 60;\r
- if (amm == 59) {\r
- Integer ahh = Integer.valueOf(hh.getText()) + 23;\r
- ahh %= 24;\r
- hh.setText(String.format("%02d",ahh));\r
- // 日付変更線を超えた\r
- if (ahh == 23) {\r
- b = true;\r
- }\r
- }\r
- mm.setText(String.format("%02d",amm));\r
- return b;\r
- }\r
+ private HDDRecorderSelectable src_recsel;\r
\r
- /**\r
- * 開始終了日時をリセットする\r
- */\r
- private MouseAdapter ml_resetStartEnd = new MouseAdapter() {\r
- @Override\r
- public void mouseClicked(MouseEvent e) {\r
- int n = jComboBox_date.getSelectedIndex();\r
- jCheckBox_spoex_extend.setSelected(vals.isExtended);\r
- jCheckBox_OverlapDown2.setSelected(vals.isClipped);\r
- jComboBox_date.removeItemAt(0);\r
- jComboBox_date.insertItemAt(vals.byDateIni, 0);\r
- jComboBox_date.removeItemAt(1);\r
- jComboBox_date.insertItemAt(vals.byWeeklyIni, 1);\r
- jComboBox_date.setSelectedIndex(n);\r
- jTextField_ahh.setText(vals.ahh);\r
- jTextField_amm.setText(vals.amm);\r
- jTextField_zhh.setText(vals.zhh);\r
- jTextField_zmm.setText(vals.zmm);\r
- }\r
- };\r
-\r
- /**\r
- * 登録実行\r
- */\r
- private final ActionListener al_doRecord = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- doRecord();\r
- }\r
- };\r
-\r
- /**\r
- * 更新実行\r
- */\r
- private final ActionListener al_doUpdate = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- doUpdate();\r
- }\r
- };\r
\r
/**\r
- * ã\82ã\83£ã\83³ã\82»ã\83«\r
+ * ã\83\84ã\83¼ã\83«ã\83\90ã\83¼ã\81§ã\83¬ã\82³ã\83¼ã\83\80æ\83\85å ±ã\81®å¤\89æ\9b´ã\82¤ã\83\99ã\83³ã\83\88ã\81\8cç\99ºç\94\9f\r
*/\r
- private final ActionListener al_doCancel = new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- //setVisible(false);\r
- resetWhenWindowClosed();\r
- dispose();\r
- }\r
- };\r
+ @Override\r
+ public void stateChanged(HDDRecorderChangeEvent e) {\r
+ // 処理はいらんな…\r
+ }\r
+ \r
\r
/*******************************************************************************\r
- * ã\82³ã\83³ã\83\9dã\83¼ã\83\8dã\83³ã\83\88\r
+ * ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\83¡ã\82½ã\83\83ã\83\89ã\81®å®\9fè£\85ï¼\88ç\95ªçµ\84æ\83\85å ±ï¼\89\r
******************************************************************************/\r
- \r
- private JPanel getJContentPane_rsv() {\r
- if (jContentPane_rsv == null) {\r
- jContentPane_rsv = new JPanel();\r
+\r
+ /***************************************\r
+ * 予約ボタンが押された時の処理\r
+ **************************************/\r
+\r
+ /**\r
+ * 新規登録を行う\r
+ */\r
+ @Override\r
+ public void doRecord() {\r
+ \r
+ if (debug) System.out.println(DBGID+"doRecord "+vals.toString());\r
+ \r
+ // 新規処理\r
+ final ReserveList newRsv = new ReserveList();\r
+ \r
+ jPane_title.getSelectedValues(newRsv); // タイトル\r
+ jPane_recsetting.getSelectedValues(newRsv); // 録画設定\r
+ \r
+ newRsv.setId(null); // PostRdEntry()中で取得するのでここはダミー\r
+ newRsv.setUpdateOnlyExec(false); // 新規ONLYなのでfalse固定\r
+\r
+ // 予約実行\r
+ StWin.clear();\r
+ new SwingBackgroundWorker(false) {\r
\r
- jContentPane_rsv.setLayout(new BorderLayout());\r
+ @Override\r
+ protected Object doWorks() throws Exception {\r
+ \r
+ String myself = jPane_recsetting.getSelectedRecorder();\r
+ for ( HDDRecorder recorder : recorders.findInstance(myself) ) {\r
+ \r
+ StWin.appendMessage(MSGID+"予約を登録します:"+newRsv.getTitle());\r
+ \r
+ if ( recorder.PostRdEntry(newRsv) ) {\r
+ \r
+ MWin.appendMessage(MSGID+"正常に登録できました:"+newRsv.getTitle()+"("+newRsv.getCh_name()+")");\r
+ doneReserve = true;\r
+ \r
+ // カレンダーに登録する\r
+ if ( recorder.getUseCalendar() && newRsv.getExec() ) {\r
+ \r
+ for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
+ \r
+ StWin.appendMessage(MSGID+"カレンダーに予約情報を登録します");\r
+ \r
+ if ( ! calendar.PostRdEntry(newRsv)) {\r
+ MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
+ ringBeep();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ MWin.appendError(ERRID+"登録に失敗しました:"+newRsv.getTitle()+"("+newRsv.getCh_name()+")");\r
+ }\r
+ \r
+ if ( ! recorder.getErrmsg().equals("")) {\r
+ MWin.appendMessage(MSGID+"[追加情報] "+recorder.getErrmsg());\r
+ ringBeep();\r
+ }\r
+ \r
+ break; // 一回限り\r
+ }\r
+ return null;\r
+ }\r
\r
- jContentPane_rsv.add(getJPane_title(),BorderLayout.NORTH);\r
- jContentPane_rsv.add(getJPane_recsetting(),BorderLayout.CENTER);\r
- jContentPane_rsv.add(getJPane_likersv(),BorderLayout.SOUTH);\r
- }\r
- return jContentPane_rsv;\r
+ @Override\r
+ protected void doFinally() {\r
+ //CommonUtils.milSleep(0);\r
+ StWin.setVisible(false);\r
+ }\r
+ }.execute();\r
+ \r
+ CommonSwingUtils.setLocationCenter(parent, (Component)StWin);\r
+ StWin.setVisible(true);\r
+ \r
+ resetWhenWindowClosed();\r
+ dispose();\r
}\r
\r
/**\r
- * 番組情報のエリア\r
+ * 更新を行う\r
*/\r
- private JPanel getJPane_title() {\r
- if ( jPane_title == null ) {\r
- jPane_title = new JPanel();\r
- //jPane_title.setBorder(new LineBorder(Color.BLACK, 1));\r
- jPane_title.setLayout(new SpringLayout());\r
- \r
- int y = SEP_HEIGHT_NALLOW;\r
- int x = SEP_WIDTH_NARROW;\r
- \r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_title("予約名"), 40, PARTS_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJComboBox_title(), TITLE_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
- \r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_getEventId("番組ID取得"), LABEL_WIDTH, PARTS_HEIGHT, x+50, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_addDate("日付追加"), 100, PARTS_HEIGHT, 270, y);\r
- \r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_ch("CH"), LABEL_WIDTH, PARTS_HEIGHT, x+TITLE_WIDTH+SEP_WIDTH, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJComboBox_ch(), CHNAME_WIDTH, PARTS_HEIGHT, x+TITLE_WIDTH+SEP_WIDTH+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ @Override\r
+ public void doUpdate() {\r
+ \r
+ if (debug) System.out.println(DBGID+"doUpdate "+vals.toString());\r
+ \r
+ LikeReserveItem likersv = vals.hide_likersvlist.getSelected();\r
+ if ( likersv == null ) {\r
+ // ==0なら更新対象の予約情報がないっつーことで処理できない\r
+ return;\r
+ }\r
+ \r
+ // 更新処理\r
+ final ReserveList oldRsv = likersv.getRsv();\r
+ final ReserveList newRsv = oldRsv.clone();\r
+ final HDDRecorder recorder = likersv.getRec();\r
+\r
+ jPane_title.getSelectedValues(newRsv); // タイトル\r
+ jPane_recsetting.getSelectedValues(newRsv); // 録画設定\r
+ \r
+ newRsv.setId(oldRsv.getId()); // 更新では引き継ぐ\r
+ newRsv.setUpdateOnlyExec(vals.isUpdateOnlyExec); // 実行ON・OFFのみかもしんない\r
\r
- y += PARTS_HEIGHT*2+SEP_HEIGHT_NALLOW;\r
+ // 更新実行\r
+ StWin.clear();\r
+ new SwingBackgroundWorker(false) {\r
\r
- {\r
- int hmx = x;\r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_date("録画日付"), LABEL_WIDTH, PARTS_HEIGHT, hmx,y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJComboBox_date(), DATE_WIDTH, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
- \r
- hmx += DATE_WIDTH+SEP_WIDTH;\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_aTime("開始時刻"), 75, PARTS_HEIGHT, hmx, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJTextField_ahh(), 40, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_asep(":"), 10, PARTS_HEIGHT, hmx+=40, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJTextField_amm(), 40, PARTS_HEIGHT, hmx+=10, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_amm_up(), 20, 12, hmx+=42, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_amm_down(), 20, 12, hmx, y+PARTS_HEIGHT+13);\r
+ @Override\r
+ protected Object doWorks() throws Exception {\r
\r
- hmx += 20+SEP_WIDTH_NARROW;\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_zTime("終了時刻"), 75, PARTS_HEIGHT, hmx, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJTextField_zhh(), 40, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_zsep(":"), 10, PARTS_HEIGHT, hmx+=40, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJTextField_zmm(), 40, PARTS_HEIGHT, hmx+=10, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_zmm_up(), 20, 12, hmx+=42, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_zmm_down(), 20, 12, hmx, y+PARTS_HEIGHT+13);\r
- \r
- hmx += 20+SEP_WIDTH;\r
+ StWin.appendMessage(MSGID+"予約を更新します:"+newRsv.getTitle());\r
\r
- CommonSwingUtils.putComponentOn(jPane_title, jCheckBox_Autocomplete = new JCheckBoxPanel("タイトル自動補完",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJCheckBox_spoex_extend("スポーツ延長",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y+PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJCheckBox_OverlapDown2("終了時刻1分短縮",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y+PARTS_HEIGHT*2);\r
+ if ( recorder.UpdateRdEntry(oldRsv, newRsv) ) {\r
+ \r
+ // 成功したよ\r
+ MWin.appendMessage(MSGID+"正常に更新できました:"+oldRsv.getTitle()+"("+oldRsv.getCh_name()+")");\r
+ doneReserve = true;\r
+ \r
+ // カレンダーを更新する\r
+ if ( recorder.getUseCalendar() ) {\r
+ for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
+ \r
+ StWin.appendMessage(MSGID+"カレンダーの予約情報を更新します");\r
+ \r
+ if ( ! calendar.UpdateRdEntry(oldRsv, (newRsv.getExec())?(newRsv):(null))) {\r
+ MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
+ ringBeep();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else {\r
+ MWin.appendError(ERRID+"更新に失敗しました:"+oldRsv.getTitle()+"("+oldRsv.getCh_name()+")");\r
+ }\r
\r
- jCheckBox_Autocomplete.setSelected(env.getUseAutocomplete());\r
+ if ( ! recorder.getErrmsg().equals("")) {\r
+ MWin.appendMessage(MSGID+"[追加情報] "+recorder.getErrmsg());\r
+ ringBeep();\r
+ }\r
+ return null;\r
}\r
\r
- y += PARTS_HEIGHT*2+SEP_WIDTH_NARROW;\r
-\r
- CommonSwingUtils.putComponentOn(jPane_title, getJLabel_detail("番組詳細"), 100, PARTS_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJScrollPane_detail(), DETAIL_WIDTH, DETAIL_HEIGHT, x+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
- \r
- y += PARTS_HEIGHT;\r
- \r
- \r
- \r
- y += DETAIL_HEIGHT+SEP_HEIGHT_NALLOW;\r
- \r
- // 特殊配置\r
- {\r
- int spy = SEP_HEIGHT_NALLOW+PARTS_HEIGHT;\r
- x = SEP_WIDTH_NARROW+DETAIL_WIDTH+SEP_WIDTH*2;\r
- \r
- CommonSwingUtils.putComponentOn(jPane_title, new JLabel("予約"), BUTTON_WIDTH, PARTS_HEIGHT, x, spy);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_record("新規"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_update("更新"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_title, getJButton_cancel("キャンセル"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ @Override\r
+ protected void doFinally() {\r
+ StWin.setVisible(false);\r
}\r
- \r
- x+=BUTTON_WIDTH+SEP_WIDTH_NARROW*2;\r
- \r
- Dimension d = new Dimension(x,y);\r
- jPane_title.setPreferredSize(d);\r
- }\r
- return jPane_title;\r
+ }.execute();\r
+\r
+ StWin.setVisible(true);\r
+\r
+ resetWhenWindowClosed();\r
+ dispose();\r
}\r
\r
/**\r
- * 録画設定のエリア\r
+ * ダイアログを閉じる\r
*/\r
- private JPanel getJPane_recsetting() {\r
- if ( jPane_recsetting == null ) {\r
- jPane_recsetting = new JPanel();\r
- jPane_recsetting.setBorder(new LineBorder(Color.BLACK, 1));\r
- jPane_recsetting.setLayout(new SpringLayout());\r
- \r
- //int y = SEP_HEIGHT_NALLOW;\r
- int y = 0;\r
- int x = SEP_WIDTH_NARROW;\r
- \r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_recorder = new JComboBoxPanel("レコーダ",RECORDER_WIDTH,RECORDER_WIDTH), RECORDER_WIDTH+5, COMBO_HEIGHT+SEP_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_encoder = new JComboBoxPanel("エンコーダ",ENCODER_WIDTH,ENCODER_WIDTH), ENCODER_WIDTH+5, COMBO_HEIGHT+SEP_HEIGHT, x+=RECORDER_WIDTH+5+SEP_WIDTH, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, getJLabel_encoderemptywarn(""), LABEL_WIDTH, PARTS_HEIGHT, x+=ENCODER_WIDTH+5+SEP_WIDTH+5, y+PARTS_HEIGHT);\r
- \r
- Font fo = jCBXPanel_recorder.getJComboBox().getFont();\r
- Font fn = fo.deriveFont(fo.getStyle()|Font.BOLD);\r
- jCBXPanel_recorder.getJComboBox().setFont(fn);\r
- jCBXPanel_recorder.getJComboBox().setForeground(Color.BLUE);\r
- jCBXPanel_encoder.getJComboBox().setFont(fn);\r
- jCBXPanel_encoder.getJComboBox().setForeground(Color.BLUE);\r
-\r
- // ポップアップした時に追加される幅\r
- jCBXPanel_recorder.addPopupWidth(100);\r
- jCBXPanel_encoder.addPopupWidth(100);\r
-\r
- y += (COMBO_HEIGHT+SEP_HEIGHT)+SEP_HEIGHT;\r
- x = SEP_WIDTH_NARROW;\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_genre = new JComboBoxPanel("ジャンル",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_subgenre = new JComboBoxPanel("サブジャンル",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_autodel = new JComboBoxPanel("自動削除",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH)*2, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_xChapter = new JComboBoxPanel("無音部分チャプタ分割",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- \r
- y += COMBO_HEIGHT;\r
- x = SEP_WIDTH_NARROW;\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_videorate = new JComboBoxPanel("画質",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_audiorate = new JComboBoxPanel("音質",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_bvperf = new JComboBoxPanel("高レート節約",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_lvoice = new JComboBoxPanel("ライン音声選択",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_msChapter = new JComboBoxPanel("DVD/シーンチャプタ分割",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- \r
- y += COMBO_HEIGHT;\r
- x = SEP_WIDTH_NARROW;\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_folder = new JComboBoxPanel("記録先フォルダ",100,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_device = new JComboBoxPanel("記録先デバイス",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_dvdcompat = new JComboBoxPanel("BD/DVD互換モード",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_aspect = new JComboBoxPanel("DVD記録時画面比",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_mvChapter = new JComboBoxPanel("音多/本編チャプタ分割",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ @Override\r
+ public void doCancel() {\r
+ resetWhenWindowClosed();\r
+ dispose();\r
+ }\r
\r
- y += COMBO_HEIGHT;\r
- //x = SEP_WIDTH_NARROW;\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_pursues = new JComboBoxPanel("番組追従",110,110), COMBO_WIDTH, COMBO_HEIGHT, x, y);\r
- \r
- CommonSwingUtils.putComponentOn(jPane_recsetting, jCheckBox_Exec = new JCheckBoxPanel("予約実行",75,true), 75, PARTS_HEIGHT, x+COMBO_WIDTH+SEP_WIDTH*2, y+PARTS_HEIGHT);\r
- \r
- jCheckBox_Exec.setSelected(true);\r
+ /***************************************\r
+ * 番組ID取得ボタンが押された時の処理\r
+ **************************************/\r
\r
- y += COMBO_HEIGHT;\r
+ /**\r
+ * 番組IDを取得する\r
+ */\r
+ public String doGetEventId() {\r
+ \r
+ final ProgDetailList tvd = vals.hide_tvd;\r
+ \r
+ StWin.clear();\r
+ \r
+ new SwingBackgroundWorker(false) {\r
\r
- // 特殊配置\r
- {\r
- int spy = SEP_HEIGHT_NALLOW+(PARTS_HEIGHT+SEP_HEIGHT_NALLOW)*2;\r
- x = SEP_WIDTH_NARROW+(COMBO_WIDTH_WIDE+SEP_WIDTH)+(COMBO_WIDTH+SEP_WIDTH)*4+SEP_WIDTH;\r
+ @Override\r
+ protected Object doWorks() throws Exception {\r
+ TatCount tc = new TatCount();\r
+ StWin.appendMessage(MSGID+"番組IDを取得します");\r
\r
- if (env.getEnableCHAVsetting()) {\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, new JLabel("放送局別の"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);\r
+ String content_id = getContentId(tvd, true);\r
+ if ( content_id == null ) {\r
+ StWin.appendError(ERRID+String.format("番組IDの取得に失敗しました。所要時間: %.2f秒",tc.end()));\r
}\r
else {\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, new JLabel("ジャンル別の"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);\r
+ StWin.appendMessage(MSGID+String.format("番組IDを取得しました。所要時間: %.2f秒",tc.end()));\r
}\r
\r
- spy+=PARTS_HEIGHT-5;\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, getJLabel_rectype("録画設定の選択"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, getJButton_load("開く"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, getJButton_save("保存"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
- CommonSwingUtils.putComponentOn(jPane_recsetting, getJButton_savedefault("既定化"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=(PARTS_HEIGHT+SEP_HEIGHT));\r
+ return null;\r
}\r
\r
- x+=BUTTON_WIDTH+SEP_WIDTH_NARROW*2;\r
- \r
- Dimension d = new Dimension(x,y);\r
- jPane_recsetting.setPreferredSize(d);\r
-\r
- }\r
- return jPane_recsetting;\r
- }\r
-\r
- private JScrollPane getJPane_likersv() {\r
- if (jPane_likersv == null ) {\r
- jPane_likersv = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);\r
- //jPane_likersv.setBorder(new LineBorder(Color.BLACK, 1));\r
- jPane_likersv.setRowHeaderView(jrhdr_likersv = new LikeRsvRowHeader());\r
- jPane_likersv.setViewportView(getLikeRsvTable());\r
- \r
- Dimension dh = new Dimension(LRT_HEADER_WIDTH,0);\r
- jPane_likersv.getRowHeader().setPreferredSize(dh);\r
- \r
- jPane_likersv.getRowHeader().setVisible(true);\r
- \r
- Dimension d = new Dimension(LIKELIST_WIDTH, PARTS_HEIGHT*LIKELIST_ROWS);\r
- jPane_likersv.setPreferredSize(d);\r
- }\r
- return jPane_likersv;\r
- }\r
- \r
- private JLabel getJLabel_date(String s)\r
- {\r
- if (jLabel_date == null) {\r
- jLabel_date = new JLabel();\r
- jLabel_date.setText(s);\r
- }\r
- return(jLabel_date);\r
- }\r
- \r
- private JComboBox getJComboBox_date() {\r
- if (jComboBox_date == null) {\r
- jComboBox_date = new JComboBox();\r
- }\r
- return jComboBox_date;\r
- }\r
- \r
- private JLabel getJLabel_detail(String s)\r
- {\r
- if (jLabel_detail == null) {\r
- jLabel_detail = new JLabel();\r
- jLabel_detail.setText(s);\r
- }\r
- return(jLabel_detail);\r
- }\r
-\r
- private JCheckBoxPanel getJCheckBox_OverlapDown2(String s, int labelWidth, boolean rev) {\r
- if (jCheckBox_OverlapDown2 == null) {\r
- jCheckBox_OverlapDown2 = new JCheckBoxPanel(s,labelWidth,rev);\r
-\r
- jCheckBox_OverlapDown2.addActionListener(al_overlapClipClicked);\r
- }\r
- return(jCheckBox_OverlapDown2);\r
- }\r
- \r
- private JCheckBoxPanel getJCheckBox_spoex_extend(String s, int labelWidth, boolean rev) {\r
+ @Override\r
+ protected void doFinally() {\r
+ StWin.setVisible(false);\r
+ }\r
+ }.execute();\r
\r
- if (jCheckBox_spoex_extend == null) {\r
- jCheckBox_spoex_extend = new JCheckBoxPanel(s,labelWidth,rev);\r
-\r
- jCheckBox_spoex_extend.addActionListener(al_spoexClicked);\r
- }\r
- return(jCheckBox_spoex_extend);\r
- }\r
- \r
- private JScrollPane getJScrollPane_detail()\r
- {\r
- if (jScrollPane_detail == null) {\r
- jScrollPane_detail = new JScrollPane(getJTextArea_detail(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
- jScrollPane_detail.setBorder(new LineBorder(Color.BLACK));\r
- }\r
- return(jScrollPane_detail);\r
- }\r
- private JTextArea getJTextArea_detail()\r
- {\r
- if (jTextArea_detail == null) {\r
- jTextArea_detail = new JTextAreaWithPopup();\r
- jTextArea_detail.setLineWrap(true);\r
- }\r
- return(jTextArea_detail);\r
- }\r
- \r
- private JLabel getJLabel_rectype(String s)\r
- {\r
- if (jLabel_rectype == null) {\r
- jLabel_rectype = new JLabel();\r
- jLabel_rectype.setText(s);\r
- }\r
- return(jLabel_rectype);\r
+ CommonSwingUtils.setLocationCenter(AbsReserveDialog.this, (Component) StWin);\r
+ StWin.setVisible(true);\r
+ \r
+ return tvd.progid;\r
}\r
\r
- private JButton getJButton_load(String s) {\r
- if (jButton_load == null) {\r
- jButton_load = new JButton(s);\r
- jButton_load.addActionListener(al_loadAction);\r
+ private String getContentId(ProgDetailList tvd, boolean force) {\r
+ \r
+ String content_id = null;\r
+ \r
+ if ( ContentIdDIMORA.isValid(tvd.progid) ) {\r
+ ContentIdDIMORA.decodeContentId(tvd.progid);\r
+ String chid = ContentIdDIMORA.getChId();\r
+ content_id = getContentIdById(chid, tvd.startDateTime, force);\r
}\r
- return jButton_load;\r
- }\r
- \r
- private JButton getJButton_save(String s) {\r
- if (jButton_save == null) {\r
- jButton_save = new JButton(s);\r
- jButton_save.addActionListener(al_saveAction);\r
+ else {\r
+ content_id = getContentIdByName(tvd.center, tvd.startDateTime, force);\r
}\r
- return jButton_save;\r
- }\r
- // デフォルトの画質・音質等の設定の保存\r
- private JButton getJButton_savedefault(String s) {\r
- if (jButton_savedefault == null) {\r
- jButton_savedefault = new JButton(s);\r
- jButton_savedefault.setForeground(Color.BLUE);\r
- jButton_savedefault.addActionListener(al_saveDefault);\r
- \r
- jButton_savedefault.setToolTipText(TEXT_SAVEDEFAULT);\r
+ if ( content_id != null ) {\r
+ tvd.progid = content_id;\r
+ tvd.setContentIdStr();\r
}\r
- return jButton_savedefault;\r
- }\r
\r
- private JLabel getJLabel_title(String s)\r
- {\r
- if (jLabel_title == null) {\r
- jLabel_title = new JLabel();\r
- jLabel_title.setText(s);\r
- }\r
- return(jLabel_title);\r
- }\r
- \r
- private JLabel getJLabel_ch(String s)\r
- {\r
- if (jLabel_ch== null) {\r
- jLabel_ch= new JLabel();\r
- jLabel_ch.setText(s);\r
- }\r
- return(jLabel_ch);\r
- }\r
- \r
- private JLabel getJLabel_encoderemptywarn(String s)\r
- {\r
- if (jLabel_encoderemptywarn == null) {\r
- jLabel_encoderemptywarn = new JLabel();\r
- jLabel_encoderemptywarn.setText(s);\r
- jLabel_encoderemptywarn.setForeground(Color.RED);\r
- //Font f= jLabel_encoderemptywarn.getFont();\r
- //jLabel_encoderemptywarn.setFont(f.deriveFont(f.getStyle() | Font.BOLD));\r
- }\r
- return(jLabel_encoderemptywarn);\r
+ return content_id;\r
}\r
\r
- private JButton getJButton_aTime(String s) {\r
- if (jButton_aTime == null) {\r
- jButton_aTime = new JButton();\r
- jButton_aTime.setText(s);\r
- \r
- jButton_aTime.addMouseListener(ml_resetStartEnd);\r
+ /**\r
+ * 番組表に存在する放送局IDで\r
+ */\r
+ private String getContentIdById(String chid, String startdatetime, boolean force) {\r
+ \r
+ Integer evid = geteventid.getEvId(chid, startdatetime, force);\r
+ \r
+ if ( force && evid == null ) {\r
+ MWin.appendError(ERRID+"番組ID取得でエラーが発生しました: "+chid+", "+startdatetime);\r
+ ringBeep();\r
+ return null; // 一発死に\r
}\r
- return(jButton_aTime);\r
- }\r
- \r
- private JButton getJButton_zTime(String s) {\r
- if (jButton_zTime == null) {\r
- jButton_zTime = new JButton();\r
- jButton_zTime.setText(s);\r
- \r
- jButton_zTime.addMouseListener(ml_resetStartEnd);\r
+ else if ( ! force && evid == null ) {\r
+ System.out.println(MSGID+"キャッシュにヒットしませんでした: "+chid+", "+startdatetime);\r
+ return null;\r
}\r
- return(jButton_zTime);\r
- }\r
-\r
- private JComboBox getJComboBox_title() {\r
- if (jComboBox_title == null) {\r
- jComboBox_title = new JComboBoxWithPopup();\r
- jComboBox_title.addPopupWidth(150);\r
- jComboBox_title.setEditable(true);\r
- \r
- jComboBox_title.addItemListener(il_titleEntered);\r
+ else if ( evid == -1 ) {\r
+ MWin.appendError(ERRID+"番組IDが取得できませんでした: "+chid+", "+startdatetime);\r
+ return null;\r
}\r
- return jComboBox_title;\r
+ \r
+ ContentIdDIMORA.decodeChId(chid);\r
+ String content_id = ContentIdDIMORA.getContentId(evid);\r
+\r
+ MWin.appendMessage(MSGID+"番組IDを取得しました(byId): "+content_id);\r
+ \r
+ return content_id;\r
}\r
\r
/**\r
- * EpgDataCap_BonプラグインのCHコードとを利用してテレビ王国から番組IDを取得します\r
- * @since 3.14.5β\r
+ * レコーダに登録された放送局IDで\r
*/\r
- private JButton getJButton_getEventId(String s) {\r
- if (jButton_getEventId == null) {\r
- jButton_getEventId = new JButton(s);\r
- \r
- jButton_getEventId.addActionListener(al_getEventId);\r
- }\r
- return jButton_getEventId;\r
- }\r
- \r
- private JButton getJButton_addDate(String s) {\r
- if (jButton_addDate == null) {\r
- jButton_addDate = new JButton(s);\r
- \r
- jButton_addDate.addActionListener(al_addDate);\r
- }\r
- return jButton_addDate;\r
- }\r
+ private String getContentIdByName(String chname, String startdatetime, boolean force) {\r
+ \r
+ String chid = null;\r
+ String chidEDCB = null;\r
+ String chidREGZA = null;\r
+ \r
+ Integer evid = null;\r
+ \r
+ // 登録済みのレコーダプラグインを全部チェックしてみる\r
+ for ( HDDRecorder rec : recorders ) {\r
+ if ( rec.isBackgroundOnly() ) {\r
+ continue;\r
+ }\r
\r
- private JComboBox getJComboBox_ch() {\r
- if (jComboBox_ch== null) {\r
- jComboBox_ch = new JComboBox();\r
- }\r
- return jComboBox_ch;\r
- }\r
- \r
- // 開始時刻\r
- private JTextField getJTextField_ahh() {\r
- if (jTextField_ahh == null) {\r
- jTextField_ahh = new JTextField();\r
- jTextField_ahh.setHorizontalAlignment(JTextField.CENTER);\r
- }\r
- return jTextField_ahh;\r
- }\r
- private JTextField getJTextField_amm() {\r
- if (jTextField_amm == null) {\r
- jTextField_amm = new JTextField();\r
- jTextField_amm.setHorizontalAlignment(JTextField.CENTER);\r
- }\r
- return jTextField_amm;\r
- }\r
- private JLabel getJLabel_asep(String s)\r
- {\r
- if (jLabel_asep == null) {\r
- jLabel_asep = new JLabel(s);\r
- }\r
- return(jLabel_asep);\r
- }\r
- // 開始時刻上げ下げ\r
- private JButton getJButton_amm_up() {\r
- if (jButton_amm_up == null) {\r
- jButton_amm_up = new JButton();\r
- //\r
- jButton_amm_up.addActionListener(al_upAmm);\r
- }\r
- return jButton_amm_up;\r
- }\r
- private JButton getJButton_amm_down() {\r
- if (jButton_amm_down == null) {\r
- jButton_amm_down = new JButton();\r
- //\r
- jButton_amm_down.addActionListener(al_downAmm);\r
- }\r
- return jButton_amm_down;\r
- }\r
- \r
- //\r
- private JTextField getJTextField_zhh() {\r
- if (jTextField_zhh == null) {\r
- jTextField_zhh = new JTextField();\r
- jTextField_zhh.setHorizontalAlignment(JTextField.CENTER);\r
- }\r
- return jTextField_zhh;\r
- }\r
- private JTextField getJTextField_zmm() {\r
- if (jTextField_zmm == null) {\r
- jTextField_zmm = new JTextField();\r
- jTextField_zmm.setHorizontalAlignment(JTextField.CENTER);\r
- }\r
- return jTextField_zmm;\r
- }\r
- private JLabel getJLabel_zsep(String s)\r
- {\r
- if (jLabel_zsep == null) {\r
- jLabel_zsep = new JLabel(s);\r
- }\r
- return(jLabel_zsep);\r
- }\r
- // 終了時刻上げ下げ\r
- private JButton getJButton_zmm_up() {\r
- if (jButton_zmm_up == null) {\r
- jButton_zmm_up = new JButton();\r
- //\r
- jButton_zmm_up.addActionListener(al_upZmm);\r
- }\r
- return jButton_zmm_up;\r
- }\r
- private JButton getJButton_zmm_down() {\r
- if (jButton_zmm_down == null) {\r
- jButton_zmm_down = new JButton();\r
- //\r
- jButton_zmm_down.addActionListener(al_downZmm);\r
- }\r
- return jButton_zmm_down;\r
- }\r
- \r
- private LikeRsvTable getLikeRsvTable() {\r
- if (jtbl_likersv == null) {\r
+ chidEDCB = chidREGZA = chid = null;\r
+ Integer tmpEvid = null;\r
+ \r
+ String chcode = rec.getChCode().getCH_WEB2CODE(chname);\r
+ if ( chcode == null ) {\r
+ System.err.println(ERRID+"「Web番組表の放送局名」を「放送局コード」に変換できません: "+rec.getRecorderId()+" "+chname);\r
+ continue;\r
+ }\r
\r
- // カラム名の初期化\r
- ArrayList<String> cola = new ArrayList<String>();\r
- for ( LikeRsvColumn lc : LikeRsvColumn.values() ) {\r
- if ( lc.getIniWidth() >= 0 ) {\r
- cola.add(lc.getName());\r
+ chidEDCB = chid = ContentIdEDCB.getChId(chcode);\r
+ if ( chid == null ) {\r
+ chidREGZA = chid = ContentIdREGZA.getChId(chcode);\r
+ if ( chid == null ) {\r
+ System.err.println(ERRID+"番組IDの取得に未対応のレコーダです: "+rec.getRecorderId());\r
+ continue;\r
}\r
}\r
- final String[] colname = cola.toArray(new String[0]);\r
\r
- // テーブルの基本的な設定\r
- DefaultTableModel model = new DefaultTableModel(colname, 0);\r
+ if (debug) System.out.println(MSGID+"番組IDを取得します: "+rec.getRecorderId());\r
+ \r
+ tmpEvid = geteventid.getEvId(chid, startdatetime, force);\r
\r
- jtbl_likersv = new LikeRsvTable(model);\r
- jtbl_likersv.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
+ if (evid == null) evid = tmpEvid;\r
\r
- // 各カラムの幅を設定する\r
- DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jtbl_likersv.getColumnModel();\r
- TableColumn column = null;\r
- for ( LikeRsvColumn lc : LikeRsvColumn.values() ) {\r
- if ( lc.getIniWidth() < 0 ) {\r
- continue;\r
- }\r
- column = columnModel.getColumn(lc.ordinal());\r
- column.setPreferredWidth(lc.getIniWidth());\r
+ if ( force && tmpEvid == null ) {\r
+ MWin.appendError(ERRID+"番組ID取得でエラーが発生しました: "+chid+", "+startdatetime);\r
+ ringBeep();\r
+ return null; // 一発死に\r
+ }\r
+ else if ( ! force && tmpEvid == null ) {\r
+ System.out.println(MSGID+"キャッシュにヒットしませんでした: "+chid+", "+startdatetime);\r
+ return null;\r
+ }\r
+ else if ( tmpEvid == -1 ) {\r
+ System.err.println(ERRID+"番組IDが取得できませんでした: "+chid+", "+startdatetime);\r
+ continue;\r
}\r
+ \r
+ break;\r
}\r
\r
- return jtbl_likersv;\r
- }\r
- \r
- private JButton getJButton_record(String s) {\r
- if (jButton_record == null) {\r
- jButton_record = new JButton(s);\r
- jButton_record.setForeground(Color.RED);\r
- jButton_record.addActionListener(al_doRecord);\r
+ if ( evid == null ) {\r
+ MWin.appendError(ERRID+"【致命的エラー】放送局IDを持つレコーダプラグインが存在しません");\r
+ ringBeep();\r
+ return null;\r
}\r
- return jButton_record;\r
- }\r
- \r
- private JButton getJButton_update(String s) {\r
- if (jButton_update == null) {\r
- jButton_update = new JButton();\r
- jButton_update.setText(s);\r
-\r
- jButton_update.addActionListener(al_doUpdate);\r
+ else if ( evid == -1 ) {\r
+ MWin.appendError(ERRID+"【警告】番組IDの取得に失敗しました。開始時刻の移動や、まだ番組表サイトに情報が用意されていない場合などが考えられます。");\r
+ ringBeep();\r
+ return null;\r
}\r
\r
- return jButton_update;\r
+ String content_id;\r
+ if ( chidREGZA != null ) {\r
+ content_id = ContentIdREGZA.getContentId(chidREGZA, evid);\r
+ }\r
+ else {\r
+ content_id = ContentIdEDCB.getContentId(chidEDCB, evid);\r
+ } \r
+ \r
+ MWin.appendMessage(MSGID+"番組IDを取得しました(byName): "+content_id);\r
+ \r
+ return content_id;\r
}\r
\r
- private JButton getJButton_cancel(String s) {\r
- if (jButton_cancel == null) {\r
- jButton_cancel = new JButton(s);\r
- jButton_cancel.addActionListener(al_doCancel);\r
+ /*******************************************************************************\r
+ * コールバックメソッドの実装(録画設定)\r
+ ******************************************************************************/\r
+ \r
+ /**\r
+ * レコーダが選択されたのでテキトーな録画設定を選ぶ\r
+ */\r
+ public void doSelectRecorder(String myself) {\r
+ \r
+ System.out.println(DBGID+"選択されたレコーダ: "+myself);\r
+ \r
+ HDDRecorderList myrecs = recorders.findInstance(myself);\r
+ if ( myrecs.size() == 0 ) {\r
+ return;\r
}\r
- return jButton_cancel;\r
+ HDDRecorder myrec = myrecs.get(0);\r
+ \r
+ ProgDetailList tvd = vals.hide_tvd;\r
+ TimeVal tVal = getTimeValue(tvd);\r
+ jPane_title.setTimeValue(tVal);\r
+ jPane_title.setDateItems(tvd, tVal);\r
+ \r
+ // 初期化\r
+ setRecSettingItems(recorders, myrec, tvd);\r
+ \r
+ // 選択\r
+ String enc = myrec.getEmptyEncorder(tvd.center, tVal.startDateTime, tVal.endDateTime, null, null);\r
+ ReserveList myrsv = getReserveList(myrec, enc);\r
+ jPane_recsetting.setSelectedValues(tvd, myrsv);\r
+ showUrabanList(myrec.getUrabanList());\r
}\r
\r
- \r
- \r
- \r
/*******************************************************************************\r
- * 独自部品\r
+ * コールバックメソッドの実装(類似予約)\r
******************************************************************************/\r
\r
- private class LikeRsvTable extends JNETable {\r
-\r
- private static final long serialVersionUID = 1L;\r
-\r
- public LikeRsvTable(DefaultTableModel model) {\r
- super(model,true);\r
- }\r
- \r
- @Override\r
- public Object getValueAt(int row, int column) {\r
- if ( row == 0 ) {\r
- if ( column == LikeRsvColumn.TITLE.ordinal() ) {\r
- if ( vals.likeRsvList.size() == 0 ) {\r
- return LIKERSVID_NONE;\r
- }\r
- else {\r
- return LIKERSVID_NOTSELECTED;\r
- }\r
- }\r
- else if ( column == LikeRsvColumn.START.ordinal() ) {\r
- return "-";\r
- }\r
- else if ( column == LikeRsvColumn.RECORDER.ordinal() ) {\r
- return vals.hide_default_recorder.Myself();\r
- }\r
- return null;\r
- }\r
- if ( column == LikeRsvColumn.TITLE.ordinal() ) {\r
- return vals.likeRsvList.get(row-1).getRsv().getTitle();\r
- }\r
- else if ( column == LikeRsvColumn.START.ordinal() ) {\r
- return vals.likeRsvList.get(row-1).getRsv().getStartDateTime();\r
- }\r
- else if ( column == LikeRsvColumn.RECORDER.ordinal() ) {\r
- return vals.likeRsvList.get(row-1).getRec().Myself();\r
- }\r
- else if ( column == LikeRsvColumn.TUNER.ordinal() ) {\r
- return vals.likeRsvList.get(row-1).getRsv().getTuner();\r
- }\r
- return null;\r
+ /***************************************\r
+ * 類似予約が選択された時の処理\r
+ **************************************/\r
+ \r
+ /**\r
+ * 類似予約が選択されたので処理をしてほしい\r
+ */\r
+ @Override\r
+ public void doSelectLikeReserve(int row) {\r
+ if ( row == LikeReserveEditorPanel.LIKERSVTABLE_NONE ) {\r
+ doSelectLikeReserveByProg();\r
}\r
- \r
- @Override\r
- public int getSelectedRow() {\r
- return super.getSelectedRow()-1;\r
+ else {\r
+ doSelectLikeReserveByReserve(row);\r
}\r
+ }\r
+ \r
+ // 番組情報で置き換え\r
+ private boolean doSelectLikeReserveByProg() {\r
\r
- @Override\r
- public void setRowSelectionInterval(int index0, int index1) {\r
- super.setRowSelectionInterval(index0+1, index1+1);\r
- }\r
+ HDDRecorder myrec = vals.hide_recorder;\r
+ ProgDetailList tvd = vals.hide_tvd;\r
+ LikeReserveList likersvlist = vals.hide_likersvlist;\r
+ AVs myavs = vals.hide_avs;\r
\r
- @Override\r
- public int getRowCount() {\r
- if ( vals == null || vals.likeRsvList == null ) {\r
- return 1;\r
+ // 初期化\r
+ setTitleItems(myrec, tvd, likersvlist, false);\r
+ setRecSettingItems(recorders, myrec, tvd);\r
+\r
+ // 選択\r
+ {\r
+ // 番組情報の選択\r
+ jPane_title.setSelectedValues(tvd);\r
+ \r
+ TimeVal tVal = getTimeValue(tvd);\r
+ jPane_title.setTimeValue(tVal);\r
+ jPane_title.setDateItems(tvd, tVal);\r
+ \r
+ // 録画設定の選択\r
+ jPane_recsetting.setSelectedRecorderValue(myrec.Myself());\r
+ //selectedVrate\r
+ String enc = myrec.getEmptyEncorder(tvd.center, tVal.startDateTime, tVal.endDateTime, null, null);\r
+ ReserveList myrsv = getReserveList(myrec, enc);\r
+ jPane_recsetting.setSelectedValues(tvd, myrsv);\r
+ showUrabanList(myrec.getUrabanList());\r
+ \r
+ if ( myavs != null ) {\r
+ // ジャンル別AV設定から追加で選択する\r
+ jPane_recsetting.setSelectedValues(myavs);\r
}\r
- return vals.likeRsvList.size()+1;\r
}\r
+ \r
+ // 予約ボタンの状態設定\r
+ jPane_title.setEnabledRecordButton(true);\r
+ jPane_title.setEnabledUpdateButton(false);\r
+ \r
+ return true;\r
}\r
\r
- private class LikeRsvRowHeader extends JTable {\r
+ // 類似予約情報で置き換え\r
+ private boolean doSelectLikeReserveByReserve(int row) {\r
\r
- private static final long serialVersionUID = 1L;\r
- \r
- public LikeRsvRowHeader() {\r
- super();\r
- \r
- String[] colname = {""};\r
- DefaultTableModel model = new DefaultTableModel(colname,0);\r
- this.setModel(model);\r
+ LikeReserveList likersvlist = vals.hide_likersvlist;\r
+ LikeReserveItem likersv = likersvlist.setSelectedIndex(row);\r
+ ReserveList myrsv = likersv.getRsv();\r
\r
- //this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
- //this.setRowSelectionAllowed(false);\r
- this.setEnabled(false);\r
-\r
- DefaultTableCellRenderer cr = new DefaultTableCellRenderer() {\r
- \r
- private static final long serialVersionUID = 1L;\r
- \r
- @Override\r
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {\r
- Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);\r
- c.setBackground(table.getTableHeader().getBackground());\r
- return c;\r
- };\r
- };\r
- cr.setHorizontalAlignment(JLabel.CENTER);\r
- cr.setOpaque(true);\r
- this.getColumnModel().getColumn(0).setCellRenderer(cr);\r
- }\r
+ HDDRecorderList myrecs = new HDDRecorderList();\r
+ HDDRecorder myrec = likersv.getRec();\r
+ myrecs.add(myrec);\r
\r
- @Override\r
- public Object getValueAt(int row, int column) {\r
- return (row==0) ? "-" : String.valueOf(row);\r
- }\r
+ ProgDetailList tvd = vals.hide_tvd;\r
\r
- @Override\r
- public int getRowCount() {\r
- if ( vals == null || vals.likeRsvList == null ) {\r
- return 1;\r
- }\r
- return vals.likeRsvList.size()+1;\r
+ // 初期化\r
+ setTitleItems(myrec, tvd, likersvlist, true);\r
+ setRecSettingItems(myrecs, myrec, tvd);\r
+ \r
+ // 選択\r
+ {\r
+ // 番組情報の選択\r
+ jPane_title.setSelectedValues(myrsv);\r
+ \r
+ // 録画設定の選択\r
+ myrec.getEmptyEncorder(tvd.center, myrsv.getStartDateTime(), myrsv.getEndDateTime(), myrsv, null);\r
+ jPane_recsetting.setSelectedRecorderValue(myrec.Myself());\r
+ showUrabanList(myrec.getUrabanList());\r
+ \r
+ jPane_recsetting.setSelectedValues(myrsv);\r
}\r
+\r
+ // 予約ボタンの状態設定\r
+ jPane_title.setEnabledRecordButton(true);\r
+ jPane_title.setEnabledUpdateButton(true);\r
+ \r
+ return true;\r
}\r
}\r
--- /dev/null
+package tainavi;\r
+\r
+import java.awt.Color;\r
+import java.awt.Dimension;\r
+import java.awt.ItemSelectable;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\r
+import java.util.ArrayList;\r
+\r
+import javax.swing.JButton;\r
+import javax.swing.JComboBox;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.SpringLayout;\r
+import javax.swing.border.LineBorder;\r
+\r
+import tainavi.TVProgram.ProgGenre;\r
+import tainavi.TVProgram.ProgSubgenre;\r
+\r
+\r
+/**\r
+ * 予約ダイアログを目的ごとに3ブロックにわけたうちの「録画設定」部分のコンポーネント\r
+ * @since 3.22.2β\r
+ */\r
+public class RecSettingEditorPanel extends JPanel {\r
+\r
+ private static final long serialVersionUID = 1L;\r
+ \r
+ public void setDebug(boolean b) { debug = b; }\r
+ private static boolean debug = false;\r
+\r
+ /*******************************************************************************\r
+ * 定数\r
+ ******************************************************************************/\r
+ \r
+ private static final String ITEM_YES = "する";\r
+ private static final String ITEM_NO = "しない";\r
+ \r
+ private static final int PARTS_HEIGHT = 25;\r
+ private static final int SEP_WIDTH = 10;\r
+ private static final int SEP_WIDTH_NARROW = 5;\r
+ private static final int SEP_HEIGHT = 10;\r
+ private static final int SEP_HEIGHT_NALLOW = 5;\r
+ \r
+ private static final int LABEL_WIDTH = 150;\r
+ private static final int BUTTON_WIDTH = 75;\r
+ \r
+ private static final int COMBO_WIDTH = 115;\r
+ private static final int COMBO_WIDTH_WIDE = 155;\r
+ private static final int COMBO_HEIGHT = 43;\r
+\r
+ private static final int RECORDER_WIDTH = COMBO_WIDTH_WIDE*2+SEP_WIDTH_NARROW;\r
+ private static final int ENCODER_WIDTH = COMBO_WIDTH*2+SEP_WIDTH_NARROW;\r
+\r
+ private static final String TEXT_SAVEDEFAULT = "<HTML>録画設定を開いた時の枠内のデフォルト値として<BR>現在の値を使用するようにします。<BR><FONT COLOR=#FF0000>※ジャンル別AV設定があればそちらが優先されます。</FONT></HTML>";\r
+\r
+ // ログ関連\r
+ \r
+ private static final String MSGID = "[録画設定編集] ";\r
+ private static final String ERRID = "[ERROR]"+MSGID;\r
+ private static final String DBGID = "[DEBUG]"+MSGID;\r
+ \r
+ /*******************************************************************************\r
+ * 部品\r
+ ******************************************************************************/\r
+ \r
+ private JComboBoxPanel jCBXPanel_recorder = null;\r
+ private JComboBoxPanel jCBXPanel_encoder = null;\r
+ private JLabel jLabel_encoderemptywarn = null;\r
+ \r
+ private JComboBoxPanel jCBXPanel_genre = null;\r
+ private JComboBoxPanel jCBXPanel_subgenre = null;\r
+ private JComboBoxPanel jCBXPanel_videorate = null;\r
+ private JComboBoxPanel jCBXPanel_audiorate = null;\r
+ private JComboBoxPanel jCBXPanel_folder = null;\r
+ private JComboBoxPanel jCBXPanel_dvdcompat = null;\r
+ private JComboBoxPanel jCBXPanel_device = null;\r
+ private JComboBoxPanel jCBXPanel_aspect = null;\r
+ private JComboBoxPanel jCBXPanel_bvperf = null;\r
+ private JComboBoxPanel jCBXPanel_lvoice = null;\r
+ private JComboBoxPanel jCBXPanel_autodel = null;\r
+ private JComboBoxPanel jCBXPanel_pursues = null;\r
+ private JComboBoxPanel jCBXPanel_xChapter = null;\r
+ private JComboBoxPanel jCBXPanel_msChapter = null;\r
+ private JComboBoxPanel jCBXPanel_mvChapter = null;\r
+ \r
+ private JLabel jLabel_rectype = null;\r
+ private JButton jButton_load = null;\r
+ private JButton jButton_save = null;\r
+ private JButton jButton_savedefault = null;\r
+ \r
+ private JCheckBoxPanel jCheckBox_Exec = null;\r
+\r
+ //\r
+ private RecSettingSelectable recsetsel = null;\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * コンストラクタ\r
+ ******************************************************************************/\r
+ \r
+ public RecSettingEditorPanel() {\r
+\r
+ super();\r
+ setBorder(new LineBorder(Color.BLACK, 1));\r
+ \r
+ addComponents();\r
+ \r
+ // 外部要因に左右されないアイテム群の設定\r
+ setGenreItems();\r
+ \r
+ // 付けたり外したりしないリスナー\r
+ jCBXPanel_genre.addItemListener(il_resetSubgenreItems);\r
+ \r
+ jButton_load.addActionListener(al_loadAction);\r
+ jButton_save.addActionListener(al_saveAction);\r
+ jButton_savedefault.addActionListener(al_saveDefaultAction);\r
+ \r
+ // 付けたり外したりするリスナー\r
+ setEnabledListenerAll(true);\r
+ }\r
+ \r
+ private void addComponents() {\r
+ \r
+ setLayout(new SpringLayout());\r
+ \r
+ int y = 0;\r
+ int x = SEP_WIDTH_NARROW;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_recorder = new JComboBoxPanel("",RECORDER_WIDTH,RECORDER_WIDTH), RECORDER_WIDTH+5, COMBO_HEIGHT+SEP_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_encoder = new JComboBoxPanel("",ENCODER_WIDTH,ENCODER_WIDTH), ENCODER_WIDTH+5, COMBO_HEIGHT+SEP_HEIGHT, x+=RECORDER_WIDTH+5+SEP_WIDTH, y);\r
+ CommonSwingUtils.putComponentOn(this, jLabel_encoderemptywarn = new JLabel(""), LABEL_WIDTH, PARTS_HEIGHT, x+=ENCODER_WIDTH+5+SEP_WIDTH+5, y+PARTS_HEIGHT);\r
+ \r
+ jCBXPanel_recorder.getJComboBox().setForeground(Color.BLUE);\r
+ jCBXPanel_encoder.getJComboBox().setForeground(Color.BLUE);\r
+ \r
+ // ポップアップした時に追加される幅\r
+ jCBXPanel_recorder.addPopupWidth(100);\r
+ jCBXPanel_encoder.addPopupWidth(100);\r
+\r
+ y += (COMBO_HEIGHT+SEP_HEIGHT)+SEP_HEIGHT;\r
+ x = SEP_WIDTH_NARROW;\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_genre = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_subgenre = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_autodel = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH)*2, y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_xChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ \r
+ y += COMBO_HEIGHT;\r
+ x = SEP_WIDTH_NARROW;\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_videorate = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_audiorate = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_bvperf = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_lvoice = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_msChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ \r
+ y += COMBO_HEIGHT;\r
+ x = SEP_WIDTH_NARROW;\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_folder = new JComboBoxPanel("",100,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_device = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_dvdcompat = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_aspect = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_mvChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);\r
+\r
+ y += COMBO_HEIGHT;\r
+ CommonSwingUtils.putComponentOn(this, jCBXPanel_pursues = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x, y);\r
+ \r
+ y += COMBO_HEIGHT;\r
+ \r
+ // 特殊配置\r
+ {\r
+ int spy = SEP_HEIGHT_NALLOW+(PARTS_HEIGHT+SEP_HEIGHT_NALLOW)*2;\r
+ x = SEP_WIDTH_NARROW+(COMBO_WIDTH_WIDE+SEP_WIDTH)+(COMBO_WIDTH+SEP_WIDTH)*4+SEP_WIDTH;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, jLabel_rectype = new JLabel("ジャンル別の"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);\r
+ \r
+ spy+=PARTS_HEIGHT-5;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, new JLabel("録画設定の選択"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);\r
+ CommonSwingUtils.putComponentOn(this, jButton_load = new JButton("開く"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, jButton_save = new JButton("保存"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, jButton_savedefault = new JButton("既定化"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=(PARTS_HEIGHT+SEP_HEIGHT));\r
+ \r
+ jButton_savedefault.setToolTipText(TEXT_SAVEDEFAULT);\r
+ \r
+ CommonSwingUtils.putComponentOn(this, jCheckBox_Exec = new JCheckBoxPanel("予約実行",75,true), 75, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=(PARTS_HEIGHT+SEP_HEIGHT));\r
+ setExecValue(true);\r
+ }\r
+ \r
+ x+=BUTTON_WIDTH+SEP_WIDTH_NARROW*2;\r
+ \r
+ Dimension d = new Dimension(x,y);\r
+ setPreferredSize(d);\r
+ }\r
+ \r
+ public void setRecSettingSelector(RecSettingSelectable o) {\r
+ recsetsel = o;\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * アイテムの設定\r
+ ******************************************************************************/\r
+ \r
+ /***************************************\r
+ * 項目ラベルの設定\r
+ **************************************/\r
+ \r
+ /**\r
+ * レコーダが選択されたら各コンポーネントラベルを設定する\r
+ * @param recorder\r
+ */\r
+ public void setLabels(HDDRecorder recorder) {\r
+ \r
+ // 固定ラベル\r
+ setLabel(jCBXPanel_recorder, null, "レコーダ");\r
+ setLabel(jCBXPanel_encoder, null, "エンコーダ");\r
+ setLabel(jCBXPanel_genre, null, "ジャンル");\r
+ setLabel(jCBXPanel_subgenre, null, "サブジャンル");\r
+ setLabel(jCBXPanel_pursues, null, "番組追従");\r
+ \r
+ // 可変ラベル\r
+ setLabel(jCBXPanel_videorate, recorder.getLabel_Videorate(), "画質");\r
+ setLabel(jCBXPanel_audiorate, recorder.getLabel_Audiorate(), "音質");\r
+ \r
+ setLabel(jCBXPanel_folder, recorder.getLabel_Folder(), "記録先フォルダ");\r
+ setLabel(jCBXPanel_device, recorder.getLabel_Device(), "記録先デバイス");\r
+ \r
+ setLabel(jCBXPanel_bvperf, recorder.getLabel_BVperf(), "録画優先度"); // "高レート節約"?\r
+ setLabel(jCBXPanel_dvdcompat, recorder.getLabel_DVDCompat(), "BD/DVD互換モード");\r
+ \r
+ setLabel(jCBXPanel_autodel, recorder.getLabel_Autodel(), "自動削除");\r
+ setLabel(jCBXPanel_lvoice, recorder.getLabel_LVoice(), "ライン音声選択");\r
+ setLabel(jCBXPanel_aspect, recorder.getLabel_Aspect(), "録画のりしろ"); // "DVD記録時画面比"?\r
+ \r
+ setLabel(jCBXPanel_msChapter, recorder.getLabel_MsChapter(), "マジックチャプタ(シーン)"); // "DVD/シーンチャプタ分割"?\r
+ setLabel(jCBXPanel_mvChapter, recorder.getLabel_MvChapter(), "マジックチャプタ(本編)"); // "音多/本編チャプタ分割"?\r
+ setLabel(jCBXPanel_xChapter, recorder.getLabel_XChapter(), "無音部分チャプタ分割");\r
+ }\r
+\r
+ /**\r
+ * ジャンル別AV設定か、CH別AV設定かを選ぶ\r
+ */\r
+ public void setAVCHSetting(boolean enabled) {\r
+ jLabel_rectype.setText(enabled ? "放送局別の" : "ジャンル別の");\r
+ }\r
+ \r
+ /***************************************\r
+ * 固定アイテムの設定\r
+ **************************************/\r
+ \r
+ /**\r
+ * 固定のアイテムを設定する\r
+ * @see #setFlexItems(HDDRecorder, String)\r
+ */\r
+ public void setFixedItems(HDDRecorderList recorders) {\r
+ \r
+ setEnabledListenerAll(false); // リスナー停止\r
+ \r
+ setRecorderItems(recorders);\r
+ \r
+ setEnabledListenerAll(true); // リスナー再開\r
+ }\r
+ \r
+ /**\r
+ * レコーダアイテムを設定する\r
+ * @see #setFixedItems(HDDRecorderList)\r
+ */\r
+ private void setRecorderItems(HDDRecorderList recorders) {\r
+ String selected = (String) jCBXPanel_recorder.getSelectedItem();\r
+ ArrayList<String> items = new ArrayList<String>();\r
+ for ( HDDRecorder rec : recorders ) {\r
+ if ( rec.isBackgroundOnly() ) {\r
+ continue; // Googleカレンダープラグインとかははずす\r
+ }\r
+ items.add(rec.Myself());\r
+ }\r
+ \r
+ setComboItems(jCBXPanel_recorder, items);\r
+ \r
+ if ( selected != null ) {\r
+ // 入れ替え後に元に戻してみる\r
+ jCBXPanel_recorder.setSelectedItem(selected);\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * ジャンルアイテムを設定する\r
+ * @see #setFixedItems(HDDRecorderList)\r
+ */\r
+ private void setGenreItems() {\r
+ ArrayList<String> items = new ArrayList<String>();\r
+ for ( ProgGenre g : ProgGenre.values() ) {\r
+ items.add(g.toString());\r
+ }\r
+ \r
+ setComboItems(jCBXPanel_genre, items);\r
+ }\r
+ \r
+ \r
+ /***************************************\r
+ * 可変アイテムの設定\r
+ **************************************/\r
+ \r
+ /**\r
+ * レコーダが選択されたらそれにあわせて各コンポーネントアイテムを設定する\r
+ */\r
+ public void setFlexItems(HDDRecorder recorder, String webChName) {\r
+ \r
+ setEnabledListenerAll(false); // リスナー停止 \r
+ \r
+ // エンコーダ\r
+ setComboItems(jCBXPanel_encoder, recorder.getFilteredEncoders(webChName));\r
+ \r
+ // 設定値\r
+ setComboItems(jCBXPanel_videorate, recorder.getVideoRateList());\r
+ setComboItems(jCBXPanel_audiorate, recorder.getAudioRateList());\r
+ setComboItems(jCBXPanel_folder, recorder.getFolderList());\r
+ \r
+ setComboItems(jCBXPanel_device, recorder.getDeviceList());\r
+ setComboItems(jCBXPanel_bvperf, recorder.getBVperf());\r
+ setComboItems(jCBXPanel_dvdcompat, recorder.getDVDCompatList());\r
+ \r
+ setComboItems(jCBXPanel_autodel, recorder.getAutodel());\r
+ setComboItems(jCBXPanel_lvoice, recorder.getLVoice());\r
+ setComboItems(jCBXPanel_aspect, recorder.getAspect());\r
+ \r
+ setComboItems(jCBXPanel_msChapter, recorder.getMsChapter());\r
+ setComboItems(jCBXPanel_mvChapter, recorder.getMvChapter());\r
+ setComboItems(jCBXPanel_xChapter, recorder.getXChapter());\r
+\r
+ setComboItems(jCBXPanel_pursues, null);\r
+ \r
+ setEnabledListenerAll(true); // リスナー再開\r
+ }\r
+ \r
+ /**\r
+ * ジャンルが選択されたらそれにあわせてサブジャンルアイテムを設定する\r
+ * @see #setGenreItems()\r
+ */\r
+ private void setSubgenreItems(ProgGenre genre) {\r
+ ArrayList<String> items = new ArrayList<String>();\r
+ for ( ProgSubgenre sg : ProgSubgenre.values(genre) ) {\r
+ items.add(sg.toString());\r
+ }\r
+ \r
+ setComboItems(jCBXPanel_subgenre, items);\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * 共通部品的な\r
+ ******************************************************************************/\r
+\r
+ /**\r
+ * コンボボックスのアイテム登録を行う\r
+ */\r
+ private <T> int setComboItems(JComboBoxPanel combo, ArrayList<T> items) {\r
+ combo.removeAllItems();\r
+ \r
+ if ( items == null ) {\r
+ // ここにくるのは番組追従のみかな?\r
+ combo.addItem(ITEM_YES);\r
+ combo.addItem(ITEM_NO);\r
+ combo.setEnabled(true);\r
+ return combo.getItemCount();\r
+ }\r
+\r
+ if ( items.size() == 0 ) {\r
+ combo.setEnabled(false);\r
+ return 0;\r
+ }\r
+ \r
+ // うひー\r
+ for ( T enc : items ) {\r
+ if ( enc.getClass() == TextValueSet.class ) {\r
+ TextValueSet t = (TextValueSet) enc;\r
+ combo.addItem(t.getText());\r
+ \r
+ if (t.getDefval()) combo.setSelectedIndex(combo.getItemCount()-1); // デフォルト値があるならば\r
+ }\r
+ else if ( enc.getClass() == String.class ) {\r
+ // レコーダ・エンコーダのみかな?\r
+ combo.addItem((String) enc);\r
+ }\r
+ }\r
+ combo.setEnabled(combo.getItemCount() > 1);\r
+ return combo.getItemCount();\r
+ }\r
+\r
+ private void setLabel(JComboBoxPanel combo, String overrideLabel, String defaultLabel) {\r
+ combo.setText((overrideLabel!=null)?overrideLabel:defaultLabel);\r
+ }\r
+ \r
+ /*******************************************************************************\r
+ * 外部とのやり取り(設定反映系)\r
+ ******************************************************************************/\r
+\r
+ /***************************************\r
+ * 設定の一括反映3種\r
+ **************************************/\r
+ \r
+ /**\r
+ * 番組情報によるアイテム選択\r
+ */\r
+ public void setSelectedValues(ProgDetailList tvd, ReserveList r) {\r
+ \r
+ setEnabledListenerAll(false);\r
+ \r
+ // サブジャンルアイテム群はジャンル決定後に埋まる\r
+ setSelectedGenreValues((tvd.genre!=null?tvd.genre.toString():null), (tvd.subgenre!=null?tvd.subgenre.toString():null));\r
+ \r
+ // チューナー\r
+ setSelectedEncoderValue(r.getTuner()); // encがnullかどうかはメソッドの中で確認するよ\r
+ \r
+ // 画質・音質\r
+ setSelectedValue(jCBXPanel_videorate, r.getRec_mode());\r
+ setSelectedValue(jCBXPanel_audiorate, r.getRec_audio());\r
+ setSelectedValue(jCBXPanel_folder, r.getRec_folder());\r
+ // サブジャンルは番組情報から\r
+ setSelectedValue(jCBXPanel_dvdcompat, r.getRec_dvdcompat());\r
+ setSelectedValue(jCBXPanel_device, r.getRec_device());\r
+ \r
+ // 自動チャプタ関連\r
+ setSelectedValue(jCBXPanel_xChapter, r.getRec_xchapter());\r
+ setSelectedValue(jCBXPanel_msChapter, r.getRec_mschapter());\r
+ setSelectedValue(jCBXPanel_mvChapter, r.getRec_mvchapter());\r
+ \r
+ // その他\r
+ setSelectedValue(jCBXPanel_aspect, r.getRec_aspect());\r
+ setSelectedValue(jCBXPanel_bvperf, r.getRec_bvperf());\r
+ setSelectedValue(jCBXPanel_lvoice, r.getRec_lvoice());\r
+ setSelectedValue(jCBXPanel_autodel, r.getRec_autodel());\r
+ \r
+ // 番組追従\r
+ setSelectedValue(jCBXPanel_pursues, r.getPursues() ? ITEM_YES : ITEM_NO);\r
+ \r
+ // 実行ON・OFF\r
+ setExecValue(r.getExec());\r
+ \r
+ setEnabledListenerAll(true);\r
+ }\r
+ \r
+ /**\r
+ * 類似予約情報によるアイテム選択\r
+ */\r
+ public void setSelectedValues(ReserveList r) {\r
+\r
+ setEnabledListenerAll(false);\r
+\r
+ // サブジャンルアイテム群はジャンル決定後に埋まる\r
+ setSelectedGenreValues(r.getRec_genre(), r.getRec_genre());\r
+\r
+ // チューナー\r
+ setSelectedValue(jCBXPanel_encoder, r.getTuner());\r
+ \r
+ // 画質・音質\r
+ setSelectedValue(jCBXPanel_videorate, r.getRec_mode());\r
+ setSelectedValue(jCBXPanel_audiorate, r.getRec_audio());\r
+ setSelectedValue(jCBXPanel_folder, r.getRec_folder());\r
+ setSelectedValue(jCBXPanel_subgenre, r.getRec_subgenre());\r
+ setSelectedValue(jCBXPanel_dvdcompat, r.getRec_dvdcompat());\r
+ setSelectedValue(jCBXPanel_device, r.getRec_device());\r
+ \r
+ // 自動チャプタ関連\r
+ setSelectedValue(jCBXPanel_xChapter, r.getRec_xchapter());\r
+ setSelectedValue(jCBXPanel_msChapter, r.getRec_mschapter());\r
+ setSelectedValue(jCBXPanel_mvChapter, r.getRec_mvchapter());\r
+ \r
+ // その他\r
+ setSelectedValue(jCBXPanel_aspect, r.getRec_aspect());\r
+ setSelectedValue(jCBXPanel_bvperf, r.getRec_bvperf());\r
+ setSelectedValue(jCBXPanel_lvoice, r.getRec_lvoice());\r
+ setSelectedValue(jCBXPanel_autodel, r.getRec_autodel());\r
+ \r
+ // 番組追従\r
+ setSelectedValue(jCBXPanel_pursues, r.getPursues() ? ITEM_YES : ITEM_NO);\r
+ \r
+ // 実行ON・OFF\r
+ setExecValue(r.getExec());\r
+ \r
+ setEnabledListenerAll(true);\r
+ }\r
+ \r
+ /**\r
+ * ジャンル別AV設定によるアイテム選択\r
+ */\r
+ public void setSelectedValues(AVs avs) {\r
+ \r
+ setEnabledListenerAll(false);\r
+ \r
+ // 画質・音質\r
+ setSelectedValue(jCBXPanel_videorate, avs.getVideorate());\r
+ setSelectedValue(jCBXPanel_audiorate, avs.getAudiorate());\r
+ setSelectedValue(jCBXPanel_folder, avs.getFolder());\r
+ // サブジャンルは確定済み\r
+ setSelectedValue(jCBXPanel_dvdcompat, avs.getDVDCompat());\r
+ setSelectedValue(jCBXPanel_device, avs.getDevice());\r
+ \r
+ // 自動チャプタ関連\r
+ setSelectedValue(jCBXPanel_xChapter, avs.getXChapter());\r
+ setSelectedValue(jCBXPanel_msChapter, avs.getMsChapter());\r
+ setSelectedValue(jCBXPanel_mvChapter, avs.getMvChapter());\r
+ \r
+ // その他\r
+ setSelectedValue(jCBXPanel_aspect, avs.getAspect());\r
+ setSelectedValue(jCBXPanel_bvperf, avs.getBvperf());\r
+ setSelectedValue(jCBXPanel_lvoice, avs.getLvoice());\r
+ setSelectedValue(jCBXPanel_autodel, avs.getAutodel());\r
+ \r
+ setEnabledListenerAll(true);\r
+ }\r
+ \r
+ /***************************************\r
+ * 設定の部分反映各種 \r
+ **************************************/\r
+ \r
+ /**\r
+ * 実行ON・OFFの強制設定\r
+ */\r
+ public void setExecValue(boolean b) {\r
+ jCheckBox_Exec.setSelected(b);\r
+ jCheckBox_Exec.setForeground(b ? Color.BLACK : Color.RED);\r
+ }\r
+ \r
+ /**\r
+ * レコーダのアイテム選択(中から呼んじゃだめだよ)\r
+ */\r
+ public String setSelectedRecorderValue(String myself) {\r
+ setEnabledListenerAll(false);\r
+ \r
+ String selected = setSelectedValue(jCBXPanel_recorder, myself);\r
+ \r
+ setEnabledListenerAll(true);\r
+ return selected;\r
+ }\r
+ \r
+ /**\r
+ * エンコーダのアイテム選択\r
+ */\r
+ private String setSelectedEncoderValue(String enc) {\r
+ if ( enc == null ) {\r
+ jCBXPanel_encoder.setSelectedIndex(0);\r
+ jLabel_encoderemptywarn.setText("空きエンコーダ検索無効");\r
+ jLabel_encoderemptywarn.setForeground(Color.CYAN);\r
+ }\r
+ else if ( enc.length() == 0 ) {\r
+ jCBXPanel_encoder.setSelectedIndex(0);\r
+ jLabel_encoderemptywarn.setText("空きエンコーダ不足");\r
+ jLabel_encoderemptywarn.setForeground(Color.RED);\r
+ }\r
+ else {\r
+ jCBXPanel_encoder.setSelectedItem(enc);\r
+ jLabel_encoderemptywarn.setText("空きエンコーダあり");\r
+ jLabel_encoderemptywarn.setForeground(Color.BLUE);\r
+ }\r
+ \r
+ return (String) jCBXPanel_encoder.getSelectedItem();\r
+ }\r
+ \r
+ /**\r
+ * ジャンルアイテムの選択\r
+ */\r
+ private String setSelectedGenreValues(String genre, String subgenre) {\r
+ if ( genre == null || genre.length() == 0 ) {\r
+ genre = ProgGenre.NOGENRE.toString();\r
+ }\r
+ jCBXPanel_genre.setSelectedItem(genre);\r
+ \r
+ if ( subgenre == null || subgenre.length() == 0 ) {\r
+ jCBXPanel_subgenre.setSelectedIndex(0);\r
+ }\r
+ else {\r
+ jCBXPanel_subgenre.setSelectedItem(subgenre);\r
+ }\r
+ \r
+ return (String) jCBXPanel_genre.getSelectedItem();\r
+ }\r
+ \r
+ /**\r
+ * アイテム選択\r
+ */\r
+ private String setSelectedValue(JComboBoxPanel comp, String value) {\r
+ if ( value != null ) {\r
+ comp.setSelectedItem(value);\r
+ }\r
+ else if ( comp.getItemCount() > 0 ){\r
+ comp.setSelectedIndex(0);\r
+ }\r
+ return (String) comp.getSelectedItem();\r
+ }\r
+ \r
+ /*******************************************************************************\r
+ * 外部とのやり取り(設定取得系)\r
+ ******************************************************************************/\r
+ \r
+ /***************************************\r
+ * 取得系\r
+ **************************************/\r
+ \r
+ /**\r
+ * 選択中のレコーダを返す\r
+ */\r
+ public String getSelectedRecorder() {\r
+ return (String) jCBXPanel_recorder.getSelectedItem();\r
+ }\r
+ \r
+ /**\r
+ * 選択値を予約情報に代入する\r
+ */\r
+ public ReserveList getSelectedValues(ReserveList r) {\r
+ \r
+ r.setTuner((String) jCBXPanel_encoder.getSelectedItem());\r
+ \r
+ r.setRec_mode((String) jCBXPanel_videorate.getSelectedItem());\r
+ r.setRec_audio((String) jCBXPanel_audiorate.getSelectedItem());\r
+ r.setRec_folder((String) jCBXPanel_folder.getSelectedItem());\r
+ r.setRec_genre((String) jCBXPanel_genre.getSelectedItem());\r
+ r.setRec_subgenre((String) jCBXPanel_subgenre.getSelectedItem());\r
+ r.setRec_dvdcompat((String) jCBXPanel_dvdcompat.getSelectedItem());\r
+ r.setRec_device((String) jCBXPanel_device.getSelectedItem());\r
+ \r
+ // 自動チャプタ関連\r
+ r.setRec_xchapter((String) jCBXPanel_xChapter.getSelectedItem());\r
+ r.setRec_mschapter((String) jCBXPanel_msChapter.getSelectedItem());\r
+ r.setRec_mvchapter((String) jCBXPanel_mvChapter.getSelectedItem());\r
+ \r
+ // その他\r
+ r.setRec_aspect((String) jCBXPanel_aspect.getSelectedItem());\r
+ r.setRec_bvperf((String) jCBXPanel_bvperf.getSelectedItem());\r
+ r.setRec_lvoice((String) jCBXPanel_lvoice.getSelectedItem());\r
+ r.setRec_autodel((String) jCBXPanel_autodel.getSelectedItem());\r
+ \r
+ // 番組追従\r
+ r.setPursues(ITEM_YES == jCBXPanel_pursues.getSelectedItem());\r
+ \r
+ // 実行ON・OFF\r
+ r.setExec(jCheckBox_Exec.isSelected());\r
+ \r
+ return r;\r
+ }\r
+ \r
+ /**\r
+ * 選択値をジャンル別録画設定情報に代入する\r
+ */\r
+ public AVs getSelectedSetting(AVs c) {\r
+\r
+ c.setVideorate((String) jCBXPanel_videorate.getSelectedItem());\r
+ c.setAudiorate((String) jCBXPanel_audiorate.getSelectedItem());\r
+ c.setFolder((String) jCBXPanel_folder.getSelectedItem());\r
+ c.setDVDCompat((String) jCBXPanel_dvdcompat.getSelectedItem());\r
+ c.setDevice((String) jCBXPanel_device.getSelectedItem());\r
+ \r
+ c.setXChapter((String) jCBXPanel_xChapter.getSelectedItem());\r
+ c.setMsChapter((String) jCBXPanel_msChapter.getSelectedItem());\r
+ c.setMvChapter((String) jCBXPanel_mvChapter.getSelectedItem());\r
+ \r
+ c.setAspect((String) jCBXPanel_aspect.getSelectedItem());\r
+ c.setBvperf((String) jCBXPanel_bvperf.getSelectedItem());\r
+ c.setLvoice((String) jCBXPanel_lvoice.getSelectedItem());\r
+ c.setAutodel((String) jCBXPanel_autodel.getSelectedItem());\r
+ \r
+ c.setPursues(ITEM_YES == jCBXPanel_pursues.getSelectedItem());\r
+ \r
+ return c;\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * リスナー\r
+ ******************************************************************************/\r
+ \r
+ /***************************************\r
+ * 永続的なリスナー\r
+ **************************************/\r
+ \r
+ private final ItemListener il_resetSubgenreItems = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ // サブジャンルのアイテムをリセットする\r
+ setSubgenreItems(ProgGenre.get((String) jCBXPanel_genre.getSelectedItem()));\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * ジャンル別AV設定のロード\r
+ */\r
+ private final ActionListener al_loadAction = new ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+/*\r
+ ProgGenre key_genre = ProgGenre.get(jPane_recsetting.getSelectedGenre());\r
+ String key_webChName = (String) jComboBox_ch.getSelectedItem();\r
+ String recId = recorders.findInstance(jPane_recsetting.getSelectedRecorder()).get(0).getRecorderId();\r
+ setSelectedAVItems(recId, null, getSelectedAVs(key_genre, key_webChName, recId));\r
+ MWin.appendMessage(MSGID+"画質・音質等の設定を取得しました");\r
+*/\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * ジャンル別AV設定のセーブ\r
+ */\r
+ private final ActionListener al_saveAction = new ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+/*\r
+ Matcher ma = Pattern.compile("^.+?:.+?:(.+?)$").matcher(jPane_recsetting.getSelectedRecorder());\r
+ if (ma.find()) {\r
+ if (env.getEnableCHAVsetting()) {\r
+ String key_webChName = (String) jComboBox_ch.getSelectedItem();\r
+ _save_avsettings(ma.group(1),key_webChName);\r
+ }\r
+ else {\r
+ String key_genre = jPane_recsetting.getSelectedGenre();\r
+ _save_avsettings(ma.group(1),key_genre);\r
+ }\r
+ }\r
+*/\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * 既定AV設定のセーブ\r
+ */\r
+ private final ActionListener al_saveDefaultAction = new ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ /*\r
+ Matcher ma = Pattern.compile("^.+?:.+?:(.+?)$").matcher(jPane_recsetting.getSelectedRecorder());\r
+ if (ma.find()) {\r
+ _save_avsettings(ma.group(1),null);\r
+ }\r
+ */\r
+ }\r
+ };\r
+ \r
+\r
+ /***************************************\r
+ * つけたり外したりするリスナーをつけたり外したりするメソッド\r
+ **************************************/\r
+ \r
+ /**\r
+ * イベントトリガーでアイテムを操作する際に、さらにイベントをキックされてはたまらないのでリスナーを付けたり外したりする\r
+ */\r
+ private void setEnabledListenerAll(boolean enabled) {\r
+\r
+ // あとで削除\r
+ if ( debug ) {\r
+ if ( enabled ) {\r
+ Object o = null;\r
+ for ( ItemListener il : jCBXPanel_recorder.getJComboBox().getItemListeners() ) {\r
+ if ( il == il_recorderChanged ) {\r
+ System.out.println(DBGID+"****** リスナーの重複登録 ******");\r
+ //CommonUtils.printStackTrace();\r
+ o = il;\r
+ break;\r
+ }\r
+ }\r
+ if ( o == null ) {\r
+ System.out.println("+++ リスナーの登録 +++");\r
+ //CommonUtils.printStackTrace();\r
+ }\r
+ }\r
+ else {\r
+ System.out.println("... リスナーの削除 ...");\r
+ }\r
+ }\r
+ \r
+ setEnabledItemListener(jCBXPanel_recorder, il_recorderChanged, enabled);\r
+ setEnabledItemListener(jCBXPanel_encoder, il_encoderChanged, enabled);\r
+ setEnabledItemListener(jCBXPanel_genre, il_genreChanged, enabled);\r
+ }\r
+ private void setEnabledItemListener(ItemSelectable comp, ItemListener il, boolean b) {\r
+ comp.removeItemListener(il);\r
+ if ( b ) {\r
+ comp.addItemListener(il);\r
+ }\r
+ }\r
+ \r
+ /***************************************\r
+ * つけたり外したりするリスナー群 \r
+ **************************************/\r
+ \r
+ /**\r
+ * レコーダーが選択された\r
+ */\r
+ private final ItemListener il_recorderChanged = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ if ( e.getStateChange() != ItemEvent.SELECTED ) {\r
+ return;\r
+ }\r
+ \r
+ if ( recsetsel != null ) {\r
+ setEnabledListenerAll(false); // 停止\r
+ \r
+ recsetsel.doSelectRecorder((String) jCBXPanel_recorder.getSelectedItem());\r
+ \r
+ setEnabledListenerAll(true); // 再開\r
+ }\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * エンコーダが選択された(ので利用可能な画質を選びなおす)\r
+ */\r
+ private final ItemListener il_encoderChanged = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ if ( e.getStateChange() != ItemEvent.SELECTED ) {\r
+ return;\r
+ }\r
+\r
+ String myself = (String) jCBXPanel_recorder.getSelectedItem();\r
+ if ( ! isVARDIA(myself) ) {\r
+ return;\r
+ }\r
+ \r
+ String encoder = (String) jCBXPanel_encoder.getSelectedItem();\r
+ if ( encoder == null ) {\r
+ return;\r
+ }\r
+\r
+ if ( encoder.startsWith("TS") ) {\r
+ // TS1/2では画質に[TS]系列を選ぶ\r
+ setSelectedVrateByEncoderChanged("[TS]",null);\r
+ }\r
+ else if ( encoder.startsWith("DR") ) {\r
+ // DR1/2では画質に[DR]を選ぶ\r
+ setSelectedVrateByEncoderChanged("[DR]",null);\r
+ }\r
+ else if ( encoder.startsWith("RE") ) {\r
+ // REでは画質に[TSE]または[AVC]系列を選ぶ\r
+ setSelectedVrateByEncoderChanged("[TSE] ","[AVC] ");\r
+ }\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * エンコーダに連動して画質を変える(RD系)\r
+ */\r
+ private void setSelectedVrateByEncoderChanged(String vrate1, String vrate2) {\r
+ for ( int i=0; i<jCBXPanel_videorate.getItemCount(); i++ ) {\r
+ String vrate = (String) jCBXPanel_videorate.getItemAt(i);\r
+ if ( vrate1 != null && vrate.startsWith(vrate1) ) {\r
+ jCBXPanel_videorate.setSelectedIndex(i);\r
+ return;\r
+ }\r
+ if ( vrate2 != null && vrate.startsWith(vrate2) ) {\r
+ jCBXPanel_videorate.setSelectedIndex(i);\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * VARDIA・REGZA RDかどうか調べる\r
+ */\r
+ private boolean isVARDIA( String myself ) {\r
+ return (myself != null && (myself.startsWith("VARDIA RD-") || myself.startsWith("REGZA RD-"))) ;\r
+ }\r
+ \r
+ // RDかどうか調べる\r
+ private boolean isRD( String myrecid ) {\r
+ return ( myrecid.startsWith("RD-") || myrecid.startsWith("VARDIA RD-") || myrecid.startsWith("REGZA RD-") || myrecid.startsWith("REGZA DBR-Z") ) ;\r
+ }\r
+ \r
+\r
+ private final ItemListener il_genreChanged = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ if (e.getStateChange() != ItemEvent.SELECTED) {\r
+ return;\r
+ }\r
+ setSubgenreItems(ProgGenre.get((String) jCBXPanel_genre.getSelectedItem()));\r
+ }\r
+ };\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * コンポーネント\r
+ ******************************************************************************/\r
+\r
+ // あれ?getJXX()が一個もないよ!\r
+ \r
+}\r
--- /dev/null
+package tainavi;\r
+\r
+import java.awt.Color;\r
+import java.awt.Dimension;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\r
+import java.util.Calendar;\r
+import java.util.GregorianCalendar;\r
+\r
+import javax.swing.JButton;\r
+import javax.swing.JComboBox;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTextArea;\r
+import javax.swing.JTextField;\r
+import javax.swing.SpringLayout;\r
+import javax.swing.border.LineBorder;\r
+\r
+\r
+/**\r
+ * 予約ダイアログを目的ごとに3ブロックにわけたうちの「番組情報」部分のコンポーネント\r
+ * @since 3.22.2β\r
+ */\r
+public class TitleEditorPanel extends JPanel {\r
+\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ /*******************************************************************************\r
+ * 定数\r
+ ******************************************************************************/\r
+\r
+ //\r
+ private static final String ITEM_EVIDNEEDED = "番組ID取得";\r
+ \r
+ // レイアウト関連\r
+ private static final int PARTS_HEIGHT = 25;\r
+ private static final int SEP_WIDTH = 10;\r
+ private static final int SEP_WIDTH_NARROW = 5;\r
+ private static final int SEP_HEIGHT = 10;\r
+ private static final int SEP_HEIGHT_NALLOW = 5;\r
+ \r
+ private static final int COMBO_WIDTH = 115;\r
+ private static final int COMBO_WIDTH_WIDE = 155;\r
+ private static final int COMBO_HEIGHT = 43;\r
+\r
+ private static final int TITLE_WIDTH = COMBO_WIDTH_WIDE+COMBO_WIDTH*2+SEP_WIDTH*2;\r
+ private static final int CHNAME_WIDTH = COMBO_WIDTH*2+SEP_WIDTH;\r
+ private static final int DETAIL_WIDTH = TITLE_WIDTH+CHNAME_WIDTH+SEP_WIDTH;\r
+ private static final int DETAIL_HEIGHT = 100;\r
+ private static final int DATE_WIDTH = 175;\r
+ \r
+ private static final int HOUR_WIDTH = 50;\r
+ \r
+ \r
+ private static final int LABEL_WIDTH = 150;\r
+ private static final int BUTTON_WIDTH = 75;\r
+\r
+ \r
+ /*******************************************************************************\r
+ * コンポーネント\r
+ ******************************************************************************/\r
+ \r
+ private JLabel jLabel_title = null;\r
+ private JButton jButton_getEventId = null;\r
+ private JTXTLabel jLabel_eventId = null;\r
+ private JButton jButton_addDate = null;\r
+ private JComboBoxWithPopup jComboBox_title = null;\r
+ private JLabel jLabel_ch = null;\r
+ private JWideComboBox jComboBox_ch = null;\r
+ \r
+ private JLabel jLabel_date = null;\r
+ private JComboBox jComboBox_date = null;\r
+ \r
+ private JLabel jLabel_aTime = null;\r
+ private JComboBoxWithPopup jComboBox_ahh = null;\r
+ private JLabel jLabel_asep = null;\r
+ private JComboBoxWithPopup jComboBox_amm = null;\r
+ private JButton jButton_amm_up = null;\r
+ private JButton jButton_amm_down = null;\r
+ \r
+ private JLabel jLabel_zTime = null;\r
+ private JComboBoxWithPopup jComboBox_zhh = null;\r
+ private JLabel jLabel_zsep = null;\r
+ private JComboBoxWithPopup jComboBox_zmm = null;\r
+ private JButton jButton_zmm_up = null;\r
+ private JButton jButton_zmm_down = null;\r
+ \r
+ private JLabel jLabel_recmin = null;\r
+ \r
+ private JLabel jLabel_detail = null;\r
+ private JScrollPane jScrollPane_detail = null;\r
+ private JTextAreaWithPopup jTextArea_detail = null;\r
+ \r
+ private JCheckBoxPanel jCheckBox_OverlapDown2 = null;\r
+ private JCheckBoxPanel jCheckBox_spoex_extend = null;\r
+ \r
+ private JCheckBoxPanel jCheckBox_Autocomplete = null;\r
+\r
+ private JButton jButton_update = null;\r
+ private JButton jButton_record = null;\r
+ private JButton jButton_cancel = null;\r
+ \r
+\r
+ /*******************************************************************************\r
+ * 部品\r
+ ******************************************************************************/\r
+\r
+ private RecordExecutable recexec = null;\r
+ \r
+ TimeVal tVal = null;\r
+ \r
+ public static class TimeVal {\r
+ String date = null;\r
+ Integer ahh = null;\r
+ Integer amm = null;\r
+ Integer zhh = null;\r
+ Integer zmm = null;\r
+ \r
+ String startDateTime = null; \r
+ String endDateTime = null; \r
+ \r
+ Boolean margined = null; // 開始時間前倒し\r
+ Boolean clipped = null; // 終了時間短縮\r
+ \r
+ Boolean spoex = null;\r
+ int spoexlen = 0;\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * コンストラクタ\r
+ ******************************************************************************/\r
+ \r
+ public TitleEditorPanel() {\r
+\r
+ super();\r
+ setBorder(new LineBorder(Color.BLACK, 1));\r
+\r
+ addComponents();\r
+ }\r
+ \r
+ private void addComponents() {\r
+ \r
+ setLayout(new SpringLayout());\r
+ \r
+ int y = SEP_HEIGHT_NALLOW;\r
+ int x = SEP_WIDTH_NARROW;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, getJLabel_title("予約名"), 40, PARTS_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, getJComboBox_title(), TITLE_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ \r
+ CommonSwingUtils.putComponentOn(this, getJButton_getEventId(ITEM_EVIDNEEDED), 100, PARTS_HEIGHT, x+50, y);\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_eventId(""), 75, PARTS_HEIGHT-2, x+50+100+SEP_WIDTH_NARROW, y+1);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_addDate("日付追加"), 100, PARTS_HEIGHT, x+SEP_WIDTH_NARROW+TITLE_WIDTH-100-SEP_HEIGHT_NALLOW, y);\r
+ \r
+ CommonSwingUtils.putComponentOn(this, getJLabel_ch("CH"), LABEL_WIDTH, PARTS_HEIGHT, x+TITLE_WIDTH+SEP_WIDTH, y);\r
+ CommonSwingUtils.putComponentOn(this, getJComboBox_ch(), CHNAME_WIDTH, PARTS_HEIGHT, x+TITLE_WIDTH+SEP_WIDTH+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+\r
+ y += PARTS_HEIGHT*2+SEP_HEIGHT_NALLOW;\r
+ \r
+ {\r
+ int hmx = x;\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_date("録画日付"), LABEL_WIDTH, PARTS_HEIGHT, hmx,y);\r
+ CommonSwingUtils.putComponentOn(this, getJComboBox_date(), DATE_WIDTH, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ \r
+ hmx += DATE_WIDTH+SEP_WIDTH;\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_aTime("開始時刻"), 75, PARTS_HEIGHT, hmx, y);\r
+ CommonSwingUtils.putComponentOn(this, getJTextField_ahh(), HOUR_WIDTH, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_asep(":"), 10, PARTS_HEIGHT, hmx+=HOUR_WIDTH, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJTextField_amm(), HOUR_WIDTH, PARTS_HEIGHT, hmx+=10, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_amm_up(), 20, 12, hmx+=HOUR_WIDTH+2, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_amm_down(), 20, 12, hmx, y+PARTS_HEIGHT+13);\r
+ \r
+ hmx += 20+SEP_WIDTH_NARROW;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, getJLabel_zTime("終了時刻"), 75, PARTS_HEIGHT, hmx, y);\r
+ {\r
+ CommonSwingUtils.putComponentOn(this, new JLabel("録画時間"), 75, PARTS_HEIGHT, hmx, y+PARTS_HEIGHT*2+2);\r
+ }\r
+ CommonSwingUtils.putComponentOn(this, getJTextField_zhh(), HOUR_WIDTH, PARTS_HEIGHT, hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_zsep(":"), 10, PARTS_HEIGHT, hmx+=HOUR_WIDTH, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJTextField_zmm(), HOUR_WIDTH, PARTS_HEIGHT, hmx+=10, y+PARTS_HEIGHT);\r
+ { \r
+ CommonSwingUtils.putComponentOn(this, getJLabel_recmin(""), HOUR_WIDTH+10, PARTS_HEIGHT-2, hmx-10, y+PARTS_HEIGHT*2+2+1);\r
+ }\r
+ CommonSwingUtils.putComponentOn(this, getJButton_zmm_up(), 20, 12, hmx+=HOUR_WIDTH+2, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_zmm_down(), 20, 12, hmx, y+PARTS_HEIGHT+13);\r
+ \r
+ hmx += 20+SEP_WIDTH;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, jCheckBox_Autocomplete = new JCheckBoxPanel("タイトル自動補完(RDのみ)",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y);\r
+ CommonSwingUtils.putComponentOn(this, getJCheckBox_spoex_extend("延長警告での終了時刻延長",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y+PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJCheckBox_OverlapDown2("終了時刻1分短縮",LABEL_WIDTH,true), 200, PARTS_HEIGHT, hmx, y+PARTS_HEIGHT*2);\r
+ }\r
+ \r
+ y += PARTS_HEIGHT*2+SEP_WIDTH_NARROW;\r
+\r
+ CommonSwingUtils.putComponentOn(this, getJLabel_detail("番組詳細"), 100, PARTS_HEIGHT, x, y);\r
+ CommonSwingUtils.putComponentOn(this, getJScrollPane_detail(), DETAIL_WIDTH, DETAIL_HEIGHT, x+SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
+ \r
+ y += PARTS_HEIGHT;\r
+ \r
+ \r
+ \r
+ y += DETAIL_HEIGHT+SEP_HEIGHT_NALLOW;\r
+ \r
+ // 特殊配置\r
+ {\r
+ int spy = SEP_HEIGHT_NALLOW+PARTS_HEIGHT;\r
+ x = SEP_WIDTH_NARROW+DETAIL_WIDTH+SEP_WIDTH*2;\r
+ \r
+ CommonSwingUtils.putComponentOn(this, new JLabel("予約"), BUTTON_WIDTH, PARTS_HEIGHT, x, spy);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_record("新規"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_update("更新"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ CommonSwingUtils.putComponentOn(this, getJButton_cancel("キャンセル"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);\r
+ }\r
+ \r
+ x+=BUTTON_WIDTH+SEP_WIDTH_NARROW*2;\r
+ \r
+ Dimension d = new Dimension(x,y);\r
+ setPreferredSize(d);\r
+ }\r
+\r
+ public void setRecordExecuter(RecordExecutable o) {\r
+ recexec = o;\r
+ }\r
+ \r
+ /*******************************************************************************\r
+ * アイテムの設定\r
+ ******************************************************************************/\r
+\r
+ /***************************************\r
+ * 番組IDの設定\r
+ **************************************/\r
+\r
+ /**\r
+ * @param enabled 番組IDの取得ができないシチュエーション(予約一覧から開くとか)では取得ボタンをfalseに。\r
+ */\r
+ public boolean setContentIdValue(String content_id, boolean enabled) {\r
+ \r
+ Integer evid = null;\r
+ if ( content_id != null ) {\r
+ if ( ContentIdEDCB.decodeContentId(content_id) ) {\r
+ evid = ContentIdEDCB.getEvId();\r
+ }\r
+ else if ( ContentIdREGZA.decodeContentId(content_id) && ContentIdREGZA.getEvId() != 0x0000 && ContentIdREGZA.getEvId() != 0xFFFF ) {\r
+ evid = ContentIdREGZA.getEvId();\r
+ }\r
+ else if ( ContentIdDIMORA.decodeContentId(content_id) && ContentIdDIMORA.getEvId() != 0x0000 && ContentIdDIMORA.getEvId() != 0xFFFF ) {\r
+ evid = ContentIdDIMORA.getEvId();\r
+ }\r
+ }\r
+\r
+ // みつからにゃい\r
+ if ( evid == null ) {\r
+ jLabel_eventId.setValue(null);\r
+ jLabel_eventId.setText(null);\r
+ jButton_getEventId.setForeground(enabled ? Color.BLUE : Color.GRAY);\r
+ jButton_getEventId.setEnabled(enabled);\r
+ \r
+ return false;\r
+ }\r
+ \r
+ // みつかったじぇい\r
+ jLabel_eventId.setValue(content_id);\r
+ jLabel_eventId.setText(String.format("%04X",evid));\r
+ jButton_getEventId.setForeground(Color.GRAY);\r
+ jButton_getEventId.setEnabled(false);\r
+ \r
+ return true;\r
+ }\r
+ \r
+ /***************************************\r
+ * まとめて設定\r
+ **************************************/\r
+ \r
+ /**\r
+ * まとめて設定:番組情報編\r
+ */\r
+ public void setSelectedValues(ProgDetailList tvd) {\r
+ // 番組ID\r
+ setContentIdValue(tvd.progid,true);\r
+ \r
+ // タイトル\r
+ {\r
+ int index = jComboBox_title.indexOf(tvd.title);\r
+ if ( index != -1 ) {\r
+ jComboBox_title.setSelectedIndex(index);\r
+ }\r
+ }\r
+ \r
+ // 日付・時刻はここじゃないお\r
+ \r
+ // チャンネル\r
+ {\r
+ int index = jComboBox_ch.indexOf(tvd.center);\r
+ if ( index != -1 ) {\r
+ jComboBox_ch.setSelectedIndex(index);\r
+ }\r
+ }\r
+ \r
+ // 番組詳細\r
+ {\r
+ jTextArea_detail.setText(tvd.detail+"\n"+tvd.getAddedDetail());\r
+ jTextArea_detail.setCaretPosition(0);\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * まとめて設定:類似予約編\r
+ */\r
+ public void setSelectedValues(ReserveList r) {\r
+ // 番組ID\r
+ setContentIdValue(r.getContentId(),true);\r
+ \r
+ // タイトル\r
+ {\r
+ int index = jComboBox_title.indexOf(r.getTitle());\r
+ if ( index != -1 ) {\r
+ jComboBox_title.setSelectedIndex(index);\r
+ }\r
+ }\r
+ \r
+ // 日付\r
+ {\r
+ int index = 0;\r
+ if ( r.getRec_pattern_id() == HDDRecorder.RPTPTN_ID_BYDATE ) {\r
+ index = 0;\r
+ }\r
+ else if ( r.getRec_pattern_id() == HDDRecorder.RPTPTN_ID_MON2THU ) {\r
+ index = 2;\r
+ }\r
+ else if ( r.getRec_pattern_id() == HDDRecorder.RPTPTN_ID_MON2FRI ) {\r
+ index = 3;\r
+ }\r
+ else if ( r.getRec_pattern_id() == HDDRecorder.RPTPTN_ID_MON2SAT ) {\r
+ index = 4;\r
+ }\r
+ else {\r
+ index = 1;\r
+ }\r
+ jComboBox_date.setSelectedIndex(index);\r
+ }\r
+ \r
+ // チャンネル\r
+ {\r
+ int index = jComboBox_ch.indexOf(r.getCh_name());\r
+ if ( index != -1 ) {\r
+ jComboBox_ch.setSelectedIndex(index);\r
+ }\r
+ }\r
+ \r
+ // 番組詳細\r
+ {\r
+ jTextArea_detail.setText(r.getDetail());\r
+ jTextArea_detail.setCaretPosition(0);\r
+ }\r
+ }\r
+ \r
+ \r
+ /***************************************\r
+ * タイトルの設定\r
+ **************************************/\r
+ \r
+ public void setTitleItems(ProgDetailList tvd, LikeReserveList lrl, boolean autocomp ) {\r
+ \r
+ jComboBox_title.removeAllItems();\r
+ \r
+ // 番組表のタイトルを追加\r
+ jComboBox_title.addItem(tvd.title);\r
+ \r
+ // 類似予約のタイトルも追加\r
+ for ( LikeReserveItem ll : lrl ) {\r
+ String l = ll.getRsv().getTitle();\r
+ int index = jComboBox_title.indexOf(l);\r
+ if ( index == -1 ) {\r
+ // ダブりがなければ追加\r
+ jComboBox_title.addItem(l);\r
+ }\r
+ }\r
+\r
+ // タイトル自動設定(RDのみ)\r
+ jCheckBox_Autocomplete.setSelected(autocomp);\r
+ \r
+ // 番組詳細\r
+ jTextArea_detail.setText(tvd.detail+"\n"+tvd.getAddedDetail());\r
+ jTextArea_detail.setCaretPosition(0);\r
+ }\r
+ \r
+ /***************************************\r
+ * 放送局名の設定\r
+ **************************************/\r
+ \r
+ public void setChItem(HDDRecorder myrec, ProgDetailList tvd) {\r
+ \r
+ jComboBox_ch.removeAllItems();\r
+ \r
+ jComboBox_ch.addItem(tvd.center);\r
+ for ( TextValueSet t : myrec.getChValue() ) {\r
+ if ( t.getText().startsWith("外部") ) {\r
+ jComboBox_ch.addItem(t.getText());\r
+ }\r
+ }\r
+ \r
+ jComboBox_ch.setEnabled( jComboBox_ch.getItemCount() > 1 );\r
+ }\r
+ \r
+ /***************************************\r
+ * 時刻と長さの設定\r
+ **************************************/\r
+ \r
+ public void setTimeValue(TimeVal tValues) {\r
+ \r
+ tVal = tValues;\r
+ \r
+ jComboBox_ahh.setSelectedIndex(tVal.ahh);\r
+ jComboBox_amm.setSelectedIndex(tVal.amm);\r
+ jComboBox_zhh.setSelectedIndex(tVal.zhh);\r
+ jComboBox_zmm.setSelectedIndex(tVal.zmm);\r
+ \r
+ if ( tVal.spoex != null && tVal.spoex ) {\r
+ jCheckBox_spoex_extend.setEnabled(true);\r
+ jCheckBox_spoex_extend.setForeground(Color.RED);\r
+ jCheckBox_spoex_extend.setSelected(true);\r
+ }\r
+ else {\r
+ jCheckBox_spoex_extend.setEnabled(false);\r
+ jCheckBox_spoex_extend.setForeground(Color.BLACK);\r
+ jCheckBox_spoex_extend.setSelected(false);\r
+ }\r
+ \r
+ if ( tVal.clipped != null ) {\r
+ jCheckBox_OverlapDown2.setEnabled(true);\r
+ jCheckBox_OverlapDown2.setForeground(tVal.clipped ? Color.RED : Color.BLACK);\r
+ jCheckBox_OverlapDown2.setSelected(tVal.clipped);\r
+ }\r
+ else {\r
+ jCheckBox_OverlapDown2.setEnabled(false);\r
+ jCheckBox_OverlapDown2.setForeground(Color.BLACK);\r
+ jCheckBox_OverlapDown2.setSelected(false);\r
+ }\r
+ }\r
+ \r
+ private void setRecMinItem() {\r
+ int recmin = CommonUtils.getRecMinVal(\r
+ jComboBox_ahh.getSelectedIndex(),\r
+ jComboBox_amm.getSelectedIndex(),\r
+ jComboBox_zhh.getSelectedIndex(),\r
+ jComboBox_zmm.getSelectedIndex());\r
+ \r
+ jLabel_recmin.setText(String.valueOf(recmin)+" 分 ");\r
+ }\r
+ \r
+ /***************************************\r
+ * 日付の設定\r
+ **************************************/\r
+ \r
+ public void setDateItems(ProgDetailList tvd, TimeVal tValues) {\r
+ \r
+ jComboBox_date.removeAllItems();\r
+ \r
+ // リスト/新聞形式からの呼び出しなら番組情報をもとに\r
+ GregorianCalendar c = CommonUtils.getCalendar(tValues.date);\r
+ if ( c != null ) {\r
+ jComboBox_date.addItem(CommonUtils.getDate(c));\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[c.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY]);\r
+ }\r
+ \r
+ setDateRepeatItems();\r
+ }\r
+ \r
+ public void setDateItems(ReserveList myrsv, TimeVal tValues) {\r
+ \r
+ jComboBox_date.removeAllItems();\r
+ \r
+ // 本体予約一覧からの呼び出しなら既存の予約情報からの引継ぎ\r
+ GregorianCalendar c = CommonUtils.getCalendar(myrsv.getRec_pattern());\r
+ if ( c != null ) {\r
+ // 単日予約の場合\r
+ jComboBox_date.addItem(myrsv.getRec_pattern());\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[c.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY]);\r
+ }\r
+ else {\r
+ // 繰り返し予約の場合\r
+ jComboBox_date.addItem(myrsv.getRec_nextdate());\r
+ jComboBox_date.addItem(myrsv.getRec_pattern());\r
+ }\r
+ \r
+ setDateRepeatItems();\r
+ }\r
+ \r
+ private void setDateRepeatItems() {\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[7]);\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[8]);\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[9]);\r
+ jComboBox_date.addItem(HDDRecorder.RPTPTN[10]);\r
+ }\r
+\r
+ /**\r
+ * 登録ボタンの有効・無効\r
+ */\r
+ public void setEnabledRecordButton(boolean enabled) {\r
+ jButton_record.setForeground(enabled ? Color.RED : Color.GRAY);\r
+ jButton_record.setEnabled(enabled);\r
+ }\r
+ \r
+ /**\r
+ * 更新ボタンの有効・無効\r
+ */\r
+ public void setEnabledUpdateButton(boolean enabled) {\r
+ jButton_update.setForeground(enabled ? Color.RED : Color.GRAY);\r
+ jButton_update.setEnabled(enabled);\r
+ }\r
+ \r
+ /*******************************************************************************\r
+ * リスナー\r
+ ******************************************************************************/\r
+ \r
+ /***************************************\r
+ * タイトル関連のリスナー\r
+ **************************************/\r
+\r
+ /**\r
+ * タイトルが設定(!入力)されたらキャレットを先頭に戻す\r
+ */\r
+ private final ItemListener il_titleEntered = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ if (e.getStateChange() == ItemEvent.SELECTED) {\r
+ // キャレットを先頭へ\r
+ ((JTextField)jComboBox_title.getEditor().getEditorComponent()).setCaretPosition(0);\r
+ }\r
+ }\r
+ };\r
+ \r
+ \r
+ /**\r
+ * 日付ボタンでタイトルの末尾に日付を追加する\r
+ */\r
+ private ActionListener al_addDate = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ \r
+ GregorianCalendar ca = CommonUtils.getCalendar((String) jComboBox_date.getSelectedItem());\r
+ if ( ca == null ) {\r
+ // 日付指定でなければ\r
+ return;\r
+ }\r
+ \r
+ String date = String.format(" %02d_%02d", ca.get(Calendar.MONTH), ca.get(Calendar.DAY_OF_MONTH));\r
+ String title = (String) jComboBox_title.getSelectedItem();\r
+ if ( title.endsWith(date) ) {\r
+ // 同じ日付が追加済みなら\r
+ return;\r
+ }\r
+ \r
+ String newTitle = title.replaceFirst(" \\d\\d_\\d\\d$", date);\r
+ if ( title.equals(newTitle) ) {\r
+ // 日付がついてなかった場合は\r
+ newTitle = title+date;\r
+ }\r
+ \r
+ // なければ追加して選択、あれば選択のみ\r
+ int index = -1;\r
+ for ( int i=0; i<jComboBox_title.getItemCount(); i++ ) {\r
+ if ( newTitle.equals((String) jComboBox_title.getItemAt(i)) ) {\r
+ index = i;\r
+ break;\r
+ }\r
+ }\r
+ if ( index == -1 ) {\r
+ jComboBox_title.addItem(newTitle);\r
+ index = jComboBox_title.getItemCount()-1;\r
+ }\r
+ jComboBox_title.setSelectedIndex(index);\r
+ \r
+ // キャレットを末尾へ\r
+ ((JTextField)jComboBox_title.getEditor().getEditorComponent()).setCaretPosition(newTitle.length());\r
+ }\r
+ };\r
+ \r
+ \r
+ /***************************************\r
+ * 時刻を上下するリスナー\r
+ **************************************/\r
+\r
+ /**\r
+ * 開始時刻を1分進める\r
+ */\r
+ private final ActionListener al_upAmm = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ _updownMm(jComboBox_date,jComboBox_ahh,jComboBox_amm,-1);\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * 開始時刻を1分戻す\r
+ */\r
+ private final ActionListener al_downAmm = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ _updownMm(jComboBox_date,jComboBox_ahh,jComboBox_amm,+1);\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * 終了時刻を1分進める\r
+ */\r
+ private final ActionListener al_upZmm = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ _updownMm(null,jComboBox_zhh,jComboBox_zmm,-1);\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * 終了時刻を1分戻す\r
+ */\r
+ private final ActionListener al_downZmm = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ _updownMm(null,jComboBox_zhh,jComboBox_zmm,+1);\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * updown共通部品\r
+ */\r
+ private void _updownMm(JComboBox dt, JComboBox hh, JComboBox mm, int n) {\r
+ \r
+ String olddate;\r
+ if ( dt != null ) {\r
+ olddate = (String) jComboBox_date.getItemAt(0);\r
+ }\r
+ else {\r
+ olddate = CommonUtils.getDate();\r
+ }\r
+ GregorianCalendar cal = CommonUtils.getCalendar(olddate+" "+hh.getSelectedItem()+":"+mm.getSelectedItem());\r
+ cal.add(Calendar.MINUTE, n);\r
+ hh.setSelectedIndex(cal.get(Calendar.HOUR_OF_DAY));\r
+ mm.setSelectedIndex(cal.get(Calendar.MINUTE));\r
+\r
+ if ( dt == null ) {\r
+ return;\r
+ }\r
+\r
+ // 開始時刻の場合は日付変更線をまたぐかも\r
+ \r
+ String newdate = CommonUtils.getDate(cal);\r
+ String ptrn = HDDRecorder.RPTPTN[cal.get(Calendar.DAY_OF_WEEK)-1];\r
+ \r
+ int idx = dt.getSelectedIndex();\r
+ \r
+ dt.removeItemAt(0);\r
+ dt.insertItemAt(newdate, 0);\r
+ dt.removeItemAt(1);\r
+ dt.insertItemAt(ptrn, 1);\r
+ \r
+ dt.setSelectedIndex(idx);\r
+ }\r
+ \r
+ /**\r
+ * 時刻アイテムが変更された\r
+ */\r
+ private final ItemListener il_timemod = new ItemListener() {\r
+ @Override\r
+ public void itemStateChanged(ItemEvent e) {\r
+ if ( e.getStateChange() == ItemEvent.SELECTED ) {\r
+ setRecMinItem();\r
+ } \r
+ }\r
+ };\r
+\r
+ \r
+ /***************************************\r
+ * 延長警告のリスナー\r
+ **************************************/\r
+ \r
+ /**\r
+ * 延長警告のON/OFF\r
+ */\r
+ private final ActionListener al_spoexClicked = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ \r
+ GregorianCalendar cz = CommonUtils.getCalendar((String) jComboBox_date.getItemAt(0));\r
+ cz.add(Calendar.HOUR_OF_DAY, jComboBox_zhh.getSelectedIndex()-cz.get(Calendar.HOUR_OF_DAY));\r
+ cz.add(Calendar.MINUTE, jComboBox_zmm.getSelectedIndex()-cz.get(Calendar.MINUTE));\r
+ \r
+ if ( tVal.spoexlen > 0 ) {\r
+ cz.add(Calendar.MINUTE, (jCheckBox_spoex_extend.isSelected() ? +tVal.spoexlen : -tVal.spoexlen));\r
+ \r
+ jComboBox_zhh.setSelectedIndex(cz.get(Calendar.HOUR_OF_DAY));\r
+ jComboBox_zmm.setSelectedIndex(cz.get(Calendar.MINUTE));\r
+ }\r
+ }\r
+ };\r
+ \r
+ \r
+ /***************************************\r
+ * 1分短縮のリスナー\r
+ **************************************/\r
+\r
+ /**\r
+ * 1分短縮のON/OFF\r
+ */\r
+ private final ActionListener al_overlapClipClicked = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ \r
+ GregorianCalendar cz = CommonUtils.getCalendar((String) jComboBox_date.getItemAt(0));\r
+ cz.add(Calendar.HOUR_OF_DAY, jComboBox_zhh.getSelectedIndex()-cz.get(Calendar.HOUR_OF_DAY));\r
+ cz.add(Calendar.MINUTE, jComboBox_zmm.getSelectedIndex()-cz.get(Calendar.MINUTE));\r
+ \r
+ if (jCheckBox_OverlapDown2.isSelected() == true) {\r
+ cz.add(Calendar.MINUTE,-1);\r
+ }\r
+ else {\r
+ cz.add(Calendar.MINUTE,+1);\r
+ }\r
+ \r
+ jComboBox_zhh.setSelectedIndex(cz.get(Calendar.HOUR_OF_DAY));\r
+ jComboBox_zmm.setSelectedIndex(cz.get(Calendar.MINUTE));\r
+ }\r
+ };\r
+\r
+\r
+ /***************************************\r
+ * 予約ボタン3種\r
+ **************************************/\r
+\r
+ /**\r
+ * 登録実行\r
+ */\r
+ private final ActionListener al_doRecord = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ if (recexec!=null) recexec.doRecord();\r
+ }\r
+ };\r
+\r
+ /**\r
+ * 更新実行\r
+ */\r
+ private final ActionListener al_doUpdate = new ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ if (recexec!=null) recexec.doUpdate();\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * キャンセル\r
+ */\r
+ private final ActionListener al_doCancel = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ if (recexec!=null) recexec.doCancel();\r
+ }\r
+ };\r
+ \r
+ /***************************************\r
+ * 番組ID取得\r
+ **************************************/\r
+ \r
+ /**\r
+ * 番組IDを取得する\r
+ */\r
+ private final ActionListener al_getEventId = new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ \r
+ if ( recexec != null ) {\r
+ \r
+ String content_id = recexec.doGetEventId();\r
+ \r
+ if ( content_id != null ) {\r
+ setContentIdValue(content_id, false);\r
+ }\r
+ }\r
+ }\r
+ };\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * 選択された値を呼び出し元に戻す\r
+ ******************************************************************************/\r
+ \r
+ public ReserveList getSelectedValues(ReserveList r) {\r
+ \r
+ r.setTitle((String)jComboBox_title.getSelectedItem());\r
+ r.setTitlePop(TraceProgram.replacePop(r.getTitle()));\r
+ r.setDetail(jTextArea_detail.getText());\r
+ \r
+ r.setCh_name((String)jComboBox_ch.getSelectedItem());\r
+ r.setChannel(""); // PostRdEntry()中で取得するのでここはダミー\r
+ \r
+ r.setRec_pattern((String)jComboBox_date.getSelectedItem());\r
+ r.setRec_pattern_id(-1); // PostRdEntry()中で取得するのでここはダミー\r
+ \r
+ r.setRec_nextdate((String)jComboBox_date.getItemAt(0)); // PostRdEntry()中で取得するのでここはダミー(日付を入れるのはDIGA用)\r
+ \r
+ r.setAhh((String) jComboBox_ahh.getSelectedItem());\r
+ r.setAmm((String) jComboBox_amm.getSelectedItem());\r
+ r.setZhh((String) jComboBox_zhh.getSelectedItem());\r
+ r.setZmm((String) jComboBox_zmm.getSelectedItem());\r
+ \r
+ r.setRec_min(""); // PostRdEntry()中で取得するのでここはダミー\r
+ \r
+ r.setStartDateTime(""); // PostRdEntry()中で取得するのでここはダミー\r
+ r.setEndDateTime(""); // PostRdEntry()中で取得するのでここはダミー\r
+\r
+ if ( jLabel_eventId.getText() != null && ! (jLabel_eventId.getText().endsWith("0000") ||jLabel_eventId.getText().endsWith("FFFF")) ) {\r
+ r.setContentId(jLabel_eventId.getValue());\r
+ }\r
+ else {\r
+ r.setContentId("");\r
+ }\r
+ \r
+ r.setAutocomplete(jCheckBox_Autocomplete.isSelected());\r
+ \r
+ return r;\r
+ }\r
+ \r
+ \r
+ /*******************************************************************************\r
+ * コンポーネント\r
+ ******************************************************************************/\r
+ \r
+ private JLabel getJLabel_date(String s) {\r
+ if (jLabel_date == null) {\r
+ jLabel_date = new JLabel();\r
+ jLabel_date.setText(s);\r
+ }\r
+ return(jLabel_date);\r
+ }\r
+ \r
+ private JComboBox getJComboBox_date() {\r
+ if (jComboBox_date == null) {\r
+ jComboBox_date = new JComboBox();\r
+ }\r
+ return jComboBox_date;\r
+ }\r
+ \r
+ private JLabel getJLabel_detail(String s) {\r
+ if (jLabel_detail == null) {\r
+ jLabel_detail = new JLabel();\r
+ jLabel_detail.setText(s);\r
+ }\r
+ return(jLabel_detail);\r
+ }\r
+\r
+ private JCheckBoxPanel getJCheckBox_OverlapDown2(String s, int labelWidth, boolean rev) {\r
+ if (jCheckBox_OverlapDown2 == null) {\r
+ jCheckBox_OverlapDown2 = new JCheckBoxPanel(s,labelWidth,rev);\r
+\r
+ jCheckBox_OverlapDown2.addActionListener(al_overlapClipClicked);\r
+ }\r
+ return(jCheckBox_OverlapDown2);\r
+ }\r
+ \r
+ private JCheckBoxPanel getJCheckBox_spoex_extend(String s, int labelWidth, boolean rev) {\r
+ \r
+ if (jCheckBox_spoex_extend == null) {\r
+ jCheckBox_spoex_extend = new JCheckBoxPanel(s,labelWidth,rev);\r
+\r
+ jCheckBox_spoex_extend.addActionListener(al_spoexClicked);\r
+ }\r
+ return(jCheckBox_spoex_extend);\r
+ }\r
+ \r
+ private JScrollPane getJScrollPane_detail() {\r
+ if (jScrollPane_detail == null) {\r
+ jScrollPane_detail = new JScrollPane(getJTextArea_detail(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
+ \r
+ jScrollPane_detail.setBorder(new LineBorder(Color.BLACK));\r
+ }\r
+ return(jScrollPane_detail);\r
+ }\r
+ \r
+ private JTextArea getJTextArea_detail() {\r
+ if (jTextArea_detail == null) {\r
+ jTextArea_detail = new JTextAreaWithPopup();\r
+ jTextArea_detail.setLineWrap(true);\r
+ }\r
+ return(jTextArea_detail);\r
+ }\r
+\r
+ private JLabel getJLabel_title(String s) {\r
+ if (jLabel_title == null) {\r
+ jLabel_title = new JLabel();\r
+ jLabel_title.setText(s);\r
+ }\r
+ return(jLabel_title);\r
+ }\r
+ \r
+ private JLabel getJLabel_ch(String s) {\r
+ if (jLabel_ch == null) {\r
+ jLabel_ch = new JLabel();\r
+ jLabel_ch.setText(s);\r
+ }\r
+ return(jLabel_ch);\r
+ }\r
+ \r
+ private JLabel getJLabel_aTime(String s) {\r
+ if (jLabel_aTime == null) {\r
+ jLabel_aTime = new JLabel();\r
+ jLabel_aTime.setText(s);\r
+ }\r
+ return(jLabel_aTime);\r
+ }\r
+ \r
+ private JLabel getJLabel_zTime(String s) {\r
+ if (jLabel_zTime == null) {\r
+ jLabel_zTime = new JLabel();\r
+ jLabel_zTime.setText(s);\r
+ }\r
+ return(jLabel_zTime);\r
+ }\r
+\r
+ private JLabel getJLabel_recmin(String s) {\r
+ if (jLabel_recmin == null) {\r
+ jLabel_recmin = new JLabel();\r
+ jLabel_recmin.setText(s);\r
+ jLabel_recmin.setHorizontalAlignment(JLabel.RIGHT);\r
+ jLabel_recmin.setForeground(Color.BLUE);\r
+ \r
+ jLabel_recmin.setBorder(new LineBorder(Color.LIGHT_GRAY));\r
+ }\r
+ return(jLabel_recmin);\r
+ }\r
+ \r
+ private JComboBox getJComboBox_title() {\r
+ if (jComboBox_title == null) {\r
+ jComboBox_title = new JComboBoxWithPopup();\r
+ jComboBox_title.addPopupWidth(150);\r
+ jComboBox_title.setEditable(true);\r
+ \r
+ jComboBox_title.addItemListener(il_titleEntered);\r
+ }\r
+ return jComboBox_title;\r
+ }\r
+ \r
+ /**\r
+ * EpgDataCap_BonプラグインのCHコードとを利用してテレビ王国から番組IDを取得します\r
+ * @since 3.14.5β\r
+ */\r
+ private JButton getJButton_getEventId(String s) {\r
+ if (jButton_getEventId == null) {\r
+ jButton_getEventId = new JButton(s);\r
+ \r
+ jButton_getEventId.addActionListener(al_getEventId);\r
+ }\r
+ return jButton_getEventId;\r
+ }\r
+ \r
+ private JTXTLabel getJLabel_eventId(String s) {\r
+ if ( jLabel_eventId == null ) {\r
+ jLabel_eventId = new JTXTLabel();\r
+ jLabel_eventId.setHorizontalAlignment(JLabel.CENTER);\r
+ jLabel_eventId.setForeground(Color.BLUE);\r
+ \r
+ jLabel_eventId.setBorder(new LineBorder(Color.LIGHT_GRAY));\r
+ }\r
+ return jLabel_eventId;\r
+ }\r
+ \r
+ private JButton getJButton_addDate(String s) {\r
+ if (jButton_addDate == null) {\r
+ jButton_addDate = new JButton(s);\r
+ \r
+ jButton_addDate.addActionListener(al_addDate);\r
+ }\r
+ return jButton_addDate;\r
+ }\r
+\r
+ private JComboBox getJComboBox_ch() {\r
+ if (jComboBox_ch== null) {\r
+ jComboBox_ch = new JWideComboBox();\r
+ jComboBox_ch.addPopupWidth(150);\r
+ }\r
+ return jComboBox_ch;\r
+ }\r
+ \r
+ // 開始時刻\r
+ private JComboBox getJTextField_ahh() {\r
+ if (jComboBox_ahh == null) {\r
+ jComboBox_ahh = new JComboBoxWithPopup();\r
+ jComboBox_ahh.addPopupWidth(HOUR_WIDTH);\r
+ for ( int h=0; h<24; h++ ) {\r
+ jComboBox_ahh.addItem(String.format("%02d", h));\r
+ }\r
+ \r
+ jComboBox_ahh.addItemListener(il_timemod);\r
+ }\r
+ return jComboBox_ahh;\r
+ }\r
+ private JComboBox getJTextField_amm() {\r
+ if (jComboBox_amm == null) {\r
+ jComboBox_amm = new JComboBoxWithPopup();\r
+ jComboBox_amm.addPopupWidth(HOUR_WIDTH);\r
+ for ( int m=0; m<60; m++ ) {\r
+ jComboBox_amm.addItem(String.format("%02d", m));\r
+ }\r
+ \r
+ jComboBox_amm.addItemListener(il_timemod);\r
+ }\r
+ return jComboBox_amm;\r
+ }\r
+ private JLabel getJLabel_asep(String s)\r
+ {\r
+ if (jLabel_asep == null) {\r
+ jLabel_asep = new JLabel(s,JLabel.CENTER);\r
+ }\r
+ return(jLabel_asep);\r
+ }\r
+ // 開始時刻上げ下げ\r
+ private JButton getJButton_amm_up() {\r
+ if (jButton_amm_up == null) {\r
+ jButton_amm_up = new JButton();\r
+ //\r
+ jButton_amm_up.addActionListener(al_upAmm);\r
+ }\r
+ return jButton_amm_up;\r
+ }\r
+ private JButton getJButton_amm_down() {\r
+ if (jButton_amm_down == null) {\r
+ jButton_amm_down = new JButton();\r
+ //\r
+ jButton_amm_down.addActionListener(al_downAmm);\r
+ }\r
+ return jButton_amm_down;\r
+ }\r
+ \r
+ //\r
+ private JComboBox getJTextField_zhh() {\r
+ if (jComboBox_zhh == null) {\r
+ jComboBox_zhh = new JComboBoxWithPopup();\r
+ jComboBox_zhh.addPopupWidth(HOUR_WIDTH);\r
+ for ( int h=0; h<24; h++ ) {\r
+ jComboBox_zhh.addItem(String.format("%02d", h));\r
+ }\r
+ \r
+ jComboBox_zhh.addItemListener(il_timemod);\r
+ }\r
+ return jComboBox_zhh;\r
+ }\r
+ private JComboBox getJTextField_zmm() {\r
+ if (jComboBox_zmm == null) {\r
+ jComboBox_zmm = new JComboBoxWithPopup();\r
+ jComboBox_zmm.addPopupWidth(HOUR_WIDTH);\r
+ for ( int m=0; m<60; m++ ) {\r
+ jComboBox_zmm.addItem(String.format("%02d", m));\r
+ }\r
+ \r
+ jComboBox_zmm.addItemListener(il_timemod);\r
+ }\r
+ return jComboBox_zmm;\r
+ }\r
+ private JLabel getJLabel_zsep(String s)\r
+ {\r
+ if (jLabel_zsep == null) {\r
+ jLabel_zsep = new JLabel(s,JLabel.CENTER);\r
+ }\r
+ return(jLabel_zsep);\r
+ }\r
+ // 終了時刻上げ下げ\r
+ private JButton getJButton_zmm_up() {\r
+ if (jButton_zmm_up == null) {\r
+ jButton_zmm_up = new JButton();\r
+ //\r
+ jButton_zmm_up.addActionListener(al_upZmm);\r
+ }\r
+ return jButton_zmm_up;\r
+ }\r
+ private JButton getJButton_zmm_down() {\r
+ if (jButton_zmm_down == null) {\r
+ jButton_zmm_down = new JButton();\r
+ //\r
+ jButton_zmm_down.addActionListener(al_downZmm);\r
+ }\r
+ return jButton_zmm_down;\r
+ }\r
+ \r
+ private JButton getJButton_record(String s) {\r
+ if (jButton_record == null) {\r
+ jButton_record = new JButton(s);\r
+ jButton_record.setForeground(Color.RED);\r
+ jButton_record.addActionListener(al_doRecord);\r
+ }\r
+ return jButton_record;\r
+ }\r
+ \r
+ private JButton getJButton_update(String s) {\r
+ if (jButton_update == null) {\r
+ jButton_update = new JButton();\r
+ jButton_update.setText(s);\r
+\r
+ jButton_update.addActionListener(al_doUpdate);\r
+ }\r
+ \r
+ return jButton_update;\r
+ }\r
+\r
+ private JButton getJButton_cancel(String s) {\r
+ if (jButton_cancel == null) {\r
+ jButton_cancel = new JButton(s);\r
+ jButton_cancel.addActionListener(al_doCancel);\r
+ }\r
+ return jButton_cancel;\r
+ }\r
+ \r
+}\r