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!
* @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;
/** 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.
al.setDataset(null);
}
- addAlignmentPanel(alignPanel);
+ addAlignmentPanel(alignPanel, true);
init();
}
{
viewport = ap.av;
alignPanel = ap;
- addAlignmentPanel(ap);
+ addAlignmentPanel(ap, false);
init();
}
{
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");
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)
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);
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)
{
{
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()
{
// System.out.println("deregistering discoverer listener");
Desktop.discoverer.removePropertyChangeListener(thisListener);
- closeMenuItem_actionPerformed(null);
+ closeMenuItem_actionPerformed(true);
}
;
});
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)
}
}
- 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)
{
}
+
+
/*
Added so Castor Mapping file can obtain Jalview Version
*/
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<frames.length; i++)
+ {
+ if (frames[i] instanceof AlignFrame
+ && frames[i] != this
+ && ( (AlignFrame) frames[i]).fileName.equals(fileName))
+ {
+ try{
+ frames[i].setSelected(true);
+ Desktop.instance.closeAssociatedWindows();
+ }catch(java.beans.PropertyVetoException ex){}
+ }
+
+ }
+ Desktop.instance.closeAssociatedWindows();
+
+ }
+ 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, viewport.alignment.getSequences());
+
+ 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);
Desktop.instance.inputURLMenuItem_actionPerformed(viewport);
}
+
+ public void save_actionPerformed(ActionEvent e)
+ {
+ if(fileName==null
+ || currentFileFormat==null
+ || fileName.startsWith("http")
+ )
+ 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"),
if (value == JalviewFileChooser.APPROVE_OPTION)
{
currentFileFormat = chooser.getSelectedFormat();
-
if (currentFileFormat == null)
{
JOptionPane.showInternalMessageDialog(Desktop.desktop,
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);
}
}
public boolean saveAlignment(String file, String format)
{
+ boolean success = true;
+
if (format.equalsIgnoreCase("Jalview"))
{
String shortName = title;
java.io.File.separatorChar) + 1);
}
- new Jalview2XML().SaveAlignment(this, file, shortName);
+ success = new Jalview2XML().SaveAlignment(this, file, shortName);
+
+ statusBar.setText("Successfully saved to file: "
+ +fileName+" in "
+ +format +" format.");
- // USE Jalview2XML to save this file
- return true;
}
else
{
if (output == null)
{
- return false;
- }
-
- try
- {
- java.io.PrintWriter out = new java.io.PrintWriter(
- new java.io.FileWriter(file));
-
- out.print(output);
- out.close();
- this.setTitle(file);
- return true;
+ success = false;
}
- catch (Exception ex)
+ else
{
- ex.printStackTrace();
+ try
+ {
+ java.io.PrintWriter out = new java.io.PrintWriter(
+ new java.io.FileWriter(file));
+
+ out.print(output);
+ out.close();
+ this.setTitle(file);
+ statusBar.setText("Successfully saved to file: "
+ + fileName + " in "
+ + format + " format.");
+ }
+ catch (Exception ex)
+ {
+ success = false;
+ ex.printStackTrace();
+ }
}
}
- return false;
+
+ if (!success)
+ JOptionPane.showInternalMessageDialog(
+ this, "Couldn't save file: " + fileName,
+ "Error Saving File",
+ JOptionPane.WARNING_MESSAGE);
+
+ return success;
}
/**
}
CutAndPasteTransfer cap = new CutAndPasteTransfer();
+ cap.setForInput(null);
Desktop.addInternalFrame(cap,
"Alignment output - " + e.getActionCommand(), 600,
500);
*
* @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<alignPanels.size(); i++)
+ if(alignPanels!=null)
{
- AlignmentPanel ap = (AlignmentPanel)alignPanels.elementAt(i);
- PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
- PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
- PaintRefresher.RemoveComponent(ap);
+ if (closeAllTabs)
+ for (int i = 0; i < alignPanels.size(); i++)
+ {
+ AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
+ PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
+ PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
+ PaintRefresher.RemoveComponent(ap);
+ }
+ else
+ {
+ int index = tabbedPane.getSelectedIndex();
+
+ alignPanels.removeElement(alignPanel);
+ PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
+ PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
+ PaintRefresher.RemoveComponent(alignPanel);
+ alignPanel = null;
+ viewport = null;
+
+ tabbedPane.removeTabAt(index);
+ tabbedPane.validate();
+
+ if(index==tabbedPane.getTabCount())
+ index --;
+
+ this.tabSelectionChanged(index);
+ }
}
- this.setClosed(true);
+ if (closeAllTabs)
+ this.setClosed(true);
}
catch (Exception ex)
{
+ ex.printStackTrace();
}
}
*/
void updateEditMenuBar()
{
- /* if (historyList.size() > 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
{
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!
*
*/
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);
+ updateEditMenuBar();
+
+ if(originalSource!=null)
+ {
+ originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+ originalSource.firePropertyChange("alignment",
+ null,
+ originalSource.alignment.getSequences());
+ }
}
/**
*/
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);
+ if(viewport.redoList.size()<1)
+ return;
+
+ CommandI command = (CommandI) viewport.redoList.pop();
+ viewport.historyList.push(command);
+ command.doCommand();
+
+ AlignViewport originalSource = getOriginatingSource(command);
updateEditMenuBar();
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+
+ if(originalSource!=null)
+ {
+ originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+ originalSource.firePropertyChange("alignment",
+ null,
+ originalSource.alignment.getSequences());
+ }
}
- // used by undo and redo
- void restoreHistoryItem(HistoryItem hi)
+ AlignViewport getOriginatingSource(CommandI command)
{
+ AlignViewport originalSource = null;
+ //For sequence removal and addition, we need to fire
+ //the property change event FROM the viewport where the
+ //original alignment was altered
+ AlignmentI al=null;
+ if (command instanceof EditCommand)
+ {
+ EditCommand editCommand = (EditCommand) command;
+ 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;
+ }
+ }
+ }
+ }
- hi.restore(viewport.getColumnSelection());
+ if (originalSource == null)
+ {
+ //The original view is closed, we must validate
+ //the current view against the closed view first
+ if (al != null)
+ PaintRefresher.validateSequences(al, viewport.alignment);
- updateEditMenuBar();
+ originalSource = viewport;
+ }
- viewport.firePropertyChange("alignment", null,
- viewport.getAlignment().getSequences());
+ return originalSource;
}
/**
*/
protected void pasteThis_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
- HistoryItem.PASTE));
paste(false);
}
}
else
{
- sequences = new FormatAdapter().readFile(str, "Paste", format);
+ sequences = new FormatAdapter().readFile(str, "Paste", format).getSequencesArray();
}
AlignmentI alignment = null;
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();
*
* @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;
}
+ Vector seqs = new Vector();
+ SequenceI seq;
+ for (int i = 0; i < sg.getSize(false); i++)
+ {
+ seq = sg.getSequenceAt(i);
+ seqs.addElement(seq);
+ }
- SequenceGroup sg = viewport.getSelectionGroup();
+ // If the cut affects all sequences, remove highlighted columns
+ if (sg.getSize(false) == viewport.alignment.getHeight())
+ {
+ viewport.getColumnSelection().removeElements(sg.getStartRes(),
+ sg.getEndRes() + 1);
+ }
- addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
- HistoryItem.HIDE));
+ SequenceI [] cut = new SequenceI[seqs.size()];
+ for(int i=0; i<seqs.size(); i++)
+ cut[i] = (SequenceI)seqs.elementAt(i);
- for (int i = 0; i < sg.getSize(false); i++)
- {
- SequenceI seq = sg.getSequenceAt(i);
- int index = viewport.getAlignment().findIndex(seq);
- seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
+ /*
+ //ADD HISTORY ITEM
+ */
+ addHistoryItem(new EditCommand("Cut Sequences",
+ EditCommand.CUT,
+ cut,
+ sg.getStartRes(),
+ sg.getEndRes()-sg.getStartRes()+1,
+ viewport.alignment));
- // If the cut affects all sequences, remove highlighted columns
- if (sg.getSize(false) == viewport.alignment.getHeight())
- {
- viewport.getColumnSelection().removeElements(sg.getStartRes(),
- sg.getEndRes() + 1);
- }
-
- if (seq.getSequence().length() < 1)
- {
- viewport.getAlignment().deleteSequence(seq);
- PaintRefresher.Refresh(alignPanel,alignPanel.av.getSequenceSetId(),seq,null);
- }
- else
- {
- viewport.getAlignment().getSequences().setElementAt(seq, index);
- }
- }
viewport.setSelectionGroup(null);
viewport.alignment.deleteGroup(sg);
viewport.firePropertyChange("alignment", null,
viewport.getAlignment().getSequences());
-
-
if (viewport.getAlignment().getHeight() < 1)
{
try
protected void deleteGroups_actionPerformed(ActionEvent e)
{
viewport.alignment.deleteAllGroups();
+ viewport.sequenceColours = null;
viewport.setSelectionGroup(null);
PaintRefresher.Refresh(this, viewport.getSequenceSetId());
alignPanel.repaint();
alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
alignPanel.idPanel.idCanvas.searchResults = null;
alignPanel.repaint();
- PaintRefresher.Refresh(this, viewport.getSequenceSetId());
+ PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
}
/**
sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
}
- PaintRefresher.Refresh(this, viewport.getSequenceSetId());
+ alignPanel.repaint();
+
+ PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
}
public void invertColSel_actionPerformed(ActionEvent e)
*/
public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
{
- ColumnSelection colSel = viewport.getColumnSelection();
-
- if (colSel.size() > 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);
}
/**
*/
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();
+
+ SequenceI [] seqs;
+ if(viewport.getSelectionGroup()!=null)
+ seqs = viewport.getSelectionGroup().getSequencesAsArray(true);
+ else
+ seqs = viewport.alignment.getSequencesArray();
- 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)
+
+ 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();
{
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());
}
}
*/
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());
}
*/
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 (d<diff) // can only shift
- diff=d;
- if (diffmax<d)
- diffmax=d;
- */
- }
- /* // after the end of each chunk -
- * if (diff>0) {
- // 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; i<j; i++)
- gaps.append(viewport.getGapCharacter());
- for (int i=0, j=seqs.size(); i<j; i++) {
- current = (SequenceI) seqs.elementAt(i);
- if (dr[i]-diff>0) {
- 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);
}
- public void alignmentChanged()
- {
- AlignViewport av;
- AlignmentPanel ap;
-
- for(int i=0; i<alignPanels.size(); i++)
- {
- ap = (AlignmentPanel) alignPanels.elementAt(i);
- av = ap.av;
-
- if (av.padGaps)
- av.getAlignment().padGaps();
-
- if (av.hconsensus != null && av.autoCalculateConsensus)
- {
- av.updateConsensus();
- av.updateConservation();
- }
-
- resetAllColourSchemes();
-
- av.alignment.adjustSequenceAnnotations();
-
- if (ap.overviewPanel != null)
- ap.overviewPanel.updateOverviewImage();
-
- ap.repaint();
- }
- }
-
- void resetAllColourSchemes()
- {
- ColourSchemeI cs = viewport.globalColourScheme;
- if(cs!=null)
- {
- if (cs instanceof ClustalxColourScheme)
- {
- ( (ClustalxColourScheme) viewport.getGlobalColourScheme()).
- resetClustalX(viewport.alignment.getSequences(),
- viewport.alignment.getWidth());
- }
-
- cs.setConsensus(viewport.hconsensus);
- if (cs.conservationApplied())
- {
- Alignment al = (Alignment) viewport.alignment;
- Conservation c = new Conservation("All",
- ResidueProperties.propHash, 3,
- al.getSequences(), 0,
- al.getWidth() - 1);
- c.calculate();
- c.verdict(false, viewport.ConsPercGaps);
-
- cs.setConservation(c);
- }
- }
-
- int s, sSize = viewport.alignment.getGroups().size();
- for(s=0; s<sSize; s++)
- {
- SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);
- if(sg.cs!=null && sg.cs instanceof ClustalxColourScheme)
- {
- ((ClustalxColourScheme)sg.cs).resetClustalX(
- sg.getSequences(true), sg.getWidth());
- }
- sg.recalcConservation();
- }
- }
-
/**
* DOCUMENT ME!
*
*/
public void padGapsMenuitem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
- HistoryItem.HIDE));
-
viewport.padGaps = padGapsMenuitem.isSelected();
viewport.firePropertyChange("alignment",
*/
public void findMenuItem_actionPerformed(ActionEvent e)
{
- JInternalFrame frame = new JInternalFrame();
- Finder finder = new Finder(viewport, alignPanel, frame);
- frame.setContentPane(finder);
- frame.setLayer(JLayeredPane.PALETTE_LAYER);
- Desktop.addInternalFrame(frame, "Find", 340, 110);
+ new Finder();
}
+ public void newView_actionPerformed(ActionEvent e)
+ {
+ AlignmentPanel newap =
+ new Jalview2XML().copyAlignPanel(alignPanel, true);
+
+ if (viewport.viewName == null)
+ viewport.viewName = "Original";
+
+ newap.av.historyList = viewport.historyList;
+ newap.av.redoList = viewport.redoList;
+
+ int index = Desktop.getViewCount(viewport.getSequenceSetId());
+ String newViewName = "View " +index;
+
+ Vector comps = (Vector)PaintRefresher.components.get(viewport.getSequenceSetId());
+ Vector existingNames = new Vector();
+ for(int i=0; i<comps.size(); i++)
+ {
+ if(comps.elementAt(i) instanceof AlignmentPanel)
+ {
+ AlignmentPanel ap = (AlignmentPanel)comps.elementAt(i);
+ if(!existingNames.contains(ap.av.viewName))
+ existingNames.addElement(ap.av.viewName);
+ }
+ }
+
+ while(existingNames.contains(newViewName))
+ {
+ newViewName = "View "+ (++index);
+ }
+
+ newap.av.viewName = newViewName;
+
+ addAlignmentPanel(newap, false);
+
+ if(alignPanels.size()==2)
+ {
+ viewport.gatherViewsHere = true;
+ }
+ tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+ }
+
+ public void expandViews_actionPerformed(ActionEvent e)
+ {
+ Desktop.instance.explodeViews(this);
+ }
+
+ public void gatherViews_actionPerformed(ActionEvent e)
+ {
+ Desktop.instance.gatherViews(this);
+ }
+
+
+
/**
* DOCUMENT ME!
*
new FontChooser(alignPanel);
}
- public void smoothFont_actionPerformed(ActionEvent e)
- {
- viewport.antiAlias = smoothFont.isSelected();
- alignPanel.annotationPanel.image = null;
- alignPanel.repaint();
- }
-
/**
* DOCUMENT ME!
alignPanel.repaint();
}
+ public void idRightAlign_actionPerformed(ActionEvent e)
+ {
+ viewport.rightAlignIds = idRightAlign.isSelected();
+ alignPanel.repaint();
+ }
+
+
/**
* DOCUMENT ME!
alignPanel.setOverviewPanel(overview);
}
+ public void textColour_actionPerformed(ActionEvent e)
+ {
+ new TextColourChooser().chooseColour(alignPanel, null);
+ }
+
/**
* DOCUMENT ME!
*
viewport.getIgnoreGapsConsensus());
sg.cs.setConsensus(AAFrequency.calculate(
- sg.getSequences(true), 0,
- sg.getWidth()));
+ sg.getSequences(true), sg.getStartRes(),
+ sg.getEndRes()+1));
}
else
sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());
{
Conservation c = new Conservation("Group",
ResidueProperties.propHash, 3,
- sg.getSequences(true), 0,
- viewport.alignment.getWidth() - 1);
+ sg.getSequences(true),
+ sg.getStartRes(),
+ sg.getEndRes()+1);
c.calculate();
c.verdict(false, viewport.ConsPercGaps);
sg.cs.setConservation(c);
*/
public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByPID(viewport.getAlignment(),
viewport.getAlignment().getSequenceAt(0));
+ addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.alignment));
alignPanel.repaint();
}
*/
public void sortIDMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByID(viewport.getAlignment());
+ addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment));
alignPanel.repaint();
}
*/
public void sortGroupMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
- HistoryItem.SORT));
-
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByGroup(viewport.getAlignment());
+ addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment));
+
alignPanel.repaint();
}
return;
}
- new PCAPanel(viewport);
+ new PCAPanel(alignPanel);
}
tp = new TreePanel(alignPanel, type, pwType);
}
- addTreeMenuItem(tp, title);
+ title += " from ";
+
+ if(viewport.viewName!=null)
+ title+= viewport.viewName+" of ";
- Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500);
+ title += this.title;
+
+ Desktop.addInternalFrame(tp, title, 600, 500);
}
/**
{
public void actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
// TODO: JBPNote - have to map order entries to curent SequenceI pointers
AlignmentSorter.sortBy(viewport.getAlignment(), order);
+
+ addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment));
+
alignPanel.repaint();
}
});
* @param treePanel Displayed tree window.
* @param title SortBy menu item title.
*/
- void addTreeMenuItem(final TreePanel treePanel, String title)
+ public void buildTreeMenu()
{
- final JMenuItem item = new JMenuItem(title);
+ sortByTreeMenu.removeAll();
- treeCount++;
-
- if (treeCount == 1)
+ Vector comps = (Vector)PaintRefresher.components.get(viewport.getSequenceSetId());
+ Vector treePanels = new Vector();
+ int i, iSize = comps.size();
+ for(i=0; i<iSize; i++)
{
- sort.add(sortByTreeMenu);
+ if(comps.elementAt(i) instanceof TreePanel)
+ {
+ treePanels.add(comps.elementAt(i));
+ }
}
- sortByTreeMenu.add(item);
- item.addActionListener(new java.awt.event.ActionListener()
+ iSize = treePanels.size();
+
+ if(iSize<1)
{
- public void actionPerformed(ActionEvent e)
- {
- addHistoryItem(new HistoryItem("Tree Sort",
- viewport.alignment, HistoryItem.SORT));
- AlignmentSorter.sortByTree(viewport.getAlignment(),
- treePanel.getTree());
- alignPanel.repaint();
- }
- });
+ sortByTreeMenu.setVisible(false);
+ return;
+ }
- treePanel.addInternalFrameListener(new javax.swing.event.
- InternalFrameAdapter()
+ sortByTreeMenu.setVisible(true);
+
+ for(i=0; i<treePanels.size(); i++)
{
- public void internalFrameClosed(
- javax.swing.event.InternalFrameEvent evt)
+ TreePanel tp = (TreePanel)treePanels.elementAt(i);
+ final JMenuItem item = new JMenuItem(tp.getTitle());
+ final NJTree tree = ((TreePanel)treePanels.elementAt(i)).getTree();
+ item.addActionListener(new java.awt.event.ActionListener()
{
- treeCount--;
- sortByTreeMenu.remove(item);
-
- if (treeCount == 0)
+ public void actionPerformed(ActionEvent e)
{
- sort.remove(sortByTreeMenu);
+ SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
+ AlignmentSorter.sortByTree(viewport.getAlignment(), tree);
+
+ addHistoryItem(new OrderCommand("Tree Sort",
+ oldOrder,
+ viewport.alignment));
+
+ alignPanel.repaint();
}
- }
- ;
- });
+ });
+
+ sortByTreeMenu.add(item);
+ }
}
/**
{
return ShowNewickTree(nf,title,600,500,4,5);
}
+ public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input)
+ {
+ return ShowNewickTree(nf,title, input, 600,500,4,5);
+ }
+ public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y) {
+ return ShowNewickTree(nf, title, null, w, h, x, y);
+ }
/**
- * DOCUMENT ME!
- *
- * @param nf DOCUMENT ME!
- * @param title DOCUMENT ME!
+ * Add a treeviewer for the tree extracted from a newick file object to the current alignment view
*
- * @return DOCUMENT ME!
+ * @param nf the tree
+ * @param title tree viewer title
+ * @param input Associated alignment input data (or null)
+ * @param w width
+ * @param h height
+ * @param x position
+ * @param y position
+ * @return TreePanel handle
*/
- public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y)
- {
+ public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input, int w,int h,int x, int y) {
TreePanel tp = null;
try
tp = new TreePanel(alignPanel,
"FromFile",
title,
- nf);
+ nf, input);
tp.setSize(w,h);
Desktop.addInternalFrame(tp, title, w, h);
- addTreeMenuItem(tp, title);
}
}
catch (Exception ex)
}
boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport.
- alignment, file);
+ alignment, file, protocol);
if (!isAnnotation)
{
{
alignPanel = (AlignmentPanel) alignPanels.elementAt(index);
viewport = alignPanel.av;
+ setMenusFromViewport(viewport);
}
}
{
return viewport;
}
-}
\ No newline at end of file
+}