X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=68996266eed550b9e608a0cfe517c43058575260;hb=553a3df552d02cd08328c3e4044c5f686c012776;hp=f82efb5b9b25bade7cbc11287ced0586f4c9c0d2;hpb=0b23947e2cdcd704d3f313b23ba271e43d097344;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index f82efb5..6899626 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -36,6 +36,8 @@ import jalview.schemes.*; import jalview.commands.*; import jalview.ws.*; import java.awt.dnd.*; +import javax.swing.event.ChangeListener; +import javax.swing.event.ChangeEvent; /** * DOCUMENT ME! @@ -58,9 +60,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener /** DOCUMENT ME!! */ - public String currentFileFormat = null; + String currentFileFormat = null; - public String fileName = null; + String fileName = null; private int treeCount = 0; @@ -146,12 +148,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener addKeyListener(); + } + public void setFileName(String file, String format) + { + fileName = file; + currentFileFormat = format; + reload.setEnabled(true); } void addKeyListener() { - final AlignFrame af = this; addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) @@ -165,37 +172,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener switch (evt.getKeyCode()) { - case KeyEvent.VK_V: - if (!evt.isControlDown()) - { - AlignmentPanel newap = - new Jalview2XML().copyAlignPanel(alignPanel, true); - - if(viewport.viewName==null) - viewport.viewName="View 1"; - - newap.av.historyList = viewport.historyList; - newap.av.redoList = viewport.redoList; - newap.av.viewName = "View " + - (Desktop.getViewCount(viewport.getSequenceSetId())+1); - - addAlignmentPanel(newap, false); - - tabbedPane.setSelectedIndex(tabbedPane.getTabCount()-1); - - } - break; - 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); @@ -386,6 +362,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); @@ -404,6 +382,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener this.getContentPane().add(tabbedPane, BorderLayout.CENTER); } + expandViews.setEnabled(true); + gatherViews.setEnabled(true); tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); ap.setVisible(false); @@ -411,8 +391,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if(newPanel) { - ap.av.updateConsensus(ap); + if (ap.av.padGaps) + ap.av.alignment.padGaps(); ap.av.updateConservation(ap); + ap.av.updateConsensus(ap); } } @@ -450,7 +432,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { // System.out.println("deregistering discoverer listener"); Desktop.discoverer.removePropertyChangeListener(thisListener); - closeMenuItem_actionPerformed(null); + closeMenuItem_actionPerformed(true); } ; }); @@ -476,10 +458,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.idsAlignRight); renderGapsMenuItem.setSelected(av.renderGaps); wrapMenuItem.setSelected(av.wrapAlignment); annotationPanelMenuItem.setState(av.showAnnotation); @@ -492,7 +476,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener showSeqFeatures.setSelected(av.showSequenceFeatures); hiddenMarkers.setState(av.showHiddenMarkers); applyToAllGroups.setState(av.colourAppliesToAllGroups); - smoothFont.setState(av.antiAlias); updateEditMenuBar(); } @@ -563,6 +546,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport); } + public void reload_actionPerformed(ActionEvent e) + { + if(fileName!=null) + { + if(currentFileFormat.equals("Jalview")) + { + this.closeMenuItem_actionPerformed(true); + } + else + { + viewport.alignment.deleteAllGroups(); + viewport.sequenceColours=null; + while (viewport.alignment.getHeight() > 0) + { + viewport.alignment.deleteSequence(0); + } + + viewport.historyList.clear(); + viewport.redoList.clear(); + Alignment dset = viewport.alignment.getDataset(); + while (dset.getHeight() > 0) + { + dset.deleteSequence(0); + } + + firePropertyChange("Alignment", null, null); + + updateEditMenuBar(); + } + + FileLoader loader = new FileLoader(); + String protocol = fileName.startsWith("http:")? "URL":"File"; + loader.LoadFile(viewport, fileName, protocol, currentFileFormat); + + } + } + + public void addFromText_actionPerformed(ActionEvent e) { Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport); @@ -723,6 +744,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); @@ -825,28 +847,45 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * * @param e DOCUMENT ME! */ - public void closeMenuItem_actionPerformed(ActionEvent e) + public void closeMenuItem_actionPerformed(boolean closeAllTabs) { + if(alignPanels!=null && alignPanels.size()<2) + closeAllTabs = true; + try { if(alignPanels!=null) { - for (int i = 0; i < alignPanels.size(); i++) + if (closeAllTabs) + for (int i = 0; i < alignPanels.size(); i++) + { + AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i); + PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas); + PaintRefresher.RemoveComponent(ap.idPanel.idCanvas); + PaintRefresher.RemoveComponent(ap); + } + else { - AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i); - PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas); - PaintRefresher.RemoveComponent(ap.idPanel.idCanvas); - PaintRefresher.RemoveComponent(ap); + 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.validate(); + + if(index==tabbedPane.getTabCount()) + index --; + + this.tabSelectionChanged(index); } - // alignPanels = null; } - // else - // System.out.println("null one here"); - // alignPanel = null; - // viewport = null; - - this.setClosed(true); + if (closeAllTabs) + this.setClosed(true); } catch (Exception ex) { @@ -912,10 +951,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.redoList.push(command); command.undoCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + AlignViewport originalSource = getOriginatingSource(command); + + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null,null); } /** @@ -928,12 +968,40 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener CommandI command = (CommandI) viewport.redoList.pop(); viewport.historyList.push(command); command.doCommand(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; + + AlignViewport originalSource = getOriginatingSource(command); + originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null, null); } + AlignViewport getOriginatingSource(CommandI command) + { + AlignViewport originalSource = viewport; + //For sequence removal and addition, we need to fire + //the property change event FROM the viewport where the + //original alignment was altered + if (command instanceof EditCommand) + { + EditCommand editCommand = (EditCommand) command; + AlignmentI 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; + } + } + } + } + return originalSource; + } /** * DOCUMENT ME! @@ -1297,7 +1365,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener * * @param e DOCUMENT ME! */ - protected void delete_actionPerformed(ActionEvent e) + protected void delete_actionPerformed(ActionEvent evt) { SequenceGroup sg = viewport.getSelectionGroup(); @@ -1307,15 +1375,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; } @@ -1369,6 +1433,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener protected void deleteGroups_actionPerformed(ActionEvent e) { viewport.alignment.deleteAllGroups(); + viewport.sequenceColours.clear(); viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.repaint(); @@ -1413,7 +1478,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()); } /** @@ -1438,7 +1503,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false); } - PaintRefresher.Refresh(this, viewport.getSequenceSetId()); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } public void invertColSel_actionPerformed(ActionEvent e) @@ -1497,6 +1562,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.alignment, viewport.colSel, viewport.selectionGroup); + viewport.setStartRes(0); } else { @@ -1632,13 +1698,43 @@ 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) + { + AlignmentPanel newap = + new Jalview2XML().copyAlignPanel(alignPanel, true); + + if (viewport.viewName == null) + viewport.viewName = "View 1"; + + newap.av.historyList = viewport.historyList; + newap.av.redoList = viewport.redoList; + newap.av.viewName = "View " + + (Desktop.getViewCount(viewport.getSequenceSetId()) + 1); + + addAlignmentPanel(newap, false); + + if(alignPanels.size()==2) + { + viewport.gatherViewsHere = true; + } + tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1); + } + + public void expandViews_actionPerformed(ActionEvent e) + { + Desktop.instance.explodeViews(this); + } + + public void gatherViews_actionPerformed(ActionEvent e) + { + Desktop.instance.gatherViews(this); } + + /** * DOCUMENT ME! * @@ -1649,13 +1745,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener new FontChooser(alignPanel); } - public void smoothFont_actionPerformed(ActionEvent e) - { - viewport.antiAlias = smoothFont.isSelected(); - alignPanel.annotationPanel.image = null; - alignPanel.repaint(); - } - /** * DOCUMENT ME! @@ -1670,6 +1759,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.repaint(); } + public void idRightAlign_actionPerformed(ActionEvent e) + { + viewport.idsAlignRight = idRightAlign.isSelected(); + alignPanel.repaint(); + } + + /** * DOCUMENT ME! @@ -1861,6 +1957,114 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.setOverviewPanel(overview); } + public void textColour_actionPerformed(ActionEvent e) + { + int original1 = viewport.textColour.getRGB(); + int original2 = viewport.textColour2.getRGB(); + int thresh = viewport.thresholdTextColour; + final JSlider slider = new JSlider(0, 750, viewport.thresholdTextColour); + final JButton col1 = new JButton("DARK"); + col1.setBackground(viewport.textColour); + col1.setForeground(viewport.textColour); + final JButton col2 = new JButton("LIGHT"); + col2.setBackground(viewport.textColour2); + col2.setForeground(viewport.textColour2); + final JPanel bigpanel = new JPanel(new BorderLayout()); + JPanel panel = new JPanel(); + bigpanel.add(panel, BorderLayout.CENTER); + bigpanel.add(new JLabel( + "Select 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