3 import java.awt.Color;
\r
4 import java.awt.Dimension;
\r
5 import java.awt.ItemSelectable;
\r
6 import java.awt.event.ActionEvent;
\r
7 import java.awt.event.ActionListener;
\r
8 import java.awt.event.ItemEvent;
\r
9 import java.awt.event.ItemListener;
\r
10 import java.util.ArrayList;
\r
12 import javax.swing.JButton;
\r
13 import javax.swing.JLabel;
\r
14 import javax.swing.JPanel;
\r
15 import javax.swing.SpringLayout;
\r
16 import javax.swing.border.LineBorder;
\r
18 import tainavi.TVProgram.ProgGenre;
\r
19 import tainavi.TVProgram.ProgSubgenre;
\r
23 * 予約ダイアログを目的ごとに3ブロックにわけたうちの「録画設定」部分のコンポーネント
\r
26 public class RecSettingEditorPanel extends JPanel {
\r
28 private static final long serialVersionUID = 1L;
\r
30 public void setDebug(boolean b) { debug = b; }
\r
31 private static boolean debug = false;
\r
33 /*******************************************************************************
\r
35 ******************************************************************************/
\r
37 private static final String ITEM_YES = "する";
\r
38 private static final String ITEM_NO = "しない";
\r
40 private static final int PARTS_HEIGHT = 25;
\r
41 private static final int SEP_WIDTH = 10;
\r
42 private static final int SEP_WIDTH_NARROW = 5;
\r
43 private static final int SEP_HEIGHT = 10;
\r
44 private static final int SEP_HEIGHT_NALLOW = 5;
\r
46 private static final int LABEL_WIDTH = 150;
\r
47 private static final int BUTTON_WIDTH = 75;
\r
49 private static final int COMBO_WIDTH = 115;
\r
50 private static final int COMBO_WIDTH_WIDE = 155;
\r
51 private static final int COMBO_HEIGHT = 43;
\r
53 private static final int RECORDER_WIDTH = COMBO_WIDTH_WIDE*2+SEP_WIDTH_NARROW;
\r
54 private static final int ENCODER_WIDTH = COMBO_WIDTH*2+SEP_WIDTH_NARROW;
\r
56 private static final String TEXT_SAVEDEFAULT = "<HTML>録画設定を開いた時の枠内のデフォルト値として<BR>現在の値を使用するようにします。<BR><FONT COLOR=#FF0000>※ジャンル別AV設定があればそちらが優先されます。</FONT></HTML>";
\r
60 private static final String MSGID = "[録画設定編集] ";
\r
61 private static final String ERRID = "[ERROR]"+MSGID;
\r
62 private static final String DBGID = "[DEBUG]"+MSGID;
\r
64 /*******************************************************************************
\r
66 ******************************************************************************/
\r
68 private JComboBoxPanel jCBXPanel_recorder = null;
\r
69 private JComboBoxPanel jCBXPanel_encoder = null;
\r
70 private JLabel jLabel_encoderemptywarn = null;
\r
72 private JComboBoxPanel jCBXPanel_genre = null;
\r
73 private JComboBoxPanel jCBXPanel_subgenre = null;
\r
74 private JComboBoxPanel jCBXPanel_videorate = null;
\r
75 private JComboBoxPanel jCBXPanel_audiorate = null;
\r
76 private JComboBoxPanel jCBXPanel_folder = null;
\r
77 private JComboBoxPanel jCBXPanel_dvdcompat = null;
\r
78 private JComboBoxPanel jCBXPanel_device = null;
\r
79 private JComboBoxPanel jCBXPanel_aspect = null;
\r
80 private JComboBoxPanel jCBXPanel_bvperf = null;
\r
81 private JComboBoxPanel jCBXPanel_lvoice = null;
\r
82 private JComboBoxPanel jCBXPanel_autodel = null;
\r
83 private JComboBoxPanel jCBXPanel_pursues = null;
\r
84 private JComboBoxPanel jCBXPanel_xChapter = null;
\r
85 private JComboBoxPanel jCBXPanel_msChapter = null;
\r
86 private JComboBoxPanel jCBXPanel_mvChapter = null;
\r
88 private JLabel jLabel_rectype = null;
\r
89 private JButton jButton_load = null;
\r
90 private JButton jButton_save = null;
\r
91 private JButton jButton_savedefault = null;
\r
93 private JCheckBoxPanel jCheckBox_Exec = null;
\r
96 private RecSettingSelectable recsetsel = null;
\r
99 /*******************************************************************************
\r
101 ******************************************************************************/
\r
103 public RecSettingEditorPanel() {
\r
106 setBorder(new LineBorder(Color.BLACK, 1));
\r
110 // 外部要因に左右されないアイテム群の設定
\r
114 jCBXPanel_genre.addItemListener(f_il_resetSubgenreItems);
\r
116 jButton_load.addActionListener(f_al_loadAction);
\r
117 jButton_save.addActionListener(f_al_saveAction);
\r
118 jButton_savedefault.addActionListener(f_al_saveDefaultAction);
\r
119 jCBXPanel_audiorate.addItemListener(f_il_arateChanged);
\r
122 setEnabledListenerAll(true);
\r
125 private void addComponents() {
\r
127 setLayout(new SpringLayout());
\r
130 int x = SEP_WIDTH_NARROW;
\r
132 CommonSwingUtils.putComponentOn(this, jCBXPanel_recorder = new JComboBoxPanel("",RECORDER_WIDTH,RECORDER_WIDTH), RECORDER_WIDTH+5, COMBO_HEIGHT+SEP_HEIGHT, x, y);
\r
133 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
134 CommonSwingUtils.putComponentOn(this, jLabel_encoderemptywarn = new JLabel(""), LABEL_WIDTH, PARTS_HEIGHT, x+=ENCODER_WIDTH+5+SEP_WIDTH+5, y+PARTS_HEIGHT);
\r
136 jCBXPanel_recorder.getJComboBox().setForeground(Color.BLUE);
\r
137 jCBXPanel_encoder.getJComboBox().setForeground(Color.BLUE);
\r
139 // ポップアップした時に追加される幅
\r
140 jCBXPanel_recorder.addPopupWidth(100);
\r
141 jCBXPanel_encoder.addPopupWidth(100);
\r
143 y += (COMBO_HEIGHT+SEP_HEIGHT)+SEP_HEIGHT;
\r
144 x = SEP_WIDTH_NARROW;
\r
145 CommonSwingUtils.putComponentOn(this, jCBXPanel_genre = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);
\r
146 CommonSwingUtils.putComponentOn(this, jCBXPanel_subgenre = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);
\r
147 CommonSwingUtils.putComponentOn(this, jCBXPanel_autodel = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH)*2, y);
\r
148 CommonSwingUtils.putComponentOn(this, jCBXPanel_xChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
151 x = SEP_WIDTH_NARROW;
\r
152 CommonSwingUtils.putComponentOn(this, jCBXPanel_videorate = new JComboBoxPanel("",110,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);
\r
153 CommonSwingUtils.putComponentOn(this, jCBXPanel_audiorate = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);
\r
154 CommonSwingUtils.putComponentOn(this, jCBXPanel_bvperf = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
155 CommonSwingUtils.putComponentOn(this, jCBXPanel_lvoice = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
156 CommonSwingUtils.putComponentOn(this, jCBXPanel_msChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
159 x = SEP_WIDTH_NARROW;
\r
160 CommonSwingUtils.putComponentOn(this, jCBXPanel_folder = new JComboBoxPanel("",100,150), COMBO_WIDTH_WIDE, COMBO_HEIGHT, x, y);
\r
161 CommonSwingUtils.putComponentOn(this, jCBXPanel_device = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);
\r
162 CommonSwingUtils.putComponentOn(this, jCBXPanel_dvdcompat = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
163 CommonSwingUtils.putComponentOn(this, jCBXPanel_aspect = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
164 CommonSwingUtils.putComponentOn(this, jCBXPanel_mvChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y);
\r
167 CommonSwingUtils.putComponentOn(this, jCBXPanel_pursues = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x, y);
\r
173 int spy = SEP_HEIGHT_NALLOW+(PARTS_HEIGHT+SEP_HEIGHT_NALLOW)*2;
\r
174 x = SEP_WIDTH_NARROW+(COMBO_WIDTH_WIDE+SEP_WIDTH)+(COMBO_WIDTH+SEP_WIDTH)*4+SEP_WIDTH;
\r
176 CommonSwingUtils.putComponentOn(this, jLabel_rectype = new JLabel("ジャンル別の"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);
\r
178 spy+=PARTS_HEIGHT-5;
\r
180 CommonSwingUtils.putComponentOn(this, new JLabel("録画設定の選択"), LABEL_WIDTH, PARTS_HEIGHT, x, spy);
\r
181 CommonSwingUtils.putComponentOn(this, jButton_load = new JButton("開く"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);
\r
182 CommonSwingUtils.putComponentOn(this, jButton_save = new JButton("保存"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=PARTS_HEIGHT);
\r
183 CommonSwingUtils.putComponentOn(this, jButton_savedefault = new JButton("既定化"), BUTTON_WIDTH, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=(PARTS_HEIGHT+SEP_HEIGHT));
\r
185 jButton_savedefault.setToolTipText(TEXT_SAVEDEFAULT);
\r
187 CommonSwingUtils.putComponentOn(this, jCheckBox_Exec = new JCheckBoxPanel("予約実行",75,true), 75, PARTS_HEIGHT, x+SEP_WIDTH_NARROW, spy+=(PARTS_HEIGHT+SEP_HEIGHT));
\r
188 setExecValue(true);
\r
191 x+=BUTTON_WIDTH+SEP_WIDTH_NARROW*2;
\r
193 Dimension d = new Dimension(x,y);
\r
194 setPreferredSize(d);
\r
197 public void setRecSettingSelector(RecSettingSelectable o) {
\r
202 /*******************************************************************************
\r
204 ******************************************************************************/
\r
206 /***************************************
\r
208 **************************************/
\r
211 * レコーダが選択されたら各コンポーネントラベルを設定する
\r
214 public void setLabels(HDDRecorder recorder) {
\r
217 setLabel(jCBXPanel_recorder, null, "レコーダ");
\r
218 setLabel(jCBXPanel_encoder, null, "エンコーダ");
\r
219 setLabel(jCBXPanel_genre, null, "ジャンル");
\r
220 setLabel(jCBXPanel_subgenre, null, "サブジャンル");
\r
221 setLabel(jCBXPanel_pursues, null, "番組追従");
\r
224 setLabel(jCBXPanel_videorate, recorder.getLabel_Videorate(), "画質");
\r
225 setLabel(jCBXPanel_audiorate, recorder.getLabel_Audiorate(), "音質");
\r
227 setLabel(jCBXPanel_folder, recorder.getLabel_Folder(), "記録先フォルダ");
\r
228 setLabel(jCBXPanel_device, recorder.getLabel_Device(), "記録先デバイス");
\r
230 setLabel(jCBXPanel_bvperf, recorder.getLabel_BVperf(), "録画優先度"); // "高レート節約"?
\r
231 setLabel(jCBXPanel_dvdcompat, recorder.getLabel_DVDCompat(), "BD/DVD互換モード");
\r
233 setLabel(jCBXPanel_autodel, recorder.getLabel_Autodel(), "自動削除");
\r
234 setLabel(jCBXPanel_lvoice, recorder.getLabel_LVoice(), "ライン音声選択");
\r
235 setLabel(jCBXPanel_aspect, recorder.getLabel_Aspect(), "録画のりしろ"); // "DVD記録時画面比"?
\r
237 setLabel(jCBXPanel_msChapter, recorder.getLabel_MsChapter(), "マジックチャプタ(シーン)"); // "DVD/シーンチャプタ分割"?
\r
238 setLabel(jCBXPanel_mvChapter, recorder.getLabel_MvChapter(), "マジックチャプタ(本編)"); // "音多/本編チャプタ分割"?
\r
239 setLabel(jCBXPanel_xChapter, recorder.getLabel_XChapter(), "無音部分チャプタ分割");
\r
243 * ジャンル別AV設定か、CH別AV設定かを選ぶ
\r
245 public void setAVCHSetting(boolean enabled) {
\r
246 jLabel_rectype.setText(enabled ? "放送局別の" : "ジャンル別の");
\r
249 /***************************************
\r
251 **************************************/
\r
255 * @see #setFlexItems(HDDRecorder, String)
\r
257 public void setFixedItems(HDDRecorderList recorders) {
\r
259 setEnabledListenerAll(false); // リスナー停止
\r
261 setRecorderItems(recorders);
\r
263 setEnabledListenerAll(true); // リスナー再開
\r
268 * @see #setFixedItems(HDDRecorderList)
\r
270 private void setRecorderItems(HDDRecorderList recorders) {
\r
271 String selected = (String) jCBXPanel_recorder.getSelectedItem();
\r
272 ArrayList<String> items = new ArrayList<String>();
\r
273 for ( HDDRecorder rec : recorders ) {
\r
274 if ( rec.isBackgroundOnly() ) {
\r
275 continue; // Googleカレンダープラグインとかははずす
\r
277 items.add(rec.Myself());
\r
280 setComboItems(jCBXPanel_recorder, items);
\r
282 if ( selected != null ) {
\r
284 jCBXPanel_recorder.setSelectedItem(selected);
\r
290 * @see #setFixedItems(HDDRecorderList)
\r
292 private void setGenreItems() {
\r
293 ArrayList<String> items = new ArrayList<String>();
\r
294 for ( ProgGenre g : ProgGenre.values() ) {
\r
295 items.add(g.toString());
\r
298 setComboItems(jCBXPanel_genre, items);
\r
302 /***************************************
\r
304 **************************************/
\r
307 * レコーダが選択されたらそれにあわせて各コンポーネントアイテムを設定する
\r
309 public void setFlexItems(HDDRecorder recorder, String webChName) {
\r
311 setEnabledListenerAll(false); // リスナー停止
\r
314 setComboItems(jCBXPanel_encoder, recorder.getFilteredEncoders(webChName));
\r
317 setComboItems(jCBXPanel_videorate, recorder.getVideoRateList());
\r
318 setComboItems(jCBXPanel_audiorate, recorder.getAudioRateList());
\r
319 setComboItems(jCBXPanel_folder, recorder.getFolderList());
\r
321 setComboItems(jCBXPanel_device, recorder.getDeviceList());
\r
322 setComboItems(jCBXPanel_bvperf, recorder.getBVperf());
\r
323 setComboItems(jCBXPanel_dvdcompat, recorder.getDVDCompatList());
\r
325 setComboItems(jCBXPanel_autodel, recorder.getAutodel());
\r
326 setComboItems(jCBXPanel_lvoice, recorder.getLVoice());
\r
327 setComboItems(jCBXPanel_aspect, recorder.getAspect());
\r
329 setComboItems(jCBXPanel_msChapter, recorder.getMsChapter());
\r
330 setComboItems(jCBXPanel_mvChapter, recorder.getMvChapter());
\r
331 setComboItems(jCBXPanel_xChapter, recorder.getXChapter());
\r
333 setComboItems(jCBXPanel_pursues, null);
\r
335 setEnabledListenerAll(true); // リスナー再開
\r
339 * ジャンルが選択されたらそれにあわせてサブジャンルアイテムを設定する
\r
340 * @see #setGenreItems()
\r
342 private void setSubgenreItems(ProgGenre genre) {
\r
343 ArrayList<String> items = new ArrayList<String>();
\r
344 for ( ProgSubgenre sg : ProgSubgenre.values(genre) ) {
\r
345 items.add(sg.toString());
\r
348 setComboItems(jCBXPanel_subgenre, items);
\r
352 * 優先的に使用するチューナーを前に持ってくる
\r
354 public void sortEncoderItems(ArrayList<TextValueSet> preferred) {
\r
356 ArrayList<String> tmpList = new ArrayList<String>();
\r
357 for ( int i=0; i<jCBXPanel_encoder.getItemCount(); i++ ) {
\r
358 tmpList.add((String) jCBXPanel_encoder.getItemAt(i));
\r
361 ArrayList<String> items = new ArrayList<String>();
\r
362 for ( String enc : tmpList ) {
\r
363 for ( TextValueSet tv : preferred ) {
\r
364 if ( tv.getText().equals(enc) ) {
\r
371 for ( String enc : items ) {
\r
372 tmpList.remove(enc);
\r
375 for ( String enc : tmpList ) {
\r
379 setComboItems(jCBXPanel_encoder, items);
\r
382 /*******************************************************************************
\r
384 ******************************************************************************/
\r
387 * コンボボックスのアイテム登録を行う
\r
389 private <T> int setComboItems(JComboBoxPanel combo, ArrayList<T> items) {
\r
391 combo.removeAllItems();
\r
393 if ( items == null ) {
\r
394 // ここにくるのは番組追従のみかな?
\r
395 combo.addItem(ITEM_YES);
\r
396 combo.addItem(ITEM_NO);
\r
397 combo.setEnabled(true);
\r
398 return combo.getItemCount();
\r
401 if ( items.size() == 0 ) {
\r
402 combo.setEnabled(false);
\r
407 for ( T enc : items ) {
\r
408 if ( enc.getClass() == TextValueSet.class ) {
\r
409 TextValueSet t = (TextValueSet) enc;
\r
410 combo.addItem(t.getText());
\r
412 if (t.getDefval()) combo.setSelectedIndex(combo.getItemCount()-1); // デフォルト値があるならば
\r
414 else if ( enc.getClass() == String.class ) {
\r
416 combo.addItem((String) enc);
\r
419 combo.setEnabled(combo.getItemCount() > 1);
\r
420 return combo.getItemCount();
\r
423 private void setLabel(JComboBoxPanel combo, String overrideLabel, String defaultLabel) {
\r
424 combo.setText((overrideLabel!=null)?overrideLabel:defaultLabel);
\r
427 /*******************************************************************************
\r
429 ******************************************************************************/
\r
431 /***************************************
\r
433 **************************************/
\r
438 public void setSelectedValues(ProgDetailList tvd, ReserveList r) {
\r
440 setEnabledListenerAll(false);
\r
442 // サブジャンルアイテム群はジャンル決定後に埋まる
\r
443 setSelectedGenreValues((tvd.genre!=null?tvd.genre.toString():null), (tvd.subgenre!=null?tvd.subgenre.toString():null));
\r
446 setSelectedEncoderValue(r.getTuner()); // encがnullかどうかはメソッドの中で確認するよ
\r
448 // 番組追従(これは予約種別[arate]より先に設定しておかないといけない)
\r
449 setSelectedValue(jCBXPanel_pursues, r.getPursues() ? ITEM_YES : ITEM_NO);
\r
452 setSelectedValue(jCBXPanel_videorate, r.getRec_mode());
\r
453 setSelectedValue(jCBXPanel_audiorate, r.getRec_audio());
\r
454 setSelectedValue(jCBXPanel_folder, r.getRec_folder());
\r
456 setSelectedValue(jCBXPanel_dvdcompat, r.getRec_dvdcompat());
\r
457 setSelectedValue(jCBXPanel_device, r.getRec_device());
\r
460 setSelectedValue(jCBXPanel_xChapter, r.getRec_xchapter());
\r
461 setSelectedValue(jCBXPanel_msChapter, r.getRec_mschapter());
\r
462 setSelectedValue(jCBXPanel_mvChapter, r.getRec_mvchapter());
\r
465 setSelectedValue(jCBXPanel_aspect, r.getRec_aspect());
\r
466 setSelectedValue(jCBXPanel_bvperf, r.getRec_bvperf());
\r
467 setSelectedValue(jCBXPanel_lvoice, r.getRec_lvoice());
\r
468 setSelectedValue(jCBXPanel_autodel, r.getRec_autodel());
\r
471 setExecValue(r.getExec());
\r
473 setEnabledListenerAll(true);
\r
479 public void setSelectedValues(ReserveList r) {
\r
481 setEnabledListenerAll(false);
\r
483 // サブジャンルアイテム群はジャンル決定後に埋まる
\r
484 setSelectedGenreValues(r.getRec_genre(), r.getRec_genre());
\r
487 setSelectedValue(jCBXPanel_encoder, r.getTuner());
\r
489 // 番組追従(これは予約種別[arate]より先に設定しておかないといけない)
\r
490 setSelectedValue(jCBXPanel_pursues, r.getPursues() ? ITEM_YES : ITEM_NO);
\r
493 setSelectedValue(jCBXPanel_videorate, r.getRec_mode());
\r
494 setSelectedValue(jCBXPanel_audiorate, r.getRec_audio());
\r
495 setSelectedValue(jCBXPanel_folder, r.getRec_folder());
\r
496 setSelectedValue(jCBXPanel_subgenre, r.getRec_subgenre());
\r
497 setSelectedValue(jCBXPanel_dvdcompat, r.getRec_dvdcompat());
\r
498 setSelectedValue(jCBXPanel_device, r.getRec_device());
\r
501 setSelectedValue(jCBXPanel_xChapter, r.getRec_xchapter());
\r
502 setSelectedValue(jCBXPanel_msChapter, r.getRec_mschapter());
\r
503 setSelectedValue(jCBXPanel_mvChapter, r.getRec_mvchapter());
\r
506 setSelectedValue(jCBXPanel_aspect, r.getRec_aspect());
\r
507 setSelectedValue(jCBXPanel_bvperf, r.getRec_bvperf());
\r
508 setSelectedValue(jCBXPanel_lvoice, r.getRec_lvoice());
\r
509 setSelectedValue(jCBXPanel_autodel, r.getRec_autodel());
\r
512 setExecValue(r.getExec());
\r
514 setEnabledListenerAll(true);
\r
518 * ジャンル別AV設定によるアイテム選択
\r
520 public void setSelectedValues(AVs avs) {
\r
522 setEnabledListenerAll(false);
\r
525 setSelectedValue(jCBXPanel_videorate, avs.getVideorate());
\r
526 setSelectedValue(jCBXPanel_audiorate, avs.getAudiorate());
\r
527 setSelectedValue(jCBXPanel_folder, avs.getFolder());
\r
529 setSelectedValue(jCBXPanel_dvdcompat, avs.getDVDCompat());
\r
530 setSelectedValue(jCBXPanel_device, avs.getDevice());
\r
533 setSelectedValue(jCBXPanel_xChapter, avs.getXChapter());
\r
534 setSelectedValue(jCBXPanel_msChapter, avs.getMsChapter());
\r
535 setSelectedValue(jCBXPanel_mvChapter, avs.getMvChapter());
\r
538 setSelectedValue(jCBXPanel_aspect, avs.getAspect());
\r
539 setSelectedValue(jCBXPanel_bvperf, avs.getBvperf());
\r
540 setSelectedValue(jCBXPanel_lvoice, avs.getLvoice());
\r
541 setSelectedValue(jCBXPanel_autodel, avs.getAutodel());
\r
543 setEnabledListenerAll(true);
\r
546 /***************************************
\r
548 **************************************/
\r
553 public void setExecValue(boolean b) {
\r
554 jCheckBox_Exec.setSelected(b);
\r
555 jCheckBox_Exec.setForeground(b ? Color.BLACK : Color.RED);
\r
559 * レコーダのアイテム選択(中から呼んじゃだめだよ)
\r
560 * <P>これを呼び出した場合、レコーダ選択イベントは起きないので選択結果は呼び出し元で保存しておく必要がある
\r
561 * <P>これは他のコンポーネントがトリガーとなって起きるイベントから呼び出されるのでリスナーは動かしておかないといけない
\r
563 public String setSelectedRecorderValue(String myself) {
\r
564 return setSelectedValue(jCBXPanel_recorder, myself);
\r
570 public String setSelectedEncoderValue(String enc) {
\r
572 if ( enc == null ) {
\r
573 jCBXPanel_encoder.setSelectedIndex(0);
\r
574 jLabel_encoderemptywarn.setText("空きエンコーダ検索無効");
\r
575 jLabel_encoderemptywarn.setForeground(Color.CYAN);
\r
577 else if ( enc.length() == 0 ) {
\r
578 jCBXPanel_encoder.setSelectedIndex(0);
\r
579 jLabel_encoderemptywarn.setText("空きエンコーダ不足");
\r
580 jLabel_encoderemptywarn.setForeground(Color.RED);
\r
583 jCBXPanel_encoder.setSelectedItem(enc);
\r
584 jLabel_encoderemptywarn.setText("空きエンコーダあり");
\r
585 jLabel_encoderemptywarn.setForeground(Color.BLUE);
\r
588 return (String) jCBXPanel_encoder.getSelectedItem();
\r
592 * Vrateのアイテム選択(中から呼んじゃだめだよ)
\r
594 public String setSelectedVrateValue(String vrate) {
\r
596 if ( vrate == null ) {
\r
600 return setSelectedValue(jCBXPanel_videorate, vrate);
\r
606 private String setSelectedGenreValues(String genre, String subgenre) {
\r
608 if ( genre == null || genre.length() == 0 ) {
\r
609 genre = ProgGenre.NOGENRE.toString();
\r
611 jCBXPanel_genre.setSelectedItem(genre);
\r
613 if ( subgenre == null || subgenre.length() == 0 ) {
\r
614 jCBXPanel_subgenre.setSelectedIndex(0);
\r
617 jCBXPanel_subgenre.setSelectedItem(subgenre);
\r
620 return (String) jCBXPanel_genre.getSelectedItem();
\r
626 private String setSelectedValue(JComboBoxPanel comp, String value) {
\r
628 if ( value != null ) {
\r
629 comp.setSelectedItem(value);
\r
631 else if ( comp.getItemCount() > 0 ){
\r
632 comp.setSelectedIndex(0);
\r
635 return (String) comp.getSelectedItem();
\r
638 /*******************************************************************************
\r
640 ******************************************************************************/
\r
642 /***************************************
\r
644 **************************************/
\r
649 public ReserveList getSelectedValues(ReserveList r) {
\r
651 r.setTuner((String) jCBXPanel_encoder.getSelectedItem());
\r
653 r.setRec_mode((String) jCBXPanel_videorate.getSelectedItem());
\r
654 r.setRec_audio((String) jCBXPanel_audiorate.getSelectedItem());
\r
655 r.setRec_folder((String) jCBXPanel_folder.getSelectedItem());
\r
656 r.setRec_genre((String) jCBXPanel_genre.getSelectedItem());
\r
657 r.setRec_subgenre((String) jCBXPanel_subgenre.getSelectedItem());
\r
658 r.setRec_dvdcompat((String) jCBXPanel_dvdcompat.getSelectedItem());
\r
659 r.setRec_device((String) jCBXPanel_device.getSelectedItem());
\r
662 r.setRec_xchapter((String) jCBXPanel_xChapter.getSelectedItem());
\r
663 r.setRec_mschapter((String) jCBXPanel_msChapter.getSelectedItem());
\r
664 r.setRec_mvchapter((String) jCBXPanel_mvChapter.getSelectedItem());
\r
667 r.setRec_aspect((String) jCBXPanel_aspect.getSelectedItem());
\r
668 r.setRec_bvperf((String) jCBXPanel_bvperf.getSelectedItem());
\r
669 r.setRec_lvoice((String) jCBXPanel_lvoice.getSelectedItem());
\r
670 r.setRec_autodel((String) jCBXPanel_autodel.getSelectedItem());
\r
673 r.setPursues(ITEM_YES == jCBXPanel_pursues.getSelectedItem());
\r
676 r.setExec(jCheckBox_Exec.isSelected());
\r
681 public ReserveList getSelectedValues() {
\r
682 return getSelectedValues(new ReserveList());
\r
686 * 選択値をジャンル別録画設定情報に代入する
\r
688 public AVs getSelectedSetting(AVs c) {
\r
690 c.setGenre((String) jCBXPanel_genre.getSelectedItem());
\r
692 c.setVideorate((String) jCBXPanel_videorate.getSelectedItem());
\r
693 c.setAudiorate((String) jCBXPanel_audiorate.getSelectedItem());
\r
694 c.setFolder((String) jCBXPanel_folder.getSelectedItem());
\r
695 c.setDVDCompat((String) jCBXPanel_dvdcompat.getSelectedItem());
\r
696 c.setDevice((String) jCBXPanel_device.getSelectedItem());
\r
698 c.setXChapter((String) jCBXPanel_xChapter.getSelectedItem());
\r
699 c.setMsChapter((String) jCBXPanel_msChapter.getSelectedItem());
\r
700 c.setMvChapter((String) jCBXPanel_mvChapter.getSelectedItem());
\r
702 c.setAspect((String) jCBXPanel_aspect.getSelectedItem());
\r
703 c.setBvperf((String) jCBXPanel_bvperf.getSelectedItem());
\r
704 c.setLvoice((String) jCBXPanel_lvoice.getSelectedItem());
\r
705 c.setAutodel((String) jCBXPanel_autodel.getSelectedItem());
\r
707 c.setPursues(ITEM_YES == jCBXPanel_pursues.getSelectedItem());
\r
712 public AVs getSelectedSetting() {
\r
713 return getSelectedSetting(new AVs());
\r
717 /*******************************************************************************
\r
719 ******************************************************************************/
\r
721 /***************************************
\r
723 **************************************/
\r
725 private final ItemListener f_il_resetSubgenreItems = new ItemListener() {
\r
727 public void itemStateChanged(ItemEvent e) {
\r
728 // サブジャンルのアイテムをリセットする
\r
729 setSubgenreItems(ProgGenre.get((String) jCBXPanel_genre.getSelectedItem()));
\r
736 private final ActionListener f_al_loadAction = new ActionListener() {
\r
737 public void actionPerformed(ActionEvent e) {
\r
738 if ( recsetsel != null ) {
\r
739 setEnabledListenerAll(false);
\r
741 recsetsel.doSetAVSettings();
\r
743 setEnabledListenerAll(true);
\r
751 private final ActionListener f_al_saveAction = new ActionListener() {
\r
752 public void actionPerformed(ActionEvent e) {
\r
753 if ( recsetsel != null ) recsetsel.doSaveAVSettings(false);
\r
760 private final ActionListener f_al_saveDefaultAction = new ActionListener() {
\r
761 public void actionPerformed(ActionEvent e) {
\r
762 if ( recsetsel != null ) recsetsel.doSaveAVSettings(true);
\r
767 * EPG予約以外では番組追従が設定できないようにしたいな
\r
769 private final ItemListener f_il_arateChanged = new ItemListener() {
\r
771 public void itemStateChanged(ItemEvent e) {
\r
772 if ( e.getStateChange() != ItemEvent.SELECTED ) {
\r
776 jCBXPanel_msChapter.setLabelForeground(Color.BLACK);
\r
777 jCBXPanel_mvChapter.setLabelForeground(Color.BLACK);
\r
778 jCBXPanel_pursues.setEnabled(true);
\r
780 String pgtype = (String) jCBXPanel_audiorate.getSelectedItem();
\r
781 if ( pgtype == HDDRecorder.ITEM_REC_TYPE_PROG ) {
\r
782 // "プラグラム予約"なら触る必要なし
\r
783 jCBXPanel_pursues.setSelectedItem(ITEM_NO);
\r
784 jCBXPanel_pursues.setEnabled(false);
\r
787 if ( pgtype == HDDRecorder.ITEM_REC_TYPE_EPG ) {
\r
789 if ( Integer.valueOf((String) jCBXPanel_msChapter.getSelectedItem()) <= 0 ) {
\r
790 jCBXPanel_msChapter.setLabelForeground(Color.RED);
\r
793 catch (NumberFormatException ev) {
\r
797 if ( Integer.valueOf((String) jCBXPanel_mvChapter.getSelectedItem()) <= 0 ) {
\r
798 jCBXPanel_mvChapter.setLabelForeground(Color.RED);
\r
801 catch (NumberFormatException ev) {
\r
810 /***************************************
\r
811 * つけたり外したりするリスナーをつけたり外したりするメソッド
\r
812 **************************************/
\r
815 * イベントトリガーでアイテムを操作する際に、さらにイベントをキックされてはたまらないのでリスナーを付けたり外したりする
\r
817 private void setEnabledListenerAll(boolean enabled) {
\r
823 for ( ItemListener il : jCBXPanel_recorder.getJComboBox().getItemListeners() ) {
\r
824 if ( il == il_recorderChanged ) {
\r
825 System.out.println(DBGID+"****** リスナーの重複登録 ******");
\r
826 //CommonUtils.printStackTrace();
\r
832 System.out.println("+++ リスナーの登録 +++");
\r
833 //CommonUtils.printStackTrace();
\r
837 System.out.println("... リスナーの削除 ...");
\r
841 setEnabledItemListener(jCBXPanel_recorder, il_recorderChanged, enabled);
\r
842 setEnabledItemListener(jCBXPanel_encoder, il_encoderChanged, enabled);
\r
843 setEnabledItemListener(jCBXPanel_videorate, il_vrateChanged, enabled);
\r
844 setEnabledItemListener(jCBXPanel_genre, il_genreChanged, enabled);
\r
846 private void setEnabledItemListener(ItemSelectable comp, ItemListener il, boolean b) {
\r
847 comp.removeItemListener(il);
\r
849 comp.addItemListener(il);
\r
853 /***************************************
\r
855 **************************************/
\r
860 private final ItemListener il_recorderChanged = new ItemListener() {
\r
862 public void itemStateChanged(ItemEvent e) {
\r
863 if ( e.getStateChange() != ItemEvent.SELECTED ) {
\r
867 if ( recsetsel != null ) {
\r
868 setEnabledListenerAll(false); // 停止
\r
870 recsetsel.doSelectRecorder((String) jCBXPanel_recorder.getSelectedItem());
\r
872 setEnabledListenerAll(true); // 再開
\r
878 * エンコーダが選択された(ので利用可能な画質を選びなおす)
\r
880 private final ItemListener il_encoderChanged = new ItemListener() {
\r
882 public void itemStateChanged(ItemEvent e) {
\r
883 if ( e.getStateChange() != ItemEvent.SELECTED ) {
\r
887 if ( recsetsel != null ) {
\r
888 setEnabledListenerAll(false); // 停止
\r
890 recsetsel.doSelectEncoder((String) jCBXPanel_encoder.getSelectedItem());
\r
892 setEnabledListenerAll(true); // 再開
\r
899 * 画質が選択された(ので利用可能なエンコーダを選びなおす)
\r
901 private final ItemListener il_vrateChanged = new ItemListener() {
\r
903 public void itemStateChanged(ItemEvent e) {
\r
904 if ( e.getStateChange() != ItemEvent.SELECTED ) {
\r
908 if ( recsetsel != null ) {
\r
909 setEnabledListenerAll(false); // 停止
\r
911 recsetsel.doSelectVrate((String) jCBXPanel_videorate.getSelectedItem());
\r
913 setEnabledListenerAll(true); // 再開
\r
922 private final ItemListener il_genreChanged = new ItemListener() {
\r
924 public void itemStateChanged(ItemEvent e) {
\r
925 if (e.getStateChange() != ItemEvent.SELECTED) {
\r
929 // サブジャンルの選択肢を入れ替える
\r
930 setSubgenreItems(ProgGenre.get((String) jCBXPanel_genre.getSelectedItem()));
\r
933 if ( recsetsel != null ) recsetsel.doSetAVSettings();
\r
937 /*******************************************************************************
\r
939 ******************************************************************************/
\r
941 // あれ?getJXX()が一個もないよ!
\r