X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=18ebf0eb64c794816d71bbfe73512ae2f242481c;hb=32a72d077d2371f4566688fbd103103d8505b27f;hp=7ef0e25a376a6bd3d2dff12cb705234021def210;hpb=488e3a038c2ba1a3926f2af5eaea97ba76e028d0;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 7ef0e25..18ebf0e 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,7 +60,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener /** DOCUMENT ME!! */ - public String currentFileFormat = null; + String currentFileFormat = null; + + String fileName = null; private int treeCount = 0; @@ -144,7 +148,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener addKeyListener(); + } + public void setFileName(String file, String format) + { + fileName = file; + currentFileFormat = format; + reload.setEnabled(true); } void addKeyListener() @@ -163,38 +173,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener switch (evt.getKeyCode()) { - case KeyEvent.VK_V: - if (!evt.isControlDown()) - { - AlignmentI al; - if(viewport.hasHiddenRows) - { - al = viewport.alignment.getHiddenSequences().getFullAlignment(); - } - else - al = new Alignment(viewport.alignment.getSequencesArray()); - - AlignViewport newview = new AlignViewport(al); - - if(viewport.viewName==null) - viewport.viewName="View 1"; - - newview.historyList = viewport.historyList; - newview.redoList = viewport.redoList; - - newview.sequenceSetID = viewport.getSequenceSetId(); - newview.viewName = "View " + - (Desktop.getViewCount(viewport.getSequenceSetId())+1); - - AlignmentPanel newap = new AlignmentPanel(af, newview); - - PaintRefresher.Register(newap, viewport.getSequenceSetId()); - PaintRefresher.Register(alignPanel, viewport.getSequenceSetId()); - - addAlignmentPanel(newap, true); - tabbedPane.setSelectedIndex(tabbedPane.getTabCount()-1); - } - break; case KeyEvent.VK_G: Desktop.instance.gatherViews(af); break; @@ -396,6 +374,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); @@ -421,8 +401,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); } } @@ -460,7 +442,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { // System.out.println("deregistering discoverer listener"); Desktop.discoverer.removePropertyChangeListener(thisListener); - closeMenuItem_actionPerformed(null); + closeMenuItem_actionPerformed(true); } ; }); @@ -486,10 +468,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); @@ -502,7 +486,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(); } @@ -573,6 +556,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); @@ -583,12 +604,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.instance.inputURLMenuItem_actionPerformed(viewport); } + + public void save_actionPerformed(ActionEvent e) + { + if(fileName==null || currentFileFormat==null) + saveAs_actionPerformed(null); + else + saveAlignment(fileName, currentFileFormat); + } + /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ - public void saveAlignmentMenu_actionPerformed(ActionEvent e) + public void saveAs_actionPerformed(ActionEvent e) { JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache. getProperty( "LAST_DIRECTORY"), @@ -609,7 +639,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (value == JalviewFileChooser.APPROVE_OPTION) { currentFileFormat = chooser.getSelectedFormat(); - if (currentFileFormat == null) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -620,13 +649,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener return; } + fileName = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", currentFileFormat); - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", fileName); - saveAlignment(choice, currentFileFormat); + saveAlignment(fileName, currentFileFormat); } } @@ -644,6 +674,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener new Jalview2XML().SaveAlignment(this, file, shortName); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); + + // USE Jalview2XML to save this file return true; } @@ -682,6 +717,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener out.print(output); out.close(); this.setTitle(file); + statusBar.setText("Successfully saved to file: " + +fileName+" in " + +format +" format."); return true; } catch (Exception ex) @@ -716,6 +754,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); Desktop.addInternalFrame(cap, "Alignment output - " + e.getActionCommand(), 600, 500); @@ -818,28 +857,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) { @@ -905,10 +961,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.redoList.push(command); command.undoCommand(); + viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null,null); } /** @@ -924,7 +980,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null; updateEditMenuBar(); - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, null); } @@ -1290,7 +1346,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(); @@ -1300,15 +1356,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; } @@ -1362,6 +1414,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(); @@ -1406,7 +1459,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()); } /** @@ -1431,7 +1484,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) @@ -1490,6 +1543,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.alignment, viewport.colSel, viewport.selectionGroup); + viewport.setStartRes(0); } else { @@ -1632,6 +1686,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Desktop.addInternalFrame(frame, "Find", 340, 110); } + 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); + } + + /** * DOCUMENT ME! * @@ -1642,13 +1719,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! @@ -1663,6 +1733,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignPanel.repaint(); } + public void idRightAlign_actionPerformed(ActionEvent e) + { + viewport.idsAlignRight = idRightAlign.isSelected(); + alignPanel.repaint(); + } + + /** * DOCUMENT ME! @@ -1854,6 +1931,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