*/
package jalview.gui;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.HiddenColumns;
-import jalview.datamodel.SequenceGroup;
-import jalview.renderer.ScaleRenderer;
-import jalview.renderer.ScaleRenderer.ScaleMark;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.viewmodel.ViewportListenerI;
-import jalview.viewmodel.ViewportRanges;
-
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.JPopupMenu;
import javax.swing.ToolTipManager;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
+import jalview.datamodel.SequenceGroup;
+import jalview.renderer.ScaleRenderer;
+import jalview.renderer.ScaleRenderer.ScaleMark;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.viewmodel.ViewportListenerI;
+import jalview.viewmodel.ViewportRanges;
+
/**
* The panel containing the sequence ruler (when not in wrapped mode), and
* supports a range of mouse operations to select, hide or reveal columns.
reveal = null;
if (!av.hasHiddenColumns())
{
+ int res = (evt.getX() / av.getCharWidth())
+ + av.getRanges().getStartRes();
+ highlightAllStructPos(res);
return;
}
.getRegionWithEdgeAtRes(res);
res = av.getAlignment().getHiddenColumns().visibleToAbsoluteColumn(res);
-
+ highlightAllStructPos(res);
ToolTipManager.sharedInstance().registerComponent(this);
this.setToolTipText(
MessageManager.getString("label.reveal_hidden_columns"));
repaint();
}
+ public void highlightAllStructPos(int col)
+ {
+ ap.getStructureSelectionManager().highlightPositionsOnMany(
+ ap.av.getAlignment().getSequencesArray(), new int[]
+ { col, col }, ap);
+
+ }
+
/**
* DOCUMENT ME!
*
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
+import jalview.datamodel.ContiguousI;
import jalview.datamodel.HiddenColumns;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SearchResults;
sl.highlightAtoms(atoms);
}
+ public void highlightStructureRegionsFor(StructureListener sl,
+ SequenceI[] seqs, int... columns)
+ {
+ List<SequenceI> to_highlight = new ArrayList<SequenceI>();
+ for (SequenceI seq : seqs)
+ {
+ if (sl.isListeningFor(seq))
+ {
+ to_highlight.add(seq);
+ }
+ }
+ if (to_highlight.size() == 0)
+ {
+ return;
+ }
+ List<AtomSpec> atoms = new ArrayList<>();
+ for (SequenceI seq : to_highlight)
+ {
+ int atomNo;
+ for (StructureMapping sm : mappings)
+ {
+ if (sm.sequence == seq || sm.sequence == seq.getDatasetSequence()
+ || (sm.sequence.getDatasetSequence() != null && sm.sequence
+ .getDatasetSequence() == seq.getDatasetSequence()))
+ {
+
+ for (int i = 0; i < columns.length; i += 2)
+ {
+ ContiguousI positions = seq.findPositions(columns[i] + 1,
+ columns[i + 1] + 1);
+ if (positions == null)
+ {
+ continue;
+ }
+ for (int index = positions.getBegin(); index <= positions
+ .getEnd(); index++)
+ {
+
+ atomNo = sm.getAtomNum(index);
+
+ if (atomNo > 0)
+ {
+ atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain,
+ sm.getPDBResNum(index), atomNo));
+ }
+ }
+ }
+ }
+ }
+ if (atoms.size() > 0)
+ {
+ sl.highlightAtoms(atoms);
+ }
+ }
+ }
+
/**
* true if a mouse over event from an external (ie Vamsas) source is being
* handled
return seqmappings;
}
+ /**
+ * quick and dirty route to just highlight all structure positions for a range
+ * of columns
+ *
+ * @param sequencesArray
+ * @param is
+ * start-end columns on sequencesArray
+ * @param source
+ * origin parent AlignmentPanel
+ */
+ public void highlightPositionsOnMany(SequenceI[] sequencesArray, int[] is,
+ Object source)
+ {
+ for (int i = 0; i < listeners.size(); i++)
+ {
+ Object listener = listeners.elementAt(i);
+ if (listener == source)
+ {
+ // TODO listener (e.g. SeqPanel) is never == source (AlignViewport)
+ // Temporary fudge with SequenceListener.getVamsasSource()
+ continue;
+ }
+ if (listener instanceof StructureListener)
+ {
+ highlightStructureRegionsFor((StructureListener) listener,
+ sequencesArray, is);
+ }
+ }
+ }
+
}