+ }
+ });
+ } catch (InvocationTargetException ex)
+ {
+ warn("Unexpected error when opening Jmol view.",ex);
+
+ } catch (InterruptedException e)
+ {
+ // e.printStackTrace();
+ }
+ }
+
+ }
+ else
+ // if (comp != null)
+ {
+ // NOTE: if the jalview project is part of a shared session then
+ // view synchronization should/could be done here.
+
+ // add mapping for sequences in this view to an already open Jmol
+ // instance
+ for (String id : oldFiles.keySet())
+ {
+ // add this and any other pdb files that should be present in the
+ // viewer
+ Object[] filedat = oldFiles.get(id);
+ String pdbFile = (String) filedat[0];
+ SequenceI[] seq = (SequenceI[]) ((Vector<SequenceI>) filedat[2])
+ .toArray(new SequenceI[0]);
+ StructureSelectionManager.getStructureSelectionManager()
+ .setMapping(seq, null, pdbFile,
+ jalview.io.AppletFormatAdapter.FILE);
+ ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq);
+ }
+ }
+ }
+ }
+ }
+ // and finally return.
+ return af;
+ }
+
+ AlignFrame loadViewport(String file, JSeq[] JSEQ, Vector hiddenSeqs,
+ Alignment al, boolean hideConsensus, boolean hideQuality,
+ boolean hideConservation, JalviewModelSequence jms,
+ Viewport view, String uniqueSeqSetId, String viewId)
+ {
+ AlignFrame af = null;
+ af = new AlignFrame(al, view.getWidth(), view.getHeight(),
+ uniqueSeqSetId, viewId);
+
+ af.setFileName(file, "Jalview");
+
+ for (int i = 0; i < JSEQ.length; i++)
+ {
+ af.viewport.setSequenceColour(af.viewport.alignment.getSequenceAt(i),
+ new java.awt.Color(JSEQ[i].getColour()));
+ }
+
+ af.viewport.gatherViewsHere = view.getGatheredViews();
+
+ if (view.getSequenceSetId() != null)
+ {
+ jalview.gui.AlignViewport av = (jalview.gui.AlignViewport) viewportsAdded
+ .get(uniqueSeqSetId);
+
+ af.viewport.sequenceSetID = uniqueSeqSetId;
+ if (av != null)
+ {
+ // propagate shared settings to this new view
+ af.viewport.historyList = av.historyList;
+ af.viewport.redoList = av.redoList;
+ }
+ else
+ {
+ viewportsAdded.put(uniqueSeqSetId, af.viewport);
+ }
+ // TODO: check if this method can be called repeatedly without
+ // side-effects if alignpanel already registered.
+ PaintRefresher.Register(af.alignPanel, uniqueSeqSetId);
+ }
+ // apply Hidden regions to view.
+ if (hiddenSeqs != null)
+ {
+ for (int s = 0; s < JSEQ.length; s++)
+ {
+ jalview.datamodel.SequenceGroup hidden = new jalview.datamodel.SequenceGroup();
+
+ for (int r = 0; r < JSEQ[s].getHiddenSequencesCount(); r++)
+ {
+ hidden.addSequence(
+ al.getSequenceAt(JSEQ[s].getHiddenSequences(r)), false);
+ }
+ af.viewport.hideRepSequences(al.getSequenceAt(s), hidden);
+ }
+
+ jalview.datamodel.SequenceI[] hseqs = new jalview.datamodel.SequenceI[hiddenSeqs
+ .size()];
+
+ for (int s = 0; s < hiddenSeqs.size(); s++)
+ {
+ hseqs[s] = (jalview.datamodel.SequenceI) hiddenSeqs.elementAt(s);
+ }
+
+ af.viewport.hideSequence(hseqs);
+
+ }
+ // set visibility of annotation in view
+ if ((hideConsensus || hideQuality || hideConservation)
+ && al.getAlignmentAnnotation() != null)
+ {
+ int hSize = al.getAlignmentAnnotation().length;
+ for (int h = 0; h < hSize; h++)
+ {
+ if ((hideConsensus && al.getAlignmentAnnotation()[h].label
+ .equals("Consensus"))
+ || (hideQuality && al.getAlignmentAnnotation()[h].label
+ .equals("Quality"))
+ || (hideConservation && al.getAlignmentAnnotation()[h].label
+ .equals("Conservation")))
+ {
+ al.deleteAnnotation(al.getAlignmentAnnotation()[h]);
+ hSize--;
+ h--;
+ }
+ }
+ af.alignPanel.adjustAnnotationHeight();
+ }
+ // recover view properties and display parameters
+ if (view.getViewName() != null)
+ {
+ af.viewport.viewName = view.getViewName();
+ af.setInitialTabVisible();
+ }
+ af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(),
+ view.getHeight());
+
+ af.viewport.setShowAnnotation(view.getShowAnnotation());
+ af.viewport.setAbovePIDThreshold(view.getPidSelected());
+
+ af.viewport.setColourText(view.getShowColourText());
+
+ af.viewport.setConservationSelected(view.getConservationSelected());
+ af.viewport.setShowJVSuffix(view.getShowFullId());
+ af.viewport.rightAlignIds = view.getRightAlignIds();
+ af.viewport.setFont(new java.awt.Font(view.getFontName(), view
+ .getFontStyle(), view.getFontSize()));
+ af.alignPanel.fontChanged();
+ af.viewport.setRenderGaps(view.getRenderGaps());
+ af.viewport.setWrapAlignment(view.getWrapAlignment());
+ af.alignPanel.setWrapAlignment(view.getWrapAlignment());
+ af.viewport.setShowAnnotation(view.getShowAnnotation());
+ af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
+
+ af.viewport.setShowBoxes(view.getShowBoxes());
+
+ af.viewport.setShowText(view.getShowText());
+
+ af.viewport.textColour = new java.awt.Color(view.getTextCol1());
+ af.viewport.textColour2 = new java.awt.Color(view.getTextCol2());
+ af.viewport.thresholdTextColour = view.getTextColThreshold();
+ af.viewport.setShowUnconserved(view.hasShowUnconserved() ? view
+ .isShowUnconserved() : false);
+ af.viewport.setStartRes(view.getStartRes());
+ af.viewport.setStartSeq(view.getStartSeq());
+
+ ColourSchemeI cs = null;
+ // apply colourschemes
+ if (view.getBgColour() != null)
+ {
+ if (view.getBgColour().startsWith("ucs"))
+ {
+ cs = GetUserColourScheme(jms, view.getBgColour());
+ }
+ else if (view.getBgColour().startsWith("Annotation"))
+ {
+ // int find annotation
+ if (af.viewport.alignment.getAlignmentAnnotation() != null)
+ {
+ for (int i = 0; i < af.viewport.alignment
+ .getAlignmentAnnotation().length; i++)
+ {
+ if (af.viewport.alignment.getAlignmentAnnotation()[i].label
+ .equals(view.getAnnotationColours().getAnnotation()))
+ {
+ if (af.viewport.alignment.getAlignmentAnnotation()[i]
+ .getThreshold() == null)
+ {
+ af.viewport.alignment.getAlignmentAnnotation()[i]
+ .setThreshold(new jalview.datamodel.GraphLine(view
+ .getAnnotationColours().getThreshold(),
+ "Threshold", java.awt.Color.black)
+
+ );
+ }
+
+ if (view.getAnnotationColours().getColourScheme()
+ .equals("None"))
+ {
+ cs = new AnnotationColourGradient(
+ af.viewport.alignment.getAlignmentAnnotation()[i],
+ new java.awt.Color(view.getAnnotationColours()
+ .getMinColour()), new java.awt.Color(view
+ .getAnnotationColours().getMaxColour()),
+ view.getAnnotationColours().getAboveThreshold());
+ }
+ else if (view.getAnnotationColours().getColourScheme()
+ .startsWith("ucs"))
+ {
+ cs = new AnnotationColourGradient(
+ af.viewport.alignment.getAlignmentAnnotation()[i],
+ GetUserColourScheme(jms, view
+ .getAnnotationColours().getColourScheme()),
+ view.getAnnotationColours().getAboveThreshold());
+ }
+ else
+ {
+ cs = new AnnotationColourGradient(
+ af.viewport.alignment.getAlignmentAnnotation()[i],
+ ColourSchemeProperty.getColour(al, view
+ .getAnnotationColours().getColourScheme()),
+ view.getAnnotationColours().getAboveThreshold());
+ }
+
+ // Also use these settings for all the groups
+ if (al.getGroups() != null)
+ {
+ for (int g = 0; g < al.getGroups().size(); g++)