3 import java.awt.Dimension;
\r
4 import java.awt.event.ActionEvent;
\r
5 import java.awt.event.ActionListener;
\r
6 import java.awt.event.ItemEvent;
\r
7 import java.awt.event.ItemListener;
\r
8 import java.util.ArrayList;
\r
9 import java.util.regex.Matcher;
\r
10 import java.util.regex.Pattern;
\r
11 import java.util.regex.PatternSyntaxException;
\r
13 import javax.swing.DefaultComboBoxModel;
\r
14 import javax.swing.JButton;
\r
15 import javax.swing.JComboBox;
\r
16 import javax.swing.JDialog;
\r
17 import javax.swing.JLabel;
\r
18 import javax.swing.JOptionPane;
\r
19 import javax.swing.JPanel;
\r
20 import javax.swing.JScrollPane;
\r
21 import javax.swing.JTextField;
\r
22 import javax.swing.ListSelectionModel;
\r
23 import javax.swing.SpringLayout;
\r
24 import javax.swing.SwingConstants;
\r
25 import javax.swing.table.DefaultTableColumnModel;
\r
26 import javax.swing.table.DefaultTableModel;
\r
28 import tainavi.SearchKey.TargetId;
\r
29 import tainavi.TVProgram.ProgGenre;
\r
30 import tainavi.TVProgram.ProgSubgenre;
\r
34 * キーワード検索の設定のクラス(延長警告管理でも流用する)
\r
36 abstract class AbsKeywordDialog extends JDialog {
\r
38 private static final long serialVersionUID = 1L;
\r
40 public void setWindowTitle(String s) { windowTitle = s; }
\r
42 /*******************************************************************************
\r
44 ******************************************************************************/
\r
46 abstract void preview(SearchKey search);
\r
48 /*******************************************************************************
\r
50 ******************************************************************************/
\r
54 private static final int PARTS_HEIGHT = 30;
\r
55 private static final int SEP_WIDTH = 10;
\r
56 private static final int SEP_HEIGHT = 10;
\r
57 private static final int SEP_HEIGHT_NARROW = 3;
\r
59 private static final int LABEL_WIDTH_S = 50;
\r
60 private static final int LABEL_WIDTH_L = 75;
\r
62 private static final int TEXT_WIDTH = 300;
\r
64 private static final int UPDOWN_WIDTH = 50;
\r
65 private static final int BUTTON_WIDTH_S = 75;
\r
66 private static final int BUTTON_WIDTH_L = 100;
\r
68 private static final int TARGET_WIDTH = 175;
\r
69 private static final int REGEX_WIDTH = 300;
\r
71 private static final int CHECKBOX_WIDTH = 200;
\r
72 private static final int CHECKLABEL_WIDTH = CHECKBOX_WIDTH-25;
\r
74 private static final int CONDITION_WIDTH = 220;
\r
76 private static final int SELECTION_WIDTH = 150;
\r
78 private static final int TABLE_WIDTH = REGEX_WIDTH+TARGET_WIDTH*2+SEP_WIDTH*2; // スクロールバー分
\r
79 private static final int TABLEPANE_WIDTH = TABLE_WIDTH+25; // スクロールバー分
\r
80 private static final int TABLE_HEIGHT = 160;
\r
82 private static final int PANEL_WIDTH = TABLEPANE_WIDTH+UPDOWN_WIDTH+SEP_WIDTH*2;
\r
86 private static enum KDColumn {
\r
87 TARGET ("", TARGET_WIDTH+SEP_WIDTH/2),
\r
88 REGEX ("", REGEX_WIDTH+SEP_WIDTH),
\r
89 CONTAIN ("", TARGET_WIDTH+SEP_WIDTH/2)
\r
92 private String name;
\r
93 private int iniWidth;
\r
95 private KDColumn(String name, int iniWidth) {
\r
97 this.iniWidth = iniWidth;
\r
100 public String getName() {
\r
104 public int getIniWidth() {
\r
108 public int getColumn() {
\r
113 /*******************************************************************************
\r
115 ******************************************************************************/
\r
119 private JPanel jPanel = null;
\r
120 private JLabel jLabel_label = null;
\r
121 private JTextField jTextField_label = null;
\r
122 private JButton jButton_label = null;
\r
123 private JButton jButton_cancel = null;
\r
124 private JButton jButton_preview = null;
\r
125 private JComboBox jComboBox_target = null;
\r
126 private JComboBox jComboBox_regex = null;
\r
127 private JComboBox jComboBox_contain = null;
\r
128 private JButton jButton_add = null;
\r
129 private JButton jButton_remove = null;
\r
130 private JComboBox jComboBox_condition = null;
\r
131 private JComboBox jComboBox_infection = null;
\r
132 private JScrollPane jScrollPane_keywords = null;
\r
133 private KDTable jTable_keywords = null;
\r
134 private JLabel jLabel_okiniiri = null;
\r
135 private JComboBox jComboBox_okiniiri = null;
\r
136 private JLabel jLabel_group = null;
\r
137 private JComboBox jComboBox_group = null;
\r
138 private JCheckBoxPanel jCheckBox_caseSensitive = null;
\r
139 private JCheckBoxPanel jCheckBox_showInStandby = null;
\r
140 private JButton jButton_up = null;
\r
141 private JButton jButton_down = null;
\r
145 private String windowTitle = "";
\r
146 private String originalLabel = "";
\r
147 private SearchProgram xKeys = null;
\r
148 private SearchGroupList xGroups = null;
\r
150 private boolean reg = false;
\r
152 private ArrayList<TargetId> target_items = new ArrayList<TargetId>();
\r
153 private ArrayList<String> contain_items = new ArrayList<String>();
\r
154 private ArrayList<String> condition_items = new ArrayList<String>();
\r
155 private ArrayList<String> infection_items = new ArrayList<String>();
\r
156 private ArrayList<String> okiniiri_items = new ArrayList<String>();
\r
157 public void clean_target_items() { target_items.clear(); }
\r
158 public void add_target_item(TargetId ti) { target_items.add(ti); }
\r
159 public void clean_contain_items() { contain_items.clear(); }
\r
160 public void add_contain_item(String s) { contain_items.add(s); }
\r
161 public void clean_condition_items() { condition_items.clear(); }
\r
162 public void add_condition_item(String s) { condition_items.add(s); }
\r
163 public void clean_infection_items() { infection_items.clear(); }
\r
164 public void add_infection_item(String s) { infection_items.add(s); }
\r
165 public void clean_okiniiri_items() { okiniiri_items.clear(); }
\r
166 public void add_okiniiri_item(String s) { okiniiri_items.add(s); }
\r
170 public String getNewLabel() { return jTextField_label.getText(); }
\r
171 public String getNewGroup() { return (String)jComboBox_group.getSelectedItem(); }
\r
173 /*******************************************************************************
\r
175 ******************************************************************************/
\r
177 public AbsKeywordDialog() {
\r
188 this.setModal(true);
\r
189 this.setContentPane(getJPanel());
\r
190 // タイトルバーの高さも考慮する必要がある
\r
191 Dimension d = getJPanel().getPreferredSize();
\r
193 this.setPreferredSize(new Dimension(
\r
194 d.width+(this.getInsets().left+this.getInsets().right),
\r
195 d.height+(this.getInsets().top+this.getInsets().bottom)));
\r
196 this.setResizable(false);
\r
198 this.setTitle(windowTitle);
\r
201 /*******************************************************************************
\r
203 ******************************************************************************/
\r
210 public boolean isRegistered() { return reg; }
\r
214 private void open(String s, SearchProgram sKeys) {
\r
218 jComboBox_target.setSelectedIndex(0);
\r
219 jComboBox_contain.setSelectedIndex(0);
\r
220 jComboBox_condition.setSelectedIndex(0);
\r
221 for (int i=jTable_keywords.getRowCount()-1; i>=0; i--) {
\r
222 jTable_keywords.getRowItemList().remove(i);
\r
225 jTextField_label.setText(s);
\r
226 jTextField_label.setCaretPosition(0);
\r
227 jComboBox_regex.addItem(s);
\r
231 // キーワード検索管理としてのオープン(新規)
\r
232 public void open(String label, SearchKey sK, SearchProgram sKeys, SearchGroupList gList) {
\r
237 jComboBox_target.setSelectedIndex(0);
\r
238 jComboBox_contain.setSelectedIndex(0);
\r
239 jComboBox_condition.setSelectedIndex(0);
\r
240 for (int i=jTable_keywords.getRowCount()-1; i>=0; i--) {
\r
241 jTable_keywords.getRowItemList().remove(i);
\r
244 for (int i=0; i<sK.alTarget.size(); i++) {
\r
246 KDItem data = new KDItem();
\r
247 data.target = sK.alTarget.get(i);
\r
248 data.regex = sK.alKeyword.get(i);
\r
249 data.contain = contain_items.get(Integer.valueOf(sK.alContain.get(i)));
\r
250 data.fireChanged();
\r
251 jTable_keywords.getRowItemList().add(data);
\r
253 jTable_keywords.fireChanged();
\r
255 jTextField_label.setText(label);
\r
256 jTextField_label.setCaretPosition(0);
\r
258 if ( xGroups != null && xGroups.size() != 0 ) {
\r
259 jComboBox_group.setEnabled(true);
\r
260 jComboBox_group.addItem("");
\r
261 for ( SearchGroup gr : xGroups ) {
\r
262 jComboBox_group.addItem(gr.getName());
\r
266 jCheckBox_caseSensitive.setSelected(sK.getCaseSensitive());
\r
267 jCheckBox_showInStandby.setSelected(sK.getShowInStandby());
\r
270 // 延長警告管理としてのオープン(新規)
\r
271 public void open(String title, String center, boolean isInfection, SearchProgram sKeys) {
\r
276 jTextField_label.setText("●"+title);
\r
279 jTextField_label.setText("○"+title);
\r
281 jTextField_label.setCaretPosition(0);
\r
283 jComboBox_regex.addItem("");
\r
284 jComboBox_target.setSelectedIndex(0);
\r
285 jComboBox_contain.setSelectedIndex(0);
\r
286 jComboBox_condition.setSelectedIndex(0);
\r
287 for (int i=jTable_keywords.getRowCount()-1; i>=0; i--) {
\r
288 jTable_keywords.getRowItemList().remove(i);
\r
291 KDItem d1 = new KDItem();
\r
292 d1.target = TargetId.TITLE;
\r
294 d1.contain = (String) jComboBox_contain.getItemAt(0);
\r
296 jTable_keywords.getRowItemList().add(d1);
\r
298 KDItem d2 = new KDItem();
\r
299 d2.target = TargetId.CHANNEL;
\r
301 d2.contain = (String) jComboBox_contain.getItemAt(0);
\r
304 jComboBox_infection.setSelectedItem(infection_items.get(0));
\r
307 jComboBox_infection.setSelectedItem(infection_items.get(1));
\r
309 jTable_keywords.getRowItemList().add(d2);
\r
311 jTable_keywords.fireChanged();
\r
314 // キーワード検索管理としてのオープン(更新)
\r
315 public void reopen(String s, SearchProgram sKeys) {
\r
320 jTextField_label.setText(s);
\r
321 jTextField_label.setCaretPosition(0);
\r
323 jComboBox_regex.addItem("");
\r
324 jComboBox_target.setSelectedIndex(0);
\r
325 jComboBox_contain.setSelectedIndex(0);
\r
326 jComboBox_condition.setSelectedIndex(0);
\r
327 for (int i=jTable_keywords.getRowCount()-1; i>=0; i--) {
\r
328 jTable_keywords.getRowItemList().remove(i);
\r
331 for (SearchKey k : xKeys.getSearchKeys()) {
\r
332 if (k.getLabel().equals(s)) {
\r
333 jComboBox_condition.setSelectedIndex(Integer.valueOf(k.getCondition()));
\r
335 Matcher ma = Pattern.compile("(.*?)\t").matcher(k.getTarget());
\r
336 Matcher mb = Pattern.compile("(.*?)\t").matcher(k.getKeyword());
\r
337 Matcher mc = Pattern.compile("(.*?)\t").matcher(k.getContain());
\r
338 while (ma.find()) {
\r
341 KDItem data = new KDItem();
\r
342 data.target = TargetId.getTargetId(ma.group(1));
\r
343 data.regex = mb.group(1);
\r
344 data.contain = contain_items.get(Integer.valueOf(mc.group(1)));
\r
345 data.fireChanged();
\r
346 jTable_keywords.getRowItemList().add(data);
\r
349 jComboBox_okiniiri.setSelectedItem(k.getOkiniiri());
\r
351 jCheckBox_caseSensitive.setSelected(k.getCaseSensitive());
\r
352 jCheckBox_showInStandby.setSelected(k.getShowInStandby());
\r
356 jTable_keywords.fireChanged();
\r
359 // 延長警告管理としてのオープン(更新)
\r
360 public void reopen(String s, ExtProgram sKeys) {
\r
362 for (SearchKey k : sKeys.getSearchKeys()) {
\r
363 if (k.getLabel().equals(s)) {
\r
364 int idx = Integer.valueOf(k.getInfection());
\r
365 if (jComboBox_infection.getItemCount() >= idx) {
\r
366 jComboBox_infection.setSelectedIndex(idx);
\r
370 reopen(s,(SearchProgram)sKeys);
\r
376 protected SearchKey skCompile() {
\r
378 SearchKey sk = new SearchKey();
\r
383 for (int row=0; row<jTable_keywords.getRowCount(); row++) {
\r
385 KDItem c = jTable_keywords.getRowItemList().get(row);
\r
386 TargetId ti = c.target;
\r
387 tStr += ti.getId()+"\t";
\r
389 if ( ti.getUseRegexpr() ) {
\r
391 Pattern.compile(TraceProgram.replacePop(c.regex));
\r
393 catch (PatternSyntaxException ex) {
\r
394 showExprFmtWarn(c.contain);
\r
398 rStr += c.regex+"\t";
\r
400 for (int i=0; i<contain_items.size(); i++) {
\r
401 if (contain_items.get(i).equals(c.contain)) {
\r
407 sk.setTarget(tStr); // compile後は順番が変わるので残すことにする
\r
408 sk.setKeyword(rStr); // 同上
\r
409 sk.setContain(cStr); // 同上
\r
411 for (int i=0; i<condition_items.size(); i++) {
\r
412 if (condition_items.get(i).equals((String) jComboBox_condition.getSelectedItem())) {
\r
413 sk.setCondition(String.valueOf(i));
\r
417 for (int i=0; i<infection_items.size(); i++) {
\r
418 if (infection_items.get(i).equals((String) jComboBox_infection.getSelectedItem())) {
\r
419 sk.setInfection(String.valueOf(i));
\r
424 sk.setLabel(jTextField_label.getText());
\r
425 sk.setOkiniiri((String) jComboBox_okiniiri.getSelectedItem());
\r
426 sk.setCaseSensitive(jCheckBox_caseSensitive.isSelected());
\r
427 sk.setShowInStandby(jCheckBox_showInStandby.isSelected());
\r
429 new SearchProgram().compile(sk);
\r
435 * 正規表現がおかしかったら警告したい
\r
438 private void showExprFmtWarn(String expr) {
\r
439 JOptionPane.showMessageDialog(this, "正規表現の文法に則っていません: "+expr, "エラー", JOptionPane.ERROR_MESSAGE);
\r
442 /*******************************************************************************
\r
444 ******************************************************************************/
\r
449 private final ActionListener al_save = new ActionListener() {
\r
451 public void actionPerformed(ActionEvent e) {
\r
452 if (jTextField_label.getText().equals("") || jTable_keywords.getRowCount()<=0) {
\r
456 SearchKey sk = skCompile();
\r
462 if (xKeys.replace(originalLabel, sk) == null) {
\r
468 if ( jComboBox_group.getSelectedItem() != null && ! ((String)jComboBox_group.getSelectedItem()).equals("")) {
\r
469 xGroups.add((String)jComboBox_group.getSelectedItem(),sk.getLabel());
\r
484 private final ActionListener al_cancel = new ActionListener() {
\r
486 public void actionPerformed(ActionEvent e) {
\r
494 private final ActionListener al_preview = new ActionListener() {
\r
496 public void actionPerformed(ActionEvent e) {
\r
497 SearchKey sk = skCompile();
\r
498 if (jTable_keywords.getRowCount() > 0 && sk != null) {
\r
505 * 条件選択コンボボックスが選択された
\r
507 private final ItemListener il_targetChanged = new ItemListener() {
\r
509 public void itemStateChanged(ItemEvent e) {
\r
511 if ( e.getStateChange() != ItemEvent.SELECTED ) {
\r
515 TargetId target = (TargetId) jComboBox_target.getSelectedItem();
\r
516 if (target == TargetId.NEW || target == TargetId.LAST || target == TargetId.REPEAT || target == TargetId.FIRST || target == TargetId.REPEAT || target == TargetId.NOSCRUMBLE) {
\r
517 jComboBox_regex.setEnabled(false);
\r
518 jComboBox_regex.setEditable(false);
\r
519 jComboBox_regex.removeAllItems();
\r
520 jComboBox_regex.addItem("");
\r
522 else if (target == TargetId.LENGTH) {
\r
523 jComboBox_regex.removeAllItems();
\r
524 jComboBox_regex.setEnabled(true);
\r
525 jComboBox_regex.setEditable(false);
\r
526 for (int i=1; i <= 120; i++) {
\r
527 jComboBox_regex.addItem(i+" 分以上である");
\r
529 jComboBox_regex.setSelectedIndex(29);
\r
531 else if (target == TargetId.STARTA) {
\r
532 jComboBox_regex.removeAllItems();
\r
533 jComboBox_regex.setEnabled(true);
\r
534 jComboBox_regex.setEditable(false);
\r
535 for (int i=0; i < 24; i++) {
\r
536 jComboBox_regex.addItem(String.format("%02d:00以降である", (i+5)%24));
\r
538 jComboBox_regex.setSelectedIndex(18-5);
\r
540 else if (target == TargetId.STARTZ) {
\r
541 jComboBox_regex.removeAllItems();
\r
542 jComboBox_regex.setEnabled(true);
\r
543 jComboBox_regex.setEditable(false);
\r
544 for (int i=0; i < 24; i++) {
\r
545 jComboBox_regex.addItem(String.format("%02d:00以前である", (i+5)%24));
\r
547 jComboBox_regex.setSelectedIndex(23-5);
\r
549 else if (target == TargetId.GENRE) {
\r
550 jComboBox_regex.removeAllItems();
\r
551 jComboBox_regex.setEnabled(true);
\r
552 jComboBox_regex.setEditable(false);
\r
553 for ( ProgGenre genre : ProgGenre.values()) {
\r
554 jComboBox_regex.addItem(genre.toString());
\r
557 else if (target == TargetId.SUBGENRE) {
\r
558 jComboBox_regex.removeAllItems();
\r
559 jComboBox_regex.setEnabled(true);
\r
560 jComboBox_regex.setEditable(false);
\r
561 for ( ProgSubgenre subgenre : ProgSubgenre.values()) {
\r
562 jComboBox_regex.addItem(subgenre.toString());
\r
566 // 番組名・番組詳細・放送局・開始日時
\r
567 jComboBox_regex.setEnabled(true);
\r
568 jComboBox_regex.setEditable(true);
\r
569 if (jComboBox_regex.getItemCount() > 1) {
\r
570 jComboBox_regex.removeAllItems();
\r
571 jComboBox_regex.addItem("");
\r
580 private final ActionListener al_addTarget = new ActionListener() {
\r
582 public void actionPerformed(ActionEvent e) {
\r
583 TargetId ti = (TargetId) jComboBox_target.getSelectedItem();
\r
584 String re = (String) jComboBox_regex.getSelectedItem();
\r
586 if ( ti.getUseKeyword() && re.length() == 0 ) {
\r
587 // キーワードが必要なのに入力されていなければNG
\r
591 KDItem data = new KDItem();
\r
594 data.contain = (String) jComboBox_contain.getSelectedItem();
\r
595 data.fireChanged();
\r
596 jTable_keywords.getRowItemList().add(data);
\r
597 jTable_keywords.fireChanged();
\r
599 if (jComboBox_regex.getItemCount() <= 1) {
\r
600 jComboBox_regex.removeAllItems();
\r
601 jComboBox_regex.addItem("");
\r
607 * 条件を削除する(コンボボックスに戻す)
\r
609 private final ActionListener al_removeTarget = new ActionListener() {
\r
611 public void actionPerformed(ActionEvent e) {
\r
613 if ((row = jTable_keywords.getSelectedRow()) == -1) {
\r
617 KDItem c = jTable_keywords.getRowItemList().get(row);
\r
618 jComboBox_target.setSelectedItem(c.target);
\r
619 if (jComboBox_target.getSelectedItem() == TargetId.GENRE ||
\r
620 jComboBox_target.getSelectedItem() == TargetId.SUBGENRE ||
\r
621 jComboBox_target.getSelectedItem() == TargetId.LENGTH ||
\r
622 jComboBox_target.getSelectedItem() == TargetId.STARTA ||
\r
623 jComboBox_target.getSelectedItem() == TargetId.STARTZ ) {
\r
624 jComboBox_regex.setSelectedItem(c.regex);
\r
627 jComboBox_regex.removeAllItems();
\r
628 jComboBox_regex.addItem(c.regex);
\r
630 jComboBox_contain.setSelectedItem(c.contain);
\r
632 jTable_keywords.getRowItemList().remove(jTable_keywords.getSelectedRow());
\r
633 jTable_keywords.fireChanged();
\r
640 private final ActionListener al_upTarget = new ActionListener() {
\r
642 public void actionPerformed(ActionEvent e) {
\r
643 int row = jTable_keywords.getSelectedRow();
\r
644 if ( jTable_keywords.getRowItemList().up(row, 1) ) {
\r
645 jTable_keywords.fireChanged();
\r
646 jTable_keywords.setRowSelectionInterval(row-1,row-1);
\r
654 private final ActionListener al_downTarget = new ActionListener() {
\r
656 public void actionPerformed(ActionEvent e) {
\r
657 int row = jTable_keywords.getSelectedRow();
\r
658 if ( jTable_keywords.getRowItemList().down(row, 1) ) {
\r
659 jTable_keywords.fireChanged();
\r
660 jTable_keywords.setRowSelectionInterval(row+1,row+1);
\r
665 /*******************************************************************************
\r
667 ******************************************************************************/
\r
669 private JPanel getJPanel() {
\r
670 if (jPanel == null) {
\r
671 jPanel = new JPanel();
\r
673 jPanel.setLayout(new SpringLayout());
\r
675 int y = SEP_HEIGHT;
\r
679 CommonSwingUtils.putComponentOn(jPanel, getJLabel_label("設定名"), LABEL_WIDTH_S, PARTS_HEIGHT, x, y);
\r
680 CommonSwingUtils.putComponentOn(jPanel, getJTextField_label(), TEXT_WIDTH, PARTS_HEIGHT, x+=LABEL_WIDTH_S, y);
\r
681 CommonSwingUtils.putComponentOn(jPanel, getJButton_label("登録"), BUTTON_WIDTH_S, PARTS_HEIGHT, x+=TEXT_WIDTH+SEP_WIDTH, y);
\r
682 CommonSwingUtils.putComponentOn(jPanel, getJButton_cancel("キャンセル"), BUTTON_WIDTH_S, PARTS_HEIGHT, x+=BUTTON_WIDTH_S+SEP_WIDTH, y);
\r
683 CommonSwingUtils.putComponentOn(jPanel, getJButton_preview("プレビュー"), BUTTON_WIDTH_S, PARTS_HEIGHT, PANEL_WIDTH-BUTTON_WIDTH_S-SEP_WIDTH, y);
\r
685 y += PARTS_HEIGHT+SEP_HEIGHT;
\r
687 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_target(), TARGET_WIDTH, PARTS_HEIGHT, x, y);
\r
688 CommonSwingUtils.putComponentOn(jPanel, getJTextField_regex(), REGEX_WIDTH, PARTS_HEIGHT, x+=TARGET_WIDTH+SEP_WIDTH, y);
\r
689 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_contain(), TARGET_WIDTH, PARTS_HEIGHT, x+=REGEX_WIDTH+SEP_WIDTH, y);
\r
691 y += PARTS_HEIGHT+SEP_HEIGHT_NARROW;
\r
692 x = (TABLE_WIDTH/2-(BUTTON_WIDTH_L+SEP_WIDTH/2))+SEP_WIDTH;
\r
693 CommonSwingUtils.putComponentOn(jPanel, getJButton_add("追加↓"), BUTTON_WIDTH_L, PARTS_HEIGHT, x , y);
\r
694 CommonSwingUtils.putComponentOn(jPanel, getJButton_remove("↑削除"), BUTTON_WIDTH_L, PARTS_HEIGHT, x+=BUTTON_WIDTH_L+SEP_WIDTH, y);
\r
696 CommonSwingUtils.putComponentOn(jPanel, getJCheckBox_caseSensitive("文字列比較は完全一致で",CHECKLABEL_WIDTH,false), CHECKBOX_WIDTH, PARTS_HEIGHT, PANEL_WIDTH-CHECKBOX_WIDTH-SEP_WIDTH, y);
\r
698 y += PARTS_HEIGHT+SEP_HEIGHT_NARROW;
\r
699 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_condition(), CONDITION_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);
\r
700 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_infection(), CONDITION_WIDTH, PARTS_HEIGHT, TABLE_WIDTH-CONDITION_WIDTH+SEP_WIDTH, y);
\r
702 y += PARTS_HEIGHT+SEP_HEIGHT_NARROW;
\r
703 CommonSwingUtils.putComponentOn(jPanel, getJScrollPane_keywords(), TABLEPANE_WIDTH, TABLE_HEIGHT, SEP_WIDTH, y);
\r
704 int yz = y + (TABLE_HEIGHT/2-(PARTS_HEIGHT+SEP_HEIGHT/2));
\r
705 CommonSwingUtils.putComponentOn(jPanel, getJButton_up("↑"), UPDOWN_WIDTH, PARTS_HEIGHT, TABLEPANE_WIDTH+SEP_WIDTH*2, yz);
\r
706 CommonSwingUtils.putComponentOn(jPanel, getJButton_down("↓"), UPDOWN_WIDTH, PARTS_HEIGHT, TABLEPANE_WIDTH+SEP_WIDTH*2, yz+=SEP_HEIGHT+PARTS_HEIGHT);
\r
708 y += TABLE_HEIGHT+SEP_HEIGHT;
\r
710 CommonSwingUtils.putComponentOn(jPanel, getJLabel_okiniiri("お気に入り度"), LABEL_WIDTH_L, PARTS_HEIGHT, x, y);
\r
711 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_okiniiri(), SELECTION_WIDTH, PARTS_HEIGHT, x+=LABEL_WIDTH_L+SEP_WIDTH, y);
\r
712 CommonSwingUtils.putComponentOn(jPanel, getJLabel_group("グループ"), LABEL_WIDTH_L, PARTS_HEIGHT, x+=SELECTION_WIDTH+SEP_WIDTH, y);
\r
713 CommonSwingUtils.putComponentOn(jPanel, getJComboBox_group(), SELECTION_WIDTH, PARTS_HEIGHT, x+=LABEL_WIDTH_L+SEP_WIDTH, y);
\r
715 CommonSwingUtils.putComponentOn(jPanel, getJCheckBox_showInStandby("予約待機に表示する",CHECKLABEL_WIDTH,true), CHECKBOX_WIDTH, PARTS_HEIGHT, PANEL_WIDTH-CHECKBOX_WIDTH-SEP_WIDTH, y);
\r
717 y += PARTS_HEIGHT+SEP_HEIGHT*2;
\r
719 jPanel.setPreferredSize(new Dimension(PANEL_WIDTH, y));
\r
725 private JLabel getJLabel_label(String s) {
\r
726 if (jLabel_label == null) {
\r
727 jLabel_label = new JLabel(s);
\r
729 return(jLabel_label);
\r
733 private JTextField getJTextField_label() {
\r
734 if (jTextField_label == null) {
\r
735 jTextField_label = new JTextFieldWithPopup();
\r
737 return(jTextField_label);
\r
741 private JButton getJButton_label(String s) {
\r
742 if (jButton_label == null) {
\r
743 jButton_label = new JButton();
\r
744 jButton_label.setText(s);
\r
746 jButton_label.addActionListener(al_save);
\r
748 return(jButton_label);
\r
752 private JButton getJButton_cancel(String s) {
\r
753 if (jButton_cancel == null) {
\r
754 jButton_cancel = new JButton();
\r
755 jButton_cancel.setText(s);
\r
757 jButton_cancel.addActionListener(al_cancel);
\r
759 return jButton_cancel;
\r
763 private JButton getJButton_preview(String s) {
\r
764 if (jButton_preview == null) {
\r
765 jButton_preview = new JButton();
\r
766 jButton_preview.setText(s);
\r
768 jButton_preview.addActionListener(al_preview);
\r
770 return jButton_preview;
\r
775 private JComboBox getJComboBox_target() {
\r
776 if (jComboBox_target == null) {
\r
777 jComboBox_target = new JComboBox();
\r
779 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
780 jComboBox_target.setModel(aModel);
\r
781 for (TargetId k : target_items) {
\r
782 aModel.addElement(k);
\r
785 jComboBox_target.addItemListener(il_targetChanged);
\r
787 return(jComboBox_target);
\r
791 private JComboBox getJTextField_regex() {
\r
792 if (jComboBox_regex == null) {
\r
793 jComboBox_regex = new JComboBoxWithPopup();
\r
794 jComboBox_regex.setEditable(true);
\r
796 return(jComboBox_regex);
\r
800 private JComboBox getJComboBox_contain() {
\r
801 if (jComboBox_contain == null) {
\r
802 jComboBox_contain = new JComboBox();
\r
804 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
805 jComboBox_contain.setModel(aModel);
\r
806 for (String k : contain_items) {
\r
807 aModel.addElement(k);
\r
810 return(jComboBox_contain);
\r
814 private JComboBox getJComboBox_condition() {
\r
815 if (jComboBox_condition == null) {
\r
816 jComboBox_condition = new JComboBox();
\r
818 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
819 jComboBox_condition.setModel(aModel);
\r
820 for (String k : condition_items) {
\r
821 aModel.addElement(k);
\r
824 return(jComboBox_condition);
\r
828 private JComboBox getJComboBox_infection() {
\r
829 if (jComboBox_infection == null) {
\r
830 jComboBox_infection = new JComboBox();
\r
832 if (infection_items.size() > 0) {
\r
833 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
834 jComboBox_infection.setModel(aModel);
\r
835 for (String k : infection_items) {
\r
836 aModel.addElement(k);
\r
840 jComboBox_infection.setEnabled(false);
\r
843 return(jComboBox_infection);
\r
847 private JLabel getJLabel_okiniiri(String s) {
\r
848 if (jLabel_okiniiri == null) {
\r
849 jLabel_okiniiri = new JLabel(s,SwingConstants.RIGHT);
\r
851 return(jLabel_okiniiri);
\r
853 private JComboBox getJComboBox_okiniiri() {
\r
854 if (jComboBox_okiniiri == null) {
\r
855 jComboBox_okiniiri = new JComboBox();
\r
857 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
858 jComboBox_okiniiri.setModel(aModel);
\r
859 for (String k : okiniiri_items) {
\r
860 aModel.addElement(k);
\r
863 return(jComboBox_okiniiri);
\r
868 private JLabel getJLabel_group(String s) {
\r
869 if (jLabel_group == null) {
\r
870 jLabel_group = new JLabel(s,SwingConstants.RIGHT);
\r
872 return(jLabel_group);
\r
874 private JComboBox getJComboBox_group() {
\r
875 if (jComboBox_group == null) {
\r
876 jComboBox_group = new JComboBox();
\r
878 jComboBox_group.setEnabled(false);
\r
880 return(jComboBox_group);
\r
884 private JCheckBoxPanel getJCheckBox_caseSensitive(String s,int labelWidth, boolean b) {
\r
885 if (jCheckBox_caseSensitive == null) {
\r
886 jCheckBox_caseSensitive = new JCheckBoxPanel(s,labelWidth,true);
\r
887 jCheckBox_caseSensitive.setSelected(b);
\r
889 return(jCheckBox_caseSensitive);
\r
893 private JCheckBoxPanel getJCheckBox_showInStandby(String s,int labelWidth, boolean b) {
\r
894 if (jCheckBox_showInStandby == null) {
\r
895 jCheckBox_showInStandby = new JCheckBoxPanel(s,labelWidth,true);
\r
896 jCheckBox_showInStandby.setSelected(b);
\r
898 return(jCheckBox_showInStandby);
\r
902 private JButton getJButton_add(String s) {
\r
903 if (jButton_add == null) {
\r
904 jButton_add = new JButton();
\r
905 jButton_add.setText(s);
\r
907 jButton_add.addActionListener(al_addTarget);
\r
909 return(jButton_add);
\r
913 private JButton getJButton_remove(String s) {
\r
914 if (jButton_remove == null) {
\r
915 jButton_remove = new JButton();
\r
916 jButton_remove.setText(s);
\r
918 jButton_remove.addActionListener(al_removeTarget);
\r
920 return(jButton_remove);
\r
923 private JButton getJButton_up(String s) {
\r
924 if (jButton_up == null) {
\r
925 jButton_up = new JButton();
\r
926 jButton_up.setText(s);
\r
928 jButton_up.addActionListener(al_upTarget);
\r
930 return(jButton_up);
\r
933 private JButton getJButton_down(String s) {
\r
934 if (jButton_down == null) {
\r
935 jButton_down = new JButton();
\r
936 jButton_down.setText(s);
\r
938 jButton_down.addActionListener(al_downTarget);
\r
940 return(jButton_down);
\r
944 private JScrollPane getJScrollPane_keywords() {
\r
945 if (jScrollPane_keywords == null) {
\r
946 jScrollPane_keywords = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
\r
947 jScrollPane_keywords.setViewportView(getJTable_keywords());
\r
949 return jScrollPane_keywords;
\r
953 private KDTable getJTable_keywords() {
\r
954 if (jTable_keywords == null) {
\r
956 jTable_keywords = new KDTable(false, new RowItemList<KDItem>());
\r
959 ArrayList<String> cola = new ArrayList<String>();
\r
960 for ( KDColumn rc : KDColumn.values() ) {
\r
961 if ( rc.getIniWidth() >= 0 ) {
\r
962 cola.add(rc.getName());
\r
965 jTable_keywords.setModel(new DefaultTableModel(cola.toArray(new String[0]), 0));
\r
967 jTable_keywords.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);
\r
968 jTable_keywords.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
\r
969 jTable_keywords.getTableHeader().setReorderingAllowed(false);
\r
972 DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_keywords.getColumnModel();
\r
973 //TableColumn column = null;
\r
974 for ( KDColumn rc : KDColumn.values() ) {
\r
975 if ( rc.getIniWidth() < 0 ) {
\r
978 columnModel.getColumn(rc.ordinal()).setPreferredWidth(rc.getIniWidth());;
\r
982 return(jTable_keywords);
\r
985 /*******************************************************************************
\r
987 ******************************************************************************/
\r
989 private class KDItem extends RowItem implements Cloneable {
\r
995 protected void myrefresh(RowItem o) {
\r
996 KDItem c = (KDItem) o;
\r
999 c.addData(contain);
\r
1003 public KDItem clone() {
\r
1004 return (KDItem) super.clone();
\r
1008 private class KDTable extends JNETable {
\r
1010 private static final long serialVersionUID = 1L;
\r
1012 RowItemList<KDItem> rowdata = null;
\r
1014 public KDTable(boolean b, RowItemList<KDItem> rowdata) {
\r
1016 this.rowdata = rowdata;
\r
1019 public RowItemList<KDItem> getRowItemList() { return rowdata; }
\r
1021 public void fireChanged() { ((DefaultTableModel) this.getModel()).fireTableDataChanged(); }
\r
1024 public int getRowCount() { return rowdata.size(); }
\r
1027 public Object getValueAt(int row, int column) {
\r
1028 return rowdata.get(row).get(column);
\r
1032 public void setValueAt(Object aValue, int row, int column) {
\r
1033 KDItem c = rowdata.get(row);
\r
1034 if ( column == KDColumn.TARGET.getColumn() ) {
\r
1035 c.target = (TargetId) aValue;
\r
1037 else if ( column == KDColumn.REGEX.getColumn() ) {
\r
1038 c.regex = (String) aValue;
\r
1040 else if ( column == KDColumn.CONTAIN.getColumn() ) {
\r
1041 c.contain = (String) aValue;
\r
1048 /*******************************************************************************
\r
1049 * 延長警告管理では以下をオーバーライドしてください
\r
1050 ******************************************************************************/
\r
1052 protected void setItems() {
\r
1053 setWindowTitle("キーワード検索の設定");
\r
1055 clean_target_items();
\r
1056 add_target_item(TargetId.TITLEANDDETAIL);
\r
1057 add_target_item(TargetId.TITLE);
\r
1058 add_target_item(TargetId.DETAIL);
\r
1059 add_target_item(TargetId.CHANNEL);
\r
1060 add_target_item(TargetId.GENRE);
\r
1061 add_target_item(TargetId.SUBGENRE);
\r
1062 add_target_item(TargetId.NEW);
\r
1063 add_target_item(TargetId.LAST);
\r
1064 add_target_item(TargetId.REPEAT);
\r
1065 add_target_item(TargetId.FIRST);
\r
1066 add_target_item(TargetId.SPECIAL);
\r
1067 add_target_item(TargetId.RATING);
\r
1068 add_target_item(TargetId.NOSCRUMBLE);
\r
1069 add_target_item(TargetId.LIVE);
\r
1070 add_target_item(TargetId.BILINGUAL);
\r
1071 add_target_item(TargetId.STANDIN);
\r
1072 add_target_item(TargetId.LENGTH);
\r
1073 add_target_item(TargetId.STARTA);
\r
1074 add_target_item(TargetId.STARTZ);
\r
1075 add_target_item(TargetId.STARTDATETIME);
\r
1077 clean_contain_items();
\r
1078 add_contain_item("を含む番組");
\r
1079 add_contain_item("を含む番組を除く");
\r
1081 clean_condition_items();
\r
1082 add_condition_item("次のすべての条件に一致");
\r
1083 add_condition_item("次のいずれかの条件に一致");
\r
1085 clean_infection_items();
\r
1086 //add_infection_item();
\r
1088 clean_okiniiri_items();
\r
1089 for (String okini : TVProgram.OKINIIRI) {
\r
1090 add_okiniiri_item(okini);
\r