X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=8e54ba904ddb02fa0ebf392df5dde0c13c711db5;hb=14ead5d8009f9ac9a139ae93faf44e67a3998d46;hp=1ff729dc8805c88ec00e2ed85461df0548f3e6b7;hpb=e5e719a4db6db7d165261151d4638547923fa5d2;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 1ff729d..8e54ba9 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -36,8 +36,8 @@ public class AlignFrame extends Frame implements ActionListener, { public AlignmentPanel alignPanel; public AlignViewport viewport; - int NEW_WINDOW_WIDTH = 700; - int NEW_WINDOW_HEIGHT = 500; + int DEFAULT_WIDTH = 700; + int DEFAULT_HEIGHT = 500; String jalviewServletURL; @@ -91,13 +91,13 @@ public class AlignFrame extends Frame implements ActionListener, if (param != null) { int width = Integer.parseInt(param); - NEW_WINDOW_WIDTH = width; + DEFAULT_WIDTH = width; } param = applet.getParameter("windowHeight"); if (param != null) { int height = Integer.parseInt(param); - NEW_WINDOW_HEIGHT = height; + DEFAULT_HEIGHT = height; } } catch (Exception ex) @@ -110,6 +110,8 @@ public class AlignFrame extends Frame implements ActionListener, this.addKeyListener(this); alignPanel.seqPanel.seqCanvas.addKeyListener(this); alignPanel.idPanel.idCanvas.addKeyListener(this); + alignPanel.scalePanel.addKeyListener(this); + alignPanel.annotationPanel.addKeyListener(this); viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener() { @@ -130,8 +132,8 @@ public class AlignFrame extends Frame implements ActionListener, else { add(alignPanel, BorderLayout.CENTER); - jalview.bin.JalviewLite.addFrame(this, title, NEW_WINDOW_WIDTH, - NEW_WINDOW_HEIGHT); + jalview.bin.JalviewLite.addFrame(this, title, DEFAULT_WIDTH, + DEFAULT_HEIGHT); } alignPanel.validate(); alignPanel.repaint(); @@ -258,7 +260,10 @@ public class AlignFrame extends Frame implements ActionListener, case KeyEvent.VK_SPACE: if(viewport.cursorMode) { - alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown()); + alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown() + ); } break; @@ -266,7 +271,10 @@ public class AlignFrame extends Frame implements ActionListener, case KeyEvent.VK_BACK_SPACE: if(viewport.cursorMode) { - alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown()); + alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown() + ); } else { @@ -327,7 +335,56 @@ public class AlignFrame extends Frame implements ActionListener, findMenuItem_actionPerformed(); } break; - } + case KeyEvent.VK_H: + { + boolean toggleSeqs = !evt.isControlDown(); + boolean toggleCols = !evt.isShiftDown(); + boolean hide = false; + SequenceGroup sg = viewport.getSelectionGroup(); + + if(toggleSeqs) + { + if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + { + hide = true; + viewport.hideAllSelectedSeqs(); + } + else if (!(toggleCols && viewport.colSel.getSelected().size() > 0)) + viewport.showAllHiddenSeqs(); + } + + if(toggleCols) + { + if (viewport.colSel.getSelected().size() > 0) + { + viewport.hideSelectedColumns(); + if(!toggleSeqs) + viewport.selectionGroup = sg; + } + else if (!hide) + viewport.showAllHiddenColumns(); + } + + alignPanel.repaint(); + break; + } + case KeyEvent.VK_PAGE_UP: + if (viewport.wrapAlignment) + alignPanel.scrollUp(true); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + - viewport.endSeq + viewport.startSeq); + break; + case KeyEvent.VK_PAGE_DOWN: + if (viewport.wrapAlignment) + alignPanel.scrollUp(false); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + + viewport.endSeq - viewport.startSeq); + break; + } } public void keyReleased(KeyEvent evt) {} @@ -434,7 +491,7 @@ public void itemStateChanged(ItemEvent evt) } else if(source==showSeqs) { - viewport.showAllHiddenSeqs(); alignPanel.repaint(); + viewport.showAllHiddenSeqs(); } else if(source == hideColumns) { @@ -442,16 +499,7 @@ public void itemStateChanged(ItemEvent evt) } else if(source == hideSequences && viewport.getSelectionGroup()!=null) { - SequenceI[] seqs = viewport.getSelectionGroup().getSequencesInOrder( - viewport.alignment - ); - - for (int i = 0; i < seqs.length; i++) - { - viewport.hideSequence(seqs[i]); - } - - alignPanel.repaint(); + viewport.hideAllSelectedSeqs(); } else if(source==featureSettings) featureSettings_actionPerformed(); @@ -556,6 +604,12 @@ public void itemStateChanged(ItemEvent evt) url.append( appendProtocol( viewport.applet.getParameter("annotations") ) ); } + if(viewport.applet.getParameter("jnetfile")!=null) + { + url.append( "&annotations=" ); + url.append( appendProtocol( viewport.applet.getParameter("jnetfile") ) ); + } + if(viewport.applet.getParameter("defaultColour")!=null) { url.append("&colour=" + @@ -642,21 +696,28 @@ public void itemStateChanged(ItemEvent evt) public void addHistoryItem(HistoryItem hi) { historyList.push(hi); + redoList.removeAllElements(); updateEditMenuBar(); } protected void undoMenuItem_actionPerformed() { - HistoryItem hi = (HistoryItem) historyList.pop(); - redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment, + 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()); } protected void redoMenuItem_actionPerformed() { - HistoryItem hi = (HistoryItem) redoList.pop(); + 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()); @@ -665,8 +726,7 @@ public void itemStateChanged(ItemEvent evt) // used by undo and redo void restoreHistoryItem(HistoryItem hi) { - hi.restore(); - + hi.restore(viewport.getColumnSelection()); updateEditMenuBar(); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); @@ -886,8 +946,8 @@ public void itemStateChanged(ItemEvent evt) } - jalview.bin.JalviewLite.addFrame(af, newtitle, NEW_WINDOW_WIDTH, - NEW_WINDOW_HEIGHT); + jalview.bin.JalviewLite.addFrame(af, newtitle, DEFAULT_WIDTH, + DEFAULT_HEIGHT); } else { @@ -1016,12 +1076,13 @@ public void itemStateChanged(ItemEvent evt) ColumnSelection colSel = viewport.getColumnSelection(); if (colSel.size() > 0) { - addHistoryItem(new HistoryItem("Remove Left", viewport.alignment, + 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); @@ -1049,6 +1110,7 @@ public void itemStateChanged(ItemEvent evt) HistoryItem.HIDE)); int max = colSel.getMax(); viewport.getAlignment().trimRight(max); + if (viewport.getSelectionGroup() != null) { viewport.getSelectionGroup().adjustForRemoveRight(max); @@ -1070,7 +1132,8 @@ public void itemStateChanged(ItemEvent evt) public void removeGappedColumnMenuItem_actionPerformed() { - addHistoryItem(new HistoryItem("Remove Gapped Columns", + HistoryItem edit; + addHistoryItem(edit=new HistoryItem("Remove Gapped Columns", viewport.alignment, HistoryItem.HIDE)); @@ -1088,7 +1151,10 @@ public void itemStateChanged(ItemEvent evt) public void removeAllGapsMenuItem_actionPerformed() { - addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment, + // 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) + HistoryItem editgaps; + addHistoryItem(editgaps=new HistoryItem("Remove Gaps", viewport.alignment, HistoryItem.HIDE)); //This is to maintain viewport position on first residue @@ -1097,8 +1163,6 @@ public void itemStateChanged(ItemEvent evt) int startRes = seq.findPosition(viewport.startRes); SequenceI current; - int jSize; - Vector seqs=null; int start=0, end = viewport.alignment.getWidth(); @@ -1114,51 +1178,42 @@ public void itemStateChanged(ItemEvent evt) 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); - jSize = current.getLength(); - - // Removing a range is much quicker than removing gaps - // one by one for long sequences - int j = start; - int rangeStart=-1, rangeEnd=-1; - - do - { - if (jalview.util.Comparison.isGap(current.getCharAt(j))) - { - if(rangeStart==-1) - { - rangeStart = j; - rangeEnd = j+1; - } - else - { - rangeEnd++; - } - j++; - } - else - { - if(rangeStart>-1) - { - current.deleteChars(rangeStart, rangeEnd); - j-=rangeEnd-rangeStart; - jSize-=rangeEnd-rangeStart; - rangeStart = -1; - rangeEnd = -1; - } - else - j++; - } - } - while (j < end && j < jSize); - if(rangeStart>-1) - { - current.deleteChars(rangeStart, rangeEnd); + //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()); + } + } } - } + }*/ + viewport.setStartRes(seq.findIndex(startRes)-1); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); } @@ -1192,7 +1247,7 @@ public void itemStateChanged(ItemEvent evt) viewport.alignment.getWidth()); } - cs.setConsensus(viewport.vconsensus); + cs.setConsensus(viewport.hconsensus); if (cs.conservationApplied()) { Alignment al = (Alignment) viewport.alignment; @@ -1257,6 +1312,7 @@ public void itemStateChanged(ItemEvent evt) alignPanel.repaint(); } + protected void scaleAbove_actionPerformed() { viewport.setScaleAboveWrapped(scaleAbove.getState()); @@ -1431,7 +1487,7 @@ public void itemStateChanged(ItemEvent evt) cs.setConservation(null); } - cs.setConsensus(viewport.vconsensus); + cs.setConsensus(viewport.hconsensus); } viewport.setGlobalColourScheme(cs); @@ -1937,12 +1993,11 @@ public void itemStateChanged(ItemEvent evt) MenuItem item; // dynamically fill save as menu with available formats - for (int i = 0; i < jalview.io.AppletFormatAdapter.formats.size()-2; i++) + for (int i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) { - item = new MenuItem( (String) jalview.io.AppletFormatAdapter.formats. - elementAt( - i)); + item = new MenuItem( jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]); + item.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e)