X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2FGpsPruner.java;h=eafbf1977de170622e3a8ae3fb1290a59bc126ae;hb=52bf9e8686c916be37a26a0b75340393d4478b05;hp=f76787c5730ef36fda0fb777b860fa42673ed00c;hpb=312fec956e43f5d0a38617da5d0add9c62563e2c;p=GpsPrune.git diff --git a/tim/prune/GpsPruner.java b/tim/prune/GpsPruner.java index f76787c..eafbf19 100644 --- a/tim/prune/GpsPruner.java +++ b/tim/prune/GpsPruner.java @@ -1,25 +1,33 @@ package tim.prune; import java.awt.event.WindowAdapter; +import java.awt.BorderLayout; import java.awt.event.WindowEvent; +import java.io.File; import java.util.Locale; - import javax.swing.JFrame; import javax.swing.JSplitPane; +import javax.swing.JToolBar; import javax.swing.WindowConstants; import tim.prune.gui.DetailsDisplay; -import tim.prune.gui.MapChart; +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.map.MapCanvas; /** * Tool to visualize, edit 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 */ public class GpsPruner { - public static final String VERSION_NUMBER = "1"; - public static final String BUILD_NUMBER = "041"; + // Final build of version 6 + public static final String VERSION_NUMBER = "6"; + public static final String BUILD_NUMBER = "117"; private static App APP = null; @@ -30,54 +38,129 @@ public class GpsPruner public static void main(String[] args) { Locale locale = null; - if (args.length == 1) + String langFilename = null; + String configFilename = null; + boolean showUsage = false; + for (int i=0; i used to specify a configuration file" + + "\n --lang= or --locale= used to specify language" + + "\n --langfile= used to specify an alternative language file\n"); + } + // Initialise configuration if selected + try + { + if (configFilename != null) { + Config.loadFile(new File(configFilename)); + } + else { + Config.loadDefaultFile(); + } + } + catch (ConfigException ce) { + System.err.println("Failed to load config file: " + configFilename); + } + // Set locale according to Config's language property + String langCode = Config.getLanguageCode(); + if (locale == null && langCode != null) { + Locale configLocale = getLanguage(langCode); + if (configLocale != null) {locale = configLocale;} } I18nManager.init(locale); + if (langFilename != null) { + I18nManager.addLanguageFile(langFilename); + } + // Set up the window and go launch(); } + /** + * Choose a locale based on the given code + * @param inString code for locale + * @return Locale object if available, otherwise null + */ + private static Locale getLanguage(String inString) + { + if (inString.length() == 2) + { + return new Locale(inString); + } + else if (inString.length() == 5) + { + return new Locale(inString.substring(0, 2), inString.substring(3)); + } + System.out.println("Unrecognised locale '" + inString + + "' - value should be eg 'DE' or 'DE_ch'"); + return null; + } + + /** * Launch the main application */ private static void launch() { JFrame frame = new JFrame("Prune"); - UpdateMessageBroker broker = new UpdateMessageBroker(); - APP = new App(frame, broker); + APP = new App(frame); // make menu MenuManager menuManager = new MenuManager(frame, APP, APP.getTrackInfo()); frame.setJMenuBar(menuManager.createMenuBar()); APP.setMenuManager(menuManager); - broker.addSubscriber(menuManager); + UpdateMessageBroker.addSubscriber(menuManager); + // Make toolbar for buttons + JToolBar toolbar = menuManager.createToolBar(); - // Make three GUI components and add as listeners - DetailsDisplay leftPanel = new DetailsDisplay(APP, APP.getTrackInfo()); - broker.addSubscriber(leftPanel); - MapChart mapDisp = new MapChart(APP, APP.getTrackInfo()); - broker.addSubscriber(mapDisp); + // Make main GUI components and add as listeners + SelectorDisplay leftPanel = new SelectorDisplay(APP.getTrackInfo()); + UpdateMessageBroker.addSubscriber(leftPanel); + DetailsDisplay rightPanel = new DetailsDisplay(APP.getTrackInfo()); + UpdateMessageBroker.addSubscriber(rightPanel); + MapCanvas mapDisp = new MapCanvas(APP, APP.getTrackInfo()); + UpdateMessageBroker.addSubscriber(mapDisp); ProfileChart profileDisp = new ProfileChart(APP.getTrackInfo()); - broker.addSubscriber(profileDisp); + UpdateMessageBroker.addSubscriber(profileDisp); + StatusBar statusBar = new StatusBar(); + UpdateMessageBroker.addSubscriber(statusBar); + 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 rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mapDisp, profileDisp); - rightPane.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, - rightPane)); + triplePane), BorderLayout.CENTER); + frame.getContentPane().add(statusBar, BorderLayout.SOUTH); + // add closing listener frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { @@ -87,9 +170,17 @@ public class GpsPruner // Avoid automatically shutting down if window closed frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + // set icon + try { + frame.setIconImage(IconManager.getImageIcon(IconManager.WINDOW_ICON).getImage()); + } + catch (Exception e) {} // ignore + // finish off and display frame frame.pack(); - frame.setSize(600, 450); + frame.setSize(650, 450); frame.show(); + // Set position of map/profile splitter + midPane.setDividerLocation(0.75); } }