- package osm.jp.gpx.matchtime.gui;
-
- import osm.jp.gpx.matchtime.gui.restamp.RestampDialog;
- import java.awt.*;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.ResourceBundle;
- import java.util.TimeZone;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.swing.*;
- import javax.swing.event.DocumentEvent;
- import osm.jp.gpx.*;
- import osm.jp.gpx.matchtime.gui.restamp.CardImageFile;
- import osm.jp.gpx.matchtime.gui.restamp.CardSourceFolder;
-
- /**
- * 本プログラムのメインクラス
- */
- @SuppressWarnings("serial")
- public class AdjustTerra extends JFrame
- {
- public static final String PROGRAM_NAME = "AdjustTerra for JOSM";
- public static final String PROGRAM_VARSION = "5.2";
- public static final String PROGRAM_UPDATE = "2020/02/02";
-
- AppParameters params;
- public static SimpleDateFormat dfjp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
-
- // Used for addNotify check.
- boolean fComponentsAdjusted = false;
- public static ResourceBundle i18n = ResourceBundle.getBundle("i18n");
-
- //{{DECLARE_CONTROLS
- JTabbedPane cardPanel; // ウィザード形式パネル(タブ型)
- Card[] cards;
- //}}
-
- //---入力フィールド----------------------------------------------------
- ParameterPanelFolder arg1_srcFolder; // 対象フォルダ
- ParameterPanelImageFile arg2_baseTimeImg; // 開始画像ファイルパス
- ParameterPanelTime arg2_basetime; // 開始画像の基準時刻:
- ParameterPanelGpx arg3_gpxFile; // GPX file or Folder
- ParameterPanelOutput arg4_output; // EXIF & 書き出しフォルダ
-
- //{{DECLARE_MENUS
- java.awt.MenuBar mainMenuBar;
- java.awt.Menu menu1;
- java.awt.MenuItem miDoNewFileList;
- java.awt.MenuItem miDoDirSize;
- java.awt.MenuItem miDoReadXML;
- java.awt.MenuItem miExit;
- java.awt.Menu menu2;
- java.awt.MenuItem miRestamp;
- java.awt.Menu menu3;
- java.awt.MenuItem miAbout;
- //}}
-
- class SymWindow extends java.awt.event.WindowAdapter {
- /**
- * このFrameが閉じられるときの動作。
- * このパネルが閉じられたら、このアプリケーションも終了させる。
- */
- @Override
- public void windowClosing(java.awt.event.WindowEvent event) {
- Object object = event.getSource();
- if (object == AdjustTerra.this) {
- DbMang_WindowClosing(event);
- }
- }
- }
-
- class SymAction implements java.awt.event.ActionListener {
- @Override
- public void actionPerformed(java.awt.event.ActionEvent event) {
- Object object = event.getSource();
- if (object == miAbout) {
- miAbout_Action(event);
- }
- else if (object == miRestamp) {
- try {
- miRestamp_Action(event);
- } catch (IOException ex) {
- Logger.getLogger(AdjustTerra.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- else if (object == miExit) {
- miExit_Action(event);
- }
- }
- }
-
- /**
- * データベース内のテーブルを一覧で表示するFrame
- * @throws IOException
- */
- public AdjustTerra() throws IOException
- {
- dfjp.setTimeZone(TimeZone.getTimeZone("JST"));
-
- // INIT_CONTROLS
- Container container = getContentPane();
- container.setLayout(new BorderLayout());
- setSize(
- getInsets().left + getInsets().right + 720,
- getInsets().top + getInsets().bottom + 480
- );
- setTitle(AdjustTerra.PROGRAM_NAME +" v"+ AdjustTerra.PROGRAM_VARSION);
-
- //---- CENTER -----
- JPanel mainPanel = new JPanel();
- mainPanel.setLayout(new BorderLayout());
- container.add(mainPanel, BorderLayout.CENTER);
-
- //---- SOUTH -----
- JPanel southPanel = new JPanel(new BorderLayout());
- southPanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH);
- southPanel.add(Box.createVerticalStrut(10), BorderLayout.NORTH);
- container.add(southPanel, BorderLayout.SOUTH);
-
- //---- SPACE -----
- container.add(Box.createVerticalStrut(30), BorderLayout.NORTH);
- container.add(Box.createHorizontalStrut(10), BorderLayout.WEST);
- container.add(Box.createHorizontalStrut(10), BorderLayout.EAST);
-
- params = new AppParameters();
-
- //---------------------------------------------------------------------
- cardPanel = new JTabbedPane(JTabbedPane.LEFT);
- mainPanel.add(cardPanel, BorderLayout.CENTER);
-
- cards = new Card[4];
- int cardNo = 0;
-
- //---------------------------------------------------------------------
- // 1.[対象フォルダ]設定パネル
- {
- arg1_srcFolder = new ParameterPanelFolder(
- i18n.getString("label.110") +": ",
- params.getProperty(AppParameters.IMG_SOURCE_FOLDER)
- );
- arg1_srcFolder.argField
- .getDocument()
- .addDocumentListener(
- new SimpleDocumentListener() {
- @Override
- public void update(DocumentEvent e) {
- toEnable(0, arg1_srcFolder.isEnable());
- }
- }
- );
-
- Card card = new CardSourceFolder(cardPanel, arg1_srcFolder);
- cardPanel.addTab(card.getTitle(), card);
- cardPanel.setEnabledAt(cardNo, true);
- cards[cardNo] = card;
- cardNo++;
- }
-
- //---------------------------------------------------------------------
- // 2.[基準時刻画像]設定パネル
- // 2a.基準時刻の入力画面
- {
- // 基準時刻画像
- arg2_baseTimeImg = new ParameterPanelImageFile(
- i18n.getString("label.210") +": ",
- null,
- arg1_srcFolder
- );
-
- // 2a. 基準時刻:
- arg2_basetime = new ParameterPanelTime(
- i18n.getString("label.310"),
- null,
- arg2_baseTimeImg
- );
- arg2_basetime.argField.getDocument().addDocumentListener(
- new SimpleDocumentListener() {
- @Override
- public void update(DocumentEvent e) {
- toEnable(1, arg2_basetime.isEnable());
- }
- }
- );
-
- // EXIFの日時を基準にする
- arg2_basetime.addExifBase(i18n.getString("label.220"), params);
-
- // ファイル更新日時を基準にする
- arg2_basetime.addFileUpdate(i18n.getString("label.230"), params);
-
- CardImageFile card = new CardImageFile(
- cardPanel, arg2_basetime, (Window)this,
- AdjustTerra.i18n.getString("tab.300"), 0, 2);
- cardPanel.addTab(card.getTitle(), card);
- cardPanel.setEnabledAt(cardNo, false);
- cards[cardNo] = card;
- cardNo++;
- }
-
- //---------------------------------------------------------------------
- // 3.GPXファイル設定画面
- {
- // 3. GPXファイル選択パラメータ
- arg3_gpxFile = new ParameterPanelGpx(
- i18n.getString("label.410") + ": ",
- params.getProperty(AppParameters.GPX_SOURCE_FOLDER)
- );
- arg3_gpxFile.argField.getDocument().addDocumentListener(
- new SimpleDocumentListener() {
- @Override
- public void update(DocumentEvent e) {
- toEnable(2, arg3_gpxFile.isEnable());
- }
- }
- );
-
- // "セグメント'trkseg'の最初の1ノードは無視する。"
- arg3_gpxFile.addNoFirstNode(i18n.getString("label.420"), params);
-
- // 3. GPXファイルを選択
- CardGpxFile card = new CardGpxFile(
- cardPanel, arg3_gpxFile,
- AdjustTerra.i18n.getString("tab.400"), 1, 3);
- cardPanel.addTab(card.getTitle(), card);
- cardPanel.setEnabledAt(cardNo, false);
- cards[cardNo] = card;
- cardNo++;
- }
-
- //---------------------------------------------------------------------
- // 4.EXIF更新設定画面 & 実行画面
- {
- // 4. ファイル変換・実行パラメータ
- // "出力フォルダ: "
- arg4_output = new ParameterPanelOutput(
- i18n.getString("label.530") + ": ",
- params.getProperty(AppParameters.IMG_OUTPUT_FOLDER)
- );
- arg4_output.argField.getDocument().addDocumentListener(
- new SimpleDocumentListener() {
- @Override
- public void update(DocumentEvent e) {
- toEnable(3, arg4_output.isEnable());
- }
- }
- );
-
- // "IMGの変換をする"
- arg4_output.addCheckChangeImage(i18n.getString("label.510"), params);
-
- // "GPXファイル時間外のファイルもコピーする"
- arg4_output.addCheckOutofGpxTime(i18n.getString("label.520"), params);
-
- // "EXIFの変換をする"
- arg4_output.addCheckOutputExif(i18n.getString("label.540"), params);
-
- // "ソースGPXの<MAGVAR>を無視する"
- arg4_output.addCheckIgnoreMagvar(i18n.getString("label.560"), params);
-
- // "出力GPXに[SPEED]を上書きする"
- arg4_output.addCheckOutputSpeed(i18n.getString("label.570"), params);
-
- // パネル表示
- CardExifPerform card = new CardExifPerform(
- cardPanel,
- arg2_basetime, arg3_gpxFile, arg4_output,
- AdjustTerra.i18n.getString("tab.500"),
- 2, -1
- );
- cardPanel.addTab(card.getTitle(), card);
- cardPanel.setEnabledAt(cardNo, false);
- cards[cardNo] = card;
- }
-
- //---------------------------------------------------------------------
- // INIT_MENUS
- menu1 = new java.awt.Menu("File");
- miExit = new java.awt.MenuItem(i18n.getString("menu.quit"));
- miExit.setFont(new Font("Dialog", Font.PLAIN, 12));
- menu1.add(miExit);
-
- miRestamp = new java.awt.MenuItem(i18n.getString("menu.restamp") + "...");
- miRestamp.setFont(new Font("Dialog", Font.PLAIN, 12));
-
- menu2 = new java.awt.Menu(i18n.getString("menu.tools"));
- menu2.setFont(new Font("Dialog", Font.PLAIN, 12));
- menu2.add(miRestamp);
-
- miAbout = new java.awt.MenuItem("About...");
- miAbout.setFont(new Font("Dialog", Font.PLAIN, 12));
-
- menu3 = new java.awt.Menu("Help");
- menu3.setFont(new Font("Dialog", Font.PLAIN, 12));
- menu3.add(miAbout);
-
- mainMenuBar = new java.awt.MenuBar();
- mainMenuBar.setHelpMenu(menu3);
- mainMenuBar.add(menu1);
- mainMenuBar.add(menu2);
- mainMenuBar.add(menu3);
- setMenuBar(mainMenuBar);
-
- //{{REGISTER_LISTENERS
- SymWindow aSymWindow = new SymWindow();
- this.addWindowListener(aSymWindow);
- SymAction lSymAction = new SymAction();
- miAbout.addActionListener(lSymAction);
- miRestamp.addActionListener(lSymAction);
- miExit.addActionListener(lSymAction);
- arg2_baseTimeImg.openButton.addActionListener(lSymAction);
- //}}
- }
-
- /**
- * Shows or hides the component depending on the boolean flag b.
- * @param b trueのときコンポーネントを表示; その他のとき, componentを隠す.
- * @see java.awt.Component#isVisible
- */
- @Override
- public void setVisible(boolean b) {
- if(b) {
- setLocation(50, 50);
- }
- super.setVisible(b);
- }
-
- /**
- * このクラスをインスタンスを生成して表示する。
- * コマンドラインの引数はありません。
- * @param args
- */
- static public void main(String args[]) {
- SwingUtilities.invokeLater(() -> {
- try {
- createAndShowGUI();
- } catch (Exception e) {
- e.printStackTrace();
- }
- });
- }
- private static void createAndShowGUI() throws IOException {
- (new AdjustTerra()).setVisible(true);
- }
-
- @Override
- public void addNotify() {
- // Record the size of the window prior to calling parents addNotify.
- Dimension d = getSize();
-
- super.addNotify();
-
- if (fComponentsAdjusted)
- return;
-
- // Adjust components according to the insets
- setSize(getInsets().left + getInsets().right + d.width, getInsets().top + getInsets().bottom + d.height);
- Component components[] = getComponents();
- for (Component component : components) {
- Point p = component.getLocation();
- p.translate(getInsets().left, getInsets().top);
- component.setLocation(p);
- }
- fComponentsAdjusted = true;
- }
-
- void DbMang_WindowClosing(java.awt.event.WindowEvent event) {
- setVisible(false); // hide the Manager
- dispose(); // free the system resources
- System.exit(0); // close the application
- }
-
- void miAbout_Action(java.awt.event.ActionEvent event) {
- // Action from About Create and show as modal
- (new AboutDialog(this, true)).setVisible(true);
- }
-
- void miRestamp_Action(java.awt.event.ActionEvent event) throws IOException {
- (new RestampDialog(this, false)).setVisible(true);
- }
-
- void miExit_Action(java.awt.event.ActionEvent event) {
- // Action from Exit Create and show as modal
- //(new hayashi.yuu.tools.gui.QuitDialog(this, true)).setVisible(true);
- (new QuitDialog(this, true)).setVisible(true);
- }
-
- void toEnable(final int cardNo, final boolean enable) {
- if ((cardNo >= 0) && (cardNo < cards.length)) {
- cardPanel.setEnabledAt(cardNo, enable);
- if ((cardNo -1) >= 0) {
- cards[cardNo -1].nextButton.setEnabled(enable);
- }
- if ((cardNo +1) < cards.length) {
- cardPanel.setEnabledAt(cardNo+1, enable);
- cards[cardNo +1].backButton.setEnabled(enable);
- cards[cardNo].nextButton.setEnabled(enable);
- }
- }
- }
-
- //ImageIcon refImage;
-
- /** Returns an ImageIcon, or null if the path was invalid.
- * @param path
- * @return */
- public static ImageIcon createImageIcon(String path) {
- java.net.URL imgURL = AdjustTerra.class.getResource(path);
- if (imgURL != null) {
- return new ImageIcon(imgURL);
- } else {
- System.err.println("Couldn't find file: " + path);
- return null;
- }
- }
- }