| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | 
							- #include <precomp.h>
 
- #include "xuiwndholder.h"
 
- #include <tataki/canvas/ifc_canvas.h>
 
- #include <bfc/parse/paramparser.h>
 
- #include <api/script/objects/sregion.h>
 
- // -----------------------------------------------------------------------
 
- const wchar_t WindowHolderXuiObjectStr[] = L"WindowHolder"; // This is the xml tag
 
- const wchar_t WindowHolderXuiObjectStrCompat[] = L"Component"; // This is the old xml tag
 
- char WindowHolderXuiSvcName[] = "WindowHolder xui object";
 
- char WindowHolderXuiSvcNameCompat[] = "Component xui object";
 
- // {7DB51C8C-36C0-4585-9240-A2DB22B1B8F7}
 
- static const GUID pvt_xuiWindowHolder = 
 
- { 0x7db51c8c, 0x36c0, 0x4585, { 0x92, 0x40, 0xa2, 0xdb, 0x22, 0xb1, 0xb8, 0xf7 } };
 
- XMLParamPair XuiWindowHolder::params[] = {
 
-   {XUIWNDHOLDER_ADDHOLD, L"PARAM"},
 
-   {XUIWNDHOLDER_ADDHOLD, L"COMPONENT"},
 
-   {XUIWNDHOLDER_ADDHOLD, L"HOLD"},
 
-   {XUIWNDHOLDER_SETNOSHOWCMDBAR, L"NOSHOWCMDBAR"},
 
-   {XUIWNDHOLDER_SETNOANIMRECTS, L"NOANIMATEDRECTS"},
 
-   {XUIWNDHOLDER_SETNOANIMRECTS, L"DISABLEANIMATEDRECTS"}, 
 
-   {XUIWNDHOLDER_SETAUTOOPEN, L"AUTOOPEN"},
 
-   {XUIWNDHOLDER_SETAUTOCLOSE, L"AUTOCLOSE"},
 
-   {XUIWNDHOLDER_SETAUTOFOCUS, L"AUTOFOCUS"},
 
-   {XUIWNDHOLDER_SETAUTOAVAILABLE, L"AUTOAVAILABLE"},
 
- 	};
 
- // -----------------------------------------------------------------------
 
- XuiWindowHolder::XuiWindowHolder() {
 
-   getScriptObject()->vcpu_setInterface(windowHolderGuid, (void *)static_cast<WindowHolder *>(this));
 
-   getScriptObject()->vcpu_setInterface(pvt_xuiWindowHolder, (void *)static_cast<XuiWindowHolder *>(this));
 
-   getScriptObject()->vcpu_setClassName(L"WindowHolder"); // this is the script class name
 
-   getScriptObject()->vcpu_setController(windowHolderController);
 
-   myxuihandle = newXuiHandle();
 
- 	CreateXMLParameters(myxuihandle);
 
-   setXmlParam(L"autofocus", L"1");
 
- }
 
- void XuiWindowHolder::CreateXMLParameters(int master_handle)
 
- {
 
- 	//XUIWNDHOLDER_PARENT::CreateXMLParameters(master_handle);
 
- 	int numParams = sizeof(params) / sizeof(params[0]);
 
- 	hintNumberOfParams(myxuihandle, numParams);
 
- 	for (int i = 0;i < numParams;i++)
 
- 		addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
 
- }
 
- XuiWindowHolder::~XuiWindowHolder() {
 
- }
 
- void XuiWindowHolder::setRegionFromMap(ScriptObject *map, int byte, int inverse) {
 
- }
 
- void XuiWindowHolder::setRegion(ScriptObject *_region) {
 
- //#pragma CHAT("bas", "lone", "I implemented setRegion for ya once SRegion is safe")
 
- #if 1// if SRegion were cross-dll safe this would work
 
-   const GUID regionGuid = 
 
- { 0x3a370c02, 0x3cbf, 0x439f, { 0x84, 0xf1, 0x86, 0x88, 0x5b, 0xcf, 0x1e, 0x36 } };
 
-   void *reg = _region->vcpu_getInterface(regionGuid);
 
-   ASSERT(reg != NULL);
 
-   SRegion *sr = static_cast<SRegion*>(reg);
 
-   ASSERT(sr != NULL);
 
-   api_region *region = sr->getRegion();
 
-   ASSERT(region != NULL);
 
-   api_region *clone = region->clone();
 
-   clone->scale(getRenderRatio(), getRenderRatio());
 
- 	ifc_window *curRootWnd = getCurRootWnd();
 
- 	if (curRootWnd)
 
- 	{
 
- #ifdef _WIN32
 
- 		OSWINDOWHANDLE osWnd = curRootWnd->gethWnd();
 
- 		if (osWnd)
 
- 		  SetWindowRgn(osWnd, clone->makeWindowRegion(), TRUE);
 
- #else
 
- #warning port me
 
-     // can probably use a mask here
 
- #endif
 
- 	}
 
-   region->disposeClone(clone);
 
- #endif
 
- }
 
- // -----------------------------------------------------------------------
 
- int XuiWindowHolder::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
 
-   if (xuihandle != myxuihandle)
 
-     return XUIWNDHOLDER_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
 
-   switch (xmlattributeid) 
 
- 	{
 
-     case XUIWNDHOLDER_ADDHOLD: 
 
-       if (!WCSICMP(value, L"@ALL@") || !WCSICMP(value, L"guid:default")) 
 
- 			{
 
-         setAcceptAllGuids(1);
 
-         setAcceptAllGroups(1);
 
-       } else {
 
-         setAcceptAllGuids(0);
 
-         setAcceptAllGroups(0);
 
-         ParamParser pp(value);
 
-         for (int i=0;i<pp.getNumItems();i++) {
 
-           const wchar_t *e = pp.enumItem(i);
 
-           if (*e == '{' || !WCSNICMP(e, L"guid:", 5)) {
 
-             GUID *g = parseGUID(e);
 
-             if (g)
 
-               addAcceptGuid(*g);
 
-           }
 
-           else
 
-             addAcceptGroup(e);
 
-         }
 
-       }
 
-       break;
 
-     case XUIWNDHOLDER_SETNOSHOWCMDBAR:
 
-       setNoCmdBar(WTOI(value));
 
-       break;
 
-     case XUIWNDHOLDER_SETNOANIMRECTS:
 
-       setNoAnim(WTOI(value));
 
-       break;
 
-     case XUIWNDHOLDER_SETAUTOOPEN:
 
-       setAutoOpen(WTOI(value));
 
-       break;
 
-     case XUIWNDHOLDER_SETAUTOCLOSE:
 
-       setAutoClose(WTOI(value));
 
-       break;
 
-     case XUIWNDHOLDER_SETAUTOFOCUS:
 
-       setAutoFocus(WTOI(value));
 
-       break;
 
-     case XUIWNDHOLDER_SETAUTOAVAILABLE:
 
-       setAutoAvailable(WTOI(value));
 
-       break;
 
-     default:
 
-       return 0;
 
-   }
 
-   return 1;
 
- }
 
- GUID *XuiWindowHolder::parseGUID(const wchar_t *id) {
 
-   if (WCSNICMP(id, L"guid:{",6)==0) {
 
-     static GUID g;
 
-     id+=5;
 
-     g = nsGUID::fromCharW(id);
 
-     return &g;
 
-   }
 
-   if (id && *id == '{') {
 
-     static GUID g;
 
-     g = nsGUID::fromCharW(id);
 
-     return &g;
 
-   }                                             
 
-   if(WCSICMP(id,L"guid:avs")==0) {
 
-     static GUID g={ 10, 12, 16, { 255, 123, 1, 1, 66, 99, 69, 12 } };
 
-     return &g;
 
-   }
 
-   if (WCSICMP(id,L"guid:pl")==0 || WCSICMP(id,L"guid:playlist")==0) {
 
-     static GUID g={ 0x45f3f7c1, 0xa6f3, 0x4ee6, { 0xa1, 0x5e, 0x12, 0x5e, 0x92, 0xfc, 0x3f, 0x8d } };
 
-     return &g;
 
-   }
 
-   if (WCSICMP(id,L"guid:ml")==0 || WCSICMP(id,L"guid:musiclibrary")==0 || WCSICMP(id,L"guid:library")==0) {
 
-     static GUID g={ 0x6b0edf80, 0xc9a5, 0x11d3, { 0x9f, 0x26, 0x00, 0xc0, 0x4f, 0x39, 0xff, 0xc6 } };
 
-     return &g;
 
-   }
 
- 	if(WCSICMP(id,L"guid:null")==0) {
 
-     static GUID g=INVALID_GUID;
 
-     return &g;
 
-   }
 
- 	if(WCSICMP(id,L"guid:player")==0) {
 
-     static GUID g = { 0xe6323f86, 0x1724, 0x4cd3, { 0x9d, 0x87, 0x70, 0x59, 0x1f, 0xc1, 0x6e, 0x5e } };
 
-     return &g;
 
-   }
 
- 	
 
-   return NULL;
 
- }
 
- // -----------------------------------------------------------------------
 
- // Script Object
 
- WindowHolderScriptController _windowHolderController;
 
- WindowHolderScriptController *windowHolderController = &_windowHolderController;
 
- // -- Functions table -------------------------------------
 
- function_descriptor_struct WindowHolderScriptController::exportedFunction[] = {
 
-   {L"getGUID", 1, (void*)WindowHolderScriptController::script_getGUID },
 
-   {L"setRegionFromMap", 3, (void*)WindowHolderScriptController::script_setRegionFromMap },
 
-   {L"setRegion", 1, (void*)WindowHolderScriptController::script_setRegion },
 
-   {L"getContent", 0, (void*)WindowHolderScriptController::script_getContent},
 
-   {L"getComponentName", 0, (void*)WindowHolderScriptController::script_getComponentName},
 
- };
 
- ScriptObject *WindowHolderScriptController::instantiate() {
 
-   XuiWindowHolder *wh = new XuiWindowHolder;
 
-   ASSERT(wh != NULL);
 
-   return wh->getScriptObject();
 
- }
 
- void WindowHolderScriptController::destroy(ScriptObject *o) {
 
-   XuiWindowHolder *wh = static_cast<XuiWindowHolder *>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
-   ASSERT(wh != NULL);
 
-   delete wh;
 
- }
 
- void *WindowHolderScriptController::encapsulate(ScriptObject *o) {
 
-   return NULL; // no encapsulation for windowholder yet
 
- }
 
- void WindowHolderScriptController::deencapsulate(void *o) {
 
- }
 
- int WindowHolderScriptController::getNumFunctions() { 
 
-   return sizeof(exportedFunction) / sizeof(function_descriptor_struct); 
 
- }
 
- const function_descriptor_struct *WindowHolderScriptController::getExportedFunctions() { 
 
-   return exportedFunction; 
 
- }
 
- scriptVar WindowHolderScriptController::script_getComponentName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) 
 
- {
 
- 	SCRIPT_FUNCTION_INIT
 
- 	XuiWindowHolder *wh = static_cast<XuiWindowHolder*>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
- 	
 
- 	if (wh) 
 
- 	{
 
- 		ifc_window *ro = wh->getCurRootWnd();
 
- 		if (ro)
 
- 		{
 
- 			return MAKE_SCRIPT_STRING(ro->getRootWndName());
 
- 		}
 
- 	}
 
- 	return MAKE_SCRIPT_STRING(L"");  
 
- }
 
- scriptVar WindowHolderScriptController::script_getGUID(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) 
 
- {
 
-   SCRIPT_FUNCTION_INIT
 
-   XuiWindowHolder *wh = static_cast<XuiWindowHolder*>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
- 	
 
-   if (wh) 
 
- 	{
 
- 		static wchar_t guidstr[256];
 
- 		nsGUID::toCharW(wh->getCurGuid(), guidstr);
 
- 		return MAKE_SCRIPT_STRING(guidstr);
 
- 	}
 
-   return MAKE_SCRIPT_STRING(L"");  
 
- }
 
- scriptVar WindowHolderScriptController::script_setRegionFromMap(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar map, scriptVar byte, scriptVar inv) {
 
-   SCRIPT_FUNCTION_INIT
 
-   XuiWindowHolder *xu = static_cast<XuiWindowHolder*>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
-   if (xu) xu->setRegionFromMap(GET_SCRIPT_OBJECT(map), GET_SCRIPT_INT(byte), GET_SCRIPT_INT(inv));
 
-   RETURN_SCRIPT_VOID;  
 
- }
 
- scriptVar WindowHolderScriptController::script_setRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar reg) {
 
-   SCRIPT_FUNCTION_INIT
 
-   XuiWindowHolder *xu= static_cast<XuiWindowHolder*>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
-   if (xu) xu->setRegion(GET_SCRIPT_OBJECT(reg));
 
-   RETURN_SCRIPT_VOID;  
 
- }
 
- scriptVar WindowHolderScriptController::script_getContent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
 
-   SCRIPT_FUNCTION_INIT
 
-   XuiWindowHolder *xu= static_cast<XuiWindowHolder*>(o->vcpu_getInterface(pvt_xuiWindowHolder));
 
-   if (xu) {
 
-     ifc_window *w = xu->getRootWndPtr();
 
-     if (w) {
 
-       GuiObject *o = w->getGuiObject();
 
-       if (o) 
 
-         return MAKE_SCRIPT_OBJECT(o->guiobject_getScriptObject());
 
-     }
 
-   }
 
-   RETURN_SCRIPT_NULL;
 
- }
 
 
  |