]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/load/FileLoader.java
Version 7, February 2009
[GpsPrune.git] / tim / prune / load / FileLoader.java
index c1bf3dfc1a8e05d202bf00923f2cb94fc37d1017..b3c03b435926411f67f6ab02d164e074d6616fa2 100644 (file)
@@ -4,11 +4,11 @@ import java.io.File;
 
 import javax.swing.JFileChooser;
 import javax.swing.JFrame;
-import javax.swing.JOptionPane;
 
 import tim.prune.App;
-import tim.prune.I18nManager;
+import tim.prune.Config;
 import tim.prune.load.xml.XmlFileLoader;
+import tim.prune.load.xml.ZipFileLoader;
 
 
 /**
@@ -17,10 +17,12 @@ import tim.prune.load.xml.XmlFileLoader;
  */
 public class FileLoader
 {
+       private App _app;
        private JFileChooser _fileChooser = null;
        private JFrame _parentFrame;
        private TextFileLoader _textFileLoader = null;
        private XmlFileLoader _xmlFileLoader = null;
+       private ZipFileLoader _zipFileLoader = null;
 
 
        /**
@@ -30,9 +32,11 @@ public class FileLoader
         */
        public FileLoader(App inApp, JFrame inParentFrame)
        {
+               _app = inApp;
                _parentFrame = inParentFrame;
                _textFileLoader = new TextFileLoader(inApp, inParentFrame);
-               _xmlFileLoader = new XmlFileLoader(inApp, inParentFrame);
+               _xmlFileLoader = new XmlFileLoader(inApp);
+               _zipFileLoader = new ZipFileLoader(inApp, _xmlFileLoader);
        }
 
 
@@ -42,14 +46,28 @@ public class FileLoader
         */
        public void openFile()
        {
+               // Construct file chooser if necessary
                if (_fileChooser == null)
+               {
                        _fileChooser = new JFileChooser();
+                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
+                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
+                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
+                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kmz", new String[] {"kmz"}));
+                       _fileChooser.setAcceptAllFileFilterUsed(true);
+                       // start from directory in config if already set (by load jpegs)
+                       File configDir = Config.getWorkingDirectory();
+                       if (configDir != null) {_fileChooser.setCurrentDirectory(configDir);}
+               }
+               // Show the open dialog
                if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
                {
                        File file = _fileChooser.getSelectedFile();
                        // Check file exists and is readable
                        if (file != null && file.exists() && file.canRead())
                        {
+                               // Store directory in config for later
+                               Config.setWorkingDirectory(file.getParentFile());
                                // Check file type to see if it's xml or just normal text
                                String fileExtension = file.getName().toLowerCase();
                                if (fileExtension.length() > 4)
@@ -60,6 +78,11 @@ public class FileLoader
                                        // Use xml loader for kml, gpx and xml filenames
                                        _xmlFileLoader.openFile(file);
                                }
+                               else if (fileExtension.equals(".kmz") || fileExtension.equals(".zip"))
+                               {
+                                       // Use zip loader for zipped kml (or zipped gpx)
+                                       _zipFileLoader.openFile(file);
+                               }
                                else
                                {
                                        // Use text loader for everything else
@@ -69,8 +92,7 @@ public class FileLoader
                        else
                        {
                                // couldn't read file - show error message
-                               JOptionPane.showMessageDialog(_parentFrame, I18nManager.getText("error.load.noread"),
-                                       I18nManager.getText("error.load.dialogtitle"), JOptionPane.ERROR_MESSAGE);
+                               _app.showErrorMessage("error.load.dialogtitle", "error.load.noread");
                        }
                }
        }