/**\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
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
private static final int OPENING_WIAT = 500; // まあ起動時しか使わないんですけども\r
\r
private static final String MSGID = "[鯛ナビ] ";\r
- private static final String ERRID = "[ERROR]"+MSGID;\r
+// private static final String ERRID = "[ERROR]"+MSGID;\r
private static final String DBGID = "[DEBUG]"+MSGID;\r
\r
/**\r
protected void showPopupForTraceProgram(\r
final JComponent comp,\r
final ProgDetailList tvd, final String keyword, final int threshold,\r
- final int x, final int y, final int h) {\r
+ final int x, final int y) {\r
\r
- timer_now.pause();\r
- Viewer.this.showPopupForTraceProgram(comp, tvd, keyword, threshold, x, y, h);\r
- timer_now.start();\r
+ timer_now.pause(); // 停止\r
+ \r
+ Viewer.this.showPopupForTraceProgram(comp, tvd, keyword, threshold, x, y, null);\r
+ \r
+ timer_now.start(); // 再開\r
}\r
\r
@Override\r
protected void showPopupForTraceProgram(\r
final JComponent comp,\r
final ProgDetailList tvd, final String keyword, final int threshold,\r
- final int x, final int y, final int h) {\r
+ final int x, final int y, final String clickedDateTime) {\r
\r
- timer_now.pause();\r
- Viewer.this.showPopupForTraceProgram(comp, tvd, keyword, threshold, x, y, h);\r
- timer_now.start();\r
+ timer_now.pause(); // 停止\r
+ \r
+ Viewer.this.showPopupForTraceProgram(comp, tvd, keyword, threshold, x, y, clickedDateTime);\r
+ \r
+ timer_now.start(); // 再開\r
}\r
\r
@Override\r
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
}\r
\r
@Override\r
- protected JMenuItem getExecOnOffMenuItem(boolean fexec, String title,\r
- String chnam, String rsvId, String recId) {\r
+ protected JMenuItem getExecOnOffMenuItem(boolean fexec,\r
+ String start, String title, String chnam, String rsvId, String recId) {\r
\r
- return Viewer.this.getExecOnOffMenuItem(fexec, title, chnam, rsvId, recId, 0);\r
+ return Viewer.this.getExecOnOffMenuItem(fexec, start, title, chnam, rsvId, recId, 0);\r
}\r
\r
@Override\r
- protected JMenuItem getRemoveRsvMenuItem(String title, String chnam,\r
- String rsvId, String recId) {\r
+ protected JMenuItem getRemoveRsvMenuItem(\r
+ String start, String title, String chnam, String rsvId, String recId) {\r
\r
- return Viewer.this.getRemoveRsvMenuItem(title, chnam, rsvId, recId, 0);\r
+ return Viewer.this.getRemoveRsvMenuItem(start, title, chnam, rsvId, recId, 0);\r
}\r
\r
@Override\r
*/\r
\r
@Override\r
- protected void searchLikeRsv(LikeReserveList likeRsvList, ProgDetailList tvd, String keyword, int threshold) {\r
- Viewer.this.searchLikeRsv(likeRsvList, tvd, keyword, threshold);\r
+ protected LikeReserveList findLikeReserves(ProgDetailList tvd, String keyword, int threshold) {\r
+ return Viewer.this.findLikeReserves(tvd, keyword, threshold);\r
}\r
-\r
- @Override\r
- protected String getSelectedRecorderOnToolbar() { return toolBar.getSelectedRecorder(); }\r
}\r
\r
/**\r
recorded.redrawRecordedList();\r
}\r
\r
+ /*\r
// 新聞形式の予約枠を書き換えるかもよ?\r
if (env.getEffectComboToPaper()) {\r
paper.updateReserveBorder(null);\r
}\r
+ */\r
\r
timer_now.start();\r
\r
/**\r
* 類似予約をさがす\r
*/\r
- private void searchLikeRsv(LikeReserveList likeRsvList, ProgDetailList tvd, String keyword, int threshold) {\r
- \r
- likeRsvList.clear();\r
+ private LikeReserveList findLikeReserves(ProgDetailList tvd, String keyword, int threshold) {\r
\r
- // 曖昧検索のための初期化\r
- String keywordPop = null;\r
+ String keywordVal = null;\r
int thresholdVal = 0;\r
- if (threshold > 0) {\r
- // キーワード指定がある場合\r
- keywordPop = TraceProgram.replacePop(keyword);\r
- thresholdVal = threshold;\r
- }\r
- else {\r
- // キーワード指定がない場合\r
- keywordPop = tvd.titlePop;\r
- thresholdVal = env.getDefaultFazzyThreshold();\r
- }\r
-\r
- // 検索範囲\r
- long rangeLikeRsv = env.getRangeLikeRsv()*3600000;\r
\r
- HashMap<String,Boolean> misCN = new HashMap<String, Boolean>();\r
- for ( HDDRecorder recorder : recorders ) {\r
- \r
- // 終了した予約を整理する\r
- recorder.refreshReserves();\r
- \r
- for ( ReserveList r : recorder.getReserves() ) {\r
- \r
- // タイトルのマッチング\r
- boolean isExist = false;\r
- if (env.getDisableFazzySearch() == false) {\r
- // 双方向の比較を行う・正引き\r
- int fazScore = TraceProgram.sumScore(keywordPop, r.getTitlePop());\r
- if ( fazScore >= thresholdVal) {\r
- isExist = true;\r
- }\r
- else if ( ! env.getDisableFazzySearchReverse()) {\r
- // 逆引き\r
- fazScore = TraceProgram.sumScore(r.getTitlePop(), keywordPop);\r
- if ( fazScore >= thresholdVal) {\r
- isExist = true;\r
- }\r
- }\r
- }\r
- else {\r
- if (r.getTitlePop().equals(tvd.titlePop)) {\r
- isExist = true;\r
- }\r
- }\r
- if ( ! isExist) {\r
- continue;\r
- }\r
- \r
- // 放送局のマッチング\r
- if (r.getCh_name() == null) {\r
- if(r.getChannel().length() > 0) {\r
- misCN.put(r.getChannel(),true);\r
- }\r
- continue;\r
- }\r
- if ( ! r.getCh_name().equals(tvd.center)) {\r
- continue;\r
- }\r
- \r
- // 近接時間チェック\r
- boolean inRange = true;\r
- if (rangeLikeRsv > 0) {\r
- \r
- inRange = false;\r
- \r
- ArrayList<String> starts = new ArrayList<String>();\r
- ArrayList<String> ends = new ArrayList<String>();\r
- CommonUtils.getStartEndList(starts, ends, r);\r
- for (int j=0; j<starts.size(); j++) {\r
- long d = CommonUtils.getDiffDateTime(tvd.startDateTime, starts.get(j));\r
- //StdAppendMessage(String.format("%s %s %d", tvd.startDateTime, starts.get(j),d));\r
- if (d <= rangeLikeRsv) {\r
- inRange = true;\r
- break;\r
- }\r
- }\r
- }\r
- if ( ! inRange) {\r
- continue;\r
- }\r
- \r
- // 類似予約あり!\r
- likeRsvList.add(new LikeReserveItem(recorder, r));\r
+ // 曖昧検索のための初期化\r
+ if ( ! env.getDisableFazzySearch() ) {\r
+ if ( threshold > 0 ) {\r
+ // キーワード指定がある場合\r
+ keywordVal = TraceProgram.replacePop(keyword);\r
+ thresholdVal = threshold;\r
+ }\r
+ else {\r
+ // キーワード指定がない場合\r
+ keywordVal = tvd.titlePop;\r
+ thresholdVal = env.getDefaultFazzyThreshold();\r
}\r
}\r
- \r
- return;\r
+\r
+ // 検索実行\r
+ return recorders.findLikeReserves(tvd, keywordVal, thresholdVal, env.getRangeLikeRsv(), ! env.getDisableFazzySearchReverse());\r
}\r
\r
- \r
/***\r
* \r
* リスト・新聞形式共通\r
public void showPopupForTraceProgram(\r
final JComponent comp,\r
final ProgDetailList tvd, final String keyword, final int threshold,\r
- final int x, final int y, final int h)\r
+ final int x, final int y, final String clickedDateTime)\r
{\r
JPopupMenu pop = new JPopupMenu();\r
\r
// 過去ログは処理対象外です\r
}\r
else {\r
- JMenuItem menuItem = new JMenuItem("予約する【"+tvd.title+" ("+tvd.center+")】");\r
+ JMenuItem menuItem = new JMenuItem(String.format("予約する【%s %s - %s(%s)】",tvd.accurateDate,tvd.start,tvd.title,tvd.center));\r
+ menuItem.setForeground(new Color(0,127,0));\r
+ Font f = menuItem.getFont();\r
+ menuItem.setFont(f.deriveFont(f.getStyle()|Font.BOLD));\r
\r
menuItem.addActionListener(new ActionListener() {\r
public void actionPerformed(ActionEvent e) {\r
}\r
\r
//\r
- if (rdialog.isReserved()) {\r
+ if (rdialog.isSucceededReserve()) {\r
listed.updateReserveMark();\r
paper.updateReserveBorder(tvd.center);\r
reserved.redrawReservedList();\r
pop.addSeparator();\r
\r
// 類似予約検索\r
- LikeReserveList likeRsvList = new LikeReserveList();\r
- searchLikeRsv(likeRsvList, tvd, "", 0);\r
+ LikeReserveList likeRsvList;\r
+ if ( env.getDisableFazzySearch() ) {\r
+ likeRsvList = recorders.findLikeReserves(tvd, null, 0, env.getRangeLikeRsv(), false);\r
+ }\r
+ else {\r
+ likeRsvList = recorders.findLikeReserves(tvd, tvd.titlePop, env.getDefaultFazzyThreshold(), env.getRangeLikeRsv(), ! env.getDisableFazzySearchReverse());\r
+ }\r
\r
// 重複予約検索\r
- LikeReserveList overlapRsvList = new LikeReserveList();\r
- searchOverlapRsv(overlapRsvList, tvd, h);\r
- \r
+ LikeReserveList overlapRsvList = recorders.findOverlapReserves(tvd, clickedDateTime);\r
+\r
// 類似と重複で被るものを重複から除外\r
- for ( LikeReserveItem ll : likeRsvList ) {\r
- int i=0;\r
- for ( ; i<overlapRsvList.size(); i++ ) {\r
- if ( ll.getRsv() == overlapRsvList.getRsv(i) ) {\r
- break;\r
- }\r
- }\r
- if ( i < overlapRsvList.size() ) {\r
- overlapRsvList.remove(i);\r
- }\r
+ for ( LikeReserveItem item : likeRsvList ) {\r
+ overlapRsvList.removeDup(item);\r
}\r
\r
// 予約実行ON・OFF\r
rsvList = overlapRsvList;\r
}\r
\r
- for ( int i=0; i<rsvList.size(); i++ ) {\r
+ for ( LikeReserveItem rsvItem : rsvList ) {\r
\r
- final boolean fexec = rsvList.getRsv(i).getExec();\r
- final String title = rsvList.getRsv(i).getTitle();\r
- final String chnam = rsvList.getRsv(i).getCh_name();\r
- final String rsvId = rsvList.getRsv(i).getId();\r
- final String recId = rsvList.getRec(i).Myself();\r
+ final boolean fexec = rsvItem.getRsv().getExec();\r
+ final String start = rsvItem.getRsv().getAhh()+":"+rsvItem.getRsv().getAmm();\r
+ final String title = rsvItem.getRsv().getTitle();\r
+ final String chnam = rsvItem.getRsv().getCh_name();\r
+ final String rsvId = rsvItem.getRsv().getId();\r
+ final String recId = rsvItem.getRec().Myself();\r
\r
- pop.add(getExecOnOffMenuItem(fexec,title,chnam,rsvId,recId,n));\r
+ pop.add(getExecOnOffMenuItem(fexec,start,title,chnam,rsvId,recId,n));\r
}\r
\r
pop.addSeparator();\r
rsvList = overlapRsvList;\r
}\r
\r
- for (int i=0; i<rsvList.size(); i++) {\r
+ for ( LikeReserveItem rsvItem : rsvList ) {\r
\r
- final String title = rsvList.getRsv(i).getTitle();\r
- final String chnam = rsvList.getRsv(i).getCh_name();\r
- final String rsvId = rsvList.getRsv(i).getId();\r
- final String recId = rsvList.getRec(i).Myself();\r
+ final String start = rsvItem.getRsv().getAhh()+":"+rsvItem.getRsv().getAmm();\r
+ final String title = rsvItem.getRsv().getTitle();\r
+ final String chnam = rsvItem.getRsv().getCh_name();\r
+ final String rsvId = rsvItem.getRsv().getId();\r
+ final String recId = rsvItem.getRec().Myself();\r
\r
- pop.add(getRemoveRsvMenuItem(title,chnam,rsvId,recId,n));\r
+ pop.add(getRemoveRsvMenuItem(start, title,chnam,rsvId,recId,n));\r
}\r
\r
pop.addSeparator();\r
// ジャンプする\r
{\r
if ( mainWindow.isTabSelected(MWinTab.LISTED) ) {\r
- pop.add(getJumpMenuItem(tvd.title,tvd.center,tvd.startDateTime));\r
+ pop.add(getJumpMenuItem(tvd.title,tvd.center,tvd.accurateDate+" "+tvd.start));\r
}\r
if ( mainWindow.isTabSelected(MWinTab.LISTED) || mainWindow.isTabSelected(MWinTab.PAPER) ) {\r
JMenuItem mi = getJumpToLastWeekMenuItem(tvd.title,tvd.center,tvd.startDateTime);\r
\r
if ( ! isRemoveItem ) // 過去ログは処理対象外です\r
{\r
- final String label = tvd.title+" ("+tvd.center+")";\r
- JMenuItem menuItem = new JMenuItem("ピックアップへの追加【"+label+"】");\r
+ final String label = String.format("%s(%s)",tvd.title,tvd.center);\r
+ JMenuItem menuItem = new JMenuItem(String.format("ピックアップへの追加【%s %s - %s】",tvd.accurateDate,tvd.start,label));\r
menuItem.addActionListener(new ActionListener() {\r
public void actionPerformed(ActionEvent e) {\r
//\r
/**\r
* 予約を削除するメニューアイテム\r
*/\r
- private JMenuItem getRemoveRsvMenuItem(final String title, final String chnam, final String rsvId, final String recId, int n) {\r
+ private JMenuItem getRemoveRsvMenuItem(final String start, final String title, final String chnam, final String rsvId, final String recId, int n) {\r
//\r
- JMenuItem menuItem = new JMenuItem(((n==0)?"予約を削除する【":"隣接予約を削除する【")+title+"("+chnam+")/"+recId+"】");\r
+ JMenuItem menuItem = new JMenuItem();\r
+ \r
+ String mode = "削除";\r
menuItem.setForeground(Color.RED);\r
+ \r
+ String target = ( n==0 ) ? "予約" : "隣接予約";\r
+\r
+ menuItem.setText(String.format("%sを%sにする【%s - %s(%s)/%s】",target,mode,start,title,chnam,recId));\r
+ \r
if ( recId.equals(toolBar.getSelectedRecorder()) ) {\r
// 選択中のレコーダのものは太字に\r
Font f = menuItem.getFont();\r
rdialog.setOnlyUpdateExec(fexec);\r
rdialog.doUpdate();\r
\r
- if (rdialog.isReserved()) {\r
+ if (rdialog.isSucceededReserve()) {\r
// 予約状況を更新\r
listed.updateReserveMark();\r
paper.updateReserveBorder(chnam);\r
/**\r
* 予約実行をONOFFするメニューアイテム\r
*/\r
- private JMenuItem getExecOnOffMenuItem(final boolean fexec, final String title, final String chnam, final String rsvId, final String recId, int n) {\r
+ private JMenuItem getExecOnOffMenuItem(final boolean fexec, final String start, final String title, final String chnam, final String rsvId, final String recId, int n) {\r
\r
JMenuItem menuItem = new JMenuItem();\r
\r
}\r
else {\r
mode = "OFF";\r
+ menuItem.setForeground(Color.BLACK);\r
}\r
- \r
- menuItem.setText(((n==0)?"予約を":"隣接予約を")+mode+"にする【"+title+"("+chnam+")/"+recId+")】");\r
+\r
+ String target = ( n==0 ) ? "予約" : "隣接予約";\r
+\r
+ menuItem.setText(String.format("%sを%sにする【%s - %s(%s)/%s】",target,mode,start,title,chnam,recId));\r
\r
if ( recId.equals(toolBar.getSelectedRecorder()) ) {\r
// 選択中のレコーダのものは太字に\r
rdialog.setOnlyUpdateExec( ! fexec);\r
rdialog.doUpdate();\r
\r
- if (rdialog.isReserved()) {\r
+ if (rdialog.isSucceededReserve()) {\r
// 予約状況を更新\r
listed.updateReserveMark();\r
paper.updateReserveBorder(chnam);\r
* 新聞形式へジャンプするメニューアイテム\r
*/\r
private JMenuItem getJumpMenuItem(final String title, final String chnam, final String startDT) {\r
- JMenuItem menuItem = new JMenuItem("番組欄へジャンプする【"+title+" ("+chnam+")】");\r
+ JMenuItem menuItem = new JMenuItem(String.format("番組欄へジャンプする【%s - %s(%s)】",startDT,title,chnam));\r
menuItem.addActionListener(new ActionListener() {\r
public void actionPerformed(ActionEvent e) {\r
paper.jumpToBangumi(chnam,startDT);\r
});\r
return menuItem;\r
}\r
- private JMenuItem getJumpToLastWeekMenuItem(final String title, final String chnam, final String startDT) {\r
+ private JMenuItem getJumpToLastWeekMenuItem( final String title, final String chnam, final String startDT) {\r
GregorianCalendar cal = CommonUtils.getCalendar(startDT);\r
+ \r
if ( cal != null ) {\r
- JMenuItem menuItem = new JMenuItem("先週の番組欄へジャンプする【"+title+" ("+chnam+")】");\r
cal.add(Calendar.DATE, -7);\r
- final String lastweek = CommonUtils.getDateTime(cal);\r
+ final String lastdatetime = CommonUtils.getDateTimeW(cal);\r
+ \r
+ JMenuItem menuItem = new JMenuItem(String.format("先週の番組欄へジャンプする【%s - (%s)】",lastdatetime,chnam));\r
+ \r
menuItem.addActionListener(new ActionListener() {\r
public void actionPerformed(ActionEvent e) {\r
- paper.jumpToBangumi(chnam,lastweek);\r
+ paper.jumpToBangumi(chnam,lastdatetime);\r
}\r
});\r
return menuItem;\r
return null;\r
}\r
\r
- // カーソル位置にかかる予約枠の検索\r
- private void searchOverlapRsv(LikeReserveList overlapRsvList, ProgDetailList tvd, int h)\r
- {\r
- String clicked = "";\r
- if ( h >= 0 && tvd.start.length() != 0 ) {\r
- // 新聞形式ならクリック位置の日時を算出する\r
- GregorianCalendar cala = CommonUtils.getCalendar(tvd.startDateTime);\r
- if ( CommonUtils.isLateNight(cala.get(Calendar.HOUR_OF_DAY)) ) {\r
- cala.set(Calendar.HOUR_OF_DAY, TIMEBAR_START);\r
- cala.set(Calendar.MINUTE, 0);\r
- }\r
- cala.add(Calendar.MINUTE, Math.round(h/bounds.getPaperHeightMultiplier()));\r
- clicked = CommonUtils.getDateTime(cala);\r
- //StdAppendError("clicked:"+clicked);\r
- }\r
- \r
- HashMap<String,Boolean> misCN = new HashMap<String, Boolean>();\r
- for ( HDDRecorder recorder : recorders ) {\r
- \r
- // 終了した予約を整理する\r
- recorder.refreshReserves();\r
- \r
- for ( ReserveList r : recorder.getReserves() ) {\r
- \r
- // 放送局のマッチング\r
- if (r.getCh_name() == null) {\r
- if(r.getChannel().length() > 0) {\r
- misCN.put(r.getChannel(),true);\r
- }\r
- continue;\r
- }\r
- if ( ! r.getCh_name().equals(tvd.center)) {\r
- continue;\r
- }\r
- \r
- // 重複時間チェック\r
- boolean inRange = false;\r
- {\r
- ArrayList<String> starts = new ArrayList<String>();\r
- ArrayList<String> ends = new ArrayList<String>();\r
- CommonUtils.getStartEndList(starts, ends, r);\r
- if ( h >= 0 ) {\r
- // 新聞形式はピンポイント(マウスポインタのある位置の時刻)\r
- for (int j=0; j<starts.size(); j++) {\r
- if ( clicked.compareTo(starts.get(j)) >= 0 && clicked.compareTo(ends.get(j)) <= 0 ) {\r
- inRange = true;\r
- break;\r
- }\r
- }\r
- }\r
- else {\r
- // リスト形式は幅がある(開始~終了までの間のいずれかの時刻)\r
- for (int j=0; j<starts.size(); j++) {\r
- if ( CommonUtils.isOverlap(tvd.startDateTime, tvd.endDateTime, starts.get(j), ends.get(j), false) ) {\r
- inRange = true;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- if ( ! inRange) {\r
- continue;\r
- }\r
- \r
- // 類似予約あり!\r
- overlapRsvList.add(new LikeReserveItem(recorder, r));\r
- }\r
- }\r
- \r
- return;\r
- }\r
- \r
- \r
/*******************************************************************************\r
* タイマー関連\r
******************************************************************************/\r
private void loadTVProgramOnce(TVProgram tvp, String sType, String aName, boolean loadonly, boolean force) {\r
\r
final String FUNCID = "[Web番組表取得] ";\r
- final String ERRID = "[ERROR]"+FUNCID;\r
+// final String ERRID = "[ERROR]"+FUNCID;\r
\r
// ログ\r
String msg = FUNCID+sType+"を取得します: "+tvp.getTVProgramId();\r
* @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
}\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
System.exit(1);\r
}\r
\r
- // LookAndFeelとフォントを変更する\r
- //initLookAndFeelAndFont();\r
- //updateComponentTreeUI();\r
- \r
// 背景色設定ダイアログにフォント名の一覧を設定する\r
pcwin.setFontList(vwfont);\r
\r
// (新聞形式の)ツールチップの表示時間を変更する\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
System.exit(1);\r
}\r
\r
- // ステータスエリアの開閉(不要)\r
+ // ★★★★★★★★★★\r
+ //int x = 2/0; // サブスレッドの突然死のトラップを確認するためのコード\r
+ // ★★★★★★★★★★\r
\r
// トレイアイコンを作る\r
getTrayIcon();\r
}\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
+ // イベントリスナーの登録 \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
+ // [Fire!] レコーダ選択\r
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+ toolBar.setSelectedRecorder(bounds.getSelectedRecorderId());\r
+ \r
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+ // [Fire!] サイドツリーのデフォルトを選択することで番組情報の描画を開始する\r
+ // ※ここ以前だとぬぽとかOOBとか出るかもよ!\r
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
+ paper.selectTreeDefault();\r
+ listed.selectTreeDefault();\r
+ \r
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
// メインウィンドウをスプラッシュからコンポーネントに入れ替える\r
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\r
this.setVisible(false);\r
this.setContentPane(mainWindow);\r
setInitBounds();\r
this.setVisible(true);\r
\r
- // タイトル更新\r
- setTitleBar();\r
+ setTitleBar(); // タイトルバー更新\r
\r
- // [ツールバー/レコーダ選択] 自動予約一覧\r
- toolBar.addVWHDDRecorderSelectionListener(autores);\r
+ ShowInitTab(); // 前回開いていたタブを開く\r
\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
- // タイマー起動\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