X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=7c95ed78e19dd96e5aa029bfcd0292b057dcd16d;hb=4263dac5b885f760215fa599eb453e1221767d04;hp=532518055cb689c1996d07b18a60b9a2a08053c4;hpb=9c5d69ef1e102b1eac18ec13c362522f40c9000d;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 5325180..7c95ed7 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -1,3 +1,21 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.gui; import jalview.datamodel.*; @@ -17,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) { @@ -104,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); @@ -113,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