X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=a3a23964579116ad01f4bb1881014106f729d703;hb=0452450533728e478ef8c893ea2cb3483c740fb3;hp=7917efab40ca85f30fe1de541a4615a31b1d4e0b;hpb=55442cd37d5587dacdb8b642a3349debdffc4188;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 7917efa..a3a2396 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 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 @@ -28,131 +28,110 @@ 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; public class FeatureSettings extends JPanel { + DasSourceBrowser dassourceBrowser; + jalview.io.DasSequenceFeatureFetcher dasFeatureFetcher; + JPanel settingsPane = new JPanel(); + JPanel dasSettingsPane = new JPanel(); final FeatureRenderer fr; - final AlignmentPanel ap; - final AlignViewport av; + public final AlignFrame af; Object [][] originalData; final JInternalFrame frame; JScrollPane scrollPane = new JScrollPane(); JTable table; JPanel groupPanel; + JSlider transparency = new JSlider(); - boolean alignmentHasFeatures = false; + JPanel transPanel = new JPanel(new FlowLayout()); - public FeatureSettings(AlignViewport av, final AlignmentPanel ap) + public FeatureSettings(AlignFrame af) { - this.ap = ap; - this.av = av; - fr = ap.seqPanel.seqCanvas.getFeatureRenderer(); - av.alignment.getSequences(); - frame = new JInternalFrame(); - frame.setContentPane(this); - Desktop.addInternalFrame(frame, "Sequence Feature Settings", 400, 300); - frame.setLayer(JLayeredPane.PALETTE_LAYER); + this.af = af; + fr = af.getFeatureRenderer(); - setTableData(); + transparency.setMaximum( 100 - (int)(fr.transparency*100) ) ; - final JSlider transparency = new JSlider(0, 70, 100 - (int)(fr.transparency*100) ); - transparency.addChangeListener(new ChangeListener() - { - public void stateChanged(ChangeEvent evt) - { - fr.setTransparency( (float) (100 - transparency.getValue()) / 100f); - ap.repaint(); - } - }); + try + { + jbInit(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } - JPanel transPanel = new JPanel(new FlowLayout()); - transPanel.add(new JLabel("Transparency")); - transPanel.add(transparency); - JButton button = new JButton("Invert Selection"); - transPanel.add(button); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - invertSelection(); - } - }); + table = new JTable(); + table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12)); + table.setFont(new Font("Verdana", Font.PLAIN, 12)); + table.setDefaultRenderer(Color.class, + new ColorRenderer()); - ////////////////////////////////////////////// - //We're going to need those OK cancel buttons - JPanel buttonPanel = new JPanel(new FlowLayout()); - button = new JButton("OK"); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - try - { - frame.setClosed(true); - } - catch (Exception exe) - {} - } - }); - buttonPanel.add(button); - button = new JButton("Cancel"); - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent evt) - { - try - { - updateFeatureRenderer(originalData); - frame.setClosed(true); - } - catch (Exception exe) - {} - } - }); - buttonPanel.add(button); + table.setDefaultEditor(Color.class, + new ColorEditor()); - 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); + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - this.setLayout(new BorderLayout()); - JPanel bigPanel = new JPanel(new BorderLayout()); - bigPanel.add(transPanel, BorderLayout.SOUTH); - bigPanel.add(scrollPane, BorderLayout.CENTER); - if(groupPanel!=null) - { - groupPanel.setLayout( - new GridLayout(fr.featureGroups.size() / 4 + 1, 4)); + table.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent evt) + { + selectedRow = table.rowAtPoint(evt.getPoint()); + } + }); - groupPanel.validate(); - bigPanel.add(groupPanel, BorderLayout.NORTH); - } - add(bigPanel, BorderLayout.CENTER); - add(buttonPanel, BorderLayout.SOUTH); + table.addMouseMotionListener(new MouseMotionAdapter() + { + public void mouseDragged(MouseEvent evt) + { + int newRow = table.rowAtPoint(evt.getPoint()); + if (newRow != selectedRow + && selectedRow != -1 + && newRow != -1) + { + Object[] temp = new Object[3]; + temp[0] = table.getValueAt(selectedRow, 0); + temp[1] = table.getValueAt(selectedRow, 1); + temp[2] = table.getValueAt(selectedRow, 2); + + table.setValueAt(table.getValueAt(newRow, 0), selectedRow, 0); + table.setValueAt(table.getValueAt(newRow, 1), selectedRow, 1); + table.setValueAt(table.getValueAt(newRow, 2), selectedRow, 2); + + table.setValueAt(temp[0], newRow, 0); + table.setValueAt(temp[1], newRow, 1); + table.setValueAt(temp[2], newRow, 2); + + selectedRow = newRow; + } + } + }); + + scrollPane.setViewportView(table); + + 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, 450); + frame.setLayer(JLayeredPane.PALETTE_LAYER); } - void setTableData() + synchronized public void setTableData() { - alignmentHasFeatures = false; - if (fr.featureGroups == null) fr.featureGroups = new Hashtable(); @@ -161,14 +140,12 @@ public class FeatureSettings extends JPanel SequenceFeature[] tmpfeatures; String group; - for (int i = 0; i < av.alignment.getHeight(); i++) + for (int i = 0; i < af.getViewport().alignment.getHeight(); i++) { - if (av.alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures() == null) + if (af.getViewport().alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures() == null) continue; - alignmentHasFeatures = true; - - tmpfeatures = av.alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); + tmpfeatures = af.getViewport().alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); int index = 0; while (index < tmpfeatures.length) @@ -192,32 +169,44 @@ public class FeatureSettings extends JPanel visible = ( (Boolean) fr.featureGroups.get(group)).booleanValue(); } - fr.featureGroups.put(group, new Boolean(visible)); - - if (groupPanel == null) - { - groupPanel = new JPanel(); - } - - final JCheckBox check = new JCheckBox(group, visible); - check.setFont(new Font("Serif", Font.BOLD, 12)); - check.addItemListener(new ItemListener() - { - public void itemStateChanged(ItemEvent evt) + if (groupPanel == null) { - fr.featureGroups.put(check.getText(), - new Boolean(check.isSelected())); - ap.seqPanel.seqCanvas.repaint(); - if (ap.overviewPanel != null) - ap.overviewPanel.updateOverviewImage(); + groupPanel = new JPanel(); + } - resetTable(true); + boolean alreadyAdded = false; + for(int g=0; g0) + { + iSize = af.getViewport().getSelectionGroup().getSize(); + 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(); + } + dasFeatureFetcher = + new jalview.io.DasSequenceFeatureFetcher( + dataset, + this, + selectedSources); + + af.getViewport().setShowSequenceFeatures(true); + af.showSeqFeatures.setSelected(true); + } + + public void saveDAS_actionPerformed(ActionEvent e) + { + dassourceBrowser.saveProperties(jalview.bin.Cache.applicationProperties); + } + + public void complete() + { + fetchDAS.setEnabled(true); + cancelDAS.setEnabled(false); + } + + public void cancelDAS_actionPerformed(ActionEvent e) + { + dasFeatureFetcher.cancel(); + fetchDAS.setEnabled(true); + cancelDAS.setEnabled(false); + } ///////////////////////////////////////////////////////////////////////// // http://java.sun.com/docs/books/tutorial/uiswing/components/table.html