X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fosm%2Fjp%2Fgpx%2Fmatchtime%2Fgui%2FParameterPanelTime.java;h=8b21ccbd842e49ec0ee95a9fea7ddbb4f92a06d7;hb=5e457a6c11328afbb8b6eccfba0b04b12b9bcdf6;hp=8c27aebb0369dabf3c52a854c01b3481f97b715c;hpb=f981676e67330b84043f8c4ebaf7ec81b389d200;p=importpicture%2Fimportpicture.git diff --git a/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java b/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java index 8c27aeb..8b21ccb 100644 --- a/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java +++ b/src/osm/jp/gpx/matchtime/gui/ParameterPanelTime.java @@ -1,17 +1,41 @@ package osm.jp.gpx.matchtime.gui; +import java.awt.Window; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; +import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Date; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JRadioButton; +import org.apache.commons.imaging.Imaging; +import org.apache.commons.imaging.common.ImageMetadata; +import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata; +import org.apache.commons.imaging.formats.tiff.TiffImageMetadata; +import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants; +import osm.jp.gpx.AppParameters; +import osm.jp.gpx.Restamp; +import static osm.jp.gpx.matchtime.gui.AdjustTime.dfjp; +import osm.jp.gpx.matchtime.gui.restamp.DialogCorectTime; /** * パラメータを設定する為のパネル。 * この1インスタンスで、1パラメータをあらわす。 */ -public class ParameterPanelTime extends ParameterPanel implements ActionListener { +public class ParameterPanelTime extends ParameterPanel { SimpleDateFormat sdf = (SimpleDateFormat)DateFormat.getDateTimeInstance(); - ParameterPanelImageFile imageFile; + ParameterPanelImageFile imageFile; // 基準時刻画像 + + + // 基準時刻の指定グループ (排他選択) + public ButtonGroup baseTimeGroup = new ButtonGroup(); + public JRadioButton exifBase = null; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする) + public JRadioButton fupdateBase = null; // File更新日時を基準にする/ !(EXIF日時を基準にする) + + public JButton updateButton; + public JButton resetButton; + Window owner; @SuppressWarnings("OverridableMethodCallInConstructor") public ParameterPanelTime( @@ -21,24 +45,142 @@ public class ParameterPanelTime extends ParameterPanel implements ActionListener ) { super(label, text); this.imageFile = imageFile; + + // "ボタン[変更...]" + UpdateButtonAction buttonAction = new UpdateButtonAction(this); + updateButton = new JButton(i18n.getString("button.update")); + updateButton.addActionListener(buttonAction); + this.add(updateButton); + + // "ボタン[再設定...]" + ResetButtonAction resetAction = new ResetButtonAction(this); + resetButton = new JButton(i18n.getString("button.reset")); + resetButton.addActionListener(resetAction); + resetButton.setVisible(false); + this.add(resetButton); + } + + public ParameterPanelTime setOwner(Window owner) { + this.owner = owner; + return this; + } + + /** + * 「EXIFの日時を基準にする」 + * @param label テキスト + * @param params プロパティ + */ + public void addExifBase(String label, AppParameters params) { + boolean selected = false; + if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) { + selected = true; + } + exifBase = new JRadioButton(label, selected); + baseTimeGroup.add(exifBase); + } + + /** + * 「File更新日時を基準にする」 + * @param label テキスト + * @param params プロパティ + */ + public void addFileUpdate(String label, AppParameters params) { + boolean selected = false; + if (params.getProperty(AppParameters.GPX_BASETIME).equals("FILE_UPDATE_TIME")) { + selected = true; + } + fupdateBase = new JRadioButton(label, selected); + baseTimeGroup.add(fupdateBase); } public ParameterPanelImageFile getImageFile() { return this.imageFile; } - @Override - public void actionPerformed(ActionEvent arg0) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + + /** + * [変更...]ボタンのアクション + */ + class UpdateButtonAction implements java.awt.event.ActionListener + { + ParameterPanelTime param; + + public UpdateButtonAction(ParameterPanelTime param) { + this.param = param; + } + + @SuppressWarnings("override") + public void actionPerformed(ActionEvent e) { + fileSelect_Action(param); + (new DialogCorectTime(param, owner)).setVisible(true); + } } + + /** + * [再設定...]ボタンのアクション + */ + class ResetButtonAction implements java.awt.event.ActionListener + { + ParameterPanelTime paramPanelTime; + + public ResetButtonAction(ParameterPanelTime param) { + this.paramPanelTime = param; + } + + @SuppressWarnings("override") + public void actionPerformed(ActionEvent e) { + fileSelect_Action(paramPanelTime); + } + } + + /** + * 画像ファイルが選択されたときのアクション + * 1.ラジオボタンの選択を参照してTEXTフィールドにファイルの「日時」を設定する + * @param param + */ + void fileSelect_Action(ParameterPanelTime param) { + if (imageFile.isEnable()) { + File timeFile = imageFile.getImageFile(); + // Radio Selecter + sdf.applyPattern(Restamp.TIME_PATTERN); + if ((exifBase != null) && exifBase.isSelected()) { + try { + ImageMetadata meta = Imaging.getMetadata(timeFile); + JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta; + if (jpegMetadata != null) { + TiffImageMetadata exif = jpegMetadata.getExif(); + if (exif != null) { + String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0]; + long lastModifyTime = sdf.parse(dateTimeOriginal).getTime(); + param.argField.setText(dfjp.format(new Date(lastModifyTime))); + } + else { + param.argField.setText("exif == null"); + } + } + } + catch (Exception ex) { + while(true); + } + } + else { + long lastModified = timeFile.lastModified(); + param.argField.setText(sdf.format(new Date(lastModified))); + } + } + else { + param.argField.setText(""); + } + } + @Override public boolean isEnable() { if (this.imageFile.isEnable()) { String text = this.argField.getText(); if (text != null) { try { - sdf.applyPattern("yyyy.MM.dd HH:mm:ss z"); + sdf.applyPattern(Restamp.TIME_PATTERN); sdf.parse(text); return true; }