OSDN Git Service

自動予約編集への対応に伴うレイアウト変更(3)
authorpeeweedee <peeweedee@users.sourceforge.jp>
Mon, 24 Jun 2013 04:01:58 +0000 (13:01 +0900)
committerpeeweedee <peeweedee@users.sourceforge.jp>
Mon, 24 Jun 2013 04:01:58 +0000 (13:01 +0900)
12 files changed:
TinyBannavi/src/tainavi/AbsAutoReserveListView.java
TinyBannavi/src/tainavi/AbsListedView.java
TinyBannavi/src/tainavi/AbsPaperView.java
TinyBannavi/src/tainavi/AbsToolBar.java
TinyBannavi/src/tainavi/CommonUtils.java
TinyBannavi/src/tainavi/HDDRecorderListener.java
TinyBannavi/src/tainavi/TickTimer.java [moved from TinyBannavi/src/tainavi/VWTimer.java with 54% similarity]
TinyBannavi/src/tainavi/TickTimerListener.java [new file with mode: 0644]
TinyBannavi/src/tainavi/TickTimerRiseEvent.java [moved from TinyBannavi/src/tainavi/VWTimerRiseEvent.java with 60% similarity]
TinyBannavi/src/tainavi/VWTimerRiseListener.java [deleted file]
TinyBannavi/src/tainavi/Viewer.java
TinyBannavi/src/todo.txt

index 71d7de7..f3a5bad 100644 (file)
@@ -271,6 +271,7 @@ public abstract class AbsAutoReserveListView extends JPanel implements HDDRecord
                redrawByRecorderSelected();\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * リスナー\r
         ******************************************************************************/\r
index 4a59148..b3830d3 100644 (file)
@@ -76,7 +76,7 @@ import tainavi.VWMainWindow.MWinTab;
  * リスト形式タブのクラス\r
  * @since 3.15.4β {@link Viewer}から分離\r
  */\r
-public abstract class AbsListedView extends JPanel implements VWTimerRiseListener {\r
+public abstract class AbsListedView extends JPanel implements TickTimerListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
        \r
@@ -1439,7 +1439,7 @@ public abstract class AbsListedView extends JPanel implements VWTimerRiseListene
         * 現在時刻追従スクロール\r
         */\r
        @Override\r
-       public void timerRised(VWTimerRiseEvent e) {\r
+       public void timerRised(TickTimerRiseEvent e) {\r
                \r
                if ( ! timer_now_enabled ) {\r
                        return;\r
index 22e1874..d25c0d2 100644 (file)
@@ -19,7 +19,6 @@ import java.io.File;
 import java.util.ArrayList;\r
 import java.util.Calendar;\r
 import java.util.GregorianCalendar;\r
-import java.util.HashMap;\r
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 \r
@@ -49,18 +48,19 @@ import tainavi.TVProgram.ProgType;
 import tainavi.TVProgramIterator.IterationType;\r
 import tainavi.VWMainWindow.MWinTab;\r
 \r
+\r
 /**\r
  * 新聞形式タブのクラス\r
  * @since 3.15.4β {@link Viewer}から分離\r
  */\r
-public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener {\r
+public abstract class AbsPaperView extends JPanel implements TickTimerListener,HDDRecorderListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
 \r
        public static String getViewName() { return "新聞形式"; }\r
        \r
-       //public void setDebug(boolean b) { debug = b; }\r
-       //private static boolean debug = false;\r
+       public void setDebug(boolean b) { debug = b; }\r
+       private static boolean debug = false;\r
        \r
        \r
        /*******************************************************************************\r
@@ -116,7 +116,6 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
        protected abstract boolean isTabSelected(MWinTab tab);\r
        protected abstract void setSelectedTab(MWinTab tab);\r
 \r
-       protected abstract String getSelectedRecorderOnToolbar();\r
        protected abstract boolean isFullScreen();\r
        /**\r
         * ページャーコンボボックスを更新してほしい\r
@@ -179,6 +178,9 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
        private static final String TreeExpRegFile_Paper = "env"+File.separator+"tree_expand_paper.xml";\r
        \r
        private static final int TIMEBAR_START = Viewer.TIMEBAR_START;\r
+\r
+       //\r
+       private static final String TUNERLABEL_PICKUP = "PICKUP";\r
        \r
        // 定数ではないが\r
        \r
@@ -809,8 +811,8 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                                jLayeredPane_space_main_view_byMakeshift.setLayer(b2, 0);\r
                                \r
                                // リスナーを設定する\r
-                               b2.addMouseListener(mListner);\r
-                               b2.addMouseMotionListener(mListner);\r
+                               b2.addMouseListener(ml_risepopup);\r
+                               b2.addMouseMotionListener(ml_risepopup);\r
                                frameUnused.add(b2);\r
                        }\r
                        StdAppendMessage(MSGID+"番組枠描画バッファを初期化: "+framebuffersize);\r
@@ -1348,104 +1350,112 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                JRMLabel.setHeightMultiplier(bounds.getPaperHeightMultiplier() * paperHeightZoom);\r
                \r
                // 表示範囲\r
-               GregorianCalendar cal = CommonUtils.getCalendar(String.format("%s %02d:00",date.substring(0,10),TIMEBAR_START));\r
-               String startDateTime = CommonUtils.getDateTime(cal);\r
-               cal.add(Calendar.HOUR_OF_DAY, 24);\r
-               String endDateTime = CommonUtils.getDateTime(cal);\r
-               \r
-               // 基準日\r
-               String critDateTime = CommonUtils.getCritDateTime(env.getDisplayPassedReserve());\r
+               GregorianCalendar cal = CommonUtils.getCritCalendar(date);\r
+               String topDateTime = CommonUtils.getDateTime(cal);\r
+               cal.add(Calendar.DATE, 1);\r
+               String bottomDateTime = CommonUtils.getDateTime(cal);\r
                \r
-               // 予約枠\r
-               HashMap<String,Boolean> misCN = new HashMap<String, Boolean>();\r
+               // \r
+               String passedCritDateTime = CommonUtils.getCritDateTime(env.getDisplayPassedReserve());\r
                \r
                // ツールバーで選択されている実レコーダ\r
-               String myself = ( env.getEffectComboToPaper() ) ? (getSelectedRecorderOnToolbar()) : (null);\r
+               String myself = ( env.getEffectComboToPaper() ) ? (getSelectedRecorderId()) : (null);\r
                \r
-               if ( myself == null || myself.length() > 0 ) {\r
-                       \r
-                       // ピックアップはここに入らない\r
-                       \r
-                       HDDRecorderList recs = recorders.findInstance(myself);\r
-                       \r
-                       for ( HDDRecorder recorder : recs )\r
-                       {\r
-                               //System.err.println(DBGID+recorder.Myself());\r
+               // 予約枠の描画\r
+               drawReserveBorders(date, Center, q, topDateTime, bottomDateTime, passedCritDateTime, myself);\r
+               \r
+               // ピックアップ枠の描画\r
+               drawPickupBorders(date, Center, q, topDateTime, bottomDateTime, passedCritDateTime, TUNERLABEL_PICKUP);\r
+       }\r
+       private void drawReserveBorders(String date, String Center, int q, String topDateTime, String bottomDateTime, String passedCritDateTime, String myself) {\r
+               if ( myself == HDDRecorder.SELECTED_PICKUP ) {\r
+                       return;\r
+               }\r
+               for ( HDDRecorder recorder : getSelectedRecorderList() ) {\r
+                       for ( ReserveList r : recorder.getReserves()) {\r
                                \r
-                               for ( ReserveList r : recorder.getReserves()) {\r
-                                       // Exec == ON ?\r
-                                       if (env.getDisplayOnlyExecOnEntry() && ! r.getExec()) {\r
-                                               //StdAppendMessage("@Exec = OFF : "+r.getTitle());\r
-                                               continue;\r
+                               // 「実行のみ表示」で無効な予約は表示しない\r
+                               if ( env.getDisplayOnlyExecOnEntry() && ! r.getExec() ) {\r
+                                       continue;\r
+                               }\r
+                               \r
+                               // 放送局名の確認\r
+                               if ( r.getCh_name() == null ) {\r
+                                       if ( r.getChannel() == null ) {\r
+                                               // CHコードすらないのはバグだろう\r
+                                               System.err.println(ERRID+"予約情報にCHコードが設定されていません。バグの可能性があります。 recid="+recorder.Myself()+" chname="+r.getCh_name());\r
                                        }\r
-                                       // 局が一致して\r
-                                       if (r.getCh_name() == null) {\r
-                                               if ( r.getChannel() == null ) {\r
-                                                       System.err.println(ERRID+"予約情報にCHコードが設定されていません。バグの可能性があります。 recid="+recorder.Myself()+" chname="+r.getCh_name());\r
+                                       continue;\r
+                               }\r
+                               \r
+                               // 描画本体\r
+                               if (r.getCh_name().equals(Center)) {\r
+                                       \r
+                                       // 開始終了日時リストを生成する\r
+                                       ArrayList<String> starts = new ArrayList<String>();\r
+                                       ArrayList<String> ends = new ArrayList<String>();\r
+                                       CommonUtils.getStartEndList(starts, ends, r);\r
+                                       \r
+                                       // 予約枠を描画する\r
+                                       for ( int j=0; j<starts.size(); j++ ) {\r
+                                               if ( passedCritDateTime.compareTo(ends.get(j)) > 0 ) {\r
+                                                       // 過去情報の表示が制限されている場合\r
                                                        continue;\r
                                                }\r
-                                               if (r.getChannel().length() > 0) {\r
-                                                       misCN.put(r.getChannel(),true);\r
-                                               }\r
-                                               continue;\r
-                                       }\r
-                                       \r
-                                       if (r.getCh_name().equals(Center)) {\r
                                                \r
-                                               // 開始終了日時リストを生成する\r
-                                               ArrayList<String> starts = new ArrayList<String>();\r
-                                               ArrayList<String> ends = new ArrayList<String>();\r
-                                               CommonUtils.getStartEndList(starts, ends, r);\r
-                                               \r
-                                               // 予約枠を描画する\r
-                                               for (int j=0; j<starts.size(); j++) {\r
-                                                       if (critDateTime.compareTo(ends.get(j)) <= 0) {\r
-                                                               putReserveBorderSub(date,Center,startDateTime,endDateTime,starts.get(j),ends.get(j),r.getAhh(),r.getAmm(),r.getRec_min(),r.getTuner(),recorder.getColor(r.getTuner()),r.getExec(),q);\r
-                                                       }\r
-                                               }\r
+                                               drawBorder(date,Center,topDateTime,bottomDateTime,starts.get(j),ends.get(j),r.getRec_min(),r.getTuner(),recorder.getColor(r.getTuner()),r.getExec(),q);\r
                                        }\r
                                }\r
                        }\r
                }\r
-               \r
-               // ピックアップ枠\r
-               TVProgram tvp = tvprograms.getPickup();\r
-               for ( ProgList pl : tvp.getCenters() ) {\r
-                       if ( pl.Center.equals(Center) ) {\r
-                               for ( ProgDateList pcl : pl.pdate ) {\r
-                                       for ( ProgDetailList tvd : pcl.pdetail ) {\r
-                                               putReserveBorderSub(date,Center,startDateTime,endDateTime,tvd.startDateTime,tvd.endDateTime,tvd.start.substring(0,2),tvd.start.substring(3,5),String.valueOf(tvd.length),"PICKUP",CommonUtils.color2str(env.getPickedColor()),false,q);\r
+       }\r
+       private void drawPickupBorders(String date, String Center, int q, String topDateTime, String bottomDateTime, String passedCritDateTime, String tuner) {\r
+               for ( ProgList pl : tvprograms.getPickup().getCenters() ) {\r
+                       if ( ! pl.Center.equals(Center) ) {\r
+                               continue;\r
+                       }\r
+                       for ( ProgDateList pcl : pl.pdate ) {\r
+                               for ( ProgDetailList tvd : pcl.pdetail ) {\r
+                                       if ( passedCritDateTime.compareTo(tvd.endDateTime) > 0 ) {\r
+                                               // 過去情報の表示が制限されている場合\r
+                                               continue;\r
                                        }\r
+                                       \r
+                                       drawBorder(date,Center,topDateTime,bottomDateTime,tvd.startDateTime,tvd.endDateTime,tvd.length,tuner,env.getPickedColor(),false,q);\r
                                }\r
                        }\r
                }\r
        }\r
-       private void putReserveBorderSub(String date, String Center, String startDateTime, String endDateTime, String start, String end, String ahh, String amm, String recmin, String tuner, String bordercol,boolean exec,int col) {\r
-               //\r
+       private void drawBorder(String date, String Center, String topDateTime, String bottomDateTime, String startDateTime, String endDateTime, String recmin, String tuner, String bordercol, boolean exec, int col) {\r
+               drawBorder(date, Center, topDateTime, bottomDateTime, startDateTime, endDateTime, Integer.valueOf(recmin), tuner, CommonUtils.str2color(bordercol), exec, col);\r
+       }\r
+       private void drawBorder(String date, String Center, String topDateTime, String bottomDateTime, String startDateTime, String endDateTime, int recmin, String tuner, Color bordercol, boolean exec, int col) {\r
+               \r
+               GregorianCalendar ca = CommonUtils.getCalendar(startDateTime);\r
+               int ahh = ca.get(Calendar.HOUR_OF_DAY);\r
+               int amm = ca.get(Calendar.MINUTE);\r
+               \r
                int row = 0;\r
                int length = 0;\r
-               if (startDateTime.compareTo(start) <= 0 && start.compareTo(endDateTime) < 0) {\r
-                       //\r
-                       row = Integer.valueOf(ahh) - TIMEBAR_START;\r
+               if (topDateTime.compareTo(startDateTime) <= 0 && startDateTime.compareTo(bottomDateTime) < 0) {\r
+                       // 開始時刻が表示範囲内にある\r
+                       row = ahh - TIMEBAR_START;\r
                        if (row < 0) {\r
                                row += 24;\r
                        }\r
-                       row = row*60 + Integer.valueOf(amm);\r
-                       length = Integer.valueOf(recmin);\r
+                       row = row*60 + amm;\r
+                       length = recmin;\r
                }\r
-               else if (start.compareTo(startDateTime) < 0 && startDateTime.compareTo(end) < 0) {\r
-                       //\r
+               else if (startDateTime.compareTo(topDateTime) < 0 && topDateTime.compareTo(endDateTime) < 0) {\r
+                       // 表示開始位置が番組の途中にある\r
                        row = 0;\r
-                       length = Integer.valueOf(recmin) - (TIMEBAR_START*60 - Integer.valueOf(ahh)*60 - Integer.valueOf(amm));\r
+                       length = recmin - (TIMEBAR_START*60 - ahh*60 - amm);\r
                }\r
                else {\r
                        return;\r
                }\r
                \r
                {\r
-                       // 枠の色\r
-                       Color rbc = CommonUtils.str2color(bordercol);\r
-                       \r
                        // 重複予約の場合のエンコーダマーク表示位置の調整\r
                        int rc = 0;\r
                        //int rw = 0;\r
@@ -1477,9 +1487,9 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                        }\r
                        \r
                        // エンコーダの区別がないものは"■"を表示する\r
-                       rb.setEncBackground(rbc);\r
-                       rb.setBorder(new LineBorder(rbc,4));\r
-                       if ( tuner != null && tuner.equals("PICKUP") ) {\r
+                       rb.setEncBackground(bordercol);\r
+                       rb.setBorder(new LineBorder(bordercol,4));\r
+                       if ( tuner != null && tuner.equals(TUNERLABEL_PICKUP) ) {\r
                                rb.setEncForeground(env.getPickedFontColor());\r
                        }\r
                        else if ( exec ) {\r
@@ -1580,8 +1590,8 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                        jLayeredPane_space_main_view.setLayer(b2, 0);\r
                        \r
                        // リスナーを設定する\r
-                       b2.addMouseListener(mListner);\r
-                       b2.addMouseMotionListener(mListner);\r
+                       b2.addMouseListener(ml_risepopup);\r
+                       b2.addMouseMotionListener(ml_risepopup);\r
                }\r
                if (jLayeredPane_space_main_view == jLayeredPane_space_main_view_byMakeshift) {\r
                        frameUsed.add(b2);\r
@@ -1669,6 +1679,47 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                return -1;\r
        }\r
        \r
+       \r
+       /*******************************************************************************\r
+        * ハンドラ―メソッド\r
+        ******************************************************************************/\r
+       \r
+       /**\r
+        * ツールバーでレコーダの選択イベントが発生\r
+        */\r
+       @Override\r
+       public void valueChanged(HDDRecorderSelectionEvent e) {\r
+               if (debug) System.out.println(DBGID+"recorder selection rised");\r
+               \r
+               // 選択中のレコーダ情報を保存する\r
+               src_recsel = (HDDRecorderSelectable) e.getSource();\r
+               \r
+               // 予約枠を書き換える\r
+               updateReserveBorder(null);\r
+       }\r
+       \r
+       private String getSelectedRecorderId() {\r
+               return ( src_recsel!=null ? src_recsel.getSelectedId() : null );\r
+       }\r
+       \r
+       private HDDRecorderList getSelectedRecorderList() {\r
+               return ( src_recsel!=null ? src_recsel.getSelectedList() : null );\r
+       }\r
+       \r
+       private HDDRecorderSelectable src_recsel;\r
+       \r
+       \r
+       /**\r
+        * レコーダ情報の変更イベントが発生\r
+        */\r
+       @Override\r
+       public void stateChanged(HDDRecorderChangeEvent e) {\r
+               // テーブルをリフレッシュする処理\r
+               \r
+       }\r
+       \r
+       \r
+\r
        /*******************************************************************************\r
         * リスナー\r
         ******************************************************************************/\r
@@ -1677,7 +1728,7 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
         * 現在時刻追従スクロール\r
         */\r
        @Override\r
-       public void timerRised(VWTimerRiseEvent e) {\r
+       public void timerRised(TickTimerRiseEvent e) {\r
                \r
                String curDT = CommonUtils.getDate529(0,true);\r
                \r
@@ -1740,7 +1791,7 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
        /**\r
         * 番組枠につけるマウス操作のリスナー\r
         */\r
-       private final MouseInputListener mListner = new MouseInputListener() {\r
+       private final MouseInputListener ml_risepopup = new MouseInputListener() {\r
                //\r
                private final Cursor defCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);\r
                private final Cursor hndCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);\r
@@ -1771,45 +1822,13 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                                                MWin.appendMessage(MSGID+"過去ログでダブルクリックは利用できません");\r
                                                ringBeep();\r
                                        }\r
+                                       \r
                                        return;\r
                                }\r
+                               \r
                                if (e.getClickCount() == 2) {\r
-                                       // RADIOは閲覧のみ\r
-                                       if (tvd.type == ProgType.PROG && tvd.subtype == ProgSubtype.RADIO) {\r
-                                               return;\r
-                                       }\r
-                                       // レコーダが選択されていない場合はなにもしない\r
-                                       if (recorders.size() == 0) {\r
-                                               return;\r
-                                       }\r
-                                       \r
                                        // 左ダブルクリックで予約ウィンドウを開く\r
-                                       \r
-                                       //VWReserveDialog rD = new VWReserveDialog(0, 0, env, tvprograms, recorders, avs, chavs, stwin);\r
-                                       CommonSwingUtils.setLocationCenter(parent,rD);\r
-                                       //rD.clear();\r
-                                       \r
-                                       // サブタイトルを番組追跡の対象から外す\r
-                                       boolean succeeded = false;\r
-                                       if ( ! env.getSplitEpno() && env.getTraceOnlyTitle() ) {\r
-                                               //String[] d = tvp.doSplitEpno(tvd.genre, tvd.title);\r
-                                               succeeded = rD.open(tvd,tvd.title,TraceKey.defaultFazzyThreshold);\r
-                                       }\r
-                                       else {\r
-                                               succeeded = rD.open(tvd);\r
-                                       }\r
-                                       \r
-                                       if (succeeded) {\r
-                                               rD.setVisible(true);\r
-                                       }\r
-                                       else {\r
-                                               rD.dispose();\r
-                                       }\r
-                                       \r
-                                       if (rD.isReserved()) {\r
-                                               updateReserveDisplay();\r
-                                               updateReserveBorder(tvd.center);\r
-                                       }\r
+                                       openReserveDialog(tvd);                                 \r
                                }\r
                        }\r
                        else if (e.getButton() == MouseEvent.BUTTON2) {\r
@@ -1817,6 +1836,38 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                                addToPickup(tvd);\r
                        }\r
                }\r
+               \r
+               private void openReserveDialog(ProgDetailList tvd) {\r
+                       \r
+                       // レコーダが登録されていない場合はなにもしない\r
+                       if (recorders.size() == 0) {\r
+                               return;\r
+                       }\r
+\r
+                       // ダイアログの位置指定\r
+                       CommonSwingUtils.setLocationCenter(parent,rD);\r
+                       \r
+                       // サブタイトルを番組追跡の対象から外す\r
+                       boolean succeeded = false;\r
+                       if ( ! env.getSplitEpno() && env.getTraceOnlyTitle() ) {\r
+                               succeeded = rD.open(tvd,tvd.title,TraceKey.defaultFazzyThreshold);\r
+                       }\r
+                       else {\r
+                               succeeded = rD.open(tvd);\r
+                       }\r
+                       \r
+                       if (succeeded) {\r
+                               rD.setVisible(true);\r
+                       }\r
+                       else {\r
+                               rD.dispose();\r
+                       }\r
+                       \r
+                       if (rD.isReserved()) {\r
+                               updateReserveDisplay();\r
+                               updateReserveBorder(tvd.center);\r
+                       }\r
+               }\r
 \r
                /**\r
                 * 詳細情報の自動表示\r
@@ -2380,7 +2431,7 @@ public abstract class AbsPaperView extends JPanel implements VWTimerRiseListener
                                \r
                                rb.reVBounds();\r
                                \r
-                               if ( rb.getEncoder().equals("PICKUP") ) {\r
+                               if ( rb.getEncoder().equals(TUNERLABEL_PICKUP) ) {\r
                                        rb.setEncBackground(ec.getPickedColor());\r
                                        rb.setEncForeground(ec.getPickedFontColor());\r
                                        rb.setBorder(new LineBorder(ec.getPickedColor(),4));\r
index 7de9574..cbc7682 100644 (file)
@@ -590,15 +590,19 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab
        public String getSelectedRecorder() {\r
                \r
                if ( jComboBox_select_recorder == null ) {\r
-                       return HDDRecorderListener.SELECTED_ALL;\r
+                       return HDDRecorder.SELECTED_ALL;\r
                }\r
+               \r
                String recId = (String)jComboBox_select_recorder.getSelectedItem();\r
+               \r
+               /*\r
                if ( recId.equals(HDDRecorder.SELECTED_ALL) ) {\r
                        return HDDRecorderListener.SELECTED_ALL;\r
                }\r
                else if ( recId.equals(HDDRecorder.SELECTED_PICKUP) ) {\r
                        return HDDRecorderListener.SELECTED_PICKUP;\r
                }\r
+               */\r
                \r
                return recId;\r
        }\r
index bbd41a7..23e4ac9 100644 (file)
@@ -245,6 +245,19 @@ public class CommonUtils {
                        return getDateTime(0);\r
                }\r
        }\r
+       /**\r
+        * \r
+        */\r
+       public static GregorianCalendar getCritCalendar(String date) {\r
+               GregorianCalendar ca = getCalendar(date);\r
+               int hh = ca.get(Calendar.HOUR_OF_DAY);\r
+               int mm = ca.get(Calendar.MINUTE);\r
+               int ss = ca.get(Calendar.SECOND);\r
+               ca.add(Calendar.HOUR_OF_DAY,-hh+5);\r
+               ca.add(Calendar.MINUTE,-mm);\r
+               ca.add(Calendar.SECOND,-ss);\r
+               return ca;\r
+       }\r
        \r
        /**\r
         * 次回実行予定日を取得する\r
index 51fbe35..b131bcb 100644 (file)
@@ -9,10 +9,6 @@ import java.util.EventListener;
  */\r
 public interface HDDRecorderListener extends EventListener {\r
        \r
-       // 定数\r
-       public static final String SELECTED_ALL = null;\r
-       public static final String SELECTED_PICKUP = "";\r
-       \r
        /**\r
         * レコーダーの選択イベント\r
         */\r
similarity index 54%
rename from TinyBannavi/src/tainavi/VWTimer.java
rename to TinyBannavi/src/tainavi/TickTimer.java
index 622c7bd..c8de292 100644 (file)
@@ -10,7 +10,7 @@ import javax.swing.Timer;
 /**\r
  * 毎分00秒に処理をキックするタイマー\r
  */\r
-public class VWTimer {\r
+public class TickTimer {\r
 \r
        public void setInterval(int min) { timer_interval = min; }\r
        private int timer_interval = 1;                         // 何分ごとにキックするか\r
@@ -20,7 +20,9 @@ public class VWTimer {
        \r
        private Timer timer_now = null;                         // タイマーのオブジェクト\r
        \r
-       private ArrayList<VWTimerRiseListener> listener_list = new ArrayList<VWTimerRiseListener>(); \r
+       private ArrayList<TickTimerListener> listener_list = new ArrayList<TickTimerListener>(); \r
+       \r
+       private final Boolean foo = true;\r
        \r
        /**\r
         * 次の00秒までの時間(ミリ秒)を計算する\r
@@ -33,50 +35,55 @@ public class VWTimer {
         * タイマー起動\r
         */\r
        public int start() {\r
-               \r
-               if ( timer_now == null ) {\r
-                       // 新規のタイマー\r
-                       timer_now = new Timer(0, al_nowtimer);  // TIMER_INTERVALの値はなんでもいい\r
-                       timer_now.setRepeats(false);    // 一回しか実行しないよ\r
+               synchronized ( foo ) {\r
+                       if ( timer_now == null ) {\r
+                               // 新規のタイマー\r
+                               timer_now = new Timer(0, al_nowtimer);  // TIMER_INTERVALの値はなんでもいい\r
+                               timer_now.setRepeats(false);                    // 一回しか実行しないよ\r
+                       }\r
+                       \r
+                       int delay = getNextDelay()+timer_delay_add;\r
+                       timer_now.setInitialDelay(delay);\r
+                       \r
+                       timer_now.start();\r
+                       \r
+                       return delay;\r
                }\r
-               \r
-               int delay = getNextDelay()+timer_delay_add;\r
-               timer_now.setInitialDelay(delay);\r
-               \r
-               timer_now.start();\r
-               \r
-               return delay;\r
        }\r
        \r
        /**\r
         * タイマー停止\r
         */\r
        public boolean stop() {\r
-               if ( timer_now != null ) {\r
-                       timer_now.stop();\r
-                       timer_now = null;\r
-                       \r
-                       return true;\r
+               synchronized ( foo ) {\r
+                       if ( timer_now != null ) {\r
+                               timer_now.stop();\r
+                               timer_now = null;\r
+                               \r
+                               return true;\r
+                       }\r
+                       return false;\r
                }\r
-               return false;\r
        }\r
        \r
        /**\r
         * タイマー一時停止\r
         */\r
        public boolean pause() {\r
-               if ( timer_now != null && timer_now.isRunning() ) {\r
-                       timer_now.stop();\r
-                       \r
-                       return true;\r
+               synchronized ( foo ) {\r
+                       if ( timer_now != null && timer_now.isRunning() ) {\r
+                               timer_now.stop();\r
+                               \r
+                               return true;\r
+                       }\r
+                       return false;\r
                }\r
-               return false;\r
        }\r
        \r
        /**\r
         * タイマーで実行する内容を追加\r
         */\r
-       public void addVWTimerRiseListener(VWTimerRiseListener l) {\r
+       public void addTickTimerRiseListener(TickTimerListener l) {\r
                if ( ! listener_list.contains(l) ) {\r
                        listener_list.add(l);\r
                }\r
@@ -85,7 +92,7 @@ public class VWTimer {
        /**\r
         * タイマーで実行する内容を削除\r
         */\r
-       public void removeVWTimerRiseListener(VWTimerRiseListener l) {\r
+       public void removeTickTimerRiseListener(TickTimerListener l) {\r
                listener_list.remove(l);\r
        }\r
        \r
@@ -96,15 +103,18 @@ public class VWTimer {
                @Override\r
                public void actionPerformed(ActionEvent e) {\r
                        \r
-                       VWTimerRiseEvent ev = new VWTimerRiseEvent(this);\r
+                       fireTimerRised();\r
                        \r
-                       for ( VWTimerRiseListener l : listener_list ) {\r
-                               l.timerRised(ev);\r
-                       }\r
-                       \r
-                       int delay = start();\r
+                       int delay = start();    // タイマー再起動\r
                        //System.out.println("Timer Rised: now="+CommonUtils.getDateTimeYMD(ev.getCalendar())+" delay="+delay);\r
                }\r
        };\r
+       private void fireTimerRised() {\r
+               TickTimerRiseEvent ev = new TickTimerRiseEvent(this);\r
+               \r
+               for ( TickTimerListener l : listener_list ) {\r
+                       l.timerRised(ev);\r
+               }\r
+       }\r
 \r
 }\r
diff --git a/TinyBannavi/src/tainavi/TickTimerListener.java b/TinyBannavi/src/tainavi/TickTimerListener.java
new file mode 100644 (file)
index 0000000..7f89ee5
--- /dev/null
@@ -0,0 +1,9 @@
+package tainavi;\r
+\r
+import java.util.EventListener;\r
+\r
+public interface TickTimerListener extends EventListener {\r
+       \r
+       public void timerRised(TickTimerRiseEvent e);\r
+       \r
+}\r
@@ -3,13 +3,15 @@ package tainavi;
 import java.util.EventObject;\r
 import java.util.GregorianCalendar;\r
 \r
-public class VWTimerRiseEvent extends EventObject {\r
+public class TickTimerRiseEvent extends EventObject {\r
 \r
+       private static final long serialVersionUID = 1L;\r
+       \r
        private final GregorianCalendar calendar;\r
        \r
        public GregorianCalendar getCalendar() { return calendar; }\r
        \r
-       public VWTimerRiseEvent(Object source) {\r
+       public TickTimerRiseEvent(Object source) {\r
                super(source);\r
                this.calendar = new GregorianCalendar();\r
        }\r
diff --git a/TinyBannavi/src/tainavi/VWTimerRiseListener.java b/TinyBannavi/src/tainavi/VWTimerRiseListener.java
deleted file mode 100644 (file)
index 6445180..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package tainavi;\r
-\r
-import java.util.EventListener;\r
-\r
-public interface VWTimerRiseListener extends EventListener {\r
-       \r
-       public void timerRised(VWTimerRiseEvent e);\r
-       \r
-}\r
index eab66fa..a8b7e81 100644 (file)
@@ -63,7 +63,6 @@ import javax.swing.UIManager;
 import javax.swing.event.ChangeEvent;\r
 import javax.swing.event.ChangeListener;\r
 \r
-import taiSync.ReserveInfo;\r
 import tainavi.HDDRecorder.RecType;\r
 import tainavi.SearchKey.TargetId;\r
 import tainavi.TVProgram.ProgFlags;\r
@@ -79,7 +78,7 @@ import tainavi.VWUpdate.UpdateResult;
 /**\r
  * メインな感じ\r
  */\r
-public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener {\r
+public class Viewer extends JFrame implements ChangeListener,TickTimerListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
        \r
@@ -135,7 +134,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
        private final TVProgramList progPlugins = new TVProgramList();                          // Web番組表プラグイン(テンプレート)\r
        private final TVProgramList tvprograms = new TVProgramList();                           // Web番組表プラグイン(実際に利用するもの)\r
        \r
-       private final VWTimer timer_now = new VWTimer();                                                        // 毎分00秒に起動して処理をキックするタイマー\r
+       private final TickTimer timer_now = new TickTimer();                                                    // 毎分00秒に起動して処理をキックするタイマー\r
        \r
        // 初期化的な\r
        private boolean logging = true;                                                                                 // ログ出力する\r
@@ -608,8 +607,6 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                protected void setSelectedTab(MWinTab tab) { mainWindow.setSelectedTab(tab); }\r
 \r
                @Override\r
-               protected String getSelectedRecorderOnToolbar() { return toolBar.getSelectedRecorder(); }\r
-               @Override\r
                protected boolean isFullScreen() { return toolBar.isFullScreen(); }\r
                @Override\r
                protected void setSelectedPagerIndex(int idx) {\r
@@ -1429,10 +1426,12 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                                recorded.redrawRecordedList();\r
                        }\r
                        \r
+                       /*\r
                        // 新聞形式の予約枠を書き換えるかもよ?\r
                        if (env.getEffectComboToPaper()) {\r
                                paper.updateReserveBorder(null);\r
                        }\r
+                       */\r
                        \r
                        timer_now.start();\r
                        \r
@@ -1620,19 +1619,12 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                                \r
                                // 類似予約あり\r
                                likeRsvList.add(new LikeReserveItem(recorder, r, d));\r
-\r
-                               for ( LikeReserveItem lr : likeRsvList ) {\r
-                                       System.out.println(lr.getDist()+", "+lr.getRsv().getTitle());\r
-                               }\r
-                               System.out.println("********");\r
                        }\r
                        \r
                }\r
                \r
-               \r
                return likeRsvList;\r
        }\r
-       \r
        private boolean isLikeTitle(ProgDetailList tvd, ReserveList r, String keywordPop, int thresholdVal) {\r
                \r
                if (env.getDisableFazzySearch() == false) {\r
@@ -1657,7 +1649,6 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                \r
                return false;\r
        }\r
-       \r
        private boolean isLikeChannel(ProgDetailList tvd, ReserveList r) {\r
                \r
                if ( r.getCh_name() == null ) {\r
@@ -1669,7 +1660,6 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                \r
                return true;\r
        }\r
-       \r
        private Long getLikeDist(ProgDetailList tvd, ReserveList r, long rangeLikeRsv) {\r
                \r
                Long d = null;\r
@@ -4267,43 +4257,64 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
         * @return true:前回終了時の設定がある場合\r
         */\r
        private boolean buildMainWindow() {\r
-               //\r
-               mainWindow.addToolBar(toolBar);\r
-               mainWindow.addStatusArea(mwin);\r
-               \r
-               mainWindow.addTab(listed, MWinTab.LISTED);\r
-               mainWindow.addTab(paper, MWinTab.PAPER);\r
-               mainWindow.addTab(reserved, MWinTab.RSVED);\r
-               mainWindow.addTab(recorded, MWinTab.RECED);\r
-               mainWindow.addTab(autores, MWinTab.AUTORES);\r
-               mainWindow.addTab(setting, MWinTab.SETTING);\r
-               mainWindow.addTab(recsetting, MWinTab.RECSET);\r
-               mainWindow.addTab(chsetting, MWinTab.CHSET);\r
-               mainWindow.addTab(chsortsetting, MWinTab.CHSORT);\r
-               mainWindow.addTab(chconvsetting, MWinTab.CHCONV);\r
-               mainWindow.addTab(chdatsetting, MWinTab.CHDAT);\r
                \r
-               //新聞描画枠のリセット\r
-               paper.clearPanel();\r
-               paper.buildMainViewByDate();\r
+               // コンポーネント作成\r
+               {\r
+                       // メインウィンドウの作成\r
+                       mainWindow = new VWMainWindow();\r
                \r
-               // サイドツリーのデフォルトノードの選択\r
-               paper.selectTreeDefault();\r
-               listed.selectTreeDefault();\r
+                       // 内部クラスのインスタンス生成\r
+                       toolBar = new VWToolBar();\r
+                       listed = new VWListedView();\r
+                       paper = new VWPaperView();\r
+                       reserved = new VWReserveListView();\r
+                       recorded = new VWRecordedListView();\r
+                       autores = new VWAutoReserveListView();\r
+                       setting = new VWSettingView();\r
+                       recsetting = new VWRecorderSettingView();\r
+                       chsetting = new VWChannelSettingView();\r
+                       chdatsetting = new VWChannelDatSettingView();\r
+                       chsortsetting = new VWChannelSortView();\r
+                       chconvsetting = new VWChannelConvertView();\r
+               }\r
                \r
-               if ( recInfoList.size() > 0 ) {\r
-                       // 前回終了時設定が存在する場合\r
-                       \r
-                       // 開いていたタブ\r
-                       mainWindow.setShowSettingTabs(bounds.getShowSettingTabs());\r
-                       \r
-                       // ステータスエリアの高さ\r
-                       mwin.setRows(bounds.getStatusRows());\r
-                       \r
-                       return false;\r
+               // 初期値\r
+               {\r
+                       // 設定\r
+                       toolBar.setDebug(env.getDebug());\r
+                       autores.setDebug(env.getDebug());\r
+       \r
+                       // ページャーの設定\r
+                       toolBar.setPagerItems();\r
                }\r
                \r
-               // 前回終了時設定が存在しない場合\r
+               // コンポーネントの組み立て\r
+               {\r
+                       // ツールバーなど\r
+                       mainWindow.addToolBar(toolBar);\r
+                       mainWindow.addStatusArea(mwin);\r
+                       \r
+                       // タブ群\r
+                       mainWindow.addTab(listed, MWinTab.LISTED);\r
+                       mainWindow.addTab(paper, MWinTab.PAPER);\r
+                       mainWindow.addTab(reserved, MWinTab.RSVED);\r
+                       mainWindow.addTab(recorded, MWinTab.RECED);\r
+                       mainWindow.addTab(autores, MWinTab.AUTORES);\r
+                       mainWindow.addTab(setting, MWinTab.SETTING);\r
+                       mainWindow.addTab(recsetting, MWinTab.RECSET);\r
+                       mainWindow.addTab(chsetting, MWinTab.CHSET);\r
+                       mainWindow.addTab(chsortsetting, MWinTab.CHSORT);\r
+                       mainWindow.addTab(chconvsetting, MWinTab.CHCONV);\r
+                       mainWindow.addTab(chdatsetting, MWinTab.CHDAT);\r
+               }\r
+               \r
+               // ステータスエリアを開く\r
+               setStatusVisible(bounds.getShowStatus());\r
+               \r
+               //新聞描画枠のリセット\r
+               paper.clearPanel();\r
+               paper.buildMainViewByDate();\r
+               \r
                return true;\r
        }\r
        \r
@@ -4443,7 +4454,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
        }\r
        \r
        @Override\r
-       public void timerRised(VWTimerRiseEvent e) {\r
+       public void timerRised(TickTimerRiseEvent e) {\r
                if (env.getDebug()) System.out.println("Timer Rised: now="+CommonUtils.getDateTimeYMDx(e.getCalendar()));\r
                setTitleBar();\r
        }\r
@@ -4717,37 +4728,9 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                // (新聞形式の)ツールチップの表示時間を変更する\r
                setTooltipDelay();\r
 \r
-               boolean firstRun = true;\r
+               // ウィンドウを構築\r
                try {\r
-                       // メインウィンドウの作成\r
-                       mainWindow = new VWMainWindow();\r
-               \r
-                       // 内部クラスのインスタンス生成\r
-                       toolBar = new VWToolBar();\r
-                       listed = new VWListedView();\r
-                       paper = new VWPaperView();\r
-                       reserved = new VWReserveListView();\r
-                       recorded = new VWRecordedListView();\r
-                       autores = new VWAutoReserveListView();\r
-                       setting = new VWSettingView();\r
-                       recsetting = new VWRecorderSettingView();\r
-                       chsetting = new VWChannelSettingView();\r
-                       chdatsetting = new VWChannelDatSettingView();\r
-                       chsortsetting = new VWChannelSortView();\r
-                       chconvsetting = new VWChannelConvertView();\r
-                       \r
-                       // 設定のほにゃらら\r
-                       toolBar.setDebug(env.getDebug());\r
-                       autores.setDebug(env.getDebug());\r
-\r
-                       // ページャーの設定\r
-                       toolBar.setPagerItems();\r
-                       \r
-                       // ウィンドウを構築\r
-                       firstRun = buildMainWindow();\r
-                       \r
-                       // ステータスエリアを開く\r
-                       setStatusVisible(bounds.getShowStatus());\r
+                       buildMainWindow();\r
                }\r
                catch ( Exception e ) {\r
                        System.err.println("【致命的エラー】ウィンドウの構築に失敗しました");\r
@@ -4781,45 +4764,62 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                        }\r
                });\r
                \r
-               // タブを選択\r
-               ShowInitTab();\r
-               \r
                // 初回起動時はレコーダの登録を促す\r
-               if (firstRun) {\r
+               if ( recorders.size() == 0 ) {\r
                        Container cp = getContentPane();\r
                        JOptionPane.showMessageDialog(cp, "レコーダが登録されていません。\n最初に登録を行ってください。\n番組表だけを使いたい場合は、\nNULLプラグインを登録してください。");\r
                }\r
                \r
-               // メインウィンドウをスプラッシュからコンポーネントに入れ替える\r
-               this.setVisible(false);\r
-               this.setContentPane(mainWindow);\r
-               setInitBounds();\r
-               this.setVisible(true);\r
-               \r
-               // タイトル更新\r
-               setTitleBar();\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // イベントリスナーの登録 \r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
                \r
                // [ツールバー/共通] レコーダ情報変更\r
                toolBar.addHDDRecorderChangeListener(autores);\r
                \r
                // [ツールバー/レコーダ選択]\r
+               toolBar.addHDDRecorderSelectionListener(paper);         // 新聞形式\r
                toolBar.addHDDRecorderSelectionListener(autores);       // 自動予約一覧\r
                toolBar.addHDDRecorderSelectionListener(rdialog);       // 予約ダイアログ\r
+               \r
+               // [タイマー] タイトルバー更新/リスト形式の現在時刻ノード/新聞形式の現在時刻ノード\r
+               timer_now.addTickTimerRiseListener(this);\r
+               timer_now.addTickTimerRiseListener(listed);\r
+               timer_now.addTickTimerRiseListener(paper);\r
 \r
-               // レコーダ選択イベントキック\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // [Fire!] レコーダ選択\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
                toolBar.setSelectedRecorder(bounds.getSelectedRecorderId());\r
                \r
-               // [タイマー] タイトルバー更新/リスト形式の現在時刻ノード/新聞形式の現在時刻ノード\r
-               timer_now.addVWTimerRiseListener(this);\r
-               timer_now.addVWTimerRiseListener(listed);\r
-               timer_now.addVWTimerRiseListener(paper);\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // [Fire!] サイドツリーのデフォルトを選択することで番組情報の描画を開始する\r
+               // ※ここ以前だとぬぽとかOOBとか出るかもよ!\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               paper.selectTreeDefault();\r
+               listed.selectTreeDefault();\r
                \r
-               // タイマー起動\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // メインウィンドウをスプラッシュからコンポーネントに入れ替える\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               this.setVisible(false);\r
+               this.setContentPane(mainWindow);\r
+               setInitBounds();\r
+               this.setVisible(true);\r
+               \r
+               setTitleBar();  // タイトルバー更新\r
+               \r
+               ShowInitTab();  // 前回開いていたタブを開く\r
+               \r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // タイマーを起動する\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
                timer_now.start();\r
                \r
-               // メッセージだ\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+               // 初期化終了\r
+               // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
                mwin.appendMessage(String.format("タイニー番組ナビゲータが起動しました (VersionInfo:%s on %s)",VersionInfo.getVersion(),VersionInfo.getEnvironment()));\r
-               \r
                initialized = true;\r
        }\r
 }\r
index d9b7d9f..ca023c6 100644 (file)
@@ -80,5 +80,6 @@
 【予約一覧】EDCBで指定の番組と異なる番組を操作してしまうことがある→絞り込み+EXECボタンに問題 ★★★\r
 【新聞形式】日跨りイベント時に「現在放送中」が自動で翌日に切り替わらなくなった\r
 【その他】HDDRecorderListで自己フィールド生成を回避するためにmylistをstaticで宣言とかトチ狂ったコードを書いていたので修正\r
+【新聞形式】過去予約非表示にしても、過去ピックアップ情報が表示される問題の修正\r
 \r
 ---以上\r