1 package jalview.ext.archaeopteryx;
3 import jalview.bin.Cache;
4 import jalview.ext.treeviewer.TreeControlsI;
5 import jalview.ext.treeviewer.TreeFrameI;
6 import jalview.ext.treeviewer.TreeI;
7 import jalview.ext.treeviewer.TreePanelI;
8 import jalview.ext.treeviewer.TreeViewerBindingI;
9 import jalview.ext.treeviewer.TreeViewerUtils;
10 import jalview.gui.Desktop;
11 import jalview.gui.EPSOptions;
12 import jalview.io.JalviewFileChooser;
13 import jalview.io.JalviewFileView;
14 import jalview.util.ImageMaker;
15 import jalview.util.MessageManager;
17 import java.awt.Component;
18 import java.awt.Container;
19 import java.awt.Dimension;
20 import java.awt.Event;
22 import java.awt.Image;
23 import java.awt.MenuComponent;
24 import java.awt.event.ActionEvent;
25 import java.awt.event.ActionListener;
26 import java.io.FileOutputStream;
28 import javax.accessibility.AccessibleContext;
29 import javax.swing.JLayeredPane;
30 import javax.swing.JMenu;
31 import javax.swing.JMenuBar;
32 import javax.swing.JMenuItem;
33 import javax.swing.JRootPane;
34 import javax.swing.JSeparator;
35 import javax.swing.event.InternalFrameListener;
37 import org.forester.archaeopteryx.Archaeopteryx;
38 import org.forester.archaeopteryx.Configuration;
39 import org.forester.archaeopteryx.MainFrame;
40 import org.forester.phylogeny.Phylogeny;
41 import org.jibble.epsgraphics.EpsGraphics2D;
43 public class AptxFrame implements TreeFrameI
45 private final MainFrame aptxFrame;
49 private TreePanelI aptxPanel;
51 private TreeControlsI aptxControls;
54 public AptxFrame(Phylogeny tree, Configuration aptxConfig,
57 this(Archaeopteryx.createApplication(tree,
64 public AptxFrame(MainFrame aptx)
68 aptxPanel = new AptxTreePanel(
69 aptxFrame.getMainPanel().getCurrentTreePanel());
70 aptxControls = new AptxControlPanel(
71 aptxFrame.getMainPanel().getControlPanel());
72 adaptAptxGui(aptxFrame);
77 * Hides certain redundant Archaeopteryx GUI elements such as the menu items
78 * for reading in trees and adds extra items related to Jalview such as the
79 * tree sorting menu item.
84 protected void adaptAptxGui(MainFrame aptxFrame)
86 JMenuBar frameBar = aptxFrame.getJMenuBar();
87 boolean epsAdded = false;
88 for (int i = 0; i < frameBar.getMenuCount();i++) {
89 JMenu menu = frameBar.getMenu(i);
90 int menuCount = menu.getMenuComponentCount();
92 if (menu.getText().contains("File"))
94 // hide all "Read from ..." and "New" menu items and any Separators that
95 // come directly after them
96 Component previousComp = null;
97 for (int x = 0; x < menuCount; x++)
99 Component menuItem = menu.getMenuComponent(x);
100 if (previousComp instanceof JMenuItem)
102 JMenuItem previousMenuItem = (JMenuItem) previousComp;
103 if (previousMenuItem.getText().startsWith("Read")
104 || previousMenuItem.getText()
106 || previousMenuItem.getText()
107 .startsWith("Close Tab"))
109 previousComp.setVisible(false);
111 if (menuItem instanceof JSeparator)
113 menuItem.setVisible(false);
118 if ((!epsAdded) && previousMenuItem.getText()
119 .startsWith("Export to"))
121 JMenuItem exportEps = new JMenuItem("Export to EPS file...");
122 menu.add(exportEps, x);
123 exportEps.addActionListener(new ActionListener()
127 public void actionPerformed(ActionEvent e)
129 epsTree_actionPerformed(e);
138 previousComp = menuItem;
141 else if (menu.getText().contains("Inference"))
143 menu.setVisible(false);
145 else if (menu.getText().contains("View"))
148 JMenuItem sortByTree = new JMenuItem("Sort alignment by tree");
149 JMenuItem refreshJalview = new JMenuItem(
150 "Filter alignment to show only currently visible sequences");
152 refreshJalview.setFont(menu.getFont());
153 refreshJalview.addActionListener(new ActionListener() {
156 public void actionPerformed(ActionEvent e) {
157 TreeViewerBindingI bindingManager = TreeViewerUtils
158 .getActiveTreeViews().get(AptxFrame.this);
159 bindingManager.actionPerformed(e);
163 sortByTree.addActionListener(new ActionListener()
167 public void actionPerformed(ActionEvent e)
169 TreeViewerBindingI bindingManager = TreeViewerUtils
170 .getActiveTreeViews().get(AptxFrame.this);
171 bindingManager.sortByTree_actionPerformed();
177 menu.add(sortByTree);
178 menu.add(refreshJalview);
180 sortByTree.setFont(menu.getFont());
187 // aptxFrame.validate();
190 public void epsTree_actionPerformed(ActionEvent e)
192 boolean accurateText = true;
194 String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
197 // If we need to prompt, and if the GUI is visible then
198 // Prompt for EPS rendering style
199 if (renderStyle.equalsIgnoreCase("Prompt each time")
200 && !(System.getProperty("java.awt.headless") != null && System
201 .getProperty("java.awt.headless").equals("true")))
203 EPSOptions eps = new EPSOptions();
204 renderStyle = eps.getValue();
206 if (renderStyle == null || eps.cancelled)
213 if (renderStyle.equalsIgnoreCase("text"))
215 accurateText = false;
218 int width = getTreePanel().getWidth();
219 int height = getTreePanel().getHeight();
223 JalviewFileChooser chooser = new JalviewFileChooser(
224 ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION);
225 chooser.setFileView(new JalviewFileView());
226 chooser.setDialogTitle(
227 MessageManager.getString("label.create_eps_from_tree"));
228 chooser.setToolTipText(MessageManager.getString("action.save"));
230 int value = chooser.showSaveDialog(aptxFrame);
232 if (value != JalviewFileChooser.APPROVE_OPTION)
237 Cache.setProperty("LAST_DIRECTORY",
238 chooser.getSelectedFile().getParent());
240 FileOutputStream out = new FileOutputStream(
241 chooser.getSelectedFile());
242 EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,
245 pg.setAccurateTextMode(accurateText);
247 getTreePanel().paintToFile(pg, width, height);
251 } catch (Exception ex)
253 ex.printStackTrace();
257 public TreePanelI getTreePanel()
263 public TreeI getTree()
265 return aptxPanel.getTree();
269 public void checkMultipleTrees()
271 aptxFrame.activateSaveAllIfNeeded();
276 public int getNumberOfTrees()
278 return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
282 public TreeControlsI getTreeControls()
288 public AccessibleContext getAccessibleContext()
290 return aptxFrame.getAccessibleContext();
294 public JRootPane getRootPane()
296 return aptxFrame.getRootPane();
300 public void setContentPane(Container contentPane)
302 aptxFrame.setContentPane(contentPane);
307 public Container getContentPane()
309 return aptxFrame.getContentPane();
313 public void setLayeredPane(JLayeredPane layeredPane)
315 aptxFrame.setLayeredPane(layeredPane);
320 public JLayeredPane getLayeredPane()
322 return aptxFrame.getLayeredPane();
326 public void setGlassPane(Component glassPane)
328 aptxFrame.setGlassPane(glassPane);
333 public Component getGlassPane()
335 return aptxFrame.getGlassPane();
339 public boolean imageUpdate(Image img, int infoflags, int x, int y,
340 int width, int height)
342 return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
346 public Font getFont()
348 return aptxFrame.getFont();
352 public void remove(MenuComponent comp)
354 aptxFrame.remove(comp);
360 public boolean postEvent(Event evt)
362 return aptxFrame.postEvent(evt);
366 public void addFrameListener(InternalFrameListener listener)
368 aptxFrame.addInternalFrameListener(listener);
373 public void removeFrameListener(InternalFrameListener listener)
375 aptxFrame.removeInternalFrameListener(listener);
380 public InternalFrameListener[] getFrameListeners()
382 return aptxFrame.getInternalFrameListeners();
387 public void repaint()
394 public void setMinimumSize(Dimension dimension)
396 aptxFrame.setMinimumSize(dimension);
401 public boolean isShowing()
403 return aptxFrame.isShowing();
407 public Container getTopLevelAncestor()
409 return aptxFrame.getTopLevelAncestor();
413 public void addFrameToJalview(String title, boolean makeVisible,
414 int width, int height, boolean resizable, boolean ignoreMinSize)
416 Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
417 resizable, ignoreMinSize);