X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=bb722a50c87356fff370a471cd05f9b59bfabec7;hb=0a1d49ccc421184b23bcb45cee901f5313913aa1;hp=9e0bae63f95e8d4ed07c042303b78ee351589598;hpb=8ac358f8762f9a632d5dc70aa32df57ca0755244;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 9e0bae6..bb722a5 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -64,7 +64,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener String fileName = null; - private int treeCount = 0; /** * Creates a new AlignFrame object. @@ -159,7 +158,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener void addKeyListener() { - final AlignFrame af = this; addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) @@ -173,17 +171,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); @@ -374,6 +361,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); @@ -386,13 +375,12 @@ 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); } @@ -406,6 +394,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } } + 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() { @@ -466,10 +464,12 @@ 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); annotationPanelMenuItem.setState(av.showAnnotation); @@ -558,12 +558,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { if(currentFileFormat.equals("Jalview")) { - this.closeMenuItem_actionPerformed(true); + JInternalFrame [] frames = Desktop.desktop.getAllFrames(); + for(int i=0; i 0) { viewport.alignment.deleteSequence(0); @@ -577,13 +592,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener dset.deleteSequence(0); } - firePropertyChange("Alignment", null, null); + firePropertyChange("Alignment", null, viewport.alignment.getSequences()); updateEditMenuBar(); } FileLoader loader = new FileLoader(); - loader.LoadFile(viewport, fileName, "File", currentFileFormat); + String protocol = fileName.startsWith("http:")? "URL":"File"; + loader.LoadFile(viewport, fileName, protocol, currentFileFormat); } } @@ -602,7 +618,10 @@ 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); @@ -657,6 +676,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; @@ -667,15 +688,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 { @@ -701,28 +719,37 @@ 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; } /** @@ -873,13 +900,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { int index = tabbedPane.getSelectedIndex(); - tabbedPane.removeTabAt(index); alignPanels.removeElement(alignPanel); PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); PaintRefresher.RemoveComponent(alignPanel); alignPanel = null; viewport = null; + + tabbedPane.removeTabAt(index); tabbedPane.validate(); if(index==tabbedPane.getTabCount()) @@ -956,10 +984,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()); + } } /** @@ -969,15 +1003,64 @@ 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! @@ -1200,7 +1283,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } else { - sequences = new FormatAdapter().readFile(str, "Paste", format); + sequences = new FormatAdapter().readFile(str, "Paste", format).getSequencesArray(); } AlignmentI alignment = null; @@ -1351,15 +1434,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } Vector seqs = new Vector(); - int cutLength = sg.getEndRes()-sg.getStartRes()+1; - boolean seqsCut = false; SequenceI seq; for (int i = 0; i < sg.getSize(false); i++) { seq = sg.getSequenceAt(i); seqs.addElement(seq); - if(seq.getLength()<=cutLength) - seqsCut = true; } @@ -1413,7 +1492,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener protected void deleteGroups_actionPerformed(ActionEvent e) { viewport.alignment.deleteAllGroups(); - viewport.sequenceColours.clear(); + viewport.sequenceColours = null; viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.repaint(); @@ -1458,7 +1537,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; alignPanel.repaint(); - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } /** @@ -1483,7 +1562,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false); } - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + alignPanel.repaint(); + + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } public void invertColSel_actionPerformed(ActionEvent e) @@ -1678,11 +1759,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) @@ -1691,12 +1768,32 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener new Jalview2XML().copyAlignPanel(alignPanel, true); 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; iSelect a dark and light text colour, then set the threshold to" - +"
switch between colours, based on background colour
"), - BorderLayout.NORTH); - panel.add(col1); - panel.add(slider); - panel.add(col2); - - col1.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - Color col = JColorChooser.showDialog(bigpanel, - "Select Colour for Text", - viewport.textColour); - if (col != null) - { - viewport.textColour = col; - col1.setBackground(col); - col1.setForeground(col); - if(viewport.colourAppliesToAllGroups) - setGroupTextColour(); - } - alignPanel.repaint(); - } - }); - - col2.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - Color col = JColorChooser.showDialog(bigpanel, - "Select Colour for Text", - viewport.textColour); - if (col != null) - { - viewport.textColour2 = col; - col2.setBackground(col); - col2.setForeground(col); - if(viewport.colourAppliesToAllGroups) - setGroupTextColour(); - } - alignPanel.repaint(); - } - }); - - - slider.addChangeListener(new ChangeListener() - { - public void stateChanged(ChangeEvent evt) - { - viewport.thresholdTextColour = slider.getValue(); - if(viewport.colourAppliesToAllGroups) - setGroupTextColour(); - alignPanel.repaint(); - } - }); - - int reply = JOptionPane.showInternalOptionDialog(this, - bigpanel, - "Adjust Foreground Text Colour Threshold", - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE, - null, - null, null); - - if(reply==JOptionPane.CANCEL_OPTION) - { - viewport.textColour = new Color(original1); - viewport.textColour2 = new Color(original2); - viewport.thresholdTextColour = thresh; - } - } - - void setGroupTextColour() - { - if(viewport.alignment.getGroups()==null) - return; - - Vector groups = viewport.alignment.getGroups(); - - for(int i=0; i