/* ButtonUtils.java created 2007-10-25
*
*/
package org.signalml.app.util;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
import javax.swing.JButton;
import javax.swing.JSpinner;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeListener;
import org.apache.log4j.Logger;
import org.signalml.app.view.common.components.CompactButton;
import org.signalml.app.view.common.dialogs.AbstractDialog;
import org.springframework.core.io.ClassPathResource;
/** ButtonUtils
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public abstract class SwingUtils {
protected static final Logger logger = Logger.getLogger(SwingUtils.class);
public static void makeButtonsSameSize(JButton[] buttons) {
if (buttons.length < 2) {
return; // nothing to do
}
Dimension size = buttons[0].getPreferredSize();
int maxWidth = size.width;
int maxHeight = size.height;
int i;
for (i=1; i<buttons.length; i++) {
size = buttons[i].getPreferredSize();
if (size.width > maxWidth) {
maxWidth = size.width;
}
if (size.height > maxHeight) {
maxHeight = size.height;
}
}
size = new Dimension(maxWidth,maxHeight);
for (i=0; i<buttons.length; i++) {
buttons[i].setPreferredSize(size);
buttons[i].setMinimumSize(size);
buttons[i].setMaximumSize(size);
}
}
// it seems JSpinner has a bug and doesn't remove it's lesteners from
// its old models...
public static void replaceSpinnerModel(JSpinner spinner, SpinnerModel spinnerModel) {
SpinnerModel oldSpinnerModel = spinner.getModel();
spinner.setModel(spinnerModel);
if (oldSpinnerModel instanceof SpinnerNumberModel) {
SwingUtils.dereferenceSpinnerNumberModel((SpinnerNumberModel) oldSpinnerModel);
}
}
public static void dereferenceSpinnerNumberModel(SpinnerNumberModel model) {
for (ChangeListener listener : model.getChangeListeners()) {
model.removeChangeListener(listener);
}
}
public static CompactButton createFieldHelpButton(AbstractDialog owner, URL helpURL) {
CompactButton button = new CompactButton("", IconUtils.loadClassPathIcon("org/signalml/app/icon/help.png"));
button.setToolTipText(_("Display context help for this field"));
ActionListener contextHelpAction = owner.createContextHelpAction(helpURL);
button.addActionListener(contextHelpAction);
return button;
}
public static CompactButton createFieldHelpButton(AbstractDialog owner, String path) {
try {
int index = path.lastIndexOf('#');
String anchor;
String mainPath;
if (index >= 0) {
mainPath = path.substring(0, index);
anchor = path.substring(index);
} else {
mainPath = path;
anchor = null;
}
URL contextHelpURL = (new ClassPathResource(mainPath)).getURL();
contextHelpURL = new URL(contextHelpURL.toExternalForm() + anchor);
return createFieldHelpButton(owner, contextHelpURL);
} catch (IOException ex) {
logger.error("Failed to get help URL", ex);
return createFieldHelpButton(owner, (URL) null);
}
}
}