JAL-2361 extract methods to (re-)build colour menu
[jalview.git] / src / jalview / jbgui / GStructureViewer.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.jbgui;
22
23 import jalview.api.structures.JalviewStructureDisplayI;
24 import jalview.gui.UserDefinedColours;
25 import jalview.schemes.UserColourScheme;
26 import jalview.util.MessageManager;
27
28 import java.awt.BorderLayout;
29 import java.awt.GridLayout;
30 import java.awt.event.ActionEvent;
31 import java.awt.event.ActionListener;
32 import java.util.Map;
33
34 import javax.swing.ButtonGroup;
35 import javax.swing.JInternalFrame;
36 import javax.swing.JLabel;
37 import javax.swing.JMenu;
38 import javax.swing.JMenuBar;
39 import javax.swing.JMenuItem;
40 import javax.swing.JPanel;
41 import javax.swing.JRadioButtonMenuItem;
42
43 public abstract class GStructureViewer extends JInternalFrame implements
44         JalviewStructureDisplayI
45 {
46   // private AAStructureBindingModel bindingModel;
47
48   protected JMenu savemenu;
49
50   protected JMenu viewMenu;
51
52   protected JMenu colourMenu;
53
54   protected JMenu chainMenu;
55
56   protected JMenu viewerActionMenu;
57
58   protected JMenuItem alignStructs;
59
60   protected JMenuItem fitToWindow;
61
62   protected JRadioButtonMenuItem seqColour;
63
64   protected JRadioButtonMenuItem chainColour;
65
66   protected JRadioButtonMenuItem chargeColour;
67
68   protected JRadioButtonMenuItem zappoColour;
69
70   protected JRadioButtonMenuItem taylorColour;
71
72   protected JRadioButtonMenuItem hydroColour;
73
74   protected JRadioButtonMenuItem strandColour;
75
76   protected JRadioButtonMenuItem helixColour;
77
78   protected JRadioButtonMenuItem turnColour;
79
80   protected JRadioButtonMenuItem buriedColour;
81
82   protected JRadioButtonMenuItem nucleotideColour;
83
84   protected JRadioButtonMenuItem purinePyrimidineColour;
85
86   protected JRadioButtonMenuItem userColour;
87
88   protected JRadioButtonMenuItem viewerColour;
89
90   protected JMenuItem helpItem;
91
92   protected JLabel statusBar;
93
94   protected JPanel statusPanel;
95
96   /**
97    * Constructor
98    */
99   public GStructureViewer()
100   {
101     try
102     {
103       jbInit();
104     } catch (Exception ex)
105     {
106       ex.printStackTrace();
107     }
108   }
109
110   private void jbInit() throws Exception
111   {
112     JMenuBar menuBar = new JMenuBar();
113     this.setJMenuBar(menuBar);
114
115     JMenu fileMenu = new JMenu();
116     fileMenu.setText(MessageManager.getString("action.file"));
117
118     savemenu = new JMenu();
119     savemenu.setActionCommand(MessageManager.getString("action.save_image"));
120     savemenu.setText(MessageManager.getString("action.save_as"));
121
122     JMenuItem pdbFile = new JMenuItem();
123     pdbFile.setText(MessageManager.getString("label.pdb_file"));
124     pdbFile.addActionListener(new ActionListener()
125     {
126       @Override
127       public void actionPerformed(ActionEvent actionEvent)
128       {
129         pdbFile_actionPerformed(actionEvent);
130       }
131     });
132
133     JMenuItem png = new JMenuItem();
134     png.setText("PNG");
135     png.addActionListener(new ActionListener()
136     {
137       @Override
138       public void actionPerformed(ActionEvent actionEvent)
139       {
140         png_actionPerformed(actionEvent);
141       }
142     });
143
144     JMenuItem eps = new JMenuItem();
145     eps.setText("EPS");
146     eps.addActionListener(new ActionListener()
147     {
148       @Override
149       public void actionPerformed(ActionEvent actionEvent)
150       {
151         eps_actionPerformed(actionEvent);
152       }
153     });
154
155     JMenuItem viewMapping = new JMenuItem();
156     viewMapping.setText(MessageManager.getString("label.view_mapping"));
157     viewMapping.addActionListener(new ActionListener()
158     {
159       @Override
160       public void actionPerformed(ActionEvent actionEvent)
161       {
162         viewMapping_actionPerformed(actionEvent);
163       }
164     });
165
166     viewMenu = new JMenu();
167     viewMenu.setText(MessageManager.getString("action.view"));
168
169     chainMenu = new JMenu();
170     chainMenu.setText(MessageManager.getString("action.show_chain"));
171
172     fitToWindow = new JMenuItem();
173     fitToWindow.setText(MessageManager.getString("label.fit_to_window"));
174     fitToWindow.addActionListener(new ActionListener()
175     {
176       @Override
177       public void actionPerformed(ActionEvent actionEvent)
178       {
179         fitToWindow_actionPerformed();
180       }
181     });
182
183     JMenu helpMenu = new JMenu();
184     helpMenu.setText(MessageManager.getString("action.help"));
185     helpItem = new JMenuItem();
186     helpItem.setText(MessageManager.getString("label.jmol_help"));
187     helpItem.addActionListener(new ActionListener()
188     {
189       @Override
190       public void actionPerformed(ActionEvent actionEvent)
191       {
192         showHelp_actionPerformed(actionEvent);
193       }
194     });
195     alignStructs = new JMenuItem();
196     alignStructs
197             .setText(MessageManager.getString("label.align_structures"));
198     alignStructs.addActionListener(new ActionListener()
199     {
200       @Override
201       public void actionPerformed(ActionEvent actionEvent)
202       {
203         alignStructs_actionPerformed(actionEvent);
204       }
205     });
206
207     viewerActionMenu = new JMenu(MessageManager.getString("label.jmol"));
208     viewerActionMenu.setVisible(false);
209     viewerActionMenu.add(alignStructs);
210     colourMenu = new JMenu();
211     buildColourMenu();
212     fileMenu.add(savemenu);
213     fileMenu.add(viewMapping);
214     savemenu.add(pdbFile);
215     savemenu.add(png);
216     savemenu.add(eps);
217     viewMenu.add(chainMenu);
218     helpMenu.add(helpItem);
219
220     menuBar.add(fileMenu);
221     menuBar.add(viewMenu);
222     menuBar.add(colourMenu);
223     menuBar.add(viewerActionMenu);
224     menuBar.add(helpMenu);
225
226     statusPanel = new JPanel();
227     statusPanel.setLayout(new GridLayout());
228     this.getContentPane().add(statusPanel, BorderLayout.SOUTH);
229     statusBar = new JLabel();
230     statusPanel.add(statusBar, null);
231   }
232
233   /**
234    * Builds the colour menu
235    */
236   protected void buildColourMenu()
237   {
238     colourMenu.removeAll();
239     colourMenu.setText(MessageManager.getString("label.colours"));
240
241     JMenuItem backGround = new JMenuItem();
242     backGround
243             .setText(MessageManager.getString("action.background_colour"));
244     backGround.addActionListener(new ActionListener()
245     {
246       @Override
247       public void actionPerformed(ActionEvent actionEvent)
248       {
249         backGround_actionPerformed(actionEvent);
250       }
251     });
252     seqColour = new JRadioButtonMenuItem();
253     seqColour.setSelected(false);
254     seqColour.setText(MessageManager.getString("action.by_sequence"));
255     seqColour.addActionListener(new ActionListener()
256     {
257       @Override
258       public void actionPerformed(ActionEvent actionEvent)
259       {
260         seqColour_actionPerformed(actionEvent);
261       }
262     });
263     chainColour = new JRadioButtonMenuItem();
264     chainColour.setText(MessageManager.getString("action.by_chain"));
265     chainColour.addActionListener(new ActionListener()
266     {
267       @Override
268       public void actionPerformed(ActionEvent actionEvent)
269       {
270         chainColour_actionPerformed(actionEvent);
271       }
272     });
273     chargeColour = new JRadioButtonMenuItem();
274     chargeColour.setText(MessageManager.getString("label.charge_cysteine"));
275     chargeColour.addActionListener(new ActionListener()
276     {
277       @Override
278       public void actionPerformed(ActionEvent actionEvent)
279       {
280         chargeColour_actionPerformed(actionEvent);
281       }
282     });
283     zappoColour = new JRadioButtonMenuItem();
284     zappoColour.setText(MessageManager.getString("label.zappo"));
285     zappoColour.addActionListener(new ActionListener()
286     {
287       @Override
288       public void actionPerformed(ActionEvent actionEvent)
289       {
290         zappoColour_actionPerformed(actionEvent);
291       }
292     });
293     taylorColour = new JRadioButtonMenuItem();
294     taylorColour.setText(MessageManager.getString("label.taylor"));
295     taylorColour.addActionListener(new ActionListener()
296     {
297       @Override
298       public void actionPerformed(ActionEvent actionEvent)
299       {
300         taylorColour_actionPerformed(actionEvent);
301       }
302     });
303     hydroColour = new JRadioButtonMenuItem();
304     hydroColour.setText(MessageManager.getString("label.hydrophobicity"));
305     hydroColour.addActionListener(new ActionListener()
306     {
307       @Override
308       public void actionPerformed(ActionEvent actionEvent)
309       {
310         hydroColour_actionPerformed(actionEvent);
311       }
312     });
313     strandColour = new JRadioButtonMenuItem();
314     strandColour.setText(MessageManager
315             .getString("label.strand_propensity"));
316     strandColour.addActionListener(new ActionListener()
317     {
318       @Override
319       public void actionPerformed(ActionEvent actionEvent)
320       {
321         strandColour_actionPerformed(actionEvent);
322       }
323     });
324     helixColour = new JRadioButtonMenuItem();
325     helixColour.setText(MessageManager.getString("label.helix_propensity"));
326     helixColour.addActionListener(new ActionListener()
327     {
328       @Override
329       public void actionPerformed(ActionEvent actionEvent)
330       {
331         helixColour_actionPerformed(actionEvent);
332       }
333     });
334     turnColour = new JRadioButtonMenuItem();
335     turnColour.setText(MessageManager.getString("label.turn_propensity"));
336     turnColour.addActionListener(new ActionListener()
337     {
338       @Override
339       public void actionPerformed(ActionEvent actionEvent)
340       {
341         turnColour_actionPerformed(actionEvent);
342       }
343     });
344     buriedColour = new JRadioButtonMenuItem();
345     buriedColour.setText(MessageManager.getString("label.buried_index"));
346     buriedColour.addActionListener(new ActionListener()
347     {
348       @Override
349       public void actionPerformed(ActionEvent actionEvent)
350       {
351         buriedColour_actionPerformed(actionEvent);
352       }
353     });
354     nucleotideColour = new JRadioButtonMenuItem();
355     nucleotideColour.setText(MessageManager.getString("label.nucleotide"));
356     nucleotideColour.addActionListener(new ActionListener()
357     {
358       @Override
359       public void actionPerformed(ActionEvent actionEvent)
360       {
361         nucleotideColour_actionPerformed(actionEvent);
362       }
363     });
364     purinePyrimidineColour = new JRadioButtonMenuItem();
365     purinePyrimidineColour.setText(MessageManager
366             .getString("label.purine_pyrimidine"));
367     purinePyrimidineColour.addActionListener(new ActionListener()
368     {
369       @Override
370       public void actionPerformed(ActionEvent actionEvent)
371       {
372         purinePyrimidineColour_actionPerformed(actionEvent);
373       }
374     });
375     userColour = new JRadioButtonMenuItem();
376     userColour.setText(MessageManager.getString("action.user_defined"));
377     userColour.addActionListener(new ActionListener()
378     {
379       @Override
380       public void actionPerformed(ActionEvent actionEvent)
381       {
382         userColour_actionPerformed(actionEvent);
383       }
384     });
385     viewerColour = new JRadioButtonMenuItem();
386     viewerColour.setSelected(false);
387     viewerColour
388             .setText(MessageManager.getString("label.colour_with_jmol"));
389     viewerColour.setToolTipText(MessageManager
390             .getString("label.let_jmol_manage_structure_colours"));
391     viewerColour.addActionListener(new ActionListener()
392     {
393       @Override
394       public void actionPerformed(ActionEvent actionEvent)
395       {
396         viewerColour_actionPerformed(actionEvent);
397       }
398     });
399
400     /*
401      * add colour buttons to a group so their selection
402      * is mutually exclusive
403      */
404     ButtonGroup colourButtons = new ButtonGroup();
405
406     colourMenu.add(seqColour);
407     colourMenu.add(chainColour);
408     colourMenu.add(chargeColour);
409     colourMenu.add(zappoColour);
410     colourMenu.add(taylorColour);
411     colourMenu.add(hydroColour);
412     colourMenu.add(helixColour);
413     colourMenu.add(strandColour);
414     colourMenu.add(turnColour);
415     colourMenu.add(buriedColour);
416     colourMenu.add(purinePyrimidineColour);
417
418     /*
419      * add any user-defined colours that are loaded
420      */
421     Map<String, UserColourScheme> userColourSchemes = UserDefinedColours
422             .getUserColourSchemes();
423     if (userColourSchemes != null)
424     {
425       for (String schemeName : userColourSchemes.keySet())
426       {
427         final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
428                 schemeName);
429         radioItem.addActionListener(new ActionListener()
430         {
431           @Override
432           public void actionPerformed(ActionEvent evt)
433           {
434             userColour_actionPerformed(evt);
435           }
436         });
437         colourMenu.add(radioItem);
438         colourButtons.add(radioItem);
439       }
440     }
441     colourMenu.add(userColour);
442     colourMenu.add(viewerColour);
443     colourMenu.add(backGround);
444
445     colourButtons.add(seqColour);
446     colourButtons.add(chainColour);
447     colourButtons.add(chargeColour);
448     colourButtons.add(zappoColour);
449     colourButtons.add(taylorColour);
450     colourButtons.add(hydroColour);
451     colourButtons.add(helixColour);
452     colourButtons.add(strandColour);
453     colourButtons.add(turnColour);
454     colourButtons.add(buriedColour);
455     colourButtons.add(purinePyrimidineColour);
456     colourButtons.add(userColour);
457     colourButtons.add(viewerColour);
458   }
459
460   protected void fitToWindow_actionPerformed()
461   {
462   }
463
464   protected void highlightSelection_actionPerformed()
465   {
466   }
467
468   protected void viewerColour_actionPerformed(ActionEvent actionEvent)
469   {
470   }
471
472   protected void alignStructs_actionPerformed(ActionEvent actionEvent)
473   {
474   }
475
476   public void pdbFile_actionPerformed(ActionEvent actionEvent)
477   {
478
479   }
480
481   public void png_actionPerformed(ActionEvent actionEvent)
482   {
483
484   }
485
486   public void eps_actionPerformed(ActionEvent actionEvent)
487   {
488
489   }
490
491   public void viewMapping_actionPerformed(ActionEvent actionEvent)
492   {
493
494   }
495
496   public void seqColour_actionPerformed(ActionEvent actionEvent)
497   {
498
499   }
500
501   public void chainColour_actionPerformed(ActionEvent actionEvent)
502   {
503
504   }
505
506   public void chargeColour_actionPerformed(ActionEvent actionEvent)
507   {
508
509   }
510
511   public void zappoColour_actionPerformed(ActionEvent actionEvent)
512   {
513
514   }
515
516   public void taylorColour_actionPerformed(ActionEvent actionEvent)
517   {
518
519   }
520
521   public void hydroColour_actionPerformed(ActionEvent actionEvent)
522   {
523
524   }
525
526   public void helixColour_actionPerformed(ActionEvent actionEvent)
527   {
528
529   }
530
531   public void strandColour_actionPerformed(ActionEvent actionEvent)
532   {
533
534   }
535
536   public void turnColour_actionPerformed(ActionEvent actionEvent)
537   {
538
539   }
540
541   public void buriedColour_actionPerformed(ActionEvent actionEvent)
542   {
543
544   }
545
546   public void nucleotideColour_actionPerformed(ActionEvent actionEvent)
547   {
548
549   }
550
551   public void purinePyrimidineColour_actionPerformed(ActionEvent actionEvent)
552   {
553
554   }
555
556   public void userColour_actionPerformed(ActionEvent actionEvent)
557   {
558
559   }
560
561   public void backGround_actionPerformed(ActionEvent actionEvent)
562   {
563
564   }
565
566   public void showHelp_actionPerformed(ActionEvent actionEvent)
567   {
568
569   }
570
571   // {
572   // return bindingModel;
573   // }
574
575   // public void setBindingModel(AAStructureBindingModel bindingModel)
576   // {
577   // this.bindingModel = bindingModel;
578   // }
579
580 }