JAL-1953 more progress on interfaces, jalview binding still problematic
[jalview.git] / src / jalview / ext / archaeopteryx / AptxFrame.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.ext.treeviewer.ExternalTreeControlsI;
4 import jalview.ext.treeviewer.ExternalTreeFrame;
5 import jalview.ext.treeviewer.ExternalTreeI;
6 import jalview.ext.treeviewer.ExternalTreePanel;
7 import jalview.gui.Desktop;
8
9 import java.awt.Component;
10 import java.awt.Container;
11 import java.awt.Dimension;
12 import java.awt.Event;
13 import java.awt.Font;
14 import java.awt.Image;
15 import java.awt.MenuComponent;
16
17 import javax.accessibility.AccessibleContext;
18 import javax.swing.JLayeredPane;
19 import javax.swing.JMenu;
20 import javax.swing.JMenuBar;
21 import javax.swing.JMenuItem;
22 import javax.swing.JRootPane;
23 import javax.swing.JSeparator;
24 import javax.swing.event.InternalFrameListener;
25
26 import org.forester.archaeopteryx.MainFrame;
27
28 public class AptxFrame implements ExternalTreeFrame
29 {
30   private final MainFrame aptxFrame;
31
32   private ExternalTreePanel aptxPanel;
33
34   private ExternalTreeControlsI aptxControls;
35
36   public AptxFrame(MainFrame aptx)
37   {
38     aptxFrame = aptx;
39     aptxPanel = new AptxTreePanel(
40             aptxFrame.getMainPanel().getCurrentTreePanel());
41     aptxControls = new AptxControlPanel(
42             aptxFrame.getMainPanel().getControlPanel());
43     adaptAptxGui(aptxFrame);
44
45   }
46   /**
47    * Hides certain redundant Archaeopteryx GUI elements such as the menu items
48    * for reading in trees and adds extra items related to Jalview such as the
49    * tree sorting item.
50    * 
51    * 
52    * @param aptxFrame
53    */
54   private void adaptAptxGui(MainFrame aptxFrame)
55   {
56     JMenuBar frameBar = aptxFrame.getJMenuBar();
57
58     for (int i = 0; i < frameBar.getMenuCount(); i++)
59     {
60       JMenu menu = frameBar.getMenu(i);
61
62       if (menu.getText().startsWith("File"))
63       {
64         // hide all "Read from ..." and "New" menu items and any Separators that
65         // come directly after them
66         Component previousMenuItem = null;
67         for (Component menuItem : menu.getMenuComponents())
68         {
69           if (previousMenuItem instanceof JMenuItem)
70           {
71             if (((JMenuItem) previousMenuItem).getText().startsWith("Read")
72                     || ((JMenuItem) previousMenuItem).getText()
73                             .startsWith("New"))
74             {
75               previousMenuItem.setVisible(false);
76
77               if (menuItem instanceof JSeparator)
78               {
79                 menuItem.setVisible(false);
80               }
81             }
82           }
83           previousMenuItem = menuItem;
84         }
85       }
86       else if (menu.getText().startsWith("Inference"))
87       {
88         menu.setVisible(false);
89       }
90       else if (menu.getText().startsWith("View"))
91       {
92         menu.addSeparator();
93         JMenuItem sortMenuItem = new JMenuItem("Sort alignment by tree");
94         sortMenuItem.setVisible(false);
95         menu.add(sortMenuItem);
96       }
97
98     }
99     aptxFrame.validate();
100   }
101
102   @Override
103   public ExternalTreePanel getTreePanel()
104   {
105     return aptxPanel;
106   }
107
108   @Override
109   public ExternalTreeI getTree()
110   {
111     return aptxPanel.getTree();
112   }
113
114   @Override
115   public void checkMultipleTrees()
116   {
117     aptxFrame.activateSaveAllIfNeeded();
118
119   }
120
121   @Override
122   public int getNumberOfTrees()
123   {
124     return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
125   }
126
127   @Override
128   public ExternalTreeControlsI getTreeControls()
129   {
130     return aptxControls;
131   }
132
133   @Override
134   public AccessibleContext getAccessibleContext()
135   {
136     return aptxFrame.getAccessibleContext();
137   }
138
139   @Override
140   public JRootPane getRootPane()
141   {
142     return aptxFrame.getRootPane();
143   }
144
145   @Override
146   public void setContentPane(Container contentPane)
147   {
148     aptxFrame.setContentPane(contentPane);
149
150   }
151
152   @Override
153   public Container getContentPane()
154   {
155     return aptxFrame.getContentPane();
156   }
157
158   @Override
159   public void setLayeredPane(JLayeredPane layeredPane)
160   {
161     aptxFrame.setLayeredPane(layeredPane);
162
163   }
164
165   @Override
166   public JLayeredPane getLayeredPane()
167   {
168     return aptxFrame.getLayeredPane();
169   }
170
171   @Override
172   public void setGlassPane(Component glassPane)
173   {
174     aptxFrame.setGlassPane(glassPane);
175
176   }
177
178   @Override
179   public Component getGlassPane()
180   {
181     return aptxFrame.getGlassPane();
182   }
183
184   @Override
185   public boolean imageUpdate(Image img, int infoflags, int x, int y,
186           int width, int height)
187   {
188     return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
189   }
190
191   @Override
192   public Font getFont()
193   {
194     return aptxFrame.getFont();
195   }
196
197   @Override
198   public void remove(MenuComponent comp)
199   {
200     aptxFrame.remove(comp);
201
202   }
203
204   @Deprecated
205   @Override
206   public boolean postEvent(Event evt)
207   {
208     return aptxFrame.postEvent(evt);
209   }
210
211   @Override
212   public void addFrameListener(InternalFrameListener listener)
213   {
214     aptxFrame.addInternalFrameListener(listener);
215
216   }
217
218   @Override
219   public void removeFrameListener(InternalFrameListener listener)
220   {
221     aptxFrame.removeInternalFrameListener(listener);
222
223   }
224
225   @Override
226   public InternalFrameListener[] getFrameListeners()
227   {
228     return aptxFrame.getInternalFrameListeners();
229
230   }
231
232   @Override
233   public void repaint()
234   {
235     aptxFrame.repaint();
236
237   }
238
239   @Override
240   public void setMinimumSize(Dimension dimension)
241   {
242     aptxFrame.setMinimumSize(dimension);
243
244   }
245
246   @Override
247   public boolean isShowing()
248   {
249     return aptxFrame.isShowing();
250   }
251
252   @Override
253   public Container getTopLevelAncestor()
254   {
255     return aptxFrame.getTopLevelAncestor();
256   }
257
258   @Override
259   public void addFrameToJalview(String title, boolean makeVisible,
260           int width, int height, boolean resizable, boolean ignoreMinSize)
261   {
262     Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
263             resizable, ignoreMinSize);
264
265   }
266
267 }