タイニー番組ナビゲータ本体
リビジョン | 713ebeeaef3d07edf28a788630a6c903a7905cd5 (tree) |
---|---|
日時 | 2018-06-23 12:52:55 |
作者 | Masahiko Kimura <mkimura@u01....> |
コミッター | Masahiko Kimura |
Ver.1.6.1 (2018/06/23)
1. [DBR-T2007]エンコーダがすべて「R1」になる不具合の修正
2. [DBR-T2007]BDの詳細情報が取得できない不具合の修正
3. [タイトル一覧]フォルダコンボの右端の描画が乱れる不具合の修正
4. [新聞形式]放送局別のノードを選択した状態でレコーダを切り替えると再描画されない不具合の修正
5. [予約情報]フォルダコンボの展開幅を広げる
6. [タイトル情報]第<n>話「<サブタイトル>」形式を個別処理する
@@ -596,26 +596,105 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H | ||
596 | 596 | return true; |
597 | 597 | } |
598 | 598 | |
599 | - /** | |
600 | - * ページャーによる再描画 | |
599 | + /* | |
600 | + * 現在の選択状態で再描画する | |
601 | 601 | */ |
602 | - public boolean redrawByPager() { | |
602 | + public void redrawByCurrentSelection() { | |
603 | + TreePath path = jTree_tree.getSelectionPath(); | |
603 | 604 | |
604 | - //JTreeLabel.Nodes node = jLabel_tree.getNode(); | |
605 | - String value = jLabel_tree.getValue(); | |
605 | + if ( path != null && path.getPathCount() == 2 ) { | |
606 | + // 親ノードとか触られても… | |
607 | + return; | |
608 | + } | |
606 | 609 | |
607 | - if ( value != null ) { | |
608 | - if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
609 | - redrawByNow(cur_tuner); | |
610 | - } | |
611 | - else { | |
612 | - redrawByDate(value, cur_tuner); | |
610 | + if ( path != null && path.getPathCount() == 3 ) { | |
611 | + | |
612 | + if (env.getDebug()) System.out.println(DBGID+"SELECTED treeSelListner "+path); | |
613 | + | |
614 | + stopTimer(); | |
615 | + | |
616 | + JTreeLabel.Nodes node = JTreeLabel.Nodes.getNode(path.getPathComponent(1).toString()); | |
617 | + String value = path.getLastPathComponent().toString(); | |
618 | + | |
619 | + switch ( node ) { | |
620 | + case DATE: | |
621 | + if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
622 | + // 現在日時に移動する | |
623 | + redrawByNow(IterationType.ALL); | |
624 | + } | |
625 | + else { | |
626 | + redrawByDate(value,IterationType.ALL); | |
627 | + } | |
628 | + if ( env.isPagerEnabled() ) { | |
629 | + setPagerEnabled(true); | |
630 | + } | |
631 | + break; | |
632 | + case TERRA: | |
633 | + if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
634 | + redrawByNow(IterationType.TERRA); | |
635 | + } | |
636 | + else { | |
637 | + redrawByDate(value,IterationType.TERRA); | |
638 | + } | |
639 | + if ( env.isPagerEnabled() ) { | |
640 | + setPagerEnabled(true); | |
641 | + } | |
642 | + break; | |
643 | + case BS: | |
644 | + if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
645 | + redrawByNow(IterationType.BS); | |
646 | + } | |
647 | + else { | |
648 | + redrawByDate(path.getLastPathComponent().toString(),IterationType.BS); | |
649 | + } | |
650 | + if ( env.isPagerEnabled() ) { | |
651 | + setPagerEnabled(true); | |
652 | + } | |
653 | + break; | |
654 | + case CS: | |
655 | + if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
656 | + redrawByNow(IterationType.CS); | |
657 | + } | |
658 | + else { | |
659 | + redrawByDate(path.getLastPathComponent().toString(),IterationType.CS); | |
660 | + } | |
661 | + if ( env.isPagerEnabled() ) { | |
662 | + setPagerEnabled(true); | |
663 | + } | |
664 | + break; | |
665 | + case BCAST: | |
666 | + redrawByCenter(value); | |
667 | + if ( env.isPagerEnabled() ) { | |
668 | + setPagerEnabled(false); | |
669 | + } | |
670 | + break; | |
671 | + case PASSED: | |
672 | + PassedProgram passed = tvprograms.getPassed(); | |
673 | + if ( passed.loadAllCenters(value) ) { | |
674 | + redrawByDate(value, IterationType.PASSED); | |
675 | + } | |
676 | + else { | |
677 | + MWin.appendError(ERRID+"過去ログが存在しません: "+value); | |
678 | + ringBeep(); | |
679 | + } | |
680 | + if ( env.isPagerEnabled() ) { | |
681 | + setPagerEnabled(true); | |
682 | + } | |
683 | + break; | |
684 | + default: | |
685 | + break; | |
613 | 686 | } |
614 | 687 | |
615 | - return true; | |
688 | + jLabel_tree.setView(node, value); | |
689 | + return; | |
616 | 690 | } |
617 | 691 | |
618 | - return false; | |
692 | + // なんかおかしいのでデフォルト選択にまわす | |
693 | + CommonUtils.printStackTrace(); | |
694 | + MWin.appendError(DBGID+"デバッグまで仮置き"); | |
695 | + //redrawByNow(IterationType.ALL); | |
696 | + //jLabel_tree.setView(JTreeLabel.Nodes.DATE, JTreeLabel.Nodes.NOW.getLabel()); | |
697 | + | |
619 | 698 | } |
620 | 699 | |
621 | 700 | /** |
@@ -2646,100 +2725,7 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H | ||
2646 | 2725 | @Override |
2647 | 2726 | public void valueChanged(TreeSelectionEvent e){ |
2648 | 2727 | |
2649 | - TreePath path = jTree_tree.getSelectionPath(); | |
2650 | - | |
2651 | - if ( path != null && path.getPathCount() == 2 ) { | |
2652 | - // 親ノードとか触られても… | |
2653 | - return; | |
2654 | - } | |
2655 | - | |
2656 | - if ( path != null && path.getPathCount() == 3 ) { | |
2657 | - | |
2658 | - if (env.getDebug()) System.out.println(DBGID+"SELECTED treeSelListner "+path); | |
2659 | - | |
2660 | - stopTimer(); | |
2661 | - | |
2662 | - JTreeLabel.Nodes node = JTreeLabel.Nodes.getNode(path.getPathComponent(1).toString()); | |
2663 | - String value = path.getLastPathComponent().toString(); | |
2664 | - | |
2665 | - switch ( node ) { | |
2666 | - case DATE: | |
2667 | - if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
2668 | - // 現在日時に移動する | |
2669 | - redrawByNow(IterationType.ALL); | |
2670 | - } | |
2671 | - else { | |
2672 | - redrawByDate(value,IterationType.ALL); | |
2673 | - } | |
2674 | - if ( env.isPagerEnabled() ) { | |
2675 | - setPagerEnabled(true); | |
2676 | - } | |
2677 | - break; | |
2678 | - case TERRA: | |
2679 | - if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
2680 | - redrawByNow(IterationType.TERRA); | |
2681 | - } | |
2682 | - else { | |
2683 | - redrawByDate(value,IterationType.TERRA); | |
2684 | - } | |
2685 | - if ( env.isPagerEnabled() ) { | |
2686 | - setPagerEnabled(true); | |
2687 | - } | |
2688 | - break; | |
2689 | - case BS: | |
2690 | - if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
2691 | - redrawByNow(IterationType.BS); | |
2692 | - } | |
2693 | - else { | |
2694 | - redrawByDate(path.getLastPathComponent().toString(),IterationType.BS); | |
2695 | - } | |
2696 | - if ( env.isPagerEnabled() ) { | |
2697 | - setPagerEnabled(true); | |
2698 | - } | |
2699 | - break; | |
2700 | - case CS: | |
2701 | - if ( JTreeLabel.Nodes.NOW.getLabel().equals(value) ) { | |
2702 | - redrawByNow(IterationType.CS); | |
2703 | - } | |
2704 | - else { | |
2705 | - redrawByDate(path.getLastPathComponent().toString(),IterationType.CS); | |
2706 | - } | |
2707 | - if ( env.isPagerEnabled() ) { | |
2708 | - setPagerEnabled(true); | |
2709 | - } | |
2710 | - break; | |
2711 | - case BCAST: | |
2712 | - redrawByCenter(value); | |
2713 | - if ( env.isPagerEnabled() ) { | |
2714 | - setPagerEnabled(false); | |
2715 | - } | |
2716 | - break; | |
2717 | - case PASSED: | |
2718 | - PassedProgram passed = tvprograms.getPassed(); | |
2719 | - if ( passed.loadAllCenters(value) ) { | |
2720 | - redrawByDate(value, IterationType.PASSED); | |
2721 | - } | |
2722 | - else { | |
2723 | - MWin.appendError(ERRID+"過去ログが存在しません: "+value); | |
2724 | - ringBeep(); | |
2725 | - } | |
2726 | - if ( env.isPagerEnabled() ) { | |
2727 | - setPagerEnabled(true); | |
2728 | - } | |
2729 | - break; | |
2730 | - default: | |
2731 | - break; | |
2732 | - } | |
2733 | - | |
2734 | - jLabel_tree.setView(node, value); | |
2735 | - return; | |
2736 | - } | |
2737 | - | |
2738 | - // なんかおかしいのでデフォルト選択にまわす | |
2739 | - CommonUtils.printStackTrace(); | |
2740 | - MWin.appendError(DBGID+"デバッグまで仮置き"); | |
2741 | - //redrawByNow(IterationType.ALL); | |
2742 | - //jLabel_tree.setView(JTreeLabel.Nodes.DATE, JTreeLabel.Nodes.NOW.getLabel()); | |
2728 | + redrawByCurrentSelection(); | |
2743 | 2729 | } |
2744 | 2730 | }; |
2745 | 2731 |
@@ -366,13 +366,15 @@ abstract class AbsTitleDialog extends JDialog { | ||
366 | 366 | for (String pat : patterns){ |
367 | 367 | Matcher m = Pattern.compile(pat).matcher(otitle); |
368 | 368 | if (m.find()){ |
369 | + String pre = m.group(1); | |
370 | + String post = m.groupCount() > 2 ? m.group(3) : ""; | |
369 | 371 | Matcher mw = Pattern.compile("(0-9)*").matcher(m.group(2)); |
370 | 372 | if (mw.find()){ |
371 | 373 | String zno = CommonUtils.toZENNUM(no); |
372 | - return m.group(1) + zno + m.group(3); | |
374 | + return pre + zno + post; | |
373 | 375 | } |
374 | 376 | else |
375 | - return m.group(1) + no + m.group(3); | |
377 | + return pre + no + post; | |
376 | 378 | } |
377 | 379 | } |
378 | 380 |
@@ -387,6 +389,7 @@ abstract class AbsTitleDialog extends JDialog { | ||
387 | 389 | "(「)(.*?)(」)", |
388 | 390 | "(『)(.*?)(』)", |
389 | 391 | "([)(.*?)(])", |
392 | + "(【)(.*?)(】)", | |
390 | 393 | "(\\[)(.*?)(\\])" |
391 | 394 | }; |
392 | 395 |
@@ -403,6 +406,10 @@ abstract class AbsTitleDialog extends JDialog { | ||
403 | 406 | * サブタイトルを取得する |
404 | 407 | */ |
405 | 408 | protected String getSubtitle(String title, ProgDetailList pdl){ |
409 | + String subc = searchSubtitleCombo(pdl.title + " " + pdl.detail); | |
410 | + if (subc != null) | |
411 | + return subc; | |
412 | + | |
406 | 413 | String sub1 = searchSubtitle(title); |
407 | 414 | if (sub1 != null) |
408 | 415 | return sub1; |
@@ -417,6 +424,21 @@ abstract class AbsTitleDialog extends JDialog { | ||
417 | 424 | /* |
418 | 425 | * サブタイトルを抽出する |
419 | 426 | */ |
427 | + protected String searchSubtitleCombo(String title){ | |
428 | + String[] patternsCombo = { | |
429 | + "(第|#|#)([0-90-9]{1,3})(話|回)?( | )?「(.*?)」", | |
430 | + "(第|#|#)([0-90-9]{1,3})(話|回)?( | )?『(.*?)』", | |
431 | + "(第|#|#)([0-90-9]{1,3})(話|回)?( | )?【(.*?)】"}; | |
432 | + | |
433 | + for (String pat : patternsCombo){ | |
434 | + Matcher m = Pattern.compile(pat).matcher(title); | |
435 | + if (m.find()) | |
436 | + return m.group(5); | |
437 | + } | |
438 | + | |
439 | + return null; | |
440 | + } | |
441 | + | |
420 | 442 | protected String searchSubtitle(String title){ |
421 | 443 | String[] patterns = {"「(.*?)」", "『(.*?)』", "【(.*?)】"}; |
422 | 444 |
@@ -37,8 +37,6 @@ import javax.swing.KeyStroke; | ||
37 | 37 | import javax.swing.SpringLayout; |
38 | 38 | import javax.swing.event.ListSelectionEvent; |
39 | 39 | import javax.swing.event.ListSelectionListener; |
40 | -import javax.swing.event.PopupMenuEvent; | |
41 | -import javax.swing.event.PopupMenuListener; | |
42 | 40 | import javax.swing.event.TableModelEvent; |
43 | 41 | import javax.swing.table.DefaultTableColumnModel; |
44 | 42 | import javax.swing.table.DefaultTableModel; |
@@ -511,8 +509,9 @@ public abstract class AbsTitleListView extends JPanel { | ||
511 | 509 | removeListeners(); |
512 | 510 | |
513 | 511 | if (setting){ |
514 | - if (rec.GetRdSettings(force)) | |
515 | - MWin.appendMessage(MSGID+"レコーダから設定情報が正常に取得できました"); | |
512 | + if (rec.GetRdSettings(force)){ | |
513 | +// MWin.appendMessage(MSGID+"レコーダから設定情報が正常に取得できました"); | |
514 | + } | |
516 | 515 | else |
517 | 516 | MWin.appendError(ERRID+"レコーダからの設定情報の取得に失敗しました"); |
518 | 517 | } |
@@ -527,7 +526,7 @@ public abstract class AbsTitleListView extends JPanel { | ||
527 | 526 | |
528 | 527 | StWin.appendMessage(MSGID+"レコーダからタイトル一覧を取得します(force=" + String.valueOf(force) + ",details=" + String.valueOf(details) + "):"+devId); |
529 | 528 | if (rec.GetRdTitles(devId, force, details, devId.equals(HDDRecorder.DEVICE_ALL))){ |
530 | - MWin.appendMessage(MSGID+"レコーダからタイトル一覧が正常に取得できました:"+devId); | |
529 | +// MWin.appendMessage(MSGID+"レコーダからタイトル一覧が正常に取得できました:"+devId); | |
531 | 530 | } |
532 | 531 | else |
533 | 532 | MWin.appendError(ERRID+"レコーダからのタイトル一覧の取得に失敗しました:"+devId); |
@@ -1697,41 +1696,15 @@ public abstract class AbsTitleListView extends JPanel { | ||
1697 | 1696 | private JComboBoxPanel getFolderComboPanel() { |
1698 | 1697 | if (jCBXPanel_folder == null){ |
1699 | 1698 | jCBXPanel_folder = new JComboBoxPanel("フォルダ:", FLABEL_WIDTH, FCOMBO_WIDTH, true); |
1699 | + jCBXPanel_folder.addPopupWidth(FCOMBO_OPEN_WIDTH-FCOMBO_WIDTH); | |
1700 | + | |
1700 | 1701 | JComboBox combo = jCBXPanel_folder.getJComboBox(); |
1701 | 1702 | combo.setMaximumRowCount(32); |
1702 | - combo.setPreferredSize(new Dimension(FCOMBO_WIDTH, PARTS_HEIGHT)); | |
1703 | - combo.addPopupMenuListener(new FolderPopupMenuListener()); | |
1704 | 1703 | } |
1705 | 1704 | |
1706 | 1705 | return jCBXPanel_folder; |
1707 | 1706 | } |
1708 | 1707 | |
1709 | - /* | |
1710 | - * フォルダ用コンボボックスのリスナークラス | |
1711 | - */ | |
1712 | - private class FolderPopupMenuListener implements PopupMenuListener { | |
1713 | - private boolean adjusting; | |
1714 | - @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { | |
1715 | - JComboBox combo = (JComboBox) e.getSource(); | |
1716 | - Dimension size = combo.getSize(); | |
1717 | - if ( size.width >= FCOMBO_OPEN_WIDTH) { | |
1718 | - return; | |
1719 | - } | |
1720 | - | |
1721 | - if (!adjusting) { | |
1722 | - adjusting = true; | |
1723 | - combo.setSize(FCOMBO_OPEN_WIDTH, size.height); | |
1724 | - combo.showPopup(); | |
1725 | - } | |
1726 | - | |
1727 | - combo.setSize(size); | |
1728 | - adjusting = false; | |
1729 | - } | |
1730 | - | |
1731 | - @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {} | |
1732 | - @Override public void popupMenuCanceled(PopupMenuEvent e) {} | |
1733 | - } | |
1734 | - | |
1735 | 1708 | /******************************************************************************* |
1736 | 1709 | * 表表示 |
1737 | 1710 | ******************************************************************************/ |
@@ -79,7 +79,7 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
79 | 79 | // 新聞形式 |
80 | 80 | protected abstract boolean jumpToNow(); |
81 | 81 | protected abstract boolean jumpToPassed(String passed); |
82 | - protected abstract boolean redrawByPager(); | |
82 | + protected abstract void redrawByPager(); | |
83 | 83 | protected abstract void toggleMatchBorder(boolean b); |
84 | 84 | protected abstract void setPaperColorDialogVisible(boolean b); |
85 | 85 | protected abstract void setPaperZoom(int n); |
@@ -178,6 +178,7 @@ public class RecSettingEditorPanel extends JPanel { | ||
178 | 178 | CommonSwingUtils.putComponentOn(this, jCBXPanel_dvdcompat = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y); |
179 | 179 | CommonSwingUtils.putComponentOn(this, jCBXPanel_aspect = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y); |
180 | 180 | CommonSwingUtils.putComponentOn(this, jCBXPanel_mvChapter = new JComboBoxPanel("",110,110), COMBO_WIDTH, COMBO_HEIGHT, x+=(COMBO_WIDTH+SEP_WIDTH), y); |
181 | + jCBXPanel_folder.addPopupWidth(300); | |
181 | 182 | |
182 | 183 | y += COMBO_HEIGHT; |
183 | 184 | x = SEP_WIDTH_NARROW; |
@@ -5,7 +5,7 @@ import java.util.regex.Pattern; | ||
5 | 5 | |
6 | 6 | |
7 | 7 | public class VersionInfo { |
8 | - private static final String Version = "タイニー番組ナビゲータ for DBR-T2007 3.22.18β+1.6"; | |
8 | + private static final String Version = "タイニー番組ナビゲータ for DBR-T2007 3.22.18β+1.6.1"; | |
9 | 9 | |
10 | 10 | private static final String OSname = System.getProperty("os.name"); |
11 | 11 | private static final String OSvers = System.getProperty("os.version"); |
@@ -1806,11 +1806,10 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H | ||
1806 | 1806 | } |
1807 | 1807 | |
1808 | 1808 | @Override |
1809 | - protected boolean redrawByPager() { | |
1809 | + protected void redrawByPager() { | |
1810 | 1810 | timer_now.pause(); |
1811 | - boolean b = paper.redrawByPager(); | |
1811 | + paper.redrawByCurrentSelection(); | |
1812 | 1812 | timer_now.start(); |
1813 | - return b; | |
1814 | 1813 | } |
1815 | 1814 | |
1816 | 1815 | @Override |
@@ -3231,6 +3230,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H | ||
3231 | 3230 | if ( succeeded ) { |
3232 | 3231 | reserved.redrawReservedList(); |
3233 | 3232 | recorded.redrawRecordedList(); |
3233 | + paper.redrawByCurrentSelection(); | |
3234 | 3234 | |
3235 | 3235 | mwin.appendMessage(String.format("【予約詳細の取得処理が完了しました】 所要時間: %.2f秒",tc.end())); |
3236 | 3236 | } |
@@ -1146,7 +1146,10 @@ public class PlugIn_RecDBR_T2007 extends HDDRecorderUtils implements HDDRecorder | ||
1146 | 1146 | // recording |
1147 | 1147 | |
1148 | 1148 | // 基本情報をセットする |
1149 | + String tuner = r.getTuner(); | |
1149 | 1150 | setReserveBasicInfo(r, exec, option, eventname, network, ch, repeat, datetime, duration); |
1151 | + // チューナはそのまま | |
1152 | + r.setTuner(tuner); | |
1150 | 1153 | |
1151 | 1154 | // 保存先ドライブ |
1152 | 1155 | String device_name = value2text(device, device_id); |
@@ -1898,7 +1901,7 @@ public class PlugIn_RecDBR_T2007 extends HDDRecorderUtils implements HDDRecorder | ||
1898 | 1901 | "\"datetime\":(\\d+)," + // 8 |
1899 | 1902 | "\"duration\":(\\d+)," + // 9 |
1900 | 1903 | "\"copycount\":(\\d+)," + // 10 |
1901 | - "\"dlnaObjectID\":\"([^\"]+)\"," + // 11 | |
1904 | + "\"dlnaObjectID\":\"([^\"]*)\"," + // 11 | |
1902 | 1905 | "\"recording\":(false|true)," + // 12 |
1903 | 1906 | "\"chapter\":\\[([^\\]]*)\\]\\}") // 13 |
1904 | 1907 | .matcher(response); |