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!
/** 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;
/**
al.setDataset(null);
}
- addAlignmentPanel(alignPanel);
+ addAlignmentPanel(alignPanel, true);
init();
}
{
viewport = ap.av;
alignPanel = ap;
- alignPanel.alignFrame = this;
- addAlignmentPanel(ap);
+ addAlignmentPanel(ap, false);
init();
}
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()
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;
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);
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)
{
}
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;
{
// 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)
}
}
+ /**
+ * 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)
+ {
+ colourTextMenuItem.setSelected(av.showColourText);
+ abovePIDThreshold.setSelected(av.getAbovePIDThreshold());
+ conservationMenuItem.setSelected(av.getConservationSelected());
+ seqLimits.setSelected(av.getShowJVSuffix());
+ 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)
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);
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"),
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);
}
}
new Jalview2XML().SaveAlignment(this, file, shortName);
+ statusBar.setText("Successfully saved to file: "
+ +fileName+" in "
+ +format +" format.");
+
+
// USE Jalview2XML to save this file
return true;
}
out.print(output);
out.close();
this.setTitle(file);
+ statusBar.setText("Successfully saved to file: "
+ +fileName+" in "
+ +format +" format.");
return true;
}
catch (Exception ex)
}
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();
+
+ tabbedPane.removeTabAt(index);
+ alignPanels.removeElement(alignPanel);
+ PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
+ PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
+ PaintRefresher.RemoveComponent(alignPanel);
+ alignPanel = null;
+ viewport = null;
+ 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);
- CommandI command = (CommandI) historyList.peek();
+ 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);
- CommandI command = (CommandI) redoList.peek();
+ CommandI command = (CommandI) viewport.redoList.peek();
redoMenuItem.setText("Redo " + command.getDescription());
}
else
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;
+ }
}
*/
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());
+ viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+ updateEditMenuBar();
+ viewport.firePropertyChange("alignment", null,
+ viewport.getAlignment().getSequences());
}
/**
*/
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);
updateEditMenuBar();
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
}
sequences[i].getEnd());
alignment.addSequence(newseqs[i]);
- PaintRefresher.Refresh(alignPanel,
- alignPanel.av.getSequenceSetId(),
- null,newseqs[i]);
}
-
/*
//ADD HISTORY ITEM
*/
*
* @param e DOCUMENT ME!
*/
- protected void delete_actionPerformed(ActionEvent e)
+ protected void delete_actionPerformed(ActionEvent evt)
{
SequenceGroup sg = viewport.getSelectionGroup();
Vector seqs = new Vector();
int cutLength = sg.getEndRes()-sg.getStartRes()+1;
+ boolean seqsCut = false;
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);
+ seqsCut = true;
}
+
// If the cut affects all sequences, remove highlighted columns
if (sg.getSize(false) == viewport.alignment.getHeight())
{
sg.getEndRes()-sg.getStartRes()+1,
viewport.alignment));
+
viewport.setSelectionGroup(null);
viewport.alignment.deleteGroup(sg);
protected void deleteGroups_actionPerformed(ActionEvent e)
{
viewport.alignment.deleteAllGroups();
+ viewport.sequenceColours.clear();
viewport.setSelectionGroup(null);
PaintRefresher.Refresh(this, viewport.getSequenceSetId());
alignPanel.repaint();
viewport.alignment,
viewport.colSel,
viewport.selectionGroup);
+ viewport.setStartRes(0);
}
else
{
viewport.selectionGroup);
}
+ statusBar.setText("Removed "+trimRegion.getSize()+" columns.");
+
+
addHistoryItem(trimRegion);
Vector groups = viewport.alignment.getGroups();
}
}
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+ viewport.firePropertyChange("alignment", null,
+ viewport.getAlignment().getSequences());
}
}
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
}
- 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(ap);
- av.updateConservation(ap);
- ap.annotationPanel.repaint();
- }
-
- 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",
Desktop.addInternalFrame(frame, "Find", 340, 110);
}
+ public void newView_actionPerformed(ActionEvent e)
+ {
+ AlignmentPanel newap =
+ new Jalview2XML().copyAlignPanel(alignPanel, true);
+
+ if (viewport.viewName == null)
+ viewport.viewName = "View 1";
+
+ newap.av.historyList = viewport.historyList;
+ newap.av.redoList = viewport.redoList;
+ newap.av.viewName = "View " +
+ (Desktop.getViewCount(viewport.getSequenceSetId()) + 1);
+
+ addAlignmentPanel(newap, false);
+
+ if(alignPanels.size()==2)
+ {
+ viewport.gatherViewsHere = true;
+ }
+ tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+ }
+
+
/**
* DOCUMENT ME!
*
new FontChooser(alignPanel);
}
- public void smoothFont_actionPerformed(ActionEvent e)
- {
- viewport.antiAlias = smoothFont.isSelected();
- alignPanel.annotationPanel.image = null;
- alignPanel.repaint();
- }
-
/**
* DOCUMENT ME!
alignPanel.setOverviewPanel(overview);
}
+ public void textColour_actionPerformed(ActionEvent e)
+ {
+ int original1 = viewport.textColour.getRGB();
+ int original2 = viewport.textColour2.getRGB();
+ int thresh = viewport.thresholdTextColour;
+ final JSlider slider = new JSlider(0, 750, viewport.thresholdTextColour);
+ final JButton col1 = new JButton("DARK");
+ col1.setBackground(viewport.textColour);
+ col1.setForeground(viewport.textColour);
+ final JButton col2 = new JButton("LIGHT");
+ col2.setBackground(viewport.textColour2);
+ col2.setForeground(viewport.textColour2);
+ final JPanel bigpanel = new JPanel(new BorderLayout());
+ JPanel panel = new JPanel();
+ bigpanel.add(panel, BorderLayout.CENTER);
+ bigpanel.add(new JLabel(
+ "<html><i>Select a dark and light text colour, then set the threshold to"
+ +"<br>switch between colours, based on background colour</i></html>"),
+ BorderLayout.NORTH);
+ panel.add(col1);
+ panel.add(slider);
+ panel.add(col2);
+
+ col1.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ Color col = JColorChooser.showDialog(bigpanel,
+ "Select Colour for Text",
+ viewport.textColour);
+ if (col != null)
+ {
+ viewport.textColour = col;
+ col1.setBackground(col);
+ col1.setForeground(col);
+ if(viewport.colourAppliesToAllGroups)
+ setGroupTextColour();
+ }
+ alignPanel.repaint();
+ }
+ });
+
+ col2.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ Color col = JColorChooser.showDialog(bigpanel,
+ "Select Colour for Text",
+ viewport.textColour);
+ if (col != null)
+ {
+ viewport.textColour2 = col;
+ col2.setBackground(col);
+ col2.setForeground(col);
+ if(viewport.colourAppliesToAllGroups)
+ setGroupTextColour();
+ }
+ alignPanel.repaint();
+ }
+ });
+
+
+ slider.addChangeListener(new ChangeListener()
+ {
+ public void stateChanged(ChangeEvent evt)
+ {
+ viewport.thresholdTextColour = slider.getValue();
+ if(viewport.colourAppliesToAllGroups)
+ setGroupTextColour();
+ alignPanel.repaint();
+ }
+ });
+
+ int reply = JOptionPane.showInternalOptionDialog(this,
+ bigpanel,
+ "Adjust Foreground Text Colour Threshold",
+ JOptionPane.OK_CANCEL_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ null, null);
+
+ if(reply==JOptionPane.CANCEL_OPTION)
+ {
+ viewport.textColour = new Color(original1);
+ viewport.textColour2 = new Color(original2);
+ viewport.thresholdTextColour = thresh;
+ }
+ }
+
+ void setGroupTextColour()
+ {
+ if(viewport.alignment.getGroups()==null)
+ return;
+
+ Vector groups = viewport.alignment.getGroups();
+
+ for(int i=0; i<groups.size(); i++)
+ {
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(i);
+ sg.textColour = viewport.textColour;
+ sg.textColour2 = viewport.textColour2;
+ sg.thresholdTextColour = viewport.thresholdTextColour;
+ }
+
+
+ }
+
+
/**
* 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);
{
alignPanel = (AlignmentPanel) alignPanels.elementAt(index);
viewport = alignPanel.av;
+ setMenusFromViewport(viewport);
}
}