437f430056115ea267c27c14bfedfb17af0f4ee7
[jalview.git] / src / jalview / gui / JvSwingUtils.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
3  * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
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 of the License, or (at your option) any later version.
10  * 
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.gui;
19
20 import java.awt.Color;
21 import java.awt.Font;
22 import java.awt.event.ActionListener;
23
24 import javax.swing.JButton;
25 import javax.swing.JMenu;
26 import javax.swing.SwingConstants;
27
28 /**
29  * useful functions for building Swing GUIs
30  * 
31  * @author JimP
32  * 
33  */
34 public final class JvSwingUtils
35 {
36   /**
37    * wrap a bare html safe string to around 60 characters per line using a
38    * <table width=350>
39    * <tr>
40    * <td></td> field
41    * 
42    * @param ttext
43    * @return
44    */
45   public static String wrapTooltip(String ttext)
46   {
47     if (ttext.length() < 60)
48     {
49       return ttext;
50     }
51     else
52     {
53       return "<table width=350 border=0><tr><td>" + ttext
54               + "</td></tr></table>";
55     }
56   }
57
58   public static JButton makeButton(String label, String tooltip,
59           ActionListener action)
60   {
61     JButton button = new JButton();
62     button.setText(label);
63     // TODO: get the base font metrics for the Jalview gui from somewhere
64     button.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
65     button.setForeground(Color.black);
66     button.setHorizontalAlignment(SwingConstants.CENTER);
67     button.setToolTipText(tooltip);
68     button.addActionListener(action);
69     return button;
70   }
71
72   /**
73    * find or add a submenu with the given title in the given menu
74    * 
75    * @param menu
76    * @param submenu
77    * @return the new or existing submenu
78    */
79   public static JMenu findOrCreateMenu(JMenu menu, String submenu)
80   {
81     JMenu submenuinstance = null;
82     for (int i = 0, iSize = menu.getMenuComponentCount(); i < iSize; i++)
83     {
84       if (menu.getMenuComponent(i) instanceof JMenu
85               && ((JMenu) menu.getMenuComponent(i)).getText().equals(
86                       submenu))
87       {
88         submenuinstance = (JMenu) menu.getMenuComponent(i);
89       }
90     }
91     if (submenuinstance == null)
92     {
93       submenuinstance = new JMenu(submenu);
94       menu.add(submenuinstance);
95     }
96     return submenuinstance;
97   
98   }
99
100 }