X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=c1d1087e7d00d229e956fb31dcef051d2ba02fca;hb=c576f80cb43caf7576464dffd80f3856b15c9f27;hp=77f1e41410393b164d685834f770a14d092aa079;hpb=e61219eaa31557203fa518aa03cba2cc651e1b84;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 77f1e41..c1d1087 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -33,10 +33,11 @@ import jalview.datamodel.*; import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; -import jalview.util.ShiftList; +import jalview.commands.*; import jalview.ws.*; import java.awt.dnd.*; -import org.biojava.dasobert.eventmodel.*; +import javax.swing.event.ChangeListener; +import javax.swing.event.ChangeEvent; /** * DOCUMENT ME! @@ -44,8 +45,7 @@ import org.biojava.dasobert.eventmodel.*; * @author $author$ * @version $Revision$ */ -public class AlignFrame - extends GAlignFrame implements DropTargetListener, FeatureListener +public class AlignFrame extends GAlignFrame implements DropTargetListener { /** DOCUMENT ME!! */ public static final int DEFAULT_WIDTH = 700; @@ -53,17 +53,17 @@ public class AlignFrame /** DOCUMENT ME!! */ public static final int DEFAULT_HEIGHT = 500; public AlignmentPanel alignPanel; - AlignViewport viewport; + AlignViewport viewport; Vector alignPanels = new Vector(); /** DOCUMENT ME!! */ - public String currentFileFormat = null; - Stack historyList = new Stack(); - Stack redoList = new Stack(); - private int treeCount = 0; + String currentFileFormat = null; + + String fileName = null; + /** * Creates a new AlignFrame object. @@ -94,7 +94,7 @@ public class AlignFrame al.setDataset(null); } - addAlignmentPanel(alignPanel); + addAlignmentPanel(alignPanel, true); init(); } @@ -107,7 +107,7 @@ public class AlignFrame { viewport = ap.av; alignPanel = ap; - addAlignmentPanel(ap); + addAlignmentPanel(ap, false); init(); } @@ -115,15 +115,14 @@ public class AlignFrame { this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); - if (viewport.hconsensus == null) + if (viewport.conservation == null) { - //Out of memory calculating consensus. BLOSUM62Colour.setEnabled(false); - PIDColour.setEnabled(false); conservationMenuItem.setEnabled(false); modifyConservation.setEnabled(false); - abovePIDThreshold.setEnabled(false); - modifyPID.setEnabled(false); + // PIDColour.setEnabled(false); + // abovePIDThreshold.setEnabled(false); + // modifyPID.setEnabled(false); } String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort"); @@ -139,18 +138,26 @@ public class AlignFrame setGUINucleotide(viewport.alignment.isNucleotide()); } - if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) + setMenusFromViewport(viewport); + + if (viewport.wrapAlignment) { - wrapMenuItem.setSelected(true); wrapMenuItem_actionPerformed(null); } addKeyListener(); + + } + + public void setFileName(String file, String format) + { + fileName = file; + currentFileFormat = format; + reload.setEnabled(true); } void addKeyListener() { - final AlignFrame af = this; addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) @@ -164,47 +171,6 @@ public class AlignFrame switch (evt.getKeyCode()) { - case KeyEvent.VK_V: - if (!evt.isControlDown()) - { - AlignmentI al; - if(viewport.hasHiddenRows) - { - al = viewport.alignment.getHiddenSequences().getFullAlignment(); - } - else - al = new Alignment(viewport.alignment.getSequencesArray()); - - AlignViewport newview = new AlignViewport(al); - - AlignmentPanel copy = new AlignmentPanel(af, newview); - - if(viewport.viewName==null) - viewport.viewName="View 1"; - - copy.av.sequenceSetID = viewport.getSequenceSetId(); - copy.av.viewName = "View " + - (Desktop.getViewCount(viewport.getSequenceSetId())+1); - - - addAlignmentPanel(copy); - PaintRefresher.Register(copy, viewport.getSequenceSetId()); - PaintRefresher.Register(alignPanel, - viewport.getSequenceSetId()); - - } - break; - case KeyEvent.VK_G: - Desktop.instance.gatherViews(af); - break; - - case KeyEvent.VK_X: - if (!evt.isControlDown()) - { - Desktop.instance.explodeViews(af); - } - break; - case 27: // escape key deselectAllSequenceMenuItem_actionPerformed(null); @@ -382,21 +348,24 @@ public class AlignFrame viewport.startSeq + viewport.endSeq - viewport.startSeq); break; - - } } }); } - public void addAlignmentPanel(final AlignmentPanel ap) + public void addAlignmentPanel(final AlignmentPanel ap, + boolean newPanel) { + ap.alignFrame = this; + alignPanels.addElement(ap); + PaintRefresher.Register(ap, ap.av.getSequenceSetId()); + int aSize = alignPanels.size(); - tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); + tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); if (aSize == 1 && ap.av.viewName==null) { @@ -406,31 +375,34 @@ public class AlignFrame { if (aSize == 2) { - AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); - tabbedPane.addTab(first.av.viewName==null?"Original":first.av.viewName,first); - - this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + setInitialTabVisible(); } - tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); - } + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.addTab(ap.av.viewName, ap); + ap.setVisible(false); + } - ap.av.addPropertyChangeListener(new PropertyChangeListener() + if(newPanel) { - public void propertyChange(PropertyChangeEvent evt) - { - if (evt.getPropertyName().equals("alignment")) - { - PaintRefresher.Refresh(ap, ap.av.getSequenceSetId()); - alignmentChanged(); - } - } - }); - + if (ap.av.padGaps) + ap.av.alignment.padGaps(); + ap.av.updateConservation(ap); + ap.av.updateConsensus(ap); + } } - + public void setInitialTabVisible() + { + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.setVisible(true); + AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); + tabbedPane.addTab(first.av.viewName,first); + this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + } public AlignViewport getViewport() @@ -466,7 +438,7 @@ public class AlignFrame { // System.out.println("deregistering discoverer listener"); Desktop.discoverer.removePropertyChangeListener(thisListener); - closeMenuItem_actionPerformed(null); + closeMenuItem_actionPerformed(true); } ; }); @@ -475,10 +447,8 @@ public class AlignFrame public void setGUINucleotide(boolean nucleotide) { showTranslation.setVisible( nucleotide ); - //sequenceFeatures.setVisible(!nucleotide ); - //featureSettings.setVisible( !nucleotide ); - conservationMenuItem.setVisible( !nucleotide ); - modifyConservation.setVisible( !nucleotide ); + conservationMenuItem.setEnabled( !nucleotide ); + modifyConservation.setEnabled( !nucleotide ); //Remember AlignFrame always starts as protein if(!nucleotide) @@ -487,18 +457,36 @@ public class AlignFrame } } - public void comeBackLater(FeatureEvent evt) - {} - - public void newFeatures(FeatureEvent evt) + /** + * Need to call this method when tabs are selected for multiple views, + * or when loading from Jalview2XML.java + * @param av AlignViewport + */ + void setMenusFromViewport(AlignViewport av) { - if (evt.getFeatures().length > 0) - { - alignPanel.seqPanel.seqCanvas.fr.featuresAdded(); - alignPanel.repaint(); - } + padGapsMenuitem.setSelected(av.padGaps); + colourTextMenuItem.setSelected(av.showColourText); + abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); + conservationMenuItem.setSelected(av.getConservationSelected()); + seqLimits.setSelected(av.getShowJVSuffix()); + idRightAlign.setSelected(av.rightAlignIds); + renderGapsMenuItem.setSelected(av.renderGaps); + wrapMenuItem.setSelected(av.wrapAlignment); + annotationPanelMenuItem.setState(av.showAnnotation); + viewBoxesMenuItem.setSelected(av.showBoxes); + viewTextMenuItem.setSelected(av.showText); + + setColourSelected(ColourSchemeProperty. + getColourName(av.getGlobalColourScheme())); + + showSeqFeatures.setSelected(av.showSequenceFeatures); + hiddenMarkers.setState(av.showHiddenMarkers); + applyToAllGroups.setState(av.colourAppliesToAllGroups); + + updateEditMenuBar(); } + Hashtable progressBars; public void setProgressBar(String message, long id) { @@ -538,6 +526,8 @@ public class AlignFrame } + + /* Added so Castor Mapping file can obtain Jalview Version */ @@ -562,6 +552,59 @@ public class AlignFrame Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport); } + public void reload_actionPerformed(ActionEvent e) + { + if(fileName!=null) + { + if(currentFileFormat.equals("Jalview")) + { + JInternalFrame [] frames = Desktop.desktop.getAllFrames(); + for(int i=0; i 0) + { + viewport.alignment.deleteSequence(0); + } + + viewport.historyList.clear(); + viewport.redoList.clear(); + Alignment dset = viewport.alignment.getDataset(); + while (dset.getHeight() > 0) + { + dset.deleteSequence(0); + } + + firePropertyChange("Alignment", null, null); + + updateEditMenuBar(); + } + + FileLoader loader = new FileLoader(); + String protocol = fileName.startsWith("http:")? "URL":"File"; + loader.LoadFile(viewport, fileName, protocol, currentFileFormat); + + } + } + + public void addFromText_actionPerformed(ActionEvent e) { Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport); @@ -572,12 +615,21 @@ public class AlignFrame Desktop.instance.inputURLMenuItem_actionPerformed(viewport); } + + public void save_actionPerformed(ActionEvent e) + { + if(fileName==null || currentFileFormat==null) + saveAs_actionPerformed(null); + else + saveAlignment(fileName, currentFileFormat); + } + /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ - public void saveAlignmentMenu_actionPerformed(ActionEvent e) + public void saveAs_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. getProperty( "LAST_DIRECTORY"), @@ -598,7 +650,6 @@ public class AlignFrame if (value == JalviewFileChooser.APPROVE_OPTION) { currentFileFormat = chooser.getSelectedFormat(); - if (currentFileFormat == null) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -609,13 +660,14 @@ public class AlignFrame return; } + fileName = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", currentFileFormat); - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", fileName); - saveAlignment(choice, currentFileFormat); + saveAlignment(fileName, currentFileFormat); } } @@ -633,6 +685,11 @@ public class AlignFrame new Jalview2XML().SaveAlignment(this, file, shortName); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); + + // USE Jalview2XML to save this file return true; } @@ -671,6 +728,9 @@ public class AlignFrame out.print(output); out.close(); this.setTitle(file); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); return true; } catch (Exception ex) @@ -705,6 +765,7 @@ public class AlignFrame } CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); @@ -807,22 +868,50 @@ public class AlignFrame * * @param e DOCUMENT ME! */ - public void closeMenuItem_actionPerformed(ActionEvent e) + public void closeMenuItem_actionPerformed(boolean closeAllTabs) { + if(alignPanels!=null && alignPanels.size()<2) + closeAllTabs = true; + try { - for(int i=0; i 0) + + if (viewport.historyList.size() > 0) { undoMenuItem.setEnabled(true); - - HistoryItem hi = (HistoryItem) historyList.peek(); - undoMenuItem.setText("Undo " + hi.getDescription()); + CommandI command = (CommandI) viewport.historyList.peek(); + undoMenuItem.setText("Undo " + command.getDescription()); } else { @@ -845,32 +934,34 @@ public class AlignFrame undoMenuItem.setText("Undo"); } - if (redoList.size() > 0) + if (viewport.redoList.size() > 0) { redoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem) redoList.peek(); - redoMenuItem.setText("Redo " + hi.getDescription()); + CommandI command = (CommandI) viewport.redoList.peek(); + redoMenuItem.setText("Redo " + command.getDescription()); } else { redoMenuItem.setEnabled(false); redoMenuItem.setText("Redo"); - }*/ + } } - /** - * DOCUMENT ME! - * - * @param hi DOCUMENT ME! - */ - public void addHistoryItem(HistoryItem hi) + + public void addHistoryItem(CommandI command) { - historyList.push(hi); - redoList.clear(); - updateEditMenuBar(); + if(command.getSize()>0) + { + viewport.historyList.push(command); + viewport.redoList.clear(); + updateEditMenuBar(); + viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + } } + + /** * DOCUMENT ME! * @@ -878,13 +969,15 @@ public class AlignFrame */ protected void undoMenuItem_actionPerformed(ActionEvent e) { - HistoryItem nh,hi = (HistoryItem) historyList.pop(); - redoList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); - if (hi.alColumnChanges!=null) - nh.alColumnChanges = hi.alColumnChanges.getInverse(); - restoreHistoryItem(hi); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + CommandI command = (CommandI)viewport.historyList.pop(); + viewport.redoList.push(command); + command.undoCommand(); + + AlignViewport originalSource = getOriginatingSource(command); + + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + updateEditMenuBar(); + originalSource.firePropertyChange("alignment", null,viewport.getAlignment().getSequences()); } /** @@ -894,26 +987,42 @@ public class AlignFrame */ protected void redoMenuItem_actionPerformed(ActionEvent e) { - HistoryItem nh,hi = (HistoryItem) redoList.pop(); - historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); - if (hi.alColumnChanges!=null) - nh.alColumnChanges=hi.alColumnChanges.getInverse(); - restoreHistoryItem(hi); - updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - } - - // used by undo and redo - void restoreHistoryItem(HistoryItem hi) - { + CommandI command = (CommandI) viewport.redoList.pop(); + viewport.historyList.push(command); + command.doCommand(); - hi.restore(viewport.getColumnSelection()); + AlignViewport originalSource = getOriginatingSource(command); + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; updateEditMenuBar(); + originalSource.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + } - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + AlignViewport getOriginatingSource(CommandI command) + { + AlignViewport originalSource = viewport; + //For sequence removal and addition, we need to fire + //the property change event FROM the viewport where the + //original alignment was altered + if (command instanceof EditCommand) + { + EditCommand editCommand = (EditCommand) command; + AlignmentI al = editCommand.getAlignment(); + Vector comps = (Vector) PaintRefresher.components + .get(viewport.getSequenceSetId()); + for (int i = 0; i < comps.size(); i++) + { + if (comps.elementAt(i) instanceof AlignmentPanel) + { + if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment) + { + originalSource = ( (AlignmentPanel) comps.elementAt(i)).av; + break; + } + } + } + } + return originalSource; } /** @@ -1077,8 +1186,6 @@ public class AlignFrame */ protected void pasteThis_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, - HistoryItem.PASTE)); paste(false); } @@ -1158,18 +1265,28 @@ public class AlignFrame alignment = viewport.getAlignment(); //!newAlignment + SequenceI [] newseqs = new SequenceI[sequences.length]; for (int i = 0; i < sequences.length; i++) { - Sequence newseq = new Sequence(sequences[i].getName(), + newseqs[i] = new Sequence(sequences[i].getName(), sequences[i].getSequence(), sequences[i].getStart(), sequences[i].getEnd()); - alignment.addSequence(newseq); - PaintRefresher.Refresh(alignPanel, - alignPanel.av.getSequenceSetId(), - null,newseq); + alignment.addSequence(newseqs[i]); } + /* + //ADD HISTORY ITEM + */ + addHistoryItem(new EditCommand( + "Add sequences", + EditCommand.PASTE, + newseqs, + 0, + alignment.getWidth(), + alignment) + ); + viewport.setEndSeq(alignment.getHeight()); alignment.getWidth(); @@ -1270,46 +1387,47 @@ public class AlignFrame * * @param e DOCUMENT ME! */ - protected void delete_actionPerformed(ActionEvent e) + protected void delete_actionPerformed(ActionEvent evt) { - if (viewport.getSelectionGroup() == null) + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg == null) { return; } - - SequenceGroup sg = viewport.getSelectionGroup(); + Vector seqs = new Vector(); + SequenceI seq; + for (int i = 0; i < sg.getSize(false); i++) + { + seq = sg.getSequenceAt(i); + seqs.addElement(seq); + } - addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, - HistoryItem.HIDE)); + // If the cut affects all sequences, remove highlighted columns + if (sg.getSize(false) == viewport.alignment.getHeight()) + { + viewport.getColumnSelection().removeElements(sg.getStartRes(), + sg.getEndRes() + 1); + } - for (int i = 0; i < sg.getSize(false); i++) - { - SequenceI seq = sg.getSequenceAt(i); - int index = viewport.getAlignment().findIndex(seq); + SequenceI [] cut = 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); - edit.addShift(0,min); - if (viewport.getSelectionGroup() != null) - { - viewport.getSelectionGroup().adjustForRemoveLeft(min); - } - - Vector groups = viewport.alignment.getGroups(); - - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.get(i); - - if (!sg.adjustForRemoveLeft(min)) - { - viewport.alignment.deleteGroup(sg); - } - } - - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - } + trimAlignment(true); } /** @@ -1465,21 +1552,55 @@ public class AlignFrame */ public void remove2RightMenuItem_actionPerformed(ActionEvent e) { + trimAlignment(false); + } + + void trimAlignment(boolean trimLeft) + { ColumnSelection colSel = viewport.getColumnSelection(); + int column; if (colSel.size() > 0) { - addHistoryItem(new HistoryItem("Remove Right", viewport.alignment, - HistoryItem.HIDE)); + if(trimLeft) + column = colSel.getMin(); + else + column = colSel.getMax(); - int max = colSel.getMax(); - viewport.getAlignment().trimRight(max); - // TODO: delete hidden column entries in colSel to right of max - // TODO: record hidden columns in history for undo. - if (viewport.getSelectionGroup() != null) + SequenceI [] seqs; + if(viewport.getSelectionGroup()!=null) + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + else + seqs = viewport.alignment.getSequencesArray(); + + + TrimRegionCommand trimRegion; + if(trimLeft) { - viewport.getSelectionGroup().adjustForRemoveRight(max); + trimRegion = new TrimRegionCommand("Remove Left", + TrimRegionCommand.TRIM_LEFT, + seqs, + column, + viewport.alignment, + viewport.colSel, + viewport.selectionGroup); + viewport.setStartRes(0); } + else + { + trimRegion = new TrimRegionCommand("Remove Right", + TrimRegionCommand.TRIM_RIGHT, + seqs, + column, + viewport.alignment, + viewport.colSel, + viewport.selectionGroup); + } + + statusBar.setText("Removed "+trimRegion.getSize()+" columns."); + + + addHistoryItem(trimRegion); Vector groups = viewport.alignment.getGroups(); @@ -1487,13 +1608,15 @@ public class AlignFrame { SequenceGroup sg = (SequenceGroup) groups.get(i); - if (!sg.adjustForRemoveRight(max)) + if ( (trimLeft && !sg.adjustForRemoveLeft(column)) + || (!trimLeft && !sg.adjustForRemoveRight(column))) { viewport.alignment.deleteGroup(sg); } } - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } } @@ -1504,20 +1627,39 @@ public class AlignFrame */ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - HistoryItem edit; - addHistoryItem(edit=new HistoryItem("Remove Gapped Columns", - viewport.alignment, HistoryItem.HIDE)); + int start = 0, end = viewport.alignment.getWidth()-1; + + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + start = viewport.getSelectionGroup().getStartRes(); + end = viewport.getSelectionGroup().getEndRes(); + } + else + seqs = viewport.alignment.getSequencesArray(); + + + RemoveGapColCommand removeGapCols = + new RemoveGapColCommand("Remove Gapped Columns", + seqs, + start, end, + viewport.getGapCharacter()); + + addHistoryItem(removeGapCols); + + statusBar.setText("Removed "+removeGapCols.getSize()+" empty columns."); //This is to maintain viewport position on first residue //of first sequence SequenceI seq = viewport.alignment.getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); - ShiftList shifts; - viewport.getAlignment().removeGaps(shifts=new ShiftList()); - edit.alColumnChanges=shifts.getInverse(); - if (viewport.hasHiddenColumns) - viewport.getColumnSelection().compensateForEdits(shifts); - viewport.setStartRes(seq.findIndex(startRes)-1); + // ShiftList shifts; + // viewport.getAlignment().removeGaps(shifts=new ShiftList()); + // edit.alColumnChanges=shifts.getInverse(); + // if (viewport.hasHiddenColumns) + // viewport.getColumnSelection().compensateForEdits(shifts); + viewport.setStartRes(seq.findIndex(startRes)-1); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); } @@ -1529,71 +1671,27 @@ public class AlignFrame */ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - // TODO: hidden regions should not be touched by removeAllGaps - a minimal number of gaps will remain in alignment segments containing uneven length subsequences - // TODO: columnSelection.compensateforedits should be called (and passed to history item) - addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment, - HistoryItem.HIDE)); + int start = 0, end = viewport.alignment.getWidth()-1; + + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + start = viewport.getSelectionGroup().getStartRes(); + end = viewport.getSelectionGroup().getEndRes(); + } + else + seqs = viewport.alignment.getSequencesArray(); //This is to maintain viewport position on first residue //of first sequence SequenceI seq = viewport.alignment.getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); - - SequenceI current; - - Vector seqs = null; - - int start = 0; - int end = viewport.alignment.getWidth(); - - if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSequences(true) != null - && viewport.getSelectionGroup().getSize(true) > 0) - { - seqs = viewport.getSelectionGroup().getSequences(true); - start = viewport.getSelectionGroup().getStartRes(); - end = viewport.getSelectionGroup().getEndRes()+1; - } - else - { - seqs = viewport.alignment.getSequences(); - } - /* Commented out regions below are partial implementation of todo above. - * divide start,end into visible chunks, and for each: - int diff=end-start+1; - int diffmax=0; - int dr[] = new int[seqs.size()]; - */ - for (int i = 0; i < seqs.size(); i++) - { - current = (SequenceI) seqs.elementAt(i); - //dr[i]= - current.removeGaps(start, end); - /*if (d0) { - // record shift for history. - editgaps.addShift(start, diff); - if (viewport.hasHiddenColumns && diffmax>diff) { - // pad sequence - StringBuffer gaps=new StringBuffer(diffmax); - for (int i=0,j=diffmax-diff; i0) { - String sq = current.getSequence(); - current.setSequence(sq.substring(0, hcend-dr[i])+gaps.substring(0, dr[i]-diff)+sq.substring()); - } - } - } - }*/ + addHistoryItem(new RemoveGapsCommand("Remove Gaps", + seqs, + start, end, + viewport.getGapCharacter())); viewport.setStartRes(seq.findIndex(startRes)-1); @@ -1601,76 +1699,6 @@ public class AlignFrame } - public void alignmentChanged() - { - AlignViewport av; - AlignmentPanel ap; - - for(int i=0; i