X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FViewSelectionMenu.java;h=f1b24c6bb979254b564e7f76a75731979ac5bb52;hb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;hp=f58a816e03159366d66dbb47464370f84b2dc6c8;hpb=d35615977a165ed5a0710e5f747218d03499cd73;p=jalview.git diff --git a/src/jalview/gui/ViewSelectionMenu.java b/src/jalview/gui/ViewSelectionMenu.java index f58a816..f1b24c6 100644 --- a/src/jalview/gui/ViewSelectionMenu.java +++ b/src/jalview/gui/ViewSelectionMenu.java @@ -1,3 +1,21 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Copyright (C) 2014 The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.gui; import java.awt.Component; @@ -104,12 +122,17 @@ public class ViewSelectionMenu extends JMenu * menu selection event occurred. */ private boolean append = false; + /** - * flag indicating if the itemStateChanged listener for view associated menu items is currently enabled + * flag indicating if the itemStateChanged listener for view associated menu + * items is currently enabled */ private boolean enabled = true; + private JMenuItem selectAll, invertSel; - private JCheckBoxMenuItem toggleview=null; + + private JCheckBoxMenuItem toggleview = null; + private void rebuild() { removeAll(); @@ -121,10 +144,13 @@ public class ViewSelectionMenu extends JMenu } if (allviews.length >= 2) { - - toggleview = new JCheckBoxMenuItem("Select many views",append); - toggleview.setToolTipText("When selected, toggles whether a particular view is used to colour the alignment."); - toggleview.addItemListener(new ItemListener() { + // ensure we update menu state to reflect external selection list state + append = append || _selectedviews.size() > 1; + toggleview = new JCheckBoxMenuItem("Select many views", append); + toggleview + .setToolTipText("When enabled, allows many views to be selected."); + toggleview.addItemListener(new ItemListener() + { @Override public void itemStateChanged(ItemEvent arg0) @@ -135,12 +161,12 @@ public class ViewSelectionMenu extends JMenu selectAll.setEnabled(append); invertSel.setEnabled(append); } - + } - + }); add(toggleview); - add(selectAll= new JMenuItem("Select all views")); + add(selectAll = new JMenuItem("Select all views")); selectAll.addActionListener(new ActionListener() { @@ -149,16 +175,16 @@ public class ViewSelectionMenu extends JMenu { for (Component c : getMenuComponents()) { - boolean t=append; - append=true; + boolean t = append; + append = true; if (c instanceof JCheckBoxMenuItem) { - if (toggleview!=c && !((JCheckBoxMenuItem) c).isSelected()) + if (toggleview != c && !((JCheckBoxMenuItem) c).isSelected()) { ((JCheckBoxMenuItem) c).doClick(); } } - append=t; + append = t; } } }); @@ -169,16 +195,16 @@ public class ViewSelectionMenu extends JMenu @Override public void actionPerformed(ActionEvent e) { - boolean t=append; - append=true; + boolean t = append; + append = true; for (Component c : getMenuComponents()) { - if (toggleview!=c && c instanceof JCheckBoxMenuItem) + if (toggleview != c && c instanceof JCheckBoxMenuItem) { ((JCheckBoxMenuItem) c).doClick(); } } - append=t; + append = t; } }); invertSel.setEnabled(append); @@ -199,35 +225,40 @@ public class ViewSelectionMenu extends JMenu { if (enabled) { - if (append) - { - if (e.getStateChange() == e.SELECTED) + if (append) { - _selectedviews.add(p); + enabled = false; + // toggle the inclusion state + if (_selectedviews.indexOf(p) == -1) + { + _selectedviews.add(p); + a.setSelected(true); + } + else + { + _selectedviews.remove(p); + a.setSelected(false); + } + enabled = true; + _handler.itemStateChanged(e); } else { - _selectedviews.remove(p); - } - _handler.itemStateChanged(e); - } - else - { - // Deselect everything and select this item only - _selectedviews.clear(); - _selectedviews.add(p); - enabled=false; - for (Component c : getMenuComponents()) - { - if (c instanceof JCheckBoxMenuItem) + // Deselect everything and select this item only + _selectedviews.clear(); + _selectedviews.add(p); + enabled = false; + for (Component c : getMenuComponents()) { - ((JCheckBoxMenuItem) c).setSelected(a == c); + if (c instanceof JCheckBoxMenuItem) + { + ((JCheckBoxMenuItem) c).setSelected(a == c); + } } + enabled = true; + // only fire event if we weren't selected before + _handler.itemStateChanged(e); } - enabled=true; - // only fire event if we weren't selected before - _handler.itemStateChanged(e); - } } } });