3 import java.awt.Color;
\r
4 import java.awt.RenderingHints;
\r
6 import java.util.ArrayList;
\r
7 import java.util.HashMap;
\r
8 import java.util.regex.Matcher;
\r
9 import java.util.regex.Pattern;
\r
14 * @version 3.15.4β {@link #getAutoEventIdComplete()} 追加
\r
18 /*******************************************************************************
\r
20 ******************************************************************************/
\r
23 public static final String binDir = "bin";
\r
24 private static final String metainfDir = binDir+File.separator+"META-INF";
\r
25 private static final String services = metainfDir+File.separator+"services";
\r
27 public static final String envDir = "env";
\r
28 private static final String envFile = envDir+File.separator+"envs.xml";
\r
29 private static final String envText = envDir+File.separator+"envs.txt";
\r
30 private static final String lafFile = envDir+File.separator+"laf.txt";
\r
31 private static final String GTKRC = envDir+File.separator+"_gtkrc-2.0";
\r
33 public static final String skinDir = "skin";
\r
35 private static final int PAGER_DEFAULT = 7;
\r
37 private static final Color RSVDLINE_COLOR = new Color(204,153,255);
\r
38 private static final Color PICKEDLINE_COLOR = new Color(51,255,0);
\r
39 private static final Color CURRENTLINE_COLOR = new Color(240,120,120);
\r
40 private static final Color MATCHEDKEYWORD_COLOR = new Color(51,102,255);
\r
42 private static final Color TIMEBAR_COLOR_06_12 = new Color(180,180,180);
\r
43 private static final Color TIMEBAR_COLOR_12_18 = new Color(160,160,160);
\r
44 private static final Color TIMEBAR_COLOR_18_24 = new Color(140,140,140);
\r
45 private static final Color TIMEBAR_COLOR_24_06 = new Color(120,120,120);
\r
46 private static final Color EXECON_TUNE_COLOR = Color.WHITE;
\r
47 private static final Color EXECOFF_TUNE_COLOR = Color.GRAY;
\r
48 private static final Color PICKUP_BORDER_COLOR = new Color(0,255,0);
\r
49 private static final Color PICKUP_TUNER_COLOR = Color.GRAY;
\r
50 private static final Color MOUSEOVER_COLOR = new Color(180,180,255);
\r
51 private static final Color TITLE_COLOR = Color.BLUE;
\r
52 private static final Color DETAIL_COLOR = Color.DARK_GRAY;
\r
53 private static final Color MATCHBORDER_COLOR = Color.RED;
\r
54 private static final Color ITERATIONITEM_COLOR = Color.GRAY;
\r
56 private static final Color TUNERSHORT_COLOR = new Color(255,255,0);
\r
57 private static final Color RECORDED_COLOR = new Color(204,153,255);
\r
59 private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1";
\r
62 private static final String TV_SITE = "Dimora";
\r
63 private static final String CS_SITE = "スカパー!";
\r
64 private static final String CS2_SITE = "webザテレビジョン(CSデジ)";
\r
65 private static final String RADIO_SITE = "";
\r
67 private static final String MSGID = "[環境] ";
\r
68 private static final String ERRID = "[ERROR]"+MSGID;
\r
70 public static String[] SHUTDOWN_COMMANDS = { "shutdown /s /t 0", "sudo shutdown -h now" };
\r
73 public static enum DblClkCmd {
\r
75 SHOWRSVDIALOG ("予約ダイアログを開く"),
\r
76 JUMPTOPAPER ("番組欄へジャンプする"),
\r
77 JUMPTOWEB ("ブラウザで番組詳細のページを開く");
\r
79 private String name;
\r
81 private DblClkCmd(String name) {
\r
86 public String toString() {
\r
90 public String getId() {
\r
91 return(super.toString());
\r
94 public static DblClkCmd get(String id) {
\r
95 for ( DblClkCmd dcc : DblClkCmd.values() ) {
\r
96 if ( dcc.getId().equals(id) ) {
\r
105 public static enum SnapshotFmt {
\r
106 JPG ("JPEG","jpg"),
\r
110 private String name;
\r
111 private String ext;
\r
113 private SnapshotFmt(String name, String ext) {
\r
119 public String toString() {
\r
123 public String getExtension() {
\r
128 public String getId() {
\r
129 return(super.toString());
\r
132 public static SnapshotFmt get(String id) {
\r
133 for ( SnapshotFmt sf : SnapshotFmt.values() ) {
\r
134 if ( sf.getId().equals(id) ) {
\r
142 public static enum AAMode {
\r
143 OFF ("無効","off",RenderingHints.VALUE_TEXT_ANTIALIAS_OFF),
\r
144 ON ("有効","on",RenderingHints.VALUE_TEXT_ANTIALIAS_ON),
\r
145 GASP ("小さい文字には無効", "gasp",RenderingHints.VALUE_TEXT_ANTIALIAS_GASP),
\r
146 LCD ("サブピクセルAA", "lcd",RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB),
\r
147 HRGB ("サブピク横方向RGB", "lcd_hrgb",RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB),
\r
148 HBGR ("サブピク横方向BGR", "lcd_hbgr",RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR),
\r
149 VRGB ("サブピク縦方向RGB", "lcd_vrgb",RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB),
\r
150 VBGR ("サブピク縦方向BGR", "lcd_vbgr",RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGR);
\r
152 private String name;
\r
153 private String mode;
\r
154 private Object hint;
\r
156 private AAMode(String name, String mode, Object hint) {
\r
163 public String toString() {
\r
167 public String getId() {
\r
168 return(super.toString());
\r
171 public String getMode() {
\r
175 public Object getHint() {
\r
179 public static AAMode get(String id) {
\r
180 for ( AAMode aam : AAMode.values() ) {
\r
181 if ( aam.getId().equals(id) ) {
\r
190 public static enum UpdateOn {
\r
191 DISABLE ("無効にする", -1),
\r
192 EVERYDAY ("毎日実行する", 0),
\r
193 EVERY1DAY ("1日おきに実行する", 1),
\r
194 EVERY2DAY ("2日おきに実行する", 2),
\r
195 EVERY3DAY ("3日おきに実行する", 3),
\r
196 EVERY4DAY ("4日おきに実行する", 4),
\r
197 EVERY5DAY ("5日おきに実行する", 5),
\r
198 EVERY6DAY ("6日おきに実行する", 6);
\r
200 private String name;
\r
201 private int interval;
\r
203 private UpdateOn(String name, int interval) {
\r
205 this.interval = interval;
\r
209 public String toString() {
\r
213 public String getId() {
\r
214 return(super.toString());
\r
217 public int getInterval() {
\r
218 return this.interval;
\r
221 public static UpdateOn get(String id) {
\r
222 for ( UpdateOn uo : UpdateOn.values() ) {
\r
223 if ( uo.getId().equals(id) ) {
\r
231 /*******************************************************************************
\r
233 ******************************************************************************/
\r
235 private static boolean firstinstance = true; // 起動後最初の呼び出しか(2インスタンス目以降は実行しない)
\r
238 public boolean getChSortEnabled() { return chSortEnabled; }
\r
239 public void setChSortEnabled(boolean b) { chSortEnabled = b; }
\r
240 private boolean chSortEnabled = true;
\r
243 /*******************************************************************************
\r
245 ******************************************************************************/
\r
252 public boolean getDisableFazzySearch() { return disableFazzySearch; }
\r
253 public void setDisableFazzySearch(boolean b) { disableFazzySearch = b; }
\r
254 private boolean disableFazzySearch = false;
\r
256 public boolean getDisableFazzySearchReverse() { return disableFazzySearchReverse; }
\r
257 public void setDisableFazzySearchReverse(boolean b) { disableFazzySearchReverse = b; }
\r
258 private boolean disableFazzySearchReverse = false;
\r
259 // あいまい検索の閾値のデフォルト値
\r
260 public int getDefaultFazzyThreshold() { return defaultFazzyThreshold; }
\r
261 public void setDefaultFazzyThreshold(int c) { defaultFazzyThreshold = c; }
\r
262 private int defaultFazzyThreshold = TraceKey.defaultFazzyThreshold;
\r
263 // しょぼかるの検索結果も有効な放送局のみに絞る
\r
264 public boolean getSyoboFilterByCenters() { return syoboFilterByCenters; }
\r
265 public void setSyoboFilterByCenters(boolean b) { syoboFilterByCenters = b; }
\r
266 private boolean syoboFilterByCenters = true;
\r
268 public boolean getDisplayPassedEntry() { return displayPassedEntry; }
\r
269 public void setDisplayPassedEntry(boolean b) { displayPassedEntry = b; }
\r
270 private boolean displayPassedEntry = true;
\r
272 public boolean getShowRsvPickup() { return showRsvPickup; }
\r
273 public void setShowRsvPickup(boolean b) { showRsvPickup = b; }
\r
274 private boolean showRsvPickup = true;
\r
276 public boolean getShowRsvDup() { return showRsvDup; }
\r
277 public void setShowRsvDup(boolean b) { showRsvDup = b; }
\r
278 private boolean showRsvDup = true;
\r
280 public boolean getShowRsvUra() { return showRsvUra; }
\r
281 public void setShowRsvUra(boolean b) { showRsvUra = b; }
\r
282 private boolean showRsvUra = false;
\r
284 public boolean getRsvdLineEnhance() { return rsvdLineEnhance; }
\r
285 public void setRsvdLineEnhance(boolean b) { rsvdLineEnhance = b; }
\r
286 private boolean rsvdLineEnhance = true;
\r
288 public Color getRsvdLineColor() { return rsvdLineColor; }
\r
289 public void setRsvdLineColor(Color c) { rsvdLineColor = c; }
\r
290 private Color rsvdLineColor = RSVDLINE_COLOR;
\r
292 public Color getPickedLineColor() { return pickedLineColor; }
\r
293 public void setPickedLineColor(Color c) { pickedLineColor = c; }
\r
294 private Color pickedLineColor = PICKEDLINE_COLOR;
\r
295 // 現在放送中行の背景色を変えて強調する
\r
296 public boolean getCurrentLineEnhance() { return currentLineEnhance; }
\r
297 public void setCurrentLineEnhance(boolean b) { currentLineEnhance = b; }
\r
298 private boolean currentLineEnhance = true;
\r
300 public Color getCurrentLineColor() { return currentLineColor; }
\r
301 public void setCurrentLineColor(Color c) { currentLineColor = c; }
\r
302 private Color currentLineColor = CURRENTLINE_COLOR;
\r
303 // 現在放送中ノードに終了後何分までの番組を表示するか
\r
304 public int getCurrentAfter() { return currentAfter; }
\r
305 public void setCurrentAfter(int n) { currentAfter = n; }
\r
306 private int currentAfter = 10*60;
\r
307 // 現在放送中ノードに開始前何分までの番組を表示するか
\r
308 public int getCurrentBefore() { return currentBefore; }
\r
309 public void setCurrentBefore(int n) { currentBefore = n; }
\r
310 private int currentBefore = 60*60;
\r
311 // キーワードにマッチした箇所の強調色
\r
312 public Color getMatchedKeywordColor() { return matchedKeywordColor; }
\r
313 public void setMatchedKeywordColor(Color c) { matchedKeywordColor = c; }
\r
314 private Color matchedKeywordColor = MATCHEDKEYWORD_COLOR;
\r
315 // 削除時に確認ダイアログを表示する
\r
316 public boolean getShowWarnDialog() { return showWarnDialog; }
\r
317 public void setShowWarnDialog(boolean b) { showWarnDialog = b; }
\r
318 private boolean showWarnDialog = false;
\r
320 public boolean getSplitMarkAndTitle() { return splitMarkAndTitle; }
\r
321 public void setSplitMarkAndTitle(boolean b) { splitMarkAndTitle = b; }
\r
322 private boolean splitMarkAndTitle = true;
\r
324 public boolean getShowDetailOnList() { return showDetailOnList; }
\r
325 public void setShowDetailOnList(boolean b) { showDetailOnList = b; }
\r
326 private boolean showDetailOnList = true;
\r
328 public int getRsvTargets() { return rsvTargets; }
\r
329 public void setRsvTargets(int c) { rsvTargets = c; }
\r
330 private int rsvTargets = 32;
\r
332 public boolean getRowHeaderVisible() { return rowHeaderVisible; }
\r
333 public void setRowHeaderVisible(boolean b) { rowHeaderVisible = b; }
\r
334 private boolean rowHeaderVisible = false;
\r
336 public DblClkCmd getDblClkCmd() { return dblClkCmd; }
\r
337 public void setDblClkCmd(DblClkCmd c) { dblClkCmd = c; }
\r
338 private DblClkCmd dblClkCmd = DblClkCmd.SHOWRSVDIALOG;
\r
341 public int getSearchResultMax() { return searchResultMax; }
\r
342 public void setSearchResultMax(int c) { searchResultMax = c; }
\r
343 private int searchResultMax = 50;
\r
346 public int getSearchResultBufferMax() { return searchResultBufferMax; }
\r
347 public void setSearchResultBufferMax(int c) { searchResultBufferMax = c; }
\r
348 private int searchResultBufferMax = 5;
\r
355 public boolean getDrawcacheEnable() { return drawcacheEnable; }
\r
356 public void setDrawcacheEnable(boolean b) { drawcacheEnable = b; }
\r
357 private boolean drawcacheEnable = false;
\r
358 // 新聞形式での、1ページあたりの放送局数
\r
359 public int getCenterPerPage() { return centerPerPage; }
\r
360 public void setCenterPerPage(int c) { centerPerPage = c; }
\r
361 public boolean isPagerEnabled() { return ( ! drawcacheEnable) && (centerPerPage > 0); }
\r
365 public int getPageIndex(int n) {
\r
366 int rem = n % centerPerPage;
\r
367 return (n-rem)/centerPerPage + ((rem==0)?(0):(1)) - 1;
\r
369 private int centerPerPage = PAGER_DEFAULT;
\r
371 public boolean getAllPageSnapshot() { return allPageSnapshot; }
\r
372 public void setAllPageSnapshot(boolean b) { allPageSnapshot = b; }
\r
373 private boolean allPageSnapshot = false;
\r
375 public boolean getTooltipEnable() { return tooltipEnable; }
\r
376 public void setTooltipEnable(boolean b) { tooltipEnable = b; }
\r
377 private boolean tooltipEnable = false;
\r
378 // ツールチップの表示遅延(100ミリ秒)
\r
379 public int getTooltipInitialDelay() { return tooltipInitialDelay; }
\r
380 public void setTooltipInitialDelay(int c) { tooltipInitialDelay = c; }
\r
381 private int tooltipInitialDelay = 3;
\r
382 // ツールチップの消去遅延(100ミリ秒)
\r
383 public int getTooltipDismissDelay() { return tooltipDismissDelay; }
\r
384 public void setTooltipDismissDelay(int c) { tooltipDismissDelay = c; }
\r
385 private int tooltipDismissDelay = 30*10;
\r
387 public boolean getTimerbarScrollEnable() { return timerbarScrollEnable; }
\r
388 public void setTimerbarScrollEnable(boolean b) { timerbarScrollEnable = b; }
\r
389 private boolean timerbarScrollEnable = true;
\r
391 public int getPassedLogLimit() { return passedLogLimit; }
\r
392 public void setPassedLogLimit(int c) { passedLogLimit = c; }
\r
393 private int passedLogLimit = 31;
\r
395 // 番組枠の高さ(->bounds)
\r
397 public Color getTimebarColor() { return timebarColor; }
\r
398 public void setTimebarColor(Color c) { timebarColor = c; }
\r
399 private Color timebarColor = TIMEBAR_COLOR_06_12;
\r
400 public Color getTimebarColor2() { return timebarColor2; }
\r
401 public void setTimebarColor2(Color c) { timebarColor2 = c; }
\r
402 private Color timebarColor2 = TIMEBAR_COLOR_12_18;
\r
403 public Color getTimebarColor3() { return timebarColor3; }
\r
404 public void setTimebarColor3(Color c) { timebarColor3 = c; }
\r
405 private Color timebarColor3 = TIMEBAR_COLOR_18_24;
\r
406 public Color getTimebarColor4() { return timebarColor4; }
\r
407 public void setTimebarColor4(Color c) { timebarColor4 = c; }
\r
408 private Color timebarColor4 = TIMEBAR_COLOR_24_06;
\r
410 public Color getExecOnFontColor() { return execOnFontColor; }
\r
411 public void setExecOnFontColor(Color c) { execOnFontColor = c; }
\r
412 private Color execOnFontColor = EXECON_TUNE_COLOR;
\r
414 public Color getExecOffFontColor() { return execOffFontColor; }
\r
415 public void setExecOffFontColor(Color c) { execOffFontColor = c; }
\r
416 private Color execOffFontColor = EXECOFF_TUNE_COLOR;
\r
418 public Color getPickedColor() { return pickedColor; }
\r
419 public void setPickedColor(Color c) { pickedColor = c; }
\r
420 private Color pickedColor = PICKUP_BORDER_COLOR;
\r
421 public Color getPickedFontColor() { return pickedFontColor; }
\r
422 public void setPickedFontColor(Color c) { pickedFontColor = c; }
\r
423 private Color pickedFontColor = PICKUP_TUNER_COLOR;
\r
424 // ジャンル別色設定(ここでは設定しない。PaperColorMapクラスで)
\r
426 public String getPaperColors() { return paperColors; }
\r
428 public void setPaperColors(String s) { paperColors = s; }
\r
430 private String paperColors = "";
\r
431 // マウスオーバー時のハイライト色設定
\r
432 public boolean getEnableHighlight() { return enableHighlight; }
\r
433 public void setEnableHighlight(boolean b) { enableHighlight = b; }
\r
434 private boolean enableHighlight = true;
\r
435 public Color getHighlightColor() { return highlightColor; }
\r
436 public void setHighlightColor(Color c) { highlightColor = c; }
\r
437 private Color highlightColor = MOUSEOVER_COLOR;
\r
438 // 番組枠の設定(titleFontStyleの初期化はコンストラクタで)
\r
439 public boolean getShowStart() { return showStart; }
\r
440 public void setShowStart(boolean b) { showStart = b; }
\r
441 private boolean showStart = true;
\r
442 public String getTitleFont() { return titleFont; }
\r
443 public void setTitleFont(String s) { titleFont = s; }
\r
444 private String titleFont = "";
\r
445 public int getTitleFontSize() { return titleFontSize; }
\r
446 public void setTitleFontSize(int n) { titleFontSize = n; }
\r
447 private int titleFontSize = 13;
\r
448 public Color getTitleFontColor() { return titleFontColor; }
\r
449 public void setTitleFontColor(Color c) { titleFontColor = c; }
\r
450 private Color titleFontColor = TITLE_COLOR;
\r
451 public ArrayList<JTXTButton.FontStyle> getTitleFontStyle() { return titleFontStyle; }
\r
452 public void setTitleFontStyle(ArrayList<JTXTButton.FontStyle> a) { titleFontStyle = a; }
\r
453 private ArrayList<JTXTButton.FontStyle> titleFontStyle = new ArrayList<JTXTButton.FontStyle>();
\r
454 public boolean getShowDetail() { return showDetail; }
\r
455 public void setShowDetail(boolean b) { showDetail = b; }
\r
456 private boolean showDetail = true;
\r
457 public int getDetailRows() { return detailRows; }
\r
458 public void setDetailRows(int n) { detailRows = n; }
\r
459 private int detailRows = 50;
\r
460 public String getDetailFont() { return detailFont; }
\r
461 public void setDetailFont(String s) { detailFont = s; }
\r
462 private String detailFont = "";
\r
463 public int getDetailFontSize() { return detailFontSize; }
\r
464 public void setDetailFontSize(int n) { detailFontSize = n; }
\r
465 private int detailFontSize = 11;
\r
466 public Color getDetailFontColor() { return detailFontColor; }
\r
467 public void setDetailFontColor(Color c) { detailFontColor = c; }
\r
468 private Color detailFontColor = DETAIL_COLOR;
\r
469 public ArrayList<JTXTButton.FontStyle> getDetailFontStyle() { return detailFontStyle; }
\r
470 public void setDetailFontStyle(ArrayList<JTXTButton.FontStyle> a) { detailFontStyle = a; }
\r
471 private ArrayList<JTXTButton.FontStyle> detailFontStyle = new ArrayList<JTXTButton.FontStyle>();
\r
472 public int getDetailTab() { return detailTab; }
\r
473 public void setDetailTab(int n) { detailTab = n; }
\r
474 private int detailTab = 8;
\r
475 public Color getMatchedBorderColor() { return matchedBorderColor; }
\r
476 public void setMatchedBorderColor(Color c) { matchedBorderColor = c; }
\r
477 private Color matchedBorderColor = MATCHBORDER_COLOR;
\r
478 public Color getMatchedKeywordBorderColor() { return matchedKeywordBorderColor; }
\r
479 public void setMatchedKeywordBorderColor(Color c) { matchedKeywordBorderColor = c; }
\r
480 private Color matchedKeywordBorderColor = MATCHBORDER_COLOR;
\r
481 public int getMatchedBorderThickness() { return matchedBorderThickness; }
\r
482 public void setMatchedBorderThickness(int n) { matchedBorderThickness = n; }
\r
483 private int matchedBorderThickness = 6;
\r
485 public AAMode getPaperAAMode() { return paperAAMode; }
\r
486 public void setPaperAAMode(AAMode a) { paperAAMode = a; }
\r
487 private AAMode paperAAMode = AAMode.ON;
\r
488 // 新聞形式でもレコーダーコンボボックスを有効にする
\r
489 public boolean getEffectComboToPaper() { return effectComboToPaper; }
\r
490 public void setEffectComboToPaper(boolean b) { effectComboToPaper = b; }
\r
491 private boolean effectComboToPaper = true;
\r
493 public SnapshotFmt getSnapshotFmt() { return snapshotFmt; }
\r
494 public void setSnapshotFmt(SnapshotFmt s) { snapshotFmt = s; }
\r
495 private SnapshotFmt snapshotFmt = SnapshotFmt.JPG;
\r
497 public boolean getPrintSnapshot() { return printSnapshot; }
\r
498 public void setPrintSnapshot(boolean b) { printSnapshot = b; }
\r
499 private boolean printSnapshot = false;
\r
505 // 実行ONのエントリのみ予約マークを表示する
\r
506 public boolean getDisplayOnlyExecOnEntry() { return displayOnlyExecOnEntry; }
\r
507 public void setDisplayOnlyExecOnEntry(boolean b) { displayOnlyExecOnEntry = b; }
\r
508 private boolean displayOnlyExecOnEntry = false;
\r
510 public boolean getDisplayPassedReserve() { return displayPassedReserve; }
\r
511 public void setDisplayPassedReserve(boolean b) { displayPassedReserve = b; }
\r
512 private boolean displayPassedReserve = false;
\r
514 public boolean getShowOnlyNonrepeated() { return showOnlyNonrepeated; }
\r
515 public void setShowOnlyNonrepeated(boolean b) { showOnlyNonrepeated = b; }
\r
516 private boolean showOnlyNonrepeated = true;
\r
517 // 深夜(24:00-28:59)の帯予約を一日前にずらす
\r
518 public boolean getAdjLateNight() { return adjLateNight; }
\r
519 public void setAdjLateNight(boolean b) { adjLateNight = b; }
\r
520 private boolean adjLateNight = false;
\r
521 // ツリーペーンにrootノードを表示させる
\r
522 public boolean getRootNodeVisible() { return rootNodeVisible; }
\r
523 public void setRootNodeVisible(boolean b) { rootNodeVisible = b; }
\r
524 private boolean rootNodeVisible = false;
\r
526 public boolean getSyncTreeWidth() { return syncTreeWidth; }
\r
527 public void setSyncTreeWidth(boolean b) { syncTreeWidth = b; }
\r
528 private boolean syncTreeWidth = true;
\r
530 public boolean getShortExtMark() { return shortExtMark; }
\r
531 public void setShortExtMark(boolean b) { shortExtMark = b; }
\r
532 private boolean shortExtMark = false;
\r
534 public HashMap<TVProgram.ProgOption,Boolean> getOptMarks() { return optMarks; }
\r
535 public void setOptMarks(HashMap<TVProgram.ProgOption,Boolean> h) { optMarks = h; }
\r
536 private HashMap<TVProgram.ProgOption,Boolean> optMarks = new HashMap<TVProgram.ProgOption, Boolean>();
\r
537 // クリップボードアイテムの選択(->clipboardItem)
\r
538 // 右クリックメニューの実行アイテム
\r
539 public ArrayList<TextValueSet> getTvCommand() { return tvCommand; }
\r
540 public void setTvCommand(ArrayList<TextValueSet> al) { tvCommand = al; }
\r
541 private ArrayList<TextValueSet> tvCommand = new ArrayList<TextValueSet>();
\r
547 // 29時をまたいで同タイトルが続いている場合は同一番組とみなす
\r
548 public boolean getContinueTomorrow() { return continueTomorrow; }
\r
549 public void setContinueTomorrow(boolean b) { continueTomorrow = b; }
\r
550 private boolean continueTomorrow = true;
\r
551 // Web番組表のキャッシュ保持時間
\r
552 public int getCacheTimeLimit() { return cacheTimeLimit; }
\r
553 public void setCacheTimeLimit(int w) { cacheTimeLimit = w; }
\r
554 public boolean isShutdownEnabled() { return (cacheTimeLimit == 0)&&(shutdownCmd!=null&&shutdownCmd.length()>0); }
\r
555 private int cacheTimeLimit = 12;
\r
557 public String getShutdownCmd() { return shutdownCmd; }
\r
558 public void setShutdownCmd(String s) { shutdownCmd = s; }
\r
559 private String shutdownCmd = "";
\r
561 public boolean getExpandTo8() { return expandTo8; }
\r
562 public void setExpandTo8(boolean b) { expandTo8 = b; dogdays = (b)?(8):(7); }
\r
563 private boolean expandTo8 = false;
\r
564 public int getDogDays() { return dogdays; }
\r
565 private int dogdays = 7;
\r
566 // 番組詳細取得を行なうかどうか(廃止)
\r
568 public boolean getUseDetailCache() { return false; }
\r
570 public void setUseDetailCache(boolean b) { useDetailCache = false; }
\r
572 private boolean useDetailCache = false;
\r
574 * 予約ダイアログを開いたときに自動で番組IDを取得する
\r
576 public boolean getAutoEventIdComplete() { return autoEventIdComplete; }
\r
577 public void setAutoEventIdComplete(boolean b) { autoEventIdComplete = b; }
\r
578 private boolean autoEventIdComplete = false;
\r
579 // タイトルに話数が含まれる場合に以降を分離する
\r
580 public boolean getSplitEpno() { return splitEpno; }
\r
581 public void setSplitEpno(boolean b) { splitEpno = b; }
\r
582 private boolean splitEpno = false;
\r
583 // サブタイトルを番組追跡の対象から除外する
\r
584 public boolean getTraceOnlyTitle() { return traceOnlyTitle; }
\r
585 public void setTraceOnlyTitle(boolean b) { traceOnlyTitle = b; }
\r
586 private boolean traceOnlyTitle = true;
\r
588 public boolean getFixTitle() { return fixTitle; }
\r
589 public void setFixTitle(boolean b) { fixTitle = b; }
\r
590 private boolean fixTitle = true;
\r
592 public ArrayList<String> getNgword() { return ngword; }
\r
593 public void setNgword(ArrayList<String> ngw) { ngword = ngw; }
\r
594 public void setNgword(String ngw) {
\r
595 ngword = new ArrayList<String>();
\r
596 for (String ngs : ngw.split(";")) {
\r
597 if (ngs.trim().length() > 0) {
\r
598 ngword.add(ngs.trim());
\r
602 private ArrayList<String> ngword = new ArrayList<String>();
\r
603 // Web番組表をアクセスする際のUser-Agentの値
\r
604 public String getUserAgent() { return userAgent; }
\r
605 public void setUserAgent(String s) { userAgent = s; }
\r
606 private String userAgent = USER_AGENT;
\r
608 public boolean getUseProxy() { return useProxy; }
\r
609 public void setUseProxy(boolean b) { useProxy = b; }
\r
610 public String getProxyAddr() { return proxyAddr; }
\r
611 public void setProxyAddr(String s) { proxyAddr = s; }
\r
612 public String getProxyPort() { return proxyPort; }
\r
613 public void setProxyPort(String s) { proxyPort = s; }
\r
614 private boolean useProxy = false;
\r
615 private String proxyAddr = "";
\r
616 private String proxyPort = "";
\r
618 public boolean getUseSyobocal() { return useSyobocal; }
\r
619 public void setUseSyobocal(boolean b) { useSyobocal = b; }
\r
620 private boolean useSyobocal = true;
\r
621 // 日に一回しか新着履歴を更新しない
\r
622 public boolean getHistoryOnlyUpdateOnce() { return historyOnlyUpdateOnce; }
\r
623 public void setHistoryOnlyUpdateOnce(boolean b) { historyOnlyUpdateOnce = b; }
\r
624 private boolean historyOnlyUpdateOnce = true;
\r
626 public boolean getUsePassedProgram() { return usePassedProgram; }
\r
627 public void setUsePassedProgram(boolean b) { usePassedProgram = b; }
\r
628 private boolean usePassedProgram = true;
\r
629 // 何日先までのログを過去ログ用に準備しておくか
\r
630 public int getPrepPassedProgramCount() { return prepPassedProgramCount; }
\r
631 public void setPrepPassedProgramCount(int w) { prepPassedProgramCount = w; }
\r
632 private int prepPassedProgramCount = 4;
\r
642 public boolean getForceGetRdReserveDetails() { return forceGetRdReserveDetails; }
\r
644 public void setForceGetRdReserveDetails(boolean b) { forceGetRdReserveDetails = b; }
\r
646 private boolean forceGetRdReserveDetails = false;
\r
649 public boolean getNeverGetRdReserveDetails() { return neverGetRdReserveDetails; }
\r
651 public void setNeverGetRdReserveDetails(boolean b) { neverGetRdReserveDetails = b; }
\r
653 private boolean neverGetRdReserveDetails = false;
\r
654 // 予約取得ボタンで録画結果も同時に取得する
\r
656 public boolean getSkipGetRdRecorded() { return skipGetRdRecorded; }
\r
658 public void setSkipGetRdRecorded(boolean b) { skipGetRdRecorded = b; }
\r
660 private boolean skipGetRdRecorded = false;
\r
662 // 予約一覧取得時に番組詳細も取得する
\r
663 public int getForceLoadReserveDetails() { return forceLoadReserveDetails; }
\r
664 public void setForceLoadReserveDetails(int n) { forceLoadReserveDetails = n; }
\r
665 private int forceLoadReserveDetails = 0;
\r
666 // 予約一覧取得時に自動予約一覧も取得する
\r
667 public int getForceLoadAutoReserves() { return forceLoadAutoReserves; }
\r
668 public void setForceLoadAutoReserves(int n) { forceLoadAutoReserves = n; }
\r
669 private int forceLoadAutoReserves = 0;
\r
670 // 予約一覧取得時に録画結果一覧も取得する
\r
671 public int getForceLoadRecorded() { return forceLoadRecorded; }
\r
672 public void setForceLoadRecorded(int n) { forceLoadRecorded = n; }
\r
673 private int forceLoadRecorded = 0;
\r
676 public void setRecordedSaveScope(int n) { recordedSaveScope = n; }
\r
677 public int getRecordedSaveScope() { return recordedSaveScope; }
\r
678 private int recordedSaveScope = 90;
\r
683 public boolean getDontCalendarWorkWithNull() { return dontCalendarWorkWithNull; }
\r
685 public void setDontCalendarWorkWithNull(boolean b) { dontCalendarWorkWithNull = b; }
\r
687 boolean dontCalendarWorkWithNull = true;
\r
694 public String getSpoexLength() { return spoexLength; }
\r
695 public void setSpoexLength(String l) { spoexLength = l; }
\r
696 private String spoexLength = "90";
\r
698 public boolean getOverlapUp() { return overlapUp; }
\r
699 public void setOverlapUp(boolean b) { overlapUp = b; }
\r
700 private boolean overlapUp = false;
\r
702 public boolean getOverlapDown() { return overlapDown; }
\r
703 public void setOverlapDown(boolean b) { overlapDown = b; }
\r
704 private boolean overlapDown = false;
\r
706 public boolean getOverlapDown2() { return overlapDown2; }
\r
707 public void setOverlapDown2(boolean b) { overlapDown2 = b; }
\r
708 private boolean overlapDown2 = false;
\r
710 public boolean getNoOverlapDown2Sp() { return noOverlapDown2Sp; }
\r
711 public void setNoOverlapDown2Sp(boolean b) { noOverlapDown2Sp = b; }
\r
712 private boolean noOverlapDown2Sp = true;
\r
714 public boolean getAutoFolderSelect() { return autoFolderSelect; }
\r
715 public void setAutoFolderSelect(boolean b) { autoFolderSelect = b; }
\r
716 private boolean autoFolderSelect = true;
\r
717 // ジャンルではなく放送局でAV設定をする
\r
718 public boolean getEnableCHAVsetting() { return enableCHAVsetting; }
\r
719 public void setEnableCHAVsetting(boolean b) { enableCHAVsetting = b; }
\r
720 private boolean enableCHAVsetting = false;
\r
722 public int getRangeLikeRsv() { return rangeLikeRsv; }
\r
723 public void setRangeLikeRsv(int c) { rangeLikeRsv = c; }
\r
724 private int rangeLikeRsv = 0;
\r
726 public boolean getGivePriorityToReserved() { return givePriorityToReserved; }
\r
727 public void setGivePriorityToReserved(boolean b) { givePriorityToReserved = b; }
\r
728 private boolean givePriorityToReserved = true;
\r
730 public boolean getGivePriorityToReservedTitle() { return givePriorityToReservedTitle; }
\r
731 public void setGivePriorityToReservedTitle(boolean b) { givePriorityToReservedTitle = b; }
\r
732 private boolean givePriorityToReservedTitle = true;
\r
734 public boolean getAdjoiningNotRepetition() { return adjoiningNotRepetition; }
\r
735 public void setAdjoiningNotRepetition(boolean b) { adjoiningNotRepetition = b; }
\r
736 private boolean adjoiningNotRepetition = false;
\r
737 // 予約一覧で繰り返し予約を展開する
\r
738 public boolean getShowAllIterationItem() { return showAllIterationItem; }
\r
739 public void setShowAllIterationItem(boolean b) { showAllIterationItem = b; }
\r
740 private boolean showAllIterationItem = true;
\r
741 // 繰り返し予約の2つ目以降の文字色
\r
742 public Color getIterationItemForeground() { return iterationItemForeground; }
\r
743 public void setIterationItemForeground(Color c) { iterationItemForeground = c; }
\r
744 private Color iterationItemForeground = ITERATIONITEM_COLOR;
\r
746 public Color getTunerShortColor() { return tunerShortColor; }
\r
747 public void setTunerShortColor(Color c) { tunerShortColor = c; }
\r
748 private Color tunerShortColor = TUNERSHORT_COLOR;
\r
749 // 正常録画済み(と思われる)と思われる背景色
\r
750 public Color getRecordedColor() { return recordedColor; }
\r
751 public void setRecordedColor(Color c) { recordedColor = c; }
\r
752 private Color recordedColor = RECORDED_COLOR;
\r
754 public boolean getUseAutocomplete() { return useAutocomplete; }
\r
755 public void setUseAutocomplete(boolean b) { useAutocomplete = b; }
\r
756 private boolean useAutocomplete = false;
\r
763 public boolean getCheckUpdate() { return checkUpdate; }
\r
764 public void setCheckUpdate(boolean b) { checkUpdate= b; }
\r
765 private boolean checkUpdate = true;
\r
766 public UpdateOn getUpdateMethod() { return updateMethod; }
\r
767 public void setUpdateMethod(UpdateOn u) { updateMethod = u; }
\r
768 private UpdateOn updateMethod = UpdateOn.EVERY2DAY;
\r
770 public boolean getDisableBeep() { return disableBeep; }
\r
771 public void setDisableBeep(boolean b) { disableBeep = b; }
\r
772 private boolean disableBeep = false;
\r
774 public boolean getShowSysTray() { return showSysTray; }
\r
775 public void setShowSysTray(boolean b) { showSysTray = b; }
\r
776 private boolean showSysTray = false;
\r
777 // [X]ボタンでシステムトレイに隠す
\r
778 public boolean getHideToTray() { return hideToTray; }
\r
779 public void setHideToTray(boolean b) { hideToTray = b; }
\r
780 private boolean hideToTray = false;
\r
782 public boolean getOnlyOneInstance() { return onlyOneInstance; }
\r
783 public void setOnlyOneInstance(boolean b) { onlyOneInstance = b; }
\r
784 private boolean onlyOneInstance = false;
\r
786 public String getLookAndFeel() { return lookAndFeel; }
\r
787 public void setLookAndFeel(String n) { lookAndFeel = n; }
\r
788 private String lookAndFeel = "";
\r
790 public String getFontName() { return fontName; }
\r
791 public void setFontName(String f) { fontName = f; }
\r
792 private String fontName = "";
\r
793 public int getFontSize() { return fontSize; }
\r
794 public void setFontSize(int f) { fontSize = f; }
\r
795 private int fontSize = 12;
\r
797 public boolean getUseGTKRC() { return useGTKRC; }
\r
798 public void setUseGTKRC(boolean b) { useGTKRC = b; }
\r
799 private boolean useGTKRC = true;
\r
801 private int fontSizeAdjustGTK = 3;
\r
803 // 【Win】ファイルオープンにrundll32を使用する
\r
804 public boolean getUseRundll32() { return useRundll32; }
\r
805 public void setUseRundll32(boolean b) { useRundll32 = b; }
\r
806 private boolean useRundll32 = false;
\r
808 public boolean getDebug() { return debug; }
\r
809 public void setDebug(boolean b) { debug = b; }
\r
810 private boolean debug = false;
\r
813 /*******************************************************************************
\r
815 ******************************************************************************/
\r
822 public String getProgDir() { return progDir; }
\r
823 public void setProgDir(String s) { progDir = s; }
\r
824 private String progDir = "progcache";
\r
826 public String getPassedDir() { return passedDir; }
\r
827 public void setPassedDir(String s) { passedDir = s; }
\r
828 private String passedDir = "passed";
\r
831 /*******************************************************************************
\r
833 ******************************************************************************/
\r
840 public String getTVProgramSite() { return tvProgramSite; }
\r
841 public void setTVProgramSite(String s) { tvProgramSite = s; }
\r
842 private String tvProgramSite = TV_SITE;
\r
844 public String getCSProgramSite() { return csProgramSite; }
\r
845 public void setCSProgramSite(String s) { csProgramSite = s; }
\r
846 private String csProgramSite = CS_SITE;
\r
848 public String getCS2ProgramSite() { return cs2ProgramSite; }
\r
849 public void setCS2ProgramSite(String s) { cs2ProgramSite = s; }
\r
850 private String cs2ProgramSite = CS2_SITE;
\r
851 // Web番組表サイト(Radio)
\r
853 public String getRadioProgramSite() { return radioProgramSite; }
\r
855 public void setRadioProgramSite(String s) { radioProgramSite = s; }
\r
857 private String radioProgramSite = RADIO_SITE;
\r
859 /*******************************************************************************
\r
861 ******************************************************************************/
\r
863 // 番組表の表示を簡素化する(現在は使用していない)
\r
865 public boolean getLightProgramView() { return lightProgramView; }
\r
867 public void setLightProgramView(boolean b) { lightProgramView = b; }
\r
869 private boolean lightProgramView = false;
\r
873 public String getSpoexSearchStart() { return spoexSearchStart; }
\r
875 public void setSpoexSearchStart(String s) { spoexSearchStart = s; }
\r
877 public String getSpoexSearchEnd() { return spoexSearchEnd; }
\r
880 public void setSpoexSearchEnd(String s) { spoexSearchEnd = s; }
\r
882 private String spoexSearchStart = "00:00";
\r
884 private String spoexSearchEnd = "00:00";
\r
886 // 「最大延長」の記載のあるもののみスポーツ延長のトリガーにする
\r
888 public boolean getSpoexLimitation() { return spoexLimitation; }
\r
890 public void setSpoexLimitation(boolean b) { spoexLimitation = b; }
\r
892 private boolean spoexLimitation = false;
\r
895 /*******************************************************************************
\r
897 ******************************************************************************/
\r
900 public void makeEnvDir() {
\r
905 // 設定ファイルを格納するディレクトリの作成
\r
906 d = new File(cause = envDir);
\r
907 if (d.exists() == false) {
\r
908 if (d.mkdir() == false) {
\r
913 // プラグイン一覧ファイルを格納するディレクトリの作成
\r
914 d = new File(cause = metainfDir);
\r
915 if (d.exists() == false) {
\r
916 if (d.mkdir() == false) {
\r
920 d = new File(cause = services);
\r
921 if (d.exists() == false) {
\r
922 if (d.mkdir() == false) {
\r
927 // 番組表をキャッシュするディレクトリの作成
\r
928 d = new File(cause = progDir);
\r
929 if (d.exists() == false) {
\r
930 if (d.mkdir() == false) {
\r
936 d = new File(cause = passedDir);
\r
937 if (d.exists() == false) {
\r
938 if (d.mkdir() == false) {
\r
944 d = new File(cause = skinDir);
\r
945 if (d.exists() == false) {
\r
946 if (d.mkdir() == false) {
\r
953 d = new File(cause = debugDir);
\r
954 if (d.exists() == false) {
\r
955 if (d.mkdir() == false) {
\r
961 catch (Exception e) {
\r
962 System.err.println(ERRID+"フォルダの作成に失敗 "+cause);
\r
967 public boolean save() {
\r
969 if ( FieldUtils.save(envText,this) ) {
\r
976 File f = new File(GTKRC);
\r
977 if ( f.exists() ) {
\r
985 System.out.println(MSGID+"保存します: "+envFile);
\r
986 if ( ! CommonUtils.writeXML(envFile, this) ) {
\r
987 System.err.println(ERRID+"保存に失敗しました");
\r
993 private boolean saveGTKRC() {
\r
994 StringBuilder sb = new StringBuilder();
\r
995 sb.append("style \"tainavistyle\" {\n");
\r
996 sb.append("font_name = \"");
\r
997 sb.append(this.getFontName());
\r
999 sb.append(String.valueOf(this.getFontSize()-fontSizeAdjustGTK));
\r
1000 sb.append("\"\n");
\r
1003 sb.append("class \"GtkWidget\" style \"tainavistyle\"\n");
\r
1004 return CommonUtils.write2file(GTKRC, sb.toString());
\r
1007 public boolean load() {
\r
1009 File ft = new File(envText);
\r
1010 if ( ft.exists() ) {
\r
1012 System.out.println("@Deprecated: "+envFile);
\r
1016 System.out.println(MSGID+"読み込みます: "+envFile);
\r
1017 File fx = new File(envFile);
\r
1018 if ( fx.exists() ) {
\r
1019 Env b = (Env) CommonUtils.readXML(envFile);
\r
1020 if ( b != null ) {
\r
1021 FieldUtils.deepCopy(this, b);
\r
1024 if ( FieldUtils.save(envText,this) ) {
\r
1025 fx.renameTo(new File(envFile+".bak"));
\r
1032 System.err.println(ERRID+"環境設定が読み込めなかったのでデフォルトの設定値を利用します");
\r
1038 * {@link Env#save()}から呼び出されるだけで公開はしない
\r
1041 private boolean saveLAF() {
\r
1042 System.out.println(MSGID+"ルックアンドフィール設定を保存します: "+lafFile);
\r
1043 if ( ! CommonUtils.write2file(lafFile, String.format("%s\t%s\t%d",this.lookAndFeel,fontName,fontSize)) ) {
\r
1044 System.err.println(ERRID+"ルックアンドフィール設定の保存に失敗しました");
\r
1054 public boolean loadText() {
\r
1056 boolean b = FieldUtils.load(envText,this);
\r
1059 File f = new File(lafFile);
\r
1060 if ( f.exists() ) {
\r
1061 System.out.println(MSGID+"ルックアンドフィール設定ファイルは廃止されます: "+lafFile);
\r
1062 String s = CommonUtils.read4file(lafFile, true);
\r
1063 if ( s != null ) {
\r
1064 Matcher ma = Pattern.compile("^(.+?)\t(.+?)\t(\\d+?)$",Pattern.DOTALL).matcher(s);
\r
1065 if ( ma.find() ) {
\r
1066 this.lookAndFeel = ma.group(1);
\r
1067 this.fontName = ma.group(2);
\r
1068 this.fontSize = Integer.valueOf(ma.group(3));
\r
1069 System.out.println("+lookandfeel="+this.lookAndFeel+", fontname="+this.fontName+", fontsize="+this.fontSize);
\r
1080 * <P>XMLDecoderに失敗すると起動できなくなる場合があるので、どうしても起動時に欲しい設定だけベタテキストで保存しおく
\r
1081 * <P>{@link #saveLAF()}は公開しない
\r
1084 public boolean loadLAF() {
\r
1088 /*******************************************************************************
\r
1090 ******************************************************************************/
\r
1097 ArrayList<JTXTButton.FontStyle> fsa = new ArrayList<JTXTButton.FontStyle>();
\r
1098 fsa.add(JTXTButton.FontStyle.BOLD);
\r
1099 fsa.add(JTXTButton.FontStyle.UNDERLINE);
\r
1100 this.setTitleFontStyle(fsa);
\r
1103 ArrayList<JTXTButton.FontStyle> fsa = new ArrayList<JTXTButton.FontStyle>();
\r
1104 this.setDetailFontStyle(fsa);
\r
1107 HashMap<TVProgram.ProgOption, Boolean> h = new HashMap<TVProgram.ProgOption, Boolean>();
\r
1108 for ( Object[] obj : TVProgram.optMarks ) {
\r
1109 h.put((TVProgram.ProgOption) obj[0],true);
\r
1111 this.setOptMarks(h);
\r
1114 ArrayList<TextValueSet> al = new ArrayList<TextValueSet>();
\r
1116 TextValueSet tv = new TextValueSet();
\r
1117 tv.setText("Googleでタイトルを検索");
\r
1118 tv.setValue("http://www.google.co.jp/search?q=%ENCTITLE%");
\r
1121 tv = new TextValueSet();
\r
1122 tv.setText("Bingでタイトルを検索");
\r
1123 tv.setValue("http://www.bing.com/search?q=%ENCTITLE%");
\r
1126 tv = new TextValueSet();
\r
1127 tv.setText("ブラウザで番組詳細のページを開く");
\r
1128 tv.setValue("%DETAILURL%");
\r
1131 tv = new TextValueSet();
\r
1132 tv.setText("ブラウザで放送局のページを探す");
\r
1133 tv.setValue("http://www.google.co.jp/search?hl=ja&btnI=1&q=%ENCCHNAME%");
\r
1136 tv = new TextValueSet();
\r
1137 tv.setText("ブラウザで番組情報のページを探す");
\r
1138 tv.setValue("http://www.google.co.jp/search?hl=ja&btnI=1&q=%ENCCHNAME%+%ENCTITLE%");
\r
1141 tv = new TextValueSet();
\r
1142 tv.setText("ブラウザでTweetする");
\r
1143 tv.setValue("https://twitter.com/share?text=%DATE%+%START%-%END%+%ENCCHNAME%+%ENCTITLE%");
\r
1146 tv = new TextValueSet();
\r
1147 tv.setText("CHAN-TORUの予約ページを開く");
\r
1148 tv.setValue("https://tv.so-net.ne.jp/chan-toru/detail?type=bytime&cat=%TVKCAT%&area=%TVKAREACODE%&pid=%TVKPID%");
\r
1151 this.setTvCommand(al);
\r
1155 if ( firstinstance ) {
\r
1156 firstinstance = false;
\r