X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fload%2FJpegLoader.java;h=3e22eba029ccb76ce341a2fffaea6327669a28f1;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=feec754f22f7049dc7bcef4b26d71cba534d2ed2;hpb=140e9d165f85c3d4f0435a311e091209313faa2a;p=GpsPrune.git diff --git a/tim/prune/load/JpegLoader.java b/tim/prune/load/JpegLoader.java index feec754..3e22eba 100644 --- a/tim/prune/load/JpegLoader.java +++ b/tim/prune/load/JpegLoader.java @@ -1,39 +1,35 @@ package tim.prune.load; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.File; import java.util.TreeSet; -import javax.swing.BorderFactory; import javax.swing.BoxLayout; -import javax.swing.JButton; import javax.swing.JCheckBox; -import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; -import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JProgressBar; import tim.prune.App; import tim.prune.I18nManager; import tim.prune.config.Config; import tim.prune.data.Altitude; import tim.prune.data.DataPoint; -import tim.prune.data.Field; import tim.prune.data.LatLonRectangle; import tim.prune.data.Latitude; import tim.prune.data.Longitude; import tim.prune.data.Photo; import tim.prune.data.Timestamp; -import tim.prune.jpeg.ExifGateway; +import tim.prune.data.TimestampLocal; +import tim.prune.data.TimestampUtc; +import tim.prune.data.UnitSetLibrary; +import tim.prune.function.Cancellable; +import tim.prune.jpeg.InternalExifLibrary; import tim.prune.jpeg.JpegData; /** * Class to manage the loading of Jpegs and dealing with the GPS data from them */ -public class JpegLoader implements Runnable +public class JpegLoader implements Runnable, Cancellable { private App _app = null; private JFrame _parentFrame = null; @@ -42,8 +38,7 @@ public class JpegLoader implements Runnable private JCheckBox _subdirCheckbox = null; private JCheckBox _noExifCheckbox = null; private JCheckBox _outsideAreaCheckbox = null; - private JDialog _progressDialog = null; - private JProgressBar _progressBar = null; + private MediaLoadProgressDialog _progressDialog = null; private int[] _fileCounts = null; private boolean _cancelled = false; private LatLonRectangle _trackRectangle = null; @@ -59,8 +54,7 @@ public class JpegLoader implements Runnable { _app = inApp; _parentFrame = inParentFrame; - String[] fileTypes = {"jpg", "jpe", "jpeg"}; - _fileFilter = new GenericFileFilter("filetype.jpeg", fileTypes); + _fileFilter = new JpegFileFilter(); } @@ -102,45 +96,16 @@ public class JpegLoader implements Runnable if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION) { // Bring up dialog before starting - if (_progressDialog == null) { - createProgressDialog(); - } - // reset dialog and show it - _progressBar.setValue(0); - _progressBar.setString(""); - _progressDialog.setVisible(true); + _progressDialog = new MediaLoadProgressDialog(_parentFrame, this); + _progressDialog.show(); // start thread for processing new Thread(this).start(); } } - - /** - * Create the dialog to show the progress - */ - private void createProgressDialog() - { - _progressDialog = new JDialog(_parentFrame, I18nManager.getText("dialog.jpegload.progress.title")); - _progressDialog.setLocationRelativeTo(_parentFrame); - _progressBar = new JProgressBar(0, 100); - _progressBar.setValue(0); - _progressBar.setStringPainted(true); - _progressBar.setString(""); - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); - panel.add(new JLabel(I18nManager.getText("dialog.jpegload.progress"))); - panel.add(_progressBar); - JButton cancelButton = new JButton(I18nManager.getText("button.cancel")); - cancelButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _cancelled = true; - } - }); - panel.add(cancelButton); - _progressDialog.getContentPane().add(panel); - _progressDialog.pack(); + /** Cancel */ + public void cancel() { + _cancelled = true; } @@ -150,24 +115,20 @@ public class JpegLoader implements Runnable public void run() { // Initialise arrays, errors, summaries - _fileCounts = new int[4]; // files, jpegs, exifs, gps - _photos = new TreeSet(new PhotoSorter()); + _fileCounts = new int[3]; // files, jpegs, gps + _photos = new TreeSet(new MediaSorter()); File[] files = _fileChooser.getSelectedFiles(); // Loop recursively over selected files/directories to count files int numFiles = countFileList(files, true, _subdirCheckbox.isSelected()); // Set up the progress bar for this number of files - _progressBar.setMaximum(numFiles); - _progressBar.setValue(0); + _progressDialog.showProgress(0, numFiles); _cancelled = false; // Process the files recursively and build lists of photos processFileList(files, true, _subdirCheckbox.isSelected()); - _progressDialog.setVisible(false); - _progressDialog.dispose(); // Sometimes dialog doesn't disappear without this dispose + _progressDialog.close(); if (_cancelled) {return;} - //System.out.println("Finished - counts are: " + _fileCounts[0] + ", " + _fileCounts[1] - // + ", " + _fileCounts[2] + ", " + _fileCounts[3]); if (_fileCounts[0] == 0) { // No files found at all @@ -179,11 +140,6 @@ public class JpegLoader implements Runnable _app.showErrorMessage("error.jpegload.dialogtitle", "error.jpegload.nojpegsfound"); } else if (!_noExifCheckbox.isSelected() && _fileCounts[2] == 0) - { - // Need coordinates but no exif found - _app.showErrorMessage("error.jpegload.dialogtitle", "error.jpegload.noexiffound"); - } - else if (!_noExifCheckbox.isSelected() && _fileCounts[3] == 0) { // Need coordinates but no gps information found _app.showErrorMessage("error.jpegload.dialogtitle", "error.jpegload.nogpsfound"); @@ -204,29 +160,27 @@ public class JpegLoader implements Runnable */ private void processFileList(File[] inFiles, boolean inFirstDir, boolean inDescend) { - if (inFiles != null) + if (inFiles == null) return; + // Loop over elements in array + for (int i=0; i