{
ex.printStackTrace();
}
-
+ // need to get window geometry before we calculate alignment layout
+ if (applet != null)
+ {
+ String param;
+ try
+ {
+ param = applet.getParameter("windowWidth");
+ if (param != null)
+ {
+ int width = Integer.parseInt(param);
+ DEFAULT_WIDTH = width;
+ }
+ param = applet.getParameter("windowHeight");
+ if (param != null)
+ {
+ int height = Integer.parseInt(param);
+ DEFAULT_HEIGHT = height;
+ }
+ } catch (Exception ex)
+ {
+ }
+ }
viewport = new AlignViewport(al, applet);
alignPanel = new AlignmentPanel(this, viewport);
avc = new jalview.controller.AlignViewController(this, viewport, alignPanel);
centreColumnLabelFlag.setState(true);
centreColumnLabelFlag_stateChanged();
}
- try
- {
- param = applet.getParameter("windowWidth");
- if (param != null)
- {
- int width = Integer.parseInt(param);
- DEFAULT_WIDTH = width;
- }
- param = applet.getParameter("windowHeight");
- if (param != null)
- {
- int height = Integer.parseInt(param);
- DEFAULT_HEIGHT = height;
- }
- } catch (Exception ex)
- {
- }
}
if (viewport.getAlignment().isNucleotide())
annotationPanelHolder.add(annotationPanel, BorderLayout.CENTER);
sequenceHolderPanel.add(annotationPanelHolder, BorderLayout.SOUTH);
-
alabels = new AnnotationLabels(this);
setAnnotationVisible(av.showAnnotation);
}
}
});
-
}
public SequenceRenderer getSequenceRenderer()
int mheight = height;
Dimension d = sequenceHolderPanel.getSize(), e = idPanel.getSize();
int seqandannot = d.height - scalePanelHolder.getSize().height;
- // sets initial preferred height
- if ((height + 40) > seqandannot / 2)
+
+ if (adjustPanelHeight)
{
- height = seqandannot / 2;
+ // NOTE: this logic is different in the application. Need a better algorithm to define behaviour
+ // sets initial preferred height
+ // try and set height according to alignment
+ float sscaling = (float) ((av.getCharHeight() * av.getAlignment().getHeight())/(1.0*mheight));
+ if (sscaling > 0.5)
+ {
+ // if the alignment is too big then
+ // default is 0.5 split
+ height = seqandannot / 2;
+ }
+ else
+ {
+ // otherwise just set the panel so that one row of sequence is visible
+ height = -av.getCharHeight() * 1
+ + (int) (seqandannot * (1 - sscaling));
+ }
}
- if (!adjustPanelHeight)
+ else
{
// maintain same window layout whilst updating sliders
height = annotationPanelHolder.getSize().height;
protected void validateAnnotationDimensions(boolean adjustPanelHeight)
{
int height = annotationPanel.adjustPanelHeight();
-
- if (hscroll.isVisible())
- {
- height += hscroll.getPreferredSize().height;
- }
- if (height > alignFrame.getHeight() / 2)
- {
- height = alignFrame.getHeight() / 2;
+
+ int theight = av.getCharHeight() * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0 : av.getAlignment().getHiddenSequences().getSize()));
+ float sscaling = (float) (theight/(1.0*theight+height));
+ float ascaling=(float)(height*1.0/alignFrame.getHeight());
+ int rheight = alignFrame.getHeight() - height - av.getCharHeight();
+ if (adjustPanelHeight)
+ {
+ // NOTE: this logic is different in the applet. Need a better algorithm to define behaviour
+ // try and set height according to alignment
+ if (ascaling>0 && sscaling < 0.5)
+ {
+ // if the alignment is too big then
+ // default is 0.5 split
+ height = alignFrame.getHeight() / 2;
+ }
+ else
+ {
+ // if space for more than one sequence row left when annotation is fully displayed then set height to annotation height
+ // otherwise, leave at least two lines of sequence shown.
+ height = (rheight>av.getCharHeight()) ? height : (-av.getCharHeight() * 3
+ + (int) (alignFrame.getHeight() * (1 - sscaling)));
+ }
}
- if (!adjustPanelHeight)
+ else
{
// maintain same window layout whilst updating sliders
height = annotationScroller.getSize().height;
.getSelectedFile().getParent());
String format = null;
- if (chooser.getSelectedFormat().equals("Jalview"))
+ if (chooser.getSelectedFormat()!=null && chooser.getSelectedFormat().equals("Jalview"))
{
format = "Jalview";
}