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;
47 private TreeViewerBindingI viewBinding;
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"))
149 JMenuItem sortByTree = new JMenuItem("Sort alignment by tree");
150 JMenuItem refreshJalview = new JMenuItem(
151 "Filter alignment to show only currently visible sequences");
152 JMenuItem hideCollapsed = new JMenuItem(
153 "Hide sequences of collapsed nodes");
155 refreshJalview.setFont(menu.getFont());
156 refreshJalview.addActionListener(new ActionListener() {
159 public void actionPerformed(ActionEvent e) {
160 TreeViewerBindingI bindingManager = TreeViewerUtils
161 .getActiveTreeViews().get(AptxFrame.this);
162 bindingManager.actionPerformed(e);
166 sortByTree.addActionListener(new ActionListener()
170 public void actionPerformed(ActionEvent e)
172 TreeViewerBindingI bindingManager = TreeViewerUtils
173 .getActiveTreeViews().get(AptxFrame.this);
174 bindingManager.sortByTree_actionPerformed();
180 hideCollapsed.addActionListener(new ActionListener()
184 public void actionPerformed(ActionEvent e)
186 TreeViewerBindingI bindingManager = TreeViewerUtils
187 .getActiveTreeViews().get(AptxFrame.this);
188 bindingManager.hideCollapsedSequences_actionPerformed();
194 menu.add(sortByTree);
195 menu.add(refreshJalview);
196 menu.add(hideCollapsed);
198 sortByTree.setFont(menu.getFont());
205 // aptxFrame.validate();
208 public void epsTree_actionPerformed(ActionEvent e)
210 boolean accurateText = true;
212 String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
215 // If we need to prompt, and if the GUI is visible then
216 // Prompt for EPS rendering style
217 if (renderStyle.equalsIgnoreCase("Prompt each time")
218 && !(System.getProperty("java.awt.headless") != null && System
219 .getProperty("java.awt.headless").equals("true")))
221 EPSOptions eps = new EPSOptions();
222 renderStyle = eps.getValue();
224 if (renderStyle == null || eps.cancelled)
231 if (renderStyle.equalsIgnoreCase("text"))
233 accurateText = false;
236 int width = getTreePanel().getWidth();
237 int height = getTreePanel().getHeight();
241 JalviewFileChooser chooser = new JalviewFileChooser(
242 ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION);
243 chooser.setFileView(new JalviewFileView());
244 chooser.setDialogTitle(
245 MessageManager.getString("label.create_eps_from_tree"));
246 chooser.setToolTipText(MessageManager.getString("action.save"));
248 int value = chooser.showSaveDialog(aptxFrame);
250 if (value != JalviewFileChooser.APPROVE_OPTION)
255 Cache.setProperty("LAST_DIRECTORY",
256 chooser.getSelectedFile().getParent());
258 FileOutputStream out = new FileOutputStream(
259 chooser.getSelectedFile());
260 EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,
263 pg.setAccurateTextMode(accurateText);
265 getTreePanel().paintToFile(pg, width, height);
269 } catch (Exception ex)
271 ex.printStackTrace();
275 public TreePanelI getTreePanel()
281 public TreeI getTree()
283 return aptxPanel.getTree();
287 public void enableMultipleTrees()
289 aptxFrame.activateSaveAllIfNeeded();
294 public int getNumberOfTrees()
296 return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
300 public TreeControlsI getTreeControls()
306 public AccessibleContext getAccessibleContext()
308 return aptxFrame.getAccessibleContext();
312 public JRootPane getRootPane()
314 return aptxFrame.getRootPane();
318 public void setContentPane(Container contentPane)
320 aptxFrame.setContentPane(contentPane);
325 public Container getContentPane()
327 return aptxFrame.getContentPane();
331 public void setLayeredPane(JLayeredPane layeredPane)
333 aptxFrame.setLayeredPane(layeredPane);
338 public JLayeredPane getLayeredPane()
340 return aptxFrame.getLayeredPane();
344 public void setGlassPane(Component glassPane)
346 aptxFrame.setGlassPane(glassPane);
351 public Component getGlassPane()
353 return aptxFrame.getGlassPane();
357 public boolean imageUpdate(Image img, int infoflags, int x, int y,
358 int width, int height)
360 return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
364 public Font getFont()
366 return aptxFrame.getFont();
370 public void remove(MenuComponent comp)
372 aptxFrame.remove(comp);
378 public boolean postEvent(Event evt)
380 return aptxFrame.postEvent(evt);
384 public void addFrameListener(InternalFrameListener listener)
386 aptxFrame.addInternalFrameListener(listener);
391 public void removeFrameListener(InternalFrameListener listener)
393 aptxFrame.removeInternalFrameListener(listener);
398 public InternalFrameListener[] getFrameListeners()
400 return aptxFrame.getInternalFrameListeners();
405 public void repaint()
412 public void setMinimumSize(Dimension dimension)
414 aptxFrame.setMinimumSize(dimension);
419 public boolean isShowing()
421 return aptxFrame.isShowing();
425 public Container getTopLevelAncestor()
427 return aptxFrame.getTopLevelAncestor();
431 public void addFrameToJalview(String title, boolean makeVisible,
432 int width, int height, boolean resizable, boolean ignoreMinSize)
434 Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
435 resizable, ignoreMinSize);
440 public TreeViewerBindingI getViewBinding()
446 public void setViewBinding(TreeViewerBindingI alignmentBinding)
448 viewBinding = alignmentBinding;
453 public void setMaximumSize(Dimension maximumSize)
455 aptxFrame.setMaximumSize(maximumSize);
460 public void setPreferredSize(Dimension preferredSize)
462 aptxFrame.setPreferredSize(preferredSize);