c105c25a0a84d9b7a1384196592fda4f30d29d70
[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 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18
19 import javax.accessibility.AccessibleContext;
20 import javax.swing.JLayeredPane;
21 import javax.swing.JMenu;
22 import javax.swing.JMenuBar;
23 import javax.swing.JMenuItem;
24 import javax.swing.JRootPane;
25 import javax.swing.JSeparator;
26 import javax.swing.event.InternalFrameListener;
27
28 import org.forester.archaeopteryx.MainFrame;
29
30 public class AptxFrame implements ExternalTreeFrame
31 {
32   private final MainFrame aptxFrame;
33
34   private ExternalTreePanel aptxPanel;
35
36   private ExternalTreeControlsI aptxControls;
37
38   public AptxFrame(MainFrame aptx)
39   {
40     aptxFrame = aptx;
41     aptxPanel = new AptxTreePanel(
42             aptxFrame.getMainPanel().getCurrentTreePanel());
43     aptxControls = new AptxControlPanel(
44             aptxFrame.getMainPanel().getControlPanel());
45     adaptAptxGui(aptxFrame);
46
47   }
48   /**
49    * Hides certain redundant Archaeopteryx GUI elements such as the menu items
50    * for reading in trees and adds extra items related to Jalview such as the
51    * tree sorting item.
52    * 
53    * 
54    * @param aptxFrame
55    */
56   private void adaptAptxGui(MainFrame aptxFrame)
57   {
58     JMenuBar frameBar = aptxFrame.getJMenuBar();
59     boolean epsAdded = false;
60     for (int i = 0; i < frameBar.getMenuCount();i++) {
61       JMenu menu = frameBar.getMenu(i);
62       int menuCount = menu.getMenuComponentCount();
63
64       if (menu.getText().contains("File"))
65       {
66         // hide all "Read from ..." and "New" menu items and any Separators that
67         // come directly after them
68         Component previousComp = null;
69         for (int x = 0; x < menuCount; x++)
70         {
71           Component menuItem = menu.getMenuComponent(x);
72           if (previousComp instanceof JMenuItem)
73           {
74             JMenuItem previousMenuItem = (JMenuItem) previousComp;
75             if (previousMenuItem.getText().startsWith("Read")
76                     || previousMenuItem.getText()
77                             .startsWith("New")
78                     || previousMenuItem.getText()
79                             .startsWith("Close Tab"))
80             {
81               previousComp.setVisible(false);
82
83               if (menuItem instanceof JSeparator)
84               {
85                 menuItem.setVisible(false);
86               }
87
88             }
89
90             if ((!epsAdded) && previousMenuItem.getText()
91                     .startsWith("Export to"))
92             {
93               JMenuItem exportEps = new JMenuItem("Export to EPS file...");
94               menu.add(exportEps, x);
95               exportEps.addActionListener(new ActionListener()
96               {
97
98                 @Override
99                 public void actionPerformed(ActionEvent e)
100                 {
101                   // TODO Auto-generated method stub
102
103                 }
104                 
105               });
106               epsAdded = true;
107
108             }
109           }
110           previousComp = menuItem;
111         }
112       }
113       else if (menu.getText().contains("Inference"))
114       {
115         menu.setVisible(false);
116       }
117       else if (menu.getText().contains("View"))
118       {
119         menu.addSeparator();
120         JMenuItem sortByTree = new JMenuItem("Sort alignment by tree");
121         JMenuItem refreshJalview = new JMenuItem(
122                 "Filter alignment to show only currently visible sequences");
123
124         refreshJalview.setFont(menu.getFont());
125
126         menu.add(sortByTree);
127         menu.add(refreshJalview);
128
129         sortByTree.setFont(menu.getFont());
130         refreshJalview.addActionListener(new ActionListener()
131         {
132
133           @Override
134           public void actionPerformed(ActionEvent e)
135           {
136             // TODO Auto-generated method stub
137
138           }
139
140         });
141
142
143       }
144
145     }
146     aptxFrame.validate();
147   }
148
149   @Override
150   public ExternalTreePanel getTreePanel()
151   {
152     return aptxPanel;
153   }
154
155   @Override
156   public ExternalTreeI getTree()
157   {
158     return aptxPanel.getTree();
159   }
160
161   @Override
162   public void checkMultipleTrees()
163   {
164     aptxFrame.activateSaveAllIfNeeded();
165
166   }
167
168   @Override
169   public int getNumberOfTrees()
170   {
171     return aptxFrame.getMainPanel().getTabbedPane().getTabCount();
172   }
173
174   @Override
175   public ExternalTreeControlsI getTreeControls()
176   {
177     return aptxControls;
178   }
179
180   @Override
181   public AccessibleContext getAccessibleContext()
182   {
183     return aptxFrame.getAccessibleContext();
184   }
185
186   @Override
187   public JRootPane getRootPane()
188   {
189     return aptxFrame.getRootPane();
190   }
191
192   @Override
193   public void setContentPane(Container contentPane)
194   {
195     aptxFrame.setContentPane(contentPane);
196
197   }
198
199   @Override
200   public Container getContentPane()
201   {
202     return aptxFrame.getContentPane();
203   }
204
205   @Override
206   public void setLayeredPane(JLayeredPane layeredPane)
207   {
208     aptxFrame.setLayeredPane(layeredPane);
209
210   }
211
212   @Override
213   public JLayeredPane getLayeredPane()
214   {
215     return aptxFrame.getLayeredPane();
216   }
217
218   @Override
219   public void setGlassPane(Component glassPane)
220   {
221     aptxFrame.setGlassPane(glassPane);
222
223   }
224
225   @Override
226   public Component getGlassPane()
227   {
228     return aptxFrame.getGlassPane();
229   }
230
231   @Override
232   public boolean imageUpdate(Image img, int infoflags, int x, int y,
233           int width, int height)
234   {
235     return aptxFrame.imageUpdate(img, infoflags, x, y, width, height);
236   }
237
238   @Override
239   public Font getFont()
240   {
241     return aptxFrame.getFont();
242   }
243
244   @Override
245   public void remove(MenuComponent comp)
246   {
247     aptxFrame.remove(comp);
248
249   }
250
251   @Deprecated
252   @Override
253   public boolean postEvent(Event evt)
254   {
255     return aptxFrame.postEvent(evt);
256   }
257
258   @Override
259   public void addFrameListener(InternalFrameListener listener)
260   {
261     aptxFrame.addInternalFrameListener(listener);
262
263   }
264
265   @Override
266   public void removeFrameListener(InternalFrameListener listener)
267   {
268     aptxFrame.removeInternalFrameListener(listener);
269
270   }
271
272   @Override
273   public InternalFrameListener[] getFrameListeners()
274   {
275     return aptxFrame.getInternalFrameListeners();
276
277   }
278
279   @Override
280   public void repaint()
281   {
282     aptxFrame.repaint();
283
284   }
285
286   @Override
287   public void setMinimumSize(Dimension dimension)
288   {
289     aptxFrame.setMinimumSize(dimension);
290
291   }
292
293   @Override
294   public boolean isShowing()
295   {
296     return aptxFrame.isShowing();
297   }
298
299   @Override
300   public Container getTopLevelAncestor()
301   {
302     return aptxFrame.getTopLevelAncestor();
303   }
304
305   @Override
306   public void addFrameToJalview(String title, boolean makeVisible,
307           int width, int height, boolean resizable, boolean ignoreMinSize)
308   {
309     Desktop.addInternalFrame(aptxFrame, title, makeVisible, width, height,
310             resizable, ignoreMinSize);
311
312   }
313
314 }