X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=1c2605c5bf14ea70678d93288ad9cdcc8cd12cf9;hb=bbc14e2d648fe667157c327043d9bbb238faf65e;hp=0c7f5d1b6db83a2f2ba71057cb3641186935916f;hpb=2794d58ed2b048de8cad254bea750f69d859240d;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 0c7f5d1..1c2605c 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 @@ -23,6 +23,7 @@ import jalview.schemes.*; import jalview.datamodel.*; import jalview.analysis.*; import jalview.io.*; +import jalview.commands.*; import java.awt.*; import java.awt.event.*; import java.util.*; @@ -36,8 +37,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; @@ -48,7 +49,8 @@ public class AlignFrame extends Frame implements ActionListener, boolean embedded) { - jalviewServletURL = applet.getParameter("APPLICATION_URL"); + if (applet != null) + jalviewServletURL = applet.getParameter("APPLICATION_URL"); try{ jbInit(); @@ -60,6 +62,9 @@ public class AlignFrame extends Frame implements ActionListener, viewport = new AlignViewport(al, applet); alignPanel = new AlignmentPanel(this, viewport); + viewport.updateConservation(alignPanel); + viewport.updateConsensus(alignPanel); + annotationPanelMenuItem.setState(viewport.showAnnotation); seqLimits.setState(viewport.showJVSuffix); @@ -91,13 +96,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) @@ -113,17 +118,6 @@ public class AlignFrame extends Frame implements ActionListener, alignPanel.scalePanel.addKeyListener(this); alignPanel.annotationPanel.addKeyListener(this); - viewport.addPropertyChangeListener(new java.beans.PropertyChangeListener() - { - public void propertyChange(java.beans.PropertyChangeEvent evt) - { - if (evt.getPropertyName().equals("alignment")) - { - alignmentChanged(); - } - } - }); - if(embedded) { @@ -132,8 +126,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(); @@ -215,9 +209,9 @@ public class AlignFrame extends Frame implements ActionListener, } break; case KeyEvent.VK_V: - if (evt.isControlDown() || evt.isMetaDown()) + if (evt.isControlDown()) { - paste(true); + paste(evt.isShiftDown()); } break; case KeyEvent.VK_A: @@ -260,7 +254,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; @@ -268,7 +265,9 @@ 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 { @@ -320,7 +319,6 @@ public class AlignFrame extends Frame implements ActionListener, alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; } - alignPanel.seqPanel.seqCanvas.repaint(); break; case KeyEvent.VK_F: @@ -329,37 +327,121 @@ public class AlignFrame extends Frame implements ActionListener, findMenuItem_actionPerformed(); } break; + case KeyEvent.VK_H: { boolean toggleSeqs = !evt.isControlDown(); - boolean toggleCols = !evt.isAltDown(); + boolean toggleCols = !evt.isShiftDown(); boolean hide = false; SequenceGroup sg = viewport.getSelectionGroup(); if(toggleSeqs) { - if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + if (sg != null && sg.getSize() != viewport.alignment.getHeight()) { hide = true; viewport.hideAllSelectedSeqs(); } - else + 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(); } + break; + } - alignPanel.repaint(); + 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; + + case KeyEvent.VK_Z: + if (evt.isControlDown()) + { + undoMenuItem_actionPerformed(); + } break; + + case KeyEvent.VK_Y: + if (evt.isControlDown()) + { + redoMenuItem_actionPerformed(); + } + break; + + case KeyEvent.VK_L: + if (evt.isControlDown()) + { + trimAlignment(true); + } + break; + + case KeyEvent.VK_R: + if (evt.isControlDown()) + { + trimAlignment(false); + } + break; + + case KeyEvent.VK_E: + if (evt.isControlDown()) + { + if (evt.isShiftDown()) + this.removeAllGapsMenuItem_actionPerformed(); + else + removeGappedColumnMenuItem_actionPerformed(); + } + break; + case KeyEvent.VK_I: + if (evt.isControlDown()) + { + if (evt.isAltDown()) + viewport.invertColumnSelection(); + else + this.invertSequenceMenuItem_actionPerformed(); + } + break; + + case KeyEvent.VK_U: + if (evt.isControlDown()) + { + this.deleteGroups_actionPerformed(); + } + break; + + case KeyEvent.VK_T: + if (evt.isControlDown()) + { + newView(); } + break; - } + + } + alignPanel.repaint(); } public void keyReleased(KeyEvent evt) {} @@ -373,21 +455,24 @@ public void itemStateChanged(ItemEvent evt) else if(evt.getSource()==wrapMenuItem) wrapMenuItem_actionPerformed(); else if(evt.getSource()==scaleAbove) - scaleAbove_actionPerformed(); + viewport.setScaleAboveWrapped(scaleAbove.getState()); else if(evt.getSource()==scaleLeft) - scaleLeft_actionPerformed(); + viewport.setScaleLeftWrapped(scaleLeft.getState()); else if(evt.getSource()==scaleRight) - scaleRight_actionPerformed(); + viewport.setScaleRightWrapped(scaleRight.getState()); else if(evt.getSource()==seqLimits) seqLimits_itemStateChanged(); else if(evt.getSource()==viewBoxesMenuItem) - viewBoxesMenuItem_actionPerformed(); + viewport.setShowBoxes(viewBoxesMenuItem.getState()); else if(evt.getSource()==viewTextMenuItem) - viewTextMenuItem_actionPerformed(); + viewport.setShowText(viewTextMenuItem.getState()); else if(evt.getSource()==renderGapsMenuItem) - renderGapsMenuItem_actionPerformed(); + viewport.setRenderGaps(renderGapsMenuItem.getState()); else if(evt.getSource()==annotationPanelMenuItem) - annotationPanelMenuItem_actionPerformed(); + { + viewport.setShowAnnotation(annotationPanelMenuItem.getState()); + alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState()); + } else if(evt.getSource()==sequenceFeatures) { viewport.showSequenceFeatures(sequenceFeatures.getState()); @@ -397,10 +482,12 @@ public void itemStateChanged(ItemEvent evt) conservationMenuItem_actionPerformed(); else if(evt.getSource()==abovePIDThreshold) abovePIDThreshold_actionPerformed(); - else if(evt.getSource()==applyToAllGroups) - applyToAllGroups_actionPerformed(); + else if(evt.getSource()==applyToAllGroups) + viewport.setColourAppliesToAllGroups(applyToAllGroups.getState()); else if(evt.getSource()==autoCalculate) viewport.autocalculateConsensus = autoCalculate.getState(); + + alignPanel.repaint(); } public void actionPerformed(ActionEvent evt) { @@ -412,6 +499,12 @@ public void itemStateChanged(ItemEvent evt) loadTree_actionPerformed(); else if(source==loadApplication) launchFullApplication(); + else if (source == loadAnnotations) + loadAnnotations(); + else if (source == outputAnnotations) + outputAnnotations(true); + else if(source == outputFeatures) + outputFeatures(true, "Jalview"); else if(source==closeMenuItem) closeMenuItem_actionPerformed(); else if(source==copy) @@ -449,9 +542,9 @@ public void itemStateChanged(ItemEvent evt) else if(source==invertColSel) { viewport.invertColumnSelection(); alignPanel.repaint(); } else if(source==remove2LeftMenuItem) - remove2LeftMenuItem_actionPerformed(); + trimAlignment(true); else if(source==remove2RightMenuItem) - remove2RightMenuItem_actionPerformed(); + trimAlignment(false); else if(source==removeGappedColumnMenuItem) removeGappedColumnMenuItem_actionPerformed(); else if(source==removeAllGapsMenuItem) @@ -459,7 +552,9 @@ public void itemStateChanged(ItemEvent evt) else if(source==findMenuItem) findMenuItem_actionPerformed(); else if(source==font) - font_actionPerformed(); + new FontChooser(alignPanel); + else if (source == newView) + newView(); else if(source==showColumns) { viewport.showAllHiddenColumns(); alignPanel.repaint(); @@ -477,39 +572,43 @@ public void itemStateChanged(ItemEvent evt) viewport.hideAllSelectedSeqs(); } else if(source==featureSettings) - featureSettings_actionPerformed(); + new FeatureSettings(alignPanel); else if(source==overviewMenuItem) overviewMenuItem_actionPerformed(); else if(source==noColourmenuItem) - noColourmenuItem_actionPerformed(); + changeColour(null); else if(source==clustalColour) - clustalColour_actionPerformed(); + { + abovePIDThreshold.setState(false); + changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(), + viewport.alignment.getWidth())); + } else if(source==zappoColour) - zappoColour_actionPerformed(); + changeColour(new ZappoColourScheme()); else if(source==taylorColour) - taylorColour_actionPerformed(); + changeColour(new TaylorColourScheme()); else if(source==hydrophobicityColour) - hydrophobicityColour_actionPerformed(); + changeColour(new HydrophobicColourScheme()); else if(source==helixColour) - helixColour_actionPerformed(); + changeColour(new HelixColourScheme()); else if(source==strandColour) - strandColour_actionPerformed(); + changeColour(new StrandColourScheme()); else if(source==turnColour) - turnColour_actionPerformed(); + changeColour(new TurnColourScheme()); else if(source==buriedColour) - buriedColour_actionPerformed(); + changeColour(new BuriedColourScheme()); else if(source==nucleotideColour) - nucleotideColour_actionPerformed(); + changeColour(new NucleotideColourScheme()); else if(source==modifyPID) modifyPID_actionPerformed(); else if(source==modifyConservation) modifyConservation_actionPerformed(); else if(source==userDefinedColour) - userDefinedColour_actionPerformed(); + new UserDefinedColours(alignPanel, null); else if(source==PIDColour) - PIDColour_actionPerformed(); + changeColour(new PIDColourScheme()); else if(source==BLOSUM62Colour) - BLOSUM62Colour_actionPerformed(); + changeColour(new Blosum62ColourScheme()); else if(source==annotationColour) new AnnotationColourChooser(viewport, alignPanel); else if(source==sortPairwiseMenuItem) @@ -549,17 +648,76 @@ public void itemStateChanged(ItemEvent evt) protected void outputText_actionPerformed(ActionEvent e) { - CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); + CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); Frame frame = new Frame(); frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, "Alignment output - " + e.getActionCommand(), 600, 500); cap.setText(new AppletFormatAdapter().formatSequences(e.getActionCommand(), - viewport.getAlignment().getSequences(), + viewport.getAlignment(), viewport.showJVSuffix)); } + public void loadAnnotations() + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); + cap.setText("Paste your features / annotations file here."); + cap.setAnnotationImport(); + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300); + + } + + public String outputAnnotations(boolean displayTextbox) + { + String annotation = new AnnotationFile().printAnnotations( + viewport.alignment.getAlignmentAnnotation() ); + + if(displayTextbox) + { + + CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, + "Annotations", + 600, 500); + cap.setText(annotation); + } + + return annotation; + } + + public String outputFeatures(boolean displayTextbox, String format) + { + String features; + if (format.equalsIgnoreCase("Jalview")) + features = new FeaturesFile().printJalviewFormat( + viewport.alignment.getSequencesArray(), + viewport.featuresDisplayed); + else + features = new FeaturesFile().printGFFFormat( + viewport.alignment.getSequencesArray(), + viewport.featuresDisplayed); + + + if(displayTextbox) + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); + Frame frame = new Frame(); + frame.add(cap); + jalview.bin.JalviewLite.addFrame(frame, + "Features", + 600, 500); + + cap.setText(features); + } + + return features; + } + void launchFullApplication() { StringBuffer url = new StringBuffer(jalviewServletURL); @@ -579,6 +737,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=" + @@ -625,23 +789,28 @@ public void itemStateChanged(ItemEvent evt) public void closeMenuItem_actionPerformed() { - PaintRefresher.components.remove(viewport.alignment); + PaintRefresher.RemoveComponent(alignPanel); + PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); + PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); + if(PaintRefresher.components.size()==0 && viewport.applet==null) System.exit(0); this.dispose(); } - Stack historyList = new Stack(); - Stack redoList = new Stack(); + /** + * DOCUMENT ME! + */ void updateEditMenuBar() { - if (historyList.size() > 0) + + if (viewport.historyList.size() > 0) { undoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem) historyList.peek(); - undoMenuItem.setLabel("Undo " + hi.getDescription()); + CommandI command = (CommandI) viewport.historyList.peek(); + undoMenuItem.setLabel("Undo " + command.getDescription()); } else { @@ -649,11 +818,12 @@ public void itemStateChanged(ItemEvent evt) undoMenuItem.setLabel("Undo"); } - if (redoList.size() > 0) + if (viewport.redoList.size() > 0) { redoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem) redoList.peek(); - redoMenuItem.setLabel("Redo " + hi.getDescription()); + + CommandI command = (CommandI) viewport.redoList.peek(); + redoMenuItem.setLabel("Redo " + command.getDescription()); } else { @@ -662,37 +832,97 @@ public void itemStateChanged(ItemEvent evt) } } - public void addHistoryItem(HistoryItem hi) + public void addHistoryItem(CommandI command) { - historyList.push(hi); - updateEditMenuBar(); + if(command.getSize()>0) + { + viewport.historyList.push(command); + viewport.redoList.removeAllElements(); + updateEditMenuBar(); + viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + } } + /** + * DOCUMENT ME! + * + * @param e DOCUMENT ME! + */ protected void undoMenuItem_actionPerformed() { - HistoryItem hi = (HistoryItem) historyList.pop(); - redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); - restoreHistoryItem(hi); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + if(viewport.historyList.size()<1) + return; + + CommandI command = (CommandI)viewport.historyList.pop(); + viewport.redoList.push(command); + command.undoCommand(); + + AlignViewport originalSource = getOriginatingSource(command); + + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + updateEditMenuBar(); + originalSource.firePropertyChange("alignment", null,originalSource.alignment.getSequences()); } + /** + * DOCUMENT ME! + * + * @param e DOCUMENT ME! + */ protected void redoMenuItem_actionPerformed() { - HistoryItem hi = (HistoryItem) redoList.pop(); - restoreHistoryItem(hi); + if(viewport.redoList.size()<1) + return; + + CommandI command = (CommandI) viewport.redoList.pop(); + viewport.historyList.push(command); + command.doCommand(); + + AlignViewport originalSource = getOriginatingSource(command); + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null, originalSource.alignment.getSequences()); } - // used by undo and redo - void restoreHistoryItem(HistoryItem hi) + AlignViewport getOriginatingSource(CommandI command) { - hi.restore(); + 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; + } + } + } + } - updateEditMenuBar(); + 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); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + originalSource = viewport; + } + + + return originalSource; } public void moveSelectedSequences(boolean up) @@ -708,13 +938,13 @@ public void itemStateChanged(ItemEvent evt) for (int i = 1; i < viewport.alignment.getHeight(); i++) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(false).contains(seq)) + if (!sg.getSequences(null).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.getSequences(false).contains(temp)) + if (sg.getSequences(null).contains(temp)) { continue; } @@ -728,13 +958,13 @@ public void itemStateChanged(ItemEvent evt) for (int i = viewport.alignment.getHeight() - 2; i > -1; i--) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(true).contains(seq)) + if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.getSequences(true).contains(temp)) + if (sg.getSequences(viewport.hiddenRepSequences).contains(temp)) { continue; } @@ -759,7 +989,7 @@ public void itemStateChanged(ItemEvent evt) SequenceGroup sg = viewport.getSelectionGroup(); copiedSequences = new StringBuffer(); Hashtable orderedSeqs = new Hashtable(); - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.alignment.findIndex(seq); @@ -788,7 +1018,7 @@ public void itemStateChanged(ItemEvent evt) copiedHiddenColumns = null; - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = null; @@ -832,7 +1062,7 @@ public void itemStateChanged(ItemEvent evt) copiedSequences.append(seq.getName() + "\t" + startRes + "\t" + endRes + "\t" + - seq.getSequence(sg.getStartRes(), + seq.getSequenceAsString(sg.getStartRes(), sg.getEndRes() + 1) + "\n"); } @@ -845,8 +1075,6 @@ public void itemStateChanged(ItemEvent evt) protected void pasteThis_actionPerformed() { - addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, - HistoryItem.PASTE)); paste(false); } @@ -854,6 +1082,7 @@ public void itemStateChanged(ItemEvent evt) { try { + if (copiedSequences == null) { return; @@ -866,26 +1095,16 @@ public void itemStateChanged(ItemEvent evt) String name = st.nextToken(); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); - Sequence sequence = new Sequence(name, st.nextToken(), start, end); - - if (!newAlignment) - { - viewport.alignment.addSequence(sequence); - } - else - { - seqs.addElement(sequence); - } + seqs.addElement(new Sequence(name, st.nextToken(), start, end)); + } + SequenceI[] newSeqs = new SequenceI[seqs.size()]; + for (int i = 0; i < seqs.size(); i++) + { + newSeqs[i] = (SequenceI) seqs.elementAt(i); } if (newAlignment) { - SequenceI[] newSeqs = new SequenceI[seqs.size()]; - for (int i = 0; i < seqs.size(); i++) - { - newSeqs[i] = (SequenceI) seqs.elementAt(i); - } - String newtitle = new String("Copied sequences"); if (getTitle().startsWith("Copied sequences")) { @@ -909,14 +1128,12 @@ 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 { - viewport.setEndSeq(viewport.alignment.getHeight()); - viewport.alignment.getWidth(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + addSequences(newSeqs); } } @@ -925,6 +1142,30 @@ public void itemStateChanged(ItemEvent evt) } + void addSequences(SequenceI[] seqs) + { + for (int i = 0; i < seqs.length; i++) + { + viewport.alignment.addSequence(seqs[i]); + } + + //!newAlignment + addHistoryItem(new EditCommand( + "Add sequences", + EditCommand.PASTE, + seqs, + 0, + viewport.alignment.getWidth(), + viewport.alignment) + ); + + viewport.setEndSeq(viewport.alignment.getHeight()); + viewport.alignment.getWidth(); + viewport.firePropertyChange("alignment", null, + viewport.alignment.getSequences()); + + } + protected void cut_actionPerformed() { copy_actionPerformed(); @@ -933,62 +1174,62 @@ public void itemStateChanged(ItemEvent evt) protected void delete_actionPerformed() { - addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, - HistoryItem.HIDE)); - 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(); i++) + { + seq = sg.getSequenceAt(i); + seqs.addElement(seq); + } + - SequenceGroup sg = viewport.getSelectionGroup(); - boolean allSequences = false; - if(sg.getSize(false)==viewport.alignment.getHeight()) - allSequences = true; + // If the cut affects all sequences, remove highlighted columns + if (sg.getSize() == viewport.alignment.getHeight()) + { + viewport.getColumnSelection().removeElements(sg.getStartRes(), + sg.getEndRes() + 1); + } - 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); - // If the cut affects all sequences, remove highlighted columns - if (allSequences) - { - viewport.getColumnSelection().removeElements(sg.getStartRes(), - sg.getEndRes() + 1); - } + SequenceI [] cut = new SequenceI[seqs.size()]; + for(int i=0; i 0) { - addHistoryItem(new HistoryItem("Remove Left", viewport.alignment, - HistoryItem.HIDE)); - int min = colSel.getMin(); - viewport.getAlignment().trimLeft(min); - colSel.compensateForEdit(0, min); + if(trimLeft) + column = colSel.getMin(); + else + column = colSel.getMax(); - if (viewport.getSelectionGroup() != null) - { - viewport.getSelectionGroup().adjustForRemoveLeft(min); - } + SequenceI [] seqs; + if(viewport.getSelectionGroup()!=null) + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); + else + seqs = viewport.alignment.getSequencesArray(); - Vector groups = viewport.alignment.getGroups(); - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if (!sg.adjustForRemoveLeft(min)) - { - viewport.alignment.deleteGroup(sg); - } - } - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - } - } - public void remove2RightMenuItem_actionPerformed() - { - ColumnSelection colSel = viewport.getColumnSelection(); - if (colSel.size() > 0) - { - addHistoryItem(new HistoryItem("Remove Right", viewport.alignment, - HistoryItem.HIDE)); - int max = colSel.getMax(); - viewport.getAlignment().trimRight(max); - 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(); + for (int i = 0; i < groups.size(); i++) { SequenceGroup sg = (SequenceGroup) groups.elementAt(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() { - addHistoryItem(new HistoryItem("Remove Gapped Columns", - viewport.alignment, - HistoryItem.HIDE)); + int start = 0, end = viewport.alignment.getWidth()-1; - //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[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); + start = viewport.getSelectionGroup().getStartRes(); + end = viewport.getSelectionGroup().getEndRes(); + } + else + seqs = viewport.alignment.getSequencesArray(); - viewport.getAlignment().removeGaps(); - viewport.setStartRes(seq.findIndex(startRes)-1); + RemoveGapColCommand removeGapCols = + new RemoveGapColCommand("Remove Gapped Columns", + seqs, + start, end, + viewport.alignment); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - } + addHistoryItem(removeGapCols); - public void removeAllGapsMenuItem_actionPerformed() - { - addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment, - HistoryItem.HIDE)); + 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); + viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - SequenceI current; - int jSize; - - Vector seqs=null; + } - int start=0, end = viewport.alignment.getWidth(); + public void removeAllGapsMenuItem_actionPerformed() + { + int start = 0, end = viewport.alignment.getWidth()-1; - if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSequences(false) != null - && viewport.getSelectionGroup().getSize(false)>0) + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequences(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); - end = viewport.getSelectionGroup().getEndRes()+1; + end = viewport.getSelectionGroup().getEndRes(); } else - seqs = viewport.alignment.getSequences(); + seqs = viewport.alignment.getSequencesArray(); - for (int i = 0; i < seqs.size(); i++) - { - current = (SequenceI) seqs.elementAt(i); - jSize = current.getLength(); + //This is to maintain viewport position on first residue + //of first sequence + SequenceI seq = viewport.alignment.getSequenceAt(0); + int startRes = seq.findPosition(viewport.startRes); - // Removing a range is much quicker than removing gaps - // one by one for long sequences - int j = start; - int rangeStart=-1, rangeEnd=-1; + addHistoryItem(new RemoveGapsCommand("Remove Gaps", + seqs, + start, end, + viewport.alignment)); - 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); - } - } viewport.setStartRes(seq.findIndex(startRes)-1); + viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + } - public void alignmentChanged() + public void findMenuItem_actionPerformed() { - viewport.alignment.padGaps(); - if(viewport.autocalculateConsensus) - { - viewport.updateConsensus(); - viewport.updateConservation(); - } - - resetAllColourSchemes(); - if(alignPanel.overviewPanel!=null) - alignPanel.overviewPanel.updateOverviewImage(); - - viewport.alignment.adjustSequenceAnnotations(); - alignPanel.repaint(); + new Finder(alignPanel); } - void resetAllColourSchemes() + public void newView() { - ColourSchemeI cs = viewport.globalColourScheme; - if(cs!=null) + AlignmentI newal; + if (viewport.hasHiddenRows) + newal = new Alignment(viewport.getAlignment(). + getHiddenSequences() + .getFullAlignment(). + getSequencesArray()); + else + newal = new Alignment(viewport.alignment.getSequencesArray()); + + if(viewport.alignment.getAlignmentAnnotation()!=null) { - if (cs instanceof ClustalxColourScheme) + for(int i=0; i -1) + title = title.substring(0, title.indexOf("(View")); + title+= "(View "+viewSize+")"; - public void findMenuItem_actionPerformed() - { - new Finder(alignPanel); - } + newaf.setTitle(title.toString()); - public void font_actionPerformed() - { - new FontChooser(alignPanel); - } + + newaf.viewport.historyList = viewport.historyList; + newaf.viewport.redoList = viewport.redoList; + + } public void seqLimits_itemStateChanged() @@ -1281,53 +1500,6 @@ public void itemStateChanged(ItemEvent evt) } - protected void scaleAbove_actionPerformed() - { - viewport.setScaleAboveWrapped(scaleAbove.getState()); - alignPanel.repaint(); - } - - protected void scaleLeft_actionPerformed() - { - viewport.setScaleLeftWrapped(scaleLeft.getState()); - alignPanel.repaint(); - } - - protected void scaleRight_actionPerformed() - { - viewport.setScaleRightWrapped(scaleRight.getState()); - alignPanel.repaint(); - } - - public void viewBoxesMenuItem_actionPerformed() - { - viewport.setShowBoxes(viewBoxesMenuItem.getState()); - alignPanel.repaint(); - } - - public void viewTextMenuItem_actionPerformed() - { - viewport.setShowText(viewTextMenuItem.getState()); - alignPanel.repaint(); - } - - protected void renderGapsMenuItem_actionPerformed() - { - viewport.setRenderGaps(renderGapsMenuItem.getState()); - alignPanel.repaint(); - } - - public void annotationPanelMenuItem_actionPerformed() - { - viewport.setShowAnnotation(annotationPanelMenuItem.getState()); - alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState()); - } - - public void featureSettings_actionPerformed() - { - new FeatureSettings(viewport, alignPanel); - } - public void overviewMenuItem_actionPerformed() { if (alignPanel.overviewPanel != null) @@ -1356,62 +1528,6 @@ public void itemStateChanged(ItemEvent evt) } - protected void noColourmenuItem_actionPerformed() - { - changeColour(null); - } - - public void clustalColour_actionPerformed() - { - abovePIDThreshold.setState(false); - changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(), - viewport.alignment.getWidth())); - } - - public void zappoColour_actionPerformed() - { - changeColour(new ZappoColourScheme()); - } - - public void taylorColour_actionPerformed() - { - changeColour(new TaylorColourScheme()); - } - - public void hydrophobicityColour_actionPerformed() - { - changeColour(new HydrophobicColourScheme()); - } - - public void helixColour_actionPerformed() - { - changeColour(new HelixColourScheme()); - } - - public void strandColour_actionPerformed() - { - changeColour(new StrandColourScheme()); - } - - public void turnColour_actionPerformed() - { - changeColour(new TurnColourScheme()); - } - - public void buriedColour_actionPerformed() - { - changeColour(new BuriedColourScheme()); - } - - public void nucleotideColour_actionPerformed() - { - changeColour(new NucleotideColourScheme()); - } - - protected void applyToAllGroups_actionPerformed() - { - viewport.setColourAppliesToAllGroups(applyToAllGroups.getState()); - } void changeColour(ColourSchemeI cs) { @@ -1455,7 +1571,7 @@ public void itemStateChanged(ItemEvent evt) cs.setConservation(null); } - cs.setConsensus(viewport.vconsensus); + cs.setConsensus(viewport.hconsensus); } viewport.setGlobalColourScheme(cs); @@ -1474,7 +1590,9 @@ public void itemStateChanged(ItemEvent evt) } if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg.getSequences(true), sg.getWidth()); + sg.cs = new ClustalxColourScheme( + sg.getSequences(viewport.hiddenRepSequences), + sg.getWidth()); } else { @@ -1494,7 +1612,8 @@ public void itemStateChanged(ItemEvent evt) || cs instanceof Blosum62ColourScheme) { sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, sg.getWidth())); + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth())); } else sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); @@ -1503,7 +1622,7 @@ public void itemStateChanged(ItemEvent evt) { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.getSequences(true), 0, + sg.getSequences(viewport.hiddenRepSequences), 0, viewport.alignment.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -1573,42 +1692,29 @@ public void itemStateChanged(ItemEvent evt) modifyPID_actionPerformed(); } - public void userDefinedColour_actionPerformed() - { - new UserDefinedColours(alignPanel, null); - } - - public void PIDColour_actionPerformed() - { - changeColour(new PIDColourScheme()); - } - public void BLOSUM62Colour_actionPerformed() - { - changeColour(new Blosum62ColourScheme()); - } public void sortPairwiseMenuItem_actionPerformed() { - 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() { - addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, - HistoryItem.SORT)); + // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, + // HistoryItem.SORT)); AlignmentSorter.sortByID(viewport.getAlignment()); alignPanel.repaint(); } public void sortGroupMenuItem_actionPerformed() { - addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, - HistoryItem.SORT)); + // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, + // HistoryItem.SORT)); AlignmentSorter.sortByGroup(viewport.getAlignment()); alignPanel.repaint(); @@ -1622,7 +1728,7 @@ public void itemStateChanged(ItemEvent evt) public void pairwiseAlignmentMenuItem_actionPerformed() { if (viewport.getSelectionGroup()!=null - && viewport.getSelectionGroup().getSize(false) > 1) + && viewport.getSelectionGroup().getSize() > 1) { Frame frame = new Frame(); frame.add(new PairwiseAlignPanel(alignPanel)); @@ -1652,8 +1758,8 @@ public void itemStateChanged(ItemEvent evt) } if ( (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize(false) < 4 && - viewport.getSelectionGroup().getSize(false) > 0) + viewport.getSelectionGroup().getSize() < 4 && + viewport.getSelectionGroup().getSize() > 0) || viewport.getAlignment().getHeight() < 4) { return; @@ -1686,7 +1792,7 @@ public void itemStateChanged(ItemEvent evt) protected void avTreeBlosumMenuItem_actionPerformed() { - NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62PID"); + NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62"); } void NewTreePanel(String type, String pwType, String title) @@ -1712,7 +1818,7 @@ public void itemStateChanged(ItemEvent evt) } if ( (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize(false) > 1) + viewport.getSelectionGroup().getSize() > 1) || (viewport.getSelectionGroup() == null && viewport.alignment.getHeight() > 1)) { @@ -1730,7 +1836,7 @@ public void itemStateChanged(ItemEvent evt) { CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); cap.setText("Paste your Newick tree file here."); - cap.treeImport = true; + cap.setTreeImport(); Frame frame = new Frame(); frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, "Paste Newick file ", 400, 300); @@ -1754,8 +1860,8 @@ public void itemStateChanged(ItemEvent evt) { public void actionPerformed(ActionEvent evt) { - addHistoryItem(new HistoryItem("Sort", viewport.alignment, - HistoryItem.SORT)); + // addHistoryItem(new HistoryItem("Sort", viewport.alignment, + // HistoryItem.SORT)); AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree()); alignPanel.repaint(); } @@ -1868,7 +1974,11 @@ public void itemStateChanged(ItemEvent evt) protected MenuBar alignFrameMenuBar = new MenuBar(); protected Menu fileMenu = new Menu("File"); protected MenuItem loadApplication = new MenuItem("View in Full Application"); - protected MenuItem loadTree = new MenuItem("Load Associated Tree"); + protected MenuItem loadTree = new MenuItem("Load Associated Tree ..."); + protected MenuItem loadAnnotations = new MenuItem("Load Features/Annotations ..."); + protected MenuItem outputFeatures = new MenuItem("Export Features ..."); + protected MenuItem outputAnnotations = new MenuItem("Export Annotations ..."); + protected MenuItem closeMenuItem = new MenuItem("Close"); protected Menu editMenu = new Menu("Edit"); protected Menu viewMenu = new Menu("View"); @@ -1917,8 +2027,7 @@ public void itemStateChanged(ItemEvent evt) protected CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem(); protected CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem(); MenuItem findMenuItem = new MenuItem(); - Menu searchMenu = new Menu(); - protected CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem(); + protected CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem(); protected MenuItem nucleotideColour = new MenuItem(); MenuItem deleteGroups = new MenuItem(); MenuItem delete = new MenuItem(); @@ -1946,8 +2055,9 @@ public void itemStateChanged(ItemEvent evt) protected CheckboxMenuItem seqLimits = new CheckboxMenuItem(); Panel embeddedMenu; Label embeddedEdit; - Label embeddedSearch; + Label embeddedSelect; Label embeddedView; + Label embeddedFormat; Label embeddedColour; Label embeddedFile; Label embeddedHelp; @@ -1980,6 +2090,9 @@ public void itemStateChanged(ItemEvent evt) loadApplication.addActionListener(this); loadTree.addActionListener(this); + loadAnnotations.addActionListener(this); + outputFeatures.addActionListener(this); + outputAnnotations.addActionListener(this); selectAllSequenceMenuItem.addActionListener(this); deselectAllSequenceMenuItem.addActionListener(this); invertSequenceMenuItem.addActionListener(this); @@ -2014,7 +2127,6 @@ public void itemStateChanged(ItemEvent evt) averageDistanceTreeMenuItem.addActionListener(this); neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity"); neighbourTreeMenuItem.addActionListener(this); - alignFrameMenuBar.setFont(new java.awt.Font("Verdana", 0, 11)); statusBar.setBackground(Color.white); statusBar.setFont(new java.awt.Font("Verdana", 0, 11)); statusBar.setText("Status bar"); @@ -2070,9 +2182,7 @@ public void itemStateChanged(ItemEvent evt) renderGapsMenuItem.addItemListener(this); findMenuItem.setLabel("Find..."); findMenuItem.addActionListener(this); - searchMenu.setLabel("Search"); - - abovePIDThreshold.setLabel("Above Identity Threshold"); + abovePIDThreshold.setLabel("Above Identity Threshold"); abovePIDThreshold.addItemListener(this); nucleotideColour.setLabel("Nucleotide"); nucleotideColour.addActionListener(this); @@ -2146,22 +2256,34 @@ public void itemStateChanged(ItemEvent evt) showSeqs.addActionListener(this); hideColumns.addActionListener(this); hideSequences.addActionListener(this); - - + formatMenu.setLabel("Format"); + selectMenu.setLabel("Select"); + newView.setLabel("New View"); + newView.addActionListener(this); alignFrameMenuBar.add(fileMenu); alignFrameMenuBar.add(editMenu); - alignFrameMenuBar.add(searchMenu); - alignFrameMenuBar.add(viewMenu); - alignFrameMenuBar.add(colourMenu); + alignFrameMenuBar.add(selectMenu); + alignFrameMenuBar.add(viewMenu); + alignFrameMenuBar.add(formatMenu); + alignFrameMenuBar.add(colourMenu); alignFrameMenuBar.add(calculateMenu); alignFrameMenuBar.add(helpMenu); + fileMenu.add(inputText); + fileMenu.add(loadTree); + fileMenu.add(loadAnnotations); + + fileMenu.addSeparator(); fileMenu.add(outputTextboxMenu); + fileMenu.add(outputFeatures); + fileMenu.add(outputAnnotations); + if(jalviewServletURL!=null) fileMenu.add(loadApplication); + fileMenu.addSeparator(); - fileMenu.add(loadTree); fileMenu.add(closeMenuItem); + editMenu.add(undoMenuItem); editMenu.add(redoMenuItem); editMenu.add(cut); @@ -2169,34 +2291,17 @@ public void itemStateChanged(ItemEvent evt) editMenu.add(pasteMenu); editMenu.add(delete); editMenu.addSeparator(); - editMenu.add(selectAllSequenceMenuItem); - editMenu.add(deselectAllSequenceMenuItem); - editMenu.add(invertSequenceMenuItem); - editMenu.add(invertColSel); - editMenu.add(deleteGroups); - editMenu.addSeparator(); editMenu.add(remove2LeftMenuItem); editMenu.add(remove2RightMenuItem); editMenu.add(removeGappedColumnMenuItem); editMenu.add(removeAllGapsMenuItem); editMenu.add(removeRedundancyMenuItem); - searchMenu.add(findMenuItem); - viewMenu.add(font); - viewMenu.addSeparator(); + viewMenu.add(newView); + viewMenu.addSeparator(); viewMenu.add(menu1); viewMenu.add(menu2); viewMenu.addSeparator(); - viewMenu.add(wrapMenuItem); - viewMenu.add(scaleAbove); - viewMenu.add(scaleLeft); - viewMenu.add(scaleRight); - viewMenu.addSeparator(); - viewMenu.add(seqLimits); - viewMenu.add(viewBoxesMenuItem); - viewMenu.add(viewTextMenuItem); - viewMenu.add(colourTextMenuItem); - viewMenu.add(renderGapsMenuItem); - viewMenu.add(annotationPanelMenuItem); + viewMenu.add(annotationPanelMenuItem); viewMenu.addSeparator(); viewMenu.add(sequenceFeatures); viewMenu.add(featureSettings); @@ -2246,40 +2351,53 @@ public void itemStateChanged(ItemEvent evt) menu1.add(showSeqs); menu2.add(hideColumns); menu2.add(hideSequences); + formatMenu.add(font); + formatMenu.add(seqLimits); + formatMenu.add(wrapMenuItem); + formatMenu.add(scaleAbove); + formatMenu.add(scaleLeft); + formatMenu.add(scaleRight); + formatMenu.add(viewBoxesMenuItem); + formatMenu.add(viewTextMenuItem); + formatMenu.add(colourTextMenuItem); + formatMenu.add(renderGapsMenuItem); + selectMenu.add(findMenuItem); + selectMenu.addSeparator(); + selectMenu.add(selectAllSequenceMenuItem); + selectMenu.add(deselectAllSequenceMenuItem); + selectMenu.add(invertSequenceMenuItem); + selectMenu.add(invertColSel); + selectMenu.add(deleteGroups); } public void setEmbedded() { embeddedMenu = new Panel(); - embeddedEdit = new Label(); - embeddedSearch = new Label(); - embeddedView = new Label(); - embeddedColour = new Label(); - embeddedFile = new Label(); - embeddedHelp = new Label(); - embeddedCalculate = new Label(); + embeddedEdit = new Label("Edit"); + embeddedSelect = new Label("Select"); + embeddedView = new Label("View"); + embeddedFormat = new Label("Format"); + embeddedColour = new Label("Colour"); + embeddedFile = new Label("File"); + embeddedHelp = new Label("Help"); + embeddedCalculate = new Label("Calculate"); flowLayout1 = new FlowLayout(); embeddedMenu.setBackground(Color.lightGray); embeddedMenu.setLayout(flowLayout1); - embeddedEdit.setText("Edit"); embeddedEdit.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedSearch.setText("Search"); - embeddedSearch.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedView.setText("View"); + embeddedSelect.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); embeddedView.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedColour.setText("Colour"); + embeddedFormat.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); embeddedColour.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); embeddedFile.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedFile.setText("File"); embeddedHelp.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedHelp.setText("Help"); embeddedCalculate.setFont(new java.awt.Font("Arial", Font.PLAIN, 10)); - embeddedCalculate.setText("Calculate"); embeddedMenu.add(embeddedFile); embeddedMenu.add(embeddedEdit); - embeddedMenu.add(embeddedSearch); + embeddedMenu.add(embeddedSelect); embeddedMenu.add(embeddedView); + embeddedMenu.add(embeddedFormat); embeddedMenu.add(embeddedColour); embeddedMenu.add(embeddedCalculate); embeddedMenu.add(embeddedHelp); @@ -2288,20 +2406,19 @@ public void itemStateChanged(ItemEvent evt) flowLayout1.setVgap(0); embeddedFile.addMouseListener(this); embeddedEdit.addMouseListener(this); - embeddedSearch.addMouseListener(this); + embeddedSelect.addMouseListener(this); embeddedView.addMouseListener(this); + embeddedFormat.addMouseListener(this); embeddedColour.addMouseListener(this); embeddedCalculate.addMouseListener(this); embeddedHelp.addMouseListener(this); - // setVisible(false); fileMenu.remove(closeMenuItem); fileMenu.remove(3); // Seperator viewport.applet.setLayout(new BorderLayout()); viewport.applet.add(embeddedMenu, BorderLayout.NORTH); viewport.applet.add(statusBar, BorderLayout.SOUTH); - // viewport.applet.validate(); alignPanel.setSize(viewport.applet.size().width, viewport.applet.size().height - embeddedMenu.HEIGHT - statusBar.HEIGHT); @@ -2314,7 +2431,7 @@ public void itemStateChanged(ItemEvent evt) PopupMenu filePopup, editPopup, searchPopup, - viewPopup, colourPopup, calculatePopup, helpPopup; + viewPopup, formatPopup, colourPopup, calculatePopup, helpPopup; MenuItem featureSettings = new MenuItem(); CheckboxMenuItem sequenceFeatures = new CheckboxMenuItem(); MenuItem annotationColour = new MenuItem(); @@ -2325,6 +2442,9 @@ public void itemStateChanged(ItemEvent evt) Menu menu2 = new Menu(); MenuItem hideColumns = new MenuItem(); MenuItem hideSequences = new MenuItem(); + Menu formatMenu = new Menu(); + Menu selectMenu = new Menu(); + MenuItem newView = new MenuItem(); public void mousePressed(MouseEvent evt) { @@ -2338,14 +2458,18 @@ public void itemStateChanged(ItemEvent evt) { popup = editPopup = genPopupMenu(editPopup, editMenu); } - else if(source==embeddedSearch) + else if(source==embeddedSelect) { - popup = searchPopup = genPopupMenu(searchPopup, searchMenu); + popup = searchPopup = genPopupMenu(searchPopup, selectMenu); } else if(source==embeddedView) { popup = viewPopup = genPopupMenu(viewPopup, viewMenu); } + else if (source ==embeddedFormat) + { + popup = formatPopup = genPopupMenu(formatPopup, formatMenu); + } else if(source==embeddedColour) { popup = colourPopup = genPopupMenu(colourPopup, colourMenu);