package oripa.bind.binder;
import javax.swing.AbstractButton;
import oripa.appstate.ApplicationState;
import oripa.bind.state.action.StateActionPerformer;
import oripa.paint.EditMode;
import oripa.viewsetting.ViewScreenUpdater;
import oripa.viewsetting.main.ScreenUpdater;
/**
* A class to bind a state which holds paint action.
* @author koji
*
*/
public class ApplicationStateButtonBinder
extends AbstractButtonBinder<ApplicationState<EditMode>>{
/**
* This method binds a MouseListener to push the state
* and an ActionListener to perform the actions of the state.
*
* @param buttonClass
* @param state
* @param textID A member of StringID for label
* @return
*/
@Override
public AbstractButton createButton(
Class<? extends AbstractButton> buttonClass,
ApplicationState<EditMode> state, String textID){
AbstractButton button = createEmptyButton(buttonClass, textID);
// For catching key actions which requires immediate drawing(e.g., for catching Ctrl pressed)
ViewScreenUpdater screenUpdater = ScreenUpdater.getInstance();
button.addKeyListener(screenUpdater.getKeyListener());
/*
* add listeners
*/
button.addActionListener(new StateActionPerformer(state));
return button;
}
}