]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/GpsPruner.java
Version 12, December 2010
[GpsPrune.git] / tim / prune / GpsPruner.java
index 29f7eb592681131438714de9122b7c7caea0a601..217d7d429ceee7036d72058d6987527e63b27758 100644 (file)
@@ -2,6 +2,7 @@ package tim.prune;
 
 import java.awt.event.WindowAdapter;
 import java.awt.BorderLayout;
+import java.awt.Component;
 import java.awt.event.WindowEvent;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -12,29 +13,37 @@ import javax.swing.JSplitPane;
 import javax.swing.JToolBar;
 import javax.swing.WindowConstants;
 
+import tim.prune.config.Config;
+import tim.prune.config.ConfigException;
 import tim.prune.gui.DetailsDisplay;
+import tim.prune.gui.SidebarController;
 import tim.prune.gui.IconManager;
 import tim.prune.gui.MenuManager;
-import tim.prune.gui.ProfileChart;
 import tim.prune.gui.SelectorDisplay;
 import tim.prune.gui.StatusBar;
 import tim.prune.gui.Viewport;
 import tim.prune.gui.map.MapCanvas;
+import tim.prune.gui.profile.ProfileChart;
 
 /**
- * Tool to visualize, edit, convert and prune GPS data
+ * Prune is a tool to visualize, edit, convert and prune GPS data
  * Please see the included readme.txt or http://activityworkshop.net
- * This software is copyright activityworkshop.net and made available through the Gnu GPL
+ * This software is copyright activityworkshop.net 2006-2010 and made available through the Gnu GPL version 2.
+ * For license details please see the included license.txt.
+ * GpsPruner is the main entry point to the application, including initialisation and launch
  */
 public class GpsPruner
 {
        /** Version number of application, used in about screen and for version check */
-       public static final String VERSION_NUMBER = "8";
+       public static final String VERSION_NUMBER = "12";
        /** Build number, just used for about screen */
-       public static final String BUILD_NUMBER = "155";
+       public static final String BUILD_NUMBER = "223";
        /** Static reference to App object */
        private static App APP = null;
 
+       /** Program name, used for Frame title and for Macs also on the system bar */
+       private static final String PROGRAM_NAME = "Prune";
+
 
        /**
         * Main method
@@ -48,15 +57,17 @@ public class GpsPruner
                String configFilename = null;
                ArrayList<File> dataFiles = new ArrayList<File>();
                boolean showUsage = false;
+
+               // Mac OSX - specific properties (Mac insists that this is done as soon as possible)
+               if (System.getProperty("mrj.version") != null) {
+                       System.setProperty("apple.laf.useScreenMenuBar", "true"); // menu at top of screen
+                       System.setProperty("com.apple.mrj.application.apple.menu.about.name", PROGRAM_NAME);
+               }
+               // Loop over given arguments, if any
                for (int i=0; i<args.length; i++)
                {
                        String arg = args[i];
-                       if (arg.startsWith("--locale="))
-                       {
-                               localeCode = arg.substring(9);
-                               locale = getLanguage(localeCode);
-                       }
-                       else if (arg.startsWith("--lang="))
+                       if (arg.startsWith("--lang="))
                        {
                                localeCode = arg.substring(7);
                                locale = getLanguage(localeCode);
@@ -88,7 +99,7 @@ public class GpsPruner
                if (showUsage) {
                        System.out.println("Possible parameters:"
                                + "\n   --configfile=<file> used to specify a configuration file"
-                               + "\n   --lang=<code> or --locale=<code>  used to specify language"
+                               + "\n   --lang=<code>       used to specify language code such as DE"
                                + "\n   --langfile=<file>   used to specify an alternative language file\n");
                }
                // Initialise configuration if selected
@@ -104,7 +115,8 @@ public class GpsPruner
                catch (ConfigException ce) {
                        System.err.println("Failed to load config file: " + configFilename);
                }
-               if (locale != null) {
+               boolean overrideLang = (locale != null);
+               if (overrideLang) {
                        // Make sure Config holds chosen language
                        Config.setConfigString(Config.KEY_LANGUAGE_CODE, localeCode);
                }
@@ -117,9 +129,15 @@ public class GpsPruner
                        }
                }
                I18nManager.init(locale);
-               if (langFilename != null) {
+               // Load the external language file, either from config file or from command line params
+               if (langFilename == null && !overrideLang) {
+                       // If langfilename is blank on command line parameters then don't use setting from config
+                       langFilename = Config.getConfigString(Config.KEY_LANGUAGE_FILE);
+               }
+               if (langFilename != null && !langFilename.equals("")) {
                        try {
                                I18nManager.addLanguageFile(langFilename);
+                               Config.setConfigString(Config.KEY_LANGUAGE_FILE, langFilename);
                        }
                        catch (FileNotFoundException fnfe) {
                                System.err.println("Failed to load language file: " + langFilename);
@@ -141,7 +159,7 @@ public class GpsPruner
                {
                        return new Locale(inString);
                }
-               else if (inString.length() == 5)
+               else if (inString.length() == 5 && inString.charAt(2) == '_')
                {
                        return new Locale(inString.substring(0, 2), inString.substring(3));
                }
@@ -157,7 +175,8 @@ public class GpsPruner
         */
        private static void launch(ArrayList<File> inDataFiles)
        {
-               JFrame frame = new JFrame("Prune");
+               // Initialise Frame
+               JFrame frame = new JFrame(PROGRAM_NAME);
                APP = new App(frame);
 
                // make menu
@@ -184,15 +203,15 @@ public class GpsPruner
                UpdateMessageBroker.informSubscribers("Prune v" + VERSION_NUMBER);
 
                // Arrange in the frame using split panes
-               JSplitPane midPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mapDisp, profileDisp);
-               midPane.setResizeWeight(1.0); // allocate as much space as poss to map
-               JSplitPane triplePane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, midPane, rightPanel);
-               triplePane.setResizeWeight(1.0); // allocate as much space as poss to map
+               JSplitPane midSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mapDisp, profileDisp);
+               midSplit.setResizeWeight(1.0); // allocate as much space as poss to map
+               JSplitPane rightSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, midSplit, rightPanel);
+               rightSplit.setResizeWeight(1.0); // allocate as much space as poss to map
 
                frame.getContentPane().setLayout(new BorderLayout());
                frame.getContentPane().add(toolbar, BorderLayout.NORTH);
-               frame.getContentPane().add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,
-                       triplePane), BorderLayout.CENTER);
+               JSplitPane leftSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightSplit);
+               frame.getContentPane().add(leftSplit, BorderLayout.CENTER);
                frame.getContentPane().add(statusBar, BorderLayout.SOUTH);
 
                // add closing listener
@@ -215,8 +234,12 @@ public class GpsPruner
                frame.setSize(650, 450);
                frame.setVisible(true);
                // Set position of map/profile splitter
-               midPane.setDividerLocation(0.75);
+               midSplit.setDividerLocation(0.75);
 
+               // Make a full screen toggler
+               SidebarController fsc = new SidebarController(new Component[] {leftPanel, profileDisp, rightPanel},
+                       new JSplitPane[] {leftSplit, midSplit, rightSplit});
+               APP.setSidebarController(fsc);
                // Finally, give the files to load to the App
                APP.loadDataFiles(inDataFiles);
        }