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.MainFrame;
36 import org.jibble.epsgraphics.EpsGraphics2D;
38 public class AptxFrame implements ExternalTreeFrame
40 private final MainFrame aptxFrame;
42 private ExternalTreePanel aptxPanel;
44 private ExternalTreeControlsI aptxControls;
46 public AptxFrame(MainFrame aptx)
49 aptxPanel = new AptxTreePanel(
50 aptxFrame.getMainPanel().getCurrentTreePanel());
51 aptxControls = new AptxControlPanel(
52 aptxFrame.getMainPanel().getControlPanel());
53 adaptAptxGui(aptxFrame);
57 * Hides certain redundant Archaeopteryx GUI elements such as the menu items
58 * for reading in trees and adds extra items related to Jalview such as the
64 private void adaptAptxGui(MainFrame aptxFrame)
66 JMenuBar frameBar = aptxFrame.getJMenuBar();
67 boolean epsAdded = false;
68 for (int i = 0; i < frameBar.getMenuCount();i++) {
69 JMenu menu = frameBar.getMenu(i);
70 int menuCount = menu.getMenuComponentCount();
72 if (menu.getText().contains("File"))
74 // hide all "Read from ..." and "New" menu items and any Separators that
75 // come directly after them
76 Component previousComp = null;
77 for (int x = 0; x < menuCount; x++)
79 Component menuItem = menu.getMenuComponent(x);
80 if (previousComp instanceof JMenuItem)
82 JMenuItem previousMenuItem = (JMenuItem) previousComp;
83 if (previousMenuItem.getText().startsWith("Read")
84 || previousMenuItem.getText()
86 || previousMenuItem.getText()
87 .startsWith("Close Tab"))
89 previousComp.setVisible(false);
91 if (menuItem instanceof JSeparator)
93 menuItem.setVisible(false);
98 if ((!epsAdded) && previousMenuItem.getText()
99 .startsWith("Export to"))
101 JMenuItem exportEps = new JMenuItem("Export to EPS file...");
102 menu.add(exportEps, x);
103 exportEps.addActionListener(new ActionListener()
107 public void actionPerformed(ActionEvent e)
109 epsTree_actionPerformed(e);
118 previousComp = menuItem;
121 else if (menu.getText().contains("Inference"))
123 menu.setVisible(false);
125 else if (menu.getText().contains("View"))
128 JMenuItem sortByTree = new JMenuItem("Sort alignment by tree");
129 JMenuItem refreshJalview = new JMenuItem(
130 "Filter alignment to show only currently visible sequences");
132 refreshJalview.setFont(menu.getFont());
134 menu.add(sortByTree);
135 menu.add(refreshJalview);
137 sortByTree.setFont(menu.getFont());
138 refreshJalview.addActionListener(new ActionListener()
142 public void actionPerformed(ActionEvent e)
144 // TODO Auto-generated method stub
154 aptxFrame.validate();
157 public void epsTree_actionPerformed(ActionEvent e)
159 boolean accurateText = true;
161 String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
164 // If we need to prompt, and if the GUI is visible then
165 // Prompt for EPS rendering style
166 if (renderStyle.equalsIgnoreCase("Prompt each time")
167 && !(System.getProperty("java.awt.headless") != null && System
168 .getProperty("java.awt.headless").equals("true")))
170 EPSOptions eps = new EPSOptions();
171 renderStyle = eps.getValue();
173 if (renderStyle == null || eps.cancelled)
180 if (renderStyle.equalsIgnoreCase("text"))
182 accurateText = false;
185 int width = getTreePanel().getWidth();
186 int height = getTreePanel().getHeight();
190 JalviewFileChooser chooser = new JalviewFileChooser(
191 ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION);
192 chooser.setFileView(new JalviewFileView());
193 chooser.setDialogTitle(
194 MessageManager.getString("label.create_eps_from_tree"));
195 chooser.setToolTipText(MessageManager.getString("action.save"));
197 int value = chooser.showSaveDialog(aptxFrame);
199 if (value != JalviewFileChooser.APPROVE_OPTION)
204 Cache.setProperty("LAST_DIRECTORY",
205 chooser.getSelectedFile().getParent());
207 FileOutputStream out = new FileOutputStream(
208 chooser.getSelectedFile());
209 EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,
212 pg.setAccurateTextMode(accurateText);
214 getTreePanel().paintToFile(pg, width, height);
218 } catch (Exception ex)
220 ex.printStackTrace();
224 public ExternalTreePanel getTreePanel()
230 public ExternalTreeI getTree()
232 return aptxPanel.getTree();
236 public void checkMultipleTrees()
238 aptxFrame.activateSaveAllIfNeeded();
243 public int getNumberOfTrees()
245 return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
249 public ExternalTreeControlsI getTreeControls()
255 public AccessibleContext getAccessibleContext()
257 return aptxFrame.getAccessibleContext();
261 public JRootPane getRootPane()
263 return aptxFrame.getRootPane();
267 public void setContentPane(Container contentPane)
269 aptxFrame.setContentPane(contentPane);
274 public Container getContentPane()
276 return aptxFrame.getContentPane();
280 public void setLayeredPane(JLayeredPane layeredPane)
282 aptxFrame.setLayeredPane(layeredPane);
287 public JLayeredPane getLayeredPane()
289 return aptxFrame.getLayeredPane();
293 public void setGlassPane(Component glassPane)
295 aptxFrame.setGlassPane(glassPane);
300 public Component getGlassPane()
302 return aptxFrame.getGlassPane();
306 public boolean imageUpdate(Image img, int infoflags, int x, int y,
307 int width, int height)
309 return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
313 public Font getFont()
315 return aptxFrame.getFont();
319 public void remove(MenuComponent comp)
321 aptxFrame.remove(comp);
327 public boolean postEvent(Event evt)
329 return aptxFrame.postEvent(evt);
333 public void addFrameListener(InternalFrameListener listener)
335 aptxFrame.addInternalFrameListener(listener);
340 public void removeFrameListener(InternalFrameListener listener)
342 aptxFrame.removeInternalFrameListener(listener);
347 public InternalFrameListener[] getFrameListeners()
349 return aptxFrame.getInternalFrameListeners();
354 public void repaint()
361 public void setMinimumSize(Dimension dimension)
363 aptxFrame.setMinimumSize(dimension);
368 public boolean isShowing()
370 return aptxFrame.isShowing();
374 public Container getTopLevelAncestor()
376 return aptxFrame.getTopLevelAncestor();
380 public void addFrameToJalview(String title, boolean makeVisible,
381 int width, int height, boolean resizable, boolean ignoreMinSize)
383 Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
384 resizable, ignoreMinSize);