X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=7c95ed78e19dd96e5aa029bfcd0292b057dcd16d;hb=9807ea8cc4e867378c52d51b832168d4bc611d29;hp=bbaaa5a2ff1e606c99dc8da97c8d54470c4d6c49;hpb=d03971168d7f0192862cf5b57602ecf3e341b457;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index bbaaa5a..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