Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
361
Src/Wasabi/api/script/objects/compoobj.cpp
Normal file
361
Src/Wasabi/api/script/objects/compoobj.cpp
Normal file
|
@ -0,0 +1,361 @@
|
|||
#include "precomp.h"
|
||||
#ifndef _NOSTUDIO
|
||||
|
||||
#include "../../common/std.h"
|
||||
#include "script.h"
|
||||
#include "scriptmgr.h"
|
||||
#include "../../common/script/scriptobj.h"
|
||||
#include "compoobj.h"
|
||||
#include "../api.h"
|
||||
#include "vcpu.h"
|
||||
#include "../smap.h"
|
||||
#include "sregion.h"
|
||||
#include "../skinparse.h"
|
||||
#include "../compon.h"
|
||||
#include "../compwnd.h"
|
||||
#include "../cbmgr.h"
|
||||
#include "../smap.h"
|
||||
#include "../../common/wndcb.h"
|
||||
|
||||
#else
|
||||
#include "compoobj.h"
|
||||
#endif
|
||||
|
||||
CompoObjScriptController _compoController;
|
||||
CompoObjScriptController *compoController=&_compoController;
|
||||
|
||||
// -- Functions table -------------------------------------
|
||||
function_descriptor_struct CompoObjScriptController::exportedFunction[] = {
|
||||
{"getGUID", 1, (void*)ComponentObject::script_vcpu_getGUID },
|
||||
{"getWac", 0, (void*)ComponentObject::script_vcpu_getWac },
|
||||
{"setRegionFromMap", 3, (void*)ComponentObject::script_vcpu_setRegionFromMap },
|
||||
{"setRegion", 1, (void*)ComponentObject::script_vcpu_setRegion },
|
||||
{"onGetWac", 1, (void*)ComponentObject::script_vcpu_onGetWac },
|
||||
{"onGiveUpWac", 1, (void*)ComponentObject::script_vcpu_onGiveUpWac },
|
||||
{"setAcceptWac", 1, (void*)ComponentObject::script_vcpu_setAcceptWac },
|
||||
};
|
||||
// --------------------------------------------------------
|
||||
|
||||
const char *CompoObjScriptController::getClassName() {
|
||||
return "Component";
|
||||
}
|
||||
|
||||
const wchar_t *CompoObjScriptController::getAncestorClassName() {
|
||||
return "GuiObject";
|
||||
}
|
||||
|
||||
int CompoObjScriptController::getNumFunctions() {
|
||||
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
||||
}
|
||||
|
||||
const function_descriptor_struct *CompoObjScriptController::getExportedFunctions() {
|
||||
return exportedFunction;
|
||||
}
|
||||
|
||||
GUID CompoObjScriptController::getClassGuid() {
|
||||
return componentObjectGuid;
|
||||
}
|
||||
|
||||
ScriptObject *CompoObjScriptController::instantiate() {
|
||||
ComponentObject *obj = new ComponentObject();
|
||||
return obj->getScriptObject();
|
||||
}
|
||||
|
||||
void CompoObjScriptController::destroy(ScriptObject *o) {
|
||||
ComponentObject *obj = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
ASSERT(obj != NULL);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
void *CompoObjScriptController::encapsulate(ScriptObject *o) {
|
||||
return NULL; // no encapsulation for componentobject yet
|
||||
}
|
||||
|
||||
void CompoObjScriptController::deencapsulate(void *) {
|
||||
}
|
||||
|
||||
|
||||
ComponentObject::ComponentObject() {
|
||||
getScriptObject()->vcpu_setInterface(componentObjectGuid, (void *)static_cast<ComponentObject *>(this));
|
||||
getScriptObject()->vcpu_setClassName("Component");
|
||||
getScriptObject()->vcpu_setController(compoController);
|
||||
deleting = 0;
|
||||
compwnd = NULL;
|
||||
noshowcmdbar = 0;
|
||||
noshowbtnbar = 0;
|
||||
MEMCPY(&myGUID, &INVALID_GUID, sizeof(GUID));
|
||||
MEMCPY(&myCompGuid, &INVALID_GUID, sizeof(GUID));
|
||||
my_region_clone = NULL;
|
||||
ComponentManager::registerComponentObject(this);
|
||||
autoopen = 0;
|
||||
autoclose = 0;
|
||||
accept = 1;
|
||||
denyDesktopAlpha = 0;
|
||||
denyTransparency = 0;
|
||||
noanimrects = 0;
|
||||
}
|
||||
|
||||
int ComponentObject::setXmlParam(const char *name, const char *value) {
|
||||
if (COMPONENTOBJECT_PARENT::setXmlParam(name, value)) return 1;
|
||||
else if (STRCASEEQL(name, "param")) {
|
||||
GUID *g;
|
||||
g = SkinParser::getComponentGuid(value);
|
||||
if (g)
|
||||
setGUID(*g);
|
||||
} else if (STRCASEEQL(name, "noshowcmdbar")) {
|
||||
noshowcmdbar = WTOI(value);
|
||||
} else if (STRCASEEQL(name, "autoopen")) {
|
||||
autoopen = WTOI(value);
|
||||
} else if (STRCASEEQL(name, "autoclose")) {
|
||||
autoclose = WTOI(value);
|
||||
} else if (STRCASEEQL(name, "disableanimatedrects")) {
|
||||
noanimrects = WTOI(value);
|
||||
} else return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
ComponentObject::~ComponentObject() {
|
||||
deleting = 1;
|
||||
ComponentManager::unregisterComponentObject(this, 1);
|
||||
delete my_region_clone;
|
||||
}
|
||||
|
||||
int ComponentObject::onResize() {
|
||||
COMPONENTOBJECT_PARENT::onResize();
|
||||
RECT r = clientRect();
|
||||
if (compwnd) {
|
||||
compwnd->resize(&r);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ComponentObject::handleRatio() {
|
||||
return compwnd ? compwnd->handleRatio() : 0;
|
||||
}
|
||||
|
||||
void ComponentObject::setGUID(GUID g) {
|
||||
myGUID = g;
|
||||
}
|
||||
|
||||
void ComponentObject::setCompGUID(GUID g) {
|
||||
myCompGuid = g;
|
||||
}
|
||||
|
||||
GUID ComponentObject::getGUID(void) {
|
||||
if (!MEMCMP(&myCompGuid, &INVALID_GUID, sizeof(GUID)))
|
||||
return myGUID;
|
||||
else
|
||||
return myCompGuid;
|
||||
}
|
||||
|
||||
void ComponentObject::script_resetRegion() {
|
||||
HWND h = ComponentManager::getComponentHWnd(myGUID);
|
||||
if (h) SetWindowRgn(h, NULL, TRUE);
|
||||
delete my_region_clone;
|
||||
my_region_clone = NULL;
|
||||
}
|
||||
|
||||
void ComponentObject::script_setRegionFromMap(SMap *map, int byte, int inv) {
|
||||
RECT r={map->getBitmap()->getX(), map->getBitmap()->getY(), map->getBitmap()->getWidth(), map->getBitmap()->getHeight()};
|
||||
api_region *reg = new api_region(map->getBitmap(), &r, 0, 0, FALSE, 1, (unsigned char)byte, inv);
|
||||
if (!reg) { script_resetRegion(); return; }
|
||||
delete my_region_clone;
|
||||
my_region_clone = new api_region();
|
||||
my_region_clone->add(reg);
|
||||
delete reg;
|
||||
HWND h = ComponentManager::getComponentHWnd(myGUID);
|
||||
if (h) {
|
||||
api_region *clone = my_region_clone->clone();
|
||||
clone->scale(getRenderRatio());
|
||||
SetWindowRgn(h, clone->makeWindowRegion(), TRUE);
|
||||
my_region_clone->disposeClone(clone);
|
||||
}
|
||||
}
|
||||
|
||||
void ComponentObject::script_setRegion(SRegion *r) {
|
||||
api_region *reg = r->getRegion();
|
||||
if (!reg) { script_resetRegion(); return; }
|
||||
delete my_region_clone;
|
||||
my_region_clone = new api_region();
|
||||
my_region_clone->add(reg);
|
||||
HWND h = ComponentManager::getComponentHWnd(myGUID);
|
||||
if (h) {
|
||||
api_region *clone = my_region_clone->clone();
|
||||
clone->scale(getRenderRatio());
|
||||
SetWindowRgn(h, clone->makeWindowRegion(), TRUE);
|
||||
my_region_clone->disposeClone(clone);
|
||||
}
|
||||
}
|
||||
|
||||
void ComponentObject::onSetVisible(int s) {
|
||||
COMPONENTOBJECT_PARENT::onSetVisible(s);
|
||||
if (compwnd) {
|
||||
compwnd->setVisible(s);
|
||||
onResize();
|
||||
} else {
|
||||
if (s && autoopen && myGUID != INVALID_GUID && myGUID != GENERIC_GUID)
|
||||
api->setComponentVisible(myGUID, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void ComponentObject::deniedComponentCompWnd(CompWnd *c, GUID g) {
|
||||
if (!deleting) {
|
||||
Container *_c = getGuiObject()->guiobject_getParentGroup()->getParentContainer();
|
||||
if (_c) _c->resetGUID();
|
||||
}
|
||||
compwnd = c;
|
||||
compwnd->suppressStatusBar(noshowcmdbar);
|
||||
|
||||
CallbackManager::issueCallback(SysCallback::WINDOW, WndCallback::HIDEWINDOW, reinterpret_cast<int>((int *)&g));
|
||||
|
||||
onReleaseComponent();
|
||||
compwnd = NULL;
|
||||
denyDesktopAlpha = 0;
|
||||
denyTransparency = 0;
|
||||
if (!deleting) getGuiObject()->guiobject_getParentLayout()->onGuiObjectSetVisible(getGuiObject(), 0);
|
||||
}
|
||||
|
||||
void ComponentObject::grantedComponentCompWnd(CompWnd *c, GUID g) {
|
||||
Container *_c = getGuiObject()->guiobject_getParentGroup()->getParentContainer();
|
||||
if (_c) _c->setGUID(g); // tells the container to change its script_id to id:{guid}
|
||||
compwnd = c;
|
||||
compwnd->suppressStatusBar(noshowcmdbar);
|
||||
|
||||
onResize();
|
||||
|
||||
if (isVisible())
|
||||
c->setVisible(1);
|
||||
|
||||
CallbackManager::issueCallback(SysCallback::WINDOW, WndCallback::SHOWWINDOW, reinterpret_cast<int>((int *)&g));
|
||||
|
||||
onGetComponent(g);
|
||||
}
|
||||
|
||||
void ComponentObject::onReleaseComponent() {
|
||||
HWND h = ComponentManager::getComponentHWnd(myGUID);
|
||||
SetWindowRgn(h, NULL, FALSE);
|
||||
}
|
||||
|
||||
void ComponentObject::onGetComponent(GUID g) {
|
||||
HWND h = ComponentManager::getComponentHWnd(myGUID);
|
||||
if (h) {
|
||||
if (my_region_clone) {
|
||||
api_region *clone = my_region_clone->clone();
|
||||
clone->scale(getRenderRatio());
|
||||
SetWindowRgn(h, clone->makeWindowRegion(), TRUE);
|
||||
my_region_clone->disposeClone(clone);
|
||||
} else
|
||||
SetWindowRgn(h, NULL, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
int ComponentObject::wantGUID(GUID *g) {
|
||||
if (!accept || !getGuiObject()->guiobject_getParentGroup()) return 0;
|
||||
Container *_c = getGuiObject()->guiobject_getParentGroup()->getParentContainer();
|
||||
if (_c && _c->isDynamic() && compwnd) return 0;
|
||||
if (!MEMCMP(&myGUID, &GENERIC_GUID, sizeof(GUID))) return 1;
|
||||
return !MEMCMP(&myGUID, g, sizeof(GUID));
|
||||
}
|
||||
|
||||
void ComponentObject::onBeforeGetWac(GUID g, CompWnd *c) {
|
||||
// if (!Std::isXPOrGreater())
|
||||
if (!c->handleDesktopAlpha())
|
||||
denyDesktopAlpha = 1;
|
||||
if (!c->handleTransparency())
|
||||
denyTransparency = 1;
|
||||
getGuiObject()->guiobject_getParentLayout()->onGuiObjectSetVisible(getGuiObject(), 1);
|
||||
WACObject *wo = SOM::getWACObject(g);
|
||||
script_vcpu_onGetWac(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(wo ? wo->getScriptObject() : NULL));
|
||||
}
|
||||
|
||||
void ComponentObject::onBeforeGiveUpWac(GUID g, CompWnd *c) {
|
||||
WACObject *wo = SOM::getWACObject(g);
|
||||
script_vcpu_onGiveUpWac(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(wo ? wo->getScriptObject() : NULL));
|
||||
}
|
||||
|
||||
int ComponentObject::getAutoClose() {
|
||||
return autoclose;
|
||||
}
|
||||
|
||||
void ComponentObject::setAcceptWac(int a) {
|
||||
accept = a;
|
||||
}
|
||||
|
||||
int ComponentObject::handleDesktopAlpha() {
|
||||
if (denyDesktopAlpha) return 0;
|
||||
if (!compwnd) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ComponentObject::handleTransparency() {
|
||||
if (denyTransparency) return 0;
|
||||
if (!compwnd) return 1;
|
||||
return compwnd->handleTransparency();
|
||||
}
|
||||
|
||||
int ComponentObject::getPreferences(int what) {
|
||||
if (compwnd) return compwnd->getPreferences(what);
|
||||
return COMPONENTOBJECT_PARENT::getPreferences(what);
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_getGUID(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT;
|
||||
|
||||
OLECHAR oguid[256] = {0}; // NONPORTABLE
|
||||
ComponentObject *co = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
if (co) {
|
||||
static char guid[256];
|
||||
StringFromGUID2(((ComponentObject *)o)->myGUID, oguid, 256);
|
||||
wsprintf(guid, "%$", oguid);
|
||||
return MAKE_SCRIPT_STRING(guid);
|
||||
}
|
||||
return MAKE_SCRIPT_STRING("");
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_getWac(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT; ;
|
||||
ComponentObject *co = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
return MAKE_SCRIPT_OBJECT(co ? SOM::getWACObject(co->getGUID())->getScriptObject() : NULL);
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_setRegionFromMap(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar map, scriptVar byte, scriptVar inv) {
|
||||
SCRIPT_FUNCTION_INIT; ;
|
||||
ASSERT(SOM::isNumeric(&byte));
|
||||
ASSERT(SOM::isNumeric(&inv));
|
||||
ComponentObject *co = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
SMap *sm = static_cast<SMap *>(GET_SCRIPT_OBJECT_AS(map, mapGuid));
|
||||
co->script_setRegionFromMap(sm, SOM::makeInt(&byte), SOM::makeBoolean(&inv));
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_setRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) {
|
||||
SCRIPT_FUNCTION_INIT; ;
|
||||
ComponentObject *co = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
SRegion *reg = static_cast<SRegion *>(GET_SCRIPT_OBJECT_AS(r, regionGuid));
|
||||
if (co) co->script_setRegion(reg);
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_onGetWac(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar wac) {
|
||||
SCRIPT_FUNCTION_INIT;
|
||||
PROCESS_HOOKS1(o, compoController, wac);
|
||||
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
||||
SCRIPT_EXEC_EVENT1(o, wac);
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_onGiveUpWac(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar wac) {
|
||||
SCRIPT_FUNCTION_INIT;
|
||||
PROCESS_HOOKS1(o, compoController, wac);
|
||||
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
||||
SCRIPT_EXEC_EVENT1(o, wac);
|
||||
}
|
||||
|
||||
scriptVar ComponentObject::script_vcpu_setAcceptWac(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar on) {
|
||||
SCRIPT_FUNCTION_INIT;
|
||||
ASSERT(SOM::isNumeric(&on));
|
||||
ComponentObject *co = static_cast<ComponentObject *>(o->vcpu_getInterface(componentObjectGuid));
|
||||
if (co) co->setAcceptWac(GET_SCRIPT_BOOLEAN(on));
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue