From: Jim Procter Date: Mon, 21 Apr 2014 09:25:24 +0000 (+0100) Subject: JAL-967 JAL-1482 new feature renderer api - needs more design work X-Git-Tag: Jalview_2_9~123^2~27 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=23b954d9c84a16a7dc12ab331a01e44d5e0e5cd4 JAL-967 JAL-1482 new feature renderer api - needs more design work --- diff --git a/src/jalview/api/AlignmentViewPanel.java b/src/jalview/api/AlignmentViewPanel.java index 1705995..9089310 100644 --- a/src/jalview/api/AlignmentViewPanel.java +++ b/src/jalview/api/AlignmentViewPanel.java @@ -48,4 +48,9 @@ public interface AlignmentViewPanel extends OOMHandlerI * ensuring the alignment is still visible. */ void adjustAnnotationHeight(); + + FeatureRenderer getFeatureRenderer(); + + FeatureRenderer cloneFeatureRenderer(); + } diff --git a/src/jalview/api/FeatureRenderer.java b/src/jalview/api/FeatureRenderer.java index ea7f55a..baba482 100644 --- a/src/jalview/api/FeatureRenderer.java +++ b/src/jalview/api/FeatureRenderer.java @@ -18,7 +18,9 @@ */ package jalview.api; +import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; +import jalview.schemes.GraduatedColor; import java.awt.Color; @@ -35,4 +37,8 @@ public interface FeatureRenderer void featuresAdded(); + Object getFeatureStyle(String ft); + + void setColour(String ft, Object ggc); + } diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index 5a49281..cd1d20a 100644 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -143,12 +143,18 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { return seqPanel.seqCanvas.sr; } - - public FeatureRenderer getFeatureRenderer() + @Override + public jalview.api.FeatureRenderer getFeatureRenderer() { return seqPanel.seqCanvas.fr; } - + @Override + public jalview.api.FeatureRenderer cloneFeatureRenderer() + { + FeatureRenderer nfr = new FeatureRenderer(av); + nfr.transferSettings(seqPanel.seqCanvas.fr); + return nfr; + } public void alignmentChanged() { av.alignmentChanged(this); diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 0a40439..e11f1b4 100644 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -79,31 +79,41 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer } } - public void transferSettings(FeatureRenderer fr) + public void transferSettings(jalview.api.FeatureRenderer _fr) { - renderOrder = fr.renderOrder; - featureGroups = fr.featureGroups; - featureColours = fr.featureColours; - transparency = fr.transparency; - if (av != null && fr.av != null && fr.av != av) + if (_fr instanceof FeatureRenderer) { - if (fr.av.featuresDisplayed != null) + FeatureRenderer fr = (FeatureRenderer) _fr; + renderOrder = fr.renderOrder; + featureGroups = fr.featureGroups; + featureColours = fr.featureColours; + transparency = fr.transparency; + if (av != null && fr.av != null && fr.av != av) { - if (av.featuresDisplayed == null) - { - av.featuresDisplayed = new Hashtable(); - } - else + if (fr.av.featuresDisplayed != null) { - av.featuresDisplayed.clear(); - } - Enumeration en = fr.av.featuresDisplayed.keys(); - while (en.hasMoreElements()) - { - av.featuresDisplayed.put(en.nextElement(), Boolean.TRUE); + if (av.featuresDisplayed == null) + { + av.featuresDisplayed = new Hashtable(); + } + else + { + av.featuresDisplayed.clear(); + } + Enumeration en = fr.av.featuresDisplayed.keys(); + while (en.hasMoreElements()) + { + av.featuresDisplayed.put(en.nextElement(), Boolean.TRUE); + } } } } + else + { + throw new Error( + "Implementation error: cannot port feature settings from implementation of type " + + _fr.getClass() + " to " + getClass()); + } } static String lastFeatureAdded; diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 6bfe4bd..671a7cb 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -1502,18 +1502,23 @@ public class AlignmentPanel extends GAlignmentPanel implements new OOMWarning(string, error, this); } - public FeatureRenderer cloneFeatureRenderer() + @Override + public jalview.api.FeatureRenderer cloneFeatureRenderer() { return new FeatureRenderer(this); } - + @Override + public jalview.api.FeatureRenderer getFeatureRenderer() + { + return seqPanel.seqCanvas.getFeatureRenderer(); + } public void updateFeatureRenderer(FeatureRenderer fr) { fr.transferSettings(seqPanel.seqCanvas.getFeatureRenderer()); } - public void updateFeatureRendererFrom(FeatureRenderer fr) + public void updateFeatureRendererFrom(jalview.api.FeatureRenderer fr) { if (seqPanel.seqCanvas.getFeatureRenderer() != null) { diff --git a/src/jalview/gui/AppJmolBinding.java b/src/jalview/gui/AppJmolBinding.java index 80a7b9e..bd80c76 100644 --- a/src/jalview/gui/AppJmolBinding.java +++ b/src/jalview/gui/AppJmolBinding.java @@ -60,7 +60,7 @@ public class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding { if (fr == null) { - fr = ap.cloneFeatureRenderer(); + fr = (jalview.gui.FeatureRenderer) ap.cloneFeatureRenderer(); } else { diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index c07fdcf..5c7f32a 100644 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -39,7 +39,7 @@ import jalview.util.MessageManager; * @author $author$ * @version $Revision$ */ -public class FeatureRenderer implements jalview.api.FeatureRenderer +public class FeatureRenderer extends jalview.viewmodel.FeatureRenderer implements jalview.api.FeatureRenderer { AlignmentPanel ap; @@ -174,8 +174,9 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer * update from another feature renderer * @param fr settings to copy */ - public void transferSettings(FeatureRenderer fr) + public void transferSettings(jalview.api.FeatureRenderer _fr) { + FeatureRenderer fr = (FeatureRenderer) _fr; FeatureRendererSettings frs = new FeatureRendererSettings(fr); this.renderOrder = frs.renderOrder; this.featureGroups = frs.featureGroups; diff --git a/src/jalview/ws/jws2/AADisorderClient.java b/src/jalview/ws/jws2/AADisorderClient.java index 49a904c..5759cb2 100644 --- a/src/jalview/ws/jws2/AADisorderClient.java +++ b/src/jalview/ws/jws2/AADisorderClient.java @@ -322,7 +322,7 @@ public class AADisorderClient extends JabawsCalcWorker implements { if (dispFeatures) { - jalview.gui.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap) + jalview.api.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap) .cloneFeatureRenderer(); for (String ft : fc.keySet()) {