OSDN Git Service

・TVアニメ「Fate/...」のサブタイトル分離がうまくいかない問題を修正
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / AbsSettingView.java
1 package tainavi;\r
2 \r
3 import java.awt.Color;\r
4 import java.awt.Component;\r
5 import java.awt.Dimension;\r
6 import java.awt.Font;\r
7 import java.awt.event.ActionEvent;\r
8 import java.awt.event.ActionListener;\r
9 import java.awt.event.ItemEvent;\r
10 import java.awt.event.ItemListener;\r
11 import java.awt.event.MouseAdapter;\r
12 import java.awt.event.MouseEvent;\r
13 import java.util.Map.Entry;\r
14 import java.util.regex.Matcher;\r
15 import java.util.regex.Pattern;\r
16 \r
17 import javax.swing.DefaultCellEditor;\r
18 import javax.swing.DefaultComboBoxModel;\r
19 import javax.swing.JButton;\r
20 import javax.swing.JCheckBox;\r
21 import javax.swing.JComboBox;\r
22 import javax.swing.JComponent;\r
23 import javax.swing.JLabel;\r
24 import javax.swing.JPanel;\r
25 import javax.swing.JRadioButton;\r
26 import javax.swing.JScrollPane;\r
27 import javax.swing.JTable;\r
28 import javax.swing.JTextField;\r
29 import javax.swing.ListSelectionModel;\r
30 import javax.swing.ScrollPaneConstants;\r
31 import javax.swing.SpringLayout;\r
32 import javax.swing.UIManager;\r
33 import javax.swing.border.LineBorder;\r
34 import javax.swing.event.CellEditorListener;\r
35 import javax.swing.event.ChangeEvent;\r
36 import javax.swing.event.ChangeListener;\r
37 import javax.swing.event.DocumentEvent;\r
38 import javax.swing.event.DocumentListener;\r
39 import javax.swing.table.DefaultTableCellRenderer;\r
40 import javax.swing.table.DefaultTableColumnModel;\r
41 import javax.swing.table.DefaultTableModel;\r
42 import javax.swing.table.TableColumn;\r
43 \r
44 import tainavi.Env.DblClkCmd;\r
45 import tainavi.Env.SnapshotFmt;\r
46 import tainavi.Env.UpdateOn;\r
47 import tainavi.TVProgram.ProgOption;\r
48 \r
49 \r
50 /**\r
51  * 各種設定タブのクラス\r
52  * @since 3.15.4β {@link Viewer}から分離\r
53  */\r
54 public abstract class AbsSettingView extends JScrollPane {\r
55 \r
56         private static final long serialVersionUID = 1L;\r
57 \r
58         public static String getViewName() { return "各種設定"; } \r
59 \r
60         public void setDebug(boolean b) { debug = b; }\r
61         private static boolean debug = false;\r
62 \r
63         /*******************************************************************************\r
64          * 抽象メソッド\r
65          ******************************************************************************/\r
66         \r
67         protected abstract Env getEnv();\r
68         protected abstract ClipboardInfoList getCbItemEnv();\r
69         \r
70         protected abstract VWLookAndFeel getLAFEnv();\r
71         protected abstract VWFont getFontEnv();\r
72         \r
73         protected abstract StatusWindow getStWin(); \r
74         protected abstract StatusTextArea getMWin();\r
75         \r
76         protected abstract Component getParentComponent();\r
77         protected abstract VWColorChooserDialog getCcWin(); \r
78         \r
79         protected abstract void lafChanged(String lafname);\r
80         protected abstract void fontChanged(String fn, int fontSize);\r
81         protected abstract void setEnv(boolean reload_prog);\r
82 \r
83         /*******************************************************************************\r
84          * 呼び出し元から引き継いだもの\r
85          ******************************************************************************/\r
86         \r
87         // オブジェクト\r
88         private final Env env = getEnv();\r
89         private final ClipboardInfoList cbitems = getCbItemEnv();\r
90         \r
91         private final StatusWindow StWin = getStWin();                  // これは起動時に作成されたまま変更されないオブジェクト\r
92         private final StatusTextArea MWin = getMWin();                  // これは起動時に作成されたまま変更されないオブジェクト\r
93         \r
94         private final Component parent = getParentComponent();  // これは起動時に作成されたまま変更されないオブジェクト\r
95         private final VWColorChooserDialog ccwin = getCcWin();  // これは起動時に作成されたまま変更されないオブジェクト\r
96         \r
97         // 雑多なメソッド\r
98         private void StdAppendMessage(String message) { System.out.println(message); }\r
99         //private void StdAppendError(String message) { System.err.println(message); }\r
100         private void StWinSetVisible(boolean b) { StWin.setVisible(b); }\r
101         private void StWinSetLocationCenter(Component frame) { CommonSwingUtils.setLocationCenter(frame, (VWStatusWindow)StWin); }\r
102         \r
103         /*******************************************************************************\r
104          * 定数\r
105          ******************************************************************************/\r
106 \r
107         // レイアウト関連\r
108 \r
109         private static final int PARTS_WIDTH = 900;\r
110         private static final int PARTS_HEIGHT = 30;\r
111         private static final int SEP_WIDTH = 10;\r
112         private static final int SEP_HEIGHT = 10;\r
113         private static final int SEP_HEIGHT_NALLOW = 5;\r
114         private static final int BLOCK_SEP_HEIGHT = 75;\r
115         \r
116         private static final int LABEL_WIDTH = 350;\r
117         private static final int CCLABEL_WIDTH = 250;\r
118         private static final int DESCRIPTION_WIDTH = LABEL_WIDTH+PARTS_WIDTH;\r
119 \r
120         private static final int UPDATE_WIDTH = 250;\r
121         private static final int HINT_WIDTH = 700;\r
122         \r
123         private static final int PANEL_WIDTH = LABEL_WIDTH+PARTS_WIDTH+SEP_WIDTH*3;\r
124         \r
125         //\r
126         \r
127         private static final Color NOTICEMSG_COLOR = new Color(0,153,153);\r
128         // テキスト\r
129         \r
130         private static final String TEXT_HINT =\r
131                         "各項目の詳細はプロジェクトWikiに説明があります(http://sourceforge.jp/projects/tainavi/wiki/)。"+\r
132                         "ツールバーのヘルプアイコンをクリックするとブラウザで開きます。";\r
133 \r
134         private static final String PARER_REDRAW_NORMAL = "通常";\r
135         private static final String PARER_REDRAW_CACHE = "再描画時に一週間分をまとめて描画して日付切り替えを高速化する(メモリ消費大)";\r
136         private static final String PARER_REDRAW_PAGER = "ページャーを有効して一度に描画する放送局数を抑える(メモリ消費抑制、切替時間短縮)";\r
137 \r
138         // ログ関連\r
139 \r
140         private static final String MSGID = "["+getViewName()+"] ";\r
141         private static final String ERRID = "[ERROR]"+MSGID;\r
142         private static final String DBGID = "[DEBUG]"+MSGID;\r
143         \r
144         /*******************************************************************************\r
145          * 部品\r
146          ******************************************************************************/\r
147         \r
148         // コンポーネント\r
149         \r
150         private JPanel jPanel_setting = null;\r
151         \r
152         private JPanel jPanel_update = null;\r
153         private JButton jButton_update = null;\r
154         \r
155         // リスト形式\r
156         private JCheckBoxPanel jCBP_disableFazzySearch = null;\r
157         private JCheckBoxPanel jCBP_disableFazzySearchReverse = null;\r
158         private JSliderPanel jSP_defaultFazzyThreshold = null;\r
159         private JCheckBoxPanel jCBP_syoboFilterByCenters = null;\r
160         private JCheckBoxPanel jCBP_displayPassedEntry = null;\r
161         private JCheckBoxPanel jCBP_showRsvPickup = null;\r
162         private JCheckBoxPanel jCBP_showRsvDup = null;\r
163         private JCheckBoxPanel jCBP_showRsvUra = null;\r
164         private JCheckBoxPanel jCBP_rsvdLineEnhance = null;\r
165         private JLabel jLabel_rsvdLineColor = null;\r
166         private JCCLabel jCCL_rsvdLineColor = null;\r
167         private JLabel jLabel_pickedLineColor = null;\r
168         private JCCLabel jCCL_pickedLineColor = null;\r
169         private JCCLabel jCCL_matchedKeywordColor = null;\r
170         private JCheckBoxPanel jCBP_currentLineEnhance = null;\r
171         private JLabel jLabel_currentLineColor = null;\r
172         private JCCLabel jCCL_currentLineColor = null;\r
173         private JSliderPanel jSP_currentAfter = null;\r
174         private JSliderPanel jSP_currentBefore = null;\r
175         private JCheckBoxPanel jCBP_showWarnDialog = null;\r
176         private JCheckBoxPanel jCBP_splitMarkAndTitle = null;\r
177         private JCheckBoxPanel jCBP_showDetailOnList = null;\r
178         private JSliderPanel jSP_rsvTargets = null;\r
179         private JCheckBoxPanel jCBP_rowHeaderVisible = null;\r
180         private JComboBoxPanel jCBX_dblClkCmd = null;\r
181         private JSliderPanel jSP_searchResultMax = null;\r
182         private JSliderPanel jSP_searchResultBufferMax = null;\r
183         \r
184         // 新聞形式\r
185         private JRadioButtonPanel jRBP_getPaperRedrawType = null;\r
186         private JSliderPanel jSP_centerPerPage = null;\r
187         private JCheckBoxPanel jCBP_allPageSnapshot = null;\r
188         private JCheckBoxPanel jCBP_tooltipEnable = null;\r
189         private JSliderPanel jSP_tooltipInitialDelay = null;\r
190         private JSliderPanel jSP_tooltipDismissDelay = null;\r
191         private JCheckBoxPanel jCBP_timerbarScrollEnable = null;\r
192         private JSliderPanel jSP_passedLogLimit = null;\r
193         private JCheckBoxPanel jCBP_effectComboToPaper = null;\r
194         private JComboBoxPanel jCBX_snapshotFmt = null;\r
195         private JCheckBoxPanel jCBP_printSnapshot = null;\r
196         \r
197         // リスト・新聞共通\r
198         private JCheckBoxPanel jCBP_displayOnlyExecOnEntry = null;\r
199         private JCheckBoxPanel jCBP_displayPassedReserve = null;\r
200         private JCheckBoxPanel jCBP_showOnlyNonrepeated = null;\r
201         private JCheckBoxPanel jCBP_adjLateNight = null;\r
202         private JCheckBoxPanel jCBP_rootNodeVisible = null;\r
203         private JCheckBoxPanel jCBP_syncTreeWidth = null;\r
204         private JCheckBoxPanel jCBP_shortExtMark = null;\r
205         private JLabel jLabel_showmarks = null;\r
206         private JScrollPane jScrollPane_showmarks = null;\r
207         private JNETable jTable_showmarks = null;\r
208         private JLabel jLabel_clipboard = null;\r
209         private JScrollPane jScrollPane_clipboard = null;\r
210         private JNETable jTable_clipboard = null;\r
211         private JButton jButton_clipboard_up = null;\r
212         private JButton jButton_clipboard_down = null;\r
213         private JLabel jLabel_menuitem = null;\r
214         private JTextFieldWithPopup jTextField_mikey = null;\r
215         private JTextFieldWithPopup jTextField_mival = null;\r
216         private JScrollPane jScrollPane_mitable = null;\r
217         private JNETable jTable_mitable = null;\r
218         private JButton jButton_miadd = null;\r
219         private JButton jButton_midel = null;\r
220         private JButton jButton_miup = null;\r
221         private JButton jButton_midown = null;\r
222         \r
223         // Web番組表対応\r
224         private JCheckBoxPanel jCBP_continueTomorrow = null;\r
225         private JSliderPanel jSP_cacheTimeLimit = null;\r
226         private JComboBoxPanel jCBX_shutdownCmd = null;\r
227         private JCheckBoxPanel jCBP_expandTo8 = null;\r
228         //private JCheckBoxPanel jCBP_useDetailCache = null;\r
229         private JCheckBoxPanel jCBP_autoEventIdComplete = null;\r
230         private JCheckBoxPanel jCBP_splitEpno = null;\r
231         private JCheckBoxPanel jCBP_traceOnlyTitle = null;\r
232         private JCheckBoxPanel jCBP_fixTitle = null;\r
233         private JLabel jLabel_ngword = null;\r
234         private JTextFieldWithPopup jTextField_ngword = null;\r
235         private JLabel jLabel_userAgent = null;\r
236         private JTextFieldWithPopup jTextField_userAgent = null;\r
237         private JCheckBoxPanel jCBP_useProxy = null;\r
238         private JLabel jLabel_proxy = null;\r
239         private JTextFieldWithPopup jTextField_proxyAddr = null;\r
240         private JTextFieldWithPopup jTextField_proxyPort = null;\r
241         private JCheckBoxPanel jCBP_useSyobocal = null;\r
242         private JCheckBoxPanel jCBP_historyOnlyUpdateOnce = null;\r
243         private JCheckBoxPanel jCBP_usePassedProgram = null;\r
244         private JSliderPanel jSP_prepPassedProgramCount = null;\r
245         \r
246         // レコーダ対応\r
247         private JRadioButtonPanel jRBP_getRdReserveDetails = null;\r
248         private JRadioButtonPanel jRBP_getRdAutoReserves = null;\r
249         private JRadioButtonPanel jRBP_getRdRecorded = null;\r
250         private JComboBoxPanel jCBX_recordedSaveScope = null;\r
251         \r
252         // 予約\r
253         private JSliderPanel jSP_spoex_extend = null;\r
254         private JRadioButtonPanel jRBP_overlapUp = null;\r
255         private JRadioButtonPanel jRBP_overlapDown = null;\r
256         private JLabel jLabel_autoFolderSelect = null;\r
257         private JCheckBox jCheckBox_autoFolderSelect = null;\r
258         private JLabel jLabel_enableCHAVsetting = null;\r
259         private JCheckBox jCheckBox_enableCHAVsetting = null;\r
260         private JSliderPanel jSP_rangeLikeRsv = null;\r
261         private JCheckBoxPanel jCBP_givePriorityToReserved = null;\r
262         private JCheckBoxPanel jCBP_givePriorityToReservedTitle = null;\r
263         private JCheckBoxPanel jCBP_adjoiningNotRepetition = null;\r
264         private JCheckBoxPanel jCBP_rsv_showallite = null;\r
265         private JLabel jLabel_rsv_itecolor = null;\r
266         private JCCLabel jCCL_rsv_itecolor = null;\r
267         private JLabel jLabel_rsv_tunshortcolor = null;\r
268         private JCCLabel jCCL_rsv_tunshortcolor = null;\r
269         private JLabel jLabel_rsv_recedcolor = null;\r
270         private JCCLabel jCCL_rsv_recedcolor = null;\r
271         private JCheckBoxPanel jCBP_useAutocomplete = null;\r
272         \r
273         // その他\r
274         private JComboBoxPanel jCBX_updateMethod = null;\r
275         private JCheckBoxPanel jCBP_disableBeep = null;\r
276         private JCheckBoxPanel jCBP_showSysTray = null;\r
277         private JCheckBoxPanel jCBP_hideToTray = null;\r
278         private JCheckBoxPanel jCBP_onlyOneInstance = null;\r
279         private JLabel jLabel_lookAndFeel = null;\r
280         private JComboBox jComboBox_lookAndFeel = null;\r
281         private JLabel jLabel_font = null;\r
282         private JComboBox jComboBox_font = null;\r
283         private JComboBox jComboBox_fontSize = null;\r
284         private JLabel jLabel_fontSample = null;\r
285         private JCheckBoxPanel jCBP_useGTKRC = null;\r
286         private JCheckBoxPanel jCBP_useRundll32 = null;\r
287         private JCheckBoxPanel jCBP_debug = null;\r
288 \r
289         private JTextAreaWithPopup jta_help = null;\r
290 \r
291         // コンポーネント以外\r
292         \r
293         /**\r
294          * 特定のコンポーネントを操作した時だけ番組表を再取得してほしい\r
295          */\r
296         private boolean reload_prog_needed = false;\r
297         \r
298         /*******************************************************************************\r
299          * コンストラクタ\r
300          ******************************************************************************/\r
301         \r
302         public AbsSettingView() {\r
303                 \r
304                 super();\r
305                 \r
306                 this.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);\r
307                 this.getVerticalScrollBar().setUnitIncrement(25);\r
308                 this.setColumnHeaderView(getJPanel_update());\r
309                 this.setViewportView(getJPanel_setting());\r
310                 \r
311                 setUpdateButtonEnhanced(false);\r
312         }\r
313         \r
314         private JPanel getJPanel_update() {\r
315                 if (jPanel_update == null)\r
316                 {\r
317                         jPanel_update = new JPanel();\r
318                         jPanel_update.setLayout(new SpringLayout());\r
319                         \r
320                         jPanel_update.setBorder(new LineBorder(Color.GRAY));\r
321                         \r
322                         int y = SEP_HEIGHT;\r
323                         CommonSwingUtils.putComponentOn(jPanel_update, getJButton_update("更新を確定する"), UPDATE_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
324                         \r
325                         int yz = SEP_HEIGHT/2;\r
326                         int x = UPDATE_WIDTH+50;\r
327                         CommonSwingUtils.putComponentOn(jPanel_update, getJta_help(), HINT_WIDTH, PARTS_HEIGHT+SEP_HEIGHT, x, yz);\r
328                         \r
329                         y += (PARTS_HEIGHT + SEP_HEIGHT);\r
330                         \r
331                         // 画面の全体サイズを決める\r
332                         Dimension d = new Dimension(PANEL_WIDTH,y);\r
333                         jPanel_update.setPreferredSize(d);\r
334                 }\r
335                 return jPanel_update;\r
336         }\r
337 \r
338         /**\r
339          * ActionListenerはGUIの操作では動くがsetSelected()での変更では動かない<BR>\r
340          * ChangeListenerもItemListenerも同じ値のセットしなおしだと動作しない<BR>\r
341          * 以下ではFire!するために涙ぐましい努力を行っている<BR>\r
342          * <BR>\r
343          * ex.<BR>\r
344          * jcheckbox.setSelected( ! env.isSelected())<BR>\r
345          * jchackbox.addItemListener()<BR>\r
346          * jcheckbox.setSelected( ! jcheckbox.isSelected())<BR>\r
347          * <BR>\r
348          * …あほか!\r
349          */\r
350         private JPanel getJPanel_setting() {\r
351                 if (jPanel_setting == null)\r
352                 {\r
353                         jPanel_setting = new JPanel();\r
354                         jPanel_setting.setLayout(new SpringLayout());\r
355                         \r
356                         //\r
357                         int y = SEP_HEIGHT;\r
358                         \r
359                         /*\r
360                          * リスト形式 \r
361                          */\r
362                         \r
363                         y+=0;\r
364                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<リスト形式>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
365 \r
366                         {\r
367                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
368                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_disableFazzySearch = new JCheckBoxPanel("番組追跡であいまい検索をしない",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
369                                 jCBP_disableFazzySearch.setSelected( ! env.getDisableFazzySearch());\r
370                                 // RELOADリスナー不要\r
371                                 \r
372                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
373                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_disableFazzySearchReverse = new JCheckBoxPanel("┗ あいまい検索の逆引きを省略(非推奨)",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
374                                 jCBP_disableFazzySearchReverse.setSelected(env.getDisableFazzySearchReverse());\r
375                                 // RELOADリスナー不要\r
376 \r
377                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
378                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_defaultFazzyThreshold = new JSliderPanel("┗ あいまい検索のデフォルト閾値",LABEL_WIDTH,1,99,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
379                                 jSP_defaultFazzyThreshold.setValue(env.getDefaultFazzyThreshold());\r
380                                 // RELOADリスナー不要\r
381                                 \r
382                                 // 連動設定(Fire!がキモイ…)\r
383                                 \r
384                                 jCBP_disableFazzySearch.addItemListener(al_fazzysearch);\r
385                                 \r
386                                 jCBP_disableFazzySearch.setSelected( ! jCBP_disableFazzySearch.isSelected());\r
387                         }\r
388 \r
389                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
390                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※あいまい検索のアルゴリズムにはバイグラムを使用しています(TraceProgram.java参照)"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
391                         y+=(PARTS_HEIGHT);\r
392                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg(" 正順では「検索キーワード」の成分が「番組表のタイトル」にどれくらい含まれているかを判定しています。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
393                         y+=(PARTS_HEIGHT);\r
394                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg(" 逆順を有効にすると、正順でNG判定になった場合に前者と後者を入れ替えて再判定を行います。取りこぼしが減る場合がある反面、検索ノイズが増える場合もあります。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
395                         y+=(PARTS_HEIGHT);\r
396                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg(" 閾値を大きくすると判定が厳しくなります。キーワードが短いためにヒットしまくりで検索ノイズが多くなった場合に、値を大きくしてみてください。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
397                         \r
398                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
399                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_traceOnlyTitle = new JCheckBoxPanel("タイトル中に含まれるサブタイトルは番組追跡の対象にしない",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
400                         jCBP_traceOnlyTitle.setSelected(env.getTraceOnlyTitle());\r
401                         jCBP_traceOnlyTitle.addItemListener(IL_RELOAD_PROG_NEEDED);\r
402                 \r
403                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
404                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_syoboFilterByCenters = new JCheckBoxPanel("しょぼかるの検索結果も有効な放送局のみに絞る",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
405                         jCBP_syoboFilterByCenters.setSelected(env.getSyoboFilterByCenters());\r
406                         // RELOADリスナー不要\r
407 \r
408                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
409                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_displayPassedEntry = new JCheckBoxPanel("当日の終了済み番組も表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
410                         jCBP_displayPassedEntry.setSelected(env.getDisplayPassedEntry());\r
411                         // RELOADリスナー不要\r
412 \r
413                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
414                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showRsvPickup = new JCheckBoxPanel("ピックアップマーク(★)を表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
415                         jCBP_showRsvPickup.setSelected(env.getShowRsvPickup());\r
416                         // RELOADリスナー不要\r
417 \r
418                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
419                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showRsvDup = new JCheckBoxPanel("時間重複マーク(■)を表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
420                         jCBP_showRsvDup.setSelected(env.getShowRsvDup());\r
421                         // RELOADリスナー不要\r
422 \r
423                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
424                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showRsvUra = new JCheckBoxPanel("裏番組予約マーク(裏)を表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
425                         jCBP_showRsvUra.setSelected(env.getShowRsvUra());\r
426                         // RELOADリスナー不要\r
427 \r
428                         {\r
429                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
430                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_rsvdLineEnhance = new JCheckBoxPanel("予約行の背景色を変えて強調する",LABEL_WIDTH), LABEL_WIDTH+PARTS_HEIGHT, PARTS_HEIGHT, SEP_WIDTH, y);\r
431                                 jCBP_rsvdLineEnhance.setSelected( ! env.getRsvdLineEnhance());\r
432                                 // RELOADリスナー不要\r
433 \r
434                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
435                                 CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_rsvdLineColor = new JLabel("┗ 予約行の背景色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
436                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_rsvdLineColor = new JCCLabel("予約行の背景色",env.getRsvdLineColor(),true,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
437                                 // RELOADリスナー不要\r
438 \r
439                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
440                                 CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_pickedLineColor = new JLabel("┗ ピックアップ行の背景色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
441                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_pickedLineColor = new JCCLabel("ピックアップ行の背景色",env.getPickedLineColor(),true,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
442                                 // RELOADリスナー不要\r
443                                 \r
444                                 // 連動設定\r
445                                 \r
446                                 jCBP_rsvdLineEnhance.addItemListener(al_rsvdlineenhance);\r
447                                 \r
448                                 jCBP_rsvdLineEnhance.setSelected( ! jCBP_rsvdLineEnhance.isSelected());\r
449                         }\r
450                         \r
451                         {\r
452                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
453                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_currentLineEnhance = new JCheckBoxPanel("現在放送中の行の背景色を変えて強調する",LABEL_WIDTH), LABEL_WIDTH+PARTS_HEIGHT, PARTS_HEIGHT, SEP_WIDTH, y);\r
454                                 jCBP_currentLineEnhance.setSelected( ! env.getCurrentLineEnhance());\r
455                                 // RELOADリスナー不要\r
456 \r
457                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
458                                 CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_currentLineColor = new JLabel("┗ 現在放送中行の背景色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
459                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_currentLineColor = new JCCLabel("現在放送中行の背景色",env.getCurrentLineColor(),true,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
460                                 // RELOADリスナー不要\r
461                                 \r
462                                 // 連動設定\r
463                                 \r
464                                 jCBP_currentLineEnhance.addItemListener(al_currentlineenhance);\r
465                                 \r
466                                 jCBP_currentLineEnhance.setSelected( ! jCBP_currentLineEnhance.isSelected());\r
467                         }\r
468                         \r
469                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
470                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_currentAfter = new JSliderPanel("現在放送中ノードに終了後何分までの番組を表示するか",LABEL_WIDTH,0,60,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
471                         jSP_currentAfter.setValue(env.getCurrentAfter()/60);\r
472                         // RELOADリスナー不要\r
473                         \r
474                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
475                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_currentBefore = new JSliderPanel("現在放送中ノードに開始前何分までの番組を表示するか",LABEL_WIDTH,0,120,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
476                         jSP_currentBefore.setValue(env.getCurrentBefore()/60);\r
477                         // RELOADリスナー不要\r
478                         \r
479                         //\r
480                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
481                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("タイトル中のキーワードにマッチした箇所の強調色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
482                         CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_matchedKeywordColor = new JCCLabel("強調色",env.getMatchedKeywordColor(),false,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
483                         // RELOADリスナー不要\r
484                         \r
485                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
486                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showWarnDialog = new JCheckBoxPanel("キーワード削除時に確認ダイアログを表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
487                         jCBP_showWarnDialog.setSelected(env.getShowWarnDialog());\r
488                         // RELOADリスナー不要\r
489                         \r
490                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
491                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_splitMarkAndTitle = new JCheckBoxPanel("オプション表示を個別欄に分離表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
492                         jCBP_splitMarkAndTitle.setSelected(env.getSplitMarkAndTitle());\r
493                         // RELOADリスナー不要\r
494                         \r
495                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
496                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showDetailOnList = new JCheckBoxPanel("番組詳細列を表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
497                         jCBP_showDetailOnList.setSelected(env.getShowDetailOnList());\r
498                         // RELOADリスナー不要\r
499                         \r
500                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
501                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_rowHeaderVisible = new JCheckBoxPanel("行番号を表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
502                         jCBP_rowHeaderVisible.setSelected(env.getRowHeaderVisible());\r
503                         // RELOADリスナー不要\r
504                         \r
505                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
506                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_rsvTargets = new JSliderPanel("予約待機の予約番組自動選択数",LABEL_WIDTH,1,99,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
507                         jSP_rsvTargets.setValue(env.getRsvTargets());\r
508                         // RELOADリスナー不要\r
509 \r
510                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
511                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBX_dblClkCmd = new JComboBoxPanel("ダブルクリック時の動作",LABEL_WIDTH,250,true), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
512                         for ( DblClkCmd c : DblClkCmd.values() ) {\r
513                                 jCBX_dblClkCmd.addItem(c);\r
514                         }\r
515                         jCBX_dblClkCmd.setSelectedItem(env.getDblClkCmd());\r
516                         // RELOADリスナー不要\r
517                         \r
518                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
519                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_searchResultMax = new JSliderPanel("過去ログ検索件数の上限",LABEL_WIDTH,10,500,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
520                         jSP_searchResultMax.setValue(env.getSearchResultMax());\r
521                         // RELOADリスナー不要\r
522 \r
523                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
524                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_searchResultBufferMax = new JSliderPanel("過去ログ検索履歴の上限",LABEL_WIDTH,1,10,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
525                         jSP_searchResultBufferMax.setValue(env.getSearchResultBufferMax());\r
526                         // RELOADリスナー不要\r
527 \r
528                         /*\r
529                          * 新聞形式 \r
530                          */\r
531                         \r
532                         y+=(PARTS_HEIGHT+BLOCK_SEP_HEIGHT);\r
533                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<新聞形式>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
534                         \r
535                         {\r
536                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
537                                 int paperredraw_h = PARTS_HEIGHT*3+SEP_HEIGHT_NALLOW*2;\r
538                                 CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_getPaperRedrawType = new JRadioButtonPanel("描画方式",LABEL_WIDTH), PARTS_WIDTH, paperredraw_h, SEP_WIDTH, y);\r
539                                 jRBP_getPaperRedrawType.add(PARER_REDRAW_NORMAL, false);\r
540                                 jRBP_getPaperRedrawType.add(PARER_REDRAW_CACHE, false);\r
541                                 jRBP_getPaperRedrawType.add(PARER_REDRAW_PAGER, false);\r
542                                 // RELOADリスナー不要\r
543                                 \r
544                                 y+=(paperredraw_h+SEP_HEIGHT);\r
545                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_centerPerPage = new JSliderPanel("┗ ページあたりの放送局数",LABEL_WIDTH,1,99,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
546                                 jSP_centerPerPage.setValue(env.getCenterPerPage());\r
547                                 // RELOADリスナー不要\r
548                                 \r
549                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
550                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_allPageSnapshot = new JCheckBoxPanel("┗ スナップショットを全ページ連続で実行",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
551                                 jCBP_allPageSnapshot.setSelected(env.getAllPageSnapshot());\r
552                                 // RELOADリスナー不要\r
553                                 \r
554                                 // 連動設定(1)\r
555                                 jRBP_getPaperRedrawType.addItemListener(il_paperredrawtype);\r
556                                 \r
557                                 if ( env.isPagerEnabled() ) {\r
558                                         jRBP_getPaperRedrawType.setSelectedItem(PARER_REDRAW_PAGER);\r
559                                 }\r
560                                 else if ( env.getDrawcacheEnable() ) {\r
561                                         jRBP_getPaperRedrawType.setSelectedItem(PARER_REDRAW_CACHE);\r
562                                 }\r
563                                 else {\r
564                                         jRBP_getPaperRedrawType.setSelectedItem(PARER_REDRAW_NORMAL);\r
565                                 }\r
566                         }\r
567 \r
568                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
569                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※切り替えがおっせーよ!忍耐の限界だよ!という場合は新聞形式の設定変更(ツールバーのパレットアイコン)で「番組詳細のフォント設定>表示する」のチェックを外してください。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
570 \r
571                         {\r
572                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
573                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_tooltipEnable = new JCheckBoxPanel("番組表でツールチップを表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
574                                 jCBP_tooltipEnable.setSelected( ! env.getTooltipEnable());\r
575                                 // RELOADリスナー不要\r
576 \r
577                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
578                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_tooltipInitialDelay = new JSliderPanel("┗ 表示までの遅延(ミリ秒)",LABEL_WIDTH,0,3000,100,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
579                                 jSP_tooltipInitialDelay.setValue(env.getTooltipInitialDelay());\r
580                                 // RELOADリスナー不要\r
581 \r
582                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
583                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_tooltipDismissDelay = new JSliderPanel("┗ 消去までの遅延(ミリ秒)",LABEL_WIDTH,1000,60000,100,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
584                                 jSP_tooltipDismissDelay.setValue(env.getTooltipDismissDelay());\r
585                                 // RELOADリスナー不要\r
586                                 \r
587                                 // 連動設定\r
588 \r
589                                 jCBP_tooltipEnable.addItemListener(al_tooltipenable);\r
590                                 \r
591                                 jCBP_tooltipEnable.setSelected( ! jCBP_tooltipEnable.isSelected());\r
592                         }\r
593                         \r
594                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
595                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_timerbarScrollEnable = new JCheckBoxPanel("現在時刻線を固定し番組表側をスクロール",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
596                         jCBP_timerbarScrollEnable.setSelected(env.getTimerbarScrollEnable());\r
597                         // RELOADリスナー不要\r
598                         \r
599                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
600                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_passedLogLimit = new JSliderPanel("過去ログの日付ノードの表示数",LABEL_WIDTH,7,180,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
601                         jSP_passedLogLimit.setValue(env.getPassedLogLimit());\r
602                         // RELOADリスナー不要\r
603 \r
604                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
605                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_effectComboToPaper = new JCheckBoxPanel("レコーダコンボボックスを新聞形式でも有効に",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
606                         jCBP_effectComboToPaper.setSelected(env.getEffectComboToPaper());\r
607                         // RELOADリスナー不要\r
608                         \r
609                         \r
610                         /*\r
611                          * リスト・新聞形式共通 \r
612                          */\r
613                         \r
614                         y+=(PARTS_HEIGHT+BLOCK_SEP_HEIGHT);\r
615                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<リスト・新聞形式共通>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
616 \r
617                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
618                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_displayOnlyExecOnEntry = new JCheckBoxPanel("実行ONの予約のみ予約マークを表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
619                         jCBP_displayOnlyExecOnEntry.setSelected(env.getDisplayOnlyExecOnEntry());\r
620                         // RELOADリスナー不要\r
621                         \r
622                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
623                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_displayPassedReserve = new JCheckBoxPanel("当日の終了済み予約も表示する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
624                         jCBP_displayPassedReserve.setSelected(env.getDisplayPassedReserve());\r
625                         // RELOADリスナー不要\r
626 \r
627                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
628                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showOnlyNonrepeated = new JCheckBoxPanel("リピート放送と判定されたら番組追跡に表示しない",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
629                         jCBP_showOnlyNonrepeated.setSelected(env.getShowOnlyNonrepeated());\r
630                         // RELOADリスナー不要\r
631 \r
632                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
633                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_adjLateNight = new JCheckBoxPanel("【RD】深夜の帯予約を前にずらす(火~土→月~金)",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
634                         jCBP_adjLateNight.setSelected(env.getAdjLateNight());\r
635                         // RELOADリスナー不要\r
636                         \r
637                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
638                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※月~金26:00の帯番組は、実際には火~土AM2:00に放送されますので鯛ナビでもそのように帯予約を処理しています。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
639                         y+=(PARTS_HEIGHT);\r
640                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg(" しかし、RDのように月~金AM2:00で録画が実行されてしまうような場合にはこれをチェックしてください。帯予約の予約枠を月~金AM2:00で表示するようにします。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
641 \r
642                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
643                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_rootNodeVisible = new JCheckBoxPanel("ツリーペーンにrootノードを表示させる",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
644                         jCBP_rootNodeVisible.setSelected(env.getRootNodeVisible());\r
645                         // RELOADリスナー不要\r
646                         \r
647                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
648                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_syncTreeWidth = new JCheckBoxPanel("リスト形式と新聞形式のツリーペーンの幅を同期する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
649                         jCBP_syncTreeWidth.setSelected(env.getSyncTreeWidth());\r
650                         // RELOADリスナー不要\r
651                         \r
652                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
653                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_shortExtMark = new JCheckBoxPanel("「★延長注意★」を「(延)」に短縮表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
654                         jCBP_shortExtMark.setSelected(env.getShortExtMark());\r
655                         // RELOADリスナー不要\r
656                         \r
657                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
658                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBX_snapshotFmt = new JComboBoxPanel("スナップショットの画像形式",LABEL_WIDTH,250,true), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
659                         for ( SnapshotFmt s : SnapshotFmt.values() ) {\r
660                                 jCBX_snapshotFmt.addItem(s);\r
661                         }\r
662                         jCBX_snapshotFmt.setSelectedItem(env.getSnapshotFmt());\r
663                         // RELOADリスナー不要\r
664                         \r
665                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
666                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_printSnapshot = new JCheckBoxPanel("スナップショットボタンで印刷を実行する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
667                         jCBP_printSnapshot.setSelected(env.getPrintSnapshot());\r
668                         // RELOADリスナー不要\r
669                         \r
670                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
671                         int marks_h = PARTS_HEIGHT*12; \r
672                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_showmarks("表示マークの選択"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
673                         CommonSwingUtils.putComponentOn(jPanel_setting, getJScrollPane_showmarks(), 320, marks_h, LABEL_WIDTH+SEP_WIDTH, y);\r
674                         // ★★★ RELOADリスナーは getJScrollPane_showmarks()内でつける\r
675                         \r
676                         y+=(marks_h+SEP_HEIGHT);\r
677                         int cbitems_w = 320;\r
678                         int cbitems_h = PARTS_HEIGHT*8;\r
679                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_clipboard("クリップボードアイテムの選択"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
680                         CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_clipboard_up("↑"), 50, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+10+cbitems_w, y);\r
681                         CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_clipboard_down("↓"), 50, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+10+cbitems_w, y+PARTS_HEIGHT+SEP_WIDTH);\r
682                         CommonSwingUtils.putComponentOn(jPanel_setting, getJScrollPane_clipboard(), cbitems_w, cbitems_h, LABEL_WIDTH+SEP_WIDTH, y);\r
683                         // RELOADリスナー不要\r
684   \r
685                         y += (cbitems_h + SEP_HEIGHT);\r
686                         int mitable_h = PARTS_HEIGHT*8;\r
687                         {\r
688                                 int col1_w = 150;\r
689                                 int col2_w = 400;\r
690                                 int mitable_w = col1_w+col2_w;\r
691                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_menuitem("右クリックメニューの実行アイテム"), LABEL_WIDTH,PARTS_HEIGHT, SEP_WIDTH, y);\r
692                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_mikey(),col1_w, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
693                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_mival(),col2_w, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+col1_w, y);\r
694                                 int yz = y;\r
695                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_miadd("登録"),75, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+mitable_w+SEP_WIDTH, yz);\r
696                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_midel("削除"),75, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+mitable_w+SEP_WIDTH, yz += PARTS_HEIGHT+SEP_HEIGHT_NALLOW);\r
697                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_miup("↑"), 50, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+mitable_w+SEP_WIDTH, yz += PARTS_HEIGHT+SEP_HEIGHT);\r
698                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJButton_midown("↓"), 50, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+mitable_w+SEP_WIDTH, yz += PARTS_HEIGHT+SEP_HEIGHT_NALLOW);\r
699                                 y += (PARTS_HEIGHT + SEP_HEIGHT);\r
700                                 CommonSwingUtils.putComponentOn(jPanel_setting,getJScrollPane_mitable(col1_w,col2_w), mitable_w, mitable_h, LABEL_WIDTH+SEP_WIDTH, y);\r
701                                 // RELOADリスナー不要\r
702                         }\r
703 \r
704                         /*\r
705                          * Web番組表対応 \r
706                          */\r
707                         \r
708                         y+=(mitable_h+BLOCK_SEP_HEIGHT);\r
709                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<Web番組表対応>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
710                         \r
711                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
712                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_continueTomorrow = new JCheckBoxPanel("29時をまたぐ番組を検出し同一視する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
713                         jCBP_continueTomorrow.setSelected(env.getContinueTomorrow());\r
714                         jCBP_continueTomorrow.addItemListener(IL_RELOAD_PROG_NEEDED);\r
715                         \r
716                         {\r
717                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
718                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_cacheTimeLimit = new JSliderPanel("番組表キャッシュの有効時間(0:無制限)",LABEL_WIDTH,0,72,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
719                                 jSP_cacheTimeLimit.setValue((env.getCacheTimeLimit()+1)%73);\r
720                                 // RELOADリスナー不要\r
721 \r
722                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
723                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBX_shutdownCmd = new JComboBoxPanel("┗ シャットダウンコマンド",LABEL_WIDTH,250,true), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
724                                 jCBX_shutdownCmd.setEditable(true);\r
725                                 jCBX_shutdownCmd.addItem(env.getShutdownCmd());\r
726                                 for ( String cmd : Env.SHUTDOWN_COMMANDS ) {\r
727                                         jCBX_shutdownCmd.addItem(cmd);\r
728                                 }\r
729                                 // RELOADリスナー不要\r
730 \r
731                                 // 連動設定\r
732                                 \r
733                                 jSP_cacheTimeLimit.addChangeListener(cl_cachetimelimit);\r
734                                 \r
735                                 jSP_cacheTimeLimit.setValue(env.getCacheTimeLimit());\r
736                         }\r
737                         \r
738                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
739                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※起動時に、Web番組表の再取得を自動で「実行させたくない」場合は0にしてください。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
740                         y+=(PARTS_HEIGHT);\r
741                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※シャットダウンコマンドを設定すると、Web番組表取得メニューに「CSのみ取得(取得後シャットダウン)」が追加されます。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
742                         \r
743                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
744                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_expandTo8 = new JCheckBoxPanel("可能なら番組表を8日分取得する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
745                         jCBP_expandTo8.setSelected(env.getExpandTo8());\r
746                         jCBP_expandTo8.addItemListener(IL_RELOAD_PROG_NEEDED);\r
747 \r
748                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
749                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_autoEventIdComplete = new JCheckBoxPanel("予約ダイアログを開いたときに自動で番組IDを取得する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
750                         jCBP_autoEventIdComplete.setSelected(env.getAutoEventIdComplete());\r
751                         // RELOADリスナー不要\r
752 \r
753                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
754                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_splitEpno = new JCheckBoxPanel("タイトルに話数が含まれる場合に以降を分離する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
755                         jCBP_splitEpno.setSelected(env.getSplitEpno());\r
756                         jCBP_splitEpno.addItemListener(IL_RELOAD_PROG_NEEDED);\r
757                                 \r
758                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
759                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_fixTitle = new JCheckBoxPanel("タイトル先頭の「アニメ 」を削除(NHKのみ)",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
760                         jCBP_fixTitle.setSelected(env.getFixTitle());\r
761                         jCBP_fixTitle.addItemListener(IL_RELOAD_PROG_NEEDED);\r
762                         \r
763                         y +=(PARTS_HEIGHT+SEP_HEIGHT);\r
764                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_ngword("NGワード(;区切りで複数指定可)"), LABEL_WIDTH,PARTS_HEIGHT, SEP_WIDTH, y);\r
765                         CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_ngword(CommonUtils.joinStr(";", env.getNgword())),600, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
766                         jTextField_ngword.getDocument().addDocumentListener(DL_RELOAD_PROG_NEEDED);\r
767                         \r
768                         \r
769                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
770                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_userAgent("User-Agent"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
771                         CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_userAgent(env.getUserAgent()), 600, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
772                         // RELOADリスナー不要\r
773                         \r
774                         {\r
775                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
776                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_useProxy = new JCheckBoxPanel("HTTPプロキシを有効にする",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
777                                 jCBP_useProxy.setSelected( ! env.getUseProxy());\r
778                                 // RELOADリスナー不要\r
779                         \r
780                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
781                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_proxy("┗ HTTPプロキシ/ポート"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
782                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_proxyAddr(env.getProxyAddr()), 200, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
783                                 CommonSwingUtils.putComponentOn(jPanel_setting, getJTextField_proxyPort(env.getProxyPort()), 100, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+210, y);\r
784                                 // RELOADリスナー不要\r
785                                 \r
786                                 // 連動設定\r
787 \r
788                                 jCBP_useProxy.addItemListener(al_useproxy);\r
789 \r
790                                 jCBP_useProxy.setSelected( ! jCBP_useProxy.isSelected());\r
791                         }\r
792                         \r
793                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
794                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_useSyobocal = new JCheckBoxPanel("【アニメ】しょぼいカレンダーを利用する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
795                         jCBP_useSyobocal.setSelected(env.getUseSyobocal());\r
796                         jCBP_useSyobocal.addItemListener(IL_RELOAD_PROG_NEEDED);\r
797                         \r
798                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
799                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※アニメなんか興味ないよ!という場合はチェックを外して再起動してください。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
800                         \r
801                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
802                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_historyOnlyUpdateOnce = new JCheckBoxPanel("日に一回しか新着履歴を更新しない",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
803                         jCBP_historyOnlyUpdateOnce.setSelected(env.getHistoryOnlyUpdateOnce());\r
804                         // RELOADリスナー不要\r
805                         \r
806                         {\r
807                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
808                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_usePassedProgram = new JCheckBoxPanel("過去ログを記録する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
809                                 jCBP_usePassedProgram.setSelected( ! env.getUsePassedProgram());\r
810                                 // RELOADリスナー不要\r
811                                 \r
812                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
813                                 CommonSwingUtils.putComponentOn(jPanel_setting, jSP_prepPassedProgramCount = new JSliderPanel("┗ 何日先のログまで過去ログ用に保存するか",LABEL_WIDTH,1,8,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
814                                 jSP_prepPassedProgramCount.setValue(env.getPrepPassedProgramCount());\r
815                                 // RELOADリスナー不要\r
816                                 \r
817                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
818                                 CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※保存期間を4日先までにして1週間旅行に出かけると7日-4日=3日分の過去ログがロストすることになります。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
819                                 \r
820                                 // 連動設定\r
821                                 \r
822                                 jCBP_usePassedProgram.addItemListener(al_usepassedprogram);\r
823                                 \r
824                                 jCBP_usePassedProgram.setSelected( ! jCBP_usePassedProgram.isSelected());\r
825                         }\r
826                         \r
827                         /*\r
828                          * レコーダ対応 \r
829                          */\r
830 \r
831                         y+=(PARTS_HEIGHT+BLOCK_SEP_HEIGHT);\r
832                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<レコーダ対応>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
833                         \r
834                         int getdetail_h = PARTS_HEIGHT*3+SEP_HEIGHT_NALLOW*2;\r
835                         \r
836                         {\r
837                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
838                                 CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_getRdReserveDetails = new JRadioButtonPanel("予約一覧取得時に詳細情報も取得する",LABEL_WIDTH), PARTS_WIDTH, getdetail_h, SEP_WIDTH, y);\r
839                                 jRBP_getRdReserveDetails.add("毎回確認する",true);\r
840                                 jRBP_getRdReserveDetails.add("常に取得する",false);\r
841                                 jRBP_getRdReserveDetails.add("常に取得しない",false);\r
842                                 // RELOADリスナー不要\r
843                                 \r
844                                 y+=(getdetail_h+SEP_HEIGHT);\r
845                                 CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_getRdAutoReserves = new JRadioButtonPanel("予約一覧取得時に自動予約一覧も取得する",LABEL_WIDTH), PARTS_WIDTH, getdetail_h, SEP_WIDTH, y);\r
846                                 jRBP_getRdAutoReserves.add("毎回確認する",true);\r
847                                 jRBP_getRdAutoReserves.add("常に取得する",false);\r
848                                 jRBP_getRdAutoReserves.add("常に取得しない",false);\r
849                                 // RELOADリスナー不要\r
850                                 \r
851                                 y+=(getdetail_h+SEP_HEIGHT);\r
852                                 CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_getRdRecorded = new JRadioButtonPanel("予約一覧取得時に録画結果一覧も取得する",LABEL_WIDTH), PARTS_WIDTH, getdetail_h, SEP_WIDTH, y);\r
853                                 jRBP_getRdRecorded.add("毎回確認する",true);\r
854                                 jRBP_getRdRecorded.add("常に取得する",false);\r
855                                 jRBP_getRdRecorded.add("常に取得しない",false);\r
856                                 // RELOADリスナー不要\r
857                                 \r
858                                 // 選択肢\r
859                                 updateSelections();\r
860                                 \r
861                                 y+=(getdetail_h+SEP_HEIGHT);\r
862                                 CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※「常に取得しない」を選択した場合でも、ツールバーのプルダウンメニューから強制的に取得を実行できます。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
863                         }\r
864                         \r
865                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
866                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBX_recordedSaveScope = new JComboBoxPanel("録画結果一覧の保存期間",LABEL_WIDTH,250,true), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
867                         jCBX_recordedSaveScope.addItem("保存しない");\r
868                         for ( int n=1; n<=HDDRecorder.SCOPEMAX; n++ ) {\r
869                                 jCBX_recordedSaveScope.addItem(String.format("%d日 (%d週)",n,(n/7)+1));\r
870                         }\r
871                         jCBX_recordedSaveScope.setSelectedIndex(env.getRecordedSaveScope());\r
872                         // RELOADリスナー不要\r
873                         \r
874                         y+=(getdetail_h+SEP_HEIGHT);\r
875                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("NULLプラグインでのカレンダ連携設定はレコーダ設定に移動しました"), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
876                         \r
877                         /*\r
878                          * 予約\r
879                          */\r
880 \r
881                         y+=(75+BLOCK_SEP_HEIGHT);\r
882                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<予約>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
883                         \r
884                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
885                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_spoex_extend = new JSliderPanel("延長警告の録画時間延長幅(分)",LABEL_WIDTH,0,180,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
886                         jSP_spoex_extend.setValue(Integer.valueOf(env.getSpoexLength()));\r
887                         // RELOADリスナー不要\r
888                         \r
889                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
890                         int ovarlap_h = PARTS_HEIGHT*2+SEP_HEIGHT_NALLOW*1;\r
891                         CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_overlapUp = new JRadioButtonPanel("録画時間の前",LABEL_WIDTH), PARTS_WIDTH, ovarlap_h, SEP_WIDTH, y);\r
892                         jRBP_overlapUp.add("なにもしない",! (env.getOverlapUp()));\r
893                         jRBP_overlapUp.add("1分前倒し",(env.getOverlapUp()));\r
894                         // RELOADリスナー不要\r
895 \r
896                         y+=(ovarlap_h+SEP_HEIGHT);\r
897                         int ovarlap2_h = PARTS_HEIGHT*3+SEP_HEIGHT_NALLOW*2;\r
898                         CommonSwingUtils.putComponentOn(jPanel_setting, jRBP_overlapDown = new JRadioButtonPanel("録画時間の後ろ",LABEL_WIDTH), PARTS_WIDTH, ovarlap2_h, SEP_WIDTH, y);\r
899                         jRBP_overlapDown.add("なにもしない",! (env.getOverlapDown() || env.getOverlapDown2()));\r
900                         jRBP_overlapDown.add("1分延ばす",(env.getOverlapDown()));\r
901                         jRBP_overlapDown.add("1分短縮(NHK以外)",(env.getOverlapDown2()));\r
902                         // RELOADリスナー不要\r
903 \r
904                         y+=(ovarlap2_h+SEP_HEIGHT);\r
905                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_autoFolderSelect("自動フォルダ選択を有効にする"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
906                         CommonSwingUtils.putComponentOn(jPanel_setting, getJCheckBox_autoFolderSelect(env.getAutoFolderSelect()), 100, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
907                         // RELOADリスナー不要\r
908 \r
909                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
910                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_enableCHAVsetting("AV自動設定キーをジャンルからCHに"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
911                         CommonSwingUtils.putComponentOn(jPanel_setting, getJCheckBox_enableCHAVsetting(env.getEnableCHAVsetting()), 100, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
912                         // RELOADリスナー不要\r
913                         \r
914                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
915                         CommonSwingUtils.putComponentOn(jPanel_setting, jSP_rangeLikeRsv = new JSliderPanel("類似予約の検索時間範囲(0:無制限)",LABEL_WIDTH,0,24,200), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
916                         jSP_rangeLikeRsv.setValue(env.getRangeLikeRsv());\r
917                         // RELOADリスナー不要\r
918                         \r
919                         {\r
920                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
921                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_givePriorityToReserved = new JCheckBoxPanel("類似予約がある場合は情報を引き継ぐ",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
922                                 jCBP_givePriorityToReserved.setSelected( ! env.getGivePriorityToReserved());\r
923                                 // RELOADリスナー不要\r
924 \r
925                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
926                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_givePriorityToReservedTitle = new JCheckBoxPanel("┗ 類似予約のタイトルを引き継ぐ",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
927                                 jCBP_givePriorityToReservedTitle.setSelected(env.getGivePriorityToReservedTitle());\r
928                                 // RELOADリスナー不要\r
929                                 \r
930                                 // 連動設定\r
931 \r
932                                 jCBP_givePriorityToReserved.addItemListener(al_giveprioritytoreserved);\r
933                                 \r
934                                 jCBP_givePriorityToReserved.setSelected( ! jCBP_givePriorityToReserved.isSelected());\r
935                         }\r
936                         \r
937                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
938                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_adjoiningNotRepetition = new JCheckBoxPanel("終了時刻と開始時刻が重なる番組でも重複扱いしない",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
939                         jCBP_adjoiningNotRepetition.setSelected(env.getAdjoiningNotRepetition());\r
940                         // RELOADリスナー不要\r
941                         \r
942                         {\r
943                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
944                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_rsv_showallite = new JCheckBoxPanel("予約一覧で繰り返し予約を展開する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
945                                 jCBP_rsv_showallite.setSelected( ! env.getShowAllIterationItem());\r
946                                 // RELOADリスナー不要\r
947                                 \r
948                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
949                                 CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_rsv_itecolor = new JLabel("┗ 展開した繰り返し予約の2回目以降の文字色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
950                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_rsv_itecolor = new JCCLabel("文字色",env.getIterationItemForeground(),false,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
951                                 // RELOADリスナー不要\r
952                                 \r
953                                 jCBP_rsv_showallite.addItemListener(al_showallite);\r
954                                 \r
955                                 // Fire!\r
956                                 jCBP_rsv_showallite.setSelected( ! jCBP_rsv_showallite.isSelected());\r
957                         }\r
958                         \r
959                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
960                         CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_rsv_tunshortcolor = new JLabel("チューナー不足警告の背景色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
961                         CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_rsv_tunshortcolor = new JCCLabel("チューナー不足警告の背景色",env.getTunerShortColor(),true,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
962                         // RELOADリスナー不要\r
963                         \r
964                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
965                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※チューナー不足警告は、レコーダの予約一覧上に表示される警告情報を反映しています。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
966                         y+=(PARTS_HEIGHT);\r
967                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※EDCBの場合、チューナー不足警告は鯛ナビからの予約アクションでは更新されませんので、必要に応じて予約一覧の再取得を行って更新してください。"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
968                         \r
969                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
970                         CommonSwingUtils.putComponentOn(jPanel_setting, jLabel_rsv_recedcolor = new JLabel("正常録画済み(と思われる)予約の背景色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
971                         CommonSwingUtils.putComponentOn(jPanel_setting, jCCL_rsv_recedcolor = new JCCLabel("正常録画済み(と思われる)予約の背景色",env.getRecordedColor(),true,parent,ccwin), CCLABEL_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
972                         // RELOADリスナー不要\r
973                         \r
974                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
975                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_useAutocomplete = new JCheckBoxPanel("【RD】タイトル自動補完機能を使用する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
976                         jCBP_useAutocomplete.setSelected(env.getUseAutocomplete());\r
977                         // RELOADリスナー不要\r
978                         \r
979                         /*\r
980                          * その他 \r
981                          */\r
982 \r
983                         y+=(PARTS_HEIGHT+BLOCK_SEP_HEIGHT);\r
984                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("<<<その他>>>"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
985 \r
986                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
987                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBX_updateMethod = new JComboBoxPanel("起動時にアップデートを確認する",LABEL_WIDTH,250,true), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
988                         for ( UpdateOn u : UpdateOn.values() ) {\r
989                                 jCBX_updateMethod.addItem(u);\r
990                         }\r
991                         jCBX_updateMethod.setSelectedItem(env.getUpdateMethod());\r
992                         // RELOADリスナー不要\r
993                         \r
994                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
995                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_disableBeep = new JCheckBoxPanel("beep禁止",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
996                         jCBP_disableBeep.setSelected(env.getDisableBeep());\r
997                         // RELOADリスナー不要\r
998 \r
999                         {\r
1000                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1001                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_showSysTray = new JCheckBoxPanel("システムトレイにアイコンを表示",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1002                                 jCBP_showSysTray.setSelected( ! env.getShowSysTray());\r
1003                                 // RELOADリスナー不要\r
1004 \r
1005                                 y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1006                                 CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_hideToTray = new JCheckBoxPanel("┗ 最小化時はシステムトレイに隠す",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1007                                 jCBP_hideToTray.setSelected(env.getHideToTray());\r
1008                                 // RELOADリスナー不要\r
1009                                 \r
1010                                 // 連動設定\r
1011 \r
1012                                 jCBP_showSysTray.addItemListener(al_showsystray);\r
1013                                 \r
1014                                 jCBP_showSysTray.setSelected( ! jCBP_showSysTray.isSelected());\r
1015                         }\r
1016 \r
1017                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1018                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_onlyOneInstance = new JCheckBoxPanel("多重起動禁止(要再起動)",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1019                         jCBP_onlyOneInstance.setSelected(env.getOnlyOneInstance());\r
1020                         // RELOADリスナー不要\r
1021                         \r
1022                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1023                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_lookAndFeel("ルック&フィール"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1024                         CommonSwingUtils.putComponentOn(jPanel_setting, getJComboBox_lookAndFeel(), 250, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
1025                         // RELOADリスナー不要\r
1026                         \r
1027                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1028                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_font("表示フォント"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1029                         CommonSwingUtils.putComponentOn(jPanel_setting, getJComboBox_font(), 250, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
1030                         CommonSwingUtils.putComponentOn(jPanel_setting, getJComboBox_fontSize(), 100, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH+260, y);\r
1031                         // RELOADリスナー不要\r
1032                         \r
1033                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1034                         CommonSwingUtils.putComponentOn(jPanel_setting, new JLabel("┗ 表示サンプル"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1035                         CommonSwingUtils.putComponentOn(jPanel_setting, getJLabel_fontSample(""), 360, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
1036                         \r
1037                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1038                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_useGTKRC = new JCheckBoxPanel("鯛ナビ専用のgtkrcを使う",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1039                         jCBP_useGTKRC.setSelected(env.getUseGTKRC());\r
1040                         \r
1041                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1042                         CommonSwingUtils.putComponentOn(jPanel_setting, getNoticeMsg("※ルック&フィールがGTKの場合は再起動するまで表示フォントの設定は反映されません(@see env/_gtkrc-2.0)"), DESCRIPTION_WIDTH, PARTS_HEIGHT, SEP_WIDTH*2, y);\r
1043                         \r
1044                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1045                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_useRundll32 = new JCheckBoxPanel("【Win】ファイルオープンにrundll32を使用する",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1046                         jCBP_useRundll32.setSelected(env.getUseRundll32());\r
1047                         // RELOADリスナー不要\r
1048                         \r
1049                         y+=(PARTS_HEIGHT+SEP_HEIGHT);\r
1050                         CommonSwingUtils.putComponentOn(jPanel_setting, jCBP_debug = new JCheckBoxPanel("【注意】デバッグログ出力を有効にする",LABEL_WIDTH), PARTS_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
1051                         jCBP_debug.setSelected(env.getDebug());\r
1052                         // RELOADリスナー不要\r
1053 \r
1054                         y += (PARTS_HEIGHT + 50);\r
1055                         \r
1056                         // 画面の全体サイズを決める\r
1057                         Dimension d = new Dimension(PANEL_WIDTH,y);\r
1058                         jPanel_setting.setPreferredSize(d);\r
1059                 }\r
1060                 \r
1061                 return jPanel_setting;\r
1062         }\r
1063         \r
1064         /*******************************************************************************\r
1065          * アクション\r
1066          ******************************************************************************/\r
1067         \r
1068         // 更新確定ボタン押下時の処理\r
1069         private void updateEnvs() {\r
1070                 \r
1071                 TatCount tc = new TatCount();\r
1072                 \r
1073                 StWin.clear();\r
1074                 \r
1075                 new SwingBackgroundWorker(false) {\r
1076                         \r
1077                         @Override\r
1078                         protected Object doWorks() throws Exception {\r
1079                                 \r
1080                                 StWin.appendMessage(MSGID+"設定を保存します");\r
1081                                 \r
1082                                 int idx;\r
1083         \r
1084                                 // リスト形式\r
1085                                 env.setDisableFazzySearch(jCBP_disableFazzySearch.isSelected());\r
1086                                 env.setDisableFazzySearchReverse(jCBP_disableFazzySearchReverse.isSelected());\r
1087                                 env.setDefaultFazzyThreshold(jSP_defaultFazzyThreshold.getValue());\r
1088                                 env.setSyoboFilterByCenters(jCBP_syoboFilterByCenters.isSelected());\r
1089                                 env.setDisplayPassedEntry(jCBP_displayPassedEntry.isSelected());\r
1090                                 env.setShowRsvPickup(jCBP_showRsvPickup.isSelected());\r
1091                                 env.setShowRsvDup(jCBP_showRsvDup.isSelected());\r
1092                                 env.setShowRsvUra(jCBP_showRsvUra.isSelected());\r
1093                                 env.setRsvdLineEnhance(jCBP_rsvdLineEnhance.isSelected());\r
1094                                 env.setRsvdLineColor(jCCL_rsvdLineColor.getChoosed());\r
1095                                 env.setPickedLineColor(jCCL_pickedLineColor.getChoosed());\r
1096                                 env.setCurrentLineEnhance(jCBP_currentLineEnhance.isSelected());\r
1097                                 env.setCurrentLineColor(jCCL_currentLineColor.getChoosed());\r
1098                                 env.setCurrentAfter(jSP_currentAfter.getValue()*60);\r
1099                                 env.setCurrentBefore(jSP_currentBefore.getValue()*60);\r
1100                                 env.setMatchedKeywordColor(jCCL_matchedKeywordColor.getChoosed());\r
1101                                 env.setShowWarnDialog(jCBP_showWarnDialog.isSelected());\r
1102                                 env.setSplitMarkAndTitle(jCBP_splitMarkAndTitle.isSelected());\r
1103                                 env.setShowDetailOnList(jCBP_showDetailOnList.isSelected());\r
1104                                 env.setRsvTargets(jSP_rsvTargets.getValue());\r
1105                                 env.setRowHeaderVisible(jCBP_rowHeaderVisible.isSelected());\r
1106                                 env.setDblClkCmd((DblClkCmd) jCBX_dblClkCmd.getSelectedItem());\r
1107                                 env.setSearchResultMax(jSP_searchResultMax.getValue());\r
1108                                 env.setSearchResultBufferMax(jSP_searchResultBufferMax.getValue());\r
1109                                 \r
1110                                 // 新聞形式関連\r
1111                                 {\r
1112                                         String selected = jRBP_getPaperRedrawType.getSelectedItem().getText();\r
1113                                         if ( PARER_REDRAW_PAGER.equals(selected) ) {\r
1114                                                 env.setDrawcacheEnable(false);\r
1115                                                 env.setCenterPerPage(jSP_centerPerPage.getValue());\r
1116                                         }\r
1117                                         else if ( PARER_REDRAW_CACHE.equals(selected) ) {\r
1118                                                 env.setDrawcacheEnable(true);\r
1119                                                 env.setCenterPerPage(0);\r
1120                                         }\r
1121                                         else if ( PARER_REDRAW_NORMAL.equals(selected) ) {\r
1122                                                 env.setDrawcacheEnable(false);\r
1123                                                 env.setCenterPerPage(0);\r
1124                                         }\r
1125                                 }\r
1126                                 env.setAllPageSnapshot(jCBP_allPageSnapshot.isSelected());\r
1127                                 env.setTooltipEnable(jCBP_tooltipEnable.isSelected());\r
1128                                 env.setTooltipInitialDelay(jSP_tooltipInitialDelay.getValue());\r
1129                                 env.setTooltipDismissDelay(jSP_tooltipDismissDelay.getValue());\r
1130                                 env.setTimerbarScrollEnable(jCBP_timerbarScrollEnable.isSelected());\r
1131                                 env.setPassedLogLimit(jSP_passedLogLimit.getValue());\r
1132                                 env.setEffectComboToPaper(jCBP_effectComboToPaper.isSelected());\r
1133                                 env.setSnapshotFmt((SnapshotFmt) jCBX_snapshotFmt.getSelectedItem());\r
1134                                 env.setPrintSnapshot(jCBP_printSnapshot.isSelected());\r
1135                                 \r
1136                                 // リスト・新聞形式共通\r
1137                                 env.setDisplayOnlyExecOnEntry(jCBP_displayOnlyExecOnEntry.isSelected());\r
1138                                 env.setDisplayPassedReserve(jCBP_displayPassedReserve.isSelected());\r
1139                                 env.setShowOnlyNonrepeated(jCBP_showOnlyNonrepeated.isSelected());\r
1140                                 env.setAdjLateNight(jCBP_adjLateNight.isSelected());\r
1141                                 env.setRootNodeVisible(jCBP_rootNodeVisible.isSelected());\r
1142                                 env.setSyncTreeWidth(jCBP_syncTreeWidth.isSelected());\r
1143                                 env.setShortExtMark(jCBP_shortExtMark.isSelected());\r
1144                                 for (int row=0; row<jTable_showmarks.getRowCount(); row++) {\r
1145                                         env.getOptMarks().put((TVProgram.ProgOption) jTable_showmarks.getValueAt(row, 2), (Boolean) jTable_showmarks.getValueAt(row, 0));\r
1146                                 }\r
1147                                 for (int row=0; row<jTable_clipboard.getRowCount(); row++) {\r
1148                                         cbitems.get(row).setB((Boolean)jTable_clipboard.getValueAt(row, 0));\r
1149                                         cbitems.get(row).setItem((String)jTable_clipboard.getValueAt(row, 1));\r
1150                                         cbitems.get(row).setId((Integer)jTable_clipboard.getValueAt(row, 2));\r
1151                                 }\r
1152                                 env.getTvCommand().removeAll(env.getTvCommand());\r
1153                                 for (int row = 0; row < jTable_mitable.getRowCount(); row++) {\r
1154                                         TextValueSet tv = new TextValueSet();\r
1155                                         tv.setText((String) jTable_mitable.getValueAt(row, 0));\r
1156                                         tv.setValue((String) jTable_mitable.getValueAt(row, 1));\r
1157                                         env.getTvCommand().add(tv);\r
1158                                 }\r
1159                                 \r
1160                                 // Web番組表対応\r
1161                                 env.setContinueTomorrow(jCBP_continueTomorrow.isSelected());\r
1162                                 env.setCacheTimeLimit(jSP_cacheTimeLimit.getValue());\r
1163                                 if ( env.getCacheTimeLimit() == 0 ) {\r
1164                                         env.setShutdownCmd((String) jCBX_shutdownCmd.getSelectedItem());\r
1165                                 }\r
1166                                 else {\r
1167                                         env.setShutdownCmd("");\r
1168                                 }\r
1169                                 env.setExpandTo8(jCBP_expandTo8.isSelected());\r
1170                                 //env.setUseDetailCache(jCBP_useDetailCache.isSelected());\r
1171                                 env.setUseDetailCache(false);\r
1172                                 env.setAutoEventIdComplete(jCBP_autoEventIdComplete.isSelected());\r
1173                                 env.setSplitEpno(jCBP_splitEpno.isSelected());\r
1174                                 env.setTraceOnlyTitle(jCBP_traceOnlyTitle.isSelected());\r
1175                                 env.setFixTitle(jCBP_fixTitle.isSelected());\r
1176                                 env.setNgword(jTextField_ngword.getText());\r
1177                                 env.setUserAgent(jTextField_userAgent.getText());\r
1178                                 env.setUseProxy(jCBP_useProxy.isSelected());\r
1179                                 env.setProxyAddr((String)jTextField_proxyAddr.getText());\r
1180                                 env.setProxyPort((String)jTextField_proxyPort.getText());\r
1181                                 env.setUseSyobocal(jCBP_useSyobocal.isSelected());\r
1182                                 env.setHistoryOnlyUpdateOnce(jCBP_historyOnlyUpdateOnce.isSelected());\r
1183                                 env.setUsePassedProgram(jCBP_usePassedProgram.isSelected());\r
1184                                 env.setPrepPassedProgramCount(jSP_prepPassedProgramCount.getValue());\r
1185                                 \r
1186                                 // レコーダ対応\r
1187                                 env.setForceLoadReserveDetails(jRBP_getRdReserveDetails.getSelectedIndex());\r
1188                                 env.setForceLoadAutoReserves(jRBP_getRdAutoReserves.getSelectedIndex());\r
1189                                 env.setForceLoadRecorded(jRBP_getRdRecorded.getSelectedIndex());\r
1190                                 env.setRecordedSaveScope(jCBX_recordedSaveScope.getSelectedIndex());\r
1191         \r
1192                                 // 予約\r
1193                                 env.setSpoexLength(String.format("%d",jSP_spoex_extend.getValue()));\r
1194                                 idx = jRBP_overlapUp.getSelectedIndex();\r
1195                                 switch (idx) {\r
1196                                 case 1:\r
1197                                         env.setOverlapUp(true);\r
1198                                         break;\r
1199                                 default:\r
1200                                         env.setOverlapUp(false);\r
1201                                         break;\r
1202                                 }\r
1203                                 idx = jRBP_overlapDown.getSelectedIndex();\r
1204                                 switch (idx) {\r
1205                                 case 1:\r
1206                                         env.setOverlapDown(true);\r
1207                                         env.setOverlapDown2(false);\r
1208                                         break;\r
1209                                 case 2:\r
1210                                         env.setOverlapDown(false);\r
1211                                         env.setOverlapDown2(true);\r
1212                                         break;\r
1213                                 default:\r
1214                                         env.setOverlapDown(false);\r
1215                                         env.setOverlapDown2(false);\r
1216                                         break;\r
1217                                 }\r
1218                                 env.setAutoFolderSelect(jCheckBox_autoFolderSelect.isSelected());\r
1219                                 env.setEnableCHAVsetting(jCheckBox_enableCHAVsetting.isSelected());\r
1220                                 env.setRangeLikeRsv(jSP_rangeLikeRsv.getValue());\r
1221                                 env.setGivePriorityToReserved(jCBP_givePriorityToReserved.isSelected());\r
1222                                 env.setGivePriorityToReservedTitle(jCBP_givePriorityToReservedTitle.isSelected());\r
1223                                 env.setAdjoiningNotRepetition(jCBP_adjoiningNotRepetition.isSelected());\r
1224                                 env.setShowAllIterationItem(jCBP_rsv_showallite.isSelected());\r
1225                                 env.setIterationItemForeground(jCCL_rsv_itecolor.getChoosed());\r
1226                                 env.setTunerShortColor(jCCL_rsv_tunshortcolor.getChoosed());\r
1227                                 env.setRecordedColor(jCCL_rsv_recedcolor.getChoosed());\r
1228                                 env.setUseAutocomplete(jCBP_useAutocomplete.isSelected());\r
1229                                 \r
1230                                 // その他の設定\r
1231                                 env.setUpdateMethod((UpdateOn) jCBX_updateMethod.getSelectedItem());\r
1232                                 env.setDisableBeep(jCBP_disableBeep.isSelected());\r
1233                                 env.setShowSysTray(jCBP_showSysTray.isSelected());\r
1234                                 env.setHideToTray(jCBP_hideToTray.isSelected());\r
1235                                 env.setOnlyOneInstance(jCBP_onlyOneInstance.isSelected());\r
1236                                 env.setLookAndFeel((String) jComboBox_lookAndFeel.getSelectedItem());\r
1237                                 env.setFontName((String) jComboBox_font.getSelectedItem());\r
1238                                 env.setFontSize(Integer.valueOf((String) jComboBox_fontSize.getSelectedItem()));\r
1239                                 env.setUseGTKRC(jCBP_useGTKRC.isSelected());\r
1240                                 env.setUseRundll32(jCBP_useRundll32.isSelected());\r
1241                                 env.setDebug(jCBP_debug.isSelected());\r
1242         \r
1243                                 // 設定保存\r
1244                                 setEnv(reload_prog_needed);\r
1245                                 setUpdateButtonEnhanced(false);\r
1246         \r
1247                                 return null;\r
1248                         }\r
1249                         \r
1250                         @Override\r
1251                         protected void doFinally() {\r
1252                                 StWinSetVisible(false);\r
1253                         }\r
1254                 }.execute();\r
1255 \r
1256                 StWinSetLocationCenter(parent);\r
1257                 StWinSetVisible(true);\r
1258                 \r
1259                 MWin.appendMessage(String.format(MSGID+"更新が完了しました。所要時間: %.2f秒",tc.end()));\r
1260         }\r
1261         \r
1262         /**\r
1263          * 各種設定タブ以外で変更したenvの内容をタブに反映する\r
1264          */\r
1265         public void updateSelections() {\r
1266                 jRBP_getRdReserveDetails.setSelectedIndex(env.getForceLoadReserveDetails());\r
1267                 jRBP_getRdAutoReserves.setSelectedIndex(env.getForceLoadAutoReserves());\r
1268                 jRBP_getRdRecorded.setSelectedIndex(env.getForceLoadRecorded());\r
1269         }\r
1270         \r
1271         /*******************************************************************************\r
1272          * リスナー\r
1273          ******************************************************************************/\r
1274         \r
1275         /*\r
1276          * 連動\r
1277          */\r
1278         \r
1279         /**\r
1280          * 変更があった場合に番組表のリロードを要求するコンポーネントにつけるリスナー\r
1281          */\r
1282         \r
1283         private void setUpdateButtonEnhanced(boolean b) {\r
1284                 if (b) {\r
1285                         jButton_update.setText("更新時番組表再取得あり");\r
1286                         jButton_update.setForeground(Color.RED);\r
1287                 }\r
1288                 else {\r
1289                         jButton_update.setText("更新を確定する");\r
1290                         jButton_update.setForeground(Color.BLACK);\r
1291                 }\r
1292                 reload_prog_needed = b;\r
1293         }\r
1294         \r
1295         private final ItemListener IL_RELOAD_PROG_NEEDED = new ItemListener() {\r
1296                 @Override\r
1297                 public void itemStateChanged(ItemEvent e) {\r
1298                         if (debug) System.err.println(DBGID+"MODIFIED");\r
1299                         setUpdateButtonEnhanced(true);\r
1300                 }\r
1301         };\r
1302         private final DocumentListener DL_RELOAD_PROG_NEEDED = new DocumentListener() {\r
1303                 @Override\r
1304                 public void removeUpdate(DocumentEvent e) {\r
1305                         if (debug) System.err.println(DBGID+"MODIFIED");\r
1306                         setUpdateButtonEnhanced(true);\r
1307                 }\r
1308                 @Override\r
1309                 public void insertUpdate(DocumentEvent e) {\r
1310                         if (debug) System.err.println(DBGID+"MODIFIED");\r
1311                         setUpdateButtonEnhanced(true);\r
1312                 }\r
1313                 @Override\r
1314                 public void changedUpdate(DocumentEvent e) {\r
1315                         if (debug) System.err.println(DBGID+"MODIFIED");\r
1316                         setUpdateButtonEnhanced(true);\r
1317                 }\r
1318         };\r
1319         private final CellEditorListener CEL_RELOAD_PROG_NEEDED = new CellEditorListener() {\r
1320                 @Override\r
1321                 public void editingStopped(ChangeEvent e) {\r
1322                         if (debug) System.err.println(DBGID+"MODIFIED");\r
1323                         setUpdateButtonEnhanced(true);\r
1324                 }\r
1325                 \r
1326                 @Override\r
1327                 public void editingCanceled(ChangeEvent e) {\r
1328                 }\r
1329         };\r
1330 \r
1331         // あいまい検索\r
1332         ItemListener al_fazzysearch = new ItemListener() {\r
1333                 @Override\r
1334                 public void itemStateChanged(ItemEvent e) {\r
1335                         if (debug) System.out.println("Fire! al_fazzysearch");\r
1336                         if (jCBP_disableFazzySearch.isSelected()) {\r
1337                                 jCBP_disableFazzySearchReverse.setEnabled(false);\r
1338                                 jSP_defaultFazzyThreshold.setEnabled(false);\r
1339                         }\r
1340                         else {\r
1341                                 jCBP_disableFazzySearchReverse.setEnabled(true);\r
1342                                 jSP_defaultFazzyThreshold.setEnabled(true);\r
1343                         }\r
1344                 }\r
1345         };\r
1346 \r
1347         // 予約行の背景色\r
1348         ItemListener al_rsvdlineenhance = new ItemListener() {\r
1349                 @Override\r
1350                 public void itemStateChanged(ItemEvent e) {\r
1351                         if (debug) System.out.println("Fire! al_rsvdlineenhance");\r
1352                         if (jCBP_rsvdLineEnhance.isSelected()) {\r
1353                                 jLabel_rsvdLineColor.setEnabled(true);\r
1354                                 jCCL_rsvdLineColor.setEnabled(true);\r
1355                                 jLabel_pickedLineColor.setEnabled(true);\r
1356                                 jCCL_pickedLineColor.setEnabled(true);\r
1357                                 \r
1358                         }\r
1359                         else {\r
1360                                 jLabel_rsvdLineColor.setEnabled(false);\r
1361                                 jCCL_rsvdLineColor.setEnabled(false);\r
1362                                 jLabel_pickedLineColor.setEnabled(false);\r
1363                                 jCCL_pickedLineColor.setEnabled(false);\r
1364                         }\r
1365                 }\r
1366         };\r
1367         \r
1368         // 現在放送中行の背景色\r
1369         ItemListener al_currentlineenhance = new ItemListener() {\r
1370                 @Override\r
1371                 public void itemStateChanged(ItemEvent e) {\r
1372                         if (debug) System.out.println("Fire! al_currentlineenhance");\r
1373                         if (jCBP_currentLineEnhance.isSelected()) {\r
1374                                 jLabel_currentLineColor.setEnabled(true);\r
1375                                 jCCL_currentLineColor.setEnabled(true);\r
1376                                 \r
1377                         }\r
1378                         else {\r
1379                                 jLabel_currentLineColor.setEnabled(false);\r
1380                                 jCCL_currentLineColor.setEnabled(false);\r
1381                         }\r
1382                 }\r
1383         };\r
1384 \r
1385         ItemListener il_paperredrawtype = new ItemListener() {\r
1386                 @Override\r
1387                 public void itemStateChanged(ItemEvent e) {\r
1388                         if (debug) System.out.println("Fire! il_paperredrawtype "+e.toString());\r
1389                         if ( e.getStateChange() == ItemEvent.SELECTED ) {\r
1390                                 String selected = ((JRadioButton)e.getItem()).getText();\r
1391                                 if ( selected.equals(PARER_REDRAW_NORMAL) ) {\r
1392                                         jSP_centerPerPage.setEnabled(false);\r
1393                                         jCBP_allPageSnapshot.setEnabled(false);\r
1394                                 }\r
1395                                 else if ( selected.equals(PARER_REDRAW_CACHE) ) {\r
1396                                         jSP_centerPerPage.setEnabled(false);\r
1397                                         jCBP_allPageSnapshot.setEnabled(false);\r
1398                                 }\r
1399                                 else if ( selected.equals(PARER_REDRAW_PAGER) ) {\r
1400                                         jSP_centerPerPage.setEnabled(true);\r
1401                                         jCBP_allPageSnapshot.setEnabled(true);\r
1402                                         jSP_centerPerPage.setValue(env.getCenterPerPage()>0?env.getCenterPerPage():7);\r
1403                                 }\r
1404                         }\r
1405                 }\r
1406         };\r
1407 \r
1408         /*\r
1409         ItemListener al_drawcacheenable = new ItemListener() {\r
1410                 @Override\r
1411                 public void itemStateChanged(ItemEvent e) {\r
1412                         if (debug) System.out.println("Fire! al_drawcacheenable");\r
1413                         if (jCBP_drawcacheEnable.isSelected()) {\r
1414                                 jCBP_pagerEnable.removeItemListener(il_pagerenable);\r
1415                                 jCBP_pagerEnable.setEnabled(false);\r
1416                                 jCBP_pagerEnable.addItemListener(il_pagerenable);\r
1417                                 \r
1418                                 jSP_centerPerPage.setEnabled(false);\r
1419                                 jCBP_allPageSnapshot.setEnabled(false);\r
1420                         }\r
1421                         else {\r
1422                                 jCBP_pagerEnable.removeItemListener(il_pagerenable);\r
1423                                 jCBP_pagerEnable.setEnabled(true);\r
1424                                 jCBP_pagerEnable.addItemListener(il_pagerenable);\r
1425                                 \r
1426                                 if (jCBP_pagerEnable.isSelected()) {\r
1427                                         jSP_centerPerPage.setEnabled(true);\r
1428                                         jCBP_allPageSnapshot.setEnabled(true);\r
1429                                 }\r
1430                                 else {\r
1431                                         jSP_centerPerPage.setEnabled(false);\r
1432                                         jCBP_allPageSnapshot.setEnabled(false);\r
1433                                 }\r
1434                         }\r
1435                 }\r
1436         };\r
1437 \r
1438         ChangeListener cl_centerperpage = new ChangeListener() {\r
1439                 @Override\r
1440                 public void stateChanged(ChangeEvent e) {\r
1441                         if (debug) System.out.println("Fire! cl_centerperpage");\r
1442                         if (jSP_centerPerPage.getValue() == 0) {\r
1443                                 jCBP_drawcacheEnable.removeItemListener(al_drawcacheenable);\r
1444                                 jCBP_drawcacheEnable.setEnabled(true);\r
1445                                 jCBP_allPageSnapshot.setEnabled(false);\r
1446                                 jCBP_drawcacheEnable.addItemListener(al_drawcacheenable);\r
1447                         }\r
1448                         else {\r
1449                                 jCBP_drawcacheEnable.removeItemListener(al_drawcacheenable);\r
1450                                 jCBP_drawcacheEnable.setSelected(false);\r
1451                                 jCBP_drawcacheEnable.setEnabled(false);\r
1452                                 jCBP_allPageSnapshot.setEnabled(true);\r
1453                                 jCBP_drawcacheEnable.addItemListener(al_drawcacheenable);\r
1454                         }\r
1455                 }\r
1456         };\r
1457         */\r
1458         \r
1459         ItemListener al_tooltipenable = new ItemListener() {\r
1460                 @Override\r
1461                 public void itemStateChanged(ItemEvent e) {\r
1462                         if (debug) System.out.println("Fire! al_tooltipenable");\r
1463                         if (jCBP_tooltipEnable.isSelected()) {\r
1464                                 jSP_tooltipInitialDelay.setEnabled(true);\r
1465                                 jSP_tooltipDismissDelay.setEnabled(true);\r
1466                         }\r
1467                         else {\r
1468                                 jSP_tooltipInitialDelay.setEnabled(false);\r
1469                                 jSP_tooltipDismissDelay.setEnabled(false);\r
1470                         }\r
1471                 }\r
1472         };\r
1473 \r
1474         ChangeListener cl_cachetimelimit = new ChangeListener() {\r
1475                 @Override\r
1476                 public void stateChanged(ChangeEvent e) {\r
1477                         if (debug) System.out.println("Fire! cl_cachetimelimit");\r
1478                         if (jSP_cacheTimeLimit.getValue() == 0) {\r
1479                                 jCBX_shutdownCmd.setEnabled(true);\r
1480                         }\r
1481                         else {\r
1482                                 jCBX_shutdownCmd.setEnabled(false);\r
1483                         }\r
1484                 }\r
1485         };\r
1486 \r
1487         ItemListener al_splitepno = new ItemListener() {\r
1488                 @Override\r
1489                 public void itemStateChanged(ItemEvent e) {\r
1490                         if (debug) System.out.println("Fire! al_splitepno");\r
1491                         if (jCBP_splitEpno.isSelected()) {\r
1492                                 jCBP_traceOnlyTitle.setEnabled(false);\r
1493                         }\r
1494                         else {\r
1495                                 jCBP_traceOnlyTitle.setEnabled(true);\r
1496                         }\r
1497                 }\r
1498         };\r
1499 \r
1500         ItemListener al_useproxy = new ItemListener() {\r
1501                 @Override\r
1502                 public void itemStateChanged(ItemEvent e) {\r
1503                         if (debug) System.out.println("Fire! al_useproxy");\r
1504                         if (jCBP_useProxy.isSelected()) {\r
1505                                 jLabel_proxy.setEnabled(true);\r
1506                                 jTextField_proxyAddr.setEnabled(true);\r
1507                                 jTextField_proxyPort.setEnabled(true);\r
1508                         }\r
1509                         else {\r
1510                                 jLabel_proxy.setEnabled(false);\r
1511                                 jTextField_proxyAddr.setEnabled(false);\r
1512                                 jTextField_proxyPort.setEnabled(false);\r
1513                         }\r
1514                 }\r
1515         };\r
1516 \r
1517         ItemListener al_usepassedprogram = new ItemListener() {\r
1518                 @Override\r
1519                 public void itemStateChanged(ItemEvent e) {\r
1520                         if (debug) System.out.println("Fire! al_usepassedprogram");\r
1521                         if (jCBP_usePassedProgram.isSelected()) {\r
1522                                 jSP_prepPassedProgramCount.setEnabled(true);\r
1523                         }\r
1524                         else {\r
1525                                 jSP_prepPassedProgramCount.setEnabled(false);\r
1526                         }\r
1527                 }\r
1528         };\r
1529 \r
1530         ItemListener al_giveprioritytoreserved = new ItemListener() {\r
1531                 @Override\r
1532                 public void itemStateChanged(ItemEvent e) {\r
1533                         if (debug) System.out.println("Fire! al_giveprioritytoreserved");\r
1534                         if (jCBP_givePriorityToReserved.isSelected()) {\r
1535                                 jCBP_givePriorityToReservedTitle.setEnabled(true);\r
1536                                 jCBP_givePriorityToReservedTitle.setSelected(true);\r
1537                         }\r
1538                         else {\r
1539                                 jCBP_givePriorityToReservedTitle.setEnabled(false);\r
1540                                 jCBP_givePriorityToReservedTitle.setSelected(false);\r
1541                         }\r
1542                 }\r
1543         };\r
1544 \r
1545         ItemListener al_showallite = new ItemListener() {\r
1546                 @Override\r
1547                 public void itemStateChanged(ItemEvent e) {\r
1548                         if ( jCBP_rsv_showallite.isSelected() ) {\r
1549                                 jLabel_rsv_itecolor.setEnabled(true);\r
1550                                 jCCL_rsv_itecolor.setEnabled(true);\r
1551                         }\r
1552                         else {\r
1553                                 jLabel_rsv_itecolor.setEnabled(false);\r
1554                                 jCCL_rsv_itecolor.setEnabled(false);\r
1555                         }\r
1556                 }\r
1557         };\r
1558         \r
1559         ItemListener al_showsystray = new ItemListener() {\r
1560                 @Override\r
1561                 public void itemStateChanged(ItemEvent e) {\r
1562                         if (debug) System.out.println(DBGID+"Fire! al_showsystray");\r
1563                         if (jCBP_showSysTray.isSelected()) {\r
1564                                 jCBP_hideToTray.setEnabled(true);\r
1565                         }\r
1566                         else {\r
1567                                 jCBP_hideToTray.setEnabled(false);\r
1568                         }\r
1569                 }\r
1570         };\r
1571         \r
1572         ActionListener al_fontChanged = new ActionListener() {\r
1573                 @Override\r
1574                 public void actionPerformed(ActionEvent e) {\r
1575                         \r
1576                         String fn = (String) jComboBox_font.getSelectedItem();\r
1577                         int fs = Integer.valueOf((String) jComboBox_fontSize.getSelectedItem());\r
1578                         \r
1579                         fontChanged(fn, fs);\r
1580                         \r
1581                         if ( jLabel_fontSample != null ) {\r
1582                                 Font f = jLabel_fontSample.getFont();\r
1583                                 jLabel_fontSample.setFont(new Font(fn,f.getStyle(),fs));\r
1584                         }\r
1585                 }\r
1586         };\r
1587         \r
1588         \r
1589         /*******************************************************************************\r
1590          * コンポーネント\r
1591          ******************************************************************************/\r
1592         \r
1593         private JLabel getNoticeMsg(String text) {\r
1594                 JLabel l = new JLabel(text);\r
1595                 l.setForeground(NOTICEMSG_COLOR);\r
1596                 return l;\r
1597         }\r
1598         \r
1599         // 更新確定ボタン\r
1600         private JButton getJButton_update(String s) {\r
1601                 if (jButton_update == null) {\r
1602                         jButton_update = new JButton(s);\r
1603                         \r
1604                         jButton_update.addActionListener(new ActionListener() {\r
1605                                 public void actionPerformed(ActionEvent e) {\r
1606                                         updateEnvs();\r
1607                                 }\r
1608                         });\r
1609                 }\r
1610                 return(jButton_update);\r
1611         }\r
1612         \r
1613         //\r
1614         private JLabel getJLabel_userAgent(String s)\r
1615         {\r
1616                 if (jLabel_userAgent == null) {\r
1617                         jLabel_userAgent = new JLabel(s);\r
1618                 }\r
1619                 return(jLabel_userAgent);\r
1620         }\r
1621         private JTextField getJTextField_userAgent(String s) {\r
1622                 if (jTextField_userAgent == null) {\r
1623                         jTextField_userAgent = new JTextFieldWithPopup();\r
1624                         jTextField_userAgent.setText(s);\r
1625                         jTextField_userAgent.setCaretPosition(0);\r
1626                 }\r
1627                 return jTextField_userAgent;\r
1628         }\r
1629         \r
1630         //\r
1631         private JLabel getJLabel_proxy(String s)\r
1632         {\r
1633                 if (jLabel_proxy == null) {\r
1634                         jLabel_proxy = new JLabel(s);\r
1635                 }\r
1636                 return(jLabel_proxy);\r
1637         }\r
1638         private JTextField getJTextField_proxyAddr(String s) {\r
1639                 if (jTextField_proxyAddr == null) {\r
1640                         jTextField_proxyAddr = new JTextFieldWithPopup();\r
1641                         jTextField_proxyAddr.setText(s);\r
1642                         jTextField_proxyAddr.setCaretPosition(0);\r
1643                 }\r
1644                 return jTextField_proxyAddr;\r
1645         }\r
1646         private JTextField getJTextField_proxyPort(String s) {\r
1647                 if (jTextField_proxyPort == null) {\r
1648                         jTextField_proxyPort = new JTextFieldWithPopup();\r
1649                         jTextField_proxyPort.setText(s);\r
1650                         jTextField_proxyPort.setCaretPosition(0);\r
1651                 }\r
1652                 return jTextField_proxyPort;\r
1653         }\r
1654         \r
1655         // 表示マークの選択\r
1656         private JLabel getJLabel_showmarks(String s) {\r
1657                 if (jLabel_showmarks == null) {\r
1658                         jLabel_showmarks = new JLabel(s);\r
1659                 }\r
1660                 return jLabel_showmarks;\r
1661         }\r
1662         private JScrollPane getJScrollPane_showmarks() {\r
1663                 if (jScrollPane_showmarks == null) {\r
1664                         jScrollPane_showmarks = new JScrollPane();\r
1665                         jScrollPane_showmarks.setViewportView(getJTable_showmarks());\r
1666                         jScrollPane_showmarks.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);\r
1667                 }\r
1668                 return(jScrollPane_showmarks);\r
1669         }\r
1670         private JNETable getJTable_showmarks() {\r
1671                 if (jTable_showmarks == null) {\r
1672                         // ヘッダの設定\r
1673                         String[] colname = {"チェック", "マーク", "ID"};\r
1674                         int[] colwidth = {50,250,0};\r
1675                         \r
1676                         //\r
1677                         DefaultTableModel model = new DefaultTableModel(colname, 0);\r
1678                         jTable_showmarks = new JNETable(model, false) {\r
1679 \r
1680                                 private static final long serialVersionUID = 1L;\r
1681 \r
1682                                 @Override\r
1683                                 public boolean isCellEditable(int row, int column) {\r
1684                                         return (column == 0);\r
1685                                 }\r
1686                         };\r
1687                         jTable_showmarks.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
1688                         DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_showmarks.getColumnModel();\r
1689                         TableColumn column = null;\r
1690                         for (int i = 0 ; i < columnModel.getColumnCount() ; i++){\r
1691                                 column = columnModel.getColumn(i);\r
1692                                 column.setPreferredWidth(colwidth[i]);\r
1693                         }\r
1694                         \r
1695                         // にゃーん\r
1696                         jTable_showmarks.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
1697    \r
1698                         // エディタに手を入れる\r
1699                         DefaultCellEditor editor = new DefaultCellEditor(new JCheckBox() {\r
1700 \r
1701                                 private static final long serialVersionUID = 1L;\r
1702 \r
1703                                 @Override\r
1704                                 public int getHorizontalAlignment() {\r
1705                                         return JCheckBox.CENTER;\r
1706                                 }\r
1707                         });\r
1708                         \r
1709                         editor.addCellEditorListener(CEL_RELOAD_PROG_NEEDED);\r
1710                         \r
1711                         //\r
1712                         jTable_showmarks.getColumn("チェック").setCellEditor(editor);\r
1713                         \r
1714                         // レンダラに手を入れる\r
1715                         DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {\r
1716 \r
1717                                 private static final long serialVersionUID = 1L;\r
1718 \r
1719                                 @Override\r
1720                                 public Component getTableCellRendererComponent(JTable table, Object value,\r
1721                                                 boolean isSelected, boolean hasFocus, int row, int column) {\r
1722                                         //\r
1723                                         JCheckBox cBox = new JCheckBox();\r
1724                                         cBox.setHorizontalAlignment(JCheckBox.CENTER);\r
1725                                         //\r
1726                                         Boolean b = (Boolean)value;\r
1727                                         cBox.setSelected(b.booleanValue());\r
1728                                         //\r
1729                                         if (isSelected) {\r
1730                                                 cBox.setBackground(table.getSelectionBackground());\r
1731                                         }\r
1732                                         else {\r
1733                                                 cBox.setBackground(table.getBackground());\r
1734                                         }\r
1735                                         return cBox;\r
1736                                 }\r
1737                         };\r
1738                         jTable_showmarks.getColumn("チェック").setCellRenderer(renderer);\r
1739                         \r
1740                         //\r
1741                         for (Object[] obj : TVProgram.optMarks) {\r
1742                                 Entry<ProgOption,Boolean> entry = null;\r
1743                                 for (Entry<ProgOption,Boolean> e : env.getOptMarks().entrySet()) {\r
1744                                         if (e.getKey() == obj[0]) {\r
1745                                                 entry = e;\r
1746                                                 break;\r
1747                                         }\r
1748                                 }\r
1749                                 if ( entry != null ) {\r
1750                                         Object[] data = { entry.getValue(),obj[1],obj[0] };\r
1751                                         model.addRow(data);\r
1752                                 }\r
1753                                 else {\r
1754                                         Object[] data = { Boolean.TRUE,obj[1],obj[0] };\r
1755                                         model.addRow(data);\r
1756                                 }\r
1757                         }\r
1758                 }\r
1759                 return(jTable_showmarks);\r
1760         }\r
1761 \r
1762         // クリップボードアイテムの選択\r
1763         private JLabel getJLabel_clipboard(String s) {\r
1764                 if (jLabel_clipboard == null) {\r
1765                         jLabel_clipboard = new JLabel(s);\r
1766                 }\r
1767                 return jLabel_clipboard;\r
1768         }\r
1769         private JButton getJButton_clipboard_up(String s) {\r
1770                 if (jButton_clipboard_up == null) {\r
1771                         jButton_clipboard_up = new JButton(s);\r
1772                         jButton_clipboard_up.addMouseListener(new MouseAdapter() {\r
1773                                 @Override\r
1774                                 public void mouseClicked(MouseEvent e) {\r
1775                                         int row = 0;\r
1776                                         if ((row = jTable_clipboard.getSelectedRow()) <= 0) {\r
1777                                                 return;\r
1778                                         }\r
1779                                         Object b = jTable_clipboard.getValueAt(row, 0);\r
1780                                         Object item = jTable_clipboard.getValueAt(row, 1);\r
1781                                         Object id = jTable_clipboard.getValueAt(row, 2);\r
1782                                         \r
1783                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row-1, 0), row, 0);\r
1784                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row-1, 1), row, 1);\r
1785                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row-1, 2), row, 2);\r
1786                                         \r
1787                                         jTable_clipboard.setValueAt(b, row-1, 0);\r
1788                                         jTable_clipboard.setValueAt(item, row-1, 1);\r
1789                                         jTable_clipboard.setValueAt(id, row-1, 2);\r
1790                                         \r
1791                                         jTable_clipboard.setRowSelectionInterval(row-1, row-1);\r
1792                                 }\r
1793                         });\r
1794                 }\r
1795                 return jButton_clipboard_up;\r
1796         }\r
1797         private JButton getJButton_clipboard_down(String s) {\r
1798                 if (jButton_clipboard_down == null) {\r
1799                         jButton_clipboard_down = new JButton(s);\r
1800                         jButton_clipboard_down.addMouseListener(new MouseAdapter() {\r
1801                                 @Override\r
1802                                 public void mouseClicked(MouseEvent e) {\r
1803                                         int row = 0;\r
1804                                         if ((row = jTable_clipboard.getSelectedRow()) >= jTable_clipboard.getRowCount()-1) {\r
1805                                                 return;\r
1806                                         }\r
1807                                         Object b = jTable_clipboard.getValueAt(row, 0);\r
1808                                         Object item = jTable_clipboard.getValueAt(row, 1);\r
1809                                         Object id = jTable_clipboard.getValueAt(row, 2);\r
1810                                         \r
1811                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row+1, 0), row, 0);\r
1812                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row+1, 1), row, 1);\r
1813                                         jTable_clipboard.setValueAt(jTable_clipboard.getValueAt(row+1, 2), row, 2);\r
1814                                         \r
1815                                         jTable_clipboard.setValueAt(b, row+1, 0);\r
1816                                         jTable_clipboard.setValueAt(item, row+1, 1);\r
1817                                         jTable_clipboard.setValueAt(id, row+1, 2);\r
1818                                         \r
1819                                         jTable_clipboard.setRowSelectionInterval(row+1, row+1);\r
1820                                 }\r
1821                         });\r
1822                 }\r
1823                 return jButton_clipboard_down;\r
1824         }\r
1825         private JScrollPane getJScrollPane_clipboard() {\r
1826                 if (jScrollPane_clipboard == null) {\r
1827                         jScrollPane_clipboard = new JScrollPane();\r
1828                         jScrollPane_clipboard.setViewportView(getJTable_clipboard());\r
1829                         jScrollPane_clipboard.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);\r
1830                 }\r
1831                 return(jScrollPane_clipboard);\r
1832         }\r
1833         private JNETable getJTable_clipboard() {\r
1834                 if (jTable_clipboard == null) {\r
1835                         // ヘッダの設定\r
1836                         String[] colname = {"チェック", "アイテム", "ID"};\r
1837                         int[] colwidth = {50,250,0};\r
1838                         \r
1839                         //\r
1840                         DefaultTableModel model = new DefaultTableModel(colname, 0);\r
1841                         jTable_clipboard = new JNETable(model, false) {\r
1842 \r
1843                                 private static final long serialVersionUID = 1L;\r
1844 \r
1845                                 @Override\r
1846                                 public boolean isCellEditable(int row, int column) {\r
1847                                         return (column == 0);\r
1848                                 }\r
1849                         };\r
1850                         jTable_clipboard.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
1851                         DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_clipboard.getColumnModel();\r
1852                         TableColumn column = null;\r
1853                         for (int i = 0 ; i < columnModel.getColumnCount() ; i++){\r
1854                                 column = columnModel.getColumn(i);\r
1855                                 column.setPreferredWidth(colwidth[i]);\r
1856                         }\r
1857                         \r
1858                         // にゃーん\r
1859                         jTable_clipboard.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
1860    \r
1861                         // エディタに手を入れる\r
1862                         DefaultCellEditor editor = new DefaultCellEditor(new JCheckBox() {\r
1863 \r
1864                                 private static final long serialVersionUID = 1L;\r
1865 \r
1866                                 @Override\r
1867                                 public int getHorizontalAlignment() {\r
1868                                         return JCheckBox.CENTER;\r
1869                                 }\r
1870                         });\r
1871                         jTable_clipboard.getColumn("チェック").setCellEditor(editor);\r
1872                         // レンダラに手を入れる\r
1873                         DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {\r
1874 \r
1875                                 private static final long serialVersionUID = 1L;\r
1876 \r
1877                                 @Override\r
1878                                 public Component getTableCellRendererComponent(JTable table, Object value,\r
1879                                                 boolean isSelected, boolean hasFocus, int row, int column) {\r
1880                                         //\r
1881                                         JCheckBox cBox = new JCheckBox();\r
1882                                         cBox.setHorizontalAlignment(JCheckBox.CENTER);\r
1883                                         //\r
1884                                         Boolean b = (Boolean)value;\r
1885                                         cBox.setSelected(b.booleanValue());\r
1886                                         //\r
1887                                         if (isSelected) {\r
1888                                                 cBox.setBackground(table.getSelectionBackground());\r
1889                                         }\r
1890                                         else {\r
1891                                                 cBox.setBackground(table.getBackground());\r
1892                                         }\r
1893                                         return cBox;\r
1894                                 }\r
1895                         };\r
1896                         jTable_clipboard.getColumn("チェック").setCellRenderer(renderer);\r
1897                         \r
1898                         //\r
1899                         for (ClipboardInfo cb : getCbItemEnv()) {\r
1900                                 Object[] data = { cb.getB(), cb.getItem(), cb.getId() };\r
1901                                 model.addRow(data);\r
1902                         }\r
1903                 }\r
1904                 return(jTable_clipboard);\r
1905         }\r
1906         \r
1907         // 右クリックメニューの実行コマンドの追加\r
1908         private JLabel getJLabel_menuitem(String s) {\r
1909                 if (jLabel_menuitem == null) {\r
1910                         jLabel_menuitem = new JLabel(s);\r
1911                 }\r
1912                 return jLabel_menuitem;\r
1913         }\r
1914         private JTextField getJTextField_mikey() {\r
1915                 if (jTextField_mikey == null) {\r
1916                         jTextField_mikey = new JTextFieldWithPopup();\r
1917                 }\r
1918                 return (jTextField_mikey);\r
1919         }\r
1920         private JTextField getJTextField_mival() {\r
1921                 if (jTextField_mival == null) {\r
1922                         jTextField_mival = new JTextFieldWithPopup();\r
1923                 }\r
1924                 return (jTextField_mival);\r
1925         }\r
1926         private JComponent getJButton_miadd(String s) {\r
1927                 if (jButton_miadd == null) {\r
1928                         jButton_miadd = new JButton(s);\r
1929                         jButton_miadd.addMouseListener(new MouseAdapter() {\r
1930                                 @Override\r
1931                                 public void mouseClicked(MouseEvent e) {\r
1932                                         if (jTextField_mikey.getText().length() > 0 && jTextField_mival.getText().length() > 0) {\r
1933                                                 DefaultTableModel model = (DefaultTableModel) jTable_mitable.getModel();\r
1934                                                 Object[] data = { jTextField_mikey.getText(),jTextField_mival.getText() };\r
1935                                                 model.addRow(data);\r
1936                                                 jTextField_mikey.setText("");\r
1937                                                 jTextField_mival.setText("");\r
1938                                         }\r
1939                                 }\r
1940                         });\r
1941                 }\r
1942                 return (jButton_miadd);\r
1943         }\r
1944         private JComponent getJButton_midel(String s) {\r
1945                 if (jButton_midel == null) {\r
1946                         jButton_midel = new JButton(s);\r
1947                         jButton_midel.addMouseListener(new MouseAdapter() {\r
1948                                 @Override\r
1949                                 public void mouseClicked(MouseEvent e) {\r
1950                                         DefaultTableModel model = (DefaultTableModel) jTable_mitable.getModel();\r
1951                                         int row = 0;\r
1952                                         if ((row = jTable_mitable.getSelectedRow()) >= 0) {\r
1953                                                 jTextField_mikey.setText((String) model.getValueAt(row, 0));\r
1954                                                 jTextField_mival.setText((String) model.getValueAt(row, 1));\r
1955                                                 model.removeRow(row);\r
1956                                         }\r
1957                                 }\r
1958                         });\r
1959                 }\r
1960                 return (jButton_midel);\r
1961         }\r
1962         private JButton getJButton_miup(String s) {\r
1963                 if (jButton_miup == null) {\r
1964                         jButton_miup = new JButton(s);\r
1965                         jButton_miup.addMouseListener(new MouseAdapter() {\r
1966                                 @Override\r
1967                                 public void mouseClicked(MouseEvent e) {\r
1968                                         int row = 0;\r
1969                                         if ((row = jTable_mitable.getSelectedRow()) <= 0) {\r
1970                                                 return;\r
1971                                         }\r
1972                                         Object name = jTable_mitable.getValueAt(row, 0);\r
1973                                         Object cmd = jTable_mitable.getValueAt(row, 1);\r
1974                                         \r
1975                                         jTable_mitable.setValueAt(jTable_mitable.getValueAt(row-1, 0), row, 0);\r
1976                                         jTable_mitable.setValueAt(jTable_mitable.getValueAt(row-1, 1), row, 1);\r
1977                                         \r
1978                                         jTable_mitable.setValueAt(name, row-1, 0);\r
1979                                         jTable_mitable.setValueAt(cmd, row-1, 1);\r
1980                                         \r
1981                                         jTable_mitable.setRowSelectionInterval(row-1, row-1);\r
1982                                 }\r
1983                         });\r
1984                 }\r
1985                 return jButton_miup;\r
1986         }\r
1987         private JButton getJButton_midown(String s) {\r
1988                 if (jButton_midown == null) {\r
1989                         jButton_midown = new JButton(s);\r
1990                         jButton_midown.addMouseListener(new MouseAdapter() {\r
1991                                 @Override\r
1992                                 public void mouseClicked(MouseEvent e) {\r
1993                                         int row = 0;\r
1994                                         if ((row = jTable_mitable.getSelectedRow()) >= jTable_mitable.getRowCount()-1) {\r
1995                                                 return;\r
1996                                         }\r
1997                                         Object name = jTable_mitable.getValueAt(row, 0);\r
1998                                         Object cmd = jTable_mitable.getValueAt(row, 1);\r
1999                                         \r
2000                                         jTable_mitable.setValueAt(jTable_mitable.getValueAt(row+1, 0), row, 0);\r
2001                                         jTable_mitable.setValueAt(jTable_mitable.getValueAt(row+1, 1), row, 1);\r
2002                                         \r
2003                                         jTable_mitable.setValueAt(name, row+1, 0);\r
2004                                         jTable_mitable.setValueAt(cmd, row+1, 1);\r
2005                                         \r
2006                                         jTable_mitable.setRowSelectionInterval(row+1, row+1);\r
2007                                 }\r
2008                         });\r
2009                 }\r
2010                 return jButton_midown;\r
2011         }\r
2012         private JScrollPane getJScrollPane_mitable(int col1_w, int col2_w) {\r
2013                 if (jScrollPane_mitable == null) {\r
2014                         jScrollPane_mitable = new JScrollPane();\r
2015                         jScrollPane_mitable.setViewportView(getJTable_mitable(col1_w, col2_w));\r
2016                         jScrollPane_mitable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);\r
2017                 }\r
2018                 return (jScrollPane_mitable);\r
2019         }\r
2020         private JNETable getJTable_mitable(int col1_w, int col2_w) {\r
2021                 if (jTable_mitable == null) {\r
2022                         // ヘッダの設定\r
2023                         String[] colname = {"コマンド名", "実行するコマンド"};\r
2024                         int[] colwidth = {col1_w,col2_w};\r
2025                         \r
2026                         //\r
2027                         DefaultTableModel model = new DefaultTableModel(colname, 0);\r
2028                         jTable_mitable = new JNETable(model, false) {\r
2029 \r
2030                                 private static final long serialVersionUID = 1L;\r
2031 \r
2032                                 @Override\r
2033                                 public boolean isCellEditable(int row, int column) {\r
2034                                         return (column == 0);\r
2035                                 }\r
2036                         };\r
2037                         jTable_mitable.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
2038                         DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_mitable.getColumnModel();\r
2039                         TableColumn column = null;\r
2040                         for (int i = 0 ; i < columnModel.getColumnCount() ; i++){\r
2041                                 column = columnModel.getColumn(i);\r
2042                                 column.setPreferredWidth(colwidth[i]);\r
2043                         }\r
2044                         \r
2045                         // にゃーん\r
2046                         jTable_mitable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
2047    \r
2048                         //\r
2049                         for (TextValueSet tv : env.getTvCommand()) {\r
2050                                 Object[] data = { tv.getText(), tv.getValue() };\r
2051                                 model.addRow(data);\r
2052                         }\r
2053                 }\r
2054                 return(jTable_mitable);\r
2055         }\r
2056         \r
2057         //\r
2058         private JLabel getJLabel_ngword(String s) {\r
2059                 if (jLabel_ngword == null) {\r
2060                         jLabel_ngword = new JLabel(s);\r
2061                 }\r
2062                 return(jLabel_ngword);\r
2063         }\r
2064         private JTextField getJTextField_ngword(String s) {\r
2065                 if (jTextField_ngword == null) {\r
2066                         jTextField_ngword = new JTextFieldWithPopup();\r
2067                         jTextField_ngword.setText(s);\r
2068                         jTextField_ngword.setCaretPosition(0);\r
2069                 }\r
2070                 return jTextField_ngword;\r
2071         }\r
2072 \r
2073         private JLabel getJLabel_lookAndFeel(String s) {\r
2074                 if (jLabel_lookAndFeel == null) {\r
2075                         jLabel_lookAndFeel = new JLabel();\r
2076                         jLabel_lookAndFeel.setText(s);\r
2077                 }\r
2078                 return jLabel_lookAndFeel;\r
2079         }\r
2080         private JComboBox getJComboBox_lookAndFeel() {\r
2081                 if (jComboBox_lookAndFeel == null) {\r
2082                         jComboBox_lookAndFeel = new JComboBox();\r
2083 \r
2084                         // 初期値を設定\r
2085                         DefaultComboBoxModel model = new DefaultComboBoxModel();\r
2086                         jComboBox_lookAndFeel.setModel(model);\r
2087                         for ( String className : getLAFEnv().getNames() ) {\r
2088                                 Matcher ma = Pattern.compile("\\.([^\\.]+?)LookAndFeel$").matcher(className);\r
2089                                 if ( ma.find() ) {\r
2090                                         model.addElement(ma.group(1));\r
2091                                 }\r
2092                         }\r
2093                         if ( ! env.getLookAndFeel().equals("")) {\r
2094                                 model.setSelectedItem(env.getLookAndFeel());\r
2095                                 //updateFont(env.getFontName(), env.getFontSize());\r
2096                                 StdAppendMessage("Set lookandfeel="+env.getLookAndFeel());\r
2097                         }\r
2098                         else {\r
2099                                 model.setSelectedItem(UIManager.getLookAndFeel().getName());\r
2100                         }\r
2101                         \r
2102                         //\r
2103                         jComboBox_lookAndFeel.addActionListener(new ActionListener() {\r
2104                                 public void actionPerformed(ActionEvent e) {\r
2105                                         DefaultComboBoxModel model = (DefaultComboBoxModel)((JComboBox)e.getSource()).getModel();\r
2106                                         lafChanged((String)model.getSelectedItem());\r
2107                                 }\r
2108                         });\r
2109 \r
2110                 }\r
2111                 return jComboBox_lookAndFeel;\r
2112         }\r
2113         \r
2114         private JLabel getJLabel_font(String s) {\r
2115                 if (jLabel_font == null) {\r
2116                         jLabel_font = new JLabel();\r
2117                         jLabel_font.setText(s);\r
2118                 }\r
2119                 return jLabel_font;\r
2120         }\r
2121         private JComboBox getJComboBox_font() {\r
2122                 if (jComboBox_font == null) {\r
2123                         jComboBox_font = new JComboBox();\r
2124 \r
2125                         // 初期値を設定\r
2126                         DefaultComboBoxModel model = new DefaultComboBoxModel();\r
2127                         jComboBox_font.setModel(model);\r
2128                         for ( String f : getFontEnv().getNames() ) {\r
2129                                 model.addElement(f);\r
2130                         }\r
2131                         if ( ! env.getFontName().equals("")) {\r
2132                                 model.setSelectedItem(env.getFontName());\r
2133                                 //updateFont(env.getFontName(), env.getFontSize());\r
2134                                 //StdAppendMessage("システムのフォント: "+env.getFontName());\r
2135                         }\r
2136                         else {\r
2137                                 model.setSelectedItem(jComboBox_font.getFont().getFontName());\r
2138                         }\r
2139                         \r
2140                         //\r
2141                         jComboBox_font.addActionListener(al_fontChanged);\r
2142 \r
2143                 }\r
2144                 return jComboBox_font;\r
2145         }\r
2146         private JComboBox getJComboBox_fontSize() {\r
2147                 if (jComboBox_fontSize == null) {\r
2148                         jComboBox_fontSize = new JComboBox();\r
2149                         DefaultComboBoxModel model = new DefaultComboBoxModel();\r
2150                         jComboBox_fontSize.setModel(model);\r
2151                         for ( int i=6; i<=20; i++ ) {\r
2152                                 model.addElement(String.valueOf(i));\r
2153                         }\r
2154                         if ( env.getFontSize() > 0) {\r
2155                                 jComboBox_fontSize.setSelectedItem(String.valueOf(env.getFontSize()));\r
2156                         }\r
2157                         \r
2158                         jComboBox_fontSize.addActionListener(al_fontChanged);\r
2159                 }\r
2160                 return(jComboBox_fontSize);\r
2161         }\r
2162         private JLabel getJLabel_fontSample(String s) {\r
2163                 if (jLabel_fontSample == null) {\r
2164                         jLabel_fontSample = new JLabel();\r
2165                         jLabel_fontSample.setText("0120123abcABCあいうアイウ阿伊宇○×?");\r
2166                         jLabel_fontSample.setBackground(Color.WHITE);\r
2167                         jLabel_fontSample.setBorder(new LineBorder(Color.BLACK));\r
2168                         jLabel_fontSample.setOpaque(true);\r
2169                         Font f = jLabel_fontSample.getFont();\r
2170                         jLabel_fontSample.setFont(new Font(env.getFontName(),f.getStyle(),env.getFontSize()));\r
2171                 }\r
2172                 return jLabel_fontSample;\r
2173         }\r
2174         \r
2175         private JLabel getJLabel_enableCHAVsetting(String s)\r
2176         {\r
2177                 if (jLabel_enableCHAVsetting == null) {\r
2178                         jLabel_enableCHAVsetting = new JLabel();\r
2179                         jLabel_enableCHAVsetting.setText(s);\r
2180                 }\r
2181                 return(jLabel_enableCHAVsetting);\r
2182         }\r
2183         private JCheckBox getJCheckBox_enableCHAVsetting(boolean b) {\r
2184                 if (jCheckBox_enableCHAVsetting == null) {\r
2185                         jCheckBox_enableCHAVsetting = new JCheckBox();\r
2186                         jCheckBox_enableCHAVsetting.setSelected(b);\r
2187                 }\r
2188                 return(jCheckBox_enableCHAVsetting);\r
2189         }\r
2190         \r
2191         private JLabel getJLabel_autoFolderSelect(String s)\r
2192         {\r
2193                 if (jLabel_autoFolderSelect == null) {\r
2194                         jLabel_autoFolderSelect = new JLabel();\r
2195                         jLabel_autoFolderSelect.setText(s);\r
2196                 }\r
2197                 return(jLabel_autoFolderSelect);\r
2198         }\r
2199         private JCheckBox getJCheckBox_autoFolderSelect(boolean b) {\r
2200                 if (jCheckBox_autoFolderSelect == null) {\r
2201                         jCheckBox_autoFolderSelect = new JCheckBox();\r
2202                         jCheckBox_autoFolderSelect.setSelected(b);\r
2203                 }\r
2204                 return(jCheckBox_autoFolderSelect);\r
2205         }\r
2206 \r
2207 \r
2208         //\r
2209         private JTextAreaWithPopup getJta_help() {\r
2210                 if ( jta_help == null ) {\r
2211                         jta_help = CommonSwingUtils.getJta(this,2,0);\r
2212                         jta_help.setText(TEXT_HINT);\r
2213                 }\r
2214                 return jta_help;\r
2215         }\r
2216 }\r