X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=8fafb342fcf10addc73a5bd139e3a9e3722e1eb3;hb=d8c50265e5b07fe9a5565f6079f716cae81afe01;hp=4687b3c48748e117eb1b4cd7275d9b7baf447fd9;hpb=75c30f2d281938dd7b78bbf5dd28bef31fd19a70;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 4687b3c..8fafb34 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 javax.swing.event.ChangeListener; +import javax.swing.event.ChangeEvent; /** * DOCUMENT ME! @@ -52,16 +53,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener /** 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(); + String currentFileFormat = null; + + String fileName = null; + private int treeCount = 0; /** @@ -93,7 +95,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener al.setDataset(null); } - addAlignmentPanel(alignPanel); + addAlignmentPanel(alignPanel, true); init(); } @@ -106,7 +108,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { viewport = ap.av; alignPanel = ap; - addAlignmentPanel(ap); + addAlignmentPanel(ap, false); init(); } @@ -137,18 +139,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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) @@ -162,47 +172,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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); @@ -380,21 +349,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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) { @@ -410,30 +382,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener this.getContentPane().add(tabbedPane, BorderLayout.CENTER); } + expandViews.setEnabled(true); + gatherViews.setEnabled(true); tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); - } - - ap.av.updateConsensus(ap); - ap.av.updateConservation(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 AlignViewport getViewport() { return viewport; @@ -467,7 +432,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { // System.out.println("deregistering discoverer listener"); Desktop.discoverer.removePropertyChangeListener(thisListener); - closeMenuItem_actionPerformed(null); + closeMenuItem_actionPerformed(true); } ; }); @@ -476,10 +441,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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) @@ -488,6 +451,35 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } + /** + * 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) + { + padGapsMenuitem.setSelected(av.padGaps); + colourTextMenuItem.setSelected(av.showColourText); + abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); + conservationMenuItem.setSelected(av.getConservationSelected()); + seqLimits.setSelected(av.getShowJVSuffix()); + idRightAlign.setSelected(av.idsAlignRight); + 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) @@ -554,6 +546,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport); } + public void reload_actionPerformed(ActionEvent e) + { + if(fileName!=null) + { + if(currentFileFormat.equals("Jalview")) + { + this.closeMenuItem_actionPerformed(true); + } + else + { + viewport.alignment.deleteAllGroups(); + viewport.sequenceColours=null; + while (viewport.alignment.getHeight() > 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); @@ -564,12 +594,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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"), @@ -590,7 +629,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (value == JalviewFileChooser.APPROVE_OPTION) { currentFileFormat = chooser.getSelectedFormat(); - if (currentFileFormat == null) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -601,13 +639,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener 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); } } @@ -625,6 +664,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener new Jalview2XML().SaveAlignment(this, file, shortName); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); + + // USE Jalview2XML to save this file return true; } @@ -663,6 +707,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener out.print(output); out.close(); this.setTitle(file); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); return true; } catch (Exception ex) @@ -697,6 +744,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); @@ -799,22 +847,49 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * * @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); - - CommandI command = (CommandI) historyList.peek(); + CommandI command = (CommandI) viewport.historyList.peek(); undoMenuItem.setText("Undo " + command.getDescription()); } else @@ -837,11 +912,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener undoMenuItem.setText("Undo"); } - if (redoList.size() > 0) + if (viewport.redoList.size() > 0) { redoMenuItem.setEnabled(true); - CommandI command = (CommandI) redoList.peek(); + CommandI command = (CommandI) viewport.redoList.peek(); redoMenuItem.setText("Redo " + command.getDescription()); } else @@ -854,11 +929,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void addHistoryItem(CommandI command) { - historyList.push(command); - redoList.clear(); - updateEditMenuBar(); - - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + if(command.getSize()>0) + { + viewport.historyList.push(command); + viewport.redoList.clear(); + updateEditMenuBar(); + viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + } } @@ -870,19 +947,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void undoMenuItem_actionPerformed(ActionEvent e) { - CommandI command = (CommandI)historyList.pop(); - redoList.push(command); + CommandI command = (CommandI)viewport.historyList.pop(); + viewport.redoList.push(command); command.undoCommand(); - // 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.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; - updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + AlignViewport originalSource = getOriginatingSource(command); + + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + updateEditMenuBar(); + originalSource.firePropertyChange("alignment", null,null); } /** @@ -892,21 +965,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void redoMenuItem_actionPerformed(ActionEvent e) { - CommandI command = (CommandI) redoList.pop(); - historyList.push(command); + CommandI command = (CommandI) viewport.redoList.pop(); + viewport.historyList.push(command); command.doCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; - - // 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); + + AlignViewport originalSource = getOriginatingSource(command); + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null, null); } + 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; + } /** * DOCUMENT ME! @@ -1156,12 +1251,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener sequences[i].getEnd()); alignment.addSequence(newseqs[i]); - PaintRefresher.Refresh(alignPanel, - alignPanel.av.getSequenceSetId(), - null,newseqs[i]); } - /* //ADD HISTORY ITEM */ @@ -1274,7 +1365,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * * @param e DOCUMENT ME! */ - protected void delete_actionPerformed(ActionEvent e) + protected void delete_actionPerformed(ActionEvent evt) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -1284,19 +1375,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } Vector seqs = new Vector(); - int cutLength = sg.getEndRes()-sg.getStartRes()+1; SequenceI seq; for (int i = 0; i < sg.getSize(false); i++) { seq = sg.getSequenceAt(i); seqs.addElement(seq); - if(seq.getLength()<=cutLength) - PaintRefresher.Refresh(alignPanel, - alignPanel.av.getSequenceSetId(), - seq, - null); } + // If the cut affects all sequences, remove highlighted columns if (sg.getSize(false) == viewport.alignment.getHeight()) { @@ -1320,6 +1406,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener sg.getEndRes()-sg.getStartRes()+1, viewport.alignment)); + viewport.setSelectionGroup(null); viewport.alignment.deleteGroup(sg); @@ -1346,6 +1433,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener protected void deleteGroups_actionPerformed(ActionEvent e) { viewport.alignment.deleteAllGroups(); + viewport.sequenceColours.clear(); viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.repaint(); @@ -1390,7 +1478,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; alignPanel.repaint(); - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } /** @@ -1415,7 +1503,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false); } - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } public void invertColSel_actionPerformed(ActionEvent e) @@ -1474,6 +1562,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.alignment, viewport.colSel, viewport.selectionGroup); + viewport.setStartRes(0); } else { @@ -1486,6 +1575,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.selectionGroup); } + statusBar.setText("Removed "+trimRegion.getSize()+" columns."); + + addHistoryItem(trimRegion); Vector groups = viewport.alignment.getGroups(); @@ -1501,7 +1593,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } } @@ -1512,7 +1605,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth(); + int start = 0, end = viewport.alignment.getWidth()-1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) @@ -1525,10 +1618,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener seqs = viewport.alignment.getSequencesArray(); - addHistoryItem(new RemoveGapColCommand("Remove Gapped Columns", - seqs, - start, end, - viewport.getGapCharacter())); + 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 @@ -1551,7 +1649,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - int start = 0, end = viewport.alignment.getWidth(); + int start = 0, end = viewport.alignment.getWidth()-1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) @@ -1579,77 +1677,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } - public void alignmentChanged() - { - AlignViewport av; - AlignmentPanel ap; - - for(int i=0; i