import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import java.util.Vector;
protected boolean allChainsSelected = false;
+ protected boolean allHetatmBeingSelected = false;
+
protected JMenu viewSelectionMenu;
/**
chainMenu.add(menuItem);
}
}
+ void setHetatmMenuItems(Map<String,String> 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 (Map.Entry<String, String> chain : hetatmNames.entrySet())
+ {
+ JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(chain.getKey(), false);
+ menuItem.setToolTipText(chain.getValue());
+ 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
return;
}
setChainMenuItems(binding.getChainNames());
+ setHetatmMenuItems(binding.getHetatmNames());
this.setTitle(binding.getViewerTitle(getViewerName(), true));
}
getBinding().showChains(toshow);
}
-
+ /**
+ * Display selected hetatms in viewer
+ */
+ protected void showSelectedHetatms()
+ {
+ List<String> 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.
// TODO: check for memory leaks where instance isn't finalised because jmb
// holds a reference to the window
// jmb = null;
+
+ try {
+ svbs.remove(this);
+ } catch (Throwable t)
+ {
+ Console.info("Unexpected exception when deregistering structure viewer",t);
+ }
dispose();
}