Changeset 12684 in josm


Ignore:
Timestamp:
2017-08-28T16:42:35+02:00 (8 weeks ago)
Author:
bastiK
Message:

see #15167 - moved the info label in non expert mode (patch by bafonins)

Location:
trunk/src/org/openstreetmap/josm/gui/download
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java

    r12655 r12684  
    9898        getDownloadSource().doDownload(getData(), downloadSettings);
    9999    }
     100
     101    /**
     102     * Returns a simple name describing this panel. This string can be used from other GUI parts
     103     * of JOSM to save the user preferences related to the GUI settings. For example, the panel for downloading
     104     * the OSM data can be named 'downloadosmpanel'. Note, choose the name such that it is unique to avoid
     105     * collisions with other names.
     106     * @return A simple name describing this panel.
     107     */
     108    public abstract String getSimpleName();
    100109}
  • trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java

    r12678 r12684  
    1616import java.awt.event.WindowAdapter;
    1717import java.awt.event.WindowEvent;
     18import java.beans.PropertyChangeListener;
    1819import java.util.ArrayList;
    1920import java.util.Arrays;
     
    3334import javax.swing.JTabbedPane;
    3435import javax.swing.KeyStroke;
     36import javax.swing.event.ChangeEvent;
     37import javax.swing.event.ChangeListener;
    3538
    3639import org.openstreetmap.josm.Main;
     
    5154import org.openstreetmap.josm.tools.ImageProvider;
    5255import org.openstreetmap.josm.tools.InputMapUtils;
     56import org.openstreetmap.josm.tools.JosmRuntimeException;
    5357import org.openstreetmap.josm.tools.Logging;
    5458import org.openstreetmap.josm.tools.OsmUrlToBounds;
     
    6266     * Preference properties
    6367     */
     68    private static final String TAB_SPLIT_NAMESPACE = "download.tabsplit.";
    6469    private static final IntegerProperty DOWNLOAD_TAB = new IntegerProperty("download.tab", 0);
    6570    private static final IntegerProperty DOWNLOAD_SOURCE_TAB = new IntegerProperty("download-source.tab", 0);
    66     private static final IntegerProperty DIALOG_SPLIT = new IntegerProperty("download.split", 200);
    6771    private static final BooleanProperty DOWNLOAD_AUTORUN = new BooleanProperty("download.autorun", false);
    6872    private static final BooleanProperty DOWNLOAD_NEWLAYER = new BooleanProperty("download.newlayer", false);
     
    115119        mainPanel = new JPanel(new GridBagLayout());
    116120
    117         downloadSources.add(new OSMDownloadSource());
    118         downloadSources.add(new OverpassDownloadSource());
    119 
    120         // register all default download sources
    121         for (int i = 0; i < downloadSources.size(); i++) {
    122             downloadSources.get(i).addGui(this);
    123         }
     121        // add default download sources
     122        addDownloadSource(new OSMDownloadSource());
     123        addDownloadSource(new OverpassDownloadSource());
    124124
    125125        // must be created before hook
     
    141141        }
    142142
    143         // allow to collapse the panes completely
    144         downloadSourcesTab.setMinimumSize(new Dimension(0, 0));
     143        // allow to collapse the panes, but reserve some space for tabs
     144        downloadSourcesTab.setMinimumSize(new Dimension(0, 25));
    145145        tpDownloadAreaSelectors.setMinimumSize(new Dimension(0, 0));
    146146
     
    149149                downloadSourcesTab,
    150150                tpDownloadAreaSelectors);
     151        dialogSplit.addPropertyChangeListener(getDividerChangedListener());
     152
     153        ChangeListener tabChangedListener = getDownloadSourceTabChangeListener();
     154        tabChangedListener.stateChanged(new ChangeEvent(downloadSourcesTab));
     155        downloadSourcesTab.addChangeListener(tabChangedListener);
    151156
    152157        mainPanel.add(dialogSplit, GBC.eol().fill());
     
    171176        ExpertToggleAction.addVisibilitySwitcher(cbZoomToDownloadedData);
    172177
    173         if (!ExpertToggleAction.isExpert()) {
    174             JLabel infoLabel = new JLabel(
    175                     tr("Use left click&drag to select area, arrows or right mouse button to scroll map, wheel or +/- to zoom."));
    176             mainPanel.add(infoLabel, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 0, 0));
    177         }
     178        mainPanel.add(new JLabel(), GBC.eol()); // place info label at a new line
     179        JLabel infoLabel = new JLabel(
     180                tr("Use left click&drag to select area, arrows or right mouse button to scroll map, wheel or +/- to zoom."));
     181        mainPanel.add(infoLabel, GBC.eol().anchor(GBC.CENTER).insets(0, 0, 0, 0));
     182
     183        ExpertToggleAction.addExpertModeChangeListener(isExpert -> infoLabel.setVisible(!isExpert), true);
     184
    178185        return mainPanel;
    179186    }
     
    253260        ExpertToggleAction.addExpertModeChangeListener(expertListener);
    254261        restoreSettings();
     262
     263        // if no bounding box is selected make sure it is still propagated.
     264        if (currentBounds == null) {
     265            boundingBoxChanged(null, null);
     266        }
    255267    }
    256268
     
    315327    /**
    316328     * Determines if the dialog autorun is enabled in preferences.
    317      * @return {@code true} if the download dialog must be open at startup, {@code false} otherwise
     329     * @return {@code true} if the download dialog must be open at startup, {@code false} otherwise.
    318330     */
    319331    public static boolean isAutorunEnabled() {
     
    322334
    323335    /**
    324      * Adds a new download area selector to the download dialog
     336     * Adds a new download area selector to the download dialog.
    325337     *
    326      * @param selector the download are selector
    327      * @param displayName the display name of the selector
     338     * @param selector the download are selector.
     339     * @param displayName the display name of the selector.
    328340     */
    329341    public void addDownloadAreaSelector(JPanel selector, String displayName) {
     
    332344
    333345    /**
    334      * Adds a new download source to the download dialog
     346     * Adds a new download source to the download dialog if it is not added.
    335347     *
    336348     * @param downloadSource The download source to be added.
    337349     * @param <T> The type of the download data.
     350     * @throws JosmRuntimeException If the download source is already added. Note, download sources are
     351     * compared by their reference.
    338352     */
    339353    public <T> void addDownloadSource(DownloadSource<T> downloadSource) {
     354        if (downloadSources.contains(downloadSource)) {
     355            throw new JosmRuntimeException("The download source you are trying to add already exists.");
     356        }
     357
     358        downloadSources.add(downloadSource);
    340359        if ((ExpertToggleAction.isExpert() && downloadSource.onlyExpert()) || !downloadSource.onlyExpert()) {
    341360            addNewDownloadSourceTab(downloadSource);
     
    344363
    345364    /**
    346      * Refreshes the tile sources
     365     * Refreshes the tile sources.
    347366     * @since 6364
    348367     */
     
    359378        DOWNLOAD_TAB.put(tpDownloadAreaSelectors.getSelectedIndex());
    360379        DOWNLOAD_SOURCE_TAB.put(downloadSourcesTab.getSelectedIndex());
    361         DIALOG_SPLIT.put(dialogSplit.getDividerLocation());
    362380        DOWNLOAD_NEWLAYER.put(cbNewLayer.isSelected());
    363381        DOWNLOAD_ZOOMTODATA.put(cbZoomToDownloadedData.isSelected());
     
    374392        cbStartup.setSelected(isAutorunEnabled());
    375393        cbZoomToDownloadedData.setSelected(DOWNLOAD_ZOOMTODATA.get());
    376         dialogSplit.setDividerLocation(DIALOG_SPLIT.get());
    377394
    378395        try {
     
    408425    /**
    409426     * Returns the previously saved bounding box from preferences.
    410      * @return The bounding box saved in preferences if any, {@code null} otherwise
     427     * @return The bounding box saved in preferences if any, {@code null} otherwise.
    411428     * @since 6509
    412429     */
     
    500517     * @param <T> The type of the download data.
    501518     */
    502     private <T> void addNewDownloadSourceTab(DownloadSource<T> downloadSource) {
     519    protected <T> void addNewDownloadSourceTab(DownloadSource<T> downloadSource) {
    503520        AbstractDownloadSourcePanel<T> panel = downloadSource.createPanel();
    504521        downloadSourcesTab.add(panel, downloadSource.getLabel());
     
    536553
    537554    /**
     555     * Creates a listener that reacts on tab switches for {@code downloadSourcesTab} in order
     556     * to adjust proper division of the dialog according to user saved preferences or minimal size
     557     * of the panel.
     558     * @return A listener to adjust dialog division.
     559     */
     560    private ChangeListener getDownloadSourceTabChangeListener() {
     561        return ec -> {
     562            JTabbedPane tabbedPane = (JTabbedPane) ec.getSource();
     563            Component selectedComponent = tabbedPane.getSelectedComponent();
     564            if (selectedComponent instanceof AbstractDownloadSourcePanel) {
     565                AbstractDownloadSourcePanel<?> panel = (AbstractDownloadSourcePanel<?>) selectedComponent;
     566                dialogSplit.setDividerLocation(Main.pref.getInteger(
     567                        TAB_SPLIT_NAMESPACE + panel.getSimpleName(),
     568                        panel.getMinimumSize().height));
     569            }
     570        };
     571    }
     572
     573    /**
     574     * Creates a listener that react on dialog splitters movements to save users preferences.
     575     * @return A listener to save user preferred split of the dialog.
     576     */
     577    private PropertyChangeListener getDividerChangedListener() {
     578        return evt -> {
     579            if (evt.getPropertyName().equalsIgnoreCase(JSplitPane.DIVIDER_LOCATION_PROPERTY)) {
     580                Component selectedComponent = downloadSourcesTab.getSelectedComponent();
     581                if (selectedComponent instanceof AbstractDownloadSourcePanel) {
     582                    AbstractDownloadSourcePanel<?> panel = (AbstractDownloadSourcePanel<?>) selectedComponent;
     583                    Main.pref.put(
     584                            TAB_SPLIT_NAMESPACE + panel.getSimpleName(),
     585                            String.valueOf(dialogSplit.getDividerLocation())
     586                    );
     587                }
     588            }
     589        };
     590    }
     591
     592    /**
    538593     * Action that is executed when the cancel button is pressed.
    539594     */
     
    555610        @Override
    556611        public void actionPerformed(ActionEvent e) {
    557             AbstractDownloadSourcePanel<?> pnl = (AbstractDownloadSourcePanel<?>) downloadSourcesTab.getSelectedComponent();
    558             run();
    559             pnl.checkCancel();
     612            Component panel = downloadSourcesTab.getSelectedComponent();
     613            if (panel instanceof AbstractDownloadSourcePanel) {
     614                AbstractDownloadSourcePanel<?> pnl = (AbstractDownloadSourcePanel<?>) panel;
     615                run();
     616                pnl.checkCancel();
     617            } else {
     618                run();
     619            }
    560620        }
    561621    }
     
    573633
    574634        /**
    575          * Starts the download, if possible
     635         * Starts the download and closes the dialog, if all requirements for the current download source are met.
     636         * Otherwise the download is not started and the dialog remains visible.
    576637         */
    577638        public void run() {
  • trunk/src/org/openstreetmap/josm/gui/download/DownloadSettings.java

    r12655 r12684  
    22package org.openstreetmap.josm.gui.download;
    33
     4import org.openstreetmap.josm.data.Bounds;
     5
    46import java.util.Optional;
    5 
    6 import org.openstreetmap.josm.data.Bounds;
    77
    88/**
     
    5252     */
    5353    public Optional<Bounds> getDownloadBounds() {
    54         if (downloadBounds == null) {
    55             return Optional.empty();
    56         } else {
    57             return Optional.of(downloadBounds);
    58         }
     54        return Optional.ofNullable(downloadBounds);
    5955    }
    6056}
  • trunk/src/org/openstreetmap/josm/gui/download/DownloadSource.java

    r12655 r12684  
    3131
    3232    /**
    33      * Add a download source to the dialog, see {@link DownloadDialog}.
    34      * @param dialog The download dialog.
    35      */
    36     void addGui(DownloadDialog dialog);
    37 
    38     /**
    3933     * Defines whether this download source should be visible only in the expert mode.
    4034     * @return Returns {@code true} if the download source should be visible only in the
  • trunk/src/org/openstreetmap/josm/gui/download/OSMDownloadSource.java

    r12655 r12684  
    55
    66import java.awt.Color;
     7import java.awt.Dimension;
    78import java.awt.Font;
    89import java.awt.GridBagLayout;
     
    118119
    119120    @Override
    120     public void addGui(DownloadDialog dialog) {
    121         dialog.addDownloadSource(this);
    122     }
    123 
    124     @Override
    125121    public boolean onlyExpert() {
    126122        return false;
     
    138134        private final JLabel sizeCheck = new JLabel();
    139135
     136        private static final String SIMPLE_NAME = "osmdownloadpanel";
    140137        private static final BooleanProperty DOWNLOAD_OSM = new BooleanProperty("download.osm.data", true);
    141138        private static final BooleanProperty DOWNLOAD_GPS = new BooleanProperty("download.osm.gps", false);
     
    143140
    144141        /**
    145          * Creates a new {@link OSMDownloadSourcePanel}
    146          * @param ds The osm download source the panel is for
     142         * Creates a new {@link OSMDownloadSourcePanel}.
     143         * @param ds The osm download source the panel is for.
    147144         */
    148145        public OSMDownloadSourcePanel(OSMDownloadSource ds) {
     
    175172            add(cbDownloadNotes, GBC.eol().insets(1, 5, 1, 5));
    176173            add(sizeCheck, GBC.eol().anchor(GBC.EAST).insets(5, 5, 5, 2));
     174
     175            setMinimumSize(new Dimension(450, 115));
    177176        }
    178177
     
    278277        }
    279278
     279        @Override
     280        public String getSimpleName() {
     281            return SIMPLE_NAME;
     282        }
     283
    280284        private void updateSizeCheck(Bounds bbox) {
    281             boolean isAreaTooLarge = false;
    282285            if (bbox == null) {
    283286                sizeCheck.setText(tr("No area selected yet"));
    284287                sizeCheck.setForeground(Color.darkGray);
    285             } else if (!isDownloadNotes() && !isDownloadOsmData() && !isDownloadGpxData()) {
     288                return;
     289            }
     290
     291            boolean isAreaTooLarge = false;
     292            if (!isDownloadNotes() && !isDownloadOsmData() && !isDownloadGpxData()) {
    286293                isAreaTooLarge = false;
    287294            } else if (isDownloadNotes() && !isDownloadOsmData() && !isDownloadGpxData()) {
  • trunk/src/org/openstreetmap/josm/gui/download/OverpassDownloadSource.java

    r12655 r12684  
    7171
    7272    @Override
    73     public void addGui(DownloadDialog dialog) {
    74         dialog.addDownloadSource(this);
    75     }
    76 
    77     @Override
    7873    public boolean onlyExpert() {
    7974        return true;
     
    8984        private OverpassQueryList overpassQueryList;
    9085
     86        private static final String SIMPLE_NAME = "overpassdownloadpanel";
    9187        private static final BooleanProperty OVERPASS_QUERY_LIST_OPENED =
    9288                new BooleanProperty("download.overpass.query-list.opened", false);
     
    180176            add(innerPanel, BorderLayout.CENTER);
    181177            add(listPanel, BorderLayout.EAST);
     178
     179            setMinimumSize(new Dimension(450, 240));
    182180        }
    183181
     
    275273        }
    276274
     275        @Override
     276        public String getSimpleName() {
     277            return SIMPLE_NAME;
     278        }
     279
    277280        /**
    278281         * Action that delegates snippet creation to {@link OverpassQueryList#createNewItem()}.
Note: See TracChangeset for help on using the changeset viewer.