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