package VASSAL.build.module;
import java.awt.Component;
import javax.swing.JMenuItem;
import VASSAL.build.GameModule;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.i18n.Resources;
import VASSAL.tools.RecursionLimitException;
import VASSAL.tools.RecursionLimiter;
import VASSAL.tools.RecursionLimiter.Loopable;
/**
* Combines multiple buttons from the toolbar into a single button. Pushing the single button is equivalent to pushing
* the other buttons in order.
*
* @author rkinney
*
*/
public class MultiActionButton extends ToolbarMenu implements Loopable {
public MultiActionButton() {
super();
setAttribute(BUTTON_TEXT, Resources.getString("Editor.MultiActionButton.component_type")); //$NON-NLS-1$
setAttribute(TOOLTIP, Resources.getString("Editor.MultiActionButton.component_type")); //$NON-NLS-1$
launch.putClientProperty(MENU_PROPERTY, null);
}
public String[] getAttributeDescriptions() {
return new String[] {
Resources.getString(Resources.DESCRIPTION),
Resources.getString(Resources.BUTTON_TEXT),
Resources.getString(Resources.TOOLTIP_TEXT),
Resources.getString(Resources.BUTTON_ICON),
Resources.getString(Resources.HOTKEY_LABEL),
Resources.getString("Editor.MultiActionButton.buttons") //$NON-NLS-1$
};
}
public void launch() {
// Pause logging to accumulate commands generated by the
// separate toolbar buttons.
final GameModule mod = GameModule.getGameModule();
final boolean loggingPaused = mod.pauseLogging();
try {
RecursionLimiter.startExecution(this);
for (int i=0,n=menu.getComponentCount();i<n;++i) {
Component c = menu.getComponent(i);
if (c instanceof JMenuItem) {
((JMenuItem)c).doClick();
}
}
}
catch (RecursionLimitException e) {
RecursionLimiter.infiniteLoop(e);
}
finally {
RecursionLimiter.endExecution();
// If we are in control of logging, retrieve the accumulated Commands,
// turn off pause and send the Commands to the log.
if (loggingPaused) {
mod.sendAndLog(mod.resumeLogging());
}
}
}
public static String getConfigureTypeName() {
return Resources.getString("Editor.MultiActionButton.component_type"); //$NON-NLS-1$
}
public HelpFile getHelpFile() {
return HelpFile.getReferenceManualPage("MultiActionButton.htm"); //$NON-NLS-1$
}
// Implement Loopable
public String getComponentName() {
return getConfigureName();
}
public String getComponentTypeName() {
return getConfigureTypeName();
}
}