From: Charles Ofoegbu Date: Fri, 5 Dec 2014 12:45:11 +0000 (+0000) Subject: JAL-1605 merge commit X-Git-Tag: Jalview_2_9~133 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=ffea8e06f34c1004671749a799722f64a83d8161;hp=-c;p=jalview.git JAL-1605 merge commit --- ffea8e06f34c1004671749a799722f64a83d8161 diff --combined src/jalview/gui/AlignFrame.java index 9f5b8f0,3180993..be8af7b --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@@ -30,7 -30,6 +30,7 @@@ import jalview.analysis.ParseProperties import jalview.analysis.SequenceIdMatcher; import jalview.api.AlignViewControllerGuiI; import jalview.api.AlignViewControllerI; +import jalview.api.AlignmentViewPanel; import jalview.api.analysis.ScoreModelI; import jalview.bin.Cache; import jalview.commands.CommandI; @@@ -55,11 -54,10 +55,11 @@@ import jalview.datamodel.SequenceGroup import jalview.datamodel.SequenceI; import jalview.io.AlignmentProperties; import jalview.io.AnnotationFile; +import jalview.io.BioJsHTMLOutput; import jalview.io.FeaturesFile; import jalview.io.FileLoader; import jalview.io.FormatAdapter; - import jalview.io.HTMLOutput; + import jalview.io.HtmlSvgOutput; import jalview.io.IdentifyFile; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; @@@ -117,7 -115,6 +117,7 @@@ import java.beans.PropertyChangeEvent import java.io.File; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; @@@ -382,7 -379,7 +382,7 @@@ public class AlignFrame extends GAlignF .getKeyCode() <= KeyEvent.VK_NUMPAD9)) && Character.isDigit(evt.getKeyChar())) { - alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + alignPanel.getSeqPanel().numberPressed(evt.getKeyChar()); } switch (evt.getKeyCode()) @@@ -400,7 -397,7 +400,7 @@@ } if (viewport.cursorMode) { - alignPanel.seqPanel.moveCursor(0, 1); + alignPanel.getSeqPanel().moveCursor(0, 1); } break; @@@ -411,7 -408,7 +411,7 @@@ } if (viewport.cursorMode) { - alignPanel.seqPanel.moveCursor(0, -1); + alignPanel.getSeqPanel().moveCursor(0, -1); } break; @@@ -419,11 -416,11 +419,11 @@@ case KeyEvent.VK_LEFT: if (evt.isAltDown() || !viewport.cursorMode) { - slideSequences(false, alignPanel.seqPanel.getKeyboardNo1()); + slideSequences(false, alignPanel.getSeqPanel().getKeyboardNo1()); } else { - alignPanel.seqPanel.moveCursor(-1, 0); + alignPanel.getSeqPanel().moveCursor(-1, 0); } break; @@@ -431,18 -428,18 +431,18 @@@ case KeyEvent.VK_RIGHT: if (evt.isAltDown() || !viewport.cursorMode) { - slideSequences(true, alignPanel.seqPanel.getKeyboardNo1()); + slideSequences(true, alignPanel.getSeqPanel().getKeyboardNo1()); } else { - alignPanel.seqPanel.moveCursor(1, 0); + alignPanel.getSeqPanel().moveCursor(1, 0); } break; case KeyEvent.VK_SPACE: if (viewport.cursorMode) { - alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + alignPanel.getSeqPanel().insertGapAtCursor(evt.isControlDown() || evt.isShiftDown() || evt.isAltDown()); } break; @@@ -466,7 -463,7 +466,7 @@@ } else { - alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() + alignPanel.getSeqPanel().deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown() || evt.isAltDown()); } @@@ -475,19 -472,19 +475,19 @@@ case KeyEvent.VK_S: if (viewport.cursorMode) { - alignPanel.seqPanel.setCursorRow(); + alignPanel.getSeqPanel().setCursorRow(); } break; case KeyEvent.VK_C: if (viewport.cursorMode && !evt.isControlDown()) { - alignPanel.seqPanel.setCursorColumn(); + alignPanel.getSeqPanel().setCursorColumn(); } break; case KeyEvent.VK_P: if (viewport.cursorMode) { - alignPanel.seqPanel.setCursorPosition(); + alignPanel.getSeqPanel().setCursorPosition(); } break; @@@ -495,20 -492,20 +495,20 @@@ case KeyEvent.VK_COMMA: if (viewport.cursorMode) { - alignPanel.seqPanel.setCursorRowAndColumn(); + alignPanel.getSeqPanel().setCursorRowAndColumn(); } break; case KeyEvent.VK_Q: if (viewport.cursorMode) { - alignPanel.seqPanel.setSelectionAreaAtCursor(true); + alignPanel.getSeqPanel().setSelectionAreaAtCursor(true); } break; case KeyEvent.VK_M: if (viewport.cursorMode) { - alignPanel.seqPanel.setSelectionAreaAtCursor(false); + alignPanel.getSeqPanel().setSelectionAreaAtCursor(false); } break; @@@ -519,10 -516,10 +519,10 @@@ { (viewport.cursorMode ? "on" : "off") })); if (viewport.cursorMode) { - alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; - alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; + alignPanel.getSeqPanel().seqCanvas.cursorX = viewport.startRes; + alignPanel.getSeqPanel().seqCanvas.cursorY = viewport.startSeq; } - alignPanel.seqPanel.seqCanvas.repaint(); + alignPanel.getSeqPanel().seqCanvas.repaint(); break; case KeyEvent.VK_F1: @@@ -741,14 -738,14 +741,14 @@@ abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); conservationMenuItem.setSelected(av.getConservationSelected()); seqLimits.setSelected(av.getShowJVSuffix()); - idRightAlign.setSelected(av.rightAlignIds); + idRightAlign.setSelected(av.isRightAlignIds()); centreColumnLabelsMenuItem.setState(av.centreColumnLabels); renderGapsMenuItem.setSelected(av.renderGaps); wrapMenuItem.setSelected(av.wrapAlignment); scaleAbove.setVisible(av.wrapAlignment); scaleLeft.setVisible(av.wrapAlignment); scaleRight.setVisible(av.wrapAlignment); - annotationPanelMenuItem.setState(av.showAnnotation); + annotationPanelMenuItem.setState(av.isShowAnnotation()); /* * Show/hide annotations only enabled if annotation panel is shown */ @@@ -899,7 -896,7 +899,7 @@@ public FeatureRenderer getFeatureRenderer() { - return alignPanel.seqPanel.seqCanvas.getFeatureRenderer(); + return alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer(); } @Override @@@ -1230,17 -1227,12 +1230,18 @@@ @Override protected void htmlMenuItem_actionPerformed(ActionEvent e) { - new HTMLOutput(alignPanel, - alignPanel.seqPanel.seqCanvas.getSequenceRenderer(), - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + // new HTMLOutput(alignPanel, + // alignPanel.getSeqPanel().seqCanvas.getSequenceRenderer(), + // alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()); + new HtmlSvgOutput(alignPanel); } + @Override + public void bioJSMenuItem_actionPerformed(ActionEvent e) + { + new BioJsHTMLOutput(alignPanel, - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); ++ alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()); + } public void createImageMap(File file, String image) { alignPanel.makePNGImageMap(file, image); @@@ -1305,7 -1297,7 +1306,7 @@@ public void exportAnnotations_actionPerformed(ActionEvent e) { new AnnotationExporter().exportAnnotations(alignPanel, - viewport.showAnnotation ? viewport.getAlignment() + viewport.isShowAnnotation() ? viewport.getAlignment() .getAlignmentAnnotation() : null, viewport .getAlignment().getGroups(), ((Alignment) viewport .getAlignment()).alignmentProperties); @@@ -1631,7 -1623,7 +1632,7 @@@ if (viewport.cursorMode) { sg.add(viewport.getAlignment().getSequenceAt( - alignPanel.seqPanel.seqCanvas.cursorY)); + alignPanel.getSeqPanel().seqCanvas.cursorY)); } else if (viewport.getSelectionGroup() != null && viewport.getSelectionGroup().getSize() != viewport @@@ -1681,7 -1673,7 +1682,7 @@@ { if (viewport.cursorMode) { - alignPanel.seqPanel.moveCursor(size, 0); + alignPanel.getSeqPanel().moveCursor(size, 0); } else { @@@ -1692,7 -1684,7 +1693,7 @@@ { if (viewport.cursorMode) { - alignPanel.seqPanel.moveCursor(-size, 0); + alignPanel.getSeqPanel().moveCursor(-size, 0); } else { @@@ -2120,9 -2112,9 +2121,9 @@@ // >>>This is a fix for the moment, until a better solution is // found!!<<< - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer() + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer() .transferSettings( - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()); // TODO: maintain provenance of an alignment, rather than just make the // title a concatenation of operations. @@@ -2180,9 -2172,9 +2181,9 @@@ // >>>This is a fix for the moment, until a better solution is // found!!<<< - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer() + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer() .transferSettings( - alignPanel.seqPanel.seqCanvas.getFeatureRenderer()); + alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()); // TODO: maintain provenance of an alignment, rather than just make the // title a concatenation of operations. @@@ -2346,14 -2338,14 +2347,14 @@@ { if (viewport.cursorMode) { - alignPanel.seqPanel.keyboardNo1 = null; - alignPanel.seqPanel.keyboardNo2 = null; + alignPanel.getSeqPanel().keyboardNo1 = null; + alignPanel.getSeqPanel().keyboardNo2 = null; } viewport.setSelectionGroup(null); viewport.getColumnSelection().clear(); viewport.setSelectionGroup(null); - alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); - alignPanel.idPanel.idCanvas.searchResults = null; + alignPanel.getSeqPanel().seqCanvas.highlightSearchResults(null); + alignPanel.getIdPanel().getIdCanvas().searchResults = null; alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); viewport.sendSelection(); @@@ -2754,7 -2746,7 +2755,7 @@@ { viewport.setShowJVSuffix(seqLimits.isSelected()); - alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel + alignPanel.getIdPanel().getIdCanvas().setPreferredSize(alignPanel .calculateIdWidth()); alignPanel.paintAlignment(true); } @@@ -2762,7 -2754,7 +2763,7 @@@ @Override public void idRightAlign_actionPerformed(ActionEvent e) { - viewport.rightAlignIds = idRightAlign.isSelected(); + viewport.setRightAlignIds(idRightAlign.isSelected()); alignPanel.paintAlignment(true); } @@@ -2784,7 -2776,7 +2785,7 @@@ if (viewport.followHighlight = this.followHighlightMenuItem.getState()) { alignPanel.scrollToPosition( - alignPanel.seqPanel.seqCanvas.searchResults, false); + alignPanel.getSeqPanel().seqCanvas.searchResults, false); } } @@@ -4196,17 -4188,28 +4197,17 @@@ else if (viewport.getSelectionGroup() != null && viewport.getSelectionGroup().getSize() == 1) { - int option = JOptionPane - .showConfirmDialog( -this, - "More than one sequece group selection is required for this Job, click \n'Cancel' to edit your selection or 'Ok' to submit the entire sequence.", - "Invalid selection", - JOptionPane.OK_CANCEL_OPTION); + int option = JOptionPane.showConfirmDialog(this, + MessageManager.getString("warn.oneseq_msainput_selection"), + MessageManager.getString("label.invalid_selection"), + JOptionPane.OK_CANCEL_OPTION); if (option == JOptionPane.OK_OPTION) { msa = viewport.getAlignmentView(false); } } else { - /* - * Vector seqs = viewport.getAlignment().getSequences(); - * - * if (seqs.size() > 1) { msa = new SequenceI[seqs.size()]; - * - * for (int i = 0; i < seqs.size(); i++) { msa[i] = (SequenceI) - * seqs.elementAt(i); } } - */ msa = viewport.getAlignmentView(false); } return msa; @@@ -4880,7 -4883,7 +4881,7 @@@ try { featuresFile = new FeaturesFile(file, type).parse(viewport - .getAlignment().getDataset(), alignPanel.seqPanel.seqCanvas + .getAlignment().getDataset(), alignPanel.getSeqPanel().seqCanvas .getFeatureRenderer().featureColours, false, jalview.bin.Cache.getDefault("RELAXEDSEQIDMATCHING", false)); } catch (Exception ex) @@@ -4892,10 -4895,10 +4893,10 @@@ { viewport.showSequenceFeatures = true; showSeqFeatures.setSelected(true); - if (alignPanel.seqPanel.seqCanvas.fr != null) + if (alignPanel.getSeqPanel().seqCanvas.fr != null) { // update the min/max ranges where necessary - alignPanel.seqPanel.seqCanvas.fr.findAllFeatures(true); + alignPanel.getSeqPanel().seqCanvas.fr.findAllFeatures(true); } if (featureSettings != null) { @@@ -5829,15 -5832,6 +5830,15 @@@ .setShowAutocalculatedAbove(isShowAutoCalculatedAbove()); alignPanel.paintAlignment(true); } + + /** + * + * @return alignment panels in this alignemnt frame + */ + public List getAlignPanels() + { + return alignPanels == null ? Arrays.asList(alignPanel) : alignPanels; + } } class PrintThread extends Thread diff --combined src/jalview/gui/AlignViewport.java index 632d2b2,40f95e2..497dad4 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@@ -97,7 -97,7 +97,7 @@@ public class AlignViewport extends Alig boolean showSequenceFeatures = false; - boolean showAnnotation = true; + private boolean showAnnotation = true; SequenceAnnotationOrder sortAnnotationsBy = null; @@@ -129,7 -129,7 +129,7 @@@ * Keys are the feature types which are currently visible. Note: Values are * not used! */ - Hashtable featuresDisplayed = null; + private Hashtable featuresDisplayed = null; boolean antiAlias = false; @@@ -149,7 -149,7 +149,7 @@@ Color textColour2 = Color.white; - boolean rightAlignIds = false; + private boolean rightAlignIds = false; /** * Creates a new AlignViewport object. @@@ -286,9 -286,9 +286,9 @@@ antiAlias = Cache.getDefault("ANTI_ALIAS", false); showJVSuffix = Cache.getDefault("SHOW_JVSUFFIX", true); - showAnnotation = Cache.getDefault("SHOW_ANNOTATIONS", true); + setShowAnnotation(Cache.getDefault("SHOW_ANNOTATIONS", true)); - rightAlignIds = Cache.getDefault("RIGHT_ALIGN_IDS", false); + setRightAlignIds(Cache.getDefault("RIGHT_ALIGN_IDS", false)); centreColumnLabels = Cache.getDefault("CENTRE_COLUMN_LABELS", false); autoCalculateConsensus = Cache.getDefault("AUTO_CALC_CONSENSUS", true); @@@ -839,7 -839,7 +839,7 @@@ */ public boolean getShowAnnotation() { - return showAnnotation; + return isShowAnnotation(); } /** @@@ -1274,16 -1274,6 +1274,16 @@@ } } + + public Hashtable getFeaturesDisplayed() + { + return featuresDisplayed; + } + + public void setFeaturesDisplayed(Hashtable featuresDisplayed) + { + this.featuresDisplayed = featuresDisplayed; + } protected SequenceAnnotationOrder getSortAnnotationsBy() { return sortAnnotationsBy; @@@ -1303,4 -1293,19 +1303,19 @@@ { this.showAutocalculatedAbove = showAutocalculatedAbove; } + + public boolean isShowAnnotation() + { + return showAnnotation; + } + + public boolean isRightAlignIds() + { + return rightAlignIds; + } + + public void setRightAlignIds(boolean rightAlignIds) + { + this.rightAlignIds = rightAlignIds; + } } diff --combined src/jalview/gui/AlignmentPanel.java index 2398bda,e4a4c90..6c80464 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@@ -29,6 -29,7 +29,7 @@@ import jalview.datamodel.SequenceFeatur import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.jbgui.GAlignmentPanel; + import jalview.math.AlignmentDimension; import jalview.schemes.ResidueProperties; import jalview.structure.StructureSelectionManager; import jalview.util.MessageManager; @@@ -66,20 -67,21 +67,21 @@@ public class AlignmentPanel extends GAl OverviewPanel overviewPanel; - SeqPanel seqPanel; + private SeqPanel seqPanel; - IdPanel idPanel; + private IdPanel idPanel; + private boolean headless; IdwidthAdjuster idwidthAdjuster; /** DOCUMENT ME!! */ public AlignFrame alignFrame; - ScalePanel scalePanel; + private ScalePanel scalePanel; - AnnotationPanel annotationPanel; + private AnnotationPanel annotationPanel; - AnnotationLabels alabels; + private AnnotationLabels alabels; // this value is set false when selection area being dragged boolean fastPaint = true; @@@ -100,23 -102,23 +102,23 @@@ { alignFrame = af; this.av = av; - seqPanel = new SeqPanel(av, this); - idPanel = new IdPanel(av, this); + setSeqPanel(new SeqPanel(av, this)); + setIdPanel(new IdPanel(av, this)); - scalePanel = new ScalePanel(av, this); + setScalePanel(new ScalePanel(av, this)); - idPanelHolder.add(idPanel, BorderLayout.CENTER); + idPanelHolder.add(getIdPanel(), BorderLayout.CENTER); idwidthAdjuster = new IdwidthAdjuster(this); idSpaceFillerPanel1.add(idwidthAdjuster, BorderLayout.CENTER); - annotationPanel = new AnnotationPanel(this); - alabels = new AnnotationLabels(this); + setAnnotationPanel(new AnnotationPanel(this)); + setAlabels(new AnnotationLabels(this)); - annotationScroller.setViewportView(annotationPanel); - annotationSpaceFillerHolder.add(alabels, BorderLayout.CENTER); + annotationScroller.setViewportView(getAnnotationPanel()); + annotationSpaceFillerHolder.add(getAlabels(), BorderLayout.CENTER); - scalePanelHolder.add(scalePanel, BorderLayout.CENTER); - seqPanelHolder.add(seqPanel, BorderLayout.CENTER); + scalePanelHolder.add(getScalePanel(), BorderLayout.CENTER); + seqPanelHolder.add(getSeqPanel(), BorderLayout.CENTER); setScrollValues(0, 0); @@@ -166,13 -168,13 +168,13 @@@ idSpaceFillerPanel1.setPreferredSize(new Dimension(10, av.charHeight + fm.getDescent())); - idPanel.idCanvas.gg = null; - seqPanel.seqCanvas.img = null; - annotationPanel.adjustPanelHeight(); + getIdPanel().getIdCanvas().gg = null; + getSeqPanel().seqCanvas.img = null; + getAnnotationPanel().adjustPanelHeight(); Dimension d = calculateIdWidth(); d.setSize(d.width + 4, d.height); - idPanel.idCanvas.setPreferredSize(d); + getIdPanel().getIdCanvas().setPreferredSize(d); hscrollFillerPanel.setPreferredSize(d); if (overviewPanel != null) @@@ -240,7 -242,7 +242,7 @@@ if (al.getAlignmentAnnotation() != null) { - fm = c.getFontMetrics(alabels.getFont()); + fm = c.getFontMetrics(getAlabels().getFont()); while (i < al.getAlignmentAnnotation().length) { @@@ -266,7 -268,7 +268,7 @@@ public void highlightSearchResults(SearchResults results) { scrollToPosition(results); - seqPanel.seqCanvas.highlightSearchResults(results); + getSeqPanel().seqCanvas.highlightSearchResults(results); } /** @@@ -371,8 -373,8 +373,8 @@@ void scrollToWrappedVisible(int res) { - int cwidth = seqPanel.seqCanvas - .getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()); + int cwidth = getSeqPanel().seqCanvas + .getWrappedCanvasWidth(getSeqPanel().seqCanvas.getWidth()); if (res < av.getStartRes() || res >= (av.getStartRes() + cwidth)) { vscroll.setValue((res / cwidth)); @@@ -441,7 -443,7 +443,7 @@@ */ protected void validateAnnotationDimensions(boolean adjustPanelHeight) { - int height = annotationPanel.adjustPanelHeight(); + int height = getAnnotationPanel().adjustPanelHeight(); int theight = av.getCharHeight() * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0 @@@ -503,7 -505,7 +505,7 @@@ annotationScroller.setVisible(false); annotationSpaceFillerHolder.setVisible(false); } - else if (av.showAnnotation) + else if (av.isShowAnnotation()) { annotationScroller.setVisible(true); annotationSpaceFillerHolder.setVisible(true); @@@ -603,10 -605,10 +605,10 @@@ width = av.getColumnSelection().findColumnPosition(width); } - av.setEndRes((x + (seqPanel.seqCanvas.getWidth() / av.charWidth)) - 1); + av.setEndRes((x + (getSeqPanel().seqCanvas.getWidth() / av.charWidth)) - 1); - hextent = seqPanel.seqCanvas.getWidth() / av.charWidth; - vextent = seqPanel.seqCanvas.getHeight() / av.charHeight; + hextent = getSeqPanel().seqCanvas.getWidth() / av.charWidth; + vextent = getSeqPanel().seqCanvas.getHeight() / av.charHeight; if (hextent > width) { @@@ -658,7 -660,7 +660,7 @@@ { int x = hscroll.getValue(); av.setStartRes(x); - av.setEndRes((x + (seqPanel.seqCanvas.getWidth() / av.getCharWidth())) - 1); + av.setEndRes((x + (getSeqPanel().seqCanvas.getWidth() / av.getCharWidth())) - 1); } if (evt.getSource() == vscroll) @@@ -669,8 -671,8 +671,8 @@@ { if (offy > -1) { - int rowSize = seqPanel.seqCanvas - .getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()); + int rowSize = getSeqPanel().seqCanvas + .getWrappedCanvasWidth(getSeqPanel().seqCanvas.getWidth()); av.setStartRes(offy * rowSize); av.setEndRes((offy + 1) * rowSize); } @@@ -692,7 -694,7 +694,7 @@@ { av.setStartSeq(offy); av.setEndSeq(offy - + (seqPanel.seqCanvas.getHeight() / av.getCharHeight())); + + (getSeqPanel().seqCanvas.getHeight() / av.getCharHeight())); } } @@@ -723,13 -725,13 +725,13 @@@ if (scrollX != 0 || scrollY != 0) { - idPanel.idCanvas.fastPaint(scrollY); - seqPanel.seqCanvas.fastPaint(scrollX, scrollY); - scalePanel.repaint(); + getIdPanel().getIdCanvas().fastPaint(scrollY); + getSeqPanel().seqCanvas.fastPaint(scrollX, scrollY); + getScalePanel().repaint(); if (av.getShowAnnotation() && scrollX != 0) { - annotationPanel.fastPaint(scrollX); + getAnnotationPanel().fastPaint(scrollX); } } } @@@ -769,7 -771,7 +771,7 @@@ { invalidate(); - Dimension d = idPanel.idCanvas.getPreferredSize(); + Dimension d = getIdPanel().getIdCanvas().getPreferredSize(); idPanelHolder.setPreferredSize(d); hscrollFillerPanel.setPreferredSize(new Dimension(d.width, 12)); validate(); @@@ -783,13 -785,13 +785,13 @@@ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; } - int canvasWidth = seqPanel.seqCanvas - .getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()); + int canvasWidth = getSeqPanel().seqCanvas + .getWrappedCanvasWidth(getSeqPanel().seqCanvas.getWidth()); if (canvasWidth > 0) { int max = maxwidth - / seqPanel.seqCanvas - .getWrappedCanvasWidth(seqPanel.seqCanvas + / getSeqPanel().seqCanvas + .getWrappedCanvasWidth(getSeqPanel().seqCanvas .getWidth()) + 1; vscroll.setMaximum(max); vscroll.setUnitIncrement(1); @@@ -905,9 -907,9 +907,9 @@@ int pagesHigh = ((av.getAlignment().getHeight() / totalSeq) + 1) * pheight; - if (av.showAnnotation) + if (av.isShowAnnotation()) { - pagesHigh += annotationPanel.adjustPanelHeight() + 3; + pagesHigh += getAnnotationPanel().adjustPanelHeight() + 3; } pagesHigh /= pheight; @@@ -919,7 -921,7 +921,7 @@@ // draw Scale pg.translate(idWidth, 0); - scalePanel.drawScale(pg, startRes, endRes, pwidth - idWidth, + getScalePanel().drawScale(pg, startRes, endRes, pwidth - idWidth, scaleHeight); pg.translate(-idWidth, scaleHeight); @@@ -928,7 -930,7 +930,7 @@@ Color currentColor = null; Color currentTextColor = null; - pg.setFont(idPanel.idCanvas.idfont); + pg.setFont(getIdPanel().getIdCanvas().getIdfont()); SequenceI seq; for (int i = startSeq; i < endSeq; i++) @@@ -953,7 -955,7 +955,7 @@@ pg.setColor(currentTextColor); int xPos = 0; - if (av.rightAlignIds) + if (av.isRightAlignIds()) { fm = pg.getFontMetrics(); xPos = idWidth @@@ -972,17 -974,17 +974,17 @@@ // draw main sequence panel pg.translate(idWidth, 0); - seqPanel.seqCanvas.drawPanel(pg, startRes, endRes, startSeq, endSeq, 0); + getSeqPanel().seqCanvas.drawPanel(pg, startRes, endRes, startSeq, endSeq, 0); - if (av.showAnnotation && (endSeq == av.getAlignment().getHeight())) + if (av.isShowAnnotation() && (endSeq == av.getAlignment().getHeight())) { // draw annotation - need to offset for current scroll position - int offset = -alabels.scrollOffset; + int offset = -getAlabels().getScrollOffset(); pg.translate(0, offset); pg.translate(-idWidth - 3, (endSeq - startSeq) * av.charHeight + 3); - alabels.drawComponent(pg, idWidth); + getAlabels().drawComponent(pg, idWidth); pg.translate(idWidth + 3, 0); - annotationPanel.renderer.drawComponent(annotationPanel, av, + getAnnotationPanel().renderer.drawComponent(getAnnotationPanel(), av, pg, -1, startRes, endRes + 1); pg.translate(0, -offset); } @@@ -1013,9 -1015,9 +1015,9 @@@ int annotationHeight = 0; AnnotationLabels labels = null; - if (av.showAnnotation) + if (av.isShowAnnotation()) { - annotationHeight = annotationPanel.adjustPanelHeight(); + annotationHeight = getAnnotationPanel().adjustPanelHeight(); labels = new AnnotationLabels(av); } @@@ -1036,7 -1038,7 +1038,7 @@@ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; } - int resWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(pwidth + int resWidth = getSeqPanel().seqCanvas.getWrappedCanvasWidth(pwidth - idWidth); int totalHeight = cHeight * (maxwidth / resWidth + 1); @@@ -1059,11 -1061,11 +1061,11 @@@ { for (int i = 0; i < av.getAlignment().getHeight(); i++) { - pg.setFont(idPanel.idCanvas.idfont); + pg.setFont(getIdPanel().getIdCanvas().getIdfont()); SequenceI s = av.getAlignment().getSequenceAt(i); String string = s.getDisplayId(av.getShowJVSuffix()); int xPos = 0; - if (av.rightAlignIds) + if (av.isRightAlignIds()) { FontMetrics fm = pg.getFontMetrics(); xPos = idWidth - fm.stringWidth(string) - 4; @@@ -1088,7 -1090,7 +1090,7 @@@ pg.translate(idWidth, 0); - seqPanel.seqCanvas.drawWrappedPanel(pg, pwidth - idWidth, totalHeight, + getSeqPanel().seqCanvas.drawWrappedPanel(pg, pwidth - idWidth, totalHeight, 0); if ((pi * pheight) < totalHeight) @@@ -1108,7 -1110,7 +1110,7 @@@ * * @return */ - int getVisibleIdWidth() + public int getVisibleIdWidth() { return getVisibleIdWidth(true); } @@@ -1122,7 -1124,7 +1124,7 @@@ * be returned * @return */ - int getVisibleIdWidth(boolean onscreen) + public int getVisibleIdWidth(boolean onscreen) { // see if rendering offscreen - check preferences and calc width accordingly if (!onscreen && Cache.getDefault("FIGURE_AUTOIDWIDTH", false)) @@@ -1133,7 -1135,7 +1135,7 @@@ if (onscreen || (idwidth = Cache.getIntegerProperty("FIGURE_FIXEDIDWIDTH")) == null) { - return (idPanel.getWidth() > 0 ? idPanel.getWidth() + return (getIdPanel().getWidth() > 0 ? getIdPanel().getWidth() : calculateIdWidth().width + 4); } return idwidth.intValue() + 4; @@@ -1142,7 -1144,7 +1144,7 @@@ void makeAlignmentImage(jalview.util.ImageMaker.TYPE type, File file) { long progress = System.currentTimeMillis(); - boolean headless = (System.getProperty("java.awt.headless") != null && System + headless = (System.getProperty("java.awt.headless") != null && System .getProperty("java.awt.headless").equals("true")); if (alignFrame != null && !headless) { @@@ -1153,44 -1155,9 +1155,9 @@@ } try { - int maxwidth = av.getAlignment().getWidth(); - if (av.hasHiddenColumns()) - { - maxwidth = av.getColumnSelection().findColumnPosition(maxwidth); - } - - int height = ((av.getAlignment().getHeight() + 1) * av.charHeight) - + scalePanel.getHeight(); - int width = getVisibleIdWidth(false) + (maxwidth * av.charWidth); - - if (av.getWrapAlignment()) - { - height = getWrappedHeight(); - if (headless) - { - // need to obtain default alignment width and then add in any - // additional allowance for id margin - // this duplicates the calculation in getWrappedHeight but adjusts for - // offscreen idWith - width = alignFrame.getWidth() - vscroll.getPreferredSize().width - - alignFrame.getInsets().left - - alignFrame.getInsets().right - getVisibleIdWidth() - + getVisibleIdWidth(false); - } - else - { - width = seqPanel.getWidth() + getVisibleIdWidth(false); - } - - } - else if (av.getShowAnnotation()) - { - height += annotationPanel.adjustPanelHeight() + 3; - } - + AlignmentDimension aDimension = getAlignmentDimension(); try { - jalview.util.ImageMaker im; final String imageAction, imageTitle; if (type == jalview.util.ImageMaker.TYPE.PNG) @@@ -1209,13 -1176,15 +1176,15 @@@ imageTitle = alignFrame.getTitle(); } - im = new jalview.util.ImageMaker(this, type, imageAction, width, - height, file, imageTitle); + im = new jalview.util.ImageMaker(this, type, imageAction, + aDimension.getWidth(), aDimension.getHeight(), file, + imageTitle); if (av.getWrapAlignment()) { if (im.getGraphics() != null) { - printWrappedAlignment(im.getGraphics(), width, height, 0); + printWrappedAlignment(im.getGraphics(), aDimension.getWidth(), + aDimension.getHeight(), 0); im.writeImage(); } } @@@ -1223,7 -1192,8 +1192,8 @@@ { if (im.getGraphics() != null) { - printUnwrapped(im.getGraphics(), width, height, 0); + printUnwrapped(im.getGraphics(), aDimension.getWidth(), + aDimension.getHeight(), 0); im.writeImage(); } } @@@ -1247,6 -1217,46 +1217,46 @@@ } } + public AlignmentDimension getAlignmentDimension() + { + int maxwidth = av.getAlignment().getWidth(); + if (av.hasHiddenColumns()) + { + maxwidth = av.getColumnSelection().findColumnPosition(maxwidth); + } + + int height = ((av.getAlignment().getHeight() + 1) * av.charHeight) + + getScalePanel().getHeight(); + int width = getVisibleIdWidth(false) + (maxwidth * av.charWidth); + + if (av.getWrapAlignment()) + { + height = getWrappedHeight(); + if (headless) + { + // need to obtain default alignment width and then add in any + // additional allowance for id margin + // this duplicates the calculation in getWrappedHeight but adjusts for + // offscreen idWith + width = alignFrame.getWidth() - vscroll.getPreferredSize().width + - alignFrame.getInsets().left + - alignFrame.getInsets().right - getVisibleIdWidth() + + getVisibleIdWidth(false); + } + else + { + width = getSeqPanel().getWidth() + getVisibleIdWidth(false); + } + + } + else if (av.getShowAnnotation()) + { + height += getAnnotationPanel().adjustPanelHeight() + 3; + } + return new AlignmentDimension(width, height); + + } + /** * DOCUMENT ME! */ @@@ -1410,7 -1420,7 +1420,7 @@@ int getWrappedHeight() { - int seqPanelWidth = seqPanel.seqCanvas.getWidth(); + int seqPanelWidth = getSeqPanel().seqCanvas.getWidth(); if (System.getProperty("java.awt.headless") != null && System.getProperty("java.awt.headless").equals("true")) @@@ -1420,7 -1430,7 +1430,7 @@@ - alignFrame.getInsets().left - alignFrame.getInsets().right; } - int chunkWidth = seqPanel.seqCanvas + int chunkWidth = getSeqPanel().seqCanvas .getWrappedCanvasWidth(seqPanelWidth); int hgap = av.charHeight; @@@ -1430,9 -1440,9 +1440,9 @@@ } int annotationHeight = 0; - if (av.showAnnotation) + if (av.isShowAnnotation()) { - annotationHeight = annotationPanel.adjustPanelHeight(); + annotationHeight = getAnnotationPanel().adjustPanelHeight(); } int cHeight = av.getAlignment().getHeight() * av.charHeight + hgap @@@ -1455,15 -1465,15 +1465,15 @@@ */ public void closePanel() { - PaintRefresher.RemoveComponent(seqPanel.seqCanvas); - PaintRefresher.RemoveComponent(idPanel.idCanvas); + PaintRefresher.RemoveComponent(getSeqPanel().seqCanvas); + PaintRefresher.RemoveComponent(getIdPanel().getIdCanvas()); PaintRefresher.RemoveComponent(this); if (av != null) { jalview.structure.StructureSelectionManager ssm = av .getStructureSelectionManager(); - ssm.removeStructureViewerListener(seqPanel, null); - ssm.removeSelectionListener(seqPanel); + ssm.removeStructureViewerListener(getSeqPanel(), null); + ssm.removeSelectionListener(getSeqPanel()); av.setAlignment(null); av = null; } @@@ -1503,8 -1513,11 +1513,8 @@@ return av.getAlignment(); } - /** - * get the name for this view - * - * @return - */ + + @Override public String getViewName() { return av.viewName; @@@ -1551,14 -1564,64 +1561,64 @@@ public void updateFeatureRenderer(FeatureRenderer fr) { - fr.transferSettings(seqPanel.seqCanvas.getFeatureRenderer()); + fr.transferSettings(getSeqPanel().seqCanvas.getFeatureRenderer()); } public void updateFeatureRendererFrom(FeatureRenderer fr) { - if (seqPanel.seqCanvas.getFeatureRenderer() != null) + if (getSeqPanel().seqCanvas.getFeatureRenderer() != null) { - seqPanel.seqCanvas.getFeatureRenderer().transferSettings(fr); + getSeqPanel().seqCanvas.getFeatureRenderer().transferSettings(fr); } } + + public ScalePanel getScalePanel() + { + return scalePanel; + } + + public void setScalePanel(ScalePanel scalePanel) + { + this.scalePanel = scalePanel; + } + + public SeqPanel getSeqPanel() + { + return seqPanel; + } + + public void setSeqPanel(SeqPanel seqPanel) + { + this.seqPanel = seqPanel; + } + + public AnnotationPanel getAnnotationPanel() + { + return annotationPanel; + } + + public void setAnnotationPanel(AnnotationPanel annotationPanel) + { + this.annotationPanel = annotationPanel; + } + + public AnnotationLabels getAlabels() + { + return alabels; + } + + public void setAlabels(AnnotationLabels alabels) + { + this.alabels = alabels; + } + + public IdPanel getIdPanel() + { + return idPanel; + } + + public void setIdPanel(IdPanel idPanel) + { + this.idPanel = idPanel; + } } diff --combined src/jalview/gui/AnnotationExporter.java index ecf4b8e,c68b2b1..e966c92 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@@ -20,16 -20,16 +20,32 @@@ */ package jalview.gui; --import java.util.*; ++import jalview.datamodel.AlignmentAnnotation; ++import jalview.datamodel.SequenceGroup; ++import jalview.io.AnnotationFile; ++import jalview.io.FeaturesFile; ++import jalview.io.JalviewFileChooser; ++import jalview.io.JalviewFileView; ++import jalview.util.MessageManager; ++ ++import java.awt.BorderLayout; ++import java.awt.Color; ++import java.awt.FlowLayout; ++import java.awt.event.ActionEvent; ++import java.awt.event.ActionListener; ++import java.util.Enumeration; ++import java.util.Hashtable; import java.util.List; --import java.awt.*; --import java.awt.event.*; --import javax.swing.*; -- --import jalview.datamodel.*; --import jalview.io.*; --import jalview.util.MessageManager; ++import javax.swing.BorderFactory; ++import javax.swing.ButtonGroup; ++import javax.swing.JButton; ++import javax.swing.JInternalFrame; ++import javax.swing.JLabel; ++import javax.swing.JLayeredPane; ++import javax.swing.JPanel; ++import javax.swing.JRadioButton; ++import javax.swing.SwingConstants; /** * @@@ -210,12 -210,12 +226,13 @@@ public class AnnotationExporter extend private Hashtable getDisplayedFeatureCols() { Hashtable fcols = new Hashtable(); - if (ap.av.featuresDisplayed == null) + if (ap.av.getFeaturesDisplayed() == null) { return fcols; } - Enumeration en = ap.av.featuresDisplayed.keys(); ++ + Enumeration en = ap.av.getFeaturesDisplayed().keys(); - FeatureRenderer fr = ap.seqPanel.seqCanvas.getFeatureRenderer(); // consider + FeatureRenderer fr = ap.getSeqPanel().seqCanvas.getFeatureRenderer(); // consider // higher // level // method ? diff --combined src/jalview/gui/ChimeraViewFrame.java index 513659f,2f84d28..74d4aac --- a/src/jalview/gui/ChimeraViewFrame.java +++ b/src/jalview/gui/ChimeraViewFrame.java @@@ -244,9 -244,9 +244,9 @@@ public class ChimeraViewFrame extends G // TODO : Fix multiple seq to one chain issue here. ap.getStructureSelectionManager().setMapping(seq, chains, alreadyMapped, AppletFormatAdapter.FILE); - if (ap.seqPanel.seqCanvas.fr != null) + if (ap.getSeqPanel().seqCanvas.fr != null) { - ap.seqPanel.seqCanvas.fr.featuresAdded(); + ap.getSeqPanel().seqCanvas.fr.featuresAdded(); ap.paintAlignment(true); } @@@ -840,13 -840,8 +840,13 @@@ { if (progressBar != null) { - progressBar.setProgressBar( - MessageManager.getString("label.state_completed"), hdl); + progressBar + .setProgressBar( + pdbid + + " " + + MessageManager + .getString("label.state_completed"), + hdl); } } /* diff --combined src/jalview/gui/FeatureRenderer.java index fe083b0,cbdf2ef..80f1255 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@@ -84,10 -84,10 +84,10 @@@ public class FeatureRenderer implement { this.ap = ap; this.av = ap.av; - if (ap != null && ap.seqPanel != null && ap.seqPanel.seqCanvas != null - && ap.seqPanel.seqCanvas.fr != null) + if (ap != null && ap.getSeqPanel() != null && ap.getSeqPanel().seqCanvas != null + && ap.getSeqPanel().seqCanvas.fr != null) { - transferSettings(ap.seqPanel.seqCanvas.fr); + transferSettings(ap.getSeqPanel().seqCanvas.fr); } } @@@ -192,20 -192,20 +192,20 @@@ // copy over the displayed feature settings if (fr.av != null) { - if (fr.av.featuresDisplayed != null) + if (fr.av.getFeaturesDisplayed() != null) { // update display settings - if (av.featuresDisplayed == null) + if (av.getFeaturesDisplayed() == null) { - av.featuresDisplayed = new Hashtable(fr.av.featuresDisplayed); + av.setFeaturesDisplayed(new Hashtable(fr.av.getFeaturesDisplayed())); } else { - av.featuresDisplayed.clear(); - Enumeration en = fr.av.featuresDisplayed.keys(); + av.getFeaturesDisplayed().clear(); + Enumeration en = fr.av.getFeaturesDisplayed().keys(); while (en.hasMoreElements()) { - av.featuresDisplayed.put(en.nextElement(), Boolean.TRUE); + av.getFeaturesDisplayed().put(en.nextElement(), Boolean.TRUE); } } @@@ -349,11 -349,11 +349,11 @@@ fm = g.getFontMetrics(); } - if (av.featuresDisplayed == null || renderOrder == null + if (av.getFeaturesDisplayed() == null || renderOrder == null || newFeatureAdded) { findAllFeatures(); - if (av.featuresDisplayed.size() < 1) + if (av.getFeaturesDisplayed().size() < 1) { return; } @@@ -388,7 -388,7 +388,7 @@@ { type = renderOrder[renderIndex]; - if (type == null || !av.featuresDisplayed.containsKey(type)) + if (type == null || !av.getFeaturesDisplayed().containsKey(type)) { continue; } @@@ -682,9 -682,9 +682,9 @@@ findingFeatures = true; - if (av.featuresDisplayed == null) + if (av.getFeaturesDisplayed() == null) { - av.featuresDisplayed = new Hashtable(); + av.setFeaturesDisplayed(new Hashtable()); } allfeatures = new Vector(); @@@ -717,7 -717,7 +717,7 @@@ int index = 0; while (index < features.length) { - if (!av.featuresDisplayed.containsKey(features[index].getType())) + if (!av.getFeaturesDisplayed().containsKey(features[index].getType())) { if (featureGroups.containsKey(features[index].getType())) @@@ -742,7 -742,7 +742,7 @@@ { // this is a new feature type on the alignment. Mark it for // display. - av.featuresDisplayed.put(features[index].getType(), + av.getFeaturesDisplayed().put(features[index].getType(), new Integer(getColour(features[index].getType()) .getRGB())); setOrder(features[index].getType(), 0); @@@ -1095,7 -1095,7 +1095,7 @@@ highlight.addResult(sequences[0], features[index].getBegin(), features[index].getEnd()); - ap.seqPanel.seqCanvas.highlightSearchResults(highlight); + ap.getSeqPanel().seqCanvas.highlightSearchResults(highlight); } Object col = getFeatureStyle(name.getText()); @@@ -1253,7 -1253,7 +1253,7 @@@ sf.description = lastDescriptionAdded; setColour(sf.type, fcol); - av.featuresDisplayed.put(sf.type, getColour(sf.type)); + av.getFeaturesDisplayed().put(sf.type, getColour(sf.type)); try { @@@ -1281,9 -1281,9 +1281,9 @@@ ffile.parseDescriptionHTML(features[i], false); } - if (av.featuresDisplayed == null) + if (av.getFeaturesDisplayed() == null) { - av.featuresDisplayed = new Hashtable(); + av.setFeaturesDisplayed(new Hashtable()); } if (lastFeatureGroupAdded != null) @@@ -1293,7 -1293,7 +1293,7 @@@ featureGroups.put(lastFeatureGroupAdded, new Boolean(true)); } setColour(lastFeatureAdded, fcol); - av.featuresDisplayed.put(lastFeatureAdded, + av.getFeaturesDisplayed().put(lastFeatureAdded, getColour(lastFeatureAdded)); findAllFeatures(false); @@@ -1386,13 -1386,13 +1386,13 @@@ { if (visibleNew) { - if (av.featuresDisplayed != null) + if (av.getFeaturesDisplayed() != null) { - av.featuresDisplayed.clear(); + av.getFeaturesDisplayed().clear(); } else { - av.featuresDisplayed = new Hashtable(); + av.setFeaturesDisplayed(new Hashtable()); } } if (data == null) @@@ -1414,7 -1414,7 +1414,7 @@@ // interface object if (((Boolean) data[i][2]).booleanValue()) { - av.featuresDisplayed.put(type, new Integer(getColour(type) + av.getFeaturesDisplayed().put(type, new Integer(getColour(type) .getRGB())); } diff --combined src/jalview/gui/FeatureSettings.java index 8f841d1,9748f42..0f14bed --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@@ -222,7 -222,7 +222,7 @@@ public class FeatureSettings extends JP dassourceBrowser = new DasSourceBrowser(this); dasSettingsPane.add(dassourceBrowser, BorderLayout.CENTER); - if (af.getViewport().featuresDisplayed == null + if (af.getViewport().getFeaturesDisplayed() == null || fr.renderOrder == null) { fr.findAllFeatures(true); // display everything! @@@ -527,7 -527,7 +527,7 @@@ { fr.featureGroups.put(check.getText(), new Boolean(check.isSelected())); - af.alignPanel.seqPanel.seqCanvas.repaint(); + af.alignPanel.getSeqPanel().seqCanvas.repaint(); if (af.alignPanel.overviewPanel != null) { af.alignPanel.overviewPanel.updateOverviewImage(); @@@ -645,7 -645,7 +645,7 @@@ data[dataIndex][0] = type; data[dataIndex][1] = fr.getFeatureStyle(type); data[dataIndex][2] = new Boolean( - af.getViewport().featuresDisplayed.containsKey(type)); + af.getViewport().getFeaturesDisplayed().containsKey(type)); dataIndex++; visibleChecks.removeElement(type); } @@@ -1277,7 -1277,7 +1277,7 @@@ System.arraycopy(fr.renderOrder, 0, typ, 0, typ.length); for (int i = 0; i < typ.length; i++) { - if (af.viewport.featuresDisplayed.get(typ[i]) == null) + if (af.viewport.getFeaturesDisplayed().get(typ[i]) == null) { typ[i] = null; } diff --combined src/jalview/gui/Jalview2XML.java index 08fd306,8ddd050..aa2ae7a --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@@ -498,7 -498,7 +498,7 @@@ public class Jalview2XM for (String dssids : dsses.keySet()) { AlignFrame _af = dsses.get(dssids); - String jfileName = MessageManager.formatMessage("label.dataset_for", new String[]{fileName,_af.getTitle()}); + String jfileName = fileName + " Dataset for " + _af.getTitle(); if (!jfileName.endsWith(".xml")) { jfileName = jfileName + ".xml"; @@@ -1127,7 -1127,7 +1127,7 @@@ view.setShowBoxes(av.getShowBoxes()); view.setShowColourText(av.getColourText()); view.setShowFullId(av.getShowJVSuffix()); - view.setRightAlignIds(av.rightAlignIds); + view.setRightAlignIds(av.isRightAlignIds()); view.setShowSequenceFeatures(av.showSequenceFeatures); view.setShowText(av.getShowText()); view.setShowUnconserved(av.getShowUnconserved()); @@@ -1145,11 -1145,11 +1145,11 @@@ view.setFollowHighlight(av.followHighlight); view.setFollowSelection(av.followSelection); view.setIgnoreGapsinConsensus(av.getIgnoreGapsConsensus()); - if (av.featuresDisplayed != null) + if (av.getFeaturesDisplayed() != null) { jalview.schemabinding.version2.FeatureSettings fs = new jalview.schemabinding.version2.FeatureSettings(); - String[] renderOrder = ap.seqPanel.seqCanvas.getFeatureRenderer().renderOrder; + String[] renderOrder = ap.getSeqPanel().seqCanvas.getFeatureRenderer().renderOrder; Vector settingsAdded = new Vector(); Object gstyle = null; @@@ -1158,7 -1158,7 +1158,7 @@@ { for (int ro = 0; ro < renderOrder.length; ro++) { - gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer() + gstyle = ap.getSeqPanel().seqCanvas.getFeatureRenderer() .getFeatureStyle(renderOrder[ro]); Setting setting = new Setting(); setting.setType(renderOrder[ro]); @@@ -1176,13 -1176,13 +1176,13 @@@ } else { - setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer() + setting.setColour(ap.getSeqPanel().seqCanvas.getFeatureRenderer() .getColour(renderOrder[ro]).getRGB()); } - setting.setDisplay(av.featuresDisplayed + setting.setDisplay(av.getFeaturesDisplayed() .containsKey(renderOrder[ro])); - float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer() + float rorder = ap.getSeqPanel().seqCanvas.getFeatureRenderer() .getOrder(renderOrder[ro]); if (rorder > -1) { @@@ -1194,7 -1194,7 +1194,7 @@@ } // Make sure we save none displayed feature settings - Iterator en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours + Iterator en = ap.getSeqPanel().seqCanvas.getFeatureRenderer().featureColours .keySet().iterator(); while (en.hasNext()) { @@@ -1206,11 -1206,11 +1206,11 @@@ Setting setting = new Setting(); setting.setType(key); - setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer() + setting.setColour(ap.getSeqPanel().seqCanvas.getFeatureRenderer() .getColour(key).getRGB()); setting.setDisplay(false); - float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer() + float rorder = ap.getSeqPanel().seqCanvas.getFeatureRenderer() .getOrder(key); if (rorder > -1) { @@@ -1219,7 -1219,7 +1219,7 @@@ fs.addSetting(setting); settingsAdded.addElement(key); } - en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups + en = ap.getSeqPanel().seqCanvas.getFeatureRenderer().featureGroups .keySet().iterator(); Vector groupsAdded = new Vector(); while (en.hasNext()) @@@ -1231,7 -1231,7 +1231,7 @@@ } Group g = new Group(); g.setName(grp); - g.setDisplay(((Boolean) ap.seqPanel.seqCanvas + g.setDisplay(((Boolean) ap.getSeqPanel().seqCanvas .getFeatureRenderer().featureGroups.get(grp)) .booleanValue()); fs.addGroup(g); @@@ -1456,7 -1456,8 +1456,7 @@@ } ae.setPosition(a); - if (aa[i].annotations[a].secondaryStructure != ' ' - && aa[i].annotations[a].secondaryStructure != '\0') + if (aa[i].annotations[a].secondaryStructure > ' ') { ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure + ""); @@@ -2313,10 -2314,7 +2313,10 @@@ } else { - recoverDatasetFor(vamsasSet, al); + // recover dataset - passing on flag indicating if this a 'viewless' + // sequence set (a.k.a. a stored dataset for the project) + recoverDatasetFor(vamsasSet, al, object.getJalviewModelSequence() + .getViewportCount() == 0); } // /////////////////////////////// @@@ -3474,7 -3472,7 +3474,7 @@@ af.viewport.setConservationSelected(view.getConservationSelected()); af.viewport.setShowJVSuffix(view.getShowFullId()); - af.viewport.rightAlignIds = view.getRightAlignIds(); + af.viewport.setRightAlignIds(view.getRightAlignIds()); af.viewport.setFont(new java.awt.Font(view.getFontName(), view .getFontStyle(), view.getFontSize())); af.alignPanel.fontChanged(); @@@ -3606,7 -3604,7 +3606,7 @@@ // recover featre settings if (jms.getFeatureSettings() != null) { - af.viewport.featuresDisplayed = new Hashtable(); + af.viewport.setFeaturesDisplayed(new Hashtable()); String[] renderOrder = new String[jms.getFeatureSettings() .getSettingCount()]; for (int fs = 0; fs < jms.getFeatureSettings().getSettingCount(); fs++) @@@ -3635,36 -3633,36 +3635,36 @@@ gc.setColourByLabel(setting.getColourByLabel()); } // and put in the feature colour table. - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour( + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setColour( setting.getType(), gc); } else { - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour( + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setColour( setting.getType(), new java.awt.Color(setting.getColour())); } renderOrder[fs] = setting.getType(); if (setting.hasOrder()) { - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setOrder( + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setOrder( setting.getType(), setting.getOrder()); } else { - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setOrder( + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setOrder( setting.getType(), fs / jms.getFeatureSettings().getSettingCount()); } if (setting.getDisplay()) { - af.viewport.featuresDisplayed.put(setting.getType(), new Integer( + af.viewport.getFeaturesDisplayed().put(setting.getType(), new Integer( setting.getColour())); } } - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().renderOrder = renderOrder; + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().renderOrder = renderOrder; Hashtable fgtable; - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureGroups = fgtable = new Hashtable(); + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().featureGroups = fgtable = new Hashtable(); for (int gs = 0; gs < jms.getFeatureSettings().getGroupCount(); gs++) { Group grp = jms.getFeatureSettings().getGroup(gs); @@@ -3988,8 -3986,7 +3988,8 @@@ } } - private void recoverDatasetFor(SequenceSet vamsasSet, Alignment al) + private void recoverDatasetFor(SequenceSet vamsasSet, Alignment al, + boolean ignoreUnrefed) { jalview.datamodel.Alignment ds = getDatasetFor(vamsasSet.getDatasetId()); Vector dseqs = null; @@@ -4001,7 -3998,7 +4001,7 @@@ for (int i = 0, iSize = vamsasSet.getSequenceCount(); i < iSize; i++) { Sequence vamsasSeq = vamsasSet.getSequence(i); - ensureJalviewDatasetSequence(vamsasSeq, ds, dseqs); + ensureJalviewDatasetSequence(vamsasSeq, ds, dseqs, ignoreUnrefed); } // create a new dataset if (ds == null) @@@ -4030,7 -4027,7 +4030,7 @@@ * vector to add new dataset sequence to */ private void ensureJalviewDatasetSequence(Sequence vamsasSeq, - AlignmentI ds, Vector dseqs) + AlignmentI ds, Vector dseqs, boolean ignoreUnrefed) { // JBP TODO: Check this is called for AlCodonFrames to support recovery of // xRef Codon Maps @@@ -4041,10 -4038,7 +4041,10 @@@ { dsq = sq.getDatasetSequence(); } - + if (sq == null && ignoreUnrefed) + { + return; + } String sqid = vamsasSeq.getDsseqid(); if (dsq == null) { diff --combined src/jalview/gui/Jalview2XML_V1.java index 3773a64,9a58f51..033b6dc --- a/src/jalview/gui/Jalview2XML_V1.java +++ b/src/jalview/gui/Jalview2XML_V1.java @@@ -415,25 -415,25 +415,25 @@@ public class Jalview2XML_V if (jms.getFeatureSettings() != null) { - af.viewport.featuresDisplayed = new Hashtable(); + af.viewport.setFeaturesDisplayed(new Hashtable()); String[] renderOrder = new String[jms.getFeatureSettings() .getSettingCount()]; for (int fs = 0; fs < jms.getFeatureSettings().getSettingCount(); fs++) { Setting setting = jms.getFeatureSettings().getSetting(fs); - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour( + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setColour( setting.getType(), new java.awt.Color(setting.getColour())); renderOrder[fs] = setting.getType(); if (setting.getDisplay()) { - af.viewport.featuresDisplayed.put(setting.getType(), new Integer( + af.viewport.getFeaturesDisplayed().put(setting.getType(), new Integer( setting.getColour())); } } - af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().renderOrder = renderOrder; + af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().renderOrder = renderOrder; } af.setMenusFromViewport(af.viewport); diff --combined src/jalview/gui/PopupMenu.java index c2bee83,1a7235f..4cc3d6a --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@@ -27,7 -27,6 +27,7 @@@ import jalview.commands.ChangeCaseComma import jalview.commands.EditCommand; import jalview.commands.EditCommand.Action; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.DBRefEntry; import jalview.datamodel.PDBEntry; @@@ -1766,13 -1765,12 +1766,13 @@@ public class PopupMenu extends JPopupMe /** * Check for any annotations on the underlying dataset sequences (for the - * current selection group) which are not on the alignment annotations for the - * sequence. If any are found, enable the option to add them to the alignment. - * The criteria for 'on the alignment' is finding an alignment annotation on - * the sequence, that matches on calcId and label. A tooltip is also - * constructed that displays the source (calcId) and type (label) of the - * annotations that can be added. + * current selection group) which are not 'on the alignment'.If any are found, + * enable the option to add them to the alignment. The criteria for 'on the + * alignment' is finding an alignment annotation on the alignment, matched on + * calcId, label and sequenceRef. + * + * A tooltip is also constructed that displays the source (calcId) and type + * (label) of the annotations that can be added. * * @param menuItem * @param forSequences @@@ -1799,11 -1797,10 +1799,11 @@@ /* * For each sequence selected in the alignment, make a list of any * annotations on the underlying dataset sequence which are not already on - * the sequence in the alignment. + * the alignment. * * Build a map of { alignmentSequence, } */ + AlignmentI al = this.ap.av.getAlignment(); final Map> candidates = new LinkedHashMap>(); for (SequenceI seq : forSequences) { @@@ -1821,12 -1818,11 +1821,12 @@@ for (AlignmentAnnotation dsann : datasetAnnotations) { /* - * If the sequence has no annotation that matches this one, then add - * this one to the results list. + * Find matching annotations on the alignment. */ - if (seq.getAlignmentAnnotations(dsann.getCalcId(), dsann.label) - .isEmpty()) + final Iterable matchedAlignmentAnnotations = al + .findAnnotations(seq, dsann.getCalcId(), + dsann.label); + if (!matchedAlignmentAnnotations.iterator().hasNext()) { result.add(dsann); tipEntries.put(dsann.getCalcId(), dsann.label); @@@ -1895,14 -1891,8 +1895,14 @@@ } copyAnn.restrict(startRes, endRes); - // add to the sequence (sets copyAnn.datasetSequence) - seq.addAlignmentAnnotation(copyAnn); + /* + * Add to the sequence (sets copyAnn.datasetSequence), unless the + * original annotation is already on the sequence. + */ + if (!seq.hasAnnotation(ann)) + { + seq.addAlignmentAnnotation(copyAnn); + } // adjust for gaps copyAnn.adjustForAlignment(); // add to the alignment and set visible @@@ -1943,7 -1933,7 +1943,7 @@@ true, true, false, - (ap.seqPanel.seqCanvas.fr != null) ? ap.seqPanel.seqCanvas.fr.minmax + (ap.getSeqPanel().seqCanvas.fr != null) ? ap.getSeqPanel().seqCanvas.fr.minmax : null); contents.append("

"); } @@@ -2660,7 -2650,7 +2660,7 @@@ System.arraycopy(features, 0, tfeatures, 0, rsize); features = tfeatures; seqs = rseqs; - if (ap.seqPanel.seqCanvas.getFeatureRenderer().amendFeatures(seqs, + if (ap.getSeqPanel().seqCanvas.getFeatureRenderer().amendFeatures(seqs, features, true, ap)) { ap.alignFrame.setShowSeqFeatures(true); diff --combined src/jalview/gui/SeqPanel.java index 5d3df1a,de1ffdf..fbe9ff8 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@@ -251,9 -251,8 +251,9 @@@ public class SeqPanel extends JPanel im { for (int i = 0; i < features.length; i++) { - if (av.featuresDisplayed == null - || !av.featuresDisplayed.containsKey(features[i].getType())) + if (av.getFeaturesDisplayed() == null + || !av.getFeaturesDisplayed().containsKey( + features[i].getType())) { continue; } @@@ -751,7 -750,7 +751,7 @@@ sequence.getDatasetSequence(), rpos = sequence.findPosition(res)); seqARep.appendFeatures(tooltipText, rpos, features, - this.ap.seqPanel.seqCanvas.fr.minmax); + this.ap.getSeqPanel().seqCanvas.fr.minmax); } if (tooltipText.length() == 6) // {