JAL-2360 ColourSchemes holds configured schemes, AlignFrame 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
285             .getString("label.colourScheme_zappo"));
286     zappoColour.addActionListener(new ActionListener()
287     {
288       @Override
289       public void actionPerformed(ActionEvent actionEvent)
290       {
291         zappoColour_actionPerformed(actionEvent);
292       }
293     });
294     taylorColour = new JRadioButtonMenuItem();
295     taylorColour.setText(MessageManager
296             .getString("label.colourScheme_taylor"));
297     taylorColour.addActionListener(new ActionListener()
298     {
299       @Override
300       public void actionPerformed(ActionEvent actionEvent)
301       {
302         taylorColour_actionPerformed(actionEvent);
303       }
304     });
305     hydroColour = new JRadioButtonMenuItem();
306     hydroColour.setText(MessageManager
307             .getString("label.colourScheme_hydrophobic"));
308     hydroColour.addActionListener(new ActionListener()
309     {
310       @Override
311       public void actionPerformed(ActionEvent actionEvent)
312       {
313         hydroColour_actionPerformed(actionEvent);
314       }
315     });
316     strandColour = new JRadioButtonMenuItem();
317     strandColour.setText(MessageManager
318             .getString("label.colourScheme_strand_propensity"));
319     strandColour.addActionListener(new ActionListener()
320     {
321       @Override
322       public void actionPerformed(ActionEvent actionEvent)
323       {
324         strandColour_actionPerformed(actionEvent);
325       }
326     });
327     helixColour = new JRadioButtonMenuItem();
328     helixColour.setText(MessageManager
329             .getString("label.colourScheme_helix_propensity"));
330     helixColour.addActionListener(new ActionListener()
331     {
332       @Override
333       public void actionPerformed(ActionEvent actionEvent)
334       {
335         helixColour_actionPerformed(actionEvent);
336       }
337     });
338     turnColour = new JRadioButtonMenuItem();
339     turnColour.setText(MessageManager
340             .getString("label.colourScheme_turn_propensity"));
341     turnColour.addActionListener(new ActionListener()
342     {
343       @Override
344       public void actionPerformed(ActionEvent actionEvent)
345       {
346         turnColour_actionPerformed(actionEvent);
347       }
348     });
349     buriedColour = new JRadioButtonMenuItem();
350     buriedColour.setText(MessageManager
351             .getString("label.colourScheme_buried_index"));
352     buriedColour.addActionListener(new ActionListener()
353     {
354       @Override
355       public void actionPerformed(ActionEvent actionEvent)
356       {
357         buriedColour_actionPerformed(actionEvent);
358       }
359     });
360     nucleotideColour = new JRadioButtonMenuItem();
361     nucleotideColour.setText(MessageManager
362             .getString("label.colourScheme_nucleotide"));
363     nucleotideColour.addActionListener(new ActionListener()
364     {
365       @Override
366       public void actionPerformed(ActionEvent actionEvent)
367       {
368         nucleotideColour_actionPerformed(actionEvent);
369       }
370     });
371     purinePyrimidineColour = new JRadioButtonMenuItem();
372     purinePyrimidineColour.setText(MessageManager
373             .getString("label.colourScheme_purine/pyrimidine"));
374     purinePyrimidineColour.addActionListener(new ActionListener()
375     {
376       @Override
377       public void actionPerformed(ActionEvent actionEvent)
378       {
379         purinePyrimidineColour_actionPerformed(actionEvent);
380       }
381     });
382     userColour = new JRadioButtonMenuItem();
383     userColour.setText(MessageManager.getString("action.user_defined"));
384     userColour.addActionListener(new ActionListener()
385     {
386       @Override
387       public void actionPerformed(ActionEvent actionEvent)
388       {
389         userColour_actionPerformed(actionEvent);
390       }
391     });
392     viewerColour = new JRadioButtonMenuItem();
393     viewerColour.setSelected(false);
394     viewerColour
395             .setText(MessageManager.getString("label.colour_with_jmol"));
396     viewerColour.setToolTipText(MessageManager
397             .getString("label.let_jmol_manage_structure_colours"));
398     viewerColour.addActionListener(new ActionListener()
399     {
400       @Override
401       public void actionPerformed(ActionEvent actionEvent)
402       {
403         viewerColour_actionPerformed(actionEvent);
404       }
405     });
406
407     /*
408      * add colour buttons to a group so their selection
409      * is mutually exclusive
410      */
411     ButtonGroup colourButtons = new ButtonGroup();
412
413     colourMenu.add(seqColour);
414     colourMenu.add(chainColour);
415     colourMenu.add(chargeColour);
416     colourMenu.add(zappoColour);
417     colourMenu.add(taylorColour);
418     colourMenu.add(hydroColour);
419     colourMenu.add(helixColour);
420     colourMenu.add(strandColour);
421     colourMenu.add(turnColour);
422     colourMenu.add(buriedColour);
423     colourMenu.add(purinePyrimidineColour);
424
425     /*
426      * add any user-defined colours that are loaded
427      */
428     Map<String, UserColourScheme> userColourSchemes = UserDefinedColours
429             .getUserColourSchemes();
430     if (userColourSchemes != null)
431     {
432       for (String schemeName : userColourSchemes.keySet())
433       {
434         final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
435                 schemeName);
436         radioItem.addActionListener(new ActionListener()
437         {
438           @Override
439           public void actionPerformed(ActionEvent evt)
440           {
441             userColour_actionPerformed(evt);
442           }
443         });
444         colourMenu.add(radioItem);
445         colourButtons.add(radioItem);
446       }
447     }
448     colourMenu.add(userColour);
449     colourMenu.add(viewerColour);
450     colourMenu.add(backGround);
451
452     colourButtons.add(seqColour);
453     colourButtons.add(chainColour);
454     colourButtons.add(chargeColour);
455     colourButtons.add(zappoColour);
456     colourButtons.add(taylorColour);
457     colourButtons.add(hydroColour);
458     colourButtons.add(helixColour);
459     colourButtons.add(strandColour);
460     colourButtons.add(turnColour);
461     colourButtons.add(buriedColour);
462     colourButtons.add(purinePyrimidineColour);
463     colourButtons.add(userColour);
464     colourButtons.add(viewerColour);
465   }
466
467   protected void fitToWindow_actionPerformed()
468   {
469   }
470
471   protected void highlightSelection_actionPerformed()
472   {
473   }
474
475   protected void viewerColour_actionPerformed(ActionEvent actionEvent)
476   {
477   }
478
479   protected void alignStructs_actionPerformed(ActionEvent actionEvent)
480   {
481   }
482
483   public void pdbFile_actionPerformed(ActionEvent actionEvent)
484   {
485
486   }
487
488   public void png_actionPerformed(ActionEvent actionEvent)
489   {
490
491   }
492
493   public void eps_actionPerformed(ActionEvent actionEvent)
494   {
495
496   }
497
498   public void viewMapping_actionPerformed(ActionEvent actionEvent)
499   {
500
501   }
502
503   public void seqColour_actionPerformed(ActionEvent actionEvent)
504   {
505
506   }
507
508   public void chainColour_actionPerformed(ActionEvent actionEvent)
509   {
510
511   }
512
513   public void chargeColour_actionPerformed(ActionEvent actionEvent)
514   {
515
516   }
517
518   public void zappoColour_actionPerformed(ActionEvent actionEvent)
519   {
520
521   }
522
523   public void taylorColour_actionPerformed(ActionEvent actionEvent)
524   {
525
526   }
527
528   public void hydroColour_actionPerformed(ActionEvent actionEvent)
529   {
530
531   }
532
533   public void helixColour_actionPerformed(ActionEvent actionEvent)
534   {
535
536   }
537
538   public void strandColour_actionPerformed(ActionEvent actionEvent)
539   {
540
541   }
542
543   public void turnColour_actionPerformed(ActionEvent actionEvent)
544   {
545
546   }
547
548   public void buriedColour_actionPerformed(ActionEvent actionEvent)
549   {
550
551   }
552
553   public void nucleotideColour_actionPerformed(ActionEvent actionEvent)
554   {
555
556   }
557
558   public void purinePyrimidineColour_actionPerformed(ActionEvent actionEvent)
559   {
560
561   }
562
563   public void userColour_actionPerformed(ActionEvent actionEvent)
564   {
565
566   }
567
568   public void backGround_actionPerformed(ActionEvent actionEvent)
569   {
570
571   }
572
573   public void showHelp_actionPerformed(ActionEvent actionEvent)
574   {
575
576   }
577
578   // {
579   // return bindingModel;
580   // }
581
582   // public void setBindingModel(AAStructureBindingModel bindingModel)
583   // {
584   // this.bindingModel = bindingModel;
585   // }
586
587 }