package com.opendoorlogistics.studio.tables.custom;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Icon;
import com.opendoorlogistics.api.app.ui.UIAction;
import com.opendoorlogistics.utils.ui.ODLAction;
import com.opendoorlogistics.utils.ui.SimpleActionConfig;
/**
* Interface which supports standard edit actions on an ordered set of items
* @author Phil
*
*/
public interface StandardEditActionHandlers {
enum ActionType{
ADD,
EDIT,
MOVE_ITEM_UP,
MOVE_ITEM_DOWN,
DELETE_ITEM
}
void actionPerformed(ActionEvent e,UIAction action, ActionType type);
void updateEnabledState(UIAction action,ActionType type);
/**
* Create swing actions from the handler
* @param itemName
* @param handlers
* @return
*/
public static List<UIAction> createActions(String itemName,StandardEditActionHandlers handlers){
ArrayList<UIAction> ret = new ArrayList<>();
class MyAction extends ODLAction{
final ActionType type;
MyAction(ActionType type) {
super();
this.type = type;
}
@Override
public void actionPerformed(ActionEvent e) {
handlers.actionPerformed(e, this, type);
}
@Override
public void updateEnabledState() {
handlers.updateEnabledState(this, type);
}
}
ret.add(SimpleActionConfig.addItem.setItemName(itemName).apply(new MyAction(ActionType.ADD)));
ret.add(SimpleActionConfig.editItem.setItemName(itemName).apply(new MyAction(ActionType.EDIT)));
ret.add(SimpleActionConfig.moveItemUp.setItemName(itemName).apply(new MyAction(ActionType.MOVE_ITEM_UP)));
ret.add(SimpleActionConfig.moveItemDown.setItemName(itemName).apply(new MyAction(ActionType.MOVE_ITEM_DOWN)));
ret.add(SimpleActionConfig.deleteItem.setItemName(itemName).apply(new MyAction(ActionType.DELETE_ITEM)));
return ret;
}
}