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