X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FAptxFrame.java;h=92d2da236d4d202ca217ad01f6347d4a198b9642;hb=2c3b0597cfb782c08f8ec3686412fc4975a1dbd3;hp=f0c535b3bc2a661748ba27df0746ed6a45d61a5e;hpb=ecbdf5e10c13f242f3918d3c7b898973f04b28db;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/AptxFrame.java b/src/jalview/ext/archaeopteryx/AptxFrame.java index f0c535b..92d2da2 100644 --- a/src/jalview/ext/archaeopteryx/AptxFrame.java +++ b/src/jalview/ext/archaeopteryx/AptxFrame.java @@ -1,27 +1,421 @@ package jalview.ext.archaeopteryx; -import jalview.ext.treeviewer.ExternalTreePanelI; -import jalview.ext.treeviewer.ExternalTreeViewerI; +import jalview.bin.Cache; +import jalview.ext.treeviewer.TreeControlsI; +import jalview.ext.treeviewer.TreeFrameI; +import jalview.ext.treeviewer.TreeI; +import jalview.ext.treeviewer.TreePanelI; +import jalview.ext.treeviewer.TreeViewerBindingI; +import jalview.ext.treeviewer.TreeViewerUtils; +import jalview.gui.Desktop; +import jalview.gui.EPSOptions; +import jalview.io.JalviewFileChooser; +import jalview.io.JalviewFileView; +import jalview.util.ImageMaker; +import jalview.util.MessageManager; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Event; +import java.awt.Font; +import java.awt.Image; +import java.awt.MenuComponent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.FileOutputStream; + +import javax.accessibility.AccessibleContext; +import javax.swing.JLayeredPane; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JRootPane; +import javax.swing.JSeparator; +import javax.swing.event.InternalFrameListener; + +import org.forester.archaeopteryx.Archaeopteryx; +import org.forester.archaeopteryx.Configuration; import org.forester.archaeopteryx.MainFrame; +import org.forester.phylogeny.Phylogeny; +import org.jibble.epsgraphics.EpsGraphics2D; -public class Aptx implements ExternalTreeViewerI +public class AptxFrame implements TreeFrameI { - private final MainFrame aptxApp; + private final MainFrame aptxFrame; + + + + private TreePanelI aptxPanel; - public Aptx(MainFrame aptx) + private TreeControlsI aptxControls; + + + public AptxFrame(Phylogeny tree, Configuration aptxConfig, + String treeTitle) { - aptxApp = aptx; + this(Archaeopteryx.createApplication(tree, + aptxConfig, + treeTitle)); + + } + + public AptxFrame(MainFrame aptx) + { + aptxFrame = aptx; + aptxPanel = new AptxTreePanel( + aptxFrame.getMainPanel().getCurrentTreePanel()); + aptxControls = new AptxControlPanel( + aptxFrame.getMainPanel().getControlPanel()); + adaptAptxGui(aptxFrame); } + + /** + * Hides certain redundant Archaeopteryx GUI elements such as the menu items + * for reading in trees and adds extra items related to Jalview such as the + * tree sorting menu item. + * + * + * @param aptxFrame + */ + protected void adaptAptxGui(MainFrame aptxFrame) + { + JMenuBar frameBar = aptxFrame.getJMenuBar(); + boolean epsAdded = false; + for (int i = 0; i < frameBar.getMenuCount();i++) { + JMenu menu = frameBar.getMenu(i); + int menuCount = menu.getMenuComponentCount(); + + if (menu.getText().contains("File")) + { + // hide all "Read from ..." and "New" menu items and any Separators that + // come directly after them + Component previousComp = null; + for (int x = 0; x < menuCount; x++) + { + Component menuItem = menu.getMenuComponent(x); + if (previousComp instanceof JMenuItem) + { + JMenuItem previousMenuItem = (JMenuItem) previousComp; + if (previousMenuItem.getText().startsWith("Read") + || previousMenuItem.getText() + .startsWith("New") + || previousMenuItem.getText() + .startsWith("Close Tab")) + { + previousComp.setVisible(false); + + if (menuItem instanceof JSeparator) + { + menuItem.setVisible(false); + } + + } + + if ((!epsAdded) && previousMenuItem.getText() + .startsWith("Export to")) + { + JMenuItem exportEps = new JMenuItem("Export to EPS file..."); + menu.add(exportEps, x); + exportEps.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + epsTree_actionPerformed(e); + + } + + }); + epsAdded = true; + + } + } + previousComp = menuItem; + } + } + else if (menu.getText().contains("Inference")) + { + menu.setVisible(false); + } + else if (menu.getText().contains("View")) + { + menu.addSeparator(); + JMenuItem sortByTree = new JMenuItem("Sort alignment by tree"); + JMenuItem refreshJalview = new JMenuItem( + "Filter alignment to show only currently visible sequences"); + + refreshJalview.setFont(menu.getFont()); + refreshJalview.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + TreeViewerBindingI bindingManager = TreeViewerUtils + .getActiveTreeViews().get(AptxFrame.this); + bindingManager.actionPerformed(e); + } + }); + + sortByTree.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + TreeViewerBindingI bindingManager = TreeViewerUtils + .getActiveTreeViews().get(AptxFrame.this); + bindingManager.sortByTree_actionPerformed(); + + } + + }); + + menu.add(sortByTree); + menu.add(refreshJalview); + + sortByTree.setFont(menu.getFont()); + + + + } + + } + // aptxFrame.validate(); + } + + public void epsTree_actionPerformed(ActionEvent e) + { + boolean accurateText = true; + + String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING", + "Prompt each time"); + + // If we need to prompt, and if the GUI is visible then + // Prompt for EPS rendering style + if (renderStyle.equalsIgnoreCase("Prompt each time") + && !(System.getProperty("java.awt.headless") != null && System + .getProperty("java.awt.headless").equals("true"))) + { + EPSOptions eps = new EPSOptions(); + renderStyle = eps.getValue(); + + if (renderStyle == null || eps.cancelled) + { + return; + } + + } + + if (renderStyle.equalsIgnoreCase("text")) + { + accurateText = false; + } + + int width = getTreePanel().getWidth(); + int height = getTreePanel().getHeight(); + + try + { + JalviewFileChooser chooser = new JalviewFileChooser( + ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION); + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle( + MessageManager.getString("label.create_eps_from_tree")); + chooser.setToolTipText(MessageManager.getString("action.save")); + int value = chooser.showSaveDialog(aptxFrame); + + if (value != JalviewFileChooser.APPROVE_OPTION) + { + return; + } + + Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); + + FileOutputStream out = new FileOutputStream( + chooser.getSelectedFile()); + EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, + height); + + pg.setAccurateTextMode(accurateText); + + getTreePanel().paintToFile(pg, width, height); + + pg.flush(); + pg.close(); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } @Override - public ExternalTreePanelI getTreePanel() + public TreePanelI getTreePanel() { - ExternalTreePanelI aptxPanel = new AptxTreePanel( - aptxApp.getMainPanel().getCurrentTreePanel()); return aptxPanel; } -} + + @Override + public TreeI getTree() + { + return aptxPanel.getTree(); + } + + @Override + public void checkMultipleTrees() + { + aptxFrame.activateSaveAllIfNeeded(); + + } + + @Override + public int getNumberOfTrees() + { + return aptxFrame.getMainPanel().getTabbedPane().getTabCount(); + } + + @Override + public TreeControlsI getTreeControls() + { + return aptxControls; + } + + @Override + public AccessibleContext getAccessibleContext() + { + return aptxFrame.getAccessibleContext(); + } + + @Override + public JRootPane getRootPane() + { + return aptxFrame.getRootPane(); + } + + @Override + public void setContentPane(Container contentPane) + { + aptxFrame.setContentPane(contentPane); + + } + + @Override + public Container getContentPane() + { + return aptxFrame.getContentPane(); + } + + @Override + public void setLayeredPane(JLayeredPane layeredPane) + { + aptxFrame.setLayeredPane(layeredPane); + + } + + @Override + public JLayeredPane getLayeredPane() + { + return aptxFrame.getLayeredPane(); + } + + @Override + public void setGlassPane(Component glassPane) + { + aptxFrame.setGlassPane(glassPane); + + } + + @Override + public Component getGlassPane() + { + return aptxFrame.getGlassPane(); + } + + @Override + public boolean imageUpdate(Image img, int infoflags, int x, int y, + int width, int height) + { + return aptxFrame.imageUpdate(img, infoflags, x, y, width, height); + } + + @Override + public Font getFont() + { + return aptxFrame.getFont(); + } + + @Override + public void remove(MenuComponent comp) + { + aptxFrame.remove(comp); + + } + + @Deprecated + @Override + public boolean postEvent(Event evt) + { + return aptxFrame.postEvent(evt); + } + + @Override + public void addFrameListener(InternalFrameListener listener) + { + aptxFrame.addInternalFrameListener(listener); + + } + + @Override + public void removeFrameListener(InternalFrameListener listener) + { + aptxFrame.removeInternalFrameListener(listener); + + } + + @Override + public InternalFrameListener[] getFrameListeners() + { + return aptxFrame.getInternalFrameListeners(); + + } + + @Override + public void repaint() + { + aptxFrame.repaint(); + + } + + @Override + public void setMinimumSize(Dimension dimension) + { + aptxFrame.setMinimumSize(dimension); + + } + + @Override + public boolean isShowing() + { + return aptxFrame.isShowing(); + } + + @Override + public Container getTopLevelAncestor() + { + return aptxFrame.getTopLevelAncestor(); + } + + @Override + public void addFrameToJalview(String title, boolean makeVisible, + int width, int height, boolean resizable, boolean ignoreMinSize) + { + Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height, + resizable, ignoreMinSize); + + } + +} \ No newline at end of file