Ignore:
Timestamp:
2011-11-26T16:52:05+01:00 (12 years ago)
Author:
stoecker
Message:

fix #6953 - patch by akks - improve hide handling for left toolbar

File:
1 edited

Legend:

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

    r4590 r4609  
    1414import java.awt.event.MouseWheelListener;
    1515import java.util.ArrayList;
     16import java.util.Collection;
    1617import java.util.HashMap;
    1718import java.util.List;
     
    107108
    108109    public final ButtonGroup toolGroup = new ButtonGroup();
    109 
    110     public final JButton otherButton = new JButton(new OtherButtonsAction());
     110   
     111    private List<IconToggleButton> allDialogButtons = new ArrayList<IconToggleButton>();
     112    private List<IconToggleButton> allMapModeButtons = new ArrayList<IconToggleButton>();
     113   
     114    private final ListAllButtonsAction listAllDialogsAction = new ListAllButtonsAction(allDialogButtons);
     115    private final ListAllButtonsAction listAllMapModesAction = new ListAllButtonsAction(allMapModeButtons);
     116    private final JButton listAllToggleDialogsButton = new JButton(listAllDialogsAction);
     117    private final JButton listAllMapModesButton = new JButton(listAllMapModesAction);
     118    {
     119        listAllDialogsAction.setButton(listAllToggleDialogsButton);
     120        listAllMapModesAction.setButton(listAllMapModesButton);
     121    }
    111122
    112123    /**
     
    262273    public IconToggleButton addToggleDialog(final ToggleDialog dlg) {
    263274        final IconToggleButton button = new IconToggleButton(dlg.getToggleAction());
    264         button.addMouseListener(new PopupMenuLauncher(new JPopupMenu() {
    265             {
    266                 add(new AbstractAction() {
    267                     {
    268                         putValue(NAME, tr("Hide this button"));
    269                         putValue(SHORT_DESCRIPTION, tr("Click the arrow at the bottom to show it again."));
    270                     }
    271 
    272                     @Override
    273                     public void actionPerformed(ActionEvent e) {
    274                         dlg.hideButton();
    275                         validateToolBarToggle();
    276                     }
    277                 });
    278             }
    279         }));
     275        button.setShowHideButtonListener(dlg);
     276        addHideContextMenu(button);
    280277        dlg.setButton(button);
    281         if (button.isVisible()) {
    282             toolBarToggle.add(button);
    283         }
     278        toolBarToggle.add(button);
    284279        allDialogs.add(dlg);
     280        allDialogButtons.add(button);
     281        button.applyButtonHiddenPreferences();
    285282        if (dialogsPanel.initialized) {
    286283            dialogsPanel.add(dlg);
     
    289286    }
    290287
    291     public void validateToolBarToggle() {
    292         toolBarToggle.removeAll();
    293         for (ToggleDialog dlg : allDialogs) {
    294             if (dlg.getButton().isVisible()) {
    295                 toolBarToggle.add(dlg.getButton());
    296             }
    297         }
    298     }
     288
    299289
    300290    public void addMapMode(IconToggleButton b) {
    301291        toolBarActions.add(b);
    302292        toolGroup.add(b);
     293        allMapModeButtons.add(b);
    303294        if (b.getAction() instanceof MapMode) {
    304295            mapModes.add((MapMode) b.getAction());
    305296        } else
    306297            throw new IllegalArgumentException("MapMode action must be subclass of MapMode");
     298        addHideContextMenu(b);
     299        b.applyButtonHiddenPreferences();
    307300    }
    308301
     
    363356        toolBarActions.setAlignmentX(0.5f);
    364357        jb.add(toolBarActions);
    365 
     358        listAllMapModesButton.setAlignmentX(0.5f);
     359        listAllMapModesButton.setBorder(null);
     360        listAllMapModesButton.setFont(listAllMapModesButton.getFont().deriveFont(Font.PLAIN));
     361        jb.add(listAllMapModesButton);
     362       
    366363        if(Main.pref.getBoolean("sidetoolbar.togglevisible", true)) {
    367364            jb.addSeparator(new Dimension(0,18));
    368365            toolBarToggle.setAlignmentX(0.5f);
    369366            jb.add(toolBarToggle);
    370             otherButton.setAlignmentX(0.5f);
    371             otherButton.setBorder(null);
    372             otherButton.setFont(otherButton.getFont().deriveFont(Font.PLAIN));
    373             jb.add(otherButton);
     367            listAllToggleDialogsButton.setAlignmentX(0.5f);
     368            listAllToggleDialogsButton.setBorder(null);
     369            listAllToggleDialogsButton.setFont(listAllToggleDialogsButton.getFont().deriveFont(Font.PLAIN));
     370            jb.add(listAllToggleDialogsButton);
    374371        }
    375372
     
    393390    }
    394391
    395     class OtherButtonsAction extends AbstractAction {
    396 
    397         public OtherButtonsAction() {
     392    private void addHideContextMenu(final IconToggleButton b) {
     393        //context menu
     394        b.addMouseListener(new PopupMenuLauncher(new JPopupMenu() {
     395            {
     396                add(new AbstractAction() {
     397                    {
     398                        putValue(NAME, tr("Hide this button"));
     399                        putValue(SHORT_DESCRIPTION, tr("Click the arrow at the bottom to show it again."));
     400                    }
     401                    @Override
     402                    public void actionPerformed(ActionEvent e) {
     403                        b.setButtonHidden(true);
     404                        validateToolBarsVisibility();
     405                    }
     406                });
     407            }
     408        }));
     409    }
     410   
     411        class ListAllButtonsAction extends AbstractAction {
     412
     413        private JButton button;
     414        private Collection<? extends HideableButton> buttons;
     415       
     416               
     417        public ListAllButtonsAction(Collection<? extends HideableButton> buttons) {
     418            this.buttons = buttons;
    398419            putValue(NAME, ">>");
     420        }
     421
     422        public void setButton(JButton button) {
     423            this.button =  button;
    399424        }
    400425
     
    402427        public void actionPerformed(ActionEvent e) {
    403428            JPopupMenu menu = new JPopupMenu();
    404             for (final ToggleDialog t : allDialogs) {
     429            for (HideableButton b : buttons) {
     430                final HideableButton t = b;
    405431                menu.add(new JCheckBoxMenuItem(new AbstractAction() {
    406432                    {
    407                         putValue(NAME, t.getToggleAction().getValue(NAME));
    408                         putValue(SMALL_ICON, t.getToggleAction().getValue(SMALL_ICON));
    409                         putValue(SELECTED_KEY, !t.isButtonHidden());
     433                        putValue(NAME, t.getActionName());
     434                        putValue(SMALL_ICON, t.getIcon());
     435                        putValue(SELECTED_KEY, t.isButtonVisible());
    410436                        putValue(SHORT_DESCRIPTION, tr("Hide or show this toggle button"));
    411437                    }
    412438                    @Override
    413439                    public void actionPerformed(ActionEvent e) {
    414                         if ((Boolean) getValue(SELECTED_KEY)) {
    415                             t.showButton();
    416                             validateToolBarToggle();
    417                         } else {
    418                             t.hideButton();
    419                             validateToolBarToggle();
    420                         }
     440                        if ((Boolean) getValue(SELECTED_KEY)) t.showButton(); else t.hideButton();
     441                        validateToolBarsVisibility();
    421442                    }
    422443                }));
    423444            }
    424             Rectangle bounds = otherButton.getBounds();
    425             menu.show(otherButton, bounds.x+bounds.width, 0);
    426         }
     445            Rectangle bounds = button.getBounds();
     446            menu.show(button, bounds.x + bounds.width, 0);
     447        }
     448    }
     449
     450    public void validateToolBarsVisibility() {
     451        for (IconToggleButton b : allDialogButtons) {
     452            b.applyButtonHiddenPreferences();
     453        }
     454        toolBarToggle.repaint();
     455        for (IconToggleButton b : allMapModeButtons) {
     456            b.applyButtonHiddenPreferences();
     457        }
     458        toolBarActions.repaint();
    427459    }
    428460
Note: See TracChangeset for help on using the changeset viewer.