X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=0aefe9b01b51d544ce42103ceb58fea4f0c904a2;hb=a474ac9fbd7de4a6e77b3c445ea0205d3854af0f;hp=07c717c5ea390bd2db5b6d1e5b78004af3880768;hpb=61cd7fa8560bb5c1f747a8cab4cc2fbd61980063;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 07c717c..0aefe9b 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.appletgui; @@ -26,6 +25,7 @@ import java.awt.*; import java.awt.event.*; import jalview.analysis.*; +import jalview.bin.JalviewLite; import jalview.commands.*; import jalview.datamodel.*; import jalview.io.*; @@ -85,6 +85,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { sortPairwiseMenuItem_actionPerformed(); } + else if (param.equalsIgnoreCase("Length")) + { + sortLengthMenuItem_actionPerformed(); + } } param = applet.getParameter("wrap"); @@ -149,7 +153,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * DOCUMENT ME! * * @param String - * DOCUMENT ME! + * DOCUMENT ME! */ public void parseFeaturesFile(String file, String type) @@ -175,6 +179,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } viewport.showSequenceFeatures = true; sequenceFeatures.setState(true); + if (viewport.featureSettings != null) + { + viewport.featureSettings.refreshTable(); + } alignPanel.paintAlignment(true); } @@ -336,37 +344,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { boolean toggleSeqs = !evt.isControlDown(); boolean toggleCols = !evt.isShiftDown(); - boolean hide = false; - SequenceGroup sg = viewport.getSelectionGroup(); - - if (toggleSeqs) - { - if (sg != null && sg.getSize() != 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(); - } - } + toggleHiddenRegions(toggleSeqs, toggleCols); break; } @@ -440,11 +418,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { if (evt.isAltDown()) { - viewport.invertColumnSelection(); + invertColSel_actionPerformed(); } else { - this.invertSequenceMenuItem_actionPerformed(); + invertSequenceMenuItem_actionPerformed(); } } break; @@ -467,6 +445,73 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel.paintAlignment(true); } + /** + * called by key handler and the hide all/show all menu items + * + * @param toggleSeqs + * @param toggleCols + */ + private void toggleHiddenRegions(boolean toggleSeqs, boolean toggleCols) + { + boolean hide = false; + SequenceGroup sg = viewport.getSelectionGroup(); + if (!toggleSeqs && !toggleCols) + { + // Hide everything by the current selection - this is a hack - we do the + // invert and then hide + // first check that there will be visible columns after the invert. + if ((viewport.colSel != null && viewport.colSel.getSelected() != null && viewport.colSel + .getSelected().size() > 0) + || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg + .getEndRes())) + { + // now invert the sequence set, if required - empty selection implies + // that no hiding is required. + if (sg != null) + { + invertSequenceMenuItem_actionPerformed(); + sg = viewport.getSelectionGroup(); + toggleSeqs = true; + + } + viewport.expandColSelection(sg, true); + // finally invert the column selection and get the new sequence + // selection and indicate it should be hidden. + invertColSel_actionPerformed(); + toggleCols = true; + } + } + + if (toggleSeqs) + { + if (sg != null && sg.getSize() != 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(); + } + } + } + public void keyReleased(KeyEvent evt) { } @@ -546,7 +591,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (evt.getSource() == this.centreColumnLabelFlag) { centreColumnLabelFlag_stateChanged(); - } else if (evt.getSource() == this.followMouseOverFlag) + } + else if (evt.getSource() == this.followMouseOverFlag) { mouseOverFlag_stateChanged(); } @@ -557,7 +603,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, private void mouseOverFlag_stateChanged() { viewport.followHighlight = followMouseOverFlag.getState(); - // TODO: could kick the scrollTo mechanism to reset view for current searchresults. + // TODO: could kick the scrollTo mechanism to reset view for current + // searchresults. } private void centreColumnLabelFlag_stateChanged() @@ -646,6 +693,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { delete_actionPerformed(); } + else if (source == grpsFromSelection) + { + makeGrpsFromSelection_actionPerformed(); + } else if (source == deleteGroups) { deleteGroups_actionPerformed(); @@ -703,6 +754,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == showSeqs) { viewport.showAllHiddenSeqs(); + alignPanel.paintAlignment(true); } else if (source == hideColumns) { @@ -713,6 +765,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, && viewport.getSelectionGroup() != null) { viewport.hideAllSelectedSeqs(); + alignPanel.paintAlignment(true); + } + else if (source == hideAllButSelection) + { + toggleHiddenRegions(false, false); + alignPanel.paintAlignment(true); + } + else if (source == hideAllSelection) + { + SequenceGroup sg = viewport.getSelectionGroup(); + viewport.expandColSelection(sg, false); + viewport.hideAllSelectedSeqs(); + viewport.hideSelectedColumns(); + alignPanel.paintAlignment(true); + } + else if (source == showAllHidden) + { + viewport.showAllHiddenColumns(); + viewport.showAllHiddenSeqs(); + alignPanel.paintAlignment(true); } else if (source == featureSettings) { @@ -837,6 +909,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { sortIDMenuItem_actionPerformed(); } + else if (source == sortLengthMenuItem) + { + sortLengthMenuItem_actionPerformed(); + } else if (source == sortGroupMenuItem) { sortGroupMenuItem_actionPerformed(); @@ -933,14 +1009,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, private Hashtable getDisplayedFeatureCols() { - if (alignPanel.getFeatureRenderer()!=null) { + if (alignPanel.getFeatureRenderer() != null) + { FeatureRenderer fr = alignPanel.getFeatureRenderer(); Hashtable fcols = new Hashtable(); Enumeration en = viewport.featuresDisplayed.keys(); while (en.hasMoreElements()) { Object col = en.nextElement(); - fcols.put(col,fr.featureColours.get(col)); + fcols.put(col, fr.featureColours.get(col)); } return fcols; } @@ -1128,7 +1205,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void undoMenuItem_actionPerformed() { @@ -1153,7 +1230,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * DOCUMENT ME! * * @param e - * DOCUMENT ME! + * DOCUMENT ME! */ protected void redoMenuItem_actionPerformed() { @@ -1591,6 +1668,37 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } + protected void makeGrpsFromSelection_actionPerformed() + { + if (viewport.getSelectionGroup() != null) + { + SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( + viewport.getSequenceSelection(), viewport.getAlignmentView( + true).getSequenceStrings(viewport.getGapCharacter()), + viewport.alignment.getGroups()); + viewport.alignment.deleteAllGroups(); + viewport.sequenceColours = null; + viewport.setSelectionGroup(null); + // set view properties for each group + for (int g = 0; g < gps.length; g++) + { + // gps[g].setShowunconserved(viewport.getShowUnconserved()); + gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); + viewport.alignment.addGroup(gps[g]); + Color col = new Color((int) (Math.random() * 255), (int) (Math + .random() * 255), (int) (Math.random() * 255)); + col = col.brighter(); + for (Enumeration sq = gps[g].getSequences(null).elements(); sq + .hasMoreElements(); viewport.setSequenceColour( + (SequenceI) sq.nextElement(), col)) + ; + } + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + // alignPanel.updateAnnotation(); + alignPanel.paintAlignment(true); + } + } + protected void deleteGroups_actionPerformed() { viewport.alignment.deleteAllGroups(); @@ -1640,6 +1748,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } + public void invertColSel_actionPerformed() + { + viewport.invertColumnSelection(); + alignPanel.paintAlignment(true); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); + } + void trimAlignment(boolean trimLeft) { ColumnSelection colSel = viewport.getColumnSelection(); @@ -1878,7 +1993,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * get sequence feature groups that are hidden or shown * * @param visible - * true is visible + * true is visible * @return list */ public String[] getFeatureGroupsOfState(boolean visible) @@ -1896,9 +2011,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * Change the display state for the given feature groups * * @param groups - * list of group strings + * list of group strings * @param state - * visible or invisible + * visible or invisible */ public void setFeatureGroupState(String[] groups, boolean state) { @@ -2140,6 +2255,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, modifyPID_actionPerformed(); } + public void sortPairwiseMenuItem_actionPerformed() { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); @@ -2155,8 +2271,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); - addHistoryItem(new OrderCommand("ID Sort", oldOrder, - viewport.alignment)); + addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment)); + alignPanel.paintAlignment(true); + } + + public void sortLengthMenuItem_actionPerformed() + { + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortByLength(viewport.getAlignment()); + addHistoryItem(new OrderCommand("Length Sort", oldOrder, viewport.alignment)); alignPanel.paintAlignment(true); } @@ -2190,7 +2313,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void PCAMenuItem_actionPerformed() { // are the sequences aligned? - if (!viewport.alignment.isAligned()) + if (!viewport.alignment.isAligned(false)) { SequenceI current; int Width = viewport.getAlignment().getWidth(); @@ -2247,7 +2370,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, void NewTreePanel(String type, String pwType, String title) { // are the sequences aligned? - if (!viewport.alignment.isAligned()) + if (!viewport.alignment.isAligned(false)) { SequenceI current; int Width = viewport.getAlignment().getWidth(); @@ -2294,28 +2417,36 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500); addTreeMenuItem(tp, treeFile); } + /** * sort the alignment using the given treePanel - * @param treePanel tree used to sort view - * @param title string used for undo event name + * + * @param treePanel + * tree used to sort view + * @param title + * string used for undo event name */ public void sortByTree(TreePanel treePanel, String title) { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); - AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel - .getTree()); + AlignmentSorter + .sortByTree(viewport.getAlignment(), treePanel.getTree()); // addHistoryItem(new HistoryItem("Sort", viewport.alignment, // HistoryItem.SORT)); - addHistoryItem(new OrderCommand("Order by "+title, oldOrder, + addHistoryItem(new OrderCommand("Order by " + title, oldOrder, viewport.alignment)); alignPanel.paintAlignment(true); } + /** - * Do any automatic reordering of the alignment and add the necessary bits to the menu structure for the new tree + * Do any automatic reordering of the alignment and add the necessary bits to + * the menu structure for the new tree + * * @param treePanel * @param title */ - protected void addTreeMenuItem(final TreePanel treePanel, final String title) + protected void addTreeMenuItem(final TreePanel treePanel, + final String title) { final MenuItem item = new MenuItem(title); sortByTreeMenu.add(item); @@ -2357,9 +2488,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { String version; - public AboutPanel(String version) + String builddate; + + public AboutPanel(String version, String builddate) { this.version = version; + this.builddate = builddate; } public void paint(Graphics g) @@ -2375,6 +2509,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // lite and application g.setFont(new Font("Helvetica", Font.BOLD, 14)); g.drawString("JalviewLite - Release " + version, x, y += fh); + g.setFont(new Font("Helvetica", Font.BOLD, 12)); + g.drawString("Build date: " + builddate, x, y += fh); g.setFont(new Font("Helvetica", Font.PLAIN, 12)); g .drawString( @@ -2390,37 +2526,22 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, "For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list", x, y += fh); g.drawString("If you use Jalview, please cite:", x, y += fh + 8); - g.drawString( - "Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)",x,y+=fh); - g.drawString("Jalview Version 2 - a multiple sequence alignment editor and analysis workbench",x,y+=fh); - g.drawString("Bioinformatics doi: 10.1093/bioinformatics/btp033",x,y+=fh); - } - } - - String version = "test"; - java.net.URL url = getClass().getResource("/.build_properties"); - if (url != null) - { - try - { - BufferedReader reader = new BufferedReader(new InputStreamReader( - url.openStream())); - String line; - while ((line = reader.readLine()) != null) - { - if (line.indexOf("VERSION") > -1) - { - version = line.substring(line.indexOf("=") + 1); - } - } - } catch (Exception ex) - { - ex.printStackTrace(); + g + .drawString( + "Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)", + x, y += fh); + g + .drawString( + "Jalview Version 2 - a multiple sequence alignment editor and analysis workbench", + x, y += fh); + g.drawString("Bioinformatics doi: 10.1093/bioinformatics/btp033", + x, y += fh); } } Frame frame = new Frame(); - frame.add(new AboutPanel(version)); + frame.add(new AboutPanel(JalviewLite.getVersion(), JalviewLite + .getBuildDate())); jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580, 220); } @@ -2435,18 +2556,25 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { try { - if (url.indexOf(":")==-1) + if (url.indexOf(":") == -1) { - // TODO: verify (Bas Vroling bug) prepend codebase or server URL to form valid URL - if (url.indexOf("/")==0) + // TODO: verify (Bas Vroling bug) prepend codebase or server URL to + // form valid URL + if (url.indexOf("/") == 0) { String codebase = viewport.applet.getCodeBase().toString(); - url = codebase.substring(0,codebase.length()-viewport.applet.getCodeBase().getFile().length())+url; - } else { - url = viewport.applet.getCodeBase()+url; + url = codebase.substring(0, codebase.length() + - viewport.applet.getCodeBase().getFile().length()) + + url; + } + else + { + url = viewport.applet.getCodeBase() + url; } System.out.println("Show url (prepended codebase): " + url); - } else { + } + else + { System.out.println("Show url: " + url); } viewport.applet.getAppletContext().showDocument( @@ -2507,6 +2635,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem sortIDMenuItem = new MenuItem(); + MenuItem sortLengthMenuItem = new MenuItem(); + MenuItem sortGroupMenuItem = new MenuItem(); MenuItem removeRedundancyMenuItem = new MenuItem(); @@ -2581,6 +2711,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem deleteGroups = new MenuItem(); + MenuItem grpsFromSelection = new MenuItem(); + MenuItem delete = new MenuItem(); MenuItem copy = new MenuItem(); @@ -2682,6 +2814,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, sortPairwiseMenuItem.addActionListener(this); sortIDMenuItem.setLabel("by ID"); sortIDMenuItem.addActionListener(this); + sortLengthMenuItem.setLabel("by Length"); + sortLengthMenuItem.addActionListener(this); sortGroupMenuItem.setLabel("by Group"); sortGroupMenuItem.addActionListener(this); removeRedundancyMenuItem.setLabel("Remove Redundancy..."); @@ -2731,7 +2865,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, annotationPanelMenuItem.addItemListener(this); colourTextMenuItem.setLabel("Colour Text"); colourTextMenuItem.addItemListener(this); - displayNonconservedMenuItem.setLabel("Show non-conserved"); + displayNonconservedMenuItem.setLabel("Show nonconserved"); displayNonconservedMenuItem.addItemListener(this); alProperties.addActionListener(this); overviewMenuItem.setLabel("Overview Window"); @@ -2759,6 +2893,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, nucleotideColour.addActionListener(this); deleteGroups.setLabel("Undefine Groups"); deleteGroups.addActionListener(this); + grpsFromSelection.setLabel("Make Groups for selection"); + grpsFromSelection.addActionListener(this); copy.setLabel("Copy"); copy.addActionListener(this); cut.setLabel("Cut"); @@ -2825,11 +2961,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, menu2.setLabel("Hide"); hideColumns.setLabel("Selected Columns"); hideSequences.setLabel("Selected Sequences"); + hideAllButSelection.setLabel("All but Selected Region (Shift+Ctrl+H)"); + hideAllSelection.setLabel("Selected Region"); + showAllHidden.setLabel("All Sequences and Columns"); invertColSel.addActionListener(this); showColumns.addActionListener(this); showSeqs.addActionListener(this); hideColumns.addActionListener(this); hideSequences.addActionListener(this); + hideAllButSelection.addActionListener(this); + hideAllSelection.addActionListener(this); + showAllHidden.addActionListener(this); formatMenu.setLabel("Format"); selectMenu.setLabel("Select"); newView.setLabel("New View"); @@ -2917,6 +3059,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, pasteMenu.add(pasteNew); pasteMenu.add(pasteThis); sort.add(sortIDMenuItem); + sort.add(sortLengthMenuItem); sort.add(sortByTreeMenu); sort.add(sortGroupMenuItem); sort.add(sortPairwiseMenuItem); @@ -2928,8 +3071,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, helpMenu.add(about); menu1.add(showColumns); menu1.add(showSeqs); + menu1.add(showAllHidden); menu2.add(hideColumns); menu2.add(hideSequences); + menu2.add(hideAllSelection); + menu2.add(hideAllButSelection); formatMenu.add(font); formatMenu.add(seqLimits); formatMenu.add(wrapMenuItem); @@ -2948,7 +3094,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, selectMenu.add(deselectAllSequenceMenuItem); selectMenu.add(invertSequenceMenuItem); selectMenu.add(invertColSel); + selectMenu.add(grpsFromSelection); selectMenu.add(deleteGroups); + } MenuItem featureSettings = new MenuItem(); @@ -2971,6 +3119,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem hideSequences = new MenuItem(); + MenuItem hideAllButSelection = new MenuItem(); + + MenuItem hideAllSelection = new MenuItem(); + + MenuItem showAllHidden = new MenuItem(); + Menu formatMenu = new Menu(); Menu selectMenu = new Menu(); @@ -2983,8 +3137,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * platform independent manner to avoid OSX/Mac menu appendage daftness. * * @param reallyEmbedded - * true to attach the view to the applet area on the page - * rather than in a new window + * true to attach the view to the applet area on the page rather than + * in a new window */ public void createAlignFrameWindow(boolean reallyEmbedded, String title) {