Ignore:
Timestamp:
2016-06-08T09:33:20+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #12927 - Move title management and main frame layout to new class (patch by michael2402) - gsoc-core

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/Main.java

    r10288 r10340  
    99import java.awt.GridBagLayout;
    1010import java.awt.Window;
    11 import java.awt.event.ComponentEvent;
    12 import java.awt.event.ComponentListener;
    1311import java.awt.event.KeyEvent;
    1412import java.awt.event.WindowAdapter;
     
    4745import javax.swing.InputMap;
    4846import javax.swing.JComponent;
    49 import javax.swing.JFrame;
    5047import javax.swing.JOptionPane;
    5148import javax.swing.JPanel;
     
    121118import org.openstreetmap.josm.tools.Shortcut;
    122119import org.openstreetmap.josm.tools.Utils;
    123 import org.openstreetmap.josm.tools.WindowGeometry;
    124120
    125121/**
     
    563559
    564560    /**
    565      * Constructs new {@code Main} object. A lot of global variables are initialized here.
     561     * Constructs new {@code Main} object.
     562     * @see #initialize()
    566563     */
    567564    public Main() {
    568565        main = this;
     566    }
     567
     568    /**
     569     * Initializes the main object. A lot of global variables are initialized here.
     570     * @since 10340
     571     */
     572    public void initialize() {
    569573        isOpenjdk = System.getProperty("java.vm.name").toUpperCase(Locale.ENGLISH).indexOf("OPENJDK") != -1;
    570574        fileWatcher.start();
     
    581585            @Override
    582586            public void initialize() {
    583                 contentPanePrivate.add(panel, BorderLayout.CENTER);
    584                 panel.add(gettingStarted, BorderLayout.CENTER);
    585                 menu = new MainMenu();
     587                initializeMainWindow();
    586588            }
    587589        }.call();
     
    715717    }
    716718
     719    /**
     720     * Called once at startup to initialize the main window content.
     721     * Should set {@link #menu}
     722     */
     723    protected void initializeMainWindow() {
     724        // can be implementd by subclasses
     725    }
     726
    717727    private abstract static class InitializationTask implements Callable<Void> {
    718728
     
    936946     */
    937947    public static final JPanel panel = new JPanel(new BorderLayout());
    938 
    939     protected static volatile WindowGeometry geometry;
    940     protected static int windowState = JFrame.NORMAL;
    941948
    942949    private final CommandQueueListener redoUndoListener = new CommandQueueListener() {
     
    10161023        }
    10171024
    1018         geometry = WindowGeometry.mainWindow("gui.geometry",
    1019             args.containsKey(Option.GEOMETRY) ? args.get(Option.GEOMETRY).iterator().next() : null,
    1020             !args.containsKey(Option.NO_MAXIMIZE) && Main.pref.getBoolean("gui.maximized", false));
    10211025    }
    10221026
     
    11071111    public static boolean exitJosm(boolean exit, int exitCode) {
    11081112        if (Main.saveUnsavedModifications()) {
    1109             worker.shutdown();
    1110             ImageProvider.shutdown(false);
    1111             JCSCacheManager.shutdown();
    1112             if (geometry != null) {
    1113                 geometry.remember("gui.geometry");
    1114             }
    1115             if (map != null) {
    1116                 map.rememberToggleDialogWidth();
    1117             }
    1118             pref.put("gui.maximized", (windowState & JFrame.MAXIMIZED_BOTH) != 0);
    1119             // Remove all layers because somebody may rely on layerRemoved events (like AutosaveTask)
    1120             if (Main.isDisplayingMapView()) {
    1121                 Collection<Layer> layers = new ArrayList<>(getLayerManager().getLayers());
    1122                 for (Layer l: layers) {
    1123                     Main.main.removeLayer(l);
    1124                 }
    1125             }
    1126             try {
    1127                 pref.saveDefaults();
    1128             } catch (IOException ex) {
    1129                 Main.warn(tr("Failed to save default preferences."));
    1130             }
    1131             worker.shutdownNow();
    1132             ImageProvider.shutdown(true);
     1113            Main.main.shutdown();
    11331114
    11341115            if (exit) {
     
    11381119        }
    11391120        return false;
     1121    }
     1122
     1123    protected void shutdown() {
     1124        worker.shutdown();
     1125        ImageProvider.shutdown(false);
     1126        JCSCacheManager.shutdown();
     1127        if (map != null) {
     1128            map.rememberToggleDialogWidth();
     1129        }
     1130        // Remove all layers because somebody may rely on layerRemoved events (like AutosaveTask)
     1131        if (Main.isDisplayingMapView()) {
     1132            Collection<Layer> layers = new ArrayList<>(getLayerManager().getLayers());
     1133            for (Layer l: layers) {
     1134                Main.main.removeLayer(l);
     1135            }
     1136        }
     1137        try {
     1138            pref.saveDefaults();
     1139        } catch (IOException ex) {
     1140            Main.warn(tr("Failed to save default preferences."));
     1141        }
     1142        worker.shutdownNow();
     1143        ImageProvider.shutdown(true);
    11401144    }
    11411145
     
    12871291            platform = new PlatformHookUnixoid();
    12881292        }
    1289     }
    1290 
    1291     private static class WindowPositionSizeListener extends WindowAdapter implements ComponentListener {
    1292         @Override
    1293         public void windowStateChanged(WindowEvent e) {
    1294             Main.windowState = e.getNewState();
    1295         }
    1296 
    1297         @Override
    1298         public void componentHidden(ComponentEvent e) {
    1299             // Do nothing
    1300         }
    1301 
    1302         @Override
    1303         public void componentMoved(ComponentEvent e) {
    1304             handleComponentEvent(e);
    1305         }
    1306 
    1307         @Override
    1308         public void componentResized(ComponentEvent e) {
    1309             handleComponentEvent(e);
    1310         }
    1311 
    1312         @Override
    1313         public void componentShown(ComponentEvent e) {
    1314             // Do nothing
    1315         }
    1316 
    1317         private static void handleComponentEvent(ComponentEvent e) {
    1318             Component c = e.getComponent();
    1319             if (c instanceof JFrame && c.isVisible()) {
    1320                 if (Main.windowState == JFrame.NORMAL) {
    1321                     Main.geometry = new WindowGeometry((JFrame) c);
    1322                 } else {
    1323                     Main.geometry.fixScreen((JFrame) c);
    1324                 }
    1325             }
    1326         }
    1327     }
    1328 
    1329     protected static void addListener() {
    1330         parent.addComponentListener(new WindowPositionSizeListener());
    1331         ((JFrame) parent).addWindowStateListener(new WindowPositionSizeListener());
    13321293    }
    13331294
Note: See TracChangeset for help on using the changeset viewer.