// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.ui.actions; import graphtea.platform.core.AbstractAction; import graphtea.platform.core.BlackBoard; import graphtea.platform.core.Listener; import graphtea.ui.UIUtils; import java.util.HashMap; import java.util.HashSet; /** * Maps the events generated by menues and toolbars to their Matching Action * * @author azin azadi */ /*ie seri az eventa faghat kafie ke enable shan (mese add vertex). // ie seri az eventa daran addListener mikonan ta kar konan (mese loadfile). // mishe dar har soorat enablesh kard, badesh too blackboard gasht did // chizi dare addListener mikone ia na. (ba action), age addListener mikard ie event // barash tolid konim. //--- //agar bekhaim oonaii ro ke mese load file hasan ie event barashoon befresim // pas baiad ie standardi baraie esme logi ke tooie black board daran dashte bashim // khob chon baiad befahmim ke aghajoon oon dare tooie che logi goosh mikone // hala mishe esmesho az tooie xml khoond ia az rooie action fahmid. man be shakhse action ro // tarjih midam //.. // man oon standard ro UIEventData.name(action) entekhab mikonam */ public class UIEventHandler extends AbstractAction { public static final String ACTIONS_MAP = "blackboard action -> actions hashmap"; public static final String CONF = "blackboard : Configuration of program"; /** * constructor * * @param bb the blackboard of the action */ public UIEventHandler(BlackBoard bb) { super(bb); listen4Event(UIUtils.getUIEventKey("")); } public void track(){} public void performAction(String eventName, Object value) { UIEventData data = blackboard.getData(UIEventData.name("")); String id = data.action; if (id != null) { enableAction(id); sendEventToAction(id, data); } } private void enableAction(String id) { AbstractAction action = getAction(id); if (action != null) action.enable(); else { HashSet<Listener> listeners = blackboard.getListeners(UIUtils.getUIEventKey(id)); if (listeners == null) System.err.println("Can't find action for id = " + id); } } /** * fetches the target action from blackboard * * @param id The id of the action */ private AbstractAction getAction(String id) { //the action map is put in the blackboard in UIHandlerImpl class, at endActions() method. HashMap<String, AbstractAction> actionsmap = blackboard.getData(ACTIONS_MAP); return actionsmap.get(id); } @Override public boolean trackUndos() { return false; } /** * it first check that is there exists any actions that addListener for the event? (is there any log with the name * registered by UIEventData.name(id) in blackboard?) * and if the answer is true it sends the event to log. * * @param id The action id * @param uiEventData The corresponding event data */ private void sendEventToAction(String id, UIEventData uiEventData) { // if (blackboard.contains(UIEventData.name(id))) blackboard.setData(UIEventData.name(id), uiEventData); } }