+ case KeyEvent.VK_S:\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.setCursorRow();\r
+ }\r
+ break;\r
+ case KeyEvent.VK_P:\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.setCursorPosition();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_ENTER:\r
+ case KeyEvent.VK_COMMA:\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.setCursorRowAndColumn();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_Q:\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.setSelectionAreaAtCursor(true);\r
+ }\r
+ break;\r
+ case KeyEvent.VK_M:\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.setSelectionAreaAtCursor(false);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_F2:\r
+ viewport.cursorMode = !viewport.cursorMode;\r
+ statusBar.setText("Keyboard editing mode is "\r
+ + (viewport.cursorMode ? "on" : "off"));\r
+ if (viewport.cursorMode)\r
+ {\r
+ alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes;\r
+ alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq;\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_F:\r
+ if (evt.isControlDown())\r
+ {\r
+ findMenuItem_actionPerformed();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_H:\r
+ {\r
+ boolean toggleSeqs = !evt.isControlDown();\r
+ boolean toggleCols = !evt.isShiftDown();\r
+ toggleHiddenRegions(toggleSeqs, toggleCols);\r
+ break;\r
+ }\r
+\r
+ case KeyEvent.VK_PAGE_UP:\r
+ if (viewport.wrapAlignment)\r
+ {\r
+ alignPanel.scrollUp(true);\r
+ }\r
+ else\r
+ {\r
+ alignPanel.setScrollValues(viewport.startRes, viewport.startSeq\r
+ - viewport.endSeq + viewport.startSeq);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_PAGE_DOWN:\r
+ if (viewport.wrapAlignment)\r
+ {\r
+ alignPanel.scrollUp(false);\r
+ }\r
+ else\r
+ {\r
+ alignPanel.setScrollValues(viewport.startRes, viewport.startSeq\r
+ + viewport.endSeq - viewport.startSeq);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_Z:\r
+ if (evt.isControlDown())\r
+ {\r
+ undoMenuItem_actionPerformed();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_Y:\r
+ if (evt.isControlDown())\r
+ {\r
+ redoMenuItem_actionPerformed();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_L:\r
+ if (evt.isControlDown())\r
+ {\r
+ trimAlignment(true);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_R:\r
+ if (evt.isControlDown())\r
+ {\r
+ trimAlignment(false);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_E:\r
+ if (evt.isControlDown())\r
+ {\r
+ if (evt.isShiftDown())\r
+ {\r
+ this.removeAllGapsMenuItem_actionPerformed();\r
+ }\r
+ else\r
+ {\r
+ removeGappedColumnMenuItem_actionPerformed();\r
+ }\r
+ }\r
+ break;\r
+ case KeyEvent.VK_I:\r
+ if (evt.isControlDown())\r
+ {\r
+ if (evt.isAltDown())\r
+ {\r
+ invertColSel_actionPerformed();\r
+ }\r
+ else\r
+ {\r
+ invertSequenceMenuItem_actionPerformed();\r
+ }\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_U:\r
+ if (evt.isControlDown())\r
+ {\r
+ this.deleteGroups_actionPerformed();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_T:\r
+ if (evt.isControlDown())\r
+ {\r
+ newView(null);\r
+ }\r
+ break;\r
+\r
+ }\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+\r
+ /**\r
+ * called by key handler and the hide all/show all menu items\r
+ * \r
+ * @param toggleSeqs\r
+ * @param toggleCols\r
+ */\r
+ private void toggleHiddenRegions(boolean toggleSeqs, boolean toggleCols)\r
+ {\r
+ boolean hide = false;\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ if (!toggleSeqs && !toggleCols)\r
+ {\r
+ // Hide everything by the current selection - this is a hack - we do the\r
+ // invert and then hide\r
+ // first check that there will be visible columns after the invert.\r
+ if ((viewport.getColumnSelection() != null && viewport.getColumnSelection().getSelected() != null && viewport.getColumnSelection()\r
+ .getSelected().size() > 0)\r
+ || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg\r
+ .getEndRes()))\r
+ {\r
+ // now invert the sequence set, if required - empty selection implies\r
+ // that no hiding is required.\r
+ if (sg != null)\r
+ {\r
+ invertSequenceMenuItem_actionPerformed();\r
+ sg = viewport.getSelectionGroup();\r
+ toggleSeqs = true;\r
+\r
+ }\r
+ viewport.expandColSelection(sg, true);\r
+ // finally invert the column selection and get the new sequence\r
+ // selection and indicate it should be hidden.\r
+ invertColSel_actionPerformed();\r
+ toggleCols = true;\r
+ }\r
+ }\r
+\r
+ if (toggleSeqs)\r
+ {\r
+ if (sg != null && sg.getSize() != viewport.getAlignment().getHeight())\r
+ {\r
+ hide = true;\r
+ viewport.hideAllSelectedSeqs();\r
+ }\r
+ else if (!(toggleCols && viewport.getColumnSelection().getSelected().size() > 0))\r
+ {\r
+ viewport.showAllHiddenSeqs();\r
+ }\r
+ }\r
+\r
+ if (toggleCols)\r
+ {\r
+ if (viewport.getColumnSelection().getSelected().size() > 0)\r
+ {\r
+ viewport.hideSelectedColumns();\r
+ if (!toggleSeqs)\r
+ {\r
+ viewport.setSelectionGroup(sg);\r
+ }\r
+ }\r
+ else if (!hide)\r
+ {\r
+ viewport.showAllHiddenColumns();\r
+ }\r
+ }\r
+ }\r
+\r
+ public void keyReleased(KeyEvent evt)\r
+ {\r
+ }\r
+\r
+ public void keyTyped(KeyEvent evt)\r
+ {\r
+ }\r
+\r
+ public void itemStateChanged(ItemEvent evt)\r
+ {\r
+ if (evt.getSource() == displayNonconservedMenuItem)\r
+ {\r
+ displayNonconservedMenuItem_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == colourTextMenuItem)\r
+ {\r
+ colourTextMenuItem_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == wrapMenuItem)\r
+ {\r
+ wrapMenuItem_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == scaleAbove)\r
+ {\r
+ viewport.setScaleAboveWrapped(scaleAbove.getState());\r
+ }\r
+ else if (evt.getSource() == scaleLeft)\r
+ {\r
+ viewport.setScaleLeftWrapped(scaleLeft.getState());\r
+ }\r
+ else if (evt.getSource() == scaleRight)\r
+ {\r
+ viewport.setScaleRightWrapped(scaleRight.getState());\r
+ }\r
+ else if (evt.getSource() == seqLimits)\r
+ {\r
+ seqLimits_itemStateChanged();\r
+ }\r
+ else if (evt.getSource() == viewBoxesMenuItem)\r
+ {\r
+ viewport.setShowBoxes(viewBoxesMenuItem.getState());\r
+ }\r
+ else if (evt.getSource() == viewTextMenuItem)\r
+ {\r
+ viewport.setShowText(viewTextMenuItem.getState());\r
+ }\r
+ else if (evt.getSource() == renderGapsMenuItem)\r
+ {\r
+ viewport.setRenderGaps(renderGapsMenuItem.getState());\r
+ }\r
+ else if (evt.getSource() == annotationPanelMenuItem)\r
+ {\r
+ viewport.setShowAnnotation(annotationPanelMenuItem.getState());\r
+ alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());\r
+ }\r
+ else if (evt.getSource() == sequenceFeatures)\r
+ {\r
+ viewport.showSequenceFeatures(sequenceFeatures.getState());\r
+ alignPanel.seqPanel.seqCanvas.repaint();\r
+ }\r
+ else if (evt.getSource() == conservationMenuItem)\r
+ {\r
+ conservationMenuItem_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == abovePIDThreshold)\r
+ {\r
+ abovePIDThreshold_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == applyToAllGroups)\r
+ {\r
+ viewport.setColourAppliesToAllGroups(applyToAllGroups.getState());\r
+ }\r
+ else if (evt.getSource() == autoCalculate)\r
+ {\r
+ viewport.autoCalculateConsensus = autoCalculate.getState();\r
+ }\r
+ else if (evt.getSource() == sortByTree)\r
+ {\r
+ viewport.sortByTree = sortByTree.getState();\r
+ }\r
+ else if (evt.getSource() == this.centreColumnLabelFlag)\r
+ {\r
+ centreColumnLabelFlag_stateChanged();\r
+ }\r
+ else if (evt.getSource() == this.followMouseOverFlag)\r
+ {\r
+ mouseOverFlag_stateChanged();\r
+ }\r
+ else if (evt.getSource() == showGroupConsensus)\r
+ {\r
+ showGroupConsensus_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == showGroupConservation)\r
+ {\r
+ showGroupConservation_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == showSequenceLogo)\r
+ {\r
+ showSequenceLogo_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == showConsensusHistogram)\r
+ {\r
+ showConsensusHistogram_actionPerformed();\r
+ }\r
+ else if (evt.getSource() == applyAutoAnnotationSettings)\r
+ {\r
+ applyAutoAnnotationSettings_actionPerformed();\r
+ }\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+\r
+ private void mouseOverFlag_stateChanged()\r
+ {\r
+ viewport.followHighlight = followMouseOverFlag.getState();\r
+ // TODO: could kick the scrollTo mechanism to reset view for current\r
+ // searchresults.\r
+ }\r
+\r
+ private void centreColumnLabelFlag_stateChanged()\r
+ {\r
+ viewport.centreColumnLabels = centreColumnLabelFlag.getState();\r
+ this.alignPanel.annotationPanel.repaint();\r
+ }\r
+\r
+ public void actionPerformed(ActionEvent evt)\r
+ {\r
+ Object source = evt.getSource();\r
+\r
+ if (source == inputText)\r
+ {\r
+ inputText_actionPerformed();\r
+ }\r
+ else if (source == loadTree)\r
+ {\r
+ loadTree_actionPerformed();\r
+ }\r
+ else if (source == loadApplication)\r
+ {\r
+ launchFullApplication();\r
+ }\r
+ else if (source == loadAnnotations)\r
+ {\r
+ loadAnnotations();\r
+ }\r
+ else if (source == outputAnnotations)\r
+ {\r
+ outputAnnotations(true);\r
+ }\r
+ else if (source == outputFeatures)\r
+ {\r
+ outputFeatures(true, "Jalview");\r
+ }\r
+ else if (source == closeMenuItem)\r
+ {\r
+ closeMenuItem_actionPerformed();\r
+ }\r
+ else if (source == copy)\r
+ {\r
+ copy_actionPerformed();\r
+ }\r
+ else if (source == undoMenuItem)\r
+ {\r
+ undoMenuItem_actionPerformed();\r
+ }\r
+ else if (source == redoMenuItem)\r
+ {\r
+ redoMenuItem_actionPerformed();\r
+ }\r
+ else if (source == inputText)\r
+ {\r
+ inputText_actionPerformed();\r
+ }\r
+ else if (source == closeMenuItem)\r
+ {\r
+ closeMenuItem_actionPerformed();\r
+ }\r
+ else if (source == undoMenuItem)\r
+ {\r
+ undoMenuItem_actionPerformed();\r
+ }\r
+ else if (source == redoMenuItem)\r
+ {\r
+ redoMenuItem_actionPerformed();\r
+ }\r
+ else if (source == copy)\r
+ {\r
+ copy_actionPerformed();\r
+ }\r
+ else if (source == pasteNew)\r
+ {\r
+ pasteNew_actionPerformed();\r
+ }\r
+ else if (source == pasteThis)\r
+ {\r
+ pasteThis_actionPerformed();\r
+ }\r
+ else if (source == cut)\r
+ {\r
+ cut_actionPerformed();\r
+ }\r
+ else if (source == delete)\r
+ {\r
+ delete_actionPerformed();\r
+ }\r
+ else if (source == grpsFromSelection)\r
+ {\r
+ makeGrpsFromSelection_actionPerformed();\r
+ }\r
+ else if (source == deleteGroups)\r
+ {\r
+ deleteGroups_actionPerformed();\r
+ }\r
+ else if (source == selectAllSequenceMenuItem)\r
+ {\r
+ selectAllSequenceMenuItem_actionPerformed();\r
+ }\r
+ else if (source == deselectAllSequenceMenuItem)\r
+ {\r
+ deselectAllSequenceMenuItem_actionPerformed();\r
+ }\r
+ else if (source == invertSequenceMenuItem)\r
+ {\r
+ invertSequenceMenuItem_actionPerformed();\r
+ }\r
+ else if (source == invertColSel)\r
+ {\r
+ viewport.invertColumnSelection();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == remove2LeftMenuItem)\r
+ {\r
+ trimAlignment(true);\r
+ }\r
+ else if (source == remove2RightMenuItem)\r
+ {\r
+ trimAlignment(false);\r
+ }\r
+ else if (source == removeGappedColumnMenuItem)\r
+ {\r
+ removeGappedColumnMenuItem_actionPerformed();\r
+ }\r
+ else if (source == removeAllGapsMenuItem)\r
+ {\r
+ removeAllGapsMenuItem_actionPerformed();\r
+ }\r
+ else if (source == findMenuItem)\r
+ {\r
+ findMenuItem_actionPerformed();\r
+ }\r
+ else if (source == font)\r
+ {\r
+ new FontChooser(alignPanel);\r
+ }\r
+ else if (source == newView)\r
+ {\r
+ newView(null);\r
+ }\r
+ else if (source == showColumns)\r
+ {\r
+ viewport.showAllHiddenColumns();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == showSeqs)\r
+ {\r
+ viewport.showAllHiddenSeqs();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == hideColumns)\r
+ {\r
+ viewport.hideSelectedColumns();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == hideSequences\r
+ && viewport.getSelectionGroup() != null)\r
+ {\r
+ viewport.hideAllSelectedSeqs();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == hideAllButSelection)\r
+ {\r
+ toggleHiddenRegions(false, false);\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == hideAllSelection)\r
+ {\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ viewport.expandColSelection(sg, false);\r
+ viewport.hideAllSelectedSeqs();\r
+ viewport.hideSelectedColumns();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == showAllHidden)\r
+ {\r
+ viewport.showAllHiddenColumns();\r
+ viewport.showAllHiddenSeqs();\r
+ alignPanel.paintAlignment(true);\r
+ }\r
+ else if (source == showGroupConsensus)\r
+ {\r
+ showGroupConsensus_actionPerformed();\r
+ }\r
+ else if (source == showGroupConservation)\r
+ {\r
+ showGroupConservation_actionPerformed();\r
+ }\r
+ else if (source == showSequenceLogo)\r
+ {\r
+ showSequenceLogo_actionPerformed();\r
+ }\r
+ else if (source == showConsensusHistogram)\r
+ {\r
+ showConsensusHistogram_actionPerformed();\r
+ }\r
+ else if (source == applyAutoAnnotationSettings)\r
+ {\r
+ applyAutoAnnotationSettings_actionPerformed();\r
+ }\r
+ else if (source == featureSettings)\r
+ {\r
+ new FeatureSettings(alignPanel);\r
+ }\r
+ else if (source == alProperties)\r
+ {\r
+ StringBuffer contents = new jalview.io.AlignmentProperties(\r
+ viewport.getAlignment()).formatAsString();\r
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this);\r
+ cap.setText(contents.toString());\r
+ Frame frame = new Frame();\r
+ frame.add(cap);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Alignment Properties: "\r
+ + getTitle(), 400, 250);\r
+ }\r
+ else if (source == overviewMenuItem)\r
+ {\r
+ overviewMenuItem_actionPerformed();\r
+ }\r
+ else if (source == noColourmenuItem)\r
+ {\r
+ changeColour(null);\r
+ }\r
+ else if (source == clustalColour)\r
+ {\r
+ abovePIDThreshold.setState(false);\r
+ changeColour(new ClustalxColourScheme(viewport.getAlignment(),null));\r
+ }\r
+ else if (source == zappoColour)\r
+ {\r
+ changeColour(new ZappoColourScheme());\r
+ }\r
+ else if (source == taylorColour)\r
+ {\r
+ changeColour(new TaylorColourScheme());\r
+ }\r
+ else if (source == hydrophobicityColour)\r
+ {\r
+ changeColour(new HydrophobicColourScheme());\r
+ }\r
+ else if (source == helixColour)\r
+ {\r
+ changeColour(new HelixColourScheme());\r
+ }\r
+ else if (source == strandColour)\r
+ {\r
+ changeColour(new StrandColourScheme());\r
+ }\r
+ else if (source == turnColour)\r
+ {\r
+ changeColour(new TurnColourScheme());\r
+ }\r
+ else if (source == buriedColour)\r
+ {\r
+ changeColour(new BuriedColourScheme());\r
+ }\r
+ else if (source == nucleotideColour)\r
+ {\r
+ changeColour(new NucleotideColourScheme());\r
+ }\r
+ else if (source == purinePyrimidineColour)\r
+ {\r
+ changeColour(new PurinePyrimidineColourScheme());\r
+ }\r
+ else if (source == RNAHelixColour)\r
+ {\r
+ new RNAHelicesColourChooser(viewport, alignPanel);\r
+ }\r
+ else if (source == modifyPID)\r
+ {\r
+ modifyPID_actionPerformed();\r
+ }\r
+ else if (source == modifyConservation)\r
+ {\r
+ modifyConservation_actionPerformed();\r
+ }\r
+ else if (source == userDefinedColour)\r
+ {\r
+ new UserDefinedColours(alignPanel, null);\r
+ }\r
+ else if (source == PIDColour)\r
+ {\r
+ changeColour(new PIDColourScheme());\r
+ }\r
+ else if (source == BLOSUM62Colour)\r
+ {\r
+ changeColour(new Blosum62ColourScheme());\r
+ }\r
+ else if (source == tcoffeeColour) {\r
+ changeColour(new TCoffeeColourScheme(alignPanel.getAlignment()));\r
+ }\r
+ else if (source == annotationColour)\r
+ {\r
+ new AnnotationColourChooser(viewport, alignPanel);\r
+ }\r
+ else if (source == sortPairwiseMenuItem)\r
+ {\r
+ sortPairwiseMenuItem_actionPerformed();\r
+ }\r
+ else if (source == sortIDMenuItem)\r
+ {\r
+ sortIDMenuItem_actionPerformed();\r
+ }\r
+ else if (source == sortLengthMenuItem)\r
+ {\r
+ sortLengthMenuItem_actionPerformed();\r
+ }\r
+ else if (source == sortGroupMenuItem)\r
+ {\r
+ sortGroupMenuItem_actionPerformed();\r
+ }\r
+ else if (source == removeRedundancyMenuItem)\r
+ {\r
+ removeRedundancyMenuItem_actionPerformed();\r
+ }\r
+ else if (source == pairwiseAlignmentMenuItem)\r
+ {\r
+ pairwiseAlignmentMenuItem_actionPerformed();\r
+ }\r
+ else if (source == PCAMenuItem)\r
+ {\r
+ PCAMenuItem_actionPerformed();\r
+ }\r
+ else if (source == averageDistanceTreeMenuItem)\r
+ {\r
+ averageDistanceTreeMenuItem_actionPerformed();\r
+ }\r
+ else if (source == neighbourTreeMenuItem)\r
+ {\r
+ neighbourTreeMenuItem_actionPerformed();\r
+ }\r
+ else if (source == njTreeBlosumMenuItem)\r
+ {\r
+ njTreeBlosumMenuItem_actionPerformed();\r
+ }\r
+ else if (source == avDistanceTreeBlosumMenuItem)\r
+ {\r
+ avTreeBlosumMenuItem_actionPerformed();\r
+ }\r
+ else if (source == documentation)\r
+ {\r
+ documentation_actionPerformed();\r
+ }\r
+ else if (source == about)\r
+ {\r
+ about_actionPerformed();\r