X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignViewport.java;h=2d3800879e1ddfef2a95c0a6b95b99978d1124f4;hb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;hp=10f4c6e02e89be2c515153d2e0a3a62fdf492c80;hpb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;p=jalview.git diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index 10f4c6e..2d38008 100644 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -1,38 +1,46 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.appletgui; -import java.util.*; +import java.awt.Font; -import java.awt.*; - -import jalview.analysis.*; +import jalview.analysis.NJTree; import jalview.api.AlignViewportI; -import jalview.bin.*; -import jalview.datamodel.*; -import jalview.schemes.*; +import jalview.bin.JalviewLite; +import jalview.commands.CommandI; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.schemes.ColourSchemeProperty; +import jalview.schemes.UserColourScheme; +import jalview.structure.CommandListener; import jalview.structure.SelectionSource; +import jalview.structure.StructureSelectionManager; import jalview.structure.VamsasSource; import jalview.viewmodel.AlignmentViewport; public class AlignViewport extends AlignmentViewport implements - AlignViewportI, SelectionSource, VamsasSource + AlignViewportI, SelectionSource, VamsasSource, CommandListener { int startRes; @@ -44,61 +52,17 @@ public class AlignViewport extends AlignmentViewport implements boolean cursorMode = false; - boolean showJVSuffix = true; - - boolean showText = true; - - boolean showColourText = false; - - boolean showBoxes = true; - - boolean wrapAlignment = false; - - boolean renderGaps = true; - - boolean showSequenceFeatures = false; - - boolean showAnnotation = true; - - boolean upperCasebold = false; - - int charHeight; - - int charWidth; - - int wrappedWidth; - Font font = new Font("SansSerif", Font.PLAIN, 10); boolean validCharWidth = true; - int threshold; - - int increment; - NJTree currentTree = null; - boolean scaleAboveWrapped = true; - - boolean scaleLeftWrapped = true; - - boolean scaleRightWrapped = true; - - // The following vector holds the features which are - // currently visible, in the correct order or rendering - public Hashtable featuresDisplayed; - - boolean showHiddenMarkers = true; - public jalview.bin.JalviewLite applet; - Hashtable sequenceColours; - boolean MAC = false; - Stack historyList = new Stack(); - - Stack redoList = new Stack(); + private AnnotationColumnChooser annotationColumnSelectionState; public void finalize() { @@ -110,9 +74,10 @@ public class AlignViewport extends AlignmentViewport implements public AlignViewport(AlignmentI al, JalviewLite applet) { + super(); calculator = new jalview.workers.AlignCalcManager(); this.applet = applet; - setAlignment(al); + alignment = al; // we always pad gaps this.setPadGaps(true); this.startRes = 0; @@ -175,10 +140,11 @@ public class AlignViewport extends AlignmentViewport implements if (applet != null) { - showJVSuffix = applet.getDefaultParameter("showFullId", showJVSuffix); + setShowJVSuffix(applet.getDefaultParameter("showFullId", + getShowJVSuffix())); - showAnnotation = applet.getDefaultParameter("showAnnotation", - showAnnotation); + setShowAnnotation(applet.getDefaultParameter("showAnnotation", + isShowAnnotation())); showConservation = applet.getDefaultParameter("showConservation", showConservation); @@ -188,15 +154,15 @@ public class AlignViewport extends AlignmentViewport implements showConsensus = applet.getDefaultParameter("showConsensus", showConsensus); - showUnconserved = applet.getDefaultParameter("showUnconserved", - showUnconserved); + setShowUnconserved(applet.getDefaultParameter("showUnconserved", + getShowUnconserved())); String param = applet.getParameter("upperCase"); if (param != null) { if (param.equalsIgnoreCase("bold")) { - upperCasebold = true; + setUpperCasebold(true); } } sortByTree = applet.getDefaultParameter("sortByTree", sortByTree); @@ -256,16 +222,6 @@ public class AlignViewport extends AlignmentViewport implements } - public void showSequenceFeatures(boolean b) - { - showSequenceFeatures = b; - } - - public boolean getShowSequenceFeatures() - { - return showSequenceFeatures; - } - /** * get the consensus sequence as displayed under the PID consensus annotation * row. @@ -282,7 +238,7 @@ public class AlignViewport extends AlignmentViewport implements { return null; } - StringBuffer seqs = new StringBuffer(); + StringBuilder seqs = new StringBuilder(consensus.annotations.length); for (int i = 0; i < consensus.annotations.length; i++) { if (consensus.annotations[i] != null) @@ -378,13 +334,13 @@ public class AlignViewport extends AlignmentViewport implements java.awt.FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font); setCharHeight((int) (heightScale * fm.getHeight())); - charWidth = (int) (widthScale * fm.charWidth('M')); + setCharWidth((int) (widthScale * fm.charWidth('M'))); - if (upperCasebold) + if (isUpperCasebold()) { Font f2 = new Font(f.getName(), Font.BOLD, f.getSize()); fm = nullFrame.getGraphics().getFontMetrics(f2); - charWidth = (int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10)); + setCharWidth((int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10))); } } @@ -393,118 +349,6 @@ public class AlignViewport extends AlignmentViewport implements return font; } - public int getCharWidth() - { - return charWidth; - } - - public void setCharHeight(int h) - { - this.charHeight = h; - } - - public int getCharHeight() - { - return charHeight; - } - - public void setWrappedWidth(int w) - { - this.wrappedWidth = w; - } - - public int getwrappedWidth() - { - return wrappedWidth; - } - - public AlignmentI getAlignment() - { - return alignment; - } - - public void setAlignment(AlignmentI align) - { - this.alignment = align; - } - - public void setWrapAlignment(boolean state) - { - wrapAlignment = state; - } - - public void setShowText(boolean state) - { - showText = state; - } - - public void setRenderGaps(boolean state) - { - renderGaps = state; - } - - public boolean getColourText() - { - return showColourText; - } - - public void setColourText(boolean state) - { - showColourText = state; - } - - public void setShowBoxes(boolean state) - { - showBoxes = state; - } - - public boolean getWrapAlignment() - { - return wrapAlignment; - } - - public boolean getShowText() - { - return showText; - } - - public boolean getShowBoxes() - { - return showBoxes; - } - - public char getGapCharacter() - { - return getAlignment().getGapCharacter(); - } - - public void setGapCharacter(char gap) - { - if (getAlignment() != null) - { - getAlignment().setGapCharacter(gap); - } - } - - public void setThreshold(int thresh) - { - threshold = thresh; - } - - public int getThreshold() - { - return threshold; - } - - public void setIncrement(int inc) - { - increment = inc; - } - - public int getIncrement() - { - return increment; - } public void resetSeqLimits(int height) { @@ -521,106 +365,6 @@ public class AlignViewport extends AlignmentViewport implements return currentTree; } - public boolean getShowJVSuffix() - { - return showJVSuffix; - } - - public void setShowJVSuffix(boolean b) - { - showJVSuffix = b; - } - - public boolean getShowAnnotation() - { - return showAnnotation; - } - - public void setShowAnnotation(boolean b) - { - showAnnotation = b; - } - - public boolean getScaleAboveWrapped() - { - return scaleAboveWrapped; - } - - public boolean getScaleLeftWrapped() - { - return scaleLeftWrapped; - } - - public boolean getScaleRightWrapped() - { - return scaleRightWrapped; - } - - public void setScaleAboveWrapped(boolean b) - { - scaleAboveWrapped = b; - } - - public void setScaleLeftWrapped(boolean b) - { - scaleLeftWrapped = b; - } - - public void setScaleRightWrapped(boolean b) - { - scaleRightWrapped = b; - } - - public void setIgnoreGapsConsensus(boolean b) - { - ignoreGapsInConsensusCalculation = b; - updateConsensus(null); - if (globalColourScheme != null) - { - globalColourScheme.setThreshold(globalColourScheme.getThreshold(), - ignoreGapsInConsensusCalculation); - - } - } - - public boolean getShowHiddenMarkers() - { - return showHiddenMarkers; - } - - public void setShowHiddenMarkers(boolean show) - { - showHiddenMarkers = show; - } - - public Color getSequenceColour(SequenceI seq) - { - if (sequenceColours == null || !sequenceColours.containsKey(seq)) - { - return Color.white; - } - else - { - return (Color) sequenceColours.get(seq); - } - } - - public void setSequenceColour(SequenceI seq, Color col) - { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - - if (col == null) - { - sequenceColours.remove(seq); - } - else - { - sequenceColours.put(seq, col); - } - } boolean centreColumnLabels; @@ -629,21 +373,6 @@ public class AlignViewport extends AlignmentViewport implements return centreColumnLabels; } - public void updateSequenceIdColours() - { - - for (SequenceGroup sg : alignment.getGroups()) - { - if (sg.idColour != null) - { - for (SequenceI s : sg.getSequences(getHiddenRepSequences())) - { - this.setSequenceColour(s, sg.idColour); - } - } - } - } - public boolean followHighlight = true; public boolean getFollowHighlight() @@ -664,13 +393,25 @@ public class AlignViewport extends AlignmentViewport implements public void sendSelection() { - jalview.structure.StructureSelectionManager - .getStructureSelectionManager(applet).sendSelection( + getStructureSelectionManager().sendSelection( new SequenceGroup(getSelectionGroup()), new ColumnSelection(getColumnSelection()), this); } /** + * Returns an instance of the StructureSelectionManager scoped to this applet + * instance. + * + * @return + */ + @Override + public StructureSelectionManager getStructureSelectionManager() + { + return jalview.structure.StructureSelectionManager + .getStructureSelectionManager(applet); + } + + /** * synthesize a column selection if none exists so it covers the given * selection group. if wholewidth is false, no column selection is made if the * selection group covers the whole alignment width. @@ -703,12 +444,6 @@ public class AlignViewport extends AlignmentViewport implements } } - @Override - public boolean hasHiddenColumns() - { - return hasHiddenColumns; - } - public boolean isNormaliseSequenceLogo() { return normaliseSequenceLogo; @@ -728,4 +463,52 @@ public class AlignViewport extends AlignmentViewport implements return validCharWidth; } + public AnnotationColumnChooser getAnnotationColumnSelectionState() + { + return annotationColumnSelectionState; + } + + public void setAnnotationColumnSelectionState( + AnnotationColumnChooser annotationColumnSelectionState) + { + this.annotationColumnSelectionState = annotationColumnSelectionState; + } + + @Override + public void mirrorCommand(CommandI command, boolean undo, + StructureSelectionManager ssm, VamsasSource source) + { + // TODO refactor so this can be pulled up to superclass or controller + /* + * Do nothing unless we are a 'complement' of the source. May replace this + * with direct calls not via SSM. + */ + if (source instanceof AlignViewportI + && ((AlignViewportI) source).getCodingComplement() == this) + { + // ok to continue; + } + else + { + return; + } + + CommandI mappedCommand = ssm.mapCommand(command, undo, getAlignment(), + getGapCharacter()); + if (mappedCommand != null) + { + mappedCommand.doCommand(null); + firePropertyChange("alignment", null, getAlignment().getSequences()); + + // ap.scalePanelHolder.repaint(); + // ap.repaint(); + } + } + + @Override + public VamsasSource getVamsasSource() + { + return this; + } + }