public class AdjustTime extends JFrame
{
public static final String PROGRAM_NAME = "AdjustTime for JOSM";
- public static final String PROGRAM_VARSION = "4.01";
- public static final String PROGRAM_UPDATE = "2018/09/17";
+ public static final String PROGRAM_VARSION = "5.01";
+ public static final String PROGRAM_UPDATE = "2019/08/25";
AppParameters params;
SimpleDateFormat dfjp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
public ResourceBundle i18n = ResourceBundle.getBundle("i18n");
//{{DECLARE_CONTROLS
- JPanel cardPanel; // ウィザード形式パネル(カード型)
+ JTabbedPane cardPanel; // ウィザード形式パネル(タブ型)
JPanel[] cards;
int cardPanelNo = 0;
JPanel argsPanel; // パラメータ設定パネル (上部)
JCheckBox noFirstNode; // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
JCheckBox gpxReuse; // 生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。 {ON | OFF}
JTextArea textArea; // 実行結果表示領域
- //ImagePreview imagePane; // 基準時刻画像表示
ParameterPanelFolder arg1_srcFolder;
ParameterPanelImageFile arg2_baseTimeImg;
ParameterPanel arg3_basetime; // 基準時刻:
JButton zoomInButton; // [Zoom in]ボタン
JButton zoomOutButton; // [Zoom out]ボタン
- JButton nextButton; // [次へ]ボタン
- JButton backButton; // [戻る]ボタン
JButton doButton; // [処理実行]ボタン
//}}
else if (object == doButton) {
doButton_Action(event);
}
- else if (object == nextButton) {
- nextButton_Action(event);
- }
- else if (object == backButton) {
- backButton_Action(event);
- }
}
}
params = new AppParameters();
//---------------------------------------------------------------------
- cardPanel = new JPanel();
- cardPanel.setLayout(new CardLayout());
+ cardPanel = new JTabbedPane(JTabbedPane.LEFT);
mainPanel.add(cardPanel, BorderLayout.CENTER);
- nextButton = new JButton(i18n.getString("button.next"));
- southPanel.add(nextButton, BorderLayout.EAST);
-
- backButton = new JButton(i18n.getString("button.previous"));
- southPanel.add(backButton, BorderLayout.WEST);
-
cards = new JPanel[5];
- for (int i=0; i < 5; i++) {
- cards[i] = new JPanel();
- cardPanel.add(cards[i], String.valueOf(i));
- }
cardPanelNo = 0;
//---------------------------------------------------------------------
// 1.[対象フォルダ]設定パネル
int cardNo = 0;
- cards[cardNo].setLayout(new BorderLayout());
- JLabel label1 = new JLabel();
- label1.setText(i18n.getString("label.100"));
- cards[cardNo].add(label1, BorderLayout.NORTH);
-
- argsPanel = new JPanel();
- argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
- arg1_srcFolder = new ParameterPanelFolder(i18n.getString("label.110") +": ", params.getProperty(AppParameters.IMG_SOURCE_FOLDER));
- argsPanel.add(arg1_srcFolder);
- cards[cardNo].add(argsPanel, BorderLayout.CENTER);
+ {
+ Card card = new Card(cardPanel, i18n.getString("tab.100"), -1, 1);
+ cardPanel.addTab(card.getTitle(), card);
+ cards[cardNo] = card;
+
+ JLabel label1 = new JLabel();
+ label1.setText(i18n.getString("label.100"));
+ card.mainPanel.add(label1, BorderLayout.NORTH);
+
+ argsPanel = new JPanel();
+ argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
+ arg1_srcFolder = new ParameterPanelFolder(i18n.getString("label.110") +": ", params.getProperty(AppParameters.IMG_SOURCE_FOLDER));
+ argsPanel.add(arg1_srcFolder);
+ card.mainPanel.add(argsPanel, BorderLayout.CENTER);
+ }
//---------------------------------------------------------------------
// 2.[基準時刻画像]設定パネル
cardNo++;
- cards[cardNo].setLayout(new BorderLayout());
- JLabel label2 = new JLabel();
- label2.setText(i18n.getString("label.200"));
- cards[cardNo].add(label2, BorderLayout.NORTH);
-
- argsPanel = new JPanel();
-
- // 基準時刻画像
- argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
- arg2_baseTimeImg = new ParameterPanelImageFile(i18n.getString("label.210") +": ", params.getProperty(AppParameters.IMG_BASE_FILE), arg1_srcFolder);
- argsPanel.add(arg2_baseTimeImg);
-
- baseTimeGroup = new ButtonGroup();
-
- // EXIFの日時を基準にする
- exifBase = new JRadioButton(i18n.getString("label.220"));
-
- // ファイル更新日時を基準にする
- fupdateBase = new JRadioButton(i18n.getString("label.230"));
- baseTimeGroup.add(exifBase);
- baseTimeGroup.add(fupdateBase);
- argsPanel.add(exifBase);
- argsPanel.add(fupdateBase);
- if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
- fupdateBase.setSelected(false);
- exifBase.setSelected(true);
- }
- else {
- fupdateBase.setSelected(true);
- exifBase.setSelected(false);
+ {
+ Card card = new Card(cardPanel, i18n.getString("tab.200"), 0, 2);
+ cardPanel.addTab(card.getTitle(), card);
+ cards[cardNo] = card;
+
+ JLabel label2 = new JLabel();
+ label2.setText(i18n.getString("label.200"));
+ card.mainPanel.add(label2, BorderLayout.NORTH);
+
+ argsPanel = new JPanel();
+
+ // 基準時刻画像
+ argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
+ arg2_baseTimeImg = new ParameterPanelImageFile(i18n.getString("label.210") +": ", params.getProperty(AppParameters.IMG_BASE_FILE), arg1_srcFolder);
+ argsPanel.add(arg2_baseTimeImg);
+
+ baseTimeGroup = new ButtonGroup();
+
+ // EXIFの日時を基準にする
+ exifBase = new JRadioButton(i18n.getString("label.220"));
+
+ // ファイル更新日時を基準にする
+ fupdateBase = new JRadioButton(i18n.getString("label.230"));
+ baseTimeGroup.add(exifBase);
+ baseTimeGroup.add(fupdateBase);
+ argsPanel.add(exifBase);
+ argsPanel.add(fupdateBase);
+ if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
+ fupdateBase.setSelected(false);
+ exifBase.setSelected(true);
+ }
+ else {
+ fupdateBase.setSelected(true);
+ exifBase.setSelected(false);
+ }
+ card.mainPanel.add(argsPanel, BorderLayout.CENTER);
}
- cards[cardNo].add(argsPanel, BorderLayout.CENTER);
//---------------------------------------------------------------------
- // 3.基準時刻の入力画面
+ // 2a.基準時刻の入力画面
cardNo++;
- cards[cardNo].setLayout(new BorderLayout());
- argsPanel = new JPanel();
- argsPanel.setLayout(new GridLayout(2, 1));
-
- // 3. 正確な撮影時刻を入力してください。
- // カメラの時計が正確ならば、設定を変更する必要はありません。
- JLabel label3 = new JLabel();
- label3.setText(i18n.getString("label.300"));
- argsPanel.add(label3);
-
- // 基準時刻:
- String str310 = String.format(" %s: ", i18n.getString("label.310"));
- arg3_basetime = new ParameterPanel(str310, ImportPicture.TIME_FORMAT_STRING);
- argsPanel.add(arg3_basetime);
- cards[cardNo].add(argsPanel, BorderLayout.NORTH);
-
- // 参考画像
- imageLabel = new JLabel();
- imageSPane = new JScrollPane(imageLabel);
- cards[cardNo].add(imageSPane, BorderLayout.CENTER);
-
- // 画像ファイル選択ダイアログを起動するボタン
- buttonPanel = new JPanel();
- buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
- openButton = new JButton(createImageIcon("images/Fit16.gif"));
- buttonPanel.add(openButton);
- zoomInButton = new JButton(createImageIcon("images/ZoomIn16.gif"));
- buttonPanel.add(zoomInButton);
- zoomOutButton = new JButton(createImageIcon("images/ZoomOut16.gif"));
- buttonPanel.add(zoomOutButton);
- cards[cardNo].add(buttonPanel, BorderLayout.SOUTH);
+ {
+ Card card = new Card(cardPanel, i18n.getString("tab.300"), 1, 3);
+ cardPanel.addTab(card.getTitle(), card);
+ cards[cardNo] = card;
+
+ argsPanel = new JPanel();
+ argsPanel.setLayout(new GridLayout(2, 1));
+
+ // 3. 正確な撮影時刻を入力してください。
+ // カメラの時計が正確ならば、設定を変更する必要はありません。
+ JLabel label3 = new JLabel();
+ label3.setText(i18n.getString("label.300"));
+ argsPanel.add(label3);
+
+ // 基準時刻:
+ String str310 = String.format(" %s: ", i18n.getString("label.310"));
+ arg3_basetime = new ParameterPanel(str310, ImportPicture.TIME_FORMAT_STRING);
+ argsPanel.add(arg3_basetime);
+ card.mainPanel.add(argsPanel, BorderLayout.NORTH);
+
+ // 参考画像
+ imageLabel = new JLabel();
+ imageSPane = new JScrollPane(imageLabel);
+ card.mainPanel.add(imageSPane, BorderLayout.CENTER);
+
+ // 画像ファイル選択ダイアログを起動するボタン
+ buttonPanel = new JPanel();
+ buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
+ openButton = new JButton(createImageIcon("images/Fit16.gif"));
+ buttonPanel.add(openButton);
+ zoomInButton = new JButton(createImageIcon("images/ZoomIn16.gif"));
+ buttonPanel.add(zoomInButton);
+ zoomOutButton = new JButton(createImageIcon("images/ZoomOut16.gif"));
+ buttonPanel.add(zoomOutButton);
+ card.mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+ }
//---------------------------------------------------------------------
- // 4.GPXファイル設定画面
+ // 3.GPXファイル設定画面
cardNo++;
- cards[cardNo].setLayout(new BorderLayout());
-
- // 4. ヒモ付を行うGPXファイルを選択してください。
- // - フォルダを指定すると、フォルダ内のすべてのGPXファイルを対象とします。
- JLabel label4 = new JLabel();
- label4.setText(i18n.getString("label.400"));
- cards[cardNo].add(label4, BorderLayout.NORTH);
-
- JPanel tmpPanel4a = new JPanel();
- tmpPanel4a.setLayout(new BoxLayout(tmpPanel4a, BoxLayout.Y_AXIS));
-
- // "GPXフォルダ: "
- arg4_gpxFolder = new ParameterPanelGpx(
- i18n.getString("label.410") + ": ",
- params.getProperty(AppParameters.GPX_SOURCE_FOLDER)
- );
- tmpPanel4a.add(arg4_gpxFolder);
-
- // "セグメント'trkseg'の最初の1ノードは無視する。"
- noFirstNode = new JCheckBox(
- i18n.getString("label.420"),
- params.getProperty(AppParameters.GPX_NO_FIRST_NODE).equals("ON")
- );
- tmpPanel4a.add(noFirstNode);
-
- // "生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も変換の対象にする"
- gpxReuse = new JCheckBox(
- i18n.getString("label.430"),
- params.getProperty(AppParameters.GPX_REUSE).equals("ON")
- );
- gpxReuse.setEnabled(true);
- tmpPanel4a.add(gpxReuse);
- cards[cardNo].add(tmpPanel4a, BorderLayout.CENTER);
+ {
+ Card card = new Card(cardPanel, i18n.getString("tab.400"), 2, 4);
+ cardPanel.addTab(card.getTitle(), card);
+ cards[cardNo] = card;
+
+ // 4. ヒモ付を行うGPXファイルを選択してください。
+ // - フォルダを指定すると、フォルダ内のすべてのGPXファイルを対象とします。
+ JLabel label4 = new JLabel();
+ label4.setText(i18n.getString("label.400"));
+ card.mainPanel.add(label4, BorderLayout.NORTH);
+
+ JPanel tmpPanel4a = new JPanel();
+ tmpPanel4a.setLayout(new BoxLayout(tmpPanel4a, BoxLayout.Y_AXIS));
+
+ // "GPXフォルダ: "
+ arg4_gpxFolder = new ParameterPanelGpx(
+ i18n.getString("label.410") + ": ",
+ params.getProperty(AppParameters.GPX_SOURCE_FOLDER)
+ );
+ tmpPanel4a.add(arg4_gpxFolder);
+
+ // "セグメント'trkseg'の最初の1ノードは無視する。"
+ noFirstNode = new JCheckBox(
+ i18n.getString("label.420"),
+ params.getProperty(AppParameters.GPX_NO_FIRST_NODE).equals("ON")
+ );
+ tmpPanel4a.add(noFirstNode);
+
+ // "生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も変換の対象にする"
+ gpxReuse = new JCheckBox(
+ i18n.getString("label.430"),
+ params.getProperty(AppParameters.GPX_REUSE).equals("ON")
+ );
+ gpxReuse.setEnabled(true);
+ tmpPanel4a.add(gpxReuse);
+ card.mainPanel.add(tmpPanel4a, BorderLayout.CENTER);
+ }
//---------------------------------------------------------------------
- // 5.EXIF更新設定画面
+ // 4.EXIF更新設定画面
cardNo++;
- cards[cardNo].setLayout(new BorderLayout());
-
- // 5. EXIF変換を行うかどうかを選択してください。
- // - EXIF変換を行う場合には、変換ファイルを出力するフォルダも指定する必要があります。
- // - 出力フォルダには、書き込み権限と、十分な空き容量が必要です。
- JLabel label5 = new JLabel();
- label5.setText(
- String.format(
- "<html><p>5. %s</p><ul><li>%s</li><li>%s</li></ul>",
- i18n.getString("label.500"),
- i18n.getString("label.501"),
- i18n.getString("label.502")
- )
- );
- cards[cardNo].add(label5, BorderLayout.NORTH);
-
- JPanel tmpPanel5 = new JPanel();
- tmpPanel5.setLayout(new BoxLayout(tmpPanel5, BoxLayout.Y_AXIS));
-
- // "IMGの変換をする"
- outputIMG = new JCheckBox(
- i18n.getString("label.510"),
- Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT))
- );
- tmpPanel5.add(outputIMG);
-
- // "GPXファイル時間外のファイルもコピーする"
- outputIMG_all = new JCheckBox(
- i18n.getString("label.520"),
- Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT_ALL))
- );
- tmpPanel5.add(outputIMG_all);
-
- // "出力フォルダ: "
- arg5_outputFolder = new ParameterPanelFolder(
- i18n.getString("label.530") + ": ",
- params.getProperty(AppParameters.IMG_OUTPUT_FOLDER)
- );
- tmpPanel5.add(arg5_outputFolder);
-
- // "EXIFの変換をする"
- exifON = new JCheckBox(
- i18n.getString("label.540"),
- Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT_EXIF))
- );
- tmpPanel5.add(exifON);
-
- // "ポイントマーカー<WPT>をGPXファイルに出力する"
- gpxOutputWpt = new JCheckBox(
- i18n.getString("label.550"),
- Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_WPT))
- );
- gpxOutputWpt.setEnabled(true);
- tmpPanel5.add(gpxOutputWpt);
-
- // "ソースGPXの<MAGVAR>を無視する"
- gpxOverwriteMagvar = new JCheckBox(
- i18n.getString("label.560"),
- Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OVERWRITE_MAGVAR))
- );
- gpxOverwriteMagvar.setEnabled(true);
- tmpPanel5.add(gpxOverwriteMagvar);
-
- // "出力GPXに<SPEED>を上書きする"
- gpxOutputSpeed = new JCheckBox(
- i18n.getString("label.570"),
- Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_SPEED))
- );
- gpxOutputSpeed.setEnabled(true);
- tmpPanel5.add(gpxOutputSpeed);
-
- cards[cardNo].add(tmpPanel5, BorderLayout.CENTER);
-
- // "処理実行"
- doButton = new JButton(
- i18n.getString("button.execute"),
- AdjustTime.createImageIcon("images/media_playback_start.png")
- );
- cards[cardNo].add(doButton, BorderLayout.SOUTH);
-
+ {
+ Card card = new Card(cardPanel, i18n.getString("tab.500"), 3, -1);
+ cardPanel.addTab(card.getTitle(), card);
+ cards[cardNo] = card;
+
+ // 5. EXIF変換を行うかどうかを選択してください。
+ // - EXIF変換を行う場合には、変換ファイルを出力するフォルダも指定する必要があります。
+ // - 出力フォルダには、書き込み権限と、十分な空き容量が必要です。
+ JLabel label5 = new JLabel();
+ label5.setText(
+ String.format(
+ "<html><p>5. %s</p><ul><li>%s</li><li>%s</li></ul>",
+ i18n.getString("label.500"),
+ i18n.getString("label.501"),
+ i18n.getString("label.502")
+ )
+ );
+ card.mainPanel.add(label5, BorderLayout.NORTH);
+
+ JPanel tmpPanel5 = new JPanel();
+ tmpPanel5.setLayout(new BoxLayout(tmpPanel5, BoxLayout.Y_AXIS));
+
+ // "IMGの変換をする"
+ outputIMG = new JCheckBox(
+ i18n.getString("label.510"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT))
+ );
+ tmpPanel5.add(outputIMG);
+
+ // "GPXファイル時間外のファイルもコピーする"
+ outputIMG_all = new JCheckBox(
+ i18n.getString("label.520"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT_ALL))
+ );
+ tmpPanel5.add(outputIMG_all);
+
+ // "出力フォルダ: "
+ arg5_outputFolder = new ParameterPanelFolder(
+ i18n.getString("label.530") + ": ",
+ params.getProperty(AppParameters.IMG_OUTPUT_FOLDER)
+ );
+ tmpPanel5.add(arg5_outputFolder);
+
+ // "EXIFの変換をする"
+ exifON = new JCheckBox(
+ i18n.getString("label.540"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT_EXIF))
+ );
+ tmpPanel5.add(exifON);
+
+ // "ポイントマーカー<WPT>をGPXファイルに出力する"
+ gpxOutputWpt = new JCheckBox(
+ i18n.getString("label.550"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_WPT))
+ );
+ gpxOutputWpt.setEnabled(true);
+ tmpPanel5.add(gpxOutputWpt);
+
+ // "ソースGPXの<MAGVAR>を無視する"
+ gpxOverwriteMagvar = new JCheckBox(
+ i18n.getString("label.560"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OVERWRITE_MAGVAR))
+ );
+ gpxOverwriteMagvar.setEnabled(true);
+ tmpPanel5.add(gpxOverwriteMagvar);
+
+ // "出力GPXに<SPEED>を上書きする"
+ gpxOutputSpeed = new JCheckBox(
+ i18n.getString("label.570"),
+ Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_SPEED))
+ );
+ gpxOutputSpeed.setEnabled(true);
+ tmpPanel5.add(gpxOutputSpeed);
+
+ card.mainPanel.add(tmpPanel5, BorderLayout.CENTER);
+
+ // "処理実行"
+ doButton = new JButton(
+ i18n.getString("button.execute"),
+ AdjustTime.createImageIcon("images/media_playback_start.png")
+ );
+ card.mainPanel.add(doButton, BorderLayout.SOUTH);
+ }
//---------------------------------------------------------------------
// INIT_MENUS
gpxOutputSpeed.addActionListener(lSymAction);
noFirstNode.addActionListener(lSymAction);
gpxReuse.addActionListener(lSymAction);
- //arg1Panel_4.field.addActionListener(lSymAction);
- nextButton.addActionListener(lSymAction);
- backButton.addActionListener(lSymAction);
//}}
}
doButton.setEnabled(true);
}
-
- /**
- * [次へ]ボタンをクリックした時の動作
- * @param event
- */
- void nextButton_Action(ActionEvent event) {
- if ((cardPanelNo + 1) < cards.length) {
- cardPanelNo++;
- CardLayout cl = (CardLayout)(cardPanel.getLayout());
- cl.show(cardPanel, String.valueOf(cardPanelNo));
- }
- }
-
- /**
- * [戻る]ボタンをクリックした時の動作
- * @param event
- */
- void backButton_Action(ActionEvent event) {
- if ((cardPanelNo - 1) >= 0) {
- cardPanelNo--;
- CardLayout cl = (CardLayout)(cardPanel.getLayout());
- cl.show(cardPanel, String.valueOf(cardPanelNo));
- }
- }
}