OSDN Git Service

[予約ダイアログ]自動予約編集への対応に伴うレイアウト変更(2)
authorpeeweedee <peeweedee@users.sourceforge.jp>
Sat, 22 Jun 2013 15:05:51 +0000 (00:05 +0900)
committerpeeweedee <peeweedee@users.sourceforge.jp>
Sat, 22 Jun 2013 15:05:51 +0000 (00:05 +0900)
TinyBannavi/src/tainavi/AbsAutoReserveListView.java
TinyBannavi/src/tainavi/AbsReserveDialog.java
TinyBannavi/src/tainavi/CommonSwingUtils.java
TinyBannavi/src/tainavi/HDDRecorderList.java
TinyBannavi/src/tainavi/JComboBoxPanel.java
TinyBannavi/src/tainavi/LikeReserveItem.java
TinyBannavi/src/tainavi/LikeReserveList.java
TinyBannavi/src/tainavi/Viewer.java

index cdac686..71d7de7 100644 (file)
@@ -251,7 +251,7 @@ public abstract class AbsAutoReserveListView extends JPanel implements HDDRecord
                redrawByRecorderSelected();\r
        }\r
        \r
-       private String getSelectedRecorder() {\r
+       private String getSelectedRecorderId() {\r
                return ( src_recsel!=null ? src_recsel.getSelectedId() : null );\r
        }\r
        \r
index ba9e594..cea36d6 100644 (file)
@@ -4,6 +4,8 @@ import java.awt.BorderLayout;
 import java.awt.Color;\r
 import java.awt.Component;\r
 import java.awt.Dimension;\r
+import java.awt.Font;\r
+import java.awt.Rectangle;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ItemEvent;\r
@@ -30,6 +32,7 @@ import javax.swing.JScrollPane;
 import javax.swing.JTable;\r
 import javax.swing.JTextArea;\r
 import javax.swing.JTextField;\r
+import javax.swing.JViewport;\r
 import javax.swing.SpringLayout;\r
 import javax.swing.SwingUtilities;\r
 import javax.swing.border.LineBorder;\r
@@ -48,7 +51,7 @@ import tainavi.TVProgram.ProgSubgenre;
  * 予約ダイアログのクラス\r
  * @since 3.15.4β ReserveDialogからクラス名変更\r
  */\r
-abstract class AbsReserveDialog extends JDialog {\r
+abstract class AbsReserveDialog extends JDialog implements HDDRecorderListener {\r
 \r
        private static final long serialVersionUID = 1L;\r
 \r
@@ -76,8 +79,7 @@ abstract class AbsReserveDialog extends JDialog {
        protected abstract void ringBeep();\r
 \r
        // クラス内のイベントから呼び出されるもの\r
-       protected abstract void searchLikeRsv(LikeReserveList likeRsvList, ProgDetailList tvd, String keyword, int threshold);\r
-       protected abstract String getSelectedRecorderOnToolbar();\r
+       protected abstract LikeReserveList findLikeReserves(ProgDetailList tvd, String keyword, int threshold);\r
        \r
        /*******************************************************************************\r
         * 呼び出し元から引き継いだもの\r
@@ -96,6 +98,7 @@ abstract class AbsReserveDialog extends JDialog {
        \r
        private final GetEventId geteventid = new GetEventId(); // 番組IDの取得\r
        \r
+       \r
        /*******************************************************************************\r
         * 定数\r
         ******************************************************************************/\r
@@ -122,7 +125,7 @@ abstract class AbsReserveDialog extends JDialog {
        \r
        private static final int COMBO_WIDTH = 115;\r
        private static final int COMBO_WIDTH_WIDE = 155;\r
-       private static final int COMBO_HEIGHT = 50;\r
+       private static final int COMBO_HEIGHT = 43;\r
 \r
        private static final int TITLE_WIDTH = COMBO_WIDTH_WIDE+COMBO_WIDTH*2+SEP_WIDTH*2;\r
        private static final int CHNAME_WIDTH = COMBO_WIDTH*2+SEP_WIDTH;\r
@@ -130,7 +133,7 @@ abstract class AbsReserveDialog extends JDialog {
        private static final int DETAIL_HEIGHT = 100;\r
        private static final int DATE_WIDTH = 175;\r
        private static final int LIKELIST_WIDTH = 730;\r
-       private static final int LIKELIST_ROWS = 4;\r
+       private static final int LIKELIST_ROWS = 5;\r
        \r
        private static final int LABEL_WIDTH = 150;\r
        private static final int BUTTON_WIDTH = 75;\r
@@ -140,9 +143,9 @@ abstract class AbsReserveDialog extends JDialog {
        \r
        private static final int LRT_HEADER_WIDTH = 20;\r
        private static final int LRT_TITLE_WIDTH = 325;\r
-       private static final int LRT_START_WIDTH = 115;\r
+       private static final int LRT_START_WIDTH = 120;\r
        private static final int LRT_RECORDER_WIDTH = 200;\r
-       private static final int LRT_ENCODER_WIDTH = 60;\r
+       private static final int LRT_ENCODER_WIDTH = 80;\r
        \r
        public static enum LikeRsvColumn {\r
                TITLE           ("予約名",   LRT_TITLE_WIDTH),\r
@@ -186,6 +189,7 @@ abstract class AbsReserveDialog extends JDialog {
        private static final String ERRID = "[ERROR]"+MSGID;\r
        private static final String DBGID = "[DEBUG]"+MSGID;\r
        \r
+       \r
        /*******************************************************************************\r
         * 部品\r
         ******************************************************************************/\r
@@ -212,27 +216,19 @@ abstract class AbsReserveDialog extends JDialog {
        private JLabel jLabel_date = null;\r
        private JComboBox jComboBox_date = null;\r
        \r
-       private JLabel jLabel_ahh = null;\r
+       private JButton jButton_aTime = null;\r
        private JTextField jTextField_ahh = null;\r
        private JLabel jLabel_asep = null;\r
        private JTextField jTextField_amm = null;\r
        private JButton jButton_amm_up = null;\r
        private JButton jButton_amm_down = null;\r
-       private JTextField jTextField_Xahh = null;\r
-       private JLabel jLabel_Xasep = null;\r
-       private JTextField jTextField_Xamm = null;\r
        \r
-       private JLabel jLabel_zhh = null;\r
+       private JButton jButton_zTime = null;\r
        private JTextField jTextField_zhh = null;\r
        private JLabel jLabel_zsep = null;\r
        private JTextField jTextField_zmm = null;\r
        private JButton jButton_zmm_up = null;\r
        private JButton jButton_zmm_down = null;\r
-       private JTextField jTextField_Xzhh = null;\r
-       private JLabel jLabel_Xzsep = null;\r
-       private JTextField jTextField_Xzmm = null;\r
-       \r
-       private JButton jButton_Xreset = null;\r
        \r
        private JLabel jLabel_detail = null;\r
        private JScrollPane jScrollPane_detail = null;\r
@@ -276,8 +272,8 @@ abstract class AbsReserveDialog extends JDialog {
        \r
        private JScrollPane jPane_likersv = null;\r
        \r
-       private LikeRsvTable likersvtable = null;\r
-       private LikeRsvRowHeader likersvrowheader = null;\r
+       private LikeRsvTable jtbl_likersv = null;\r
+       private LikeRsvRowHeader jrhdr_likersv = null;\r
        \r
        /*\r
         * その他\r
@@ -289,7 +285,7 @@ abstract class AbsReserveDialog extends JDialog {
        private class Vals {\r
                \r
                // 検索した類似予約を保持する\r
-               final LikeReserveList likeRsvList = new LikeReserveList();\r
+               LikeReserveList likeRsvList = null;\r
                LikeReserveItem selectedLikeRsv = null; \r
                \r
                // 類似予約抽出条件(タイトル)\r
@@ -301,6 +297,11 @@ abstract class AbsReserveDialog extends JDialog {
                String byDateIni = "";\r
                // オープン時の週次予約の値(状態リセット用)\r
                String byWeeklyIni = "";\r
+               // オープン時の時刻の値\r
+               String ahh = "";\r
+               String amm = "";\r
+               String zhh = "";\r
+               String zmm = "";\r
                \r
                // 延長警告分のばすかどうか\r
                boolean isExtended = false;\r
@@ -333,6 +334,7 @@ abstract class AbsReserveDialog extends JDialog {
 \r
        private boolean doneReserve = false;\r
 \r
+       \r
        /*******************************************************************************\r
         * コンストラクタ\r
         ******************************************************************************/\r
@@ -359,6 +361,7 @@ abstract class AbsReserveDialog extends JDialog {
                this.addWindowListener(wl_opened);\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * アクション\r
         ******************************************************************************/\r
@@ -422,42 +425,41 @@ abstract class AbsReserveDialog extends JDialog {
                        \r
                        @Override\r
                        protected Object doWorks() throws Exception {\r
-                               for ( HDDRecorder recorder : recorders ) {\r
-                                       if (recorder.isMyself((String)jCBXPanel_recorder.getSelectedItem()) == true) {\r
-                                               StWin.appendMessage(MSGID+"予約を登録します:"+r.getTitle());\r
-                                               //recorder.setProgressArea(StWin);\r
-                                               if (recorder.PostRdEntry(r)) {\r
-                                                       \r
-                                                       // 成功したよ\r
-                                                       MWin.appendMessage(MSGID+"正常に登録できました:"+r.getTitle()+"("+r.getCh_name()+")");\r
-                                                       doneReserve = true;\r
+                               \r
+                               String myself = (String)jCBXPanel_recorder.getSelectedItem();\r
+                               for ( HDDRecorder recorder : recorders.findInstance(myself) ) {\r
+                                       \r
+                                       StWin.appendMessage(MSGID+"予約を登録します:"+r.getTitle());\r
+                                       \r
+                                       if ( recorder.PostRdEntry(r) ) {\r
+                                               \r
+                                               MWin.appendMessage(MSGID+"正常に登録できました:"+r.getTitle()+"("+r.getCh_name()+")");\r
+                                               doneReserve = true;\r
+                                               \r
+                                               // カレンダーに登録する\r
+                                               if ( recorder.getUseCalendar() && jCheckBox_Exec.isSelected() ) {\r
                                                        \r
-                                                       // カレンダーに登録する\r
-                                                       if ( recorder.getUseCalendar()) {\r
-                                                               if ( jCheckBox_Exec.isSelected() ) {\r
-                                                                       for ( HDDRecorder calendar : recorders ) {\r
-                                                                               if (calendar.getType() == RecType.CALENDAR) {\r
-                                                                                       StWin.appendMessage(MSGID+"カレンダーに予約情報を登録します");\r
-                                                                                       //calendar.setProgressArea(StWin);\r
-                                                                                       if ( ! calendar.PostRdEntry(r)) {\r
-                                                                                               MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
-                                                                                               ringBeep();\r
-                                                                                       }\r
-                                                                               }\r
-                                                                       }\r
+                                                       for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
+                                                               \r
+                                                               StWin.appendMessage(MSGID+"カレンダーに予約情報を登録します");\r
+                                                               \r
+                                                               if ( ! calendar.PostRdEntry(r)) {\r
+                                                                       MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
+                                                                       ringBeep();\r
                                                                }\r
                                                        }\r
                                                }\r
-                                               else {\r
-                                                       MWin.appendError(ERRID+"登録に失敗しました:"+r.getTitle()+"("+r.getCh_name()+")");\r
-                                               }\r
-                                               //\r
-                                               if ( ! recorder.getErrmsg().equals("")) {\r
-                                                       MWin.appendMessage(MSGID+"[追加情報] "+recorder.getErrmsg());\r
-                                                       ringBeep();\r
-                                               }\r
-                                               break;\r
                                        }\r
+                                       else {\r
+                                               MWin.appendError(ERRID+"登録に失敗しました:"+r.getTitle()+"("+r.getCh_name()+")");\r
+                                       }\r
+                                       \r
+                                       if ( ! recorder.getErrmsg().equals("")) {\r
+                                               MWin.appendMessage(MSGID+"[追加情報] "+recorder.getErrmsg());\r
+                                               ringBeep();\r
+                                       }\r
+                                       \r
+                                       break;  // 一回限り\r
                                }\r
                                return null;\r
                        }\r
@@ -538,24 +540,25 @@ abstract class AbsReserveDialog extends JDialog {
                        \r
                        @Override\r
                        protected Object doWorks() throws Exception {\r
+                               \r
                                StWin.appendMessage(MSGID+"予約を更新します:"+newRsv.getTitle());\r
-                               //likeRsvRecorder.setProgressArea(StWin);\r
-                               if (vals.selectedLikeRsv.getRec().UpdateRdEntry(vals.selectedLikeRsv.getRsv(), newRsv)) {\r
+                               \r
+                               if ( vals.selectedLikeRsv.getRec().UpdateRdEntry(vals.selectedLikeRsv.getRsv(), newRsv) ) {\r
                                        \r
                                        // 成功したよ\r
                                        MWin.appendMessage(MSGID+"正常に更新できました:"+vals.selectedLikeRsv.getRsv().getTitle()+"("+vals.selectedLikeRsv.getRsv().getCh_name()+")");\r
+                                       \r
                                        doneReserve = true;\r
                                        \r
                                        // カレンダーを更新する\r
                                        if ( vals.selectedLikeRsv.getRec().getUseCalendar() ) {\r
-                                               for ( HDDRecorder calendar : recorders ) {\r
-                                                       if (calendar.getType() == RecType.CALENDAR) {\r
-                                                               StWin.appendMessage(MSGID+"カレンダーの予約情報を更新します");\r
-                                                               //calendar.setProgressArea(StWin);\r
-                                                               if ( ! calendar.UpdateRdEntry(vals.selectedLikeRsv.getRsv(), (jCheckBox_Exec.isSelected())?(newRsv):(null))) {\r
-                                                                       MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
-                                                                       ringBeep();\r
-                                                               }\r
+                                               for ( HDDRecorder calendar : recorders.findInstance(RecType.CALENDAR) ) {\r
+                                                       \r
+                                                       StWin.appendMessage(MSGID+"カレンダーの予約情報を更新します");\r
+                                                       \r
+                                                       if ( ! calendar.UpdateRdEntry(vals.selectedLikeRsv.getRsv(), (jCheckBox_Exec.isSelected())?(newRsv):(null))) {\r
+                                                               MWin.appendError(ERRID+"[カレンダー] "+calendar.getErrmsg());\r
+                                                               ringBeep();\r
                                                        }\r
                                                }\r
                                        }\r
@@ -563,7 +566,7 @@ abstract class AbsReserveDialog extends JDialog {
                                else {\r
                                        MWin.appendError(ERRID+"更新に失敗しました:"+vals.selectedLikeRsv.getRsv().getTitle()+"("+vals.selectedLikeRsv.getRsv().getCh_name()+")");\r
                                }\r
-                               //\r
+                               \r
                                if ( ! vals.selectedLikeRsv.getRec().getErrmsg().equals("")) {\r
                                        MWin.appendMessage(MSGID+"[追加情報] "+vals.selectedLikeRsv.getRec().getErrmsg());\r
                                        ringBeep();\r
@@ -586,6 +589,7 @@ abstract class AbsReserveDialog extends JDialog {
                dispose();\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * ダイアログオープン\r
         ******************************************************************************/\r
@@ -595,27 +599,24 @@ abstract class AbsReserveDialog extends JDialog {
         * ※これがあるので、各openでは vals != null チェックの必要がある\r
         */\r
        public void setOnlyUpdateExec(boolean b) {\r
+               \r
                if (vals == null) vals = new Vals();\r
+               \r
                vals.isUpdateOnlyExec = true;\r
                jCheckBox_Exec.setSelected(b);\r
        }\r
        \r
        /**\r
-        *  é¡\9eä¼¼äº\88ç´\84æ\8a½å\87ºæ\9d¡ä»¶ã\81\82ã\82\8aオープン\r
+        *  é¡\9eä¼¼äº\88ç´\84æ\8a½å\87ºæ\9d¡ä»¶ã\81ªã\81\97オープン\r
         */\r
-       public boolean open(ProgDetailList tvd, String keywordVal, int thresholdVal) {\r
-               if (thresholdVal > 0) {\r
-                       if (vals == null) vals = new Vals();\r
-                       vals.keyword = keywordVal;\r
-                       vals.threshold = thresholdVal;\r
-               }\r
-               return open(tvd);\r
+       public boolean open(ProgDetailList tvd) {\r
+               return open(tvd,null,0);\r
        }\r
        \r
        /**\r
-        *  é¡\9eä¼¼äº\88ç´\84æ\8a½å\87ºæ\9d¡ä»¶ã\81ªã\81\97オープン\r
+        *  é¡\9eä¼¼äº\88ç´\84æ\8a½å\87ºæ\9d¡ä»¶ã\81\82ã\82\8aオープン\r
         */\r
-       public boolean open(ProgDetailList tvd) {\r
+       public boolean open(ProgDetailList tvd, String keywordVal, int thresholdVal) {\r
                \r
                if (recorders.size() == 0) {\r
                        return false;   // レコーダがひとつもないのはやばい\r
@@ -624,22 +625,73 @@ abstract class AbsReserveDialog extends JDialog {
                        return false;   // これは「番組情報がありません」だろう\r
                }\r
                \r
-               // 隠しパラメータ\r
+               // 初期パラメータの保存場所\r
                if (vals == null) vals = new Vals();\r
+               \r
+               // 番組ID取得ボタン\r
+               getEventIdOnOpen(tvd);\r
+               setGetEventIdButton(tvd.progid,true);\r
+               \r
+               // 選択中のレコーダ\r
+               String myself = getSelectedRecorderId();                                // ツールバーで選択されているのはどれかな?\r
+               HDDRecorder myrec = getSelectedRecorderList().get(0);   // 先頭を選んでおけばおけ\r
+               \r
+               // 隠しパラメータ\r
                vals.hide_tvd = tvd;\r
                vals.hide_content_id = tvd.progid;\r
                vals.hide_startdatetime = tvd.startDateTime;\r
                vals.hide_atreservedlist = false;\r
                \r
-               // 番組ID取得ボタン\r
-               getEventIdOnOpen(tvd);\r
-               setGetEventIdButton(vals.hide_content_id,true);\r
+               // 類似予約抽出条件\r
+               if ( thresholdVal > 0 ) {\r
+                       vals.keyword = keywordVal;\r
+                       vals.threshold = thresholdVal;\r
+               }\r
 \r
-               return _open(null, null);\r
+               // 類似予約情報\r
+               ReserveList myrsv = null;\r
+               vals.likeRsvList = findLikeReserves(vals.hide_tvd, vals.keyword, vals.threshold);\r
+               if ( env.getGivePriorityToReserved() ) {\r
+                       // 類似予約が優先される場合\r
+                       if ( vals.likeRsvList.size() > 0 ) {\r
+                               LikeReserveItem lr = vals.likeRsvList.getClosest(myself);\r
+                               if ( lr != null ) {\r
+                                       // 選択中のレコーダの類似予約があれば\r
+                                       myrec = lr.getRec();\r
+                                       myrsv = lr.getRsv();\r
+                                       vals.selectedLikeRsv = lr;\r
+                                       \r
+                                       if ( myself == HDDRecorder.SELECTED_ALL || myself == HDDRecorder.SELECTED_PICKUP ) {\r
+                                               // "すべて" or "ピックアップのみ"\r
+                                               if (debug) System.out.println(DBGID+"選択中のレコーダがないので先頭の類似予約を使う: "+myself);\r
+                                       }\r
+                               }\r
+                               else {\r
+                                       // 類似予約があってもコンボボックスで選択したレコーダのものがない場合は無視\r
+                                       if (debug) System.out.println(DBGID+"類似予約に選択中のレコーダのものはなかった: "+myself);\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               // ジャンル別AV設定の確認\r
+               AVs myavs = null;\r
+               if ( myrsv == null ) {\r
+                       // 類似予約がないか、あっても優先されない場合\r
+                       myavs = getSelectedAVs(vals.hide_tvd.genre, vals.hide_tvd.center, myrec.getRecorderId());\r
+               }\r
+               else {\r
+                       MWin.appendMessage(MSGID+"画質・音質は類似予約の設定が継承されます");\r
+               }\r
+               \r
+               // 予約情報\r
+               vals.hide_default_recorder = myrec;\r
+               \r
+               return _open(myself, myrec, myrsv, myavs);\r
+                               \r
        }\r
        \r
        /**\r
-        *  本体予約一覧からのオープン、または予約ON/OFFメニュー\r
+        * 本体予約一覧からのオープン、または予約ON/OFFメニュー\r
         */\r
        public boolean open(String myself, String rsvId) {\r
                \r
@@ -654,9 +706,13 @@ abstract class AbsReserveDialog extends JDialog {
                        return false;   // ここに来たらバグ\r
                }\r
 \r
+               // 初期パラメータの保存場所\r
+               if (vals == null) vals = new Vals();\r
+               \r
                // 番組ID取得ボタンを無効にする\r
                setGetEventIdButton(null,false);\r
 \r
+               // 予約情報から番組情報を組み立てる\r
                ProgDetailList tvd = new ProgDetailList();\r
                CommonUtils.getNextDate(myrsv);\r
                tvd.center = myrsv.getCh_name();\r
@@ -669,95 +725,33 @@ abstract class AbsReserveDialog extends JDialog {
                tvd.genre = ProgGenre.get(myrsv.getRec_genre());\r
                tvd.subgenre = ProgSubgenre.get(tvd.genre,myrsv.getRec_subgenre());\r
                \r
+               // 予約情報から類似予約情報を組み立てる\r
+               LikeReserveItem likersv = new LikeReserveItem(myrec,myrsv,0);\r
+               \r
                // 隠しパラメータ\r
-               if (vals == null) vals = new Vals();\r
                vals.hide_tvd = tvd;\r
                vals.hide_content_id = null;\r
                vals.hide_startdatetime = null; // 予約一覧からは番組IDの取得はできないので開始日時は保存しない\r
                vals.hide_atreservedlist = true;\r
 \r
-               return _open(myrec, myrsv);\r
+               // 予約情報\r
+               vals.selectedLikeRsv = likersv; \r
+               vals.likeRsvList = new LikeReserveList();\r
+               vals.likeRsvList.add(vals.selectedLikeRsv);\r
+\r
+               vals.hide_default_recorder = myrec;\r
+\r
+               return _open(myself, myrec, myrsv, null);\r
        }\r
        \r
        /**\r
         * ダイアログオープン(共通処理)\r
         */\r
-       private boolean _open(HDDRecorder rsvdrec, ReserveList rsvdrsv) {\r
+       private boolean _open(String myself, HDDRecorder myrec, ReserveList myrsv, AVs myavs) {\r
                \r
                // 予約は行われてないよー\r
                doneReserve = false;\r
                \r
-               String myself = null;\r
-               HDDRecorder myrec = null;\r
-               ReserveList myrsv = null;\r
-               AVs myavs = null;\r
-               if ( rsvdrec == null ) {\r
-                       // レコーダの初期値の確認\r
-                       myself = getSelectedRecorderOnToolbar();                // ツールバーで選択されているのはどれかな?\r
-                       if ( myself != null && myself.length() > 0 ) {\r
-                               myrec = recorders.findInstance(myself).get(0);          // "すべて"と"ピックアップ"以外\r
-                       }\r
-                       else {\r
-                               myrec = recorders.get(0);                                               // "すべて"と"ピックアップ"なら先頭を選んでおけばいい\r
-                       }\r
-                       \r
-                       // リセット用データ収集(1)\r
-                       {\r
-                               vals.hide_default_recorder = myrec;\r
-                       }\r
-                       \r
-                       // 類似予約の確認\r
-                       searchLikeRsv(vals.likeRsvList, vals.hide_tvd, vals.keyword, vals.threshold);\r
-                       \r
-                       if ( env.getGivePriorityToReserved() && vals.likeRsvList.size() > 0 ) {\r
-                               // 類似予約が有効かつ存在しているならば\r
-                               for ( int i=0; i<vals.likeRsvList.size(); i++ ) {\r
-                                       HDDRecorder rec = vals.likeRsvList.getRec(i);\r
-                                       if ( rec.isMyself(myself) ) {\r
-                                               myrec = rec;    // 類似予約の中にコンボボックスと一致するものがあったわ\r
-                                               myself = myrec.Myself();\r
-                                               myrsv = vals.likeRsvList.getRsv(i);\r
-                                               vals.selectedLikeRsv = new LikeReserveItem(myrec, myrsv);\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               if ( myrsv == null && myself != null && myself.length() != 0 ) {\r
-                                       // 類似予約があってもコンボボックスで選択したレコーダのものがない場合は無視\r
-                                       if (debug) System.out.println(DBGID+"類似予約に選択中のレコーダのものはなかった: "+myself);\r
-                               }\r
-                               else {\r
-                                       if ( myrsv == null ) {\r
-                                               // "すべて"と"ピックアップのみ"なら選択できるものはないね\r
-                                               myrec = vals.likeRsvList.getRec(0);\r
-                                               myself = myrec.Myself();\r
-                                               myrsv = vals.likeRsvList.getRsv(0);\r
-                                               vals.selectedLikeRsv = new LikeReserveItem(myrec, myrsv);\r
-                                               if (debug) System.out.println(DBGID+"選択中のレコーダがないので先頭の類似予約を使う: "+myself);\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       // ジャンル別AV設定の確認\r
-                       if ( myrsv == null || ! env.getGivePriorityToReserved() ) {\r
-                               myavs = getSelectedAVs(vals.hide_tvd.genre, vals.hide_tvd.center, myrec.getRecorderId());\r
-                       }\r
-                       else {\r
-                               MWin.appendMessage(MSGID+"画質・音質は類似予約の設定が継承されます");\r
-                       }\r
-               }\r
-               else {\r
-                       myrec = rsvdrec;\r
-                       myrsv = rsvdrsv;\r
-                       myself = myrec.Myself();\r
-                       vals.selectedLikeRsv = new LikeReserveItem(myrec,myrsv);\r
-                       vals.likeRsvList.add(vals.selectedLikeRsv);\r
-                       \r
-                       // リセット用データ収集(1)\r
-                       {\r
-                               vals.hide_default_recorder = myrec;\r
-                       }\r
-               }\r
-               \r
                if ( vals.hide_content_id == null || ! ContentIdEDCB.isValid(vals.hide_content_id) ) {\r
                        if ( myrsv != null && ContentIdEDCB.isValid(myrsv.getContentId()) ) {\r
                                vals.hide_content_id = myrsv.getContentId();\r
@@ -783,16 +777,19 @@ abstract class AbsReserveDialog extends JDialog {
                // リスナーを全部戻す\r
                setEnabledSelectionListeners(true);\r
                \r
+               // 選択行が表示されるようにする\r
+               CommonSwingUtils.setSelectedRowShown(jtbl_likersv);\r
+               \r
                // リセット用データ収集\r
                {\r
                        vals.isExtended = jCheckBox_spoex_extend.isSelected();\r
                        vals.isClipped = jCheckBox_OverlapDown2.isSelected();\r
                        vals.byDateIni = (String) jComboBox_date.getItemAt(0);\r
                        vals.byWeeklyIni = (String) jComboBox_date.getItemAt(1);\r
-                       jTextField_Xahh.setText(jTextField_ahh.getText());\r
-                       jTextField_Xamm.setText(jTextField_amm.getText());\r
-                       jTextField_Xzhh.setText(jTextField_zhh.getText());\r
-                       jTextField_Xzmm.setText(jTextField_zmm.getText());\r
+                       vals.ahh = jTextField_ahh.getText();\r
+                       vals.amm = jTextField_amm.getText();\r
+                       vals.zhh = jTextField_zhh.getText();\r
+                       vals.zmm = jTextField_zmm.getText();\r
                }\r
                \r
                return(true);\r
@@ -995,7 +992,7 @@ abstract class AbsReserveDialog extends JDialog {
                                if ( vals.likeRsvList.size() > 0 ) {\r
                                        //jButton_update.setForeground(Color.RED);\r
                                        //jButton_update.setEnabled(true);\r
-                                       likersvtable.setEnabled(true);\r
+                                       jtbl_likersv.setEnabled(true);\r
                                        \r
                                        // 類似予約中の一番近い予約を探す\r
                                        long score = 86400;\r
@@ -1013,24 +1010,24 @@ abstract class AbsReserveDialog extends JDialog {
 \r
                                }\r
                                else {\r
-                                       likersvtable.setEnabled(false);\r
+                                       jtbl_likersv.setEnabled(false);\r
                                }\r
                        }\r
                        else {\r
                                // 本体予約一覧の場合は1個だけ追加すればよい\r
                                jButton_record.setForeground(Color.GRAY);\r
                                jButton_record.setEnabled(false);\r
-                               likersvtable.setEnabled(false);\r
+                               jtbl_likersv.setEnabled(false);\r
                                selectedrow = 0;\r
                                //vals.likeRsvList.add(new LikeReserveItem(myrec,myrsv));\r
                        }\r
 \r
-                       ((DefaultTableModel)likersvtable.getModel()).fireTableDataChanged();\r
-                       ((DefaultTableModel)likersvrowheader.getModel()).fireTableDataChanged();\r
+                       ((DefaultTableModel)jtbl_likersv.getModel()).fireTableDataChanged();\r
+                       ((DefaultTableModel)jrhdr_likersv.getModel()).fireTableDataChanged();\r
                        \r
-                       likersvtable.setRowSelectionInterval(selectedrow,selectedrow);\r
+                       jtbl_likersv.setRowSelectionInterval(selectedrow,selectedrow);\r
 \r
-                       setEnabledUpdateButton(likersvtable.getSelectedRow());\r
+                       setEnabledUpdateButton(jtbl_likersv.getSelectedRow());\r
                }\r
        }\r
        \r
@@ -1134,7 +1131,20 @@ abstract class AbsReserveDialog extends JDialog {
                        jCheckBox_Exec.setSelected(myrsv.getExec());\r
                        jCheckBox_Exec.setForeground((myrsv.getExec())?(Color.BLACK):(Color.RED));\r
                }\r
-\r
+               \r
+               // タイトル\r
+               if ( myrsv == null ) {\r
+                       jComboBox_title.setSelectedIndex(0);\r
+               }\r
+               else {\r
+                       for ( int i=0; i<jComboBox_title.getItemCount(); i++ ) {\r
+                               if ( myrsv.getTitle().equals(jComboBox_title.getItemAt(i)) ) {\r
+                                       jComboBox_title.setSelectedIndex(i);\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               \r
                // タイトル自動補完\r
                jCheckBox_Autocomplete.setEnabled(myrec.isAutocompleteSupported());\r
                if ( myrec.isAutocompleteSupported() ) {\r
@@ -1275,7 +1285,7 @@ abstract class AbsReserveDialog extends JDialog {
                        jComboBox_date.setSelectedIndex(dateid);\r
                }\r
        }\r
-       \r
+\r
        private void setSelectedAVItems(String myrecid, ReserveList myrsv, AVs myavs) {\r
                if ( myrsv != null ) {\r
                        selCBX(jCBXPanel_videorate, myrsv.getRec_mode());\r
@@ -1406,6 +1416,7 @@ abstract class AbsReserveDialog extends JDialog {
                val = recorder.getLabel_Autodel();\r
                jCBXPanel_autodel.setText((val!=null)?(val):("自動削除"));\r
        }\r
+       \r
 \r
        /*******************************************************************************\r
         * 共通部品的な\r
@@ -1440,14 +1451,14 @@ abstract class AbsReserveDialog extends JDialog {
                jCBXPanel_videorate.removeItemListener(il_videorateChanged);\r
                jCBXPanel_recorder.removeItemListener(il_recorderChanged);\r
                jCBXPanel_genre.removeItemListener(il_genreChanged);\r
-               likersvtable.removeMouseListener(ml_likelistSelected);\r
+               jtbl_likersv.removeMouseListener(ml_likelistSelected);\r
                if ( b ) {\r
                        // 必要なら追加する\r
                        jCBXPanel_encoder.addItemListener(il_encoderChanged);\r
                        jCBXPanel_videorate.addItemListener(il_videorateChanged);\r
                        jCBXPanel_recorder.addItemListener(il_recorderChanged);\r
                        jCBXPanel_genre.addItemListener(il_genreChanged);\r
-                       likersvtable.addMouseListener(ml_likelistSelected);\r
+                       jtbl_likersv.addMouseListener(ml_likelistSelected);\r
                }\r
        }\r
        \r
@@ -1459,6 +1470,7 @@ abstract class AbsReserveDialog extends JDialog {
                //likersvtable.removeAllItems();\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * ネットから番組IDを取得する\r
         ******************************************************************************/\r
@@ -1503,6 +1515,7 @@ abstract class AbsReserveDialog extends JDialog {
                return myavs;\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * ネットから番組IDを取得する\r
         ******************************************************************************/\r
@@ -1684,6 +1697,7 @@ abstract class AbsReserveDialog extends JDialog {
         * @param enabled 番組IDの取得ができないシチュエーション(予約一覧から開くとか)では取得ボタンをfalseに。\r
         */\r
        private boolean setGetEventIdButton(String cId, boolean enabled) {\r
+               \r
                Integer evid = null;\r
                if ( ContentIdEDCB.decodeContentId(cId) ) {\r
                        evid = ContentIdEDCB.getEvId();\r
@@ -1715,6 +1729,7 @@ abstract class AbsReserveDialog extends JDialog {
                        return true;\r
                }\r
        }\r
+       \r
 \r
        /*******************************************************************************\r
         * 自動エンコーダ選択と裏番組抽出\r
@@ -1863,6 +1878,7 @@ abstract class AbsReserveDialog extends JDialog {
                }\r
        }\r
        \r
+       \r
        /*******************************************************************************\r
         * 放送波種別によって利用できるエンコーダを絞り込んでみる\r
         ******************************************************************************/\r
@@ -2020,6 +2036,40 @@ abstract class AbsReserveDialog extends JDialog {
        }\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
+       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
@@ -2088,7 +2138,7 @@ abstract class AbsReserveDialog extends JDialog {
        private final MouseListener ml_likelistSelected = new MouseAdapter() {\r
                @Override\r
                public void mouseClicked(MouseEvent e) {\r
-                       if ( ! likersvtable.isEnabled() ) {\r
+                       if ( ! jtbl_likersv.isEnabled() ) {\r
                                return;\r
                        }\r
                        if (SwingUtilities.isLeftMouseButton(e)) {\r
@@ -2114,7 +2164,7 @@ abstract class AbsReserveDialog extends JDialog {
                if ( changed == ChangedSelector.LIKELIST ) {\r
                        // 類似予約の選択の場合\r
                        \r
-                       int row = likersvtable.getSelectedRow();\r
+                       int row = jtbl_likersv.getSelectedRow();\r
                        \r
                        if ( row != LIKERSVTABLE_NOTSELECTED ) {\r
                                LikeReserveItem ll = (LikeReserveItem) vals.likeRsvList.get(row);\r
@@ -2141,6 +2191,7 @@ abstract class AbsReserveDialog extends JDialog {
                                }\r
                        }\r
                        else {\r
+                               // "(類似予約選択なし)"\r
                                myrec = vals.hide_default_recorder;\r
                                myenc = null;\r
                                myrsv = null;\r
@@ -2180,7 +2231,7 @@ abstract class AbsReserveDialog extends JDialog {
                                        HDDRecorder rec = vals.likeRsvList.getRec(i);\r
                                        if ( rec.isMyself(myrec.Myself()) ) {\r
                                                myrsv = vals.likeRsvList.getRsv(i);\r
-                                               vals.selectedLikeRsv = new LikeReserveItem(rec, myrsv);\r
+                                               vals.selectedLikeRsv = new LikeReserveItem(rec, myrsv, 0);\r
                                                break;\r
                                        }\r
                                }\r
@@ -2213,11 +2264,6 @@ abstract class AbsReserveDialog extends JDialog {
                \r
                setLabels(myrec);\r
                \r
-               if ( changed != ChangedSelector.LIKELIST ) {\r
-                       // ********\r
-                       //jComboBox_likelist.setSelectedIndex(vals.likeRsvList.indexOf(myrsv));\r
-               }\r
-               \r
                setEnabledSelectionListeners(true);\r
        }\r
        \r
@@ -2654,10 +2700,10 @@ abstract class AbsReserveDialog extends JDialog {
                        jComboBox_date.removeItemAt(1);\r
                        jComboBox_date.insertItemAt(vals.byWeeklyIni, 1);\r
                        jComboBox_date.setSelectedIndex(n);\r
-                       jTextField_ahh.setText(jTextField_Xahh.getText());\r
-                       jTextField_amm.setText(jTextField_Xamm.getText());\r
-                       jTextField_zhh.setText(jTextField_Xzhh.getText());\r
-                       jTextField_zmm.setText(jTextField_Xzmm.getText());\r
+                       jTextField_ahh.setText(vals.ahh);\r
+                       jTextField_amm.setText(vals.amm);\r
+                       jTextField_zhh.setText(vals.zhh);\r
+                       jTextField_zmm.setText(vals.zmm);\r
                }\r
        };\r
 \r
@@ -2738,7 +2784,7 @@ abstract class AbsReserveDialog extends JDialog {
                                CommonSwingUtils.putComponentOn(jPane_title, getJComboBox_date(),               DATE_WIDTH,             PARTS_HEIGHT,   hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
                                \r
                                hmx += DATE_WIDTH+SEP_WIDTH;\r
-                               CommonSwingUtils.putComponentOn(jPane_title, getJLabel_ahh("開始時刻"),     75,     PARTS_HEIGHT,   hmx, y);\r
+                               CommonSwingUtils.putComponentOn(jPane_title, getJButton_aTime("開始時刻"),  75,     PARTS_HEIGHT,   hmx, y);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJTextField_ahh(),               40,     PARTS_HEIGHT,   hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJLabel_asep(":"),               10,     PARTS_HEIGHT,   hmx+=40, y+PARTS_HEIGHT);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJTextField_amm(),               40,     PARTS_HEIGHT,   hmx+=10, y+PARTS_HEIGHT);\r
@@ -2746,7 +2792,7 @@ abstract class AbsReserveDialog extends JDialog {
                                CommonSwingUtils.putComponentOn(jPane_title, getJButton_amm_down(),             20,     12,                             hmx, y+PARTS_HEIGHT+13);\r
                                \r
                                hmx += 20+SEP_WIDTH_NARROW;\r
-                               CommonSwingUtils.putComponentOn(jPane_title, getJLabel_zhh("終了時刻"),     75,     PARTS_HEIGHT,   hmx, y);\r
+                               CommonSwingUtils.putComponentOn(jPane_title, getJButton_zTime("終了時刻"),  75,     PARTS_HEIGHT,   hmx, y);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJTextField_zhh(),               40,     PARTS_HEIGHT,   hmx+=SEP_WIDTH_NARROW, y+PARTS_HEIGHT);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJLabel_zsep(":"),               10,     PARTS_HEIGHT,   hmx+=40, y+PARTS_HEIGHT);\r
                                CommonSwingUtils.putComponentOn(jPane_title, getJTextField_zmm(),               40,     PARTS_HEIGHT,   hmx+=10, y+PARTS_HEIGHT);\r
@@ -2762,23 +2808,6 @@ abstract class AbsReserveDialog extends JDialog {
                                jCheckBox_Autocomplete.setSelected(env.getUseAutocomplete());\r
                        }\r
                        \r
-                       getJTextField_Xahh();\r
-                       getJTextField_Xamm();\r
-                       getJTextField_Xzhh();\r
-                       getJTextField_Xzmm();\r
-                       \r
-                       /*\r
-                       y += PARTS_HEIGHT+2;\r
-                       hmx = 210;\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJTextField_Xahh(), 40, 21, hmx, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJLabel_Xasep(":"), 10, 21, hmx+=40, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJTextField_Xamm(), 40, 21, hmx+=10, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJTextField_Xzhh(), 40, 21, hmx+=70, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJLabel_Xzsep(":"), 10, 21, hmx+=40, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJTextField_Xzmm(), 40, 21, hmx+=10, y+2);\r
-                       CommonSwingUtils.putComponentOn(jPane_title, getJButton_Xreset(""), 20, 15, hmx+=42, y+5);\r
-                       */\r
-\r
                        y += PARTS_HEIGHT*2+SEP_WIDTH_NARROW;\r
 \r
                        CommonSwingUtils.putComponentOn(jPane_title, getJLabel_detail("番組詳細"), 100, PARTS_HEIGHT, x, y);\r
@@ -2822,15 +2851,22 @@ abstract class AbsReserveDialog extends JDialog {
                        int y = 0;\r
                        int x = SEP_WIDTH_NARROW;\r
                        \r
-                       CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_recorder = new JComboBoxPanel("レコーダ",RECORDER_WIDTH,RECORDER_WIDTH),        RECORDER_WIDTH+5,       COMBO_HEIGHT, x, y);\r
-                       CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_encoder = new JComboBoxPanel("エンコーダ",ENCODER_WIDTH,ENCODER_WIDTH),                ENCODER_WIDTH+5,        COMBO_HEIGHT, x+=RECORDER_WIDTH+5+SEP_WIDTH, y);\r
+                       CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_recorder = new JComboBoxPanel("レコーダ",RECORDER_WIDTH,RECORDER_WIDTH),        RECORDER_WIDTH+5,       COMBO_HEIGHT+SEP_HEIGHT, x, y);\r
+                       CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_encoder = new JComboBoxPanel("エンコーダ",ENCODER_WIDTH,ENCODER_WIDTH),                ENCODER_WIDTH+5,        COMBO_HEIGHT+SEP_HEIGHT, x+=RECORDER_WIDTH+5+SEP_WIDTH, y);\r
                        CommonSwingUtils.putComponentOn(jPane_recsetting, getJLabel_encoderemptywarn(""), LABEL_WIDTH, PARTS_HEIGHT, x+=ENCODER_WIDTH+5+SEP_WIDTH+5, y+PARTS_HEIGHT);\r
+                       \r
+                       Font fo = jCBXPanel_recorder.getJComboBox().getFont();\r
+                       Font fn = fo.deriveFont(fo.getStyle()|Font.BOLD);\r
+                       jCBXPanel_recorder.getJComboBox().setFont(fn);\r
+                       jCBXPanel_recorder.getJComboBox().setForeground(Color.BLUE);\r
+                       jCBXPanel_encoder.getJComboBox().setFont(fn);\r
+                       jCBXPanel_encoder.getJComboBox().setForeground(Color.BLUE);\r
 \r
                        // ポップアップした時に追加される幅\r
                        jCBXPanel_recorder.addPopupWidth(100);\r
                        jCBXPanel_encoder.addPopupWidth(100);\r
 \r
-                       y += COMBO_HEIGHT+SEP_HEIGHT*2;\r
+                       y += (COMBO_HEIGHT+SEP_HEIGHT)+SEP_HEIGHT;\r
                        x = SEP_WIDTH_NARROW;\r
                        CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_genre = new JComboBoxPanel("ジャンル",110,150),                         COMBO_WIDTH_WIDE,       COMBO_HEIGHT, x, y);\r
                        CommonSwingUtils.putComponentOn(jPane_recsetting, jCBXPanel_subgenre = new JComboBoxPanel("サブジャンル",110,150),                        COMBO_WIDTH_WIDE,       COMBO_HEIGHT, x+=(COMBO_WIDTH_WIDE+SEP_WIDTH), y);\r
@@ -2895,7 +2931,7 @@ abstract class AbsReserveDialog extends JDialog {
                if (jPane_likersv == null ) {\r
                        jPane_likersv = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);\r
                        //jPane_likersv.setBorder(new LineBorder(Color.BLACK, 1));\r
-                       jPane_likersv.setRowHeaderView(likersvrowheader = new LikeRsvRowHeader());\r
+                       jPane_likersv.setRowHeaderView(jrhdr_likersv = new LikeRsvRowHeader());\r
                        jPane_likersv.setViewportView(getLikeRsvTable());\r
                        \r
                        Dimension dh = new Dimension(LRT_HEADER_WIDTH,0);\r
@@ -3036,22 +3072,24 @@ abstract class AbsReserveDialog extends JDialog {
                return(jLabel_encoderemptywarn);\r
        }\r
 \r
-       private JLabel getJLabel_ahh(String s)\r
-       {\r
-               if (jLabel_ahh == null) {\r
-                       jLabel_ahh = new JLabel();\r
-                       jLabel_ahh.setText(s);\r
+       private JButton getJButton_aTime(String s) {\r
+               if (jButton_aTime == null) {\r
+                       jButton_aTime = new JButton();\r
+                       jButton_aTime.setText(s);\r
+                       \r
+                       jButton_aTime.addMouseListener(ml_resetStartEnd);\r
                }\r
-               return(jLabel_ahh);\r
+               return(jButton_aTime);\r
        }\r
        \r
-       private JLabel getJLabel_zhh(String s)\r
-       {\r
-               if (jLabel_zhh == null) {\r
-                       jLabel_zhh = new JLabel();\r
-                       jLabel_zhh.setText(s);\r
+       private JButton getJButton_zTime(String s) {\r
+               if (jButton_zTime == null) {\r
+                       jButton_zTime = new JButton();\r
+                       jButton_zTime.setText(s);\r
+                       \r
+                       jButton_zTime.addMouseListener(ml_resetStartEnd);\r
                }\r
-               return(jLabel_zhh);\r
+               return(jButton_zTime);\r
        }\r
 \r
        private JComboBox getJComboBox_title() {\r
@@ -3095,34 +3133,6 @@ abstract class AbsReserveDialog extends JDialog {
        }\r
        \r
        // 開始時刻\r
-       private JTextField getJTextField_Xahh() {\r
-               if (jTextField_Xahh == null) {\r
-                       jTextField_Xahh = new JTextField();\r
-                       jTextField_Xahh.setEditable(false);\r
-                       jTextField_Xahh.setForeground(Color.PINK);\r
-                       jTextField_Xahh.setBorder(null);\r
-                       jTextField_Xahh.setHorizontalAlignment(JTextField.CENTER);\r
-               }\r
-               return jTextField_Xahh;\r
-       }\r
-       private JTextField getJTextField_Xamm() {\r
-               if (jTextField_Xamm == null) {\r
-                       jTextField_Xamm = new JTextField();\r
-                       jTextField_Xamm.setEditable(false);\r
-                       jTextField_Xamm.setForeground(Color.PINK);\r
-                       jTextField_Xamm.setBorder(null);\r
-                       jTextField_Xamm.setHorizontalAlignment(JTextField.CENTER);\r
-               }\r
-               return jTextField_Xamm;\r
-       }\r
-       private JLabel getJLabel_Xasep(String s)\r
-       {\r
-               if (jLabel_Xasep == null) {\r
-                       jLabel_Xasep = new JLabel(s);\r
-               }\r
-               return(jLabel_Xasep);\r
-       }\r
-       // 開始時刻\r
        private JTextField getJTextField_ahh() {\r
                if (jTextField_ahh == null) {\r
                        jTextField_ahh = new JTextField();\r
@@ -3163,34 +3173,6 @@ abstract class AbsReserveDialog extends JDialog {
        }\r
        \r
        //\r
-       private JTextField getJTextField_Xzhh() {\r
-               if (jTextField_Xzhh == null) {\r
-                       jTextField_Xzhh = new JTextField();\r
-                       jTextField_Xzhh.setEditable(false);\r
-                       jTextField_Xzhh.setForeground(Color.PINK);\r
-                       jTextField_Xzhh.setBorder(null);\r
-                       jTextField_Xzhh.setHorizontalAlignment(JTextField.CENTER);\r
-               }\r
-               return jTextField_Xzhh;\r
-       }\r
-       private JTextField getJTextField_Xzmm() {\r
-               if (jTextField_Xzmm == null) {\r
-                       jTextField_Xzmm = new JTextField();\r
-                       jTextField_Xzmm.setEditable(false);\r
-                       jTextField_Xzmm.setForeground(Color.PINK);\r
-                       jTextField_Xzmm.setBorder(null);\r
-                       jTextField_Xzmm.setHorizontalAlignment(JTextField.CENTER);\r
-               }\r
-               return jTextField_Xzmm;\r
-       }\r
-       private JLabel getJLabel_Xzsep(String s)\r
-       {\r
-               if (jLabel_Xzsep == null) {\r
-                       jLabel_Xzsep = new JLabel(s);\r
-               }\r
-               return(jLabel_Xzsep);\r
-       }\r
-       //\r
        private JTextField getJTextField_zhh() {\r
                if (jTextField_zhh == null) {\r
                        jTextField_zhh = new JTextField();\r
@@ -3230,18 +3212,8 @@ abstract class AbsReserveDialog extends JDialog {
                return jButton_zmm_down;\r
        }\r
        \r
-       //\r
-       private JButton getJButton_Xreset(String s) {\r
-               if (jButton_Xreset == null) {\r
-                       jButton_Xreset = new JButton(s);\r
-                       //\r
-                       jButton_Xreset.addMouseListener(ml_resetStartEnd);\r
-               }\r
-               return(jButton_Xreset);\r
-       }\r
-       \r
        private LikeRsvTable getLikeRsvTable() {\r
-               if (likersvtable == null) {\r
+               if (jtbl_likersv == null) {\r
                        \r
                        // カラム名の初期化\r
                        ArrayList<String> cola = new ArrayList<String>();\r
@@ -3255,11 +3227,11 @@ abstract class AbsReserveDialog extends JDialog {
                        // テーブルの基本的な設定\r
                        DefaultTableModel model = new DefaultTableModel(colname, 0);\r
                        \r
-                       likersvtable = new LikeRsvTable(model);\r
-                       likersvtable.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
+                       jtbl_likersv = new LikeRsvTable(model);\r
+                       jtbl_likersv.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
                        \r
                        // 各カラムの幅を設定する\r
-                       DefaultTableColumnModel columnModel = (DefaultTableColumnModel)likersvtable.getColumnModel();\r
+                       DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jtbl_likersv.getColumnModel();\r
                        TableColumn column = null;\r
                        for ( LikeRsvColumn lc : LikeRsvColumn.values() ) {\r
                                if ( lc.getIniWidth() < 0 ) {\r
@@ -3270,7 +3242,7 @@ abstract class AbsReserveDialog extends JDialog {
                        }\r
                }\r
                \r
-               return likersvtable;\r
+               return jtbl_likersv;\r
        }\r
        \r
        private JButton getJButton_record(String s) {\r
index a44e055..a1cd996 100644 (file)
@@ -25,6 +25,9 @@ import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
 import javax.imageio.stream.ImageOutputStream;\r
 import javax.swing.JComponent;\r
 import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTable;\r
+import javax.swing.JViewport;\r
 import javax.swing.SpringLayout;\r
 \r
 import tainavi.Env.SnapshotFmt;\r
@@ -76,6 +79,24 @@ public class CommonSwingUtils {
        }\r
        \r
        /**\r
+        * jtableの選択行が表示可能な位置にくるようにスクロールさせる\r
+        */\r
+       public static boolean setSelectedRowShown(JTable tbl) {\r
+               \r
+               Component parent = tbl.getParent();\r
+               if ( ! (parent instanceof JViewport) ) {\r
+                       return false;\r
+               }\r
+               \r
+               int row = tbl.getSelectedRow();\r
+               JViewport viewport = (JViewport) parent;\r
+               Rectangle ra = tbl.getCellRect(row, 0, true);\r
+               Rectangle rb = viewport.getVisibleRect();\r
+               tbl.scrollRectToVisible(new Rectangle(ra.x, ra.y, (int)rb.getWidth(), (int)rb.getHeight()));\r
+               return true;\r
+       }\r
+       \r
+       /**\r
         * 謎のJTextArea\r
         */\r
        public static JTextAreaWithPopup getJta(final Component parent, int rows, int columns) {\r
index a0701e5..349df7e 100644 (file)
@@ -50,7 +50,7 @@ public class HDDRecorderList extends ArrayList<HDDRecorder> {
         * <P> 「個別指定」→本来{@link HDDRecorder}を返すべきだが、呼び出し側の処理を書きやすくするために{@link HDDRecorderList}を返す。よって、==nullではなく.size()==0で確認する。\r
         */\r
        public HDDRecorderList findInstance(String mySelf) {\r
-               if (mySelf == null || mySelf.length() == 0) {\r
+               if ( mySelf == null || mySelf == HDDRecorder.SELECTED_ALL || mySelf == HDDRecorder.SELECTED_PICKUP ) {\r
                        // 「すべて」「ピックアップのみ」→全部のインスタンスを返す\r
                        return this;\r
                }\r
@@ -65,4 +65,21 @@ public class HDDRecorderList extends ArrayList<HDDRecorder> {
                }\r
                return mylist;\r
        }\r
+\r
+       public HDDRecorderList findInstance(RecType rectype) {\r
+               if ( rectype == null ) {\r
+                       // 全部のインスタンスを返す\r
+                       return this;\r
+               }\r
+               \r
+               // 個別指定\r
+               HDDRecorderList mylist = new HDDRecorderList();\r
+               for ( HDDRecorder rec : this ) {\r
+                       if ( rec.getType() == rectype ) {\r
+                               mylist.add(rec);\r
+                               break;\r
+                       }\r
+               }\r
+               return mylist;\r
+       }\r
 }\r
index f786a1b..386cb64 100644 (file)
@@ -1,16 +1,15 @@
 package tainavi;\r
 \r
-import java.awt.Dimension;\r
 import java.awt.ItemSelectable;\r
-import java.awt.Rectangle;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ItemListener;\r
 \r
-import javax.swing.BoxLayout;\r
 import javax.swing.ComboBoxModel;\r
 import javax.swing.JComboBox;\r
 import javax.swing.JLabel;\r
 import javax.swing.JPanel;\r
+import javax.swing.SpringLayout;\r
+\r
 \r
 public class JComboBoxPanel extends JPanel implements ItemSelectable,WideComponent {\r
 \r
@@ -19,50 +18,52 @@ public class JComboBoxPanel extends JPanel implements ItemSelectable,WideCompone
        private JComboBoxWithPopup jcombobox = null;\r
        private JLabel jlabel = null;\r
        \r
-       private final int h = 25;\r
-\r
        // 旧版\r
        public JComboBoxPanel(String s, int labelWidth, int comboboxWidth) {\r
-               makeComboBoxPanel(s, labelWidth, comboboxWidth, false);\r
+               super();\r
+               makeComboBoxPanel(s, labelWidth, false);\r
        }\r
 \r
        // 新版\r
        public JComboBoxPanel(String s, int labelWidth, int comboboxWidth, boolean horizontal) {\r
-               makeComboBoxPanel(s, labelWidth, comboboxWidth,  horizontal);\r
+               super();\r
+               makeComboBoxPanel(s, labelWidth, horizontal);\r
        }\r
        \r
-       private void makeComboBoxPanel(String s, int labelWidth, int comboboxWidth, boolean horizontal) {\r
+       private void makeComboBoxPanel(String s, int labelWidth, boolean horizontal) {\r
+               \r
+               SpringLayout layout = new SpringLayout();\r
+               setLayout(layout);\r
+               \r
+               jlabel = new JLabel(s);\r
+               jcombobox = new JComboBoxWithPopup();\r
+\r
+               this.add(jlabel);\r
+               this.add(jcombobox);\r
+               \r
                if ( horizontal == true ) {\r
                        // 左・右\r
-                       this.setLayout(new BoxLayout(this,BoxLayout.LINE_AXIS));\r
+                       layout.putConstraint(SpringLayout.NORTH, jlabel, 1, SpringLayout.NORTH, this);\r
+                       layout.putConstraint(SpringLayout.WEST, jlabel, 1, SpringLayout.WEST, this);\r
+                       layout.putConstraint(SpringLayout.SOUTH, jlabel, -1, SpringLayout.SOUTH, this);\r
+                       layout.putConstraint(SpringLayout.EAST, jlabel, labelWidth, SpringLayout.WEST, this);\r
                        \r
-                       jlabel = new JLabel(s);\r
-                       Dimension d = jlabel.getPreferredSize();\r
-                       d.width = labelWidth;\r
-                       d.height = 100;\r
-                       jlabel.setMaximumSize(d);\r
-                       this.add(jlabel);\r
-                       \r
-                       jcombobox = new JComboBoxWithPopup();\r
-                       d = jcombobox.getPreferredSize();\r
-                       d.width = comboboxWidth;\r
-                       d.height = 100;\r
-                       jcombobox.setMaximumSize(d);\r
-                       this.add(jcombobox);\r
+                       layout.putConstraint(SpringLayout.NORTH, jcombobox, 1, SpringLayout.NORTH, this);\r
+                       layout.putConstraint(SpringLayout.WEST, jcombobox, 0, SpringLayout.EAST, jlabel);\r
+                       layout.putConstraint(SpringLayout.SOUTH, jcombobox, -1, SpringLayout.SOUTH, this);\r
+                       layout.putConstraint(SpringLayout.EAST, jcombobox, -1, SpringLayout.EAST, this);\r
                }\r
                else {\r
                        // 上・下\r
-                       this.setLayout(null);\r
-                       \r
-                       this.add(jlabel = new JLabel(s));\r
-                       //Dimension d1 = jlabel.getPreferredSize();\r
-                       jlabel.setBounds(new Rectangle(0,0,labelWidth,h));\r
+                       layout.putConstraint(SpringLayout.NORTH, jlabel, 1, SpringLayout.NORTH, this);\r
+                       layout.putConstraint(SpringLayout.WEST, jlabel, 1, SpringLayout.WEST, this);\r
+                       //\r
+                       layout.putConstraint(SpringLayout.EAST, jlabel, -1, SpringLayout.EAST, this);\r
                        \r
-                       this.add(jcombobox = new JComboBoxWithPopup());\r
-                       //Dimension d2 = jcombobox.getPreferredSize();\r
-                       jcombobox.setBounds(new Rectangle(5,25,comboboxWidth,h));\r
-                       \r
-                       this.setPreferredSize(new Dimension(comboboxWidth+5,h*2+5));\r
+                       layout.putConstraint(SpringLayout.NORTH, jcombobox, 1, SpringLayout.SOUTH, jlabel);\r
+                       layout.putConstraint(SpringLayout.WEST, jcombobox, 5, SpringLayout.NORTH, this);\r
+                       layout.putConstraint(SpringLayout.SOUTH, jcombobox, -1, SpringLayout.SOUTH, this);\r
+                       layout.putConstraint(SpringLayout.EAST, jcombobox, -1, SpringLayout.EAST, this);\r
                }\r
        }\r
 \r
@@ -70,6 +71,14 @@ public class JComboBoxPanel extends JPanel implements ItemSelectable,WideCompone
                this.jcombobox.removeAllItems();\r
        }\r
        \r
+       public void removeItemAt(int anIndex) {\r
+               this.jcombobox.removeItemAt(anIndex);\r
+       }\r
+       \r
+       public void insertItemAt(Object anObject, int index) {\r
+               this.jcombobox.insertItemAt(anObject, index);\r
+       }\r
+       \r
        public void addItem(Object o) {\r
                this.jcombobox.addItem(o);\r
        }\r
index d1f1d62..936da7c 100644 (file)
@@ -4,16 +4,20 @@ public class LikeReserveItem {
 \r
        private HDDRecorder rec = null;\r
        private ReserveList rsv = null;\r
+       private long dist = 0;\r
        \r
-       public LikeReserveItem(HDDRecorder rec, ReserveList rsv) {\r
+       public LikeReserveItem(HDDRecorder rec, ReserveList rsv, long dist) {\r
                this.rec = rec;\r
                this.rsv = rsv;\r
+               this.dist = dist;\r
        }\r
        \r
        public HDDRecorder getRec() { return rec; }\r
        \r
        public ReserveList getRsv() { return rsv; }\r
        \r
+       public long getDist() { return dist; }\r
+       \r
        @Override\r
        public String toString() {\r
                return rsv.getTitle()+", "+rsv.getRec_pattern()+", "+rsv.getAhh()+":"+rsv.getAmm()+", "+rec.Myself()+", "+rsv.getTuner();\r
index 0394dc2..ef87062 100644 (file)
@@ -2,12 +2,66 @@ package tainavi;
 \r
 import java.util.ArrayList;\r
 \r
+\r
 public class LikeReserveList extends ArrayList<LikeReserveItem> {\r
 \r
        private static final long serialVersionUID = 1L;\r
 \r
+\r
+       //\r
+       private LikeReserveItem closest = null;\r
+       \r
        public ReserveList getRsv(int i) { return this.get(i).getRsv(); }\r
+       public ReserveList getRsv() { return ((closest!=null)?closest.getRsv():null); }\r
        \r
        public HDDRecorder getRec(int i) { return this.get(i).getRec(); }\r
+       public HDDRecorder getRec() { return ((closest!=null)?closest.getRec():null); }\r
        \r
+       public LikeReserveItem getClosest(String myself) {\r
+               \r
+               closest = null;\r
+               \r
+               for ( LikeReserveItem lr : this ) {\r
+                       if ( (myself!=HDDRecorder.SELECTED_ALL && myself!=HDDRecorder.SELECTED_PICKUP) && ! lr.getRec().Myself().equals(myself) ) {\r
+                               // レコーダの個別指定があれば\r
+                               continue;\r
+                       }\r
+                       if ( closest == null || Math.abs(closest.getDist()) > lr.getDist() ) {\r
+                               closest = lr;\r
+                       }\r
+               }\r
+               \r
+               return closest;\r
+       }\r
+\r
+       /**\r
+        * 時刻昇順で並べる\r
+        */\r
+       @Override\r
+       public boolean add(LikeReserveItem element) {\r
+               \r
+               if ( size() < 0 ) {\r
+                       return super.add(element);\r
+               }\r
+               \r
+               for ( int i=0; i<size(); i++ ) {\r
+                       LikeReserveItem lr = get(i);\r
+                       if ( lr.getDist() > element.getDist() ) {\r
+                               super.add(i, element);\r
+                               return true;\r
+                       }\r
+               }\r
+               \r
+               return super.add(element);\r
+       }\r
+       \r
+       /**\r
+        * つかっちゃヤーン\r
+        */\r
+       @Deprecated\r
+       @Override\r
+       public void add(int index,LikeReserveItem element) {\r
+               this.add(element);\r
+       }\r
+\r
 }\r
index 0ad31b0..eab66fa 100644 (file)
@@ -63,6 +63,7 @@ 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
@@ -1199,12 +1200,9 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                 */\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
@@ -1576,9 +1574,9 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
        /**\r
         * 類似予約をさがす\r
         */\r
-       private void searchLikeRsv(LikeReserveList likeRsvList, ProgDetailList tvd, String keyword, int threshold) {\r
+       private LikeReserveList findLikeReserves(ProgDetailList tvd, String keyword, int threshold) {\r
                \r
-               likeRsvList.clear();\r
+               LikeReserveList likeRsvList = new LikeReserveList();\r
                \r
                // 曖昧検索のための初期化\r
                String keywordPop = null;\r
@@ -1597,7 +1595,6 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                // 検索範囲\r
                long rangeLikeRsv = env.getRangeLikeRsv()*3600000;\r
                \r
-               HashMap<String,Boolean> misCN = new HashMap<String, Boolean>();\r
                for ( HDDRecorder recorder : recorders ) {\r
                        \r
                        // 終了した予約を整理する\r
@@ -1606,69 +1603,94 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                        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
+                               if ( ! isLikeTitle(tvd, r, keywordPop, thresholdVal) ) {\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
+                               if ( ! isLikeChannel(tvd, r) ) {\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
+                               Long d = getLikeDist(tvd, r, rangeLikeRsv);\r
+                               if ( d == null ) {\r
                                        continue;\r
                                }\r
                                \r
-                               // 類似予約あり!\r
-                               likeRsvList.add(new LikeReserveItem(recorder, r));\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
-               return;\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
+                       // 双方向の比較を行う・正引き\r
+                       int fazScore = TraceProgram.sumScore(keywordPop, r.getTitlePop());\r
+                       if ( fazScore >= thresholdVal ) {\r
+                               return true;\r
+                       }\r
+                       else if ( ! env.getDisableFazzySearchReverse() ) {\r
+                               // 逆引き\r
+                               fazScore = TraceProgram.sumScore(r.getTitlePop(), keywordPop);\r
+                               if ( fazScore >= thresholdVal) {\r
+                                       return true;\r
+                               }\r
+                       }\r
+               }\r
+               else {\r
+                       if ( r.getTitlePop().equals(tvd.titlePop )) {\r
+                               return true;\r
+                       }\r
+               }\r
+               \r
+               return false;\r
+       }\r
+       \r
+       private boolean isLikeChannel(ProgDetailList tvd, ReserveList r) {\r
+               \r
+               if ( r.getCh_name() == null ) {\r
+                       return false;\r
+               }\r
+               if ( ! r.getCh_name().equals(tvd.center) ) {\r
+                       return false;\r
+               }\r
+               \r
+               return true;\r
+       }\r
+       \r
+       private Long getLikeDist(ProgDetailList tvd, ReserveList r, long rangeLikeRsv) {\r
+               \r
+               Long d = null;\r
+               \r
+               ArrayList<String> starts = new ArrayList<String>();\r
+               ArrayList<String> ends = new ArrayList<String>();\r
+               CommonUtils.getStartEndList(starts, ends, r);\r
+                \r
+               for ( int j=0; j<starts.size(); j++ ) {\r
+                       long dtmp = CommonUtils.getCompareDateTime(starts.get(j),tvd.startDateTime);\r
+                       if ( rangeLikeRsv > 0 && Math.abs(dtmp) >= rangeLikeRsv ) {\r
+                               // 範囲指定があって範囲外ならスキップ\r
+                               continue;\r
+                       }\r
+                       else if ( d == null || Math.abs(d) > Math.abs(dtmp) ) {\r
+                               // 初値、または一番小さい値を採用\r
+                               d = dtmp;\r
+                       }\r
+               }\r
+               \r
+               return d;\r
        }\r
        \r
        \r
@@ -1723,8 +1745,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                pop.addSeparator();\r
                \r
                // 類似予約検索\r
-               LikeReserveList likeRsvList = new LikeReserveList();\r
-               searchLikeRsv(likeRsvList, tvd, "", 0);\r
+               LikeReserveList likeRsvList = findLikeReserves(tvd, "", 0);\r
                \r
                // 重複予約検索\r
                LikeReserveList overlapRsvList = new LikeReserveList();\r
@@ -2623,6 +2644,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                                \r
                                // 重複時間チェック\r
                                boolean inRange = false;\r
+                               long d = 0;\r
                                {\r
                                        ArrayList<String> starts = new ArrayList<String>();\r
                                        ArrayList<String> ends = new ArrayList<String>();\r
@@ -2641,6 +2663,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                                                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
+                                                               d = CommonUtils.getDiffDateTime(tvd.startDateTime, starts.get(j));\r
                                                                break;\r
                                                        }\r
                                                }\r
@@ -2651,7 +2674,7 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                                }\r
                                \r
                                // 類似予約あり!\r
-                               overlapRsvList.add(new LikeReserveItem(recorder, r));\r
+                               overlapRsvList.add(new LikeReserveItem(recorder, r, d));\r
                        }\r
                }\r
                \r
@@ -4779,9 +4802,9 @@ public class Viewer extends JFrame implements ChangeListener,VWTimerRiseListener
                // [ツールバー/共通] レコーダ情報変更\r
                toolBar.addHDDRecorderChangeListener(autores);\r
                \r
-               // [ツールバー/レコーダ選択] 自動予約一覧\r
-               toolBar.addHDDRecorderSelectionListener(autores);\r
-\r
+               // [ツールバー/レコーダ選択]\r
+               toolBar.addHDDRecorderSelectionListener(autores);       // 自動予約一覧\r
+               toolBar.addHDDRecorderSelectionListener(rdialog);       // 予約ダイアログ\r
 \r
                // レコーダ選択イベントキック\r
                toolBar.setSelectedRecorder(bounds.getSelectedRecorderId());\r