/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
*
* This file is part of Jalview.
*
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.*;
+import jalview.structure.StructureSelectionManager;
public class AlignmentPanel extends Panel implements AdjustmentListener, AlignmentViewPanel
{
// this value is set false when selection area being dragged
boolean fastPaint = true;
-
+
+ public void finalize() {
+ alignFrame=null;
+ av=null;
+ seqPanel=null;
+ seqPanelHolder=null;
+ sequenceHolderPanel=null;
+ scalePanel=null;
+ scalePanelHolder=null;
+ annotationPanel=null;
+ annotationPanelHolder=null;
+ annotationSpaceFillerHolder=null;
+ }
public AlignmentPanel(AlignFrame af, final AlignViewport av)
{
try
public void componentResized(ComponentEvent evt)
{
setScrollValues(av.getStartRes(), av.getStartSeq());
+ if (getSize().height>0 && annotationPanelHolder.getSize().height>0) {
+ validateAnnotationDimensions(false);
+ }
repaint();
}
+
});
Dimension d = calculateIdWidth();
Dimension d = calculateIdWidth();
d.setSize(d.width + 4, seqPanel.seqCanvas.getSize().height);
alabels.setSize(d.width + 4, ap);
+
idPanel.idCanvas.setSize(d);
hscrollFillerPanel.setSize(d);
public boolean scrollToPosition(SearchResults results,
boolean redrawOverview)
{
+
// do we need to scroll the panel?
if (results != null && results.getSize() > 0)
{
}
if (av.applet.debug) {
// DEBUG
- System.out.println("DEBUG: scroll didn't happen: start=" + r[0]
+ /*System.out.println("DEBUG: scroll: start=" + r[0]
+ " av.getStartRes()=" + av.getStartRes() + " end=" + r[1]
+ " seq.end=" + seq.getEnd() + " av.getEndRes()="
+ av.getEndRes() + " hextent=" + hextent);
+ */
}
int start = r[0];
int end = r[1];
{
return false;
}
- if (av.hasHiddenColumns)
+ return scrollTo(start, end, seqIndex, false, redrawOverview);
+ }
+ return true;
+ }
+ public boolean scrollTo(int ostart, int end, int seqIndex, boolean scrollToNearest, boolean redrawOverview)
+ {
+ int startv, endv, starts, ends, width;
+
+ int start=-1;
+ if (av.hasHiddenColumns)
+ {
+ start = av.getColumnSelection().findColumnPosition(ostart);
+ end = av.getColumnSelection().findColumnPosition(end);
+ if (start == end)
{
- start = av.getColumnSelection().findColumnPosition(start);
- end = av.getColumnSelection().findColumnPosition(end);
- if (start == end)
+ if (!scrollToNearest && !av.colSel.isVisible(ostart))
{
- if (!av.colSel.isVisible(r[0]))
- {
- // don't scroll - position isn't visible
- return false;
- }
+ // don't scroll - position isn't visible
+ return false;
}
}
- if (!av.wrapAlignment)
- {
+ }
+ else
+ {
+ start = ostart;
+ }
+ if (!av.wrapAlignment)
+ {
+ /*
+ int spos=av.getStartRes(),sqpos=av.getStartSeq();
+ if ((startv = av.getStartRes()) >= start)
+ {
+ spos=start-1;
+// seqIn
+// setScrollValues(start - 1, seqIndex);
+ }
+ else if ((endv = av.getEndRes()) <= end)
+ {
+// setScrollValues(spos=startv + 1 + end - endv, seqIndex);
+ spos=startv + 1 + end - endv;
+ }
+ else if ((starts = av.getStartSeq()) > seqIndex)
+ {
+ setScrollValues(av.getStartRes(), seqIndex);
+ }
+ else if ((ends = av.getEndSeq()) <= seqIndex)
+ {
+ setScrollValues(av.getStartRes(), starts + seqIndex - ends + 1);
+ }
+
+ /* */
if ((av.getStartRes() > end)
|| (av.getEndRes() < start)
|| ((av.getStartSeq() > seqIndex) || (av.getEndSeq() < seqIndex)))
seqIndex = 0;
}
}
+ // System.out.println("trying to scroll to: "+start+" "+seqIndex);
setScrollValues(start, seqIndex);
- }
+ }/**/
}
else
{
scrollToWrappedVisible(start);
}
- }
if (redrawOverview && overviewPanel != null)
{
overviewPanel.setBoxPosition();
apvscroll.addNotify();
hscroll.addNotify();
validate();
- addNotify();
- repaint();
+ paintAlignment(true);
}
/**
* calculate the annotation dimensions and refresh slider values accordingly.
* need to do repaints/notifys afterwards.
*/
protected void validateAnnotationDimensions(boolean adjustPanelHeight) {
+ boolean modified=false;
int height = annotationPanel.calcPanelHeight();
+ int minsize=0;
if (hscroll.isVisible())
{
- height += hscroll.getPreferredSize().height;
+ height += (minsize=hscroll.getPreferredSize().height);
+ }
+ if (apvscroll.isVisible()) {
+ minsize+=apvscroll.getPreferredSize().height;
}
int mheight = height;
+ Dimension d=sequenceHolderPanel.getSize(),e=idPanel.getSize();
+ int seqandannot=d.height-scalePanelHolder.getSize().height;
// sets initial preferred height
- if ((height+40) > getSize().height / 2)
+ if ((height+40) > seqandannot / 2)
{
- height = getSize().height / 2;
+ height = seqandannot / 2;
}
if (!adjustPanelHeight)
{
// maintain same window layout whilst updating sliders
- height=seqPanelHolder.getSize().height;
+ height=annotationPanelHolder.getSize().height;
+ }
+
+ if (seqandannot-height<5)
+ {
+ height = seqandannot;
}
- Dimension d=seqPanelHolder.getSize(),e=idPanel.getSize();
annotationPanel.setSize(new Dimension(d.width,height));
- alabels.setSize(e.width,height);
+ alabels.setSize(new Dimension(e.width,height));
annotationSpaceFillerHolder.setSize(new Dimension(e.width, height));
annotationPanelHolder.setSize(new Dimension(d.width, height));
- seqPanelHolder.setSize(d.width,d.height-height);
+ seqPanelHolder.setSize(d.width,seqandannot-height);
+ seqPanel.seqCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height);
int s=apvscroll.getValue();
if (s>mheight-height)
{
s = 0;
}
- apvscroll.setValues(apvscroll.getValue(), height, 0, mheight);
+ apvscroll.setValues(s, height, 0, mheight);
annotationPanel.setScrollOffset(apvscroll.getValue());
alabels.setScrollOffset(apvscroll.getValue());
}
{
width = av.getColumnSelection().findColumnPosition(width);
}
-
- av.setStartRes(x);
- av.setEndRes((x + (seqPanel.seqCanvas.getSize().width / av.charWidth)) - 1);
+ if (x<0) { x = 0; };
hextent = seqPanel.seqCanvas.getSize().width / av.charWidth;
vextent = seqPanel.seqCanvas.getSize().height / av.charHeight;
if ((hextent + x) > width)
{
+ System.err.println("hextent was "+hextent+" and x was "+x);
+
x = width - hextent;
}
if (x < 0)
{
+ System.err.println("x was "+x);
x = 0;
}
}
av.setEndSeq(endSeq);
+ av.setStartRes(x);
+ av.setEndRes((x + (seqPanel.seqCanvas.getSize().width / av.charWidth)) - 1);
+
hscroll.setValues(x, hextent, 0, width);
vscroll.setValues(y, vextent, 0, height);
{
overviewPanel.setBoxPosition();
}
+ sendViewPosition();
+
}
annotationPanel.fastPaint(av.getStartRes() - oldX);
}
}
+ sendViewPosition();
}
+ private void sendViewPosition()
+ {
+ StructureSelectionManager.getStructureSelectionManager(av.applet).sendViewPosition(this, av.startRes, av.endRes, av.startSeq, av.endSeq);
+ }
public void paintAlignment(boolean updateOverview)
{
if (updateOverview)
{
jalview.structure.StructureSelectionManager
- .getStructureSelectionManager().sequenceColoursChanged(this);
+ .getStructureSelectionManager(av.applet).sequenceColoursChanged(this);
if (overviewPanel != null)
{
{
return av.alignment;
}
+ @Override
+ public StructureSelectionManager getStructureSelectionManager()
+ {
+ return StructureSelectionManager.getStructureSelectionManager(av.applet);
+ }
}