X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewerBase.java;h=09d2dcb4bdb1581e589226881287bc31e8d3cccc;hb=39c97de2f7b8ef87b42f121f37d4f158d1651fe9;hp=ed42ffa7c98761275a3e42a9015e8dc12e183c9e;hpb=ca160187a050f6d4e50158cd5b51f75c83a7179e;p=jalview.git diff --git a/src/jalview/gui/StructureViewerBase.java b/src/jalview/gui/StructureViewerBase.java index ed42ffa..09d2dcb 100644 --- a/src/jalview/gui/StructureViewerBase.java +++ b/src/jalview/gui/StructureViewerBase.java @@ -141,6 +141,8 @@ public abstract class StructureViewerBase extends GStructureViewer protected boolean allChainsSelected = false; + protected boolean allHetatmBeingSelected = false; + protected JMenu viewSelectionMenu; /** @@ -604,6 +606,80 @@ public abstract class StructureViewerBase extends GStructureViewer chainMenu.add(menuItem); } } + void setHetatmMenuItems(List hetatmNames) + { + hetatmMenu.removeAll(); + if (hetatmNames == null || hetatmNames.isEmpty()) + { + hetatmMenu.setVisible(false); + return; + } + hetatmMenu.setVisible(true); + allHetatmBeingSelected=false; + JMenuItem allMenuItem = new JMenuItem( + MessageManager.getString("label.all")); + JMenuItem noneMenuItem = new JMenuItem( + MessageManager.getString("label.none")); + allMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) { + { + allHetatmBeingSelected=true; + // Toggle state of everything - on + for (int i = 0; i < hetatmMenu.getItemCount(); i++) + { + if (hetatmMenu.getItem(i) instanceof JCheckBoxMenuItem) + { + ((JCheckBoxMenuItem) hetatmMenu.getItem(i)).setSelected(true); + } + } + allHetatmBeingSelected=false; + showSelectedHetatms(); + } + }}); + + noneMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) { + { + allHetatmBeingSelected=true; + // Toggle state of everything off + for (int i = 0; i < hetatmMenu.getItemCount(); i++) + { + if (hetatmMenu.getItem(i) instanceof JCheckBoxMenuItem) + { + ((JCheckBoxMenuItem) hetatmMenu.getItem(i)).setSelected(false); + } + } + allHetatmBeingSelected=false; + showSelectedHetatms(); + } + }}); + hetatmMenu.add(noneMenuItem); + hetatmMenu.add(allMenuItem); + + for (String chain : hetatmNames) + { + JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(chain, false); + menuItem.addItemListener(new ItemListener() + { + @Override + public void itemStateChanged(ItemEvent evt) + { + if (!allHetatmBeingSelected) + { + // update viewer only when we were clicked, not programmatically + // checked/unchecked + showSelectedHetatms(); + } + } + }); + + hetatmMenu.add(menuItem); + } + } /** * Action on selecting one of Jalview's registered colour schemes @@ -1009,6 +1085,7 @@ public abstract class StructureViewerBase extends GStructureViewer return; } setChainMenuItems(binding.getChainNames()); + setHetatmMenuItems(binding.getHetatmNames()); this.setTitle(binding.getViewerTitle(getViewerName(), true)); @@ -1158,7 +1235,25 @@ public abstract class StructureViewerBase extends GStructureViewer } getBinding().showChains(toshow); } - + /** + * Display selected hetatms in viewer + */ + protected void showSelectedHetatms() + { + List toshow = new ArrayList<>(); + for (int i = 0; i < hetatmMenu.getItemCount(); i++) + { + if (hetatmMenu.getItem(i) instanceof JCheckBoxMenuItem) + { + JCheckBoxMenuItem item = (JCheckBoxMenuItem) hetatmMenu.getItem(i); + if (item.isSelected()) + { + toshow.add(item.getText()); + } + } + } + getBinding().showHetatms(toshow); + } /** * Tries to fetch a PDB file and save to a temporary local file. Returns the * saved file path if successful, or null if not.