
org.marid.swing.actions.MaridAction Maven / Gradle / Ivy
The newest version!
package org.marid.swing.actions;
import images.Images;
import org.marid.l10n.L10nSupport;
import org.marid.logging.LogSupport;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Dmitry Ovchinnikov
*/
public class MaridAction extends AbstractAction implements L10nSupport, LogSupport {
private final MaridActionListener actionListener;
public MaridAction(String title, String icon, MaridActionListener actionListener, Object... args) {
super(LS.s(title));
this.actionListener = actionListener;
if (icon != null && icon.indexOf('.') < 0) {
final ImageIcon smallIcon = Images.getIcon(icon + "16.png");
if (smallIcon != null) {
putValue(SMALL_ICON, smallIcon);
}
final ImageIcon largeIcon = Images.getIcon(icon + "24.png");
if (largeIcon != null) {
putValue(LARGE_ICON_KEY, largeIcon);
}
if (smallIcon == null) {
final ImageIcon imageIcon = Images.getIcon(icon + ".png");
if (imageIcon != null) {
putValue(SMALL_ICON, imageIcon);
}
}
} else {
final ImageIcon ic = Images.getIcon(icon, 16);
if (ic != null) {
putValue(SMALL_ICON, ic);
}
}
for (int i = 0; i < args.length; i += 2) {
if (args[i + 1] != null) {
putValue(args[i].toString(), args[i + 1]);
}
}
if (getValue(Action.SHORT_DESCRIPTION) == null) {
putValue(Action.SHORT_DESCRIPTION, getValue(Action.NAME));
}
}
public MaridAction(String title, String icon, ActionListener actionListener, Object... args) {
this(title, icon, (a, e) -> actionListener.actionPerformed(e), args);
}
public MaridAction setKey(String key) {
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(key));
return this;
}
public MaridAction setShortDescription(String description, Object... args) {
putValue(SHORT_DESCRIPTION, s(description, args));
return this;
}
public MaridAction setLongDescription(String description, Object... args) {
putValue(LONG_DESCRIPTION, s(description, args));
return this;
}
public MaridAction setValue(String key, Object value) {
putValue(key, value);
return this;
}
public MaridAction setEnabledState(boolean enabled) {
setEnabled(enabled);
return this;
}
public MaridAction enableToolbar() {
return setValue(MaridActions.TOOLBAR_ENABLED, true);
}
public MaridAction disableMenu() {
return setValue(MaridActions.MENUBAR_DISABLED, true);
}
public MaridAction setSelected(boolean state) {
return setValue(Action.SELECTED_KEY, state);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
actionListener.actionPerformed(this, e);
} catch (Exception x) {
if (e.getSource() instanceof Component) {
final Window window = SwingUtilities.windowForComponent((Component) e.getSource());
if (window instanceof LogSupport) {
((LogSupport) window).warning("Action {0} error", x, getValue(NAME));
return;
}
}
warning("Action {0} error", x, getValue(NAME));
}
}
public interface MaridActionListener {
void actionPerformed(Action action, ActionEvent actionEvent) throws Exception;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy