diff --git a/src/i18n.properties b/src/i18n.properties index 2962feb..af470a9 100644 --- a/src/i18n.properties +++ b/src/i18n.properties @@ -9,22 +9,26 @@ button.execute=Execute button.select=Selection... +tab.100=1. Source image Folder label.100=

1. Select image source folder.

label.110=Image Folder +tab.200=2. Set correct shooting time label.200=

2. Choose an image whose exact shooting time can be known.

label.210=Reference time image label.220=Based on EXIF date and time label.230=Based on FILE UPDATE time - +tab.300=2a. Set correct shooting time label.300=

3. enter the correct shooting time.

label.310=Reference time +tab.400=3. Select GPX files label.400=

4. Please select a GPX file to perform the matching.

label.410=GPX folder label.420=Ignore the first node of segment 'trkseg' label.430=Also make the generated GPX file (the one whose filename ends with '_.gpx') as the target of conversion +tab.500=4. perform EXIF conversion label.500=Select whether to perform EXIF conversion label.501=When performing EXIF conversion, you also need to specify the folder to output the converted file. label.502=The output folder must have write permission and sufficient free space. diff --git a/src/i18n_ja_JP.properties b/src/i18n_ja_JP.properties index 6f75d3d..7504efd 100644 --- a/src/i18n_ja_JP.properties +++ b/src/i18n_ja_JP.properties @@ -9,22 +9,27 @@ button.execute=\u51e6\u7406\u5b9f\u884c button.select=\u9078\u629e... +tab.100=1. \u753b\u50cf\u5143\u306e\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30eb\u30c0 label.100=

1. \u4f4d\u7f6e\u60c5\u5831\u3092\u4ed8\u52a0\u3057\u305f\u3044\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

label.110=\u5bfe\u8c61\u30d5\u30a9\u30eb\u30c0 +tab.200=2. \u57fa\u6e96\u3068\u3059\u308b\u753b\u50cf\u306e\u9078\u629e label.200=

2. \u6b63\u78ba\u306a\u64ae\u5f71\u6642\u523b\u304c\u5224\u660e\u3067\u304d\u308b\u753b\u50cf\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002

label.210=\u57fa\u6e96\u6642\u523b\u753b\u50cf label.220=EXIF\u306e\u65e5\u6642\u3092\u57fa\u6e96\u306b\u3059\u308b label.230=\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u65e5\u6642\u3092\u57fa\u6e96\u306b\u3059\u308b +tab.300=2a. \u672c\u5f53\u306e\u6642\u523b\u3092\u8a2d\u5b9a label.300=

3. \u6b63\u78ba\u306a\u64ae\u5f71\u6642\u523b\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

label.310=\u57fa\u6e96\u6642\u523b +tab.400=3. GPX\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e label.400=

4. \u30d2\u30e2\u4ed8\u3092\u884c\u3046GPX\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

label.410=GPX\u30d5\u30a9\u30eb\u30c0 label.420=\u30bb\u30b0\u30e1\u30f3\u30c8'trkseg'\u306e\u6700\u521d\u306e\uff11\u30ce\u30fc\u30c9\u306f\u7121\u8996\u3059\u308b label.430=\u751f\u6210\u3055\u308c\u305fGPX\u30d5\u30a1\u30a4\u30eb\uff08\u30d5\u30a1\u30a4\u30eb\u540d\u304c'_.gpx'\u3067\u7d42\u308f\u308b\u3082\u306e\uff09\u3082\u5909\u63db\u306e\u5bfe\u8c61\u306b\u3059\u308b +tab.500=4. EXIF\u5909\u63db\u306e\u5b9f\u884c label.500=EXIF\u5909\u63db\u3092\u884c\u3046\u304b\u3069\u3046\u304b\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 label.501=EXIF\u5909\u63db\u3092\u884c\u3046\u5834\u5408\u306b\u306f\u3001\u5909\u63db\u30d5\u30a1\u30a4\u30eb\u3092\u51fa\u529b\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u3082\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 label.502=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u306b\u306f\u3001\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u3068\u3001\u5341\u5206\u306a\u7a7a\u304d\u5bb9\u91cf\u304c\u5fc5\u8981\u3067\u3059\u3002 diff --git a/src/osm/jp/gpx/matchtime/gui/AdjustTime.java b/src/osm/jp/gpx/matchtime/gui/AdjustTime.java index 5ab17fd..999f895 100644 --- a/src/osm/jp/gpx/matchtime/gui/AdjustTime.java +++ b/src/osm/jp/gpx/matchtime/gui/AdjustTime.java @@ -23,8 +23,8 @@ 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"); @@ -34,7 +34,7 @@ public ResourceBundle i18n = ResourceBundle.getBundle("i18n"); //{{DECLARE_CONTROLS - JPanel cardPanel; // ウィザード形式パネル(カード型) + JTabbedPane cardPanel; // ウィザード形式パネル(タブ型) JPanel[] cards; int cardPanelNo = 0; JPanel argsPanel; // パラメータ設定パネル (上部) @@ -46,7 +46,6 @@ JCheckBox noFirstNode; // GPX: セグメントの最初の1ノードは無視する。 {ON | OFF} JCheckBox gpxReuse; // 生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。 {ON | OFF} JTextArea textArea; // 実行結果表示領域 - //ImagePreview imagePane; // 基準時刻画像表示 ParameterPanelFolder arg1_srcFolder; ParameterPanelImageFile arg2_baseTimeImg; ParameterPanel arg3_basetime; // 基準時刻: @@ -64,8 +63,6 @@ JButton zoomInButton; // [Zoom in]ボタン JButton zoomOutButton; // [Zoom out]ボタン - JButton nextButton; // [次へ]ボタン - JButton backButton; // [戻る]ボタン JButton doButton; // [処理実行]ボタン //}} @@ -138,12 +135,6 @@ else if (object == doButton) { doButton_Action(event); } - else if (object == nextButton) { - nextButton_Action(event); - } - else if (object == backButton) { - backButton_Action(event); - } } } @@ -184,228 +175,239 @@ 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); + { + Card card = new Card(cardPanel, i18n.getString("tab.200"), 0, 2); + cardPanel.addTab(card.getTitle(), card); + cards[cardNo] = card; - 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); + 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); } - else { - fupdateBase.setSelected(true); - exifBase.setSelected(false); + + //--------------------------------------------------------------------- + // 2a.基準時刻の入力画面 + cardNo++; + { + 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); } - cards[cardNo].add(argsPanel, BorderLayout.CENTER); //--------------------------------------------------------------------- - // 3.基準時刻の入力画面 + // 3.GPXファイル設定画面 cardNo++; - cards[cardNo].setLayout(new BorderLayout()); - argsPanel = new JPanel(); - argsPanel.setLayout(new GridLayout(2, 1)); + { + Card card = new Card(cardPanel, i18n.getString("tab.400"), 2, 4); + cardPanel.addTab(card.getTitle(), card); + cards[cardNo] = card; - // 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); + // 4. ヒモ付を行うGPXファイルを選択してください。 + // - フォルダを指定すると、フォルダ内のすべてのGPXファイルを対象とします。 + JLabel label4 = new JLabel(); + label4.setText(i18n.getString("label.400")); + card.mainPanel.add(label4, 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); + 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); + } //--------------------------------------------------------------------- - // 4.GPXファイル設定画面 + // 4.EXIF更新設定画面 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); - - //--------------------------------------------------------------------- - // 5.EXIF更新設定画面 - cardNo++; - cards[cardNo].setLayout(new BorderLayout()); + { + 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( + "

5. %s

", + i18n.getString("label.500"), + i18n.getString("label.501"), + i18n.getString("label.502") + ) + ); + card.mainPanel.add(label5, BorderLayout.NORTH); - // 5. EXIF変換を行うかどうかを選択してください。 - // - EXIF変換を行う場合には、変換ファイルを出力するフォルダも指定する必要があります。 - // - 出力フォルダには、書き込み権限と、十分な空き容量が必要です。 - JLabel label5 = new JLabel(); - label5.setText( - String.format( - "

5. %s

", - 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)); + 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); + // "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); + // "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); + // "出力フォルダ: " + 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); - - // "ポイントマーカーをGPXファイルに出力する" - gpxOutputWpt = new JCheckBox( - i18n.getString("label.550"), - Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_WPT)) - ); - gpxOutputWpt.setEnabled(true); - tmpPanel5.add(gpxOutputWpt); - - // "ソースGPXのを無視する" - gpxOverwriteMagvar = new JCheckBox( - i18n.getString("label.560"), - Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OVERWRITE_MAGVAR)) - ); - gpxOverwriteMagvar.setEnabled(true); - tmpPanel5.add(gpxOverwriteMagvar); - - // "出力GPXにを上書きする" - 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); + // "EXIFの変換をする" + exifON = new JCheckBox( + i18n.getString("label.540"), + Boolean.parseBoolean(params.getProperty(AppParameters.IMG_OUTPUT_EXIF)) + ); + tmpPanel5.add(exifON); + // "ポイントマーカーをGPXファイルに出力する" + gpxOutputWpt = new JCheckBox( + i18n.getString("label.550"), + Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_WPT)) + ); + gpxOutputWpt.setEnabled(true); + tmpPanel5.add(gpxOutputWpt); + + // "ソースGPXのを無視する" + gpxOverwriteMagvar = new JCheckBox( + i18n.getString("label.560"), + Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OVERWRITE_MAGVAR)) + ); + gpxOverwriteMagvar.setEnabled(true); + tmpPanel5.add(gpxOverwriteMagvar); + + // "出力GPXにを上書きする" + 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 @@ -444,9 +446,6 @@ gpxOutputSpeed.addActionListener(lSymAction); noFirstNode.addActionListener(lSymAction); gpxReuse.addActionListener(lSymAction); - //arg1Panel_4.field.addActionListener(lSymAction); - nextButton.addActionListener(lSymAction); - backButton.addActionListener(lSymAction); //}} } @@ -729,28 +728,4 @@ 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)); - } - } } diff --git a/src/osm/jp/gpx/matchtime/gui/Card.java b/src/osm/jp/gpx/matchtime/gui/Card.java new file mode 100644 index 0000000..78617a5 --- /dev/null +++ b/src/osm/jp/gpx/matchtime/gui/Card.java @@ -0,0 +1,94 @@ +package osm.jp.gpx.matchtime.gui; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.util.ResourceBundle; +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + +/** + * + * @author yuu + */ +public class Card extends JPanel { + public ResourceBundle i18n = ResourceBundle.getBundle("i18n"); + JTabbedPane tabbe; + public JPanel mainPanel; + String title; + int backNumber = -1; + int nextNumber = -1; + JButton nextButton; // [次へ]ボタン + JButton backButton; // [戻る]ボタン + + public Card(JTabbedPane tabbe, String title, int backNumber, int nextNumber) { + super(); + this.tabbe = tabbe; + this.title = title; + this.backNumber = backNumber; + this.nextNumber = nextNumber; + + // INIT_CONTROLS + this.setLayout(new BorderLayout()); + + //---- CENTER ----- + mainPanel = new JPanel(); + mainPanel.setLayout(new BorderLayout()); + this.add(mainPanel, BorderLayout.CENTER); + + //---- SOUTH ----- + JPanel buttonPanel = new JPanel(new BorderLayout()); + buttonPanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH); + buttonPanel.add(Box.createVerticalStrut(10), BorderLayout.NORTH); + this.add(buttonPanel, BorderLayout.SOUTH); + + //{{REGISTER_LISTENERS + SymAction lSymAction = new SymAction(); + if (nextNumber >= 0) { + nextButton = new JButton(i18n.getString("button.next")); + buttonPanel.add(nextButton, BorderLayout.EAST); + nextButton.addActionListener(lSymAction); + } + + if (backNumber >= 0) { + backButton = new JButton(i18n.getString("button.previous")); + buttonPanel.add(backButton, BorderLayout.WEST); + backButton.addActionListener(lSymAction); + } + //}} + } + + public String getTitle() { + return this.title; + } + + /** + * [次へ]ボタンをクリックした時の動作 + * @param event + */ + void nextButton_Action(ActionEvent event) { + this.tabbe.setSelectedIndex(this.nextNumber); + } + + /** + * [戻る]ボタンをクリックした時の動作 + * @param event + */ + void backButton_Action(ActionEvent event) { + this.tabbe.setSelectedIndex(this.backNumber); + } + + class SymAction implements java.awt.event.ActionListener { + @Override + public void actionPerformed(java.awt.event.ActionEvent event) { + Object object = event.getSource(); + if (object == nextButton) { + nextButton_Action(event); + } + else if (object == backButton) { + backButton_Action(event); + } + } + } +}