1 package jalview.ext.archaeopteryx;
3 import jalview.bin.Cache;
4 import jalview.ext.treeviewer.ExternalTreeControlsI;
5 import jalview.ext.treeviewer.ExternalTreeFrame;
6 import jalview.ext.treeviewer.ExternalTreeI;
7 import jalview.ext.treeviewer.ExternalTreePanel;
8 import jalview.gui.Desktop;
9 import jalview.gui.EPSOptions;
10 import jalview.io.JalviewFileChooser;
11 import jalview.io.JalviewFileView;
12 import jalview.util.ImageMaker;
13 import jalview.util.MessageManager;
15 import java.awt.Component;
16 import java.awt.Container;
17 import java.awt.Dimension;
18 import java.awt.Event;
20 import java.awt.Image;
21 import java.awt.MenuComponent;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.io.FileOutputStream;
26 import javax.accessibility.AccessibleContext;
27 import javax.swing.JLayeredPane;
28 import javax.swing.JMenu;
29 import javax.swing.JMenuBar;
30 import javax.swing.JMenuItem;
31 import javax.swing.JRootPane;
32 import javax.swing.JSeparator;
33 import javax.swing.event.InternalFrameListener;
35 import org.forester.archaeopteryx.Archaeopteryx;
36 import org.forester.archaeopteryx.Configuration;
37 import org.forester.archaeopteryx.MainFrame;
38 import org.forester.phylogeny.Phylogeny;
39 import org.jibble.epsgraphics.EpsGraphics2D;
41 public class AptxFrame implements ExternalTreeFrame
43 private final MainFrame aptxFrame;
45 private ExternalTreePanel aptxPanel;
47 private ExternalTreeControlsI aptxControls;
50 public AptxFrame(Phylogeny tree, Configuration aptxConfig,
53 this(Archaeopteryx.createApplication(tree,
60 public AptxFrame(MainFrame aptx)
64 aptxPanel = new AptxTreePanel(
65 aptxFrame.getMainPanel().getCurrentTreePanel());
66 aptxControls = new AptxControlPanel(
67 aptxFrame.getMainPanel().getControlPanel());
68 adaptAptxGui(aptxFrame);
73 * Hides certain redundant Archaeopteryx GUI elements such as the menu items
74 * for reading in trees and adds extra items related to Jalview such as the
75 * tree sorting menu item.
80 protected void adaptAptxGui(MainFrame aptxFrame)
82 JMenuBar frameBar = aptxFrame.getJMenuBar();
83 boolean epsAdded = false;
84 for (int i = 0; i < frameBar.getMenuCount();i++) {
85 JMenu menu = frameBar.getMenu(i);
86 int menuCount = menu.getMenuComponentCount();
88 if (menu.getText().contains("File"))
90 // hide all "Read from ..." and "New" menu items and any Separators that
91 // come directly after them
92 Component previousComp = null;
93 for (int x = 0; x < menuCount; x++)
95 Component menuItem = menu.getMenuComponent(x);
96 if (previousComp instanceof JMenuItem)
98 JMenuItem previousMenuItem = (JMenuItem) previousComp;
99 if (previousMenuItem.getText().startsWith("Read")
100 || previousMenuItem.getText()
102 || previousMenuItem.getText()
103 .startsWith("Close Tab"))
105 previousComp.setVisible(false);
107 if (menuItem instanceof JSeparator)
109 menuItem.setVisible(false);
114 if ((!epsAdded) && previousMenuItem.getText()
115 .startsWith("Export to"))
117 JMenuItem exportEps = new JMenuItem("Export to EPS file...");
118 menu.add(exportEps, x);
119 exportEps.addActionListener(new ActionListener()
123 public void actionPerformed(ActionEvent e)
125 epsTree_actionPerformed(e);
134 previousComp = menuItem;
137 else if (menu.getText().contains("Inference"))
139 menu.setVisible(false);
141 else if (menu.getText().contains("View"))
144 JMenuItem sortByTree = new JMenuItem("Sort alignment by tree");
145 JMenuItem refreshJalview = new JMenuItem(
146 "Filter alignment to show only currently visible sequences");
148 refreshJalview.setFont(menu.getFont());
150 menu.add(sortByTree);
151 menu.add(refreshJalview);
153 sortByTree.setFont(menu.getFont());
154 refreshJalview.addActionListener(new ActionListener()
158 public void actionPerformed(ActionEvent e)
160 // TODO Auto-generated method stub
170 // aptxFrame.validate();
173 public void epsTree_actionPerformed(ActionEvent e)
175 boolean accurateText = true;
177 String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
180 // If we need to prompt, and if the GUI is visible then
181 // Prompt for EPS rendering style
182 if (renderStyle.equalsIgnoreCase("Prompt each time")
183 && !(System.getProperty("java.awt.headless") != null && System
184 .getProperty("java.awt.headless").equals("true")))
186 EPSOptions eps = new EPSOptions();
187 renderStyle = eps.getValue();
189 if (renderStyle == null || eps.cancelled)
196 if (renderStyle.equalsIgnoreCase("text"))
198 accurateText = false;
201 int width = getTreePanel().getWidth();
202 int height = getTreePanel().getHeight();
206 JalviewFileChooser chooser = new JalviewFileChooser(
207 ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION);
208 chooser.setFileView(new JalviewFileView());
209 chooser.setDialogTitle(
210 MessageManager.getString("label.create_eps_from_tree"));
211 chooser.setToolTipText(MessageManager.getString("action.save"));
213 int value = chooser.showSaveDialog(aptxFrame);
215 if (value != JalviewFileChooser.APPROVE_OPTION)
220 Cache.setProperty("LAST_DIRECTORY",
221 chooser.getSelectedFile().getParent());
223 FileOutputStream out = new FileOutputStream(
224 chooser.getSelectedFile());
225 EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,
228 pg.setAccurateTextMode(accurateText);
230 getTreePanel().paintToFile(pg, width, height);
234 } catch (Exception ex)
236 ex.printStackTrace();
240 public ExternalTreePanel getTreePanel()
246 public ExternalTreeI getTree()
248 return aptxPanel.getTree();
252 public void checkMultipleTrees()
254 aptxFrame.activateSaveAllIfNeeded();
259 public int getNumberOfTrees()
261 return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
265 public ExternalTreeControlsI getTreeControls()
271 public AccessibleContext getAccessibleContext()
273 return aptxFrame.getAccessibleContext();
277 public JRootPane getRootPane()
279 return aptxFrame.getRootPane();
283 public void setContentPane(Container contentPane)
285 aptxFrame.setContentPane(contentPane);
290 public Container getContentPane()
292 return aptxFrame.getContentPane();
296 public void setLayeredPane(JLayeredPane layeredPane)
298 aptxFrame.setLayeredPane(layeredPane);
303 public JLayeredPane getLayeredPane()
305 return aptxFrame.getLayeredPane();
309 public void setGlassPane(Component glassPane)
311 aptxFrame.setGlassPane(glassPane);
316 public Component getGlassPane()
318 return aptxFrame.getGlassPane();
322 public boolean imageUpdate(Image img, int infoflags, int x, int y,
323 int width, int height)
325 return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
329 public Font getFont()
331 return aptxFrame.getFont();
335 public void remove(MenuComponent comp)
337 aptxFrame.remove(comp);
343 public boolean postEvent(Event evt)
345 return aptxFrame.postEvent(evt);
349 public void addFrameListener(InternalFrameListener listener)
351 aptxFrame.addInternalFrameListener(listener);
356 public void removeFrameListener(InternalFrameListener listener)
358 aptxFrame.removeInternalFrameListener(listener);
363 public InternalFrameListener[] getFrameListeners()
365 return aptxFrame.getInternalFrameListeners();
370 public void repaint()
377 public void setMinimumSize(Dimension dimension)
379 aptxFrame.setMinimumSize(dimension);
384 public boolean isShowing()
386 return aptxFrame.isShowing();
390 public Container getTopLevelAncestor()
392 return aptxFrame.getTopLevelAncestor();
396 public void addFrameToJalview(String title, boolean makeVisible,
397 int width, int height, boolean resizable, boolean ignoreMinSize)
399 Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
400 resizable, ignoreMinSize);