/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
* This program is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU General Public License\r
import jalview.datamodel.*;\r
import jalview.analysis.*;\r
import jalview.io.*;\r
+import jalview.commands.*;\r
import java.awt.*;\r
import java.awt.event.*;\r
import java.util.*;\r
{\r
public AlignmentPanel alignPanel;\r
public AlignViewport viewport;\r
- int NEW_WINDOW_WIDTH = 700;\r
- int NEW_WINDOW_HEIGHT = 500;\r
+ int DEFAULT_WIDTH = 700;\r
+ int DEFAULT_HEIGHT = 500;\r
\r
String jalviewServletURL;\r
\r
if (param != null)\r
{\r
int width = Integer.parseInt(param);\r
- NEW_WINDOW_WIDTH = width;\r
+ DEFAULT_WIDTH = width;\r
}\r
param = applet.getParameter("windowHeight");\r
if (param != null)\r
{\r
int height = Integer.parseInt(param);\r
- NEW_WINDOW_HEIGHT = height;\r
+ DEFAULT_HEIGHT = height;\r
}\r
}\r
catch (Exception ex)\r
else\r
{\r
add(alignPanel, BorderLayout.CENTER);\r
- jalview.bin.JalviewLite.addFrame(this, title, NEW_WINDOW_WIDTH,\r
- NEW_WINDOW_HEIGHT);\r
+ jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH,\r
+ DEFAULT_HEIGHT);\r
}\r
alignPanel.validate();\r
alignPanel.repaint();\r
case KeyEvent.VK_SPACE:\r
if(viewport.cursorMode)\r
{\r
- alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown());\r
+ alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()\r
+ || evt.isShiftDown()\r
+ || evt.isAltDown()\r
+ );\r
}\r
break;\r
\r
case KeyEvent.VK_BACK_SPACE:\r
if(viewport.cursorMode)\r
{\r
- alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown());\r
+ alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()\r
+ || evt.isShiftDown()\r
+ || evt.isAltDown()\r
+ );\r
}\r
else\r
{\r
break;\r
case KeyEvent.VK_H:\r
{\r
+ boolean toggleSeqs = !evt.isControlDown();\r
+ boolean toggleCols = !evt.isShiftDown();\r
+ boolean hide = false;\r
SequenceGroup sg = viewport.getSelectionGroup();\r
- if (sg != null && sg.getSize(false) != viewport.alignment.getHeight())\r
+\r
+ if(toggleSeqs)\r
{\r
- hideSelectedSeqs();\r
+ if (sg != null && sg.getSize(false) != viewport.alignment.getHeight())\r
+ {\r
+ hide = true;\r
+ viewport.hideAllSelectedSeqs();\r
+ }\r
+ else if (!(toggleCols && viewport.colSel.getSelected().size() > 0))\r
+ viewport.showAllHiddenSeqs();\r
}\r
- else\r
- viewport.showAllHiddenSeqs();\r
\r
- if (viewport.colSel.getSelected().size() > 0)\r
+ if(toggleCols)\r
{\r
- viewport.hideSelectedColumns();\r
+ if (viewport.colSel.getSelected().size() > 0)\r
+ {\r
+ viewport.hideSelectedColumns();\r
+ if(!toggleSeqs)\r
+ viewport.selectionGroup = sg;\r
+ }\r
+ else if (!hide)\r
+ viewport.showAllHiddenColumns();\r
}\r
- else\r
- {\r
- viewport.showAllHiddenColumns();\r
- }\r
+\r
alignPanel.repaint();\r
break;\r
}\r
-\r
- }\r
+ case KeyEvent.VK_PAGE_UP:\r
+ if (viewport.wrapAlignment)\r
+ alignPanel.scrollUp(true);\r
+ else\r
+ alignPanel.setScrollValues(viewport.startRes,\r
+ viewport.startSeq\r
+ - viewport.endSeq + viewport.startSeq);\r
+ break;\r
+ case KeyEvent.VK_PAGE_DOWN:\r
+ if (viewport.wrapAlignment)\r
+ alignPanel.scrollUp(false);\r
+ else\r
+ alignPanel.setScrollValues(viewport.startRes,\r
+ viewport.startSeq\r
+ + viewport.endSeq - viewport.startSeq);\r
+ break;\r
+ }\r
}\r
public void keyReleased(KeyEvent evt)\r
{}\r
}\r
else if(source==showSeqs)\r
{\r
- viewport.showAllHiddenSeqs(); alignPanel.repaint();\r
+ viewport.showAllHiddenSeqs();\r
}\r
else if(source == hideColumns)\r
{\r
}\r
else if(source == hideSequences && viewport.getSelectionGroup()!=null)\r
{\r
- hideSelectedSeqs();\r
+ viewport.hideAllSelectedSeqs();\r
}\r
else if(source==featureSettings)\r
featureSettings_actionPerformed();\r
\r
protected void outputText_actionPerformed(ActionEvent e)\r
{\r
- CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);\r
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);\r
Frame frame = new Frame();\r
frame.add(cap);\r
jalview.bin.JalviewLite.addFrame(frame,\r
url.append( appendProtocol( viewport.applet.getParameter("annotations") ) );\r
}\r
\r
+ if(viewport.applet.getParameter("jnetfile")!=null)\r
+ {\r
+ url.append( "&annotations=" );\r
+ url.append( appendProtocol( viewport.applet.getParameter("jnetfile") ) );\r
+ }\r
+\r
if(viewport.applet.getParameter("defaultColour")!=null)\r
{\r
url.append("&colour=" +\r
\r
void updateEditMenuBar()\r
{\r
- if (historyList.size() > 0)\r
- {\r
- undoMenuItem.setEnabled(true);\r
- HistoryItem hi = (HistoryItem) historyList.peek();\r
- undoMenuItem.setLabel("Undo " + hi.getDescription());\r
- }\r
- else\r
- {\r
- undoMenuItem.setEnabled(false);\r
- undoMenuItem.setLabel("Undo");\r
- }\r
-\r
- if (redoList.size() > 0)\r
- {\r
- redoMenuItem.setEnabled(true);\r
- HistoryItem hi = (HistoryItem) redoList.peek();\r
- redoMenuItem.setLabel("Redo " + hi.getDescription());\r
- }\r
- else\r
- {\r
- redoMenuItem.setEnabled(false);\r
- redoMenuItem.setLabel("Redo");\r
- }\r
}\r
\r
- public void addHistoryItem(HistoryItem hi)\r
- {\r
- historyList.push(hi);\r
- updateEditMenuBar();\r
- }\r
\r
protected void undoMenuItem_actionPerformed()\r
{\r
- HistoryItem hi = (HistoryItem) historyList.pop();\r
- redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment,\r
- HistoryItem.HIDE));\r
- restoreHistoryItem(hi);\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
}\r
\r
protected void redoMenuItem_actionPerformed()\r
{\r
- HistoryItem hi = (HistoryItem) redoList.pop();\r
- restoreHistoryItem(hi);\r
- updateEditMenuBar();\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
+\r
}\r
\r
// used by undo and redo\r
- void restoreHistoryItem(HistoryItem hi)\r
+ void restoreHistoryItem(CommandI command)\r
{\r
- hi.restore();\r
-\r
- updateEditMenuBar();\r
-\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
}\r
\r
public void moveSelectedSequences(boolean up)\r
\r
protected void pasteThis_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,\r
- HistoryItem.PASTE));\r
+ // addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,\r
+ // HistoryItem.PASTE));\r
paste(false);\r
}\r
\r
}\r
\r
\r
- jalview.bin.JalviewLite.addFrame(af, newtitle, NEW_WINDOW_WIDTH,\r
- NEW_WINDOW_HEIGHT);\r
+ jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH,\r
+ DEFAULT_HEIGHT);\r
}\r
else\r
{\r
\r
protected void delete_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,\r
- HistoryItem.HIDE));\r
+ //addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,\r
+ // HistoryItem.HIDE));\r
if (viewport.getSelectionGroup() == null)\r
{\r
return;\r
\r
public void remove2LeftMenuItem_actionPerformed()\r
{\r
- ColumnSelection colSel = viewport.getColumnSelection();\r
- if (colSel.size() > 0)\r
- {\r
- addHistoryItem(new HistoryItem("Remove Left", viewport.alignment,\r
- HistoryItem.HIDE));\r
- int min = colSel.getMin();\r
- viewport.getAlignment().trimLeft(min);\r
- colSel.compensateForEdit(0, min);\r
-\r
- if (viewport.getSelectionGroup() != null)\r
- {\r
- viewport.getSelectionGroup().adjustForRemoveLeft(min);\r
- }\r
-\r
- Vector groups = viewport.alignment.getGroups();\r
- for (int i = 0; i < groups.size(); i++)\r
- {\r
- SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
- if (!sg.adjustForRemoveLeft(min))\r
- {\r
- viewport.alignment.deleteGroup(sg);\r
- }\r
- }\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
- }\r
}\r
\r
public void remove2RightMenuItem_actionPerformed()\r
{\r
- ColumnSelection colSel = viewport.getColumnSelection();\r
- if (colSel.size() > 0)\r
- {\r
- addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,\r
- HistoryItem.HIDE));\r
- int max = colSel.getMax();\r
- viewport.getAlignment().trimRight(max);\r
- if (viewport.getSelectionGroup() != null)\r
- {\r
- viewport.getSelectionGroup().adjustForRemoveRight(max);\r
- }\r
-\r
- Vector groups = viewport.alignment.getGroups();\r
- for (int i = 0; i < groups.size(); i++)\r
- {\r
- SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
- if (!sg.adjustForRemoveRight(max))\r
- {\r
- viewport.alignment.deleteGroup(sg);\r
- }\r
- }\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
- }\r
-\r
}\r
\r
public void removeGappedColumnMenuItem_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Remove Gapped Columns",\r
- viewport.alignment,\r
- HistoryItem.HIDE));\r
-\r
- //This is to maintain viewport position on first residue\r
- //of first sequence\r
- SequenceI seq = viewport.alignment.getSequenceAt(0);\r
- int startRes = seq.findPosition(viewport.startRes);\r
-\r
- viewport.getAlignment().removeGaps();\r
-\r
- viewport.setStartRes(seq.findIndex(startRes)-1);\r
-\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
}\r
\r
public void removeAllGapsMenuItem_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,\r
- HistoryItem.HIDE));\r
-\r
- //This is to maintain viewport position on first residue\r
- //of first sequence\r
- SequenceI seq = viewport.alignment.getSequenceAt(0);\r
- int startRes = seq.findPosition(viewport.startRes);\r
-\r
- SequenceI current;\r
- int jSize;\r
-\r
- Vector seqs=null;\r
-\r
- int start=0, end = viewport.alignment.getWidth();\r
-\r
- if (viewport.getSelectionGroup() != null\r
- && viewport.getSelectionGroup().getSequences(false) != null\r
- && viewport.getSelectionGroup().getSize(false)>0)\r
- {\r
- seqs = viewport.getSelectionGroup().getSequences(true);\r
- start = viewport.getSelectionGroup().getStartRes();\r
- end = viewport.getSelectionGroup().getEndRes()+1;\r
- }\r
- else\r
- seqs = viewport.alignment.getSequences();\r
-\r
- for (int i = 0; i < seqs.size(); i++)\r
- {\r
- current = (SequenceI) seqs.elementAt(i);\r
- jSize = current.getLength();\r
-\r
- // Removing a range is much quicker than removing gaps\r
- // one by one for long sequences\r
- int j = start;\r
- int rangeStart=-1, rangeEnd=-1;\r
-\r
- do\r
- {\r
- if (jalview.util.Comparison.isGap(current.getCharAt(j)))\r
- {\r
- if(rangeStart==-1)\r
- {\r
- rangeStart = j;\r
- rangeEnd = j+1;\r
- }\r
- else\r
- {\r
- rangeEnd++;\r
- }\r
- j++;\r
- }\r
- else\r
- {\r
- if(rangeStart>-1)\r
- {\r
- current.deleteChars(rangeStart, rangeEnd);\r
- j-=rangeEnd-rangeStart;\r
- jSize-=rangeEnd-rangeStart;\r
- rangeStart = -1;\r
- rangeEnd = -1;\r
- }\r
- else\r
- j++;\r
- }\r
- }\r
- while (j < end && j < jSize);\r
- if(rangeStart>-1)\r
- {\r
- current.deleteChars(rangeStart, rangeEnd);\r
- }\r
- }\r
- viewport.setStartRes(seq.findIndex(startRes)-1);\r
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
}\r
\r
public void alignmentChanged()\r
viewport.alignment.getWidth());\r
}\r
\r
- cs.setConsensus(viewport.vconsensus);\r
+ cs.setConsensus(viewport.hconsensus);\r
if (cs.conservationApplied())\r
{\r
Alignment al = (Alignment) viewport.alignment;\r
alignPanel.repaint();\r
}\r
\r
- void hideSelectedSeqs()\r
- {\r
- SequenceI[] seqs = viewport.getSelectionGroup().getSequencesInOrder(\r
- viewport.alignment\r
- );\r
-\r
- for (int i = 0; i < seqs.length; i++)\r
- {\r
- viewport.hideSequence(seqs[i]);\r
- }\r
-\r
- alignPanel.repaint();\r
- }\r
\r
protected void scaleAbove_actionPerformed()\r
{\r
cs.setConservation(null);\r
}\r
\r
- cs.setConsensus(viewport.vconsensus);\r
+ cs.setConsensus(viewport.hconsensus);\r
\r
}\r
viewport.setGlobalColourScheme(cs);\r
\r
public void sortPairwiseMenuItem_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,\r
- HistoryItem.SORT));\r
+ // addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,\r
+ // HistoryItem.SORT));\r
AlignmentSorter.sortByPID(viewport.getAlignment(),\r
viewport.getAlignment().getSequenceAt(0));\r
alignPanel.repaint();\r
\r
public void sortIDMenuItem_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,\r
- HistoryItem.SORT));\r
+ // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,\r
+ // HistoryItem.SORT));\r
AlignmentSorter.sortByID(viewport.getAlignment());\r
alignPanel.repaint();\r
}\r
\r
public void sortGroupMenuItem_actionPerformed()\r
{\r
- addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,\r
- HistoryItem.SORT));\r
+ // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,\r
+ // HistoryItem.SORT));\r
AlignmentSorter.sortByGroup(viewport.getAlignment());\r
alignPanel.repaint();\r
\r
{\r
public void actionPerformed(ActionEvent evt)\r
{\r
- addHistoryItem(new HistoryItem("Sort", viewport.alignment,\r
- HistoryItem.SORT));\r
+ // addHistoryItem(new HistoryItem("Sort", viewport.alignment,\r
+ // HistoryItem.SORT));\r
AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());\r
alignPanel.repaint();\r
}\r