X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=7db8f01805fec6f67eb2650b1b925eb7e018c4ef;hb=1146ae7f678127be7796772b228d5fc6823435d4;hp=e38d96d89ad9a3ad6cf75986c8a408e8be85afc5;hpb=9caf82ff1918a16e7ace4b9590373d584e5e4e9b;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index e38d96d..7db8f01 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2007 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 @@ -24,18 +24,18 @@ import java.util.*; import java.awt.*; import java.awt.datatransfer.*; +import java.awt.dnd.*; import java.awt.event.*; import java.awt.print.*; import javax.swing.*; import jalview.analysis.*; +import jalview.commands.*; import jalview.datamodel.*; import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; -import jalview.commands.*; import jalview.ws.*; -import java.awt.dnd.*; /** * DOCUMENT ME! @@ -43,7 +43,8 @@ import java.awt.dnd.*; * @author $author$ * @version $Revision$ */ -public class AlignFrame extends GAlignFrame implements DropTargetListener +public class AlignFrame + extends GAlignFrame implements DropTargetListener { /** DOCUMENT ME!! */ public static final int DEFAULT_WIDTH = 700; @@ -62,7 +63,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener String fileName = null; - private int treeCount = 0; /** * Creates a new AlignFrame object. @@ -127,9 +127,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort"); if (sortby.equals("Id")) + { sortIDMenuItem_actionPerformed(null); + } else if (sortby.equals("Pairwise Identity")) + { sortPairwiseMenuItem_actionPerformed(null); + } if (Desktop.desktop != null) { @@ -144,6 +148,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener wrapMenuItem_actionPerformed(null); } + if (jalview.bin.Cache.getDefault("SHOW_OVERVIEW",false)) + { + this.overviewMenuItem_actionPerformed(null); + } + addKeyListener(); } @@ -157,7 +166,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener void addKeyListener() { - final AlignFrame af = this; addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) @@ -171,17 +179,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener switch (evt.getKeyCode()) { - case KeyEvent.VK_G: - Desktop.instance.gatherViews(af); - break; - - case KeyEvent.VK_X: - if (!evt.isControlDown()) - { - Desktop.instance.explodeViews(af); - } - break; - case 27: // escape key deselectAllSequenceMenuItem_actionPerformed(null); @@ -189,35 +186,36 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener break; case KeyEvent.VK_DOWN: + if (evt.isAltDown() || !viewport.cursorMode) + moveSelectedSequences(false); if (viewport.cursorMode) - { alignPanel.seqPanel.moveCursor(0, 1); - } - else - moveSelectedSequences(false); break; case KeyEvent.VK_UP: + if (evt.isAltDown() || !viewport.cursorMode) + moveSelectedSequences(true); if (viewport.cursorMode) - { alignPanel.seqPanel.moveCursor(0, -1); - } - else - moveSelectedSequences(true); + break; case KeyEvent.VK_LEFT: - if (viewport.cursorMode) - { + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(false, + alignPanel.seqPanel.getKeyboardNo1()); + else alignPanel.seqPanel.moveCursor( -1, 0); - } + + break; case KeyEvent.VK_RIGHT: - if (viewport.cursorMode) - { + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(true, + alignPanel.seqPanel.getKeyboardNo1()); + else alignPanel.seqPanel.moveCursor(1, 0); - } break; case KeyEvent.VK_SPACE: @@ -236,9 +234,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener cut_actionPerformed(null); } else + { alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown() || evt.isAltDown()); + } break; @@ -321,14 +321,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceGroup sg = viewport.getSelectionGroup(); if (toggleSeqs) { - if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + if (sg != null && sg.getSize() != viewport.alignment.getHeight()) { hideSelSequences_actionPerformed(null); hide = true; } - else if (! (toggleCols && viewport.colSel.getSelected().size() > 0)) + else if (! (toggleCols && + viewport.colSel.getSelected().size() > 0)) + { showAllSeqs_actionPerformed(null); } + } if (toggleCols) { @@ -336,31 +339,61 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { hideSelColumns_actionPerformed(null); if (!toggleSeqs) + { viewport.selectionGroup = sg; } + } else if (!hide) + { showAllColumns_actionPerformed(null); } + } 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) + { + switch(evt.getKeyCode()) + { + case KeyEvent.VK_LEFT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; + + case KeyEvent.VK_RIGHT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; + } + } }); } @@ -372,6 +405,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanels.addElement(ap); + PaintRefresher.Register(ap, ap.av.getSequenceSetId()); + int aSize = alignPanels.size(); tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); @@ -384,24 +419,37 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { if (aSize == 2) { - AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); - tabbedPane.addTab(first.av.viewName==null?"Original":first.av.viewName,first); - - this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + setInitialTabVisible(); } - tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.addTab(ap.av.viewName, ap); ap.setVisible(false); } if(newPanel) { - ap.av.updateConsensus(ap); + if (ap.av.padGaps) + { + ap.av.alignment.padGaps(); + } ap.av.updateConservation(ap); + ap.av.updateConsensus(ap); } } + public void setInitialTabVisible() + { + expandViews.setEnabled(true); + gatherViews.setEnabled(true); + tabbedPane.setVisible(true); + AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); + tabbedPane.addTab(first.av.viewName,first); + this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + } + public AlignViewport getViewport() { @@ -462,12 +510,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ void setMenusFromViewport(AlignViewport av) { + padGapsMenuitem.setSelected(av.padGaps); colourTextMenuItem.setSelected(av.showColourText); abovePIDThreshold.setSelected(av.getAbovePIDThreshold()); conservationMenuItem.setSelected(av.getConservationSelected()); seqLimits.setSelected(av.getShowJVSuffix()); + idRightAlign.setSelected(av.rightAlignIds); renderGapsMenuItem.setSelected(av.renderGaps); wrapMenuItem.setSelected(av.wrapAlignment); + scaleAbove.setVisible(av.wrapAlignment); + scaleLeft.setVisible(av.wrapAlignment); + scaleRight.setVisible(av.wrapAlignment); annotationPanelMenuItem.setState(av.showAnnotation); viewBoxesMenuItem.setSelected(av.showBoxes); viewTextMenuItem.setSelected(av.showText); @@ -487,7 +540,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void setProgressBar(String message, long id) { if(progressBars == null) + { progressBars = new Hashtable(); + } JPanel progressPanel; GridLayout layout = (GridLayout) statusPanel.getLayout(); @@ -498,7 +553,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener progressBars.remove( progressPanel ); progressPanel = null; if(message!=null) + { statusBar.setText(message); + } layout.setRows(layout.getRows() - 1); } @@ -554,32 +611,42 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { if(currentFileFormat.equals("Jalview")) { - this.closeMenuItem_actionPerformed(true); - } - else - { - viewport.alignment.deleteAllGroups(); - while (viewport.alignment.getHeight() > 0) + JInternalFrame [] frames = Desktop.desktop.getAllFrames(); + for(int i=0; i 0) - { - dset.deleteSequence(0); } + Desktop.instance.closeAssociatedWindows(); - firePropertyChange("Alignment", null, null); - - updateEditMenuBar(); + FileLoader loader = new FileLoader(); + String protocol = fileName.startsWith("http:")? "URL":"File"; + loader.LoadFile(viewport, fileName, protocol, currentFileFormat); } + else + { + Rectangle bounds = this.getBounds(); + + FileLoader loader = new FileLoader(); + String protocol = fileName.startsWith("http:") ? "URL" : "File"; + AlignFrame newframe = + loader.LoadFileWaitTillLoaded(fileName, protocol, currentFileFormat); - FileLoader loader = new FileLoader(); - loader.LoadFile(viewport, fileName, "File", currentFileFormat); + newframe.setBounds(bounds); + this.closeMenuItem_actionPerformed(true); + } } } @@ -597,11 +664,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void save_actionPerformed(ActionEvent e) { - if(fileName==null || currentFileFormat==null) + if(fileName==null + || currentFileFormat==null + || fileName.startsWith("http") + ) + { saveAs_actionPerformed(null); + } else + { saveAlignment(fileName, currentFileFormat); } + } /** * DOCUMENT ME! @@ -652,6 +726,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public boolean saveAlignment(String file, String format) { + boolean success = true; + if (format.equalsIgnoreCase("Jalview")) { String shortName = title; @@ -662,15 +738,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener java.io.File.separatorChar) + 1); } - new Jalview2XML().SaveAlignment(this, file, shortName); + success = new Jalview2XML().SaveAlignment(this, file, shortName); statusBar.setText("Successfully saved to file: " +fileName+" in " +format +" format."); - - // USE Jalview2XML to save this file - return true; } else { @@ -686,8 +759,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (reply == JOptionPane.YES_OPTION) + { omitHidden = viewport.getViewAsString(false); } + } String output = new FormatAdapter().formatSequences( format, @@ -696,28 +771,39 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (output == null) { - return false; + success = false; } - - try - { - java.io.PrintWriter out = new java.io.PrintWriter( - new java.io.FileWriter(file)); - - out.print(output); - out.close(); - this.setTitle(file); - statusBar.setText("Successfully saved to file: " - +fileName+" in " - +format +" format."); - return true; - } - catch (Exception ex) + else { - ex.printStackTrace(); + try + { + java.io.PrintWriter out = new java.io.PrintWriter( + new java.io.FileWriter(file)); + + out.print(output); + out.close(); + this.setTitle(file); + statusBar.setText("Successfully saved to file: " + + fileName + " in " + + format + " format."); + } + catch (Exception ex) + { + success = false; + ex.printStackTrace(); + } } } - return false; + + if (!success) + { + JOptionPane.showInternalMessageDialog( + this, "Couldn't save file: " + fileName, + "Error Saving File", + JOptionPane.WARNING_MESSAGE); + } + + return success; } /** @@ -793,6 +879,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.makeEPS(f); } + + public void pageSetup_actionPerformed(ActionEvent e) + { + PrinterJob printJob = PrinterJob.getPrinterJob(); + PrintThread.pf = printJob.pageDialog(printJob.defaultPage()); + } + /** * DOCUMENT ME! * @@ -801,7 +894,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void printMenuItem_actionPerformed(ActionEvent e) { //Putting in a thread avoids Swing painting problems - PrintThread thread = new PrintThread(); + PrintThread thread = new PrintThread(alignPanel); thread.start(); } @@ -815,7 +908,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { new AnnotationExporter().exportAnnotations( alignPanel, - viewport.alignment.getAlignmentAnnotation() + viewport.showAnnotation ? viewport.alignment.getAlignmentAnnotation() : null, + viewport.alignment.getGroups() ); } @@ -850,43 +944,56 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void closeMenuItem_actionPerformed(boolean closeAllTabs) { if(alignPanels!=null && alignPanels.size()<2) + { closeAllTabs = true; + } try { if(alignPanels!=null) { if (closeAllTabs) + { for (int i = 0; i < alignPanels.size(); i++) { AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i); + jalview.structure.StructureSelectionManager.getStructureSelectionManager() + .removeStructureViewerListener(ap.seqPanel, null); PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas); PaintRefresher.RemoveComponent(ap.idPanel.idCanvas); PaintRefresher.RemoveComponent(ap); + ap.av.alignment = null; } + } else { int index = tabbedPane.getSelectedIndex(); - tabbedPane.removeTabAt(index); alignPanels.removeElement(alignPanel); PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); PaintRefresher.RemoveComponent(alignPanel); + viewport.alignment = null; alignPanel = null; viewport = null; + + tabbedPane.removeTabAt(index); tabbedPane.validate(); if(index==tabbedPane.getTabCount()) + { index --; + } this.tabSelectionChanged(index); } } if (closeAllTabs) + { this.setClosed(true); } + } catch (Exception ex) { ex.printStackTrace(); @@ -951,10 +1058,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.redoList.push(command); command.undoCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + AlignViewport originalSource = getOriginatingSource(command); updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + + if(originalSource!=null) + { + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.firePropertyChange("alignment", + null, + originalSource.alignment.getSequences()); + } } /** @@ -964,15 +1077,68 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void redoMenuItem_actionPerformed(ActionEvent e) { + if(viewport.redoList.size()<1) + { + return; + } + CommandI command = (CommandI) viewport.redoList.pop(); viewport.historyList.push(command); command.doCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + AlignViewport originalSource = getOriginatingSource(command); updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + + if(originalSource!=null) + { + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + originalSource.firePropertyChange("alignment", + null, + originalSource.alignment.getSequences()); + } } + AlignViewport getOriginatingSource(CommandI command) + { + 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; + } + } + } + } + + 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); + } + + originalSource = viewport; + } + + return originalSource; + } /** * DOCUMENT ME! @@ -994,14 +1160,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { 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; } @@ -1016,14 +1182,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { 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; } @@ -1033,11 +1199,102 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } + + synchronized void slideSequences(boolean right, int size) + { + Vector sg = new Vector(); + if(viewport.cursorMode) + { + sg.addElement(viewport.alignment.getSequenceAt( + alignPanel.seqPanel.seqCanvas.cursorY)); + } + else if(viewport.getSelectionGroup()!=null + && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight()) + { + sg = viewport.getSelectionGroup().getSequences( + viewport.hiddenRepSequences); + } + + if(sg.size()<1) + { + return; + } + + Vector invertGroup = new Vector(); + + for (int i = 0; i < viewport.alignment.getHeight(); i++) + { + if(!sg.contains(viewport.alignment.getSequenceAt(i))) + invertGroup.add(viewport.alignment.getSequenceAt(i)); + } + + SequenceI[] seqs1 = new SequenceI[sg.size()]; + for (int i = 0; i < sg.size(); i++) + seqs1[i] = (SequenceI) sg.elementAt(i); + + SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; + for (int i = 0; i < invertGroup.size(); i++) + seqs2[i] = (SequenceI) invertGroup.elementAt(i); + + SlideSequencesCommand ssc; + if (right) + ssc = new SlideSequencesCommand("Slide Sequences", + seqs2, seqs1, size, + viewport.getGapCharacter() + ); + else + ssc = new SlideSequencesCommand("Slide Sequences", + seqs1, seqs2, size, + viewport.getGapCharacter() + ); + + int groupAdjustment = 0; + if (ssc.getGapsInsertedBegin() && right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor(size, 0); + else + groupAdjustment = size; + } + else if (!ssc.getGapsInsertedBegin() && !right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor( -size, 0); + else + groupAdjustment = -size; + } + + if (groupAdjustment != 0) + { + viewport.getSelectionGroup().setStartRes( + viewport.getSelectionGroup().getStartRes() + groupAdjustment); + viewport.getSelectionGroup().setEndRes( + viewport.getSelectionGroup().getEndRes() + groupAdjustment); + } + + + boolean appendHistoryItem = false; + if(viewport.historyList!=null + && viewport.historyList.size()>0 + && viewport.historyList.peek() instanceof SlideSequencesCommand) + { + appendHistoryItem = ssc.appendSlideCommand( + (SlideSequencesCommand)viewport.historyList.peek()) + ; + } + + if(!appendHistoryItem) + addHistoryItem(ssc); + + repaint(); + } + + /** * DOCUMENT ME! * @@ -1068,6 +1325,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener try { + jalview.gui.Desktop.internalCopy = true; //Its really worth setting the clipboard contents //to empty before setting the large StringSelection!! Toolkit.getDefaultToolkit().getSystemClipboard() @@ -1100,19 +1358,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { hiddenColumns =new Vector(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(); - for(int i=0; i 0) { if(trimLeft) + { column = colSel.getMin(); + } else + { column = colSel.getMax(); + } SequenceI [] seqs; if(viewport.getSelectionGroup()!=null) - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); + } else + { seqs = viewport.alignment.getSequencesArray(); + } TrimRegionCommand trimRegion; @@ -1536,6 +1814,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.alignment, viewport.colSel, viewport.selectionGroup); + viewport.setStartRes(0); } else { @@ -1583,19 +1862,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else + { seqs = viewport.alignment.getSequencesArray(); + } RemoveGapColCommand removeGapCols = new RemoveGapColCommand("Remove Gapped Columns", seqs, start, end, - viewport.getGapCharacter()); + viewport.alignment); addHistoryItem(removeGapCols); @@ -1611,7 +1893,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // if (viewport.hasHiddenColumns) // viewport.getColumnSelection().compensateForEdits(shifts); viewport.setStartRes(seq.findIndex(startRes)-1); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } @@ -1627,12 +1910,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport. + hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else + { seqs = viewport.alignment.getSequencesArray(); + } //This is to maintain viewport position on first residue //of first sequence @@ -1640,13 +1926,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener int startRes = seq.findPosition(viewport.startRes); addHistoryItem(new RemoveGapsCommand("Remove Gaps", - seqs, - start, end, - viewport.getGapCharacter())); + seqs, + start, end, + viewport.alignment)); viewport.setStartRes(seq.findIndex(startRes)-1); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); } @@ -1671,11 +1958,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void findMenuItem_actionPerformed(ActionEvent e) { - JInternalFrame frame = new JInternalFrame(); - Finder finder = new Finder(viewport, alignPanel, frame); - frame.setContentPane(finder); - frame.setLayer(JLayeredPane.PALETTE_LAYER); - Desktop.addInternalFrame(frame, "Find", 340, 110); + new Finder(); } public void newView_actionPerformed(ActionEvent e) @@ -1683,24 +1966,61 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener AlignmentPanel newap = new Jalview2XML().copyAlignPanel(alignPanel, true); + newap.av.gatherViewsHere = false; + if (viewport.viewName == null) - viewport.viewName = "View 1"; + { + viewport.viewName = "Original"; + } newap.av.historyList = viewport.historyList; newap.av.redoList = viewport.redoList; - newap.av.viewName = "View " + - (Desktop.getViewCount(viewport.getSequenceSetId()) + 1); + + int index = Desktop.getViewCount(viewport.getSequenceSetId()); + String newViewName = "View " +index; + + Vector comps = (Vector) PaintRefresher.components.get(viewport. + getSequenceSetId()); + Vector existingNames = new Vector(); + for(int i=0; i 0)) || + (viewport.getSelectionGroup().getSize() < 4) && + (viewport.getSelectionGroup().getSize() > 0)) || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, @@ -2428,7 +2774,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return; } - new PCAPanel(viewport); + new PCAPanel(alignPanel); } @@ -2495,8 +2841,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { TreePanel tp; - if (viewport.getSelectionGroup() != null) { - if (viewport.getSelectionGroup().getSize(false) < 3) { + if (viewport.getSelectionGroup() != null) + { + if (viewport.getSelectionGroup().getSize() < 3) + { JOptionPane.showMessageDialog(Desktop.desktop, "You need to have more than two sequences selected to build a tree!", "Not enough sequences", @@ -2508,9 +2856,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.getSize(false)) + while (s < sg.getSize()) { - if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() < + if ( ( (SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg.getEndRes()) { JOptionPane.showMessageDialog(Desktop.desktop, @@ -2543,14 +2891,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } if(viewport.alignment.getHeight()<2) + { return; + } tp = new TreePanel(alignPanel, type, pwType); } - addTreeMenuItem(tp, title); + title += " from "; + + if(viewport.viewName!=null) + { + title+= viewport.viewName+" of "; + } - Desktop.addInternalFrame(tp, title + " from " + this.title, 600, 500); + title += this.title; + + Desktop.addInternalFrame(tp, title, 600, 500); } /** @@ -2572,9 +2929,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // TODO: JBPNote - have to map order entries to curent SequenceI pointers AlignmentSorter.sortBy(viewport.getAlignment(), order); - addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand(order.getName(), oldOrder, + viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } }); } @@ -2588,51 +2946,54 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * @param treePanel Displayed tree window. * @param title SortBy menu item title. */ - void addTreeMenuItem(final TreePanel treePanel, String title) + public void buildTreeMenu() { - final JMenuItem item = new JMenuItem(title); - - treeCount++; + sortByTreeMenu.removeAll(); - if (treeCount == 1) + Vector comps = (Vector) PaintRefresher.components.get(viewport. + getSequenceSetId()); + Vector treePanels = new Vector(); + int i, iSize = comps.size(); + for(i=0; i 1)) + (viewport.getSelectionGroup().getSize() > 1)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! /*SequenceGroup seqs = viewport.getSelectionGroup(); @@ -2688,7 +3049,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener AlignmentView seqs = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) > 0)) + (viewport.getSelectionGroup().getSize() > 0)) { seqs = viewport.getAlignmentView(true); } @@ -2700,7 +3061,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // TODO: viewport.alignment.isAligned is a global state - the local selection may well be aligned - we preserve 2.0.8 behaviour for moment. if (!viewport.alignment.isAligned()) { - seqs.setSequences(new SeqCigar[] { seqs.getSequences()[0] } ); + seqs.setSequences(new SeqCigar[] + {seqs.getSequences()[0]}); } return seqs; } @@ -2748,11 +3110,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { return ShowNewickTree(nf,title,600,500,4,5); } - public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input) + + public TreePanel ShowNewickTree(NewickFile nf, String title, + AlignmentView input) { return ShowNewickTree(nf,title, input, 600,500,4,5); } - public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y) { + + public TreePanel ShowNewickTree(NewickFile nf, String title, int w, int h, + int x, int y) + { return ShowNewickTree(nf, title, null, w, h, x, y); } /** @@ -2767,7 +3134,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * @param y position * @return TreePanel handle */ - public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input, int w,int h,int x, int y) { + public TreePanel ShowNewickTree(NewickFile nf, String title, + AlignmentView input, int w, int h, int x, + int y) + { TreePanel tp = null; try @@ -2784,11 +3154,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener tp.setSize(w,h); if(x>0 && y>0) + { tp.setLocation(x,y); + } Desktop.addInternalFrame(tp, title, w, h); - addTreeMenuItem(tp, title); } } catch (Exception ex) @@ -2799,28 +3170,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return tp; } - class PrintThread - extends Thread - { - public void run() - { - PrinterJob printJob = PrinterJob.getPrinterJob(); - PageFormat pf = printJob.pageDialog(printJob.defaultPage()); - printJob.setPrintable(alignPanel, pf); - - if (printJob.printDialog()) - { - try - { - printJob.print(); - } - catch (Exception PrintException) - { - PrintException.printStackTrace(); - } - } - } - } /** * Generates menu items and listener event actions for web service clients @@ -2850,7 +3199,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - false, true, viewport.getAlignment().getDataset(), af); + false, true, + viewport.getAlignment().getDataset(), + af); } @@ -2867,7 +3218,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { AlignmentView msa = gatherSequencesForAlignment(); new jalview.ws.MsaWSClient(sh, title, msa, - true, true, viewport.getAlignment().getDataset(), af); + true, true, + viewport.getAlignment().getDataset(), + af); } @@ -2952,92 +3305,32 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void showTranslation_actionPerformed(ActionEvent e) { + /////////////////////////////// + // Collect Data to be translated/transferred + SequenceI [] selection = viewport.getSelectionAsNewSequence(); String [] seqstring = viewport.getViewAsString(true); - - int s, sSize = selection.length; - SequenceI [] newSeq = new SequenceI[sSize]; - - int res, resSize; - StringBuffer protein; - String seq; - for(s=0; s -1 || file.indexOf("file:") > -1) @@ -3155,7 +3453,7 @@ public void drop(DropTargetDropEvent evt) } boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport. - alignment, file); + alignment, file, protocol); if (!isAnnotation) { @@ -3172,19 +3470,22 @@ public void drop(DropTargetDropEvent evt) viewport.getAlignment(), 0, false); alignPanel.adjustAnnotationHeight(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } else + { new FileLoader().LoadFile(viewport, file, protocol, format); } } + } else { // (isAnnotation) alignPanel.adjustAnnotationHeight(); } - }catch(Exception ex) + } + catch (Exception ex) { ex.printStackTrace(); } @@ -3223,3 +3524,39 @@ public void drop(DropTargetDropEvent evt) return viewport; } } + +class PrintThread + extends Thread +{ + AlignmentPanel ap; + public PrintThread(AlignmentPanel ap) + { + this.ap = ap; + } + static PageFormat pf; + public void run() + { + PrinterJob printJob = PrinterJob.getPrinterJob(); + + if (pf != null) + { + printJob.setPrintable(ap, pf); + } + else + { + printJob.setPrintable(ap); + } + + if (printJob.printDialog()) + { + try + { + printJob.print(); + } + catch (Exception PrintException) + { + PrintException.printStackTrace(); + } + } + } +}