+ public void run()
+ {
+ _started = true;
+
+ try
+ {
+ initVarna();
+ } catch (OutOfMemoryError oomerror)
+ {
+ new OOMWarning("When trying to open the Varna viewer!", oomerror);
+ } catch (Exception ex)
+ {
+ Cache.log.error("Couldn't open Varna viewer!", ex);
+ }
+ }
+
+ @Override
+ public void onUINewStructure(VARNAConfig v, RNA r)
+ {
+
+ }
+
+ @Override
+ public void onWarningEmitted(String s)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ private class VarnaHighlighter
+ {
+ private HighlightRegionAnnotation _lastHighlight;
+
+ private RNA _lastRNAhighlighted = null;
+
+ public void highlightRegion(RNA rna, int start, int end)
+ {
+ clearSelection(null);
+ HighlightRegionAnnotation highlight = new HighlightRegionAnnotation(
+ rna.getBasesBetween(start, end));
+ rna.addHighlightRegion(highlight);
+ _lastHighlight = highlight;
+ _lastRNAhighlighted = rna;
+
+ }
+
+ public HighlightRegionAnnotation getLastHighlight()
+ {
+ return _lastHighlight;
+ }
+
+ public RNA getLastRNA()
+ {
+ return _lastRNAhighlighted;
+ }
+
+ public void clearSelection(AppVarnaBinding vab)
+ {
+ if (_lastRNAhighlighted != null)
+ {
+ _lastRNAhighlighted.removeHighlightRegion(_lastHighlight);
+ if (vab != null)
+ {
+ vab.updateSelectedRNA(_lastRNAhighlighted);
+ }
+ _lastRNAhighlighted = null;
+ _lastHighlight = null;
+
+ }
+ }
+ }
+
+ VarnaHighlighter mouseOverHighlighter = new VarnaHighlighter(),
+ selectionHighlighter = new VarnaHighlighter();
+
+ /**
+ * If a mouseOver event from the AlignmentPanel is noticed the currently
+ * selected RNA in the VARNA window is highlighted at the specific position.
+ * To be able to remove it before the next highlight it is saved in
+ * _lastHighlight
+ */
+ @Override
+ public void mouseOverSequence(SequenceI sequence, int index)
+ {
+ RNA rna = vab.getSelectedRNA();
+ if (seqs.get(rna) == sequence)
+ {
+ ShiftList shift = offsets.get(rna);
+ if (shift != null)
+ {
+ // System.err.print("Orig pos:"+index);
+ index = shift.shift(index);
+ // System.err.println("\nFinal pos:"+index);
+ }
+ mouseOverHighlighter.highlightRegion(rna, index, index);
+ vab.updateSelectedRNA(rna);
+ }
+ }
+
+ @Override
+ public void onStructureRedrawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void selection(SequenceGroup seqsel, ColumnSelection colsel,
+ SelectionSource source)
+ {
+ if (source != ap.av)
+ {
+ // ignore events from anything but our parent alignpanel
+ // TODO - reuse many-one panel-view system in jmol viewer
+ return;
+ }
+ if (seqsel != null && seqsel.getSize() > 0)
+ {
+ int start = seqsel.getStartRes(), end = seqsel.getEndRes();
+ RNA rna = vab.getSelectedRNA();
+ ShiftList shift = offsets.get(rna);
+ if (shift != null)