From cbfa4d2bc1282662ad88756f1b0b2d8b3b82bd11 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Fri, 13 Apr 2007 15:52:18 +0000 Subject: [PATCH 1/1] FeatureRenderer takes alignmentPanel --- src/jalview/gui/AlignFrame.java | 2 +- src/jalview/gui/AppJMol.java | 8 +++- src/jalview/gui/FeatureRenderer.java | 87 ++++++++++++++++++++-------------- src/jalview/gui/FeatureSettings.java | 27 +++++------ src/jalview/gui/Finder.java | 2 +- src/jalview/gui/OverviewPanel.java | 9 +++- src/jalview/gui/PopupMenu.java | 2 +- src/jalview/gui/SeqCanvas.java | 10 ++-- src/jalview/gui/SeqPanel.java | 17 +++---- src/jalview/io/HTMLOutput.java | 6 +-- 10 files changed, 94 insertions(+), 76 deletions(-) diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 8ece83f..1396c93 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -853,7 +853,7 @@ public class AlignFrame */ protected void htmlMenuItem_actionPerformed(ActionEvent e) { - new HTMLOutput(viewport, + new HTMLOutput(alignPanel, alignPanel.seqPanel.seqCanvas.getSequenceRenderer(), alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); } diff --git a/src/jalview/gui/AppJMol.java b/src/jalview/gui/AppJMol.java index 14acb14..da94e4c 100644 --- a/src/jalview/gui/AppJMol.java +++ b/src/jalview/gui/AppJMol.java @@ -195,6 +195,8 @@ public synchronized void addSequence(SequenceI [] seq) jmolpopup = JmolPopup.newJmolPopup(viewer); viewer.evalStringQuiet(command); + + colourBySequence = true; } @@ -604,12 +606,13 @@ public synchronized void addSequence(SequenceI [] seq) SequenceRenderer sr = ap.seqPanel.seqCanvas.getSequenceRenderer(); boolean showFeatures = false; + if (ap.av.showSequenceFeatures) { showFeatures = true; if (fr == null) { - fr = new jalview.gui.FeatureRenderer(ap.av); + fr = new jalview.gui.FeatureRenderer(ap); } fr.transferSettings(ap.seqPanel.seqCanvas.getFeatureRenderer()); @@ -622,7 +625,8 @@ public synchronized void addSequence(SequenceI [] seq) { for (int m = 0; m < mapping.length; m++) { - if (mapping[m].getSequence() == sequence[s]) + if (mapping[m].getSequence() == sequence[s] + && ap.av.alignment.findIndex(sequence[s])>-1) { for (int r = 0; r < sequence[s].getLength(); r++) { diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 596203b..04324ac 100755 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -38,6 +38,7 @@ import jalview.datamodel.*; */ public class FeatureRenderer { + AlignmentPanel ap; AlignViewport av; Color resBoxColour; float transparency = 1.0f; @@ -65,18 +66,20 @@ public class FeatureRenderer * @param av * DOCUMENT ME! */ - public FeatureRenderer(AlignViewport av) + public FeatureRenderer(AlignmentPanel ap) { - this.av = av; + this.ap = ap; + this.av = ap.av; } + public void transferSettings(FeatureRenderer fr) { - renderOrder = fr.renderOrder; - featureGroups = fr.featureGroups; - featureColours = fr.featureColours; - transparency = fr.transparency; - featureOrder = fr.featureOrder; + this.renderOrder = fr.renderOrder; + this.featureGroups = fr.featureGroups; + this.featureColours = fr.featureColours; + this.transparency = fr.transparency; + this.featureOrder = fr.featureOrder; } BufferedImage offscreenImage; @@ -268,7 +271,7 @@ public class FeatureRenderer if (featureGroups != null && sequenceFeatures[sfindex].featureGroup != null - && + && sequenceFeatures[sfindex].featureGroup.length()!=0 && featureGroups.containsKey(sequenceFeatures[sfindex].featureGroup) && @@ -456,6 +459,21 @@ public class FeatureRenderer { if (!av.featuresDisplayed.containsKey(features[index].getType())) { + if(featureGroups.containsKey(features[index].getType())) + { + boolean visible = ( (Boolean) featureGroups.get( + features[index].featureGroup)).booleanValue(); + + if(!visible) + { + System.out.println(features[index].featureGroup + +" not visible"); + index++; + continue; + } + } + + if (! (features[index].begin == 0 && features[index].end == 0)) { // If beginning and end are 0, the feature is for the whole sequence @@ -553,7 +571,7 @@ public class FeatureRenderer } public Color getColour(String featureType) { - if (featureColours.get(featureType) == null) + if (!featureColours.containsKey(featureType)) { jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(); @@ -569,19 +587,12 @@ public class FeatureRenderer static String lastFeatureGroupAdded; static String lastDescriptionAdded; - public boolean createNewFeatures(SequenceI[] sequences, - SequenceFeature[] features) - { - return amendFeatures(sequences, features, true, null); - } - int featureIndex = 0; boolean amendFeatures(final SequenceI[] sequences, final SequenceFeature[] features, boolean newFeatures, final AlignmentPanel ap) { - findAllFeatures(); featureIndex = 0; @@ -602,10 +613,12 @@ public class FeatureRenderer { public void mousePressed(MouseEvent evt) { - colour.setBackground( - JColorChooser.showDialog(Desktop.desktop, - "Select Feature Colour", - colour.getBackground())); + Color col = JColorChooser.showDialog(Desktop.desktop, + "Select Feature Colour", + colour.getBackground()); + if (col != null) + colour.setBackground(col); + } }); @@ -804,7 +817,11 @@ public class FeatureRenderer sf.type = lastFeatureAdded; sf.featureGroup = lastFeatureGroupAdded; sf.description = lastDescriptionAdded; + setColour(sf.type, colour.getBackground()); + av.featuresDisplayed.put(sf.type, + new Integer(colour.getBackground().getRGB())); + try { sf.begin = ( (Integer) start.getValue()).intValue(); @@ -816,16 +833,16 @@ public class FeatureRenderer ffile.parseDescriptionHTML(sf, false); } } - else + else //NEW FEATURES ADDED { if (reply == JOptionPane.OK_OPTION - && name.getText() != null - && source.getText() != null) + && lastFeatureAdded.length()>0) { for (int i = 0; i < sequences.length; i++) { features[i].type = lastFeatureAdded; - features[i].featureGroup = lastFeatureGroupAdded; + if (lastFeatureGroupAdded!=null) + features[i].featureGroup = lastFeatureGroupAdded; features[i].description = lastDescriptionAdded; sequences[i].addSequenceFeature(features[i]); ffile.parseDescriptionHTML(features[i], false); @@ -836,22 +853,22 @@ public class FeatureRenderer av.featuresDisplayed = new Hashtable(); } - if (featureGroups == null) + if (lastFeatureGroupAdded != null) { - featureGroups = new Hashtable(); + if (featureGroups == null) + featureGroups = new Hashtable(); + featureGroups.put(lastFeatureGroupAdded, new Boolean(true)); } - Color col = colour.getBackground(); setColour(lastFeatureAdded, colour.getBackground()); - - if(lastFeatureGroupAdded!=null) - { - featureGroups.put(lastFeatureGroupAdded, new Boolean(true)); - av.featuresDisplayed.put(lastFeatureGroupAdded, + av.featuresDisplayed.put(lastFeatureAdded, new Integer(col.getRGB())); - } - findAllFeatures(); + + findAllFeatures(false); + + ap.paintAlignment(true); + return true; } @@ -861,7 +878,7 @@ public class FeatureRenderer } } - findAllFeatures(); + ap.paintAlignment(true); return true; } diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 4c0450c..96e82c1 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -136,9 +136,9 @@ public class FeatureSettings fs.handlingUpdate=false; } } - + }); - + frame = new JInternalFrame(); frame.setContentPane(this); Desktop.addInternalFrame(frame, "Sequence Feature Settings", 400, 450); @@ -157,7 +157,7 @@ public class FeatureSettings * true when Feature Settings are updating from feature renderer */ private boolean handlingUpdate=false; - + /** * contains a float[3] for each feature type string. created by setTableData */ @@ -212,13 +212,13 @@ public class FeatureSettings index++; } } - + resetTable(null); validate(); } /** - * + * * @param group * @return true if group has been seen before and is already added to set. */ @@ -228,7 +228,7 @@ public class FeatureSettings { visible = ( (Boolean) fr.featureGroups.get(group)).booleanValue(); } else { - visible=true; // new group is always made visible + visible=true; // new group is always made visible } if (groupPanel == null) @@ -250,7 +250,7 @@ public class FeatureSettings if (alreadyAdded) { - + return true; } @@ -564,16 +564,16 @@ public class FeatureSettings boolean sort=false; for (int i=0;i0) sort = sort || width[i-1]>width[i]; @@ -581,7 +581,7 @@ public class FeatureSettings if (sort) jalview.util.QuickSort.sort(width, data); // update global priority order - + updateFeatureRenderer(data,false); table.repaint(); } @@ -604,11 +604,6 @@ public class FeatureSettings { fr.setFeaturePriority(data, visibleNew); af.alignPanel.paintAlignment(true); - - if (af.alignPanel.overviewPanel != null) - { - af.alignPanel.overviewPanel.updateOverviewImage(); - } } int selectedRow = -1; diff --git a/src/jalview/gui/Finder.java b/src/jalview/gui/Finder.java index 5366b37..5668b42 100755 --- a/src/jalview/gui/Finder.java +++ b/src/jalview/gui/Finder.java @@ -124,7 +124,7 @@ public class Finder } if (ap.seqPanel.seqCanvas.getFeatureRenderer() - .createNewFeatures(seqs, features)) + .amendFeatures(seqs, features, true, ap)) { ap.alignFrame.showSeqFeatures.setSelected(true); av.setShowSequenceFeatures(true); diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index aa3c9ae..04e5f13 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -65,7 +65,7 @@ public class OverviewPanel sr = new SequenceRenderer(av); sr.renderGaps = false; sr.forOverview = true; - fr = new FeatureRenderer(av); + fr = new FeatureRenderer(ap); // scale the initial size of overviewpanel to shape of alignment float initialScale = (float) av.alignment.getWidth() / @@ -429,7 +429,12 @@ public class OverviewPanel */ public void paintComponent(Graphics g) { - if (miniMe != null && !resizing) + if(resizing) + { + g.setColor(Color.white); + g.fillRect(0,0,getWidth(),getHeight()); + } + else if (miniMe != null) { g.drawImage(miniMe, 0, 0, this); } diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 09e2c01..45bf5ed 100755 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -1344,7 +1344,7 @@ public class PopupMenu } if (ap.seqPanel.seqCanvas.getFeatureRenderer() - .createNewFeatures(seqs, features)) + .amendFeatures(seqs, features, true, ap)) { ap.alignFrame.showSeqFeatures.setSelected(true); ap.av.setShowSequenceFeatures(true); diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index ec55600..eedb3eb 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -53,10 +53,10 @@ public class SeqCanvas * * @param av DOCUMENT ME! */ - public SeqCanvas(AlignViewport av) + public SeqCanvas(AlignmentPanel ap) { - this.av = av; - fr = new FeatureRenderer(av); + this.av = ap.av; + fr = new FeatureRenderer(ap); sr = new SequenceRenderer(av); setLayout(new BorderLayout()); PaintRefresher.Register(this, av.getSequenceSetId()); @@ -73,10 +73,6 @@ public class SeqCanvas return fr; } - public AlignViewport getViewport() - { - return av; - } /** * DOCUMENT ME! diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index a5ffb80..774d6ad 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -86,20 +86,20 @@ public class SeqPanel * @param avp DOCUMENT ME! * @param p DOCUMENT ME! */ - public SeqPanel(AlignViewport avp, AlignmentPanel p) + public SeqPanel(AlignViewport av, AlignmentPanel ap) { linkImageURL = getClass().getResource("/images/link.gif"); ToolTipManager.sharedInstance().registerComponent(this); ToolTipManager.sharedInstance().setInitialDelay(0); ToolTipManager.sharedInstance().setDismissDelay(10000); - this.av = avp; + this.av = av; setBackground(Color.white); - seqCanvas = new SeqCanvas(avp); + seqCanvas = new SeqCanvas(ap); setLayout(new BorderLayout()); add(seqCanvas, BorderLayout.CENTER); - ap = p; + this.ap = ap; if (!av.isDataset()) { @@ -204,6 +204,7 @@ public class SeqPanel continue; } + if ( (features[i].getBegin() <= res) && (features[i].getEnd() >= res)) { @@ -226,6 +227,7 @@ public class SeqPanel ap.alignFrame.addHistoryItem(editCommand); av.firePropertyChange("alignment", null, av.getAlignment().getSequences()); + ap.paintAlignment(true); } startseq = -1; @@ -509,8 +511,6 @@ public class SeqPanel } endEditing(); - - ap.paintAlignment(true); } /** @@ -1568,13 +1568,14 @@ public class SeqPanel SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup.getName()); } + PaintRefresher.Refresh(this, av.getSequenceSetId()); + ap.paintAlignment(true); } + changeEndRes = false; changeStartRes = false; stretchGroup = null; - PaintRefresher.Refresh(this, av.getSequenceSetId()); - ap.paintAlignment(true); } /** diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java index 6c2c51e..8406f3d 100755 --- a/src/jalview/io/HTMLOutput.java +++ b/src/jalview/io/HTMLOutput.java @@ -32,12 +32,12 @@ public class HTMLOutput FeatureRenderer fr; Color color; - public HTMLOutput(AlignViewport av, SequenceRenderer sr, FeatureRenderer fr1) + public HTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) { - this.av = av; + this.av = ap.av; this.sr = sr; - fr = new FeatureRenderer(av); + fr = new FeatureRenderer(ap); fr.transferSettings(fr1); JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. -- 1.7.10.2