X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=8e54ba904ddb02fa0ebf392df5dde0c13c711db5;hb=14ead5d8009f9ac9a139ae93faf44e67a3998d46;hp=28b7cb5f3df129cd7d09164abc9447c2f3098304;hpb=ec955aa655d8320258b91eb079bc57f688cd0a07;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 28b7cb5..8e54ba9 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,17 +1,24 @@ -/******************** - * 2004 Jalview Reengineered - * Barton Group - * Dundee University +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * - * AM Waterhouse - *******************/ - - - + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.appletgui; -import jalview.jbappletgui.GAlignFrame; import jalview.schemes.*; import jalview.datamodel.*; import jalview.analysis.*; @@ -19,55 +26,641 @@ import jalview.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.net.URL; -public class AlignFrame extends GAlignFrame +public class AlignFrame extends Frame implements ActionListener, + ItemListener, KeyListener, MouseListener { - final AlignmentPanel alignPanel; - final AlignViewport viewport; - public static final int NEW_WINDOW_WIDTH = 700; - public static final int NEW_WINDOW_HEIGHT = 500; - jalview.bin.JalviewLite applet; + public AlignmentPanel alignPanel; + public AlignViewport viewport; + int DEFAULT_WIDTH = 700; + int DEFAULT_HEIGHT = 500; - public AlignFrame(AlignmentI al) + String jalviewServletURL; + + + public AlignFrame(AlignmentI al, + jalview.bin.JalviewLite applet, + String title, + boolean embedded) { - this.applet = null; - viewport = new AlignViewport(al, null); + + jalviewServletURL = applet.getParameter("APPLICATION_URL"); + + try{ + jbInit(); + }catch(Exception ex) + { + ex.printStackTrace(); + } + + viewport = new AlignViewport(al, applet); alignPanel = new AlignmentPanel(this, viewport); - add(alignPanel); - alignPanel.validate(); + + annotationPanelMenuItem.setState(viewport.showAnnotation); + + seqLimits.setState(viewport.showJVSuffix); + + if(applet!=null) + { + String param = applet.getParameter("sortBy"); + if (param != null) + { + if (param.equalsIgnoreCase("Id")) + sortIDMenuItem_actionPerformed(); + else if (param.equalsIgnoreCase("Pairwise Identity")) + sortPairwiseMenuItem_actionPerformed(); + } + + param = applet.getParameter("wrap"); + if (param != null) + { + if (param.equalsIgnoreCase("true")) + { + wrapMenuItem.setState(true); + wrapMenuItem_actionPerformed(); + } + } + + 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) + {} + + } + + //Some JVMS send keyevents to Top frame or lowest panel, + //Havent worked out why yet. So add to both this frame and seqCanvas for now + this.addKeyListener(this); + alignPanel.seqPanel.seqCanvas.addKeyListener(this); + alignPanel.idPanel.idCanvas.addKeyListener(this); + alignPanel.scalePanel.addKeyListener(this); + alignPanel.annotationPanel.addKeyListener(this); + + viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener() + { + public void propertyChange(java.beans.PropertyChangeEvent evt) + { + if (evt.getPropertyName().equals("alignment")) + { + alignmentChanged(); + } + } + }); + + + if(embedded) + { + setEmbedded(); + } + else + { + add(alignPanel, BorderLayout.CENTER); + jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH, + DEFAULT_HEIGHT); + } + alignPanel.validate(); + alignPanel.repaint(); + } + public AlignViewport getAlignViewport() + { + return viewport; } - public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet) + public SeqCanvas getSeqcanvas() { - this.applet = applet; - viewport = new AlignViewport(al, applet); - alignPanel = new AlignmentPanel(this, viewport); - add(alignPanel); - alignPanel.validate(); + return alignPanel.seqPanel.seqCanvas; } - public void inputText_actionPerformed(ActionEvent e) + + /** + * DOCUMENT ME! + * + * @param String DOCUMENT ME! + */ + + public void parseFeaturesFile(String file, String type) { - CutAndPasteTransfer cap = new CutAndPasteTransfer(true); - Frame frame = new Frame(); - frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500,500); + Hashtable featureLinks = new Hashtable(); + boolean featuresFile = false; + try{ + featuresFile = new jalview.io.FeaturesFile(file, type).parse(viewport.alignment, + alignPanel.seqPanel.seqCanvas. + getFeatureRenderer().featureColours, + featureLinks, + true); + } + catch(Exception ex) + { + ex.printStackTrace(); + } + + if(featuresFile) + { + if(featureLinks.size()>0) + alignPanel.seqPanel.seqCanvas + .getFeatureRenderer().featureLinks = featureLinks; + viewport.showSequenceFeatures = true; + sequenceFeatures.setState(true); + alignPanel.repaint(); + } + } + public void keyPressed(KeyEvent evt) + { + if (viewport.cursorMode + && evt.getKeyCode() >= KeyEvent.VK_0 + && evt.getKeyCode() <= KeyEvent.VK_9) + { + alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } + + switch (evt.getKeyCode()) + { + case 27: // escape key + deselectAllSequenceMenuItem_actionPerformed(); + break; + case KeyEvent.VK_X: + if (evt.isControlDown() || evt.isMetaDown()) + { + cut_actionPerformed(); + } + break; + case KeyEvent.VK_C: + if (viewport.cursorMode && !evt.isControlDown()) + { + alignPanel.seqPanel.setCursorColumn(); + } + if (evt.isControlDown() || evt.isMetaDown()) + { + copy_actionPerformed(); + } + break; + case KeyEvent.VK_V: + if (evt.isControlDown() || evt.isMetaDown()) + { + paste(true); + } + break; + case KeyEvent.VK_A: + if (evt.isControlDown() || evt.isMetaDown()) + { + selectAllSequenceMenuItem_actionPerformed(); + } + break; + case KeyEvent.VK_DOWN: + if(viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0,1); + } + else + moveSelectedSequences(false); + break; + + case KeyEvent.VK_UP: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0,-1); + } + else + moveSelectedSequences(true); + break; + + case KeyEvent.VK_LEFT: + if(viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(-1,0); + } + break; + + case KeyEvent.VK_RIGHT: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(1,0); + } + break; + case KeyEvent.VK_SPACE: + if(viewport.cursorMode) + { + alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown() + ); + } + break; + + case KeyEvent.VK_DELETE: + case KeyEvent.VK_BACK_SPACE: + if(viewport.cursorMode) + { + alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown() + ); + } + else + { + cut_actionPerformed(); + alignPanel.seqPanel.seqCanvas.repaint(); + } + break; + + case KeyEvent.VK_S: + if(viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRow(); + } + break; + case KeyEvent.VK_P: + if(viewport.cursorMode) + { + alignPanel.seqPanel.setCursorPosition(); + } + break; + + case KeyEvent.VK_ENTER: + case KeyEvent.VK_COMMA: + if(viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRowAndColumn(); + } + break; + + case KeyEvent.VK_Q: + if(viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(true); + } + break; + case KeyEvent.VK_M: + if(viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(false); + } + break; + + case KeyEvent.VK_F2: + viewport.cursorMode = ! viewport.cursorMode; + statusBar.setText("Keyboard editing mode is "+ + (viewport.cursorMode ? "on" : "off")); + if(viewport.cursorMode) + { + alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; + alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; + } + alignPanel.seqPanel.seqCanvas.repaint(); + break; + + case KeyEvent.VK_F: + if (evt.isControlDown()) + { + findMenuItem_actionPerformed(); + } + break; + case KeyEvent.VK_H: + { + boolean toggleSeqs = !evt.isControlDown(); + boolean toggleCols = !evt.isShiftDown(); + boolean hide = false; + SequenceGroup sg = viewport.getSelectionGroup(); + + if(toggleSeqs) + { + if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + { + hide = true; + viewport.hideAllSelectedSeqs(); + } + else if (!(toggleCols && viewport.colSel.getSelected().size() > 0)) + viewport.showAllHiddenSeqs(); + } + + if(toggleCols) + { + if (viewport.colSel.getSelected().size() > 0) + { + viewport.hideSelectedColumns(); + if(!toggleSeqs) + viewport.selectionGroup = sg; + } + else if (!hide) + viewport.showAllHiddenColumns(); + } + + alignPanel.repaint(); + break; + } + case KeyEvent.VK_PAGE_UP: + if (viewport.wrapAlignment) + alignPanel.scrollUp(true); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + - viewport.endSeq + viewport.startSeq); + break; + case KeyEvent.VK_PAGE_DOWN: + if (viewport.wrapAlignment) + alignPanel.scrollUp(false); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + + viewport.endSeq - viewport.startSeq); + break; + } + } + public void keyReleased(KeyEvent evt) + {} + public void keyTyped(KeyEvent evt) + {} + +public void itemStateChanged(ItemEvent evt) + { + if(evt.getSource()==colourTextMenuItem) + colourTextMenuItem_actionPerformed(); + else if(evt.getSource()==wrapMenuItem) + wrapMenuItem_actionPerformed(); + else if(evt.getSource()==scaleAbove) + scaleAbove_actionPerformed(); + else if(evt.getSource()==scaleLeft) + scaleLeft_actionPerformed(); + else if(evt.getSource()==scaleRight) + scaleRight_actionPerformed(); + else if(evt.getSource()==seqLimits) + seqLimits_itemStateChanged(); + else if(evt.getSource()==viewBoxesMenuItem) + viewBoxesMenuItem_actionPerformed(); + else if(evt.getSource()==viewTextMenuItem) + viewTextMenuItem_actionPerformed(); + else if(evt.getSource()==renderGapsMenuItem) + renderGapsMenuItem_actionPerformed(); + else if(evt.getSource()==annotationPanelMenuItem) + annotationPanelMenuItem_actionPerformed(); + else if(evt.getSource()==sequenceFeatures) + { + viewport.showSequenceFeatures(sequenceFeatures.getState()); + alignPanel.seqPanel.seqCanvas.repaint(); + } + else if(evt.getSource()==conservationMenuItem) + conservationMenuItem_actionPerformed(); + else if(evt.getSource()==abovePIDThreshold) + abovePIDThreshold_actionPerformed(); + else if(evt.getSource()==applyToAllGroups) + applyToAllGroups_actionPerformed(); + else if(evt.getSource()==autoCalculate) + viewport.autocalculateConsensus = autoCalculate.getState(); + } + public void actionPerformed(ActionEvent evt) + { + Object source = evt.getSource(); + + if(source==inputText) + inputText_actionPerformed(); + else if(source==loadTree) + loadTree_actionPerformed(); + else if(source==loadApplication) + launchFullApplication(); + else if(source==closeMenuItem) + closeMenuItem_actionPerformed(); + else if(source==copy) + copy_actionPerformed(); + else if(source==undoMenuItem) + undoMenuItem_actionPerformed(); + else if(source==redoMenuItem) + redoMenuItem_actionPerformed(); + else if(source==inputText) + inputText_actionPerformed(); + else if(source==closeMenuItem) + closeMenuItem_actionPerformed(); + else if(source==undoMenuItem) + undoMenuItem_actionPerformed(); + else if(source==redoMenuItem) + redoMenuItem_actionPerformed(); + else if(source==copy) + copy_actionPerformed(); + else if(source==pasteNew) + pasteNew_actionPerformed(); + else if(source==pasteThis) + pasteThis_actionPerformed(); + else if(source==cut) + cut_actionPerformed(); + else if(source==delete) + delete_actionPerformed(); + else if(source==deleteGroups) + deleteGroups_actionPerformed(); + else if(source==selectAllSequenceMenuItem) + selectAllSequenceMenuItem_actionPerformed(); + else if(source==deselectAllSequenceMenuItem) + deselectAllSequenceMenuItem_actionPerformed(); + else if(source==invertSequenceMenuItem) + invertSequenceMenuItem_actionPerformed(); + else if(source==invertColSel) + { viewport.invertColumnSelection(); alignPanel.repaint(); } + else if(source==remove2LeftMenuItem) + remove2LeftMenuItem_actionPerformed(); + else if(source==remove2RightMenuItem) + remove2RightMenuItem_actionPerformed(); + else if(source==removeGappedColumnMenuItem) + removeGappedColumnMenuItem_actionPerformed(); + else if(source==removeAllGapsMenuItem) + removeAllGapsMenuItem_actionPerformed(); + else if(source==findMenuItem) + findMenuItem_actionPerformed(); + else if(source==font) + font_actionPerformed(); + else if(source==showColumns) + { + viewport.showAllHiddenColumns(); alignPanel.repaint(); + } + else if(source==showSeqs) + { + viewport.showAllHiddenSeqs(); + } + else if(source == hideColumns) + { + viewport.hideSelectedColumns(); alignPanel.repaint(); + } + else if(source == hideSequences && viewport.getSelectionGroup()!=null) + { + viewport.hideAllSelectedSeqs(); + } + else if(source==featureSettings) + featureSettings_actionPerformed(); + else if(source==overviewMenuItem) + overviewMenuItem_actionPerformed(); + else if(source==noColourmenuItem) + noColourmenuItem_actionPerformed(); + else if(source==clustalColour) + clustalColour_actionPerformed(); + else if(source==zappoColour) + zappoColour_actionPerformed(); + else if(source==taylorColour) + taylorColour_actionPerformed(); + else if(source==hydrophobicityColour) + hydrophobicityColour_actionPerformed(); + else if(source==helixColour) + helixColour_actionPerformed(); + else if(source==strandColour) + strandColour_actionPerformed(); + else if(source==turnColour) + turnColour_actionPerformed(); + else if(source==buriedColour) + buriedColour_actionPerformed(); + else if(source==nucleotideColour) + nucleotideColour_actionPerformed(); + else if(source==modifyPID) + modifyPID_actionPerformed(); + else if(source==modifyConservation) + modifyConservation_actionPerformed(); + else if(source==userDefinedColour) + userDefinedColour_actionPerformed(); + else if(source==PIDColour) + PIDColour_actionPerformed(); + else if(source==BLOSUM62Colour) + BLOSUM62Colour_actionPerformed(); + else if(source==annotationColour) + new AnnotationColourChooser(viewport, alignPanel); + else if(source==sortPairwiseMenuItem) + sortPairwiseMenuItem_actionPerformed(); + else if(source==sortIDMenuItem) + sortIDMenuItem_actionPerformed(); + else if(source==sortGroupMenuItem) + sortGroupMenuItem_actionPerformed(); + else if(source==removeRedundancyMenuItem) + removeRedundancyMenuItem_actionPerformed(); + else if(source==pairwiseAlignmentMenuItem) + pairwiseAlignmentMenuItem_actionPerformed(); + else if(source==PCAMenuItem) + PCAMenuItem_actionPerformed(); + else if(source==averageDistanceTreeMenuItem) + averageDistanceTreeMenuItem_actionPerformed(); + else if(source==neighbourTreeMenuItem) + neighbourTreeMenuItem_actionPerformed(); + else if(source==njTreeBlosumMenuItem) + njTreeBlosumMenuItem_actionPerformed(); + else if(source==avDistanceTreeBlosumMenuItem) + avTreeBlosumMenuItem_actionPerformed(); + else if(source==documentation) + documentation_actionPerformed(); + else if(source==about) + about_actionPerformed(); + + } + + public void inputText_actionPerformed() + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500, 500); + } + protected void outputText_actionPerformed(ActionEvent e) { - CutAndPasteTransfer cap = new CutAndPasteTransfer(false); - Frame frame = new Frame(); - frame.add(cap); - jalview.bin.JalviewLite.addFrame(frame,"Alignment output - "+e.getActionCommand(),600, 500); - cap.setText( FormatAdapter.formatSequences(e.getActionCommand(), viewport.getAlignment().getSequences())); + CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, + "Alignment output - " + e.getActionCommand(), + 600, 500); + cap.setText(new AppletFormatAdapter().formatSequences(e.getActionCommand(), + viewport.getAlignment().getSequences(), + viewport.showJVSuffix)); } - public void closeMenuItem_actionPerformed(ActionEvent e) + void launchFullApplication() { - dispose(); + StringBuffer url = new StringBuffer(jalviewServletURL); + + url.append("?open="+ + appendProtocol( viewport.applet.getParameter("file") ) ); + + if(viewport.applet.getParameter("features")!=null) + { + url.append( "&features=" ); + url.append( appendProtocol( viewport.applet.getParameter("features") ) ); + } + + if(viewport.applet.getParameter("annotations")!=null) + { + url.append( "&annotations=" ); + url.append( appendProtocol( viewport.applet.getParameter("annotations") ) ); + } + + if(viewport.applet.getParameter("jnetfile")!=null) + { + url.append( "&annotations=" ); + url.append( appendProtocol( viewport.applet.getParameter("jnetfile") ) ); + } + + if(viewport.applet.getParameter("defaultColour")!=null) + { + url.append("&colour=" + + removeWhiteSpace(viewport.applet.getParameter("defaultColour")) + ); + } + + if(viewport.applet.getParameter("userDefinedColour")!=null) + { + url.append( "&colour=" + + removeWhiteSpace( viewport.applet.getParameter("userDefinedColour") ) + ); + } + + showURL(url.toString(), "FULL_APP"); + } + + + String removeWhiteSpace(String colour) + { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < colour.length(); i++) + { + if (Character.isWhitespace(colour.charAt(i))) + sb.append("%20"); + else + sb.append(colour.charAt(i)); + } + + return sb.toString(); + } + + + String appendProtocol(String url) + { + try{ + new URL(url); + }catch(java.net.MalformedURLException ex) + { + url = viewport.applet.getCodeBase()+url; + } + return url; + } + + public void closeMenuItem_actionPerformed() + { + PaintRefresher.components.remove(viewport.alignment); + if(PaintRefresher.components.size()==0 && viewport.applet==null) + System.exit(0); + + this.dispose(); } Stack historyList = new Stack(); @@ -75,24 +668,24 @@ public class AlignFrame extends GAlignFrame void updateEditMenuBar() { - if(historyList.size()>0) - { - undoMenuItem.setEnabled(true); - Object [] history = (Object[])historyList.elementAt(0); - undoMenuItem.setLabel("Undo "+history[0]); - } + if (historyList.size() > 0) + { + undoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem) historyList.peek(); + undoMenuItem.setLabel("Undo " + hi.getDescription()); + } else { undoMenuItem.setEnabled(false); undoMenuItem.setLabel("Undo"); } - if(redoList.size()>0) - { - redoMenuItem.setEnabled(true); - Object [] history = (Object[])redoList.elementAt(0); - redoMenuItem.setLabel("Redo "+history[0]); - } + if (redoList.size() > 0) + { + redoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem) redoList.peek(); + redoMenuItem.setLabel("Redo " + hi.getDescription()); + } else { redoMenuItem.setEnabled(false); @@ -100,67 +693,68 @@ public class AlignFrame extends GAlignFrame } } - public void addHistoryItem(String type) + public void addHistoryItem(HistoryItem hi) { - // must make sure we add new sequence objects her, not refs to the existing sequences + historyList.push(hi); redoList.removeAllElements(); - SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()]; - for(int i=0; i -1; i--) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.sequences.contains(seq)) + if (!sg.getSequences(true).contains(seq)) + { continue; + } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.sequences.contains(temp)) + if (sg.getSequences(true).contains(temp)) + { continue; + } viewport.alignment.getSequences().setElementAt(temp, i); viewport.alignment.getSequences().setElementAt(seq, i + 1); @@ -186,43 +784,117 @@ public class AlignFrame extends GAlignFrame alignPanel.repaint(); } - - StringBuffer copiedSequences; - protected void copy_actionPerformed(ActionEvent e) + static StringBuffer copiedSequences; + static Vector copiedHiddenColumns; + protected void copy_actionPerformed() { - if(viewport.getSelectionGroup()==null) - return; + if (viewport.getSelectionGroup() == null) + { + return; + } - SequenceGroup sg = viewport.getSelectionGroup(); - copiedSequences = new StringBuffer(); + SequenceGroup sg = viewport.getSelectionGroup(); + copiedSequences = new StringBuffer(); + Hashtable orderedSeqs = new Hashtable(); + for (int i = 0; i < sg.getSize(false); i++) + { + SequenceI seq = sg.getSequenceAt(i); + int index = viewport.alignment.findIndex(seq); + orderedSeqs.put(index + "", seq); + } - for(int i=0; i0) + { + endRes += seq.getStart() -1; + } + + copiedSequences.append(seq.getName() + "\t" + + startRes + "\t" + + endRes + "\t" + + seq.getSequence(sg.getStartRes(), + sg.getEndRes() + 1) + "\n"); + } + + } + + protected void pasteNew_actionPerformed() { paste(true); } - protected void pasteThis_actionPerformed(ActionEvent e) + protected void pasteThis_actionPerformed() { - addHistoryItem("Paste"); + addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, + HistoryItem.PASTE)); paste(false); } void paste(boolean newAlignment) { - try{ + try + { if (copiedSequences == null) + { return; + } StringTokenizer st = new StringTokenizer(copiedSequences.toString()); Vector seqs = new Vector(); @@ -231,96 +903,127 @@ public class AlignFrame extends GAlignFrame String name = st.nextToken(); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); - Sequence sequence = new Sequence(name,st.nextToken(), start, end); + Sequence sequence = new Sequence(name, st.nextToken(), start, end); - if(!newAlignment) + if (!newAlignment) + { viewport.alignment.addSequence(sequence); + } else + { seqs.addElement(sequence); + } } - if(newAlignment) + if (newAlignment) { SequenceI[] newSeqs = new SequenceI[seqs.size()]; - for(int i=0; i 0) { + HistoryItem edit; + addHistoryItem(edit=new HistoryItem("Remove Left", viewport.alignment, + HistoryItem.HIDE)); int min = colSel.getMin(); viewport.getAlignment().trimLeft(min); - colSel.compensateForEdit(0,min); - - if(viewport.getSelectionGroup()!=null) + colSel.compensateForEdit(0, min); + edit.addShift(0, min); + if (viewport.getSelectionGroup() != null) + { viewport.getSelectionGroup().adjustForRemoveLeft(min); + } Vector groups = viewport.alignment.getGroups(); - for(int i=0; i 0) { + addHistoryItem(new HistoryItem("Remove Right", viewport.alignment, + HistoryItem.HIDE)); int max = colSel.getMax(); viewport.getAlignment().trimRight(max); - if(viewport.getSelectionGroup()!=null) + + if (viewport.getSelectionGroup() != null) + { viewport.getSelectionGroup().adjustForRemoveRight(max); + } Vector groups = viewport.alignment.getGroups(); - for(int i=0; i