001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005import static org.openstreetmap.josm.tools.I18n.tr;
006
007import java.awt.event.ActionEvent;
008import java.awt.event.KeyEvent;
009
010import org.openstreetmap.josm.gui.MainApplication;
011import org.openstreetmap.josm.gui.MapFrame;
012import org.openstreetmap.josm.spi.preferences.Config;
013import org.openstreetmap.josm.tools.ImageProvider;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017* This action toggles visibility of dialogs panel and other panels to free more space for drawing (GIMP-like)
018* @author cmuelle8
019* @since 5965
020*/
021public class DialogsToggleAction extends ToggleAction {
022
023    private boolean toolbarPreviouslyVisible;
024    private boolean sideToolbarPreviouslyVisible;
025
026    /**
027     * Constructs a new {@code DialogsToggleAction}.
028     */
029    public DialogsToggleAction() {
030        super(tr("Dialogs panel"),
031              (ImageProvider) null, /* no icon */
032              tr("Toggle dialogs panel, maximize mapview"),
033              Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"), KeyEvent.VK_TAB, Shortcut.DIRECT),
034              true, "dialogspanel", /* register in toolbar */
035              false
036        );
037        setHelpId(ht("/ToggleDialogs"));
038        setSelected(Config.getPref().getBoolean("draw.dialogspanel", true));
039        notifySelectedState();
040    }
041
042    @Override
043    public void actionPerformed(ActionEvent e) {
044        toggleSelectedState(e);
045        Config.getPref().putBoolean("draw.dialogspanel", isSelected());
046        notifySelectedState();
047        setMode();
048    }
049
050    protected void setMode() {
051        if (MainApplication.isDisplayingMapView()) {
052            boolean selected = isSelected();
053            if (!selected) {
054                toolbarPreviouslyVisible = Config.getPref().getBoolean("toolbar.visible", true);
055                sideToolbarPreviouslyVisible = Config.getPref().getBoolean("sidetoolbar.visible", true);
056            }
057            MapFrame map = MainApplication.getMap();
058            map.setDialogsPanelVisible(selected);
059            map.statusLine.setVisible(selected || Config.getPref().getBoolean("statusbar.always-visible", true));
060            MainApplication.getMenu().setVisible(selected || Config.getPref().getBoolean("menu.always-visible", true));
061            // Toolbars listen to preference changes, use it here
062            if (!Config.getPref().getBoolean("toolbar.always-visible", true) && (!selected || toolbarPreviouslyVisible)) {
063                Config.getPref().putBoolean("toolbar.visible", selected);
064            }
065            if (!Config.getPref().getBoolean("sidetoolbar.always-visible", true) && (!selected || sideToolbarPreviouslyVisible)) {
066                Config.getPref().putBoolean("sidetoolbar.visible", selected);
067            }
068            map.mapView.rememberLastPositionOnScreen();
069        }
070    }
071}