X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=7c95ed78e19dd96e5aa029bfcd0292b057dcd16d;hb=0ad0cc7fe1de5c299363b0dc9b4b032d5d199275;hp=47cedd37e2c32cc07b6b305d2f36b14e4ba1da39;hpb=534f42828bef0cd5be55cc77795db1abe5f4a94f;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 47cedd3..7c95ed7 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -35,10 +35,12 @@ public class FeatureSettings extends JPanel final FeatureRenderer fr; final AlignmentPanel ap; final AlignViewport av; + Hashtable allFeatures; Object [][] originalData; final JInternalFrame frame; JScrollPane scrollPane = new JScrollPane(); JTable table; + JPanel groupPanel; public FeatureSettings(AlignViewport av, final AlignmentPanel ap) { @@ -122,7 +124,13 @@ public class FeatureSettings extends JPanel JPanel bigPanel = new JPanel(new BorderLayout()); bigPanel.add(transPanel, BorderLayout.SOUTH); bigPanel.add(scrollPane, BorderLayout.CENTER); - + if(groupPanel!=null) + { + groupPanel.setLayout( + new GridLayout(groupPanel.getComponentCount()/3, 4)); + groupPanel.validate(); + bigPanel.add(groupPanel, BorderLayout.NORTH); + } add(bigPanel, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); @@ -131,117 +139,179 @@ public class FeatureSettings extends JPanel void setTableData() { - Vector allFeatures = new Vector(); - Vector features; - Enumeration e; - SequenceFeature sf; + if (fr.featureGroups == null) + fr.featureGroups = new Hashtable(); + else + fr.featureGroups.clear(); + + allFeatures = new Hashtable(); + SequenceFeature[] features; for (int i = 0; i < av.alignment.getHeight(); i++) { features = av.alignment.getSequenceAt(i).getDatasetSequence(). getSequenceFeatures(); + if (features == null) continue; - e = features.elements(); - while (e.hasMoreElements()) + int index = 0; + while (index < features.length) { - sf = (SequenceFeature) e.nextElement(); - if (!allFeatures.contains(sf.getType())) + if(features[index].getFeatureGroup()!=null + && !fr.featureGroups.containsKey(features[index].getFeatureGroup())) + { + fr.featureGroups.put(features[index].getFeatureGroup(), new Boolean(true)); + if(groupPanel==null) + groupPanel = new JPanel(); + + final JCheckBox check = new JCheckBox(features[index].getFeatureGroup(), true); + check.setFont(new Font("Serif", Font.BOLD, 12)); + check.addItemListener(new ItemListener() + { + public void itemStateChanged(ItemEvent evt) + { + if (fr.featureGroups.containsKey(check.getText())) + { + fr.featureGroups.put(check.getText(), + new Boolean(check.isSelected())); + ap.seqPanel.seqCanvas.repaint(); + if (ap.overviewPanel != null) + ap.overviewPanel.updateOverviewImage(); + } + resetTable(); + } + }); + groupPanel.add(check); + } + if (!allFeatures.contains(features[index].getType())) { - allFeatures.addElement(sf.getType()); + if(features[index].featureGroup!=null) + allFeatures.put(features[index].getType(), features[index].featureGroup); + else + allFeatures.put(features[index].getType(), "NOGROUP"); } + index++; } } if(allFeatures.size()<1) { - try{ - frame.setClosed(true); - }catch(Exception ex){} + try + { frame.setClosed(true); } + catch (Exception ex){} + + JOptionPane.showInternalMessageDialog( + Desktop.desktop, "No features have been added to this alignment!", + "No Sequence Features", JOptionPane.WARNING_MESSAGE); + return; } + resetTable(); + } + + void resetTable() + { int fSize = allFeatures.size(); String type; boolean originalExists = false; - if(originalData!=null) + if (originalData != null) originalExists = true; else originalData = new Object[fSize][3]; - Object [][] data = new Object[fSize][3]; - for(int i=0; i