/**
 * dispatch_ifc.m
 *
 * defines a function interface for dispatchable messaging
 * define DISPATCH before loading if you are a message reciever
 *
 * @author mpdeimos
 * @date 2008/10/25
 * @version 0.1
 */

#ifndef included
#error This script can only be compiled as a #include
#endif

Function initDispatcher();			// Call this function on startup to set the parent layout as dispatcher
Function setDispatcher(GuiObject dispatcher);	// Call this function instead if you want to define a custom

#ifndef DISPATCH
// Sends a message to the parent layout
Function int sendMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj);
Function int sendMessageI(int message, int i0);	
Function int sendMessageI2(int message, int i0, int i1);	
Function int sendMessageS(int message, String s0);	
Function int sendMessageO(int message, GuiObject obj);
Function int sendMessageV(int message);
#endif

#ifdef DISPATCH
// Recieves Messages
Function int onMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj);
int onMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj) {} // STUB! Implement this in your code
#endif


///
///	IMPLEMENTATION
///


Global GuiObject dispatcher;

initDispatcher()
{
	dispatcher = getScriptGroup().getParentLayout();
}

setDispatcher(GuiObject go)
{
	dispatcher = go;
}


#ifndef DISPATCH

int sendMessage(int message, int i0, int i1, int i2, String s0, String s1, GuiObject obj)
{
	return dispatcher.onAction (s0, s1, message, i0, i1, i2, obj);
}

int sendMessageI(int message, int i0)
{
	GuiObject obj = NULL;
	return sendMessage(message, i0, i1, 0, "", "", obj);
}

int sendMessageI2(int message, int i0, int i1)
{
	GuiObject obj = NULL;
	return sendMessage(message, i0, 0, 0, "", "", obj);
}

int sendMessageS(int message, String s0)
{
	GuiObject obj = NULL;
	return sendMessage(message, 0, 0, 0, s0, "", obj);
}

int sendMessageO(int message, GuiObject obj)
{
	return sendMessage(message, 0, 0, 0, "", "", obj);
}

int sendMessageV(int messagej)
{
	GuiObject obj = NULL;
	return sendMessage(message, 0, 0, 0, "", "", obj);
}

#endif

#ifdef DISPATCH

dispatcher.onAction(String action, String param, Int message, int y, int p1, int p2, GuiObject source)
{
	return onMessage(message, y, p1, p2, action, param, source);
}

#endif