package jalview.ext.archaeopteryx;
-import jalview.ext.treeviewer.ExternalTreeControlsI;
-import jalview.ext.treeviewer.ExternalTreeFrame;
-import jalview.ext.treeviewer.ExternalTreeI;
-import jalview.ext.treeviewer.ExternalTreePanel;
+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.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 AptxFrame extends ExternalTreeFrame
+public class AptxFrame implements TreeFrameI
{
private final MainFrame aptxFrame;
+ private TreePanelI aptxPanel;
+
+ private TreeControlsI aptxControls;
+
+
+ public AptxFrame(Phylogeny tree, Configuration aptxConfig,
+ String treeTitle)
+ {
+ 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 item.
+ * tree sorting menu item.
*
*
* @param aptxFrame
*/
- private void adaptAptxGui(MainFrame aptxFrame)
+ protected void adaptAptxGui(MainFrame aptxFrame)
{
JMenuBar frameBar = aptxFrame.getJMenuBar();
-
- for (int i = 0; i < frameBar.getMenuCount(); i++)
- {
+ boolean epsAdded = false;
+ for (int i = 0; i < frameBar.getMenuCount();i++) {
JMenu menu = frameBar.getMenu(i);
+ int menuCount = menu.getMenuComponentCount();
- if (menu.getText().startsWith("File"))
+ if (menu.getText().contains("File"))
{
// hide all "Read from ..." and "New" menu items and any Separators that
// come directly after them
- Component previousMenuItem = null;
- for (Component menuItem : menu.getMenuComponents())
+ Component previousComp = null;
+ for (int x = 0; x < menuCount; x++)
{
- if (previousMenuItem instanceof JMenuItem)
+ Component menuItem = menu.getMenuComponent(x);
+ if (previousComp instanceof JMenuItem)
{
- if (((JMenuItem) previousMenuItem).getText().startsWith("Read")
- || ((JMenuItem) previousMenuItem).getText()
- .startsWith("New"))
+ JMenuItem previousMenuItem = (JMenuItem) previousComp;
+ if (previousMenuItem.getText().startsWith("Read")
+ || previousMenuItem.getText()
+ .startsWith("New")
+ || previousMenuItem.getText()
+ .startsWith("Close Tab"))
{
- previousMenuItem.setVisible(false);
+ 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;
+
}
}
- previousMenuItem = menuItem;
+ previousComp = menuItem;
}
}
- else if (menu.getText().startsWith("Inference"))
+ else if (menu.getText().contains("Inference"))
{
menu.setVisible(false);
}
- else if (menu.getText().startsWith("View"))
+ else if (menu.getText().contains("View"))
{
menu.addSeparator();
- JMenuItem sortMenuItem = new JMenuItem("Sort alignment by tree");
- sortMenuItem.setVisible(false);
- menu.add(sortMenuItem);
+ 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(
+ TreeViewerUtils.getActiveTreeViews().get(this));
+ sortByTree.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ TreeViewerUtils.getActiveTreeViews().get(AptxFrame.this)
+ .sortByTree_actionPerformed();
+
+ }
+
+ });
+
+ menu.add(sortByTree);
+ menu.add(refreshJalview);
+
+ sortByTree.setFont(menu.getFont());
+
+
+
}
}
- aptxFrame.validate();
+ // aptxFrame.validate();
}
- @Override
- public ExternalTreePanel getTreePanel()
+ public void epsTree_actionPerformed(ActionEvent e)
{
- ExternalTreePanel aptxPanel = new AptxTreePanel(
- aptxFrame.getMainPanel().getCurrentTreePanel());
- return aptxPanel;
- }
+ 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 void switchTreePanel(int panelIndex)
+ public TreePanelI getTreePanel()
{
- aptxFrame.getMainPanel().getTabbedPane().getTabComponentAt(panelIndex);
-
+ return aptxPanel;
}
@Override
- public ExternalTreeI getTree()
+ public TreeI getTree()
{
- return new Tree(
- aptxFrame.getMainPanel().getCurrentTreePanel().getPhylogeny());
+ return aptxPanel.getTree();
}
@Override
}
@Override
- public ExternalTreeControlsI getTreeControls()
+ 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)
{
- return new AptxControlPanel(aptxFrame.getMainPanel().getControlPanel());
+ 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