X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=ad9ad1dd3f49f7f1ffd15f43cee105b1bb814315;hb=e3eb93bc131a0f088312fddde91b728dbebe40d4;hp=532518055cb689c1996d07b18a60b9a2a08053c4;hpb=9c5d69ef1e102b1eac18ec13c362522f40c9000d;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 5325180..ad9ad1d 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.*; @@ -10,220 +28,300 @@ import java.awt.event.*; import javax.swing.table.*; import java.io.*; import jalview.io.JalviewFileChooser; +import java.awt.BorderLayout; +import java.awt.Font; +import java.awt.Color; +import org.biojava.dasobert.dasregistry.DasSource; +import org.biojava.dasobert.dasregistry.DasCoordinateSystem; public class FeatureSettings extends JPanel { + DasSourceBrowser dassourceBrowser; + JPanel settingsPane = new JPanel(); + JPanel dasSettingsPane = new JPanel(); final FeatureRenderer fr; - final AlignmentPanel ap; - final AlignViewport av; + final AlignFrame af; Object [][] originalData; final JInternalFrame frame; JScrollPane scrollPane = new JScrollPane(); JTable table; + JPanel groupPanel; + JSlider transparency = new JSlider(); - public FeatureSettings(AlignViewport av, final AlignmentPanel ap) + JPanel transPanel = new JPanel(new FlowLayout()); + boolean alignmentHasFeatures = false; + + public FeatureSettings(AlignFrame af) { - this.ap = ap; - this.av = av; - fr = ap.seqPanel.seqCanvas.getFeatureRenderer(); - av.alignment.getSequences(); + this.af = af; + fr = af.getFeatureRenderer(); + + transparency.setMaximum( 100 - (int)(fr.transparency*100) ) ; + + try + { + jbInit(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + dassourceBrowser = new DasSourceBrowser(); + dasSettingsPane.add(dassourceBrowser, BorderLayout.CENTER); + + + + if (af.getViewport().featuresDisplayed == null || fr.renderOrder==null) + fr.findAllFeatures(); + + + setTableData(); + frame = new JInternalFrame(); frame.setContentPane(this); - Desktop.addInternalFrame(frame, "Sequence Feature Settings", 400, 300); + Desktop.addInternalFrame(frame, "Sequence Feature Settings", 400, 450); + frame.setLayer(JLayeredPane.PALETTE_LAYER); + } - setTableData(); + public void setTableData() + { + alignmentHasFeatures = false; - final JSlider transparency = new JSlider(0, 70, 0); - transparency.addChangeListener(new ChangeListener() - { - public void stateChanged(ChangeEvent evt) - { - fr.setTransparency( (float) (100 - transparency.getValue()) / 100f); - ap.repaint(); - } - }); + if (fr.featureGroups == null) + fr.featureGroups = new Hashtable(); - JPanel transPanel = new JPanel(new FlowLayout()); - transPanel.add(new JLabel("Transparency")); - transPanel.add(transparency); + Vector allFeatures = new Vector(); + Vector allGroups = new Vector(); + SequenceFeature[] tmpfeatures; + String group; - ////////////////////////////////////////////// - //We're going to need those OK cancel buttons - JPanel buttonPanel = new JPanel(new FlowLayout()); - JButton button = new JButton("OK"); - button.addActionListener(new ActionListener() + for (int i = 0; i < af.getViewport().alignment.getHeight(); i++) { - public void actionPerformed(ActionEvent evt) + if (af.getViewport().alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures() == null) + continue; + + alignmentHasFeatures = true; + + tmpfeatures = af.getViewport().alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); + + int index = 0; + while (index < tmpfeatures.length) { - try + if(tmpfeatures[index].begin == 0 && tmpfeatures[index].end ==0) { - frame.setClosed(true); + index++; + continue; } - catch (Exception exe) - {} - } - }); - buttonPanel.add(button); - button = new JButton("Cancel"); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - try + + if(tmpfeatures[index].getFeatureGroup()!=null) { - updateFeatureRenderer(originalData); - frame.setClosed(true); - } - catch (Exception exe) - {} - } - }); - buttonPanel.add(button); + group = tmpfeatures[index].featureGroup; + if(!allGroups.contains(group)) + { + allGroups.addElement(group); + + boolean visible = true; + if (fr.featureGroups.containsKey(group)) + { + visible = ( (Boolean) fr.featureGroups.get(group)).booleanValue(); + } + else + { + fr.featureGroups.put(group, new Boolean(visible)); + if (groupPanel == null) + { + groupPanel = new JPanel(); + } - button = new JButton("Load Colours"); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - load(); - } - }); - buttonPanel.add(button); - button = new JButton("Save Colours"); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - save(); - } - }); - buttonPanel.add(button); + final JCheckBox check = new JCheckBox(group, visible); + check.setFont(new Font("Serif", Font.BOLD, 12)); + check.addItemListener(new ItemListener() + { + public void itemStateChanged(ItemEvent evt) + { + fr.featureGroups.put(check.getText(), + new Boolean(check.isSelected())); + af.alignPanel.seqPanel.seqCanvas.repaint(); + if (af.alignPanel.overviewPanel != null) + af.alignPanel.overviewPanel.updateOverviewImage(); + + resetTable(true); + } + }); + groupPanel.add(check); + } + } + + } - this.setLayout(new BorderLayout()); - JPanel bigPanel = new JPanel(new BorderLayout()); - bigPanel.add(transPanel, BorderLayout.SOUTH); - bigPanel.add(scrollPane, BorderLayout.CENTER); + if (!allFeatures.contains(tmpfeatures[index].getType())) + { + allFeatures.addElement(tmpfeatures[index].getType()); + } + index ++; + } + } - add(bigPanel, BorderLayout.CENTER); - add(buttonPanel, BorderLayout.SOUTH); + if(!alignmentHasFeatures) + { + // try + // { frame.setClosed(true); } + // catch (Exception ex){} + + // JOptionPane.showInternalMessageDialog( + /// Desktop.desktop, "No features have been added to this alignment!", + // + // return; + } + resetTable(false); } - void setTableData() + + void resetTable(boolean groupsChanged) { - Vector allFeatures = new Vector(); - Vector features; - Enumeration e; - SequenceFeature sf; + SequenceFeature [] tmpfeatures; + String group=null, type; + Vector visibleChecks = new Vector(); - for(int i=0; i< av.alignment.getHeight(); i++) + //Find out which features should be visible depending on which groups + //are selected / deselected + for (int i = 0; i < af.getViewport().alignment.getHeight(); i++) { - features = av.alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); - if(features==null) - continue; - e = features.elements(); - while(e.hasMoreElements()) - { - sf = (SequenceFeature)e.nextElement(); - if(!allFeatures.contains(sf.getType())) - { - allFeatures.addElement(sf.getType()); - } - } - } - if(allFeatures.size()<1) - { - try{ - frame.setClosed(true); - }catch(Exception ex){} - return; - } + tmpfeatures = af.getViewport().alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); + if (tmpfeatures == null) + continue; - int fSize = allFeatures.size(); + int index = 0; + while (index < tmpfeatures.length) + { + group = tmpfeatures[index].featureGroup; - String type; - boolean originalExists = false; - if(originalData!=null) - originalExists = true; - else - originalData = new Object[fSize][3]; + if(tmpfeatures[index].begin==0 && tmpfeatures[index].end==0) + { + index ++; + continue; + } + + if (group==null || fr.featureGroups.get(group)==null || + ((Boolean) fr.featureGroups.get(group)).booleanValue()) + { + type = tmpfeatures[index].getType(); + if(!visibleChecks.contains(type) ) + { + visibleChecks.addElement(type); + } + } + index++; + } + } + int fSize = visibleChecks.size(); Object [][] data = new Object[fSize][3]; - for(int i=0; i-1; ro--) { - originalData[i][0] = type; - originalData[i][1] = col; - if (fr.featuresDisplayed != null) - originalData[i][2] = new Boolean(fr.featuresDisplayed.contains(type)); - else - originalData[i][2] = new Boolean(true); + type = fr.renderOrder[ro]; + + if(!visibleChecks.contains(type)) + continue; + + data[dataIndex][0] = type; + data[dataIndex][1] = fr.getColour(type); + data[dataIndex][2] = new Boolean(af.getViewport().featuresDisplayed.containsKey(type)); + dataIndex++; + visibleChecks.removeElement(type); } } - //////////////////////////////////// - //Now build the table - table = new JTable(new FeatureTableModel(data)); - scrollPane.setViewportView(table); - table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12)); - table.setFont(new Font("Verdana", Font.PLAIN, 12)); - table.setDefaultRenderer(Color.class, - new ColorRenderer()); - table.setDefaultEditor(Color.class, - new ColorEditor()); + fSize = visibleChecks.size(); + for(int i=0; i0) + { + iSize = af.getViewport().getSelectionGroup().getSize(false); + dataset = new SequenceI[iSize]; + seqs = af.getViewport().getSelectionGroup(). + getSequencesInOrder( + af.getViewport().getAlignment()); + } + else + { + iSize = af.getViewport().getAlignment().getHeight(); + seqs = af.getViewport().getAlignment().getSequencesArray(); + } + + dataset = new SequenceI[iSize]; + for (int i = 0; i < iSize; i++) + { + dataset[i] = seqs[i].getDatasetSequence(); + } + + new jalview.io.DasSequenceFeatureFetcher( + dataset, + af, + selectedSources); + + af.getViewport().setShowSequenceFeatures(true); + af.showSeqFeatures.setSelected(true); + } + + public void saveDAS_actionPerformed(ActionEvent e) + { + dassourceBrowser.saveProperties(jalview.bin.Cache.applicationProperties); + } ///////////////////////////////////////////////////////////////////////// // http://java.sun.com/docs/books/tutorial/uiswing/components/table.html @@ -339,6 +615,11 @@ public class FeatureSettings extends JPanel return data; } + public void setData(Object[][] data) + { + this.data = data; + } + public int getColumnCount() { return columnNames.length; }