import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
import jalview.analysis.NJTree;
import jalview.api.AlignViewportI;
+import jalview.api.ViewStyleI;
import jalview.bin.Cache;
import jalview.commands.CommandI;
import jalview.datamodel.Alignment;
import jalview.structure.StructureSelectionManager;
import jalview.structure.VamsasSource;
import jalview.util.MessageManager;
-import jalview.util.StringUtils;
import jalview.viewmodel.AlignmentViewport;
import jalview.ws.params.AutoCalcSetting;
-import java.awt.Color;
import java.awt.Container;
+import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
int endSeq;
- boolean showJVSuffix = true;
-
- boolean showText = true;
-
- boolean showColourText = false;
-
- boolean showBoxes = true;
-
- boolean wrapAlignment = false;
-
- boolean renderGaps = true;
SequenceAnnotationOrder sortAnnotationsBy = null;
- int charHeight;
-
- int charWidth;
-
- boolean validCharWidth;
-
- int wrappedWidth;
-
Font font;
- boolean seqNameItalics;
-
NJTree currentTree = null;
- boolean scaleAboveWrapped = false;
-
- boolean scaleLeftWrapped = true;
-
- boolean scaleRightWrapped = true;
-
- boolean showHiddenMarkers = true;
-
boolean cursorMode = false;
boolean antiAlias = false;
- Rectangle explodedPosition;
+ private Rectangle explodedGeometry;
String viewName;
- boolean gatherViewsHere = false;
+ private boolean gatherViewsHere = false;
private Deque<CommandI> historyList = new ArrayDeque<CommandI>();
private Deque<CommandI> redoList = new ArrayDeque<CommandI>();
- int thresholdTextColour = 0;
-
- Color textColour = Color.black;
-
- Color textColour2 = Color.white;
-
private AnnotationColumnChooser annotationColumnSelectionState;
/**
* Creates a new AlignViewport object.
init();
}
- void init()
+ private void applyViewProperties()
{
- this.startRes = 0;
- this.endRes = alignment.getWidth() - 1;
- this.startSeq = 0;
- this.endSeq = alignment.getHeight() - 1;
-
antiAlias = Cache.getDefault("ANTI_ALIAS", false);
- showJVSuffix = Cache.getDefault("SHOW_JVSUFFIX", true);
+ viewStyle.setShowJVSuffix(Cache.getDefault("SHOW_JVSUFFIX", true));
setShowAnnotation(Cache.getDefault("SHOW_ANNOTATIONS", true));
setRightAlignIds(Cache.getDefault("RIGHT_ALIGN_IDS", false));
- centreColumnLabels = Cache.getDefault("CENTRE_COLUMN_LABELS", false);
+ setCentreColumnLabels(Cache.getDefault("CENTRE_COLUMN_LABELS", false));
autoCalculateConsensus = Cache.getDefault("AUTO_CALC_CONSENSUS", true);
setPadGaps(Cache.getDefault("PAD_GAPS", true));
- shownpfeats = Cache.getDefault("SHOW_NPFEATS_TOOLTIP", true);
- showdbrefs = Cache.getDefault("SHOW_DBREFS_TOOLTIP", true);
+ setShowNPFeats(Cache.getDefault("SHOW_NPFEATS_TOOLTIP", true));
+ setShowDBRefs(Cache.getDefault("SHOW_DBREFS_TOOLTIP", true));
+ viewStyle.setSeqNameItalics(Cache.getDefault("ID_ITALICS", true));
+ viewStyle.setWrapAlignment(Cache.getDefault("WRAP_ALIGNMENT", false));
+ viewStyle.setShowUnconserved(Cache
+ .getDefault("SHOW_UNCONSERVED", false));
+ sortByTree = Cache.getDefault("SORT_BY_TREE", false);
+ followSelection = Cache.getDefault("FOLLOW_SELECTIONS", true);
+ sortAnnotationsBy = SequenceAnnotationOrder.valueOf(Cache.getDefault(
+ Preferences.SORT_ANNOTATIONS,
+ SequenceAnnotationOrder.NONE.name()));
+ showAutocalculatedAbove = Cache.getDefault(
+ Preferences.SHOW_AUTOCALC_ABOVE, false);
+
+ }
+
+ void init()
+ {
+ this.startRes = 0;
+ this.endRes = alignment.getWidth() - 1;
+ this.startSeq = 0;
+ this.endSeq = alignment.getHeight() - 1;
+ applyViewProperties();
String fontName = Cache.getDefault("FONT_NAME", "SansSerif");
String fontStyle = Cache.getDefault("FONT_STYLE", Font.PLAIN + "");
String fontSize = Cache.getDefault("FONT_SIZE", "10");
- seqNameItalics = Cache.getDefault("ID_ITALICS", true);
-
int style = 0;
if (fontStyle.equals("bold"))
style = 2;
}
- setFont(new Font(fontName, style, Integer.parseInt(fontSize)));
+ setFont(new Font(fontName, style, Integer.parseInt(fontSize)), true);
alignment
.setGapCharacter(Cache.getDefault("GAP_SYMBOL", "-").charAt(0));
{
globalColourScheme = UserDefinedColours.loadDefaultColours();
((UserColourScheme) globalColourScheme).setThreshold(0,
- getIgnoreGapsConsensus());
+ isIgnoreGapsConsensus());
}
if (globalColourScheme != null)
globalColourScheme.setConsensus(hconsensus);
}
}
-
- wrapAlignment = Cache.getDefault("WRAP_ALIGNMENT", false);
- showUnconserved = Cache.getDefault("SHOW_UNCONSERVED", false);
- sortByTree = Cache.getDefault("SORT_BY_TREE", false);
- followSelection = Cache.getDefault("FOLLOW_SELECTIONS", true);
- sortAnnotationsBy = SequenceAnnotationOrder.valueOf(Cache.getDefault(
- Preferences.SORT_ANNOTATIONS,
- SequenceAnnotationOrder.NONE.name()));
- showAutocalculatedAbove = Cache.getDefault(
- Preferences.SHOW_AUTOCALC_ABOVE, false);
}
/**
- * centre columnar annotation labels in displayed alignment annotation TODO:
- * add to jalviewXML and annotation display settings
- */
- boolean centreColumnLabels = false;
-
- private boolean showdbrefs;
-
- private boolean shownpfeats;
-
- // --------END Structure Conservation
-
- /**
* get the consensus sequence as displayed under the PID consensus annotation
* row.
*
return endSeq;
}
+ boolean validCharWidth;
+
/**
- * DOCUMENT ME!
+ * update view settings with the given font. You may need to call
+ * alignPanel.fontChanged to update the layout geometry
*
- * @param f
- * DOCUMENT ME!
+ * @param setGrid
+ * when true, charWidth/height is set according to font mentrics
*/
- public void setFont(Font f)
+ public void setFont(Font f, boolean setGrid)
{
font = f;
Container c = new Container();
java.awt.FontMetrics fm = c.getFontMetrics(font);
- setCharHeight(fm.getHeight());
- setCharWidth(fm.charWidth('M'));
- validCharWidth = true;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public Font getFont()
- {
- return font;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param w
- * DOCUMENT ME!
- */
- public void setCharWidth(int w)
- {
- this.charWidth = w;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public int getCharWidth()
- {
- return charWidth;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param h
- * DOCUMENT ME!
- */
- public void setCharHeight(int h)
- {
- this.charHeight = h;
- }
+ int w = viewStyle.getCharWidth(), ww = fm.charWidth('M'), h = viewStyle
+ .getCharHeight();
+ if (setGrid)
+ {
+ setCharHeight(fm.getHeight());
+ setCharWidth(ww);
+ }
+ viewStyle.setFontName(font.getName());
+ viewStyle.setFontStyle(font.getStyle());
+ viewStyle.setFontSize(font.getSize());
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public int getCharHeight()
- {
- return charHeight;
+ validCharWidth = true;
}
- /**
- * DOCUMENT ME!
- *
- * @param w
- * DOCUMENT ME!
- */
- public void setWrappedWidth(int w)
+ @Override
+ public void setViewStyle(ViewStyleI settingsForView)
{
- this.wrappedWidth = w;
- }
+ super.setViewStyle(settingsForView);
+ setFont(new Font(viewStyle.getFontName(), viewStyle.getFontStyle(),
+ viewStyle.getFontSize()), false);
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public int getWrappedWidth()
- {
- return wrappedWidth;
}
-
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
- public AlignmentI getAlignment()
+ public Font getFont()
{
- return alignment;
+ return font;
}
/**
/**
* DOCUMENT ME!
*
- * @param state
- * DOCUMENT ME!
- */
- public void setWrapAlignment(boolean state)
- {
- wrapAlignment = state;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param state
- * DOCUMENT ME!
- */
- public void setShowText(boolean state)
- {
- showText = state;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param state
- * DOCUMENT ME!
- */
- public void setRenderGaps(boolean state)
- {
- renderGaps = state;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getColourText()
- {
- return showColourText;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param state
- * DOCUMENT ME!
- */
- public void setColourText(boolean state)
- {
- showColourText = state;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param state
- * DOCUMENT ME!
- */
- public void setShowBoxes(boolean state)
- {
- showBoxes = state;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getWrapAlignment()
- {
- return wrapAlignment;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getShowText()
- {
- return showText;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getShowBoxes()
- {
- return showBoxes;
- }
-
- /**
- * DOCUMENT ME!
- *
* @return DOCUMENT ME!
*/
public char getGapCharacter()
}
/**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getShowJVSuffix()
- {
- return showJVSuffix;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b
- * DOCUMENT ME!
- */
- public void setShowJVSuffix(boolean b)
- {
- showJVSuffix = b;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getScaleAboveWrapped()
- {
- return scaleAboveWrapped;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getScaleLeftWrapped()
- {
- return scaleLeftWrapped;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean getScaleRightWrapped()
- {
- return scaleRightWrapped;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b
- * DOCUMENT ME!
- */
- public void setScaleAboveWrapped(boolean b)
- {
- scaleAboveWrapped = b;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b
- * DOCUMENT ME!
- */
- public void setScaleLeftWrapped(boolean b)
- {
- scaleLeftWrapped = b;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b
- * DOCUMENT ME!
- */
- public void setScaleRightWrapped(boolean b)
- {
- scaleRightWrapped = b;
- }
-
- public void setDataset(boolean b)
- {
- isDataset = b;
- }
-
- public boolean isDataset()
- {
- return isDataset;
- }
-
- public boolean getShowHiddenMarkers()
- {
- return showHiddenMarkers;
- }
-
- public void setShowHiddenMarkers(boolean show)
- {
- showHiddenMarkers = show;
- }
-
- /**
* returns the visible column regions of the alignment
*
* @param selectedRegionOnly
return false;
}
- public boolean getCentreColumnLabels()
- {
- return centreColumnLabels;
- }
-
- public void setCentreColumnLabels(boolean centrecolumnlabels)
- {
- centreColumnLabels = centrecolumnlabels;
- }
-
- /**
- * enable or disable the display of Database Cross References in the sequence
- * ID tooltip
- */
- public void setShowDbRefs(boolean show)
- {
- showdbrefs = show;
- }
-
- /**
- *
- * @return true if Database References are to be displayed on tooltips.
- */
- public boolean isShowDbRefs()
- {
- return showdbrefs;
- }
-
- /**
- *
- * @return true if Non-positional features are to be displayed on tooltips.
- */
- public boolean isShowNpFeats()
- {
- return shownpfeats;
- }
-
- /**
- * enable or disable the display of Non-Positional sequence features in the
- * sequence ID tooltip
- *
- * @param show
- */
- public void setShowNpFeats(boolean show)
- {
- shownpfeats = show;
- }
-
-
/**
* when set, view will scroll to show the highlighted position
*/
{
// TODO: promote to AlignViewportI? applet CutAndPasteTransfer is different
+ // JBPComment: title is a largely redundant parameter at the moment
+ // JBPComment: this really should be an 'insert/pre/append' controller
+ // JBPComment: but the DNA/Protein check makes it a bit more complex
+
// refactored from FileLoader / CutAndPasteTransfer / SequenceFetcher with
// this comment:
// TODO: create undo object for this JAL-1101
*/
if (getAlignment().isNucleotide() != al.isNucleotide())
{
+ // TODO: JAL-845 try a bit harder to link up imported sequences
final Set<String> sequenceNames = getAlignment().getSequenceNames();
sequenceNames.retainAll(al.getSequenceNames());
if (!sequenceNames.isEmpty()) // at least one sequence name in both
}
}
}
+ // TODO: JAL-407 regardless of above - identical sequences (based on ID and
+ // provenance) should share the same dataset sequence
for (int i = 0; i < al.getHeight(); i++)
{
}
// TODO this call was done by SequenceFetcher but not FileLoader or
// CutAndPasteTransfer. Is it needed?
+ // JBPComment: this repositions the view to show the new sequences
+ // JBPComment: so it is needed for UX
setEndSeq(getAlignment().getHeight());
firePropertyChange("alignment", null, getAlignment().getSequences());
}
if (openSplitPane)
{
+ // TODO: move this kind of constructor stuff to a factory/controller
+ // method ?
/*
* Open in split pane. DNA sequence above, protein below.
*/
cdnaFrame.setVisible(true);
proteinFrame.setVisible(true);
String sep = String.valueOf(File.separatorChar);
- String proteinShortName = StringUtils.getLastToken(
- proteinFrame.getTitle(), sep);
- String dnaShortName = StringUtils.getLastToken(cdnaFrame.getTitle(),
- sep);
+ String proteinShortName = proteinFrame.getTitle().substring(
+ proteinFrame.getTitle().lastIndexOf(sep) + 1);
+ String dnaShortName = cdnaFrame.getTitle().substring(
+ cdnaFrame.getTitle().lastIndexOf(sep) + 1);
String linkedTitle = MessageManager.formatMessage(
"label.linked_view_title", dnaShortName, proteinShortName);
JInternalFrame splitFrame = new SplitFrame(cdnaFrame, proteinFrame);
{
this.annotationColumnSelectionState = currentAnnotationColumnSelectionState;
}
+
+ @Override
+ public void setIdWidth(int i)
+ {
+ super.setIdWidth(i);
+ AlignmentPanel ap = getAlignPanel();
+ if (ap != null)
+ {
+ // modify GUI elements to reflect geometry change
+ Dimension idw = getAlignPanel().getIdPanel().getIdCanvas()
+ .getPreferredSize();
+ idw.width = i;
+ getAlignPanel().getIdPanel().getIdCanvas().setPreferredSize(idw);
+ }
+ }
+
+ public Rectangle getExplodedGeometry()
+ {
+ return explodedGeometry;
+ }
+
+ public void setExplodedGeometry(Rectangle explodedPosition)
+ {
+ this.explodedGeometry = explodedPosition;
+ }
+
+ public boolean isGatherViewsHere()
+ {
+ return gatherViewsHere;
+ }
+
+ public void setGatherViewsHere(boolean gatherViewsHere)
+ {
+ this.gatherViewsHere = gatherViewsHere;
+ }
}