import jalview.analysis.NJTree;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureColourI;
+import jalview.api.FeatureSettingsModelI;
+import jalview.api.FeaturesDisplayedI;
import jalview.api.ViewStyleI;
import jalview.bin.Cache;
import jalview.commands.CommandI;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
-import java.util.Set;
import java.util.Vector;
import javax.swing.JInternalFrame;
AlignmentI al = getAlignment();
if (al != null)
{
- Set<AlignedCodonFrame> mappings = al.getCodonFrames();
+ List<AlignedCodonFrame> mappings = al.getCodonFrames();
if (mappings != null)
{
StructureSelectionManager ssm = StructureSelectionManager
* Check if any added sequence could be the object of a mapping or
* cross-reference; if so, make the mapping explicit
*/
- realiseMappings(getAlignment(), toAdd);
+ getAlignment().realiseMappings(toAdd.getSequences());
/*
* If any cDNA/protein mappings exist or can be made between the alignments,
*/
if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
{
- // if (toAdd.getDataset() == null)
- // {
- // // need to create ds seqs
- // for (SequenceI sq : toAdd.getSequences())
- // {
- // if (sq.getDatasetSequence() == null)
- // {
- // sq.createDatasetSequence();
- // }
- // }
- // }
if (AlignmentUtils.isMappable(toAdd, getAlignment()))
{
if (openLinkedAlignment(toAdd, title))
// TODO: JAL-407 regardless of above - identical sequences (based on ID and
// provenance) should share the same dataset sequence
+ AlignmentI al = getAlignment();
+ String gap = String.valueOf(al.getGapCharacter());
for (int i = 0; i < toAdd.getHeight(); i++)
{
- getAlignment().addSequence(toAdd.getSequenceAt(i));
- }
-
- setEndSeq(getAlignment().getHeight());
- firePropertyChange("alignment", null, getAlignment().getSequences());
- }
-
- /**
- * Check if any added sequence could be the object of a mapping or
- * cross-reference; if so, make the mapping explicit. Returns the count of
- * mappings updated.
- *
- * @param al
- * @param toAdd
- */
- protected int realiseMappings(AlignmentI al, AlignmentI toAdd)
- {
- // TODO this is proof of concept
- // we might want to give the user some choice here
- int count = 0;
- for (SequenceI seq : toAdd.getSequences())
- {
- count += realiseMappingsTo(al, seq);
- }
- return count;
- }
-
- /**
- * If the alignment holds any mappings to a dummy (placeholder) sequence that
- * matches the given sequence, then update the mapping to point to the
- * sequence. Returns the number of mappings updated.
- *
- * @param al
- * @param seq
- * @return
- */
- protected int realiseMappingsTo(AlignmentI al, SequenceI seq)
- {
- int count = 0;
- Set<AlignedCodonFrame> mappings = al.getDataset().getCodonFrames();
- // TODO are mappings on alignment or alignment dataset?!?
- for (AlignedCodonFrame mapping : mappings)
- {
+ SequenceI seq = toAdd.getSequenceAt(i);
/*
- * TODO could just go straight to realiseWith() here unless we want
- * to give the user some choice before going ahead
+ * experimental!
+ * - 'align' any mapped sequences as per existing
+ * e.g. cdna to genome, domain hit to protein sequence
+ * very experimental! (need a separate menu option for this)
+ * - only add mapped sequences ('select targets from a dataset')
*/
- if (mapping.isRealisableWith(seq))
+ if (true /*AlignmentUtils.alignSequenceAs(seq, al, gap, true, true)*/)
{
- count += mapping.realiseWith(seq);
+ al.addSequence(seq);
}
}
- return count;
+
+ setEndSeq(getAlignment().getHeight());
+ firePropertyChange("alignment", null, getAlignment().getSequences());
}
/**
return true;
}
+ /**
+ * Applies the supplied feature settings descriptor to currently known
+ * features. This supports an 'initial configuration' of feature colouring
+ * based on a preset or user favourite. This may then be modified in the usual
+ * way using the Feature Settings dialogue.
+ *
+ * @param featureSettings
+ */
+ public void applyFeaturesStyle(FeatureSettingsModelI featureSettings)
+ {
+ if (featureSettings == null)
+ {
+ return;
+ }
+
+ FeatureRenderer fr = getAlignPanel().getSeqPanel().seqCanvas
+ .getFeatureRenderer();
+ fr.findAllFeatures(true);
+ List<String> renderOrder = fr.getRenderOrder();
+ FeaturesDisplayedI displayed = fr.getFeaturesDisplayed();
+ displayed.clear();
+ // TODO this clears displayed.featuresRegistered - do we care?
+
+ /*
+ * set feature colour if specified by feature settings
+ * set visibility of all features
+ */
+ for (String type : renderOrder)
+ {
+ FeatureColourI preferredColour = featureSettings
+ .getFeatureColour(type);
+ if (preferredColour != null)
+ {
+ fr.setColour(type, preferredColour);
+ }
+ if (featureSettings.isFeatureDisplayed(type))
+ {
+ displayed.setVisible(type);
+ }
+ }
+
+ /*
+ * set visibility of feature groups
+ */
+ for (String group : fr.getFeatureGroups())
+ {
+ fr.setGroupVisibility(group, featureSettings.isGroupDisplayed(group));
+ }
+
+ /*
+ * order the features
+ */
+ if (featureSettings.optimiseOrder())
+ {
+ // TODO not supported (yet?)
+ }
+ else
+ {
+ fr.orderFeatures(featureSettings);
+ }
+ fr.setTransparency(featureSettings.getTransparency());
+ }
+
}