X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=7c95ed78e19dd96e5aa029bfcd0292b057dcd16d;hb=0ad0cc7fe1de5c299363b0dc9b4b032d5d199275;hp=7dae70387af45bd3f515697e9a661035d0cb1790;hpb=daeacba9a61069114333b550a987242d8e47e7f7;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 7dae703..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,116 +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(); - for(int i=0; i< av.alignment.getHeight(); i++) - { - features = av.alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); - if(features==null) - continue; + allFeatures = new Hashtable(); + SequenceFeature[] features; + + for (int i = 0; i < av.alignment.getHeight(); i++) + { + features = av.alignment.getSequenceAt(i).getDatasetSequence(). + getSequenceFeatures(); - e = features.elements(); - while(e.hasMoreElements()) + if (features == null) + continue; + + int index = 0; + while (index < features.length) + { + if(features[index].getFeatureGroup()!=null + && !fr.featureGroups.containsKey(features[index].getFeatureGroup())) { - sf = (SequenceFeature)e.nextElement(); - if(!allFeatures.contains(sf.getType())) - { - allFeatures.addElement(sf.getType()); - } + 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())) + { + 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