OSDN Git Service

予約ダイアログに裏番組情報のグラフィカル表示を追加
authorpeeweedee <peeweedee@users.sourceforge.jp>
Mon, 29 Jul 2013 14:32:20 +0000 (23:32 +0900)
committerpeeweedee <peeweedee@users.sourceforge.jp>
Mon, 29 Jul 2013 14:32:20 +0000 (23:32 +0900)
13 files changed:
TinyBannavi/05_history.txt
TinyBannavi/env/RdChannelCode.dat.TvRock
TinyBannavi/src/tainavi/AbsPaperView.java
TinyBannavi/src/tainavi/AbsRecorderSettingView.java
TinyBannavi/src/tainavi/AbsReserveDialog.java
TinyBannavi/src/tainavi/AbsToolBar.java
TinyBannavi/src/tainavi/CommonUtils.java
TinyBannavi/src/tainavi/JComboBoxPanel.java
TinyBannavi/src/tainavi/OverlapReserveViewPanel.java [new file with mode: 0644]
TinyBannavi/src/tainavi/PlugIn_RecRD_TvRock.java
TinyBannavi/src/tainavi/RecSettingEditorPanel.java
TinyBannavi/src/tainavi/Viewer.java
TinyBannavi/src/todo.txt

index ae5ead9..ab299ad 100644 (file)
@@ -33,6 +33,9 @@
  ・(キーワード検索) テーブル上の条件行の編集方法の改善\r
  ・(りもこん、ステータスビュー) "DBR-Z*"のレコーダIDを持つレコーダも選択対象となるようにした(>>497.)\r
  ・(各種ダイアログ) ESCキーでのキャンセル動作(閉じる)を実装 ※全部ではない\r
+ ・(ツールバー) 新聞軽視の番組枠の高さの倍率スライダーを1.0~3.0倍→0.5~3.0倍に変更\r
+ ・(ツールバー) 新聞軽視の番組枠の高さの倍率スライダーをダブルクリックしたら1.0倍に戻るようにした\r
+ ・(予約ダイアログ) 裏番組情報のグラフィカル表示を実装\r
 ■バグ修正\r
  ・(その他) SwingWorkerで生成したサブスレッド内で想定外のruntime exceptionが発生するとサブスレッドがログも出さずに死んでしまってエラー原因を調査できなかったが、ログが出るように仕掛けをしたのでその仕掛けがうまく動くようなら今後改善が進んでいくはず\r
  ・(予約ダイアログ) 類似予約テーブルで「類似予約を選択しない」を選んでも、番組ID取得ボタンがリセットされない場合がある問題を修正\r
index b4ee072..a2374ba 100644 (file)
@@ -1,4 +1,4 @@
-# 2013/03/14 22:26
+# 2013/07/29 22:19
 "NHK総合","NHK総合","地上波:NHK総合"
 "NHK Eテレ","NHK教育","地上波:NHK教育"
 "日本テレビ","日本テレビ","地上波:日本テレビ"
@@ -61,3 +61,4 @@
 "TBSニュースバード","TBSニュースバード","CS:TBSニュースバード"
 "FOXムービー","FOXムービー","CS:FOXムービー"
 "スペースシャワーTV プラス","スペシャプラス","CS:スペシャプラス"
+"BS236 BSアニマックス","BSアニマックス","BS:BSアニマックス"
index 9c4661f..543ad7e 100644 (file)
@@ -315,6 +315,39 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H
        }\r
        \r
        /**\r
+        * ツールバーから過去ログへのジャンプ\r
+        */\r
+       public boolean jumpToPassed(String passed) {\r
+               \r
+               // ページャーは効くよ\r
+               if ( env.isPagerEnabled() ) {\r
+                       setPagerEnabled(true);\r
+               }\r
+               \r
+               // タイマーは止める\r
+               stopTimer();\r
+               \r
+               GregorianCalendar c = CommonUtils.getCalendar(passed);\r
+               String adate = CommonUtils.getDate(c);\r
+               \r
+               // 指定日付に移動して放送局の位置を確認する\r
+               TVProgramIterator pli = redrawByDateWithCenter(null,adate);\r
+               if ( pli == null ) {\r
+                       // どちらにもない\r
+                       MWin.appendError(ERRID+"ジャンプ先の日付がみつかりません: "+adate);\r
+                       ringBeep();\r
+                       return false;\r
+               }\r
+               \r
+               // 新聞形式に移動\r
+               if ( ! isTabSelected(MWinTab.PAPER) ) {\r
+                       setSelectedTab(MWinTab.PAPER);\r
+               }\r
+               \r
+               return true;\r
+       }\r
+       \r
+       /**\r
         * リスト形式・本体予約一覧からの目的の番組へジャンプ\r
         */\r
        public boolean jumpToBangumi(String center, String startdt) {\r
@@ -329,10 +362,13 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H
 \r
                // 日付群\r
                GregorianCalendar c = CommonUtils.getCalendar(startdt);\r
+               int hour = c.get(Calendar.HOUR_OF_DAY);\r
+               int min  = c.get(Calendar.MINUTE);\r
+               \r
                String adate = CommonUtils.getDate(c);\r
-               String atime = CommonUtils.getTime(c);\r
                String adate529 = CommonUtils.getDate529(c,true);\r
                \r
+               \r
                // 指定日付に移動して放送局の位置を確認する\r
                TVProgramIterator pli = redrawByDateWithCenter(center,adate529);\r
                if ( pli == null ) {\r
@@ -346,7 +382,11 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H
                if ( ! isTabSelected(MWinTab.PAPER) ) {\r
                        setSelectedTab(MWinTab.PAPER);\r
                }\r
-                       \r
+               \r
+               /*\r
+                * マウスカーソル移動\r
+                */\r
+               \r
                // 横の列\r
                int crindex = pli.getIndex(center);\r
                if ( crindex == -1 ) {\r
@@ -365,24 +405,17 @@ public abstract class AbsPaperView extends JPanel implements TickTimerListener,H
                }\r
                \r
                // 縦の列\r
-               int h = 0;\r
-               int m = 0;\r
                int y = 0;\r
-               Matcher ma = Pattern.compile("^(\\d\\d):(\\d\\d)$").matcher(atime);\r
-               if (ma.find()) {\r
-                       h = Integer.valueOf(ma.group(1));\r
-                       m = Integer.valueOf(ma.group(2));\r
-               }\r
                if (adate529.equals(adate)) {\r
-                       if (h < TIMEBAR_START) {\r
-                               h = TIMEBAR_START;\r
-                               m = 0;\r
+                       if (hour < TIMEBAR_START) {\r
+                               hour = TIMEBAR_START;\r
+                               min = 0;\r
                        }\r
                }\r
                else {\r
-                       h += 24;\r
+                       hour += 24;\r
                }\r
-               y = Math.round((float)((h-TIMEBAR_START)*60+m)*bounds.getPaperHeightMultiplier()*paperHeightZoom);\r
+               y = Math.round((float)((hour-TIMEBAR_START)*60+min)*bounds.getPaperHeightMultiplier()*paperHeightZoom);\r
                \r
                // 新聞面を移動する\r
                {\r
index 06c4248..b31ded5 100644 (file)
@@ -545,9 +545,9 @@ public abstract class AbsRecorderSettingView extends JScrollPane {
                                jCBP_calendar.setSelected(rec.getUseCalendar());\r
                                \r
                                // 主にDIGA用\r
-                               jCBX_tunernum.setText("-");\r
+                               jCBX_tunernum.setLabelText("-");\r
                                if ( rl.get(0).getTunerNum() > 0 ) {\r
-                                       jCBX_tunernum.setText("最大同時録画数の手動設定");\r
+                                       jCBX_tunernum.setLabelText("最大同時録画数の手動設定");\r
                                        jCBX_tunernum.setEnabled(true);\r
                                        jCBX_tunernum.setSelectedItem(String.valueOf(rl.get(0).getTunerNum()));\r
                                }\r
index 2d5641b..8233ef2 100644 (file)
@@ -1,9 +1,9 @@
 package tainavi;\r
 \r
 import java.awt.BorderLayout;\r
+import java.awt.Color;\r
 import java.awt.Component;\r
 import java.awt.Dimension;\r
-import java.awt.event.ActionEvent;\r
 import java.awt.event.WindowAdapter;\r
 import java.awt.event.WindowEvent;\r
 import java.awt.event.WindowListener;\r
@@ -11,11 +11,10 @@ import java.util.ArrayList;
 import java.util.Calendar;\r
 import java.util.GregorianCalendar;\r
 \r
-import javax.swing.AbstractAction;\r
-import javax.swing.JDialog;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JPanel;\r
 import javax.swing.JScrollPane;\r
+import javax.swing.border.LineBorder;\r
 \r
 import tainavi.TitleEditorPanel.TimeVal;\r
 import tainavi.HDDRecorder.RecType;\r
@@ -101,8 +100,9 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
        private JPanel jContentPane_rsv = null;\r
 \r
        private TitleEditorPanel jPane_title = null;                            // 番組設定\r
-       private RecSettingEditorPanel jPane_recsetting = null;  // 録画設定\r
+       private RecSettingEditorPanel jPane_recsetting = null;          // 録画設定\r
        private LikeReserveEditorPanel  jPane_likersv = null;           // 類似予約\r
+       private OverlapReserveViewPanel jPane_overlap = null;\r
        \r
        \r
        /*\r
@@ -458,10 +458,22 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
        /**\r
         * 番組情報から予約情報を生成する\r
         */\r
-       private ReserveList getReserveList(HDDRecorder recorder, String enc) {\r
+       private ReserveList getReserveList(HDDRecorder recorder, ProgDetailList tvd, TimeVal tVal, String enc) {\r
                \r
                ReserveList r = new ReserveList();\r
                \r
+               // 開始・終了時刻\r
+               if ( tvd != null ) {\r
+                       r.setTitle(tvd.title);\r
+                       r.setCh_name(tvd.center);\r
+                       GregorianCalendar ca = CommonUtils.getCalendar(tVal!=null ? tVal.startDateTime : tvd.startDateTime);\r
+                       GregorianCalendar cz = CommonUtils.getCalendar(tVal!=null ? tVal.endDateTime : tvd.endDateTime);\r
+                       r.setAhh(String.format("%02d",ca.get(Calendar.HOUR_OF_DAY)));\r
+                       r.setAmm(String.format("%02d",ca.get(Calendar.MINUTE)));\r
+                       r.setZhh(String.format("%02d",cz.get(Calendar.HOUR_OF_DAY)));\r
+                       r.setZmm(String.format("%02d",cz.get(Calendar.MINUTE)));\r
+               }\r
+               \r
                // チューナー\r
                r.setTuner(enc);\r
                \r
@@ -679,19 +691,27 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
         * これはグラフで描画するようになるまでの仮置き\r
         * @param urabanlist\r
         */\r
-       private void showUrabanList(ArrayList<ReserveList> urabanlist) {\r
+       private void showUrabanList(ReserveList myrsv, ArrayList<ReserveList> urabanlist) {\r
+               \r
+               jPane_overlap.putOverlap(myrsv, urabanlist);\r
+               \r
+               if ( ! debug ) {\r
+                       return;\r
+               }\r
+               \r
                if ( urabanlist == null ) {\r
                        return;\r
                }\r
                String MID = MSGID+"[裏番組チェック] ";\r
+               System.out.println(MID+"----------");\r
                if ( urabanlist.size() > 0 ) {\r
                        for ( ReserveList ura : urabanlist ) {\r
-                               MWin.appendMessage(String.format("%s裏番組あり: %s:%s-%s:%s, %-10s, %-12s, %s", MID, ura.getAhh(), ura.getAmm(), ura.getZhh(), ura.getZmm(), ura.getTuner(), ura.getCh_name(), ura.getTitle()));\r
+                               System.out.println(String.format("%s裏番組あり: %s:%s-%s:%s, %-10s, %-12s, %s", MID, ura.getAhh(), ura.getAmm(), ura.getZhh(), ura.getZmm(), ura.getTuner(), ura.getCh_name(), ura.getTitle()));\r
                        }\r
                }\r
                else {\r
                        // 裏番組がない場合に分かりにくかったので追加\r
-                       MWin.appendMessage(MID+"裏番組はありません");\r
+                       System.out.println(MID+"裏番組はありません");\r
                }\r
        }\r
        \r
@@ -742,10 +762,15 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
                        jContentPane_rsv = new JPanel();\r
                        \r
                        jContentPane_rsv.setLayout(new BorderLayout());\r
+\r
+                       JPanel panel = new JPanel();\r
+                       panel.setLayout(new BorderLayout());\r
+                       jContentPane_rsv.add(panel,BorderLayout.CENTER);\r
+                       jContentPane_rsv.add(getJPane_overlap(),BorderLayout.EAST);\r
                        \r
-                       jContentPane_rsv.add(getJPane_title(),BorderLayout.NORTH);\r
-                       jContentPane_rsv.add(getJPane_recsetting(),BorderLayout.CENTER);\r
-                       jContentPane_rsv.add(getJPane_likersv(),BorderLayout.SOUTH);\r
+                       panel.add(getJPane_title(),BorderLayout.NORTH);\r
+                       panel.add(getJPane_recsetting(),BorderLayout.CENTER);\r
+                       panel.add(getJPane_likersv(),BorderLayout.SOUTH);\r
                }\r
                return jContentPane_rsv;\r
        }\r
@@ -786,6 +811,16 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
                return jPane_likersv;\r
        }\r
        \r
+       /**\r
+        * 重複予約のエリア\r
+        */\r
+       private JScrollPane getJPane_overlap() {\r
+               if ( jPane_overlap == null ) {\r
+                       jPane_overlap = new OverlapReserveViewPanel();\r
+                       jPane_overlap.setBorder(new LineBorder(Color.BLACK));\r
+               }\r
+               return jPane_overlap;\r
+       }\r
        \r
        /*******************************************************************************\r
         * ハンドラ―メソッドの実装\r
@@ -1217,9 +1252,10 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
                \r
                // 選択\r
                String enc = myrec.getEmptyEncorder(tvd.center, tVal.startDateTime, tVal.endDateTime, null, null);\r
-               ReserveList myrsv = getReserveList(myrec, enc);\r
+               ReserveList myrsv = getReserveList(myrec, tvd, tVal, enc);\r
                jPane_recsetting.setSelectedValues(tvd, myrsv);\r
-               showUrabanList(myrec.getUrabanList());\r
+               \r
+               showUrabanList(myrsv, myrec.getUrabanList());\r
                \r
                return true;\r
        }\r
@@ -1411,11 +1447,12 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
                        \r
                        // 録画設定の選択\r
                        setSelectedRecorder(myrec);\r
+                       jPane_recsetting.setFlexItems(myrec, tvd.center);\r
                        \r
                        String enc = myrec.getEmptyEncorder(tvd.center, tVal.startDateTime, tVal.endDateTime, null, vrate);\r
-                       ReserveList myrsv = getReserveList(myrec, enc);\r
+                       ReserveList myrsv = getReserveList(myrec, tvd, tVal, enc);\r
                        jPane_recsetting.setSelectedValues(tvd, myrsv);\r
-                       showUrabanList(myrec.getUrabanList());\r
+                       showUrabanList(myrsv, myrec.getUrabanList());\r
                                                \r
                        if ( myavs != null ) {\r
                                // ジャンル別AV設定から追加で選択する\r
@@ -1455,7 +1492,16 @@ abstract class AbsReserveDialog extends JEscCancelDialog implements HDDRecorderL
                        // 録画設定の選択\r
                        myrec.getEmptyEncorder(tvd.center, myrsv.getStartDateTime(), myrsv.getEndDateTime(), myrsv, null);\r
                        setSelectedRecorder(myrec);\r
-                       showUrabanList(myrec.getUrabanList());\r
+                       jPane_recsetting.setFlexItems(myrec, tvd.center);\r
+                       \r
+                       {\r
+                               TimeVal tVal = getTimeValue(tvd);\r
+                               jPane_title.setTimeValue(tVal);\r
+                               jPane_title.setDateItems(tvd, tVal);\r
+                               \r
+                               ReserveList modrsv = getReserveList(myrec, tvd, tVal, myrsv.getTuner());\r
+                               showUrabanList(modrsv, myrec.getUrabanList());\r
+                       }\r
                        \r
                        jPane_recsetting.setSelectedValues(myrsv);\r
                }\r
index f5db7b0..cdd278e 100644 (file)
@@ -1064,6 +1064,15 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab
                        JSlider sl = (JSlider) e.getSource();\r
                        setPaperZoom(sl.getValue());\r
                }\r
+               \r
+               @Override\r
+               public void mouseClicked(MouseEvent e) {\r
+                       if (e.getClickCount() == 2) {\r
+                               JSlider sl = (JSlider) e.getSource();\r
+                               sl.setValue(100);\r
+                               setPaperZoom(sl.getValue());\r
+                       }\r
+               }\r
        };\r
        \r
        // スナップショットをとる\r
@@ -1430,11 +1439,11 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab
        \r
        private JSlider getJSlider_paperZoom(String s) {\r
                if ( jSlider_paperZoom == null ) {\r
-                       jSlider_paperZoom = new JSlider(100,300,100);\r
+                       jSlider_paperZoom = new JSlider(50,300,100);\r
                        jSlider_paperZoom.setToolTipText(TIPS_PAPERZOOM);\r
 \r
                        Dimension d = jSlider_paperZoom.getPreferredSize();\r
-                       d.width = 32;\r
+                       d.width = 45;\r
                        jSlider_paperZoom.setPreferredSize(d);\r
                        jSlider_paperZoom.setMaximumSize(d);\r
                        jSlider_paperZoom.setMinimumSize(d);\r
index 557efa9..d20ce51 100644 (file)
@@ -218,6 +218,25 @@ public class CommonUtils {
        }\r
        \r
        /**\r
+        *  1440分中の何分目か返す\r
+        */\r
+       public static int getMinOfDate(String ahh, String amm) {\r
+               try {\r
+                       return getMinOfDate(Integer.valueOf(ahh),Integer.valueOf(amm));\r
+               }\r
+               catch (NumberFormatException e) {\r
+                       return -1;\r
+               }\r
+       }\r
+       \r
+       /**\r
+        *  1440分中の何分目か返す\r
+        */\r
+       public static int getMinOfDate(int ahh, int amm) {\r
+               return ahh*60+amm;\r
+       }\r
+       \r
+       /**\r
         * @see #getCritDateTime(int)\r
         */\r
        public static String getCritDateTime() {\r
@@ -879,6 +898,27 @@ public class CommonUtils {
                return dst;\r
        }\r
        \r
+       public static String enEscape(String src) {\r
+               StringBuilder sb = new StringBuilder();\r
+               for ( int index=0; index<src.length(); index++ ) {\r
+                       char c = src.charAt(index);\r
+                       if ( c == '<' ) {\r
+                               sb.append("&lt;");\r
+                       }\r
+                       else if ( c == '>' ) {\r
+                               sb.append("&gt;");\r
+                       }\r
+                       else if ( c == '&' ) {\r
+                               sb.append("&amp;");\r
+                       }\r
+                       else {\r
+                               sb.append(c);\r
+                       }\r
+               }\r
+               return sb.toString();\r
+       }\r
+       \r
+       \r
        /**\r
         *  Unicodeエスケープをデコードします。\r
         */\r
@@ -953,6 +993,22 @@ public class CommonUtils {
                return sb.toString();\r
        }\r
 \r
+       \r
+       public static String getVerticalSplittedHTML(String text) {\r
+               if ( text == null ) {\r
+                       return null;\r
+               }\r
+               \r
+               String html = "<HTML>";\r
+               for ( String s : text.split("") ) {\r
+                       html += s+"<BR>";\r
+               }\r
+               html += "</HTML>";\r
+               \r
+               return html;\r
+       }\r
+       \r
+       \r
        /*******************************************************************************\r
         * オブジェクト操作関連\r
         ******************************************************************************/\r
index 880aa3e..1286d8a 100644 (file)
@@ -123,10 +123,14 @@ public class JComboBoxPanel extends JPanel implements ItemSelectable,WideCompone
                this.jlabel.setToolTipText(s);\r
        }\r
        \r
-       public void setText(String s) {\r
+       public void setLabelText(String s) {\r
                this.jlabel.setText(s);\r
        }\r
        \r
+       public String getLabelText() {\r
+               return this.jlabel.getText();\r
+       }\r
+       \r
        public ComboBoxModel getModel() {\r
                return this.jcombobox.getModel();\r
        }\r
diff --git a/TinyBannavi/src/tainavi/OverlapReserveViewPanel.java b/TinyBannavi/src/tainavi/OverlapReserveViewPanel.java
new file mode 100644 (file)
index 0000000..1406b82
--- /dev/null
@@ -0,0 +1,145 @@
+package tainavi;\r
+\r
+import java.awt.BorderLayout;\r
+import java.awt.Color;\r
+import java.awt.Dimension;\r
+import java.util.ArrayList;\r
+\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.ScrollPaneConstants;\r
+import javax.swing.SpringLayout;\r
+import javax.swing.border.LineBorder;\r
+\r
+\r
+public class OverlapReserveViewPanel extends JScrollPane {\r
+\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       /*******************************************************************************\r
+        * 定数\r
+        ******************************************************************************/\r
+       \r
+       private static final int BAR_WIDTH = 20;\r
+       private static final float BAR_NUM = 6.5F;\r
+       \r
+       private static final int BAR_REG = 2;\r
+       \r
+       /*******************************************************************************\r
+        * コンポーネント\r
+        ******************************************************************************/\r
+       \r
+       JPanel jpanel = null;\r
+       \r
+       \r
+       /*******************************************************************************\r
+        * コンストラクタ\r
+        ******************************************************************************/\r
+\r
+       public OverlapReserveViewPanel() {\r
+               super();\r
+               \r
+               setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);\r
+               setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);\r
+               \r
+               getHorizontalScrollBar().setUnitIncrement(BAR_WIDTH);\r
+               \r
+               setViewportView(getJPanel());\r
+\r
+               Dimension d = new Dimension((int)(BAR_NUM*BAR_WIDTH+2.0),0);    // +2はBorder分\r
+               setPreferredSize(d);\r
+       }\r
+\r
+       \r
+       /*******************************************************************************\r
+        * コンポーネント\r
+        ******************************************************************************/\r
+\r
+       public JPanel getJPanel() {\r
+               if ( jpanel == null ) {\r
+                       jpanel = new JPanel();\r
+               }\r
+               return jpanel;\r
+       }\r
+       \r
+       \r
+       /*******************************************************************************\r
+        * メソッド\r
+        ******************************************************************************/\r
+\r
+       public void putOverlap(ReserveList myrsv, ArrayList<ReserveList> overlaps) {\r
+\r
+               jpanel.removeAll();\r
+               jpanel.repaint();\r
+               \r
+               if ( overlaps == null || overlaps.size() == 0 ) {\r
+                       // 裏番組ないよ\r
+                       jpanel.setPreferredSize(getPreferredSize());\r
+                       jpanel.setLayout(new BorderLayout());\r
+                       jpanel.add(new JLabel("裏番組なし", JLabel.CENTER),BorderLayout.CENTER);\r
+                       return;\r
+               }\r
+               \r
+               jpanel.setLayout(new SpringLayout());\r
+               \r
+               //int height = jpanel.getSize().height;\r
+               int height = getSize().height - getHorizontalScrollBar().getSize().height;\r
+               \r
+               int min = CommonUtils.getMinOfDate(myrsv.getAhh(),myrsv.getAmm());\r
+               int len = CommonUtils.getRecMinVal(myrsv.getAhh(),myrsv.getAmm(),myrsv.getZhh(),myrsv.getZmm());\r
+               float mul = (float)height / (len*BAR_REG);\r
+               int topmin = min-len/2;\r
+               int bottommin = topmin+len*BAR_REG;\r
+               \r
+               int n = 0;\r
+               _putOverlap(jpanel,myrsv,height,topmin,bottommin,n++,mul);\r
+               for ( ReserveList r : overlaps ) {\r
+                       if ( r == myrsv ) {\r
+                               continue;\r
+                       }\r
+                       _putOverlap(jpanel,r,height,topmin,bottommin,n++,mul);\r
+               }\r
+               \r
+               jpanel.setPreferredSize(new Dimension(BAR_WIDTH*n,height));\r
+       }\r
+       \r
+       private void _putOverlap(JPanel p, ReserveList r, int height, int topmin, int bottommin, int n, float mul) {\r
+               int amin = CommonUtils.getMinOfDate(r.getAhh(),r.getAmm());\r
+               int len = CommonUtils.getRecMinVal(r.getAhh(),r.getAmm(),r.getZhh(),r.getZmm());\r
+               int zmin = amin+len;\r
+               \r
+               // 描画枠からはみ出ていたら\r
+               if ( zmin < topmin ) {\r
+                       amin = amin+1440;\r
+                       zmin = zmin+1440;\r
+               }\r
+               else if ( bottommin < amin ) {\r
+                       amin = amin-1440;\r
+                       zmin = zmin-1440;\r
+               }\r
+               \r
+               int h = (int)(mul*len);\r
+               int x = n*BAR_WIDTH;\r
+               int y = (int)(mul*(amin-topmin));\r
+\r
+               //System.err.println("bbb "+topmin+", "+bottommin+" : "+amin+", "+zmin+" : "+y);\r
+               \r
+               JLabel label = new JLabel(CommonUtils.getVerticalSplittedHTML(r.getTuner()));\r
+               label.setHorizontalAlignment(JLabel.CENTER);\r
+               label.setOpaque(true);\r
+               label.setBackground(n==0 ? Color.WHITE : Color.LIGHT_GRAY);\r
+               label.setBorder(new LineBorder(n==0 ? Color.RED : Color.BLACK));\r
+               label.setToolTipText(String.format("<HTML>[%s]<BR>%s:%s - %s:%s<BR>(%s)<BR>%s</HTML>",r.getTuner(),r.getAhh(),r.getAmm(),r.getZhh(),r.getZmm(),r.getCh_name(),CommonUtils.enEscape(r.getTitle())));\r
+               \r
+               CommonSwingUtils.putComponentOn(p, label, BAR_WIDTH, h, x, y);\r
+               \r
+               JLabel bdr = new JLabel();\r
+               bdr.setOpaque(true);\r
+               bdr.setBackground(Color.GRAY);\r
+               //bdr.setBorder(new DashBorder(Color.GRAY, 1, 5, 5));\r
+               \r
+               CommonSwingUtils.putComponentOn(p, bdr, BAR_WIDTH, height, x, 0);\r
+       }\r
+       \r
+}\r
index 243fb06..fbf2259 100644 (file)
@@ -1252,10 +1252,20 @@ public class PlugIn_RecRD_TvRock extends HDDRecorderUtils implements HDDRecorder
                                GregorianCalendar cfz = CommonUtils.getCalendar(f.getDate()+" "+f.getAhh()+":"+f.getAmm());\r
                                cfz.add(Calendar.MINUTE, f.getLength());\r
                                Long dz = CommonUtils.getCompareDateTime(cea, cfz);\r
-                               if ( (dz<=0L && dz>-86400000L*7L) &&\r
+                               if (\r
+                                               (dz<=0L && dz>-86400000L*7L) &&\r
                                                (f.getTitle().equals(e.getTitle()) || (e.getDetail()!=null && f.getTitle().equals(e.getDetail()))) ) {\r
-                                       f.setDetail(f.getDetail()+e.getResult()+"\n");\r
-                                       cea = null;\r
+                                       // 一週間以内に、タイトルが同じor変更前のタイトルと一致したものに追加しよう\r
+                                       for ( String msg : f.getDetail().split("\n") ) {\r
+                                               if ( msg.equals(e.getResult()) ) {\r
+                                                       // 重複メッセージは要らね\r
+                                                       cea = null;\r
+                                               }\r
+                                       }\r
+                                       if ( cea != null ) {\r
+                                               f.setDetail(f.getDetail()+e.getResult()+"\n");\r
+                                               cea = null;\r
+                                       }\r
                                        break;\r
                                }\r
                        }\r
index c5a70fa..d78261d 100644 (file)
@@ -423,7 +423,7 @@ public class RecSettingEditorPanel extends JPanel {
        }\r
 \r
        private void setLabel(JComboBoxPanel combo, String overrideLabel, String defaultLabel) {\r
-               combo.setText((overrideLabel!=null)?overrideLabel:defaultLabel);\r
+               combo.setLabelText((overrideLabel!=null)?overrideLabel:defaultLabel);\r
        }\r
        \r
        /*******************************************************************************\r
@@ -559,11 +559,12 @@ public class RecSettingEditorPanel extends JPanel {
        \r
        /**\r
         * レコーダのアイテム選択(中から呼んじゃだめだよ)\r
-        * <P>これを呼び出した場合、レコーダ選択イベントは起きないので選択結果は呼び出し元で保存しておく必要がある\r
-        * <P>これは他のコンポーネントがトリガーとなって起きるイベントから呼び出されるのでリスナーは動かしておかないといけない \r
         */\r
        public String setSelectedRecorderValue(String myself) {\r
-               return setSelectedValue(jCBXPanel_recorder, myself);\r
+               setEnabledListenerAll(false);\r
+               String s = setSelectedValue(jCBXPanel_recorder, myself);\r
+               setEnabledListenerAll(true);\r
+               return s;\r
        }\r
        \r
        /**\r
@@ -760,7 +761,6 @@ public class RecSettingEditorPanel extends JPanel {
                                return;\r
                        }\r
 \r
-\r
                        String pgtype = (String) jCBXPanel_audiorate.getSelectedItem();\r
                        if ( pgtype == HDDRecorder.ITEM_REC_TYPE_PROG ) {\r
                                // "プラグラム予約"なら触る必要なし\r
@@ -810,26 +810,21 @@ public class RecSettingEditorPanel extends JPanel {
                }\r
        };\r
        private void checkMarginTop(boolean check) {\r
-               Color c = Color.BLACK;\r
-               try {\r
-                       if ( check && Integer.valueOf((String) jCBXPanel_msChapter.getSelectedItem()) <= 0) {\r
-                               c = Color.RED;\r
-                       }\r
-               }\r
-               catch (NumberFormatException ev) {\r
-               }\r
-               jCBXPanel_msChapter.setLabelForeground(c);      // 開始マージン0は危ないよね\r
+               _checkMargin(jCBXPanel_msChapter,check);        // 開始マージン0は危ないよね\r
        }\r
        private void checkMarginBottom(boolean check) {\r
+               _checkMargin(jCBXPanel_mvChapter,check);        // 終了マージン0は危ないよね\r
+       }\r
+       private void _checkMargin(JComboBoxPanel comp, boolean check) {\r
                Color c = Color.BLACK;\r
                try {\r
-                       if ( check && Integer.valueOf((String) jCBXPanel_msChapter.getSelectedItem()) <= 0) {\r
+                       if ( check && comp.getLabelText().startsWith("録画") && Integer.valueOf((String) comp.getSelectedItem()) <= 0) {\r
                                c = Color.RED;\r
                        }\r
                }\r
                catch (NumberFormatException ev) {\r
                }\r
-               jCBXPanel_mvChapter.setLabelForeground(c);      // 終了マージン0は危ないよね\r
+               comp.setLabelForeground(c);\r
        }\r
        \r
        /**\r
@@ -874,29 +869,6 @@ public class RecSettingEditorPanel extends JPanel {
         * イベントトリガーでアイテムを操作する際に、さらにイベントをキックされてはたまらないのでリスナーを付けたり外したりする\r
         */\r
        private void setEnabledListenerAll(boolean enabled) {\r
-\r
-               // あとで削除\r
-               if ( debug ) {\r
-                       if ( enabled ) {\r
-                               Object o = null;\r
-                               for ( ItemListener il : jCBXPanel_recorder.getJComboBox().getItemListeners() ) {\r
-                                       if ( il == il_recorderChanged ) {\r
-                                               System.out.println(DBGID+"****** リスナーの重複登録 ******");\r
-                                               //CommonUtils.printStackTrace();\r
-                                               o = il;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               if ( o == null ) {\r
-                                       System.out.println("+++ リスナーの登録 +++");\r
-                                       //CommonUtils.printStackTrace();\r
-                               }\r
-                       }\r
-                       else {\r
-                               System.out.println("... リスナーの削除 ...");\r
-                       }\r
-               }\r
-               \r
                setEnabledItemListener(jCBXPanel_recorder, il_recorderChanged, enabled);\r
                setEnabledItemListener(jCBXPanel_encoder, il_encoderChanged, enabled);\r
                setEnabledItemListener(jCBXPanel_videorate, il_vrateChanged, enabled);\r
index 5d701f5..2bf69ab 100644 (file)
@@ -1301,7 +1301,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                @Override\r
                protected boolean jumpToPassed(String passed) {\r
                        timer_now.pause();\r
-                       boolean b = paper.jumpToBangumi(null,passed);\r
+                       boolean b = paper.jumpToPassed(passed);\r
                        timer_now.start();\r
                        return b;\r
                }\r
@@ -3669,6 +3669,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                // ほにゃらら\r
                toolBar.setDebug(env.getDebug());\r
                autores.setDebug(env.getDebug());\r
+               rdialog.setDebug(env.getDebug());\r
 \r
                // PassedProgramListの設定変更\r
                tvprograms.getPassed().setPassedDir(env.getPassedDir());\r
@@ -4540,6 +4541,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H
                        // 設定\r
                        toolBar.setDebug(env.getDebug());\r
                        autores.setDebug(env.getDebug());\r
+                       rdialog.setDebug(env.getDebug());\r
        \r
                        // ページャーの設定\r
                        toolBar.setPagerItems();\r
index e25d1d8..9238d2d 100644 (file)
@@ -1,6 +1,5 @@
 ---バグとおぼしき現象\r
 \r
-【過去ログ】検索ボックスでの日付指定と表示される日付があわない\r
 \r
 【レコーダ対応】RD-X5プラグインのバグ調査依頼への対応\r
 \r
 【予約ダイアログ】類似予約対応で、類似予約なしを選択しても番組IDがリセットされない →直したはず\r
 【予約ダイアログ】類似予約対応で、類似予約なしを選択してもタイトルがリセットされない →直したはず\r
 \r
-【予約ダイアログ】TvRockで外部入力が空きチューナー自動選択選択の対象になってしまった!!?\r
+【予約ダイアログ】TvRockで外部入力が空きチューナー自動選択選択の対象になってしまった!!? →空きエンコーダ選択に"外部"ではじまるものを追加する余計なコードをつけたしてしまっていた\r
 【キーワード検索】ダイアログがなんかおかしい(条件の二重登録?) →登録ラベルの重複チェックが行えていない既存バグのせいだった\r
+【過去ログ】検索ボックスでの日付指定と表示される日付があわない →paper#jump()の統廃合時のコーディングミス\r
+\r
+【レコーダ対応】TvRockで録画結果一覧の時刻調整ログが取得のたびに増える問題の修正 →重複チェックをしてなかったので取得のたびに適当なエントリに付け加えられていた\r
 \r
 ---以上\r