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.Main;
011import org.openstreetmap.josm.tools.ImageProvider;
012import org.openstreetmap.josm.tools.Shortcut;
013
014/**
015* This action toggles visibility of dialogs panel and other panels to free more space for drawing (GIMP-like)
016* @author cmuelle8
017* @since 5965
018*/
019public class DialogsToggleAction extends ToggleAction {
020
021    /**
022     * Constructs a new {@code DialogsToggleAction}.
023     */
024    public DialogsToggleAction() {
025        super(tr("Toggle dialogs panel"),
026              (ImageProvider) null, /* no icon */
027              tr("Toggle dialogs panel, maximize mapview"),
028              Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"), KeyEvent.VK_TAB, Shortcut.DIRECT),
029              true, "dialogspanel", /* register in toolbar */
030              false
031        );
032        putValue("help", ht("/Action/ToggleDialogsPanel"));
033        setSelected(Main.pref.getBoolean("draw.dialogspanel", true));
034        notifySelectedState();
035    }
036
037    @Override
038    public void actionPerformed(ActionEvent e) {
039        toggleSelectedState(e);
040        Main.pref.put("draw.dialogspanel", isSelected());
041        notifySelectedState();
042        setMode();
043    }
044
045    /**
046     * To call if this action must be initially run at JOSM startup.
047     */
048    public void initial() {
049        if (isSelected()) {
050            setMode();
051        }
052    }
053
054    protected void setMode() {
055        if (Main.isDisplayingMapView()) {
056            boolean selected = isSelected();
057            Main.map.setDialogsPanelVisible(selected);
058            Main.map.statusLine.setVisible(selected || Main.pref.getBoolean("statusbar.always-visible", true));
059            Main.main.menu.setVisible(selected || Main.pref.getBoolean("menu.always-visible", true));
060            // Toolbars listen to preference changes, use it here
061            if (!Main.pref.getBoolean("toolbar.always-visible", true)) {
062                Main.pref.put("toolbar.visible", selected);
063            }
064            if (!Main.pref.getBoolean("sidetoolbar.always-visible", true)) {
065                Main.pref.put("sidetoolbar.visible", selected);
066            }
067            Main.map.mapView.rememberLastPositionOnScreen();
068        }
069    }
070}