/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see
"))
{
String[] htmllines = ttext.split("
");
for (String line : htmllines)
{
maxLengthExceeded = line.length() > 60;
if (maxLengthExceeded)
{
break;
}
}
}
else
{
maxLengthExceeded = ttext.length() > 60;
}
if (!maxLengthExceeded)
{
return enclose ? "" + ttext + "" : ttext;
}
return (enclose ? "" : "")
+ "
" + ttext + "
" + ((enclose ? "" : "")); } public static JButton makeButton(String label, String tooltip, ActionListener action) { JButton button = new JButton(); button.setText(label); // TODO: get the base font metrics for the Jalview gui from somewhere button.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); button.setForeground(Color.black); button.setHorizontalAlignment(SwingConstants.CENTER); button.setToolTipText(tooltip); button.addActionListener(action); return button; } /** * find or add a submenu with the given title in the given menu * * @param menu * @param submenu * @return the new or existing submenu */ public static JMenu findOrCreateMenu(JMenu menu, String submenu) { JMenu submenuinstance = null; for (int i = 0, iSize = menu.getMenuComponentCount(); i < iSize; i++) { if (menu.getMenuComponent(i) instanceof JMenu && ((JMenu) menu.getMenuComponent(i)).getText() .equals(submenu)) { submenuinstance = (JMenu) menu.getMenuComponent(i); } } if (submenuinstance == null) { submenuinstance = new JMenu(submenu); menu.add(submenuinstance); } return submenuinstance; } /** * A convenience method that that adds a component with label to a container, * sets a tooltip on both component and label, and optionally specifies layout * constraints for the added component (but not the label) * * @param container * @param tooltip * @param label * @param comp * @param constraints */ public static void addtoLayout(Container container, String tooltip, JComponent label, JComponent comp, String constraints) { container.add(label); container.add(comp, constraints); comp.setToolTipText(tooltip); // this doesn't seem to show? label.setToolTipText(tooltip); } /** * standard font for labels and check boxes in dialog boxes * * @return */ public static Font getLabelFont() { return getLabelFont(false, false); } public static Font getLabelFont(boolean bold, boolean italic) { return new java.awt.Font("Verdana", (!bold && !italic) ? Font.PLAIN : (bold ? Font.BOLD : 0) + (italic ? Font.ITALIC : 0), 11); } /** * standard font for editable text areas * * @return */ public static Font getTextAreaFont() { return getLabelFont(false, false); } /** * clean up a swing menu. Removes any empty submenus without selection * listeners. * * @param webService */ public static void cleanMenu(JMenu webService) { for (int i = 0; i < webService.getItemCount();) { JMenuItem item = webService.getItem(i); if (item instanceof JMenu && ((JMenu) item).getItemCount() == 0) { webService.remove(i); } else { i++; } } } /** * Returns the proportion of its range that a scrollbar's position represents, * as a value between 0 and 1. For example if the whole range is from 0 to * 200, then a position of 40 gives proportion = 0.2. * * @see http://www.javalobby.org/java/forums/t33050.html#91885334 * * @param scroll * @return */ public static float getScrollBarProportion(JScrollBar scroll) { /* * The extent (scroll handle width) deduction gives the true operating range * of possible positions. */ int possibleRange = scroll.getMaximum() - scroll.getMinimum() - scroll.getModel().getExtent(); float valueInRange = scroll.getValue() - (scroll.getModel().getExtent() / 2f); float proportion = valueInRange / possibleRange; return proportion; } /** * Returns the scroll bar position in its range that would match the given * proportion (between 0 and 1) of the whole. For example if the whole range * is from 0 to 200, then a proportion of 0.25 gives position 50. * * @param scrollbar * @param proportion * @return */ public static int getScrollValueForProportion(JScrollBar scrollbar, float proportion) { /* * The extent (scroll handle width) deduction gives the true operating range * of possible positions. */ float fraction = proportion * (scrollbar.getMaximum() - scrollbar.getMinimum() - scrollbar.getModel().getExtent()) + (scrollbar.getModel().getExtent() / 2f); return Math.min(Math.round(fraction), scrollbar.getMaximum()); } public static void jvInitComponent(AbstractButton comp, String i18nString) { setColorAndFont(comp); if (i18nString != null && !i18nString.isEmpty()) { comp.setText(MessageManager.getString(i18nString)); } } public static void jvInitComponent(JComponent comp) { setColorAndFont(comp); } private static void setColorAndFont(JComponent comp) { comp.setBackground(Color.white); comp.setFont(JvSwingUtils.getLabelFont()); } /** * A helper method to build a drop-down choice of values, with tooltips for * the entries * * @param entries * @param tooltips */ public static JComboBox