• R/O
  • HTTP
  • SSH
  • HTTPS

importpicture: Commit


Commit MetaInfo

Revision5e457a6c11328afbb8b6eccfba0b04b12b9bcdf6 (tree)
Time2019-10-20 12:08:05
Authorhaya4 <hayashi.yuu@gmai...>
Commiterhaya4

Log Message

doing: AdjustTime - 1〜2パネル

Change Summary

Incremental Difference

--- a/src/osm/jp/gpx/matchtime/gui/AdjustTime.java
+++ b/src/osm/jp/gpx/matchtime/gui/AdjustTime.java
@@ -3,21 +3,17 @@ package osm.jp.gpx.matchtime.gui;
33 import osm.jp.gpx.matchtime.gui.restamp.RestampDialog;
44 import java.awt.*;
55 import java.awt.event.ActionEvent;
6-import java.io.File;
76 import java.io.IOException;
87 import java.text.SimpleDateFormat;
9-import java.util.Date;
108 import java.util.ResourceBundle;
119 import java.util.TimeZone;
1210 import java.util.logging.Level;
1311 import java.util.logging.Logger;
1412 import javax.swing.*;
13+import javax.swing.event.DocumentEvent;
1514 import osm.jp.gpx.*;
16-import org.apache.commons.imaging.Imaging;
17-import org.apache.commons.imaging.common.ImageMetadata;
18-import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
19-import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
20-import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
15+import osm.jp.gpx.matchtime.gui.restamp.CardImageFile;
16+import osm.jp.gpx.matchtime.gui.restamp.CardSourceFolder;
2117
2218 /**
2319 * 本プログラムのメインクラス
@@ -38,19 +34,18 @@ public class AdjustTime extends JFrame
3834
3935 //{{DECLARE_CONTROLS
4036 JTabbedPane cardPanel; // ウィザード形式パネル(タブ型)
41- JPanel[] cards;
37+ Card[] cards;
4238 int cardPanelNo = 0;
4339 JPanel argsPanel; // パラメータ設定パネル (上部)
4440 JScrollPane imageSPane; // スクロールパネル
4541 JLabel imageLabel; // 基準時刻画像表示
46- ButtonGroup baseTimeGroup; // 基準時刻の指定グループ
47- JRadioButton exifBase; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
48- JRadioButton fupdateBase; // File更新日時を基準にする/ !(EXIF日時を基準にする)
42+ //ButtonGroup baseTimeGroup; // 基準時刻の指定グループ
43+ //JRadioButton exifBase; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
44+ //JRadioButton fupdateBase; // File更新日時を基準にする/ !(EXIF日時を基準にする)
4945 JCheckBox noFirstNode; // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
5046 JCheckBox gpxReuse; // 生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。 {ON | OFF}
5147 JTextArea textArea; // 実行結果表示領域
52- ParameterPanelFolder arg1_srcFolder;
53- ParameterPanelImageFile arg2_baseTimeImg;
48+
5449 ParameterPanel arg3_basetime; // 基準時刻:
5550 JCheckBox outputIMG; // IMGの変換 する/しない
5651 JCheckBox outputIMG_all; // 'out of GPX time'でもIMGの変換をする {ON | OFF}
@@ -62,13 +57,18 @@ public class AdjustTime extends JFrame
6257 ParameterPanelGpx arg4_gpxFolder; // GPXファイル・フォルダ
6358
6459 JPanel buttonPanel; // ボタンパネル (下部)
65- JButton openButton; // [Fit]ボタン
66- JButton zoomInButton; // [Zoom in]ボタン
67- JButton zoomOutButton; // [Zoom out]ボタン
60+ //JButton openButton; // [Fit]ボタン
61+ //JButton zoomInButton; // [Zoom in]ボタン
62+ //JButton zoomOutButton; // [Zoom out]ボタン
6863
6964 JButton doButton; // [処理実行]ボタン
7065 //}}
7166
67+ //---入力フィールド----------------------------------------------------
68+ ParameterPanelFolder arg1_srcFolder; // 対象フォルダ
69+ ParameterPanelImageFile arg2_baseTimeImg; // 開始画像ファイルパス
70+ ParameterPanelTime arg2_basetime; // 開始画像の基準時刻:
71+
7272 //{{DECLARE_MENUS
7373 java.awt.MenuBar mainMenuBar;
7474 java.awt.Menu menu1;
@@ -113,6 +113,7 @@ public class AdjustTime extends JFrame
113113 else if (object == miExit) {
114114 miExit_Action(event);
115115 }
116+ /*
116117 else if (object == openButton) {
117118 imageView_Action(event);
118119 }
@@ -129,6 +130,7 @@ public class AdjustTime extends JFrame
129130 selectImage_Action(event);
130131 imageView_Action(event);
131132 }
133+ */
132134 else if (object == outputIMG) {
133135 outputIMG_Action(event);
134136 }
@@ -190,76 +192,98 @@ public class AdjustTime extends JFrame
190192 cardPanel = new JTabbedPane(JTabbedPane.LEFT);
191193 mainPanel.add(cardPanel, BorderLayout.CENTER);
192194
193- cards = new JPanel[5];
194- cardPanelNo = 0;
195+ cards = new Card[5];
196+ int cardNo = 0;
195197
196198 //---------------------------------------------------------------------
197199 // 1.[対象フォルダ]設定パネル
198- int cardNo = 0;
199200 {
200- Card card = new Card(cardPanel, i18n.getString("tab.100"), -1, 1);
201+ arg1_srcFolder = new ParameterPanelFolder(
202+ i18n.getString("label.110") +": ",
203+ params.getProperty(AppParameters.IMG_SOURCE_FOLDER)
204+ );
205+ arg1_srcFolder.argField
206+ .getDocument()
207+ .addDocumentListener(
208+ new SimpleDocumentListener() {
209+ @Override
210+ public void update(DocumentEvent e) {
211+ toEnable(0, arg1_srcFolder.isEnable());
212+ }
213+ }
214+ );
215+
216+ Card card = new CardSourceFolder(cardPanel, arg1_srcFolder);
201217 cardPanel.addTab(card.getTitle(), card);
218+ cardPanel.setEnabledAt(cardNo, true);
202219 cards[cardNo] = card;
203-
204- JLabel label1 = new JLabel();
205- label1.setText(i18n.getString("label.100"));
206- card.mainPanel.add(label1, BorderLayout.NORTH);
207-
208- argsPanel = new JPanel();
209- argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
210- arg1_srcFolder = new ParameterPanelFolder(i18n.getString("label.110") +": ", params.getProperty(AppParameters.IMG_SOURCE_FOLDER));
211- argsPanel.add(arg1_srcFolder);
212- card.mainPanel.add(argsPanel, BorderLayout.CENTER);
220+ cardNo++;
213221 }
214222
215223 //---------------------------------------------------------------------
216224 // 2.[基準時刻画像]設定パネル
217- cardNo++;
225+ // 2a.基準時刻の入力画面
218226 {
219- Card card = new Card(cardPanel, i18n.getString("tab.200"), 0, 2);
220- cardPanel.addTab(card.getTitle(), card);
221- cards[cardNo] = card;
222-
223- JLabel label2 = new JLabel();
224- label2.setText(i18n.getString("label.200"));
225- card.mainPanel.add(label2, BorderLayout.NORTH);
226-
227- argsPanel = new JPanel();
228-
229227 // 基準時刻画像
230- argsPanel.setLayout(new BoxLayout(argsPanel, BoxLayout.Y_AXIS));
231228 arg2_baseTimeImg = new ParameterPanelImageFile(
232229 i18n.getString("label.210") +": ",
233- params.getProperty(AppParameters.IMG_BASE_FILE),
230+ null,
234231 arg1_srcFolder
235232 );
236- argsPanel.add(arg2_baseTimeImg);
237-
238- baseTimeGroup = new ButtonGroup();
239233
234+ // 2a. 基準時刻:
235+ arg2_basetime = new ParameterPanelTime(
236+ i18n.getString("label.310"),
237+ null,
238+ arg2_baseTimeImg
239+ );
240+ arg2_basetime.argField.getDocument().addDocumentListener(
241+ new SimpleDocumentListener() {
242+ @Override
243+ public void update(DocumentEvent e) {
244+ toEnable(1, arg2_basetime.isEnable());
245+ }
246+ }
247+ );
248+
240249 // EXIFの日時を基準にする
241- exifBase = new JRadioButton(i18n.getString("label.220"));
250+ arg2_basetime.addExifBase(i18n.getString("label.220"), params);
251+ //exifBase = new JRadioButton(i18n.getString("label.220"));
242252
243253 // ファイル更新日時を基準にする
244- fupdateBase = new JRadioButton(i18n.getString("label.230"));
245- baseTimeGroup.add(exifBase);
246- baseTimeGroup.add(fupdateBase);
247- argsPanel.add(exifBase);
248- argsPanel.add(fupdateBase);
249- if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
250- fupdateBase.setSelected(false);
251- exifBase.setSelected(true);
252- }
253- else {
254- fupdateBase.setSelected(true);
255- exifBase.setSelected(false);
256- }
257- card.mainPanel.add(argsPanel, BorderLayout.CENTER);
254+ arg2_basetime.addFileUpdate(i18n.getString("label.230"), params);
255+ //fupdateBase = new JRadioButton(i18n.getString("label.230"));
256+
257+ //baseTimeGroup = new ButtonGroup();
258+ //baseTimeGroup.add(exifBase);
259+ //baseTimeGroup.add(fupdateBase);
260+ //argsPanel.add(exifBase);
261+ //argsPanel.add(fupdateBase);
262+ //if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
263+ // fupdateBase.setSelected(false);
264+ // exifBase.setSelected(true);
265+ //}
266+ //else {
267+ // fupdateBase.setSelected(true);
268+ // exifBase.setSelected(false);
269+ //}
270+
271+ //JLabel label2 = new JLabel();
272+ //label2.setText(i18n.getString("label.200"));
273+ //card.mainPanel.add(label2, BorderLayout.NORTH);
274+ //card.mainPanel.add(argsPanel, BorderLayout.CENTER);
275+
276+ CardImageFile card = new CardImageFile(
277+ cardPanel, arg2_basetime, (Window)this,
278+ AdjustTime.i18n.getString("tab.300"), 0, 2);
279+ cardPanel.addTab(card.getTitle(), card);
280+ cardPanel.setEnabledAt(cardNo, false);
281+ cards[cardNo] = card;
282+ cardNo++;
258283 }
259284
260285 //---------------------------------------------------------------------
261286 // 2a.基準時刻の入力画面
262- cardNo++;
263287 {
264288 Card card = new Card(cardPanel, i18n.getString("tab.300"), 1, 3);
265289 cardPanel.addTab(card.getTitle(), card);
@@ -270,11 +294,14 @@ public class AdjustTime extends JFrame
270294
271295 // 3. 正確な撮影時刻を入力してください。
272296 // カメラの時計が正確ならば、設定を変更する必要はありません。
297+ /*
273298 JLabel label3 = new JLabel();
274299 label3.setText(i18n.getString("label.300"));
275300 argsPanel.add(label3);
276-
301+ */
302+
277303 // 基準時刻:
304+ /*
278305 String str310 = String.format("  %s: ", i18n.getString("label.310"));
279306 arg3_basetime = new ParameterPanelTime(
280307 str310,
@@ -283,13 +310,17 @@ public class AdjustTime extends JFrame
283310 );
284311 argsPanel.add(arg3_basetime);
285312 card.mainPanel.add(argsPanel, BorderLayout.NORTH);
313+ */
286314
287315 // 参考画像
316+ /*
288317 imageLabel = new JLabel();
289318 imageSPane = new JScrollPane(imageLabel);
290319 card.mainPanel.add(imageSPane, BorderLayout.CENTER);
320+ */
291321
292322 // 画像ファイル選択ダイアログを起動するボタン
323+ /*
293324 buttonPanel = new JPanel();
294325 buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
295326 openButton = new JButton(createImageIcon("images/Fit16.gif"));
@@ -299,11 +330,11 @@ public class AdjustTime extends JFrame
299330 zoomOutButton = new JButton(createImageIcon("images/ZoomOut16.gif"));
300331 buttonPanel.add(zoomOutButton);
301332 card.mainPanel.add(buttonPanel, BorderLayout.SOUTH);
333+ */
302334 }
303335
304336 //---------------------------------------------------------------------
305337 // 3.GPXファイル設定画面
306- cardNo++;
307338 {
308339 // 3. GPXファイルを選択
309340 Card card = new Card(cardPanel, i18n.getString("tab.400"), 2, 4);
@@ -341,11 +372,11 @@ public class AdjustTime extends JFrame
341372 gpxReuse.setEnabled(true);
342373 tmpPanel4a.add(gpxReuse);
343374 card.mainPanel.add(tmpPanel4a, BorderLayout.CENTER);
375+ cardNo++;
344376 }
345377
346378 //---------------------------------------------------------------------
347379 // 4.EXIF更新設定画面
348- cardNo++;
349380 {
350381 Card card = new Card(cardPanel, i18n.getString("tab.500"), 3, -1);
351382 cardPanel.addTab(card.getTitle(), card);
@@ -428,6 +459,7 @@ public class AdjustTime extends JFrame
428459 AdjustTime.createImageIcon("images/media_playback_start.png")
429460 );
430461 card.mainPanel.add(doButton, BorderLayout.SOUTH);
462+ cardNo++;
431463 }
432464
433465 //---------------------------------------------------------------------
@@ -465,9 +497,11 @@ public class AdjustTime extends JFrame
465497 miAbout.addActionListener(lSymAction);
466498 miRestamp.addActionListener(lSymAction);
467499 miExit.addActionListener(lSymAction);
500+ /*
468501 openButton.addActionListener(lSymAction);
469502 zoomOutButton.addActionListener(lSymAction);
470503 zoomInButton.addActionListener(lSymAction);
504+ */
471505 //arg2_baseTimeImg.argField.addActionListener(lSymAction);
472506 arg2_baseTimeImg.openButton.addActionListener(lSymAction);
473507 doButton.addActionListener(lSymAction);
@@ -552,6 +586,20 @@ public class AdjustTime extends JFrame
552586 //(new hayashi.yuu.tools.gui.QuitDialog(this, true)).setVisible(true);
553587 (new QuitDialog(this, true)).setVisible(true);
554588 }
589+
590+ void toEnable(final int cardNo, final boolean enable) {
591+ if ((cardNo >= 0) && (cardNo < cards.length)) {
592+ cardPanel.setEnabledAt(cardNo, enable);
593+ if ((cardNo -1) >= 0) {
594+ cards[cardNo -1].nextButton.setEnabled(enable);
595+ }
596+ if ((cardNo +1) < cards.length) {
597+ cardPanel.setEnabledAt(cardNo+1, enable);
598+ cards[cardNo +1].backButton.setEnabled(enable);
599+ cards[cardNo].nextButton.setEnabled(enable);
600+ }
601+ }
602+ }
555603
556604 ImageIcon refImage;
557605
@@ -560,6 +608,7 @@ public class AdjustTime extends JFrame
560608 * 基準画像ボタンがクリックされた時に、基準時刻フィールドに基準画像の作成日時を設定する。
561609 * @param ev
562610 */
611+ /*
563612 @SuppressWarnings("UseSpecificCatch")
564613 public void imageView_Action(ActionEvent ev) {
565614 String path = (new File(arg1_srcFolder.getText(), arg2_baseTimeImg.getText())).getPath();
@@ -597,7 +646,9 @@ public class AdjustTime extends JFrame
597646 imageLabel.setIcon(refImage);
598647 repaint();
599648 }
649+ */
600650
651+ /*
601652 public void zoomin_Action(ActionEvent ev) {
602653 if (refImage != null) {
603654 int size_x = imageLabel.getWidth();
@@ -608,7 +659,9 @@ public class AdjustTime extends JFrame
608659 repaint();
609660 }
610661 }
662+ */
611663
664+ /*
612665 public void zoomout_Action(ActionEvent ev) {
613666 if (refImage != null) {
614667 int size_x = imageLabel.getWidth();
@@ -618,6 +671,7 @@ public class AdjustTime extends JFrame
618671 repaint();
619672 }
620673 }
674+ */
621675
622676 /**
623677 * ソースディレクトリが選択された時のアクション
@@ -627,6 +681,7 @@ public class AdjustTime extends JFrame
627681 public void selectSource_Action(ActionEvent ev) {
628682 }
629683
684+ /*
630685 public void selectImage_Action(ActionEvent ev) {
631686 JFileChooser fc;
632687
@@ -663,6 +718,7 @@ public class AdjustTime extends JFrame
663718 //Reset the file chooser for the next time it's shown.
664719 fc.setSelectedFile(null);
665720 }
721+ */
666722
667723 /** Returns an ImageIcon, or null if the path was invalid.
668724 * @param path
@@ -727,13 +783,14 @@ public class AdjustTime extends JFrame
727783 this.params.setProperty(AppParameters.GPX_NO_FIRST_NODE, String.valueOf(noFirstNode.isSelected()));
728784 this.params.setProperty(AppParameters.GPX_REUSE, String.valueOf(gpxReuse.isSelected()));
729785 this.params.setProperty(AppParameters.GPX_SOURCE_FOLDER, arg4_gpxFolder.getText());
730-
786+ /*
731787 if (exifBase.isSelected()) {
732788 this.params.setProperty(AppParameters.GPX_BASETIME, "EXIF_TIME");
733789 }
734790 else {
735791 this.params.setProperty(AppParameters.GPX_BASETIME, "FILE_UPDATE");
736792 }
793+ */
737794 try {
738795 this.params.setProperty(AppParameters.IMG_SOURCE_FOLDER, arg1_srcFolder.getText());
739796 this.params.setProperty(AppParameters.IMG_BASE_FILE, arg2_baseTimeImg.getText());
--- a/src/osm/jp/gpx/matchtime/gui/ParameterPanelImageFile.java
+++ b/src/osm/jp/gpx/matchtime/gui/ParameterPanelImageFile.java
@@ -56,7 +56,7 @@ public class ParameterPanelImageFile extends ParameterPanel {
5656 int returnVal = fc.showDialog(ParameterPanelImageFile.this, i18n.getString("dialog.select"));
5757 if (returnVal == JFileChooser.APPROVE_OPTION) {
5858 File file = fc.getSelectedFile();
59- argField.setText(file.getName());
59+ this.argField.setText(file.getName());
6060 }
6161 fc.setSelectedFile(null);
6262 }
--- a/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java
+++ b/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java
@@ -1,13 +1,22 @@
11 package osm.jp.gpx.matchtime.gui;
22
3-import java.awt.Dialog;
3+import java.awt.Window;
44 import java.awt.event.ActionEvent;
55 import java.io.File;
66 import java.text.DateFormat;
77 import java.text.SimpleDateFormat;
88 import java.util.Date;
9+import javax.swing.ButtonGroup;
910 import javax.swing.JButton;
11+import javax.swing.JRadioButton;
12+import org.apache.commons.imaging.Imaging;
13+import org.apache.commons.imaging.common.ImageMetadata;
14+import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
15+import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
16+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
17+import osm.jp.gpx.AppParameters;
1018 import osm.jp.gpx.Restamp;
19+import static osm.jp.gpx.matchtime.gui.AdjustTime.dfjp;
1120 import osm.jp.gpx.matchtime.gui.restamp.DialogCorectTime;
1221
1322 /**
@@ -16,10 +25,17 @@ import osm.jp.gpx.matchtime.gui.restamp.DialogCorectTime;
1625 */
1726 public class ParameterPanelTime extends ParameterPanel {
1827 SimpleDateFormat sdf = (SimpleDateFormat)DateFormat.getDateTimeInstance();
19- ParameterPanelImageFile imageFile;
28+ ParameterPanelImageFile imageFile; // 基準時刻画像
29+
30+
31+ // 基準時刻の指定グループ (排他選択)
32+ public ButtonGroup baseTimeGroup = new ButtonGroup();
33+ public JRadioButton exifBase = null; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
34+ public JRadioButton fupdateBase = null; // File更新日時を基準にする/ !(EXIF日時を基準にする)
35+
2036 public JButton updateButton;
2137 public JButton resetButton;
22- Dialog owner;
38+ Window owner;
2339
2440 @SuppressWarnings("OverridableMethodCallInConstructor")
2541 public ParameterPanelTime(
@@ -44,13 +60,46 @@ public class ParameterPanelTime extends ParameterPanel {
4460 this.add(resetButton);
4561 }
4662
47- public ParameterPanelTime setOwner(Dialog owner) {
63+ public ParameterPanelTime setOwner(Window owner) {
4864 this.owner = owner;
4965 return this;
5066 }
5167
5268 /**
53- * ボタンのアクション
69+ * 「EXIFの日時を基準にする」
70+ * @param label テキスト
71+ * @param params プロパティ
72+ */
73+ public void addExifBase(String label, AppParameters params) {
74+ boolean selected = false;
75+ if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
76+ selected = true;
77+ }
78+ exifBase = new JRadioButton(label, selected);
79+ baseTimeGroup.add(exifBase);
80+ }
81+
82+ /**
83+ * 「File更新日時を基準にする」
84+ * @param label テキスト
85+ * @param params プロパティ
86+ */
87+ public void addFileUpdate(String label, AppParameters params) {
88+ boolean selected = false;
89+ if (params.getProperty(AppParameters.GPX_BASETIME).equals("FILE_UPDATE_TIME")) {
90+ selected = true;
91+ }
92+ fupdateBase = new JRadioButton(label, selected);
93+ baseTimeGroup.add(fupdateBase);
94+ }
95+
96+ public ParameterPanelImageFile getImageFile() {
97+ return this.imageFile;
98+ }
99+
100+
101+ /**
102+ * [変更...]ボタンのアクション
54103 */
55104 class UpdateButtonAction implements java.awt.event.ActionListener
56105 {
@@ -62,39 +111,69 @@ public class ParameterPanelTime extends ParameterPanel {
62111
63112 @SuppressWarnings("override")
64113 public void actionPerformed(ActionEvent e) {
114+ fileSelect_Action(param);
65115 (new DialogCorectTime(param, owner)).setVisible(true);
66116 }
67117 }
68118
69119 /**
70- * ボタンのアクション
120+ * [再設定...]ボタンのアクション
71121 */
72122 class ResetButtonAction implements java.awt.event.ActionListener
73123 {
74- ParameterPanelTime param;
124+ ParameterPanelTime paramPanelTime;
75125
76126 public ResetButtonAction(ParameterPanelTime param) {
77- this.param = param;
127+ this.paramPanelTime = param;
78128 }
79129
80130 @SuppressWarnings("override")
81131 public void actionPerformed(ActionEvent e) {
82- if (param.imageFile.isEnable()) {
83- File file = param.imageFile.getImageFile();
84- long lastModified = file.lastModified();
85- sdf.applyPattern(Restamp.TIME_PATTERN);
86- param.argField.setText(sdf.format(new Date(lastModified)));
132+ fileSelect_Action(paramPanelTime);
133+ }
134+ }
135+
136+ /**
137+ * 画像ファイルが選択されたときのアクション
138+ * 1.ラジオボタンの選択を参照してTEXTフィールドにファイルの「日時」を設定する
139+ * @param param
140+ */
141+ void fileSelect_Action(ParameterPanelTime param) {
142+ if (imageFile.isEnable()) {
143+ File timeFile = imageFile.getImageFile();
144+
145+ // Radio Selecter
146+ sdf.applyPattern(Restamp.TIME_PATTERN);
147+ if ((exifBase != null) && exifBase.isSelected()) {
148+ try {
149+ ImageMetadata meta = Imaging.getMetadata(timeFile);
150+ JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
151+ if (jpegMetadata != null) {
152+ TiffImageMetadata exif = jpegMetadata.getExif();
153+ if (exif != null) {
154+ String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];
155+ long lastModifyTime = sdf.parse(dateTimeOriginal).getTime();
156+ param.argField.setText(dfjp.format(new Date(lastModifyTime)));
157+ }
158+ else {
159+ param.argField.setText("exif == null");
160+ }
161+ }
162+ }
163+ catch (Exception ex) {
164+ while(true);
165+ }
87166 }
88167 else {
89- param.argField.setText("");
168+ long lastModified = timeFile.lastModified();
169+ param.argField.setText(sdf.format(new Date(lastModified)));
90170 }
91171 }
172+ else {
173+ param.argField.setText("");
174+ }
92175 }
93176
94- public ParameterPanelImageFile getImageFile() {
95- return this.imageFile;
96- }
97-
98177 @Override
99178 public boolean isEnable() {
100179 if (this.imageFile.isEnable()) {
--- a/src/osm/jp/gpx/matchtime/gui/restamp/CardImageFile.java
+++ b/src/osm/jp/gpx/matchtime/gui/restamp/CardImageFile.java
@@ -2,12 +2,11 @@ package osm.jp.gpx.matchtime.gui.restamp;
22
33 import java.awt.BorderLayout;
44 import java.awt.Dimension;
5-import java.awt.Dialog;
5+import java.awt.Window;
66 import javax.swing.BoxLayout;
77 import javax.swing.JLabel;
88 import javax.swing.JPanel;
99 import javax.swing.JTabbedPane;
10-import osm.jp.gpx.matchtime.gui.AdjustTime;
1110 import static osm.jp.gpx.matchtime.gui.AdjustTime.i18n;
1211 import osm.jp.gpx.matchtime.gui.Card;
1312 import osm.jp.gpx.matchtime.gui.PanelAction;
@@ -28,19 +27,23 @@ public class CardImageFile extends Card implements PanelAction {
2827 * @param tabbe parent panel
2928 * @param arg_basetime // 開始画像の基準時刻:
3029 * @param owner
31- * @param first // true=開始画像, false=終了画像
30+ * @param text
31+ * @param pre
32+ * @param next
3233 */
3334 public CardImageFile(
3435 JTabbedPane tabbe,
3536 ParameterPanelTime arg_basetime,
36- Dialog owner,
37- boolean first
37+ Window owner,
38+ String text,
39+ int pre, int next
3840 ) {
3941 super(
4042 tabbe,
41- AdjustTime.i18n.getString(first ? "tab.restamp.200" : "tab.restamp.250"),
42- (first ? 0 : 1),
43- (first ? 2 : 3)
43+ //AdjustTime.i18n.getString(first ? "tab.restamp.200" : "tab.restamp.250"),
44+ text, pre, next
45+ //(first ? 0 : 1),
46+ //(first ? 2 : 3)
4447 );
4548 arg_basetime.setOwner(owner);
4649 this.arg_baseTimeImg = arg_basetime.getImageFile();
@@ -58,6 +61,16 @@ public class CardImageFile extends Card implements PanelAction {
5861 argsPanel.add(packLine(new JLabel(i18n.getString("label.300")), new JPanel()));
5962 argsPanel.add(arg_basetime);
6063
64+ // ラジオボタン: 「EXIF日時を基準にする」
65+ if (arg_basetime.exifBase != null) {
66+ argsPanel.add(arg_basetime.exifBase);
67+ }
68+
69+ // ラジオボタン: 「File更新日時を基準にする」
70+ if (arg_basetime.fupdateBase != null) {
71+ argsPanel.add(arg_basetime.fupdateBase);
72+ }
73+
6174 JPanel space = new JPanel();
6275 space.setMinimumSize(new Dimension(40, 20));
6376 space.setMaximumSize(new Dimension(40, Short.MAX_VALUE));
--- a/src/osm/jp/gpx/matchtime/gui/restamp/DialogCorectTime.java
+++ b/src/osm/jp/gpx/matchtime/gui/restamp/DialogCorectTime.java
@@ -5,8 +5,7 @@ import java.awt.Dialog;
55 import java.awt.GridLayout;
66 import java.awt.Image;
77 import java.awt.Rectangle;
8-import java.awt.event.ActionEvent;
9-import java.io.File;
8+import java.awt.Window;
109 import javax.swing.BoxLayout;
1110 import javax.swing.ImageIcon;
1211 import javax.swing.JButton;
@@ -26,8 +25,8 @@ import osm.jp.gpx.matchtime.gui.ParameterPanelTime;
2625 */
2726 public class DialogCorectTime extends JDialog implements PanelAction {
2827 public JPanel mainPanel;
29- ParameterPanelTime arg_basetime; // 開始画像の基準時刻:
30- ParameterPanelTime basetime; // 開始画像の基準時刻:
28+ ParameterPanelTime arg_basetime; // 開始画像の基準時刻(parent)
29+ ParameterPanelTime basetime; // 開始画像の基準時刻(tempolarry)
3130 java.awt.Button closeButton;
3231 JButton expandButton;
3332 JButton zoomInButton;
@@ -41,8 +40,8 @@ public class DialogCorectTime extends JDialog implements PanelAction {
4140 * @param owner
4241 */
4342 @SuppressWarnings("OverridableMethodCallInConstructor")
44- public DialogCorectTime(ParameterPanelTime arg3_basetime, Dialog owner) {
45- super(owner, AdjustTime.i18n.getString("tab.restamp.300"), false);
43+ public DialogCorectTime(ParameterPanelTime arg3_basetime, Window owner) {
44+ super(owner, AdjustTime.i18n.getString("tab.restamp.300"), Dialog.ModalityType.DOCUMENT_MODAL);
4645 this.arg_basetime = arg3_basetime;
4746
4847 // INIT_CONTROLS
@@ -69,9 +68,9 @@ public class DialogCorectTime extends JDialog implements PanelAction {
6968 argsPanel.add(label3);
7069
7170 basetime = new ParameterPanelTime(
72- arg3_basetime.argLabel.getText(),
71+ arg_basetime.argLabel.getText(),
7372 "",
74- arg3_basetime.getImageFile()
73+ arg_basetime.getImageFile()
7574 );
7675 basetime.updateButton.setVisible(false);
7776 basetime.resetButton.setVisible(true);
@@ -155,8 +154,37 @@ public class DialogCorectTime extends JDialog implements PanelAction {
155154 */
156155 @SuppressWarnings("UseSpecificCatch")
157156 public void imageView_Action() {
157+ String path = basetime.getImageFile().getImageFile().getAbsolutePath();
158+
159+ // Radio Selecter
160+ /*
161+ File timeFile = new File(path);
162+ if ((arg_basetime.exifBase != null) && arg_basetime.exifBase.isSelected()) {
163+ try {
164+ ImageMetadata meta = Imaging.getMetadata(timeFile);
165+ JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
166+ if (jpegMetadata != null) {
167+ TiffImageMetadata exif = jpegMetadata.getExif();
168+ if (exif != null) {
169+ String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];
170+ long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();
171+ arg_basetime.argField.setText(dfjp.format(new Date(lastModifyTime)));
172+ }
173+ else {
174+ arg_basetime.argField.setText("exif == null");
175+ }
176+ }
177+ }
178+ catch (Exception e) {}
179+ }
180+ else {
181+ long lastModifyTime = timeFile.lastModified();
182+ arg_basetime.argField.setText(dfjp.format(new Date(lastModifyTime)));
183+ }
184+ */
185+
186+ // View Image File
158187 int size_x = imageSPane.getWidth() - 8;
159- String path = arg_basetime.getImageFile().getImageFile().getAbsolutePath();
160188 ImageIcon tmpIcon = new ImageIcon(path);
161189 refImage = tmpIcon;
162190 if (tmpIcon.getIconWidth() > size_x) {
@@ -169,7 +197,7 @@ public class DialogCorectTime extends JDialog implements PanelAction {
169197 public void zoomin_Action() {
170198 if (refImage != null) {
171199 int size_x = imageLabel.getWidth();
172- String path = arg_basetime.getImageFile().getImageFile().getAbsolutePath();
200+ String path = basetime.getImageFile().getImageFile().getAbsolutePath();
173201 ImageIcon tmpIcon = new ImageIcon(path);
174202 refImage = new ImageIcon(tmpIcon.getImage().getScaledInstance(size_x * 2, -1, Image.SCALE_DEFAULT));
175203 imageLabel.setIcon(refImage);
@@ -219,6 +247,6 @@ public class DialogCorectTime extends JDialog implements PanelAction {
219247 */
220248 @Override
221249 public boolean isEnable() {
222- return this.arg_basetime.isEnable();
250+ return this.basetime.isEnable();
223251 }
224252 }
--- a/src/osm/jp/gpx/matchtime/gui/restamp/RestampDialog.java
+++ b/src/osm/jp/gpx/matchtime/gui/restamp/RestampDialog.java
@@ -6,6 +6,7 @@ import java.util.Observer;
66 import javax.swing.*;
77 import javax.swing.event.DocumentEvent;
88 import osm.jp.gpx.AppParameters;
9+import osm.jp.gpx.matchtime.gui.AdjustTime;
910 import osm.jp.gpx.matchtime.gui.Card;
1011 import osm.jp.gpx.matchtime.gui.ParameterPanelFolder;
1112 import osm.jp.gpx.matchtime.gui.ParameterPanelImageFile;
@@ -152,7 +153,9 @@ public class RestampDialog extends JDialog implements Observer
152153 }
153154 );
154155
155- CardImageFile card = new CardImageFile(cardPanel, arg2_basetime, this, true);
156+ CardImageFile card = new CardImageFile(
157+ cardPanel, arg2_basetime, (Window)this,
158+ AdjustTime.i18n.getString("tab.restamp.200"), 0, 2);
156159 cardPanel.addTab(card.getTitle(), card);
157160 cardPanel.setEnabledAt(cardNo, false);
158161 cards[cardNo] = card;
@@ -184,7 +187,10 @@ public class RestampDialog extends JDialog implements Observer
184187 }
185188 );
186189
187- CardImageFile card = new CardImageFile(cardPanel, arg3_basetime, this, false);
190+ CardImageFile card = new CardImageFile(
191+ cardPanel, arg3_basetime, (Window)this,
192+ AdjustTime.i18n.getString("tab.restamp.250"), 1, 3
193+ );
188194 cardPanel.addTab(card.getTitle(), card);
189195 cardPanel.setEnabledAt(cardNo, false);
190196 cards[cardNo] = card;
Show on old repository browser