import javax.swing.JScrollPane;
import javax.swing.JTable;
+import tim.prune.Config;
import tim.prune.ExternalTools;
import tim.prune.I18nManager;
+import tim.prune.UpdateMessageBroker;
import tim.prune.data.Altitude;
import tim.prune.data.Coordinate;
import tim.prune.data.DataPoint;
import tim.prune.data.Photo;
import tim.prune.data.PhotoList;
-import tim.prune.data.PhotoStatus;
/**
* Class to call Exiftool to save coordinate information in jpg files
{
private Frame _parentFrame = null;
private JDialog _dialog = null;
+ private JButton _okButton = null;
private JCheckBox _overwriteCheckbox = null;
private JProgressBar _progressBar = null;
private PhotoTableModel _photoTableModel = null;
+ private boolean _saveCancelled = false;
// To preserve timestamps of file use parameter -P
public boolean saveExifInformation(PhotoList inPhotoList)
{
// Check if external exif tool can be called
- boolean exifToolInstalled = ExternalTools.isExiftoolInstalled();
+ boolean exifToolInstalled = ExternalTools.isToolInstalled(ExternalTools.TOOL_EXIFTOOL);
if (!exifToolInstalled)
{
// show warning
_dialog.pack();
// set progress bar and show dialog
_progressBar.setVisible(false);
- _dialog.show();
+ _dialog.setVisible(true);
return true;
}
// Lower panel with ok and cancel buttons
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
- JButton okButton = new JButton(I18nManager.getText("button.ok"));
- okButton.addActionListener(new ActionListener() {
+ _okButton = new JButton(I18nManager.getText("button.ok"));
+ _okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
+ // disable ok button
+ _okButton.setEnabled(false);
// start new thread to do save
new Thread(ExifSaver.this).start();
}
});
- buttonPanel.add(okButton);
+ buttonPanel.add(_okButton);
JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
+ _saveCancelled = true;
_dialog.dispose();
}
});
*/
public void run()
{
+ _saveCancelled = false;
PhotoTableEntry entry = null;
Photo photo = null;
int numPhotos = _photoTableModel.getRowCount();
for (int i=0; i<numPhotos; i++)
{
entry = _photoTableModel.getPhotoTableEntry(i);
- if (entry != null && entry.getSaveFlag())
+ if (entry != null && entry.getSaveFlag() && !_saveCancelled)
{
// Only look at photos which are selected and whose status has changed since load
photo = entry.getPhoto();
_progressBar.setValue(i + 1);
}
_progressBar.setVisible(false);
- // Show confirmation dialog
- JOptionPane.showMessageDialog(_dialog, I18nManager.getText("dialog.saveexif.ok1") + " "
- + numSaved + " " + I18nManager.getText("dialog.saveexif.ok2"),
- I18nManager.getText("dialog.saveexif.title"), JOptionPane.INFORMATION_MESSAGE);
+ // Show confirmation
+ UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.saveexif.ok1") + " "
+ + numSaved + " " + I18nManager.getText("confirm.saveexif.ok2"));
// close dialog, all finished
_dialog.dispose();
}
}
}
String[] command = null;
- if (inPhoto.getCurrentStatus() == PhotoStatus.NOT_CONNECTED)
+ if (inPhoto.getCurrentStatus() == Photo.Status.NOT_CONNECTED)
{
// Photo is no longer connected, so delete gps tags
command = getDeleteGpsExifTagsCommand(inPhoto.getFile(), inOverwriteFlag);
// Execute exif command
try
{
- Runtime.getRuntime().exec(command);
+ Process process = Runtime.getRuntime().exec(command);
+ // Wait for process to finish so not too many run in parallel
+ try {
+ process.waitFor();
+ }
+ catch (InterruptedException ie) {}
}
catch (Exception e)
{
{
// Make a string array to construct the command and its parameters
String[] result = new String[inOverwrite?5:4];
- result[0] = "exiftool";
+ result[0] = Config.getConfigString(Config.KEY_EXIFTOOL_PATH);
result[1] = "-P";
if (inOverwrite) {result[2] = " -overwrite_original_in_place";}
// remove all gps tags
{
// Make a string array to construct the command and its parameters
String[] result = new String[inOverwrite?10:9];
- result[0] = "exiftool";
+ result[0] = Config.getConfigString(Config.KEY_EXIFTOOL_PATH);
result[1] = "-P";
if (inOverwrite) {result[2] = "-overwrite_original_in_place";}
int paramOffset = inOverwrite?3:2;
result[paramOffset + 3] = "-GPSLongitudeRef=" + inPoint.getLongitude().output(Coordinate.FORMAT_CARDINAL);
// add altitude if it has it
result[paramOffset + 4] = "-GPSAltitude="
- + (inPoint.hasAltitude()?inPoint.getAltitude().getValue(Altitude.FORMAT_METRES):0);
+ + (inPoint.hasAltitude()?inPoint.getAltitude().getValue(Altitude.Format.METRES):0);
result[paramOffset + 5] = "-GPSAltitudeRef='Above Sea Level'";
// add the filename to modify
result[paramOffset + 6] = inFile.getAbsolutePath();