Ticket #6329: 6329.patch

File 6329.patch, 7.9 KB (added by simon04, 14 years ago)
  • src/org/openstreetmap/josm/Main.java

    diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
    index 46b1c57..aff5e0d 100644
    a b import java.net.URISyntaxException;  
    2121import java.util.ArrayList;
    2222import java.util.Collection;
    2323import java.util.Iterator;
     24import java.util.LinkedList;
    2425import java.util.List;
    2526import java.util.Map;
    2627import java.util.StringTokenizer;
    abstract public class Main {  
    221222        }
    222223    }
    223224
     225    private static InitStatusListener initListener = null;
     226
     227    public static interface InitStatusListener {
     228
     229        void updateStatus(String event);
     230    }
     231
     232    public static void setInitStatusListener(InitStatusListener listener) {
     233        initListener = listener;
     234    }
     235
    224236    public Main() {
    225237        main = this;
    226238        isOpenjdk = System.getProperty("java.vm.name").toUpperCase().indexOf("OPENJDK") != -1;
     239
     240        if (initListener != null)
     241            initListener.updateStatus(tr("Executing platform startup hook"));
    227242        platform.startupHook();
    228243
    229244        // We try to establish an API connection early, so that any API
    230245        // capabilities are already known to the editor instance. However
    231246        // if it goes wrong that's not critical at this stage.
     247        if (initListener != null)
     248            initListener.updateStatus(tr("Initializing OSM API"));
    232249        try {
    233250            OsmApi.getOsmApi().initialize(null, true);
    234251        } catch (Exception x) {
    235252            // ignore any exception here.
    236253        }
    237254
     255        if (initListener != null)
     256            initListener.updateStatus(tr("Building main menu"));
    238257        contentPanePrivate.add(panel, BorderLayout.CENTER);
    239258        panel.add(gettingStarted, BorderLayout.CENTER);
    240259        menu = new MainMenu();
    abstract public class Main {  
    247266        registerActionShortcut(menu.help, Shortcut.registerShortcut("system:help", tr("Help"),
    248267                KeyEvent.VK_F1, Shortcut.GROUP_DIRECT));
    249268
     269        if (initListener != null)
     270            initListener.updateStatus(tr("Initializing presets"));
    250271        TaggingPresetPreference.initialize();
     272
     273        if (initListener != null)
     274            initListener.updateStatus(tr("Initializing map styles"));
    251275        MapPaintPreference.initialize();
     276
     277        if (initListener != null)
     278            initListener.updateStatus(tr("Loading imagery preferences"));
    252279        ImageryPreference.initialize();
    253280
     281        if (initListener != null)
     282            initListener.updateStatus(tr("Initializing validator"));
    254283        validator = new OsmValidator();
    255284        MapView.addLayerChangeListener(validator);
    256285
    abstract public class Main {  
    263292        });
    264293        FeatureAdapter.registerTranslationAdapter(I18n.getTranslationAdapter());
    265294
     295        if (initListener != null)
     296            initListener.updateStatus(tr("Updating user interface"));
     297
    266298        toolbar.refreshToolbarControl();
    267299
    268300        toolbar.control.updateUI();
  • src/org/openstreetmap/josm/gui/MainApplication.java

    diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
    index b5c9555..b833872 100644
    a b public class MainApplication extends Main {  
    209209        }
    210210
    211211        SplashScreen splash = new SplashScreen();
    212         ProgressMonitor monitor = splash.getProgressMonitor();
     212        final ProgressMonitor monitor = splash.getProgressMonitor();
    213213        monitor.beginTask(tr("Initializing"));
    214         monitor.setTicksCount(7);
    215214        splash.setVisible(Main.pref.getBoolean("draw.splashscreen", true));
     215        Main.setInitStatusListener(new InitStatusListener() {
     216
     217            @Override
     218            public void updateStatus(String event) {
     219                monitor.indeterminateSubTask(event);
     220            }
     221        });
    216222
    217223        List<PluginInformation> pluginsToLoad = PluginHandler.buildListOfPluginsToLoad(splash,monitor.createSubTaskMonitor(1, false));
    218224        if (!pluginsToLoad.isEmpty() && PluginHandler.checkAndConfirmPluginUpdate(splash)) {
    219             monitor.subTask(tr("Updating plugins..."));
     225            monitor.subTask(tr("Updating plugins"));
    220226            pluginsToLoad = PluginHandler.updatePlugins(splash,pluginsToLoad, monitor.createSubTaskMonitor(1, false));
    221227        }
    222         monitor.worked(1);
    223228
    224         monitor.subTask(tr("Installing updated plugins"));
     229        monitor.indeterminateSubTask(tr("Installing updated plugins"));
    225230        PluginHandler.installDownloadedPlugins(true);
    226         monitor.worked(1);
    227231
    228         monitor.subTask(tr("Loading early plugins"));
     232        monitor.indeterminateSubTask(tr("Loading early plugins"));
    229233        PluginHandler.loadEarlyPlugins(splash,pluginsToLoad, monitor.createSubTaskMonitor(1, false));
    230         monitor.worked(1);
    231234
    232         monitor.subTask(tr("Setting defaults"));
     235        monitor.indeterminateSubTask(tr("Setting defaults"));
    233236        preConstructorInit(args);
    234237        removeObsoletePreferences();
    235         monitor.worked(1);
    236238
    237239        monitor.indeterminateSubTask(tr("Creating main GUI"));
    238240        JFrame mainFrame = new JFrame(tr("Java OpenStreetMap Editor"));
    239241        Main.parent = mainFrame;
    240242        Main.addListener();
    241243        final Main main = new MainApplication(mainFrame);
    242         monitor.worked(1);
    243244
    244         monitor.subTask(tr("Loading plugins"));
     245        monitor.indeterminateSubTask(tr("Loading plugins"));
    245246        PluginHandler.loadLatePlugins(splash,pluginsToLoad,  monitor.createSubTaskMonitor(1, false));
    246         monitor.worked(1);
    247247        toolbar.refreshToolbarControl();
    248248        splash.setVisible(false);
    249249        splash.dispose();
  • src/org/openstreetmap/josm/gui/SplashScreen.java

    diff --git a/src/org/openstreetmap/josm/gui/SplashScreen.java b/src/org/openstreetmap/josm/gui/SplashScreen.java
    index 4ca46e5..7637e19 100644
    a b import java.awt.Insets;  
    1212import java.awt.event.MouseAdapter;
    1313import java.awt.event.MouseEvent;
    1414
     15import java.util.Arrays;
     16import java.util.LinkedList;
    1517import javax.swing.JFrame;
    1618import javax.swing.JLabel;
    1719import javax.swing.JPanel;
    public class SplashScreen extends JFrame {  
    132134                public Dimension getPreferredSize() {
    133135                    Dimension d = super.getPreferredSize();
    134136                    if(d.width < 600) d.width = 600;
     137                    d.height *= MAX_NUMBER_OF_MESSAGES;
    135138                    return d;
    136139                }
    137140            }, gc);
    public class SplashScreen extends JFrame {  
    166169            repaint();
    167170        }
    168171
     172        private static final int MAX_NUMBER_OF_MESSAGES = 3;
     173        private LinkedList<String> messages = new LinkedList<String>(Arrays.asList(" ", " ", " ")); //update when changing MAX_NUMBER_OF_MESSAGES
     174        private long time = System.currentTimeMillis();
     175
     176        /**
     177         * Stores and displays the {@code MAX_NUMBER_OF_MESSAGES} most recent
     178         * task titles together with their execution time.
     179         */
    169180        public void setTaskTitle(String taskTitle) {
    170             lblTaskTitle.setText(taskTitle);
     181
     182            while (messages.size() >= MAX_NUMBER_OF_MESSAGES) {
     183                messages.removeFirst();
     184            }
     185            if (!taskTitle.isEmpty()) {
     186                long now = System.currentTimeMillis();
     187                messages.add(tr("{0} ({1} ms)", taskTitle, Long.toString(now - time)));
     188                time = now;
     189            }
     190            String html = "";
     191            int i = 0;
     192            for (String m : messages) {
     193                html += "<p class=\"entry" + (++i) + "\">" + m + "</p>";
     194            }
     195
     196            lblTaskTitle.setText("<html><style>"
     197                    + ".entry1{color:#CCCCCC;}"
     198                    + ".entry2{color:#999999;}"
     199                    + ".entry3{color:#000000;}</style>" + html + "</html>");  //update when changing MAX_NUMBER_OF_MESSAGES
    171200            repaint();
    172201        }
    173202