mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-18 22:45:53 +01:00
2881 lines
93 KiB
C++
2881 lines
93 KiB
C++
#include <precomp.h>
|
|
#include <bfc/wasabi_std.h>
|
|
#include <api/wnd/notifmsg.h>
|
|
#include <api/script/scriptmgr.h>
|
|
#include <api/script/script.h>
|
|
#include <api/script/objects/guiobj.h>
|
|
#include <api/script/vcpu.h>
|
|
#include <api/skin/widgets/group.h>
|
|
//#include <api/wac/main.h>
|
|
#include <math.h>
|
|
#include <api/skin/skinparse.h>
|
|
#include <api/wndmgr/layout.h>
|
|
#include <api/script/objecttable.h>
|
|
#include <api/wnd/cwndtrack.h>
|
|
#include <api/wnd/popup.h>
|
|
#include <bfc/parse/paramparser.h>
|
|
#include <api/wnd/cursor.h>
|
|
#include <api/wnd/wndtrack.h>
|
|
#include <bfc/string/stringdict.h>
|
|
#include <api/config/items/cfgitem.h>
|
|
#include <api/config/items/attrbool.h>
|
|
#ifndef PI
|
|
#define PI 3.1415926536F
|
|
#endif
|
|
|
|
#include <api/script/objects/guiobject.h>
|
|
|
|
const wchar_t guiobjectXuiStr[] = L"GuiObject"; // This is the xml tag
|
|
char guiobjectXuiSvcName[] = "GuiObject xui object"; // this is the name of the xuiservice
|
|
|
|
#ifdef USEAPPBAR
|
|
extern _bool cfg_options_appbarondrag;
|
|
#endif
|
|
|
|
static wchar_t txt[4096];
|
|
|
|
GuiObjectI::GuiObjectI(ScriptObject *o) {
|
|
translate = 1;
|
|
my_script_object = o;
|
|
my_root_wnd = NULL;
|
|
|
|
redock.l = NULL;
|
|
MEMSET(&redock.original_rect, 0, sizeof(RECT));
|
|
targetstatus = TARGET_FROZEN;
|
|
targetspeed = 4;
|
|
start_time = 0;
|
|
reversetarget = 0;
|
|
dodragcheck = 0;
|
|
gui_rx = 0;
|
|
gui_ry = 0;
|
|
gui_rw = 0;
|
|
gui_rh = 0;
|
|
gui_x = 0;
|
|
gui_y = 0;
|
|
gui_w = AUTOWH;
|
|
gui_h = AUTOWH;
|
|
p_group = NULL;
|
|
targetx = AUTOWH;
|
|
targety = AUTOWH;
|
|
targetw = AUTOWH;
|
|
targeth = AUTOWH;
|
|
targeta = AUTOWH;
|
|
in_area = 0;
|
|
clickthrough = 0;
|
|
autosysmetricsx = 0;
|
|
autosysmetricsy = 0;
|
|
autosysmetricsw = 0;
|
|
autosysmetricsh = 0;
|
|
xuisvc = NULL;
|
|
xuifac = NULL;
|
|
mover = 0;
|
|
moving = 0;
|
|
droptarget = 0;
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
cfgitem = NULL;
|
|
#endif
|
|
timer.setGuiObjectI(this);
|
|
wantfocus = 0;
|
|
anchorage = ANCHOR_NONE;
|
|
anchor_x1 = anchor_x2 = anchor_y1 = anchor_y2 = 0;
|
|
anchorage_invalidated = 0;
|
|
anchorage = ANCHOR_LEFT|ANCHOR_TOP;
|
|
cursor = NULL;
|
|
#ifdef USEAPPBAR
|
|
m_dock_side = APPBAR_NOTDOCKED;
|
|
#endif
|
|
m_lastnondocked_x = -0xFFFF;
|
|
m_lastnondocked_y = -0xFFFF;
|
|
}
|
|
|
|
GuiObjectI::~GuiObjectI() {
|
|
notifylist.deleteAll();
|
|
delete cursor;
|
|
if (guiobject_getParentGroup())
|
|
guiobject_getParentGroup()->removeObject(this);
|
|
if (targetstatus == TARGET_RUNNING)
|
|
stopTargetTimer();
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
if (cfgitem) viewer_delViewItem(cfgitem);
|
|
#endif
|
|
}
|
|
|
|
ScriptObject *GuiObjectI::guiobject_getScriptObject()
|
|
{
|
|
return my_script_object;
|
|
}
|
|
|
|
// Used by us when parsing xml to assign the object's ID, shouldn't be used elsewhere
|
|
void GuiObjectI::guiobject_setId(const wchar_t *id)
|
|
{
|
|
guiobject_id = id;
|
|
}
|
|
|
|
const wchar_t *GuiObjectI::guiobject_getId()
|
|
{
|
|
if (guiobject_id.isempty()) return L"";
|
|
return guiobject_id; //FG> avoid returning NULL
|
|
}
|
|
|
|
int GuiObjectI::guiobject_setXmlParam(const wchar_t *paramname, const wchar_t *strvalue)
|
|
{
|
|
int r = 0;
|
|
//ifc_window *w = guiobject_getRootWnd();
|
|
XmlObject *xo = static_cast<XmlObject *>(guiobject_getScriptObject()->vcpu_getInterface(xmlObjectGuid));
|
|
if (xo != NULL) {
|
|
r = xo->setXmlParam(paramname, strvalue);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
const wchar_t *GuiObjectI::guiobject_getXmlParam(const wchar_t *paramname) {
|
|
const wchar_t *rt = NULL;
|
|
//ifc_window *w = guiobject_getRootWnd();
|
|
XmlObject *xo = static_cast<XmlObject *>(guiobject_getScriptObject()->vcpu_getInterface(xmlObjectGuid));
|
|
if (xo != NULL) {
|
|
int r = xo->getXmlParam(paramname);
|
|
rt = xo->getXmlParamValue(r);
|
|
}
|
|
return rt;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_setXmlParamById(int id, const wchar_t *strvalue)
|
|
{
|
|
int a;
|
|
switch (id) {
|
|
case GuiObjectWnd::GUIOBJECT_ID:
|
|
guiobject_setId(strvalue);
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_ALPHA:
|
|
if (wcschr(strvalue, ',')) // erroneous value, this is probably a color, or something
|
|
guiobject_setAlpha(255);
|
|
else
|
|
guiobject_setAlpha(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_ACTIVEALPHA:
|
|
if (wcschr(strvalue, ',')) // erroneous value, this is probably a color, or something
|
|
guiobject_setActiveAlpha(255);
|
|
else
|
|
guiobject_setActiveAlpha(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_INACTIVEALPHA:
|
|
if (wcschr(strvalue, ',')) // erroneous value, this is probably a color, or something
|
|
guiobject_setInactiveAlpha(255);
|
|
else
|
|
guiobject_setInactiveAlpha(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SYSREGION:
|
|
guiobject_setRegionOp(WASABI_API_SKIN->parse(strvalue, L"regionop"));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_RECTRGN:
|
|
guiobject_setRectRgn(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_TOOLTIP:
|
|
guiobject_getRootWnd()->setTip(strvalue);
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SYSMETRICSX:
|
|
guiobject_setAutoSysMetricsX(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SYSMETRICSY:
|
|
guiobject_setAutoSysMetricsY(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SYSMETRICSW:
|
|
guiobject_setAutoSysMetricsW(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SYSMETRICSH:
|
|
guiobject_setAutoSysMetricsH(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_MOVE:
|
|
guiobject_setMover(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_RENDERBASETEXTURE:
|
|
guiobject_getRootWnd()->setRenderBaseTexture(WTOI(strvalue));
|
|
break;
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
case GuiObjectWnd::GUIOBJECT_CFGATTR:
|
|
setCfgAttr(strvalue);
|
|
break;
|
|
#endif
|
|
case GuiObjectWnd::GUIOBJECT_TABORDER:
|
|
guiobject_setTabOrder(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_X: {
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(&a, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_Y: {
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, &a, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_W: {
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, &a, NULL, NULL, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_H: {
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, NULL, &a, NULL, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_FITTOPARENT: {
|
|
int v = WTOI(strvalue);
|
|
if (v) {
|
|
int one = 1;
|
|
int x = 0, y = 0, w = 0, h = 0;
|
|
if (v < 0) {
|
|
v = -v;
|
|
x += v;
|
|
y += v;
|
|
w -= v * 2;
|
|
h -= v * 2;
|
|
}
|
|
guiobject_setGuiPosition(&x, &y, &w, &h, NULL, NULL, &one, &one);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
}
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_WANTFOCUS:
|
|
wantfocus = WTOI(strvalue);
|
|
if (guiobject_getRootWnd()->isPostOnInit()) {
|
|
if (wantfocus) {
|
|
if (guiobject_getRootWnd()->getTabOrder() == -1)
|
|
guiobject_getRootWnd()->setAutoTabOrder();
|
|
} else {
|
|
if (guiobject_getRootWnd()->getTabOrder() != -1)
|
|
guiobject_getRootWnd()->setTabOrder(-1);
|
|
}
|
|
}
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_VISIBLE: {
|
|
a = WTOI(strvalue);
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w->isPostOnInit())
|
|
w->setVisible(a);
|
|
else
|
|
w->setStartHidden(!a);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_RELATX: {
|
|
if (strvalue && *strvalue == '%')
|
|
a = 2;
|
|
else
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, NULL, NULL, &a, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_RELATY: {
|
|
if (strvalue && *strvalue == '%')
|
|
a = 2;
|
|
else
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, NULL, NULL, NULL, &a, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_RELATW: {
|
|
if (strvalue && *strvalue == '%')
|
|
a = 2;
|
|
else
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, NULL, NULL, NULL, NULL, &a, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_RELATH: {
|
|
if (strvalue && *strvalue == '%')
|
|
a = 2;
|
|
else
|
|
a = WTOI(strvalue);
|
|
guiobject_setGuiPosition(NULL, NULL, NULL, NULL, NULL, NULL, NULL, &a);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break; }
|
|
case GuiObjectWnd::GUIOBJECT_DROPTARGET:
|
|
guiobject_setDropTarget(strvalue);
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_GHOST:
|
|
guiobject_setClickThrough(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETNODBLCLICK:
|
|
guiobject_setNoDoubleClick(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETNOLEFTCLICK:
|
|
guiobject_setNoLeftClick(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETNORIGHTCLICK:
|
|
guiobject_setNoRightClick(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETNOMOUSEMOVE:
|
|
guiobject_setNoMouseMove(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETNOCONTEXTMENU:
|
|
guiobject_setNoContextMenu(WTOI(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETX1: {
|
|
a = WTOI(strvalue);
|
|
guiobject_setAnchoragePosition(&a, NULL, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break;
|
|
}
|
|
case GuiObjectWnd::GUIOBJECT_SETY1:{
|
|
a = WTOI(strvalue);
|
|
guiobject_setAnchoragePosition(NULL, &a, NULL, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break;
|
|
}
|
|
case GuiObjectWnd::GUIOBJECT_SETX2:{
|
|
a = WTOI(strvalue);
|
|
guiobject_setAnchoragePosition(NULL, NULL, &a, NULL, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break;
|
|
}
|
|
case GuiObjectWnd::GUIOBJECT_SETY2:{
|
|
a = WTOI(strvalue);
|
|
guiobject_setAnchoragePosition(NULL, NULL, NULL, &a, NULL);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
break;
|
|
}
|
|
case GuiObjectWnd::GUIOBJECT_SETANCHOR: {
|
|
int anchorage=ANCHOR_NONE;
|
|
ParamParser pp(strvalue, L"|");
|
|
for (int m=0;m<pp.getNumItems();m++)
|
|
{
|
|
const wchar_t *s = pp.enumItem(m);
|
|
if (!WCSICMP(s, L"left")) anchorage |= ANCHOR_LEFT;
|
|
else if (!WCSICMP(s, L"top")) anchorage |= ANCHOR_TOP;
|
|
else if (!WCSICMP(s, L"right")) anchorage |= ANCHOR_RIGHT;
|
|
else if (!WCSICMP(s, L"bottom")) anchorage |= ANCHOR_BOTTOM;
|
|
}
|
|
guiobject_setAnchoragePosition(NULL, NULL, NULL, NULL, &anchorage);
|
|
Group *g = guiobject_getParentGroup();
|
|
if (g != NULL && guiobject_getRootWnd()->isPostOnInit())
|
|
g->updatePos(this);
|
|
}
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_SETCURSOR:
|
|
guiobject_setCursor(strvalue);
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_NOTIFY:
|
|
notifylist.addItem(new StringW(strvalue));
|
|
break;
|
|
case GuiObjectWnd::GUIOBJECT_USERDATA:
|
|
// nothing to do, param goes in xmlobject
|
|
break;
|
|
#ifdef USEAPPBAR
|
|
case GuiObjectWnd::GUIOBJECT_APPBAR:
|
|
setAppBar(strvalue);
|
|
break;
|
|
#endif
|
|
case GuiObjectWnd::GUIOBJECT_TRANSLATE:
|
|
translate = WTOI(strvalue);
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_getGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh) {
|
|
if (x) *x = gui_x;
|
|
if (y) *y = gui_y;
|
|
if (w) *w = gui_w;
|
|
if (h) *h = gui_h;
|
|
if (rx) *rx = gui_rx;
|
|
if (ry) *ry = gui_ry;
|
|
if (rw) *rw = gui_rw;
|
|
if (rh) *rh = gui_rh;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh) {
|
|
if (x && *x != NOCHANGE && *x != AUTOWH) gui_x = *x;
|
|
if (y && *y != NOCHANGE && *y != AUTOWH) gui_y = *y;
|
|
if (w && *w != NOCHANGE && *w != AUTOWH) gui_w = *w;
|
|
if (h && *h != NOCHANGE && *h != AUTOWH) gui_h = *h;
|
|
if (rx && *rx != NOCHANGE && *rx != AUTOWH) gui_rx = *rx;
|
|
if (ry && *ry != NOCHANGE && *ry != AUTOWH) gui_ry = *ry;
|
|
if (rw && *rw != NOCHANGE && *rw != AUTOWH) gui_rw = *rw;
|
|
if (rh && *rh != NOCHANGE && *rh != AUTOWH) gui_rh = *rh;
|
|
if (guiobject_getRootWnd()->isInited() && guiobject_getParentGroup())
|
|
guiobject_getParentGroup()->updatePos(this);
|
|
else {
|
|
if (!guiobject_getRootWnd()->isVirtual())
|
|
guiobject_getRootWnd()->resize(gui_x, gui_y, gui_w, gui_h);
|
|
}
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor) {
|
|
if (x1) *x1 = anchor_x1;
|
|
if (y1) *y1 = anchor_y1;
|
|
if (x2) *x2 = anchor_x2;
|
|
if (y2) *y2 = anchor_y2;
|
|
if (anchor) *anchor = anchorage;
|
|
return anchorage_invalidated;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor) {
|
|
anchorage_invalidated = 1;
|
|
if (x1) anchor_x1 = *x1;
|
|
if (x2) anchor_x2 = *x2;
|
|
if (y1) anchor_y1 = *y1;
|
|
if (y2) anchor_y2 = *y2;
|
|
if (anchor) anchorage = *anchor;
|
|
if (guiobject_getRootWnd()->isInited() && guiobject_getParentGroup()) {
|
|
guiobject_getParentGroup()->updatePos(this);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_validateAnchorage() {
|
|
anchorage_invalidated = 0;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setClickThrough(int c) {
|
|
guiobject_getRootWnd()->setClickThrough(c);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setRegionOp(int op) {
|
|
guiobject_getRootWnd()->setRegionOp(op);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getRegionOp() {
|
|
return guiobject_getRootWnd()->getRegionOp();
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setRectRgn(int rrgn) {
|
|
guiobject_getRootWnd()->setRectRgn(rrgn);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setMover(int n) {
|
|
mover = n;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getMover() {
|
|
return mover;
|
|
}
|
|
|
|
FOURCC GuiObjectI::guiobject_getDropTarget() {
|
|
return droptarget;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setDropTarget(const wchar_t *strval)
|
|
{
|
|
if (strval == NULL)
|
|
droptarget = 0;
|
|
else
|
|
{
|
|
uint8_t *temp = (uint8_t *)&droptarget;
|
|
temp[3]=(uint8_t)strval[0];
|
|
temp[2]=(uint8_t)strval[1];
|
|
temp[1]=(uint8_t)strval[2];
|
|
temp[0]=(uint8_t)strval[3];
|
|
}
|
|
}
|
|
|
|
int GuiObjectI::guiobject_isRectRgn() {
|
|
return guiobject_getRootWnd()->isRectRgn();
|
|
}
|
|
|
|
int GuiObjectI::guiobject_isClickThrough() {
|
|
return guiobject_getRootWnd()->isClickThrough();
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setParentGroup(Group *l) {
|
|
if (!l) { p_group = NULL; return; }
|
|
p_group = l;
|
|
}
|
|
|
|
Group *GuiObjectI::guiobject_getParentGroup() {
|
|
if (!p_group) return NULL;
|
|
return p_group;
|
|
}
|
|
|
|
GuiObject *GuiObjectI::guiobject_getParent() {
|
|
ifc_window *grw = guiobject_getRootWnd();
|
|
if (!grw) return NULL;
|
|
ifc_window *w = grw->getParent();
|
|
if (!w) return NULL;
|
|
return static_cast<GuiObject *>(w->getInterface(guiObjectGuid));
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
Layout *GuiObjectI::guiobject_getParentLayout() {
|
|
Group *m = p_group;
|
|
Layout *l = NULL;
|
|
while (m) {
|
|
if (m->isLayout()) {
|
|
l = static_cast<Layout *>(m);
|
|
break;
|
|
}
|
|
m = m->getGuiObject()->guiobject_getParentGroup();
|
|
}
|
|
if (!l) {
|
|
ifc_window *w = guiobject_getRootWnd()->getDesktopParent();
|
|
if (w)
|
|
l = static_cast<Layout *>(w->getInterface(layoutGuid));
|
|
}
|
|
if (l && l->isDeleting()) return NULL;
|
|
return l;
|
|
}
|
|
#endif
|
|
|
|
GuiObject *GuiObjectI::guiobject_getTopParent() {
|
|
ifc_window *m = guiobject_getRootWnd();
|
|
GuiObject *top = this;
|
|
|
|
while (m != NULL) {
|
|
m = m->getParent();
|
|
if (m != NULL) {
|
|
GuiObject *g = m->getGuiObject();
|
|
if (g != NULL)
|
|
top = g;
|
|
}
|
|
}
|
|
|
|
return top;
|
|
}
|
|
|
|
/*void GuiObjectI::parseNotify(const char *s) {
|
|
scriptNotify(s, "", 0, 0);
|
|
}*/
|
|
|
|
void GuiObjectI::guiobject_bringToFront() {
|
|
ifc_window *b = guiobject_getRootWnd();
|
|
if (b) {
|
|
if (b->getParent())
|
|
b->getParent()->bringVirtualToFront(b);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_bringToBack() {
|
|
ifc_window *b = guiobject_getRootWnd();
|
|
if (b) {
|
|
if (b->getParent())
|
|
b->getParent()->bringVirtualToBack(b);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_bringAbove(GuiObject *o) {
|
|
ASSERT(o != NULL);
|
|
ifc_window *b = guiobject_getRootWnd();
|
|
ifc_window *c = o->guiobject_getRootWnd();
|
|
if (b && c) {
|
|
if (b->getParent())
|
|
b->getParent()->bringVirtualAbove(b, c);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_bringBelow(GuiObject *o) {
|
|
ASSERT(o != NULL);
|
|
ifc_window *b = guiobject_getRootWnd();
|
|
ifc_window *c = o->guiobject_getRootWnd();
|
|
if (b && c) {
|
|
if (b->getParent())
|
|
b->getParent()->bringVirtualBelow(b, c);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetSpeed(float s) { // s == n of seconds
|
|
if (targetspeed == (int)(s * 4.0)) return;
|
|
targetspeed = (int)(s * 4.0); // units of 250ms
|
|
if (targetstatus == TARGET_RUNNING) {
|
|
stopTargetTimer();
|
|
startTargetTimer();
|
|
}
|
|
}
|
|
|
|
void GuiObjectTimer::timerclient_timerCallback(int id) {
|
|
if (id == TARGETTIMER_ID && obj)
|
|
obj->onTargetTimer();
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetX(int x) {
|
|
targetx = x;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetY(int y) {
|
|
targety = y;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetW(int w) {
|
|
targetw = w;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetH(int h) {
|
|
targeth = h;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTargetA(int a) {
|
|
targeta = a;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_gotoTarget() {
|
|
if (!guiobject_getRootWnd()) return;
|
|
start_time=0;
|
|
guiobject_getGuiPosition(&startx, &starty, &startw, &starth, NULL, NULL, NULL, NULL);
|
|
starta = guiobject_getAlpha();
|
|
if (targetx == AUTOWH || targetx == NOCHANGE)
|
|
targetx = startx;
|
|
if (targety == AUTOWH || targety == NOCHANGE)
|
|
targety = starty;
|
|
if (targetw == AUTOWH || targetw == NOCHANGE)
|
|
targetw = startw;
|
|
if (targeth == AUTOWH || targeth == NOCHANGE)
|
|
targeth = starth;
|
|
if (targeta == AUTOWH || targeta == NOCHANGE)
|
|
targeta = starta;
|
|
startTargetTimer();
|
|
Layout *l = static_cast<Layout *>(guiobject_getScriptObject()->vcpu_getInterface(layoutGuid));
|
|
if (targetx != startx ||
|
|
targety != starty ||
|
|
targetw != startw ||
|
|
targeth != starth) {
|
|
if (l) windowTracker->beforeRedock(l, &redock);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::startTargetTimer() {
|
|
timer.timerclient_setTimer(TARGETTIMER_ID, 20);
|
|
targetstatus = TARGET_RUNNING;
|
|
}
|
|
|
|
void GuiObjectI::stopTargetTimer() {
|
|
timer.timerclient_killTimer(TARGETTIMER_ID);
|
|
targetstatus = TARGET_FROZEN;
|
|
}
|
|
|
|
void GuiObjectI::onTargetTimer() {
|
|
|
|
if (targetstatus != TARGET_RUNNING) return;
|
|
if (!guiobject_getRootWnd()) return;
|
|
|
|
RECT r;
|
|
guiobject_getRootWnd()->getClientRect(&r);
|
|
RECT wr;
|
|
guiobject_getRootWnd()->getWindowRect(&wr);
|
|
|
|
int ttime=250*targetspeed;
|
|
if (ttime < 0) ttime = 0;
|
|
|
|
int n;
|
|
if (!start_time)
|
|
{
|
|
n=0;
|
|
start_time = Wasabi::Std::getTickCount();
|
|
}
|
|
else
|
|
{
|
|
n=MulDiv(Wasabi::Std::getTickCount()-start_time,256,ttime);
|
|
}
|
|
|
|
if (ttime == 0) n = 255;
|
|
|
|
if (n >= 255) n=255;
|
|
|
|
float sintrans = (float)(sin(((float)n/255)*PI-PI/2)/2+0.5); // used for smoothing transitions
|
|
|
|
float nw = ((float)(targetw - startw) * sintrans) + startw;
|
|
float nh = ((float)(targeth - starth) * sintrans) + starth;
|
|
float na = ((float)(targeta - starta) * sintrans) + starta;
|
|
|
|
Layout *l = static_cast<Layout *>(guiobject_getScriptObject()->vcpu_getInterface(layoutGuid));
|
|
int islayout = l != NULL && static_cast<ifc_window*>(l) == guiobject_getRootWnd();
|
|
|
|
float rat = 1.0f;
|
|
if (islayout) rat = (float)l->getRenderRatio();
|
|
|
|
float nx;
|
|
float ny;
|
|
if (!reversetarget) {
|
|
nx = ((float)(targetx - startx) * sintrans) + startx;
|
|
ny = ((float)(targety - starty) * sintrans) + starty;
|
|
} else {
|
|
nx = startx - ((float)(targetw - startw) * sintrans) * rat;
|
|
ny = starty - ((float)(targeth - starth) * sintrans) * rat;
|
|
}
|
|
|
|
int zx=(int)nx;
|
|
int zy=(int)ny;
|
|
int zw=(int)nw;
|
|
int zh=(int)nh;
|
|
|
|
if (reversetarget) {
|
|
while (zy + zh * rat < wr.bottom) zy++;
|
|
while (zx + zw * rat < wr.right) zx++;
|
|
}
|
|
|
|
int oldredraw = -1;
|
|
if (reversetarget && islayout) {
|
|
oldredraw = l->wantRedrawOnResize();
|
|
l->setWantRedrawOnResize(0);
|
|
|
|
int paddtop = wr.top - (int)ny;
|
|
int paddleft = wr.left - (int)nx;
|
|
|
|
#ifdef _WIN32
|
|
if (paddtop > 0 || paddleft > 0) {
|
|
RegionI r;
|
|
GetWindowRgn(l->gethWnd(), r.getOSHandle());
|
|
r.offset(MAX(0, paddleft), MAX(0, paddtop));
|
|
SetWindowRgn(l->gethWnd(), r.makeWindowRegion(), FALSE);
|
|
}
|
|
#else
|
|
#warning port me
|
|
#endif
|
|
}
|
|
guiobject_setGuiPosition(&zx, &zy, &zw, &zh, NULL, NULL, NULL, NULL);
|
|
guiobject_getRootWnd()->cascadeRepaint(0);
|
|
guiobject_setAlpha((int)na);
|
|
if (n==255) {
|
|
stopTargetTimer();
|
|
guiobject_onTargetReached();
|
|
}
|
|
if (l != NULL) l->savePosition();
|
|
if (oldredraw != -1 && l) {
|
|
l->setWantRedrawOnResize(oldredraw);
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_cancelTarget() {
|
|
stopTargetTimer();
|
|
Layout *l = static_cast<Layout *>(guiobject_getScriptObject()->vcpu_getInterface(layoutGuid));
|
|
if (l && redock.l) windowTracker->afterRedock(l, &redock);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_reverseTarget(int reverse) {
|
|
reversetarget = reverse;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
void GuiObjectI::guiobject_popParentLayout() {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l && l->getParentContainer()) {
|
|
SkinParser::showContainer(l->getParentContainer()->getId(), TRUE);
|
|
#ifdef WIN32
|
|
SetForegroundWindow(l->gethWnd());
|
|
#else
|
|
l->bringToFront();
|
|
#endif
|
|
}
|
|
}
|
|
#endif
|
|
|
|
int GuiObjectI::guiobject_movingToTarget() {
|
|
return targetstatus == TARGET_RUNNING;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onLeftButtonDown(int x, int y) {
|
|
if (!VCPU::getComplete()) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onLeftButtonDown(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
if (mover && !VCPU::getComplete()) {
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) {
|
|
// Martin> (9/9/8) added l->getGuiObject()->guiobject_getMover() so setting move="0" to layouts will disable moving it around
|
|
if (!l->isLocked() && l->getGuiObject()->guiobject_getMover()) {
|
|
#ifdef USEAPPBAR
|
|
if (cfg_options_appbarondrag) {
|
|
m_initial_dock_side = m_dock_side = l->appbar_getSide();
|
|
if (m_dock_side != APPBAR_NOTDOCKED) {
|
|
dodragcheck = 1;
|
|
goto skipit;
|
|
}
|
|
}
|
|
#endif
|
|
l->maximize(0);
|
|
skipit:
|
|
l->beginMove();
|
|
if (l->getParentContainer() && l->getParentContainer()->isMainContainer() || Std::keyModifier(STDKEY_ALT))
|
|
WASABI_API_WNDMGR->wndTrackStartCooperative(l);
|
|
moving = 1;
|
|
anchor.x = (int)((float)x * guiobject_getRootWnd()->getRenderRatio());
|
|
anchor.y = (int)((float)y * guiobject_getRootWnd()->getRenderRatio());
|
|
}
|
|
}
|
|
#endif //WASABI_COMPILE_WNDMGR
|
|
}
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onLeftButtonUp(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onLeftButtonUp(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
if (moving) {
|
|
int sendendmove = 0;
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
Group *l = guiobject_getParentLayout();
|
|
if (l) {
|
|
if (WASABI_API_WNDMGR->wndTrackWasCooperative())
|
|
WASABI_API_WNDMGR->wndTrackEndCooperative();
|
|
moving = 0;
|
|
sendendmove = 1;
|
|
}
|
|
#ifdef USEAPPBAR
|
|
if (cfg_options_appbarondrag) {
|
|
if (m_dock_side != m_initial_dock_side) {
|
|
ifc_window *dw = guiobject_getRootWnd()->getDesktopParent();
|
|
if (dw) {
|
|
AppBar *ab = reinterpret_cast<AppBar *>(dw->getInterface(appBarGuid));
|
|
if (ab) {
|
|
if (m_dock_side == APPBAR_NOTDOCKED) ab->appbar_setNoRestore(1);
|
|
ab->appbar_dock(m_dock_side);
|
|
if (m_dock_side == APPBAR_NOTDOCKED) ab->appbar_setNoRestore(0);
|
|
}
|
|
}
|
|
}
|
|
if (m_dock_side == APPBAR_NOTDOCKED) {
|
|
ifc_window *dp = guiobject_getRootWnd()->getDesktopParent();
|
|
if (dp) dp->restore(0);
|
|
}
|
|
} else {
|
|
ifc_window *dp = guiobject_getRootWnd()->getDesktopParent();
|
|
if (dp) dp->restore(0);
|
|
}
|
|
#else
|
|
ifc_window *dp = guiobject_getRootWnd()->getDesktopParent();
|
|
if (dp) dp->restore(0);
|
|
#endif // USEAPPBAR
|
|
if (sendendmove && l) l->endMove();
|
|
#endif //WASABI_COMPILE_WNDMGR
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onRightButtonDown(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onRightButtonDown(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
}
|
|
|
|
#ifdef WASABI_CUSTOM_CONTEXTMENUS
|
|
extern void appContextMenu(ifc_window *wnd);
|
|
extern void appControlMenu(ifc_window *wnd);
|
|
#endif
|
|
|
|
void GuiObjectI::guiobject_onRightButtonUp(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onRightButtonUp(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (Std::keyModifier(STDKEY_CONTROL) &&
|
|
Std::keyModifier(STDKEY_SHIFT)) {
|
|
GuiObjectI::infoMenu(this, x, y);
|
|
} else {
|
|
if (w && w->wantAutoContextMenu() && !VCPU::getComplete() && WASABI_API_WNDMGR->getModalWnd() == NULL) {
|
|
ifc_window *par = w->getParent();
|
|
if (par && guiobject_getParentLayout()) {
|
|
if (!Std::keyModifier(STDKEY_CONTROL)) {
|
|
#if defined(WA3COMPATIBILITY)
|
|
Main::appContextMenu(par, TRUE, guiobject_getParentLayout()->isTransparencySafe());
|
|
#elif defined(WASABI_CUSTOM_CONTEXTMENUS)
|
|
appContextMenu(par);
|
|
#endif
|
|
} else {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l->getParent() == NULL) {
|
|
#if defined(WA3COMPATIBILITY)
|
|
l->controlMenu();
|
|
#elif defined(WASABI_CUSTOM_CONTEXTMENUS)
|
|
appControlMenu(l);
|
|
#endif
|
|
}
|
|
}
|
|
} else {
|
|
Layout *l = static_cast<Layout *>(w->getInterface(layoutGuid));
|
|
if (l != NULL) {
|
|
if (!Std::keyModifier(STDKEY_CONTROL)) {
|
|
#if defined(WA3COMPATIBILITY)
|
|
Main::appContextMenu(w, TRUE, l->isTransparencySafe());
|
|
#elif defined(WASABI_CUSTOM_CONTEXTMENUS)
|
|
appContextMenu(w);
|
|
#endif
|
|
} else {
|
|
#if defined(WA3COMPATIBILITY)
|
|
l->controlMenu();
|
|
#elif defined(WASABI_CUSTOM_CONTEXTMENUS)
|
|
appControlMenu(l);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onRightButtonDblClk(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onRightButtonDblClk(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onLeftButtonDblClk(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x/* - wr.left*/);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y/* - wr.top*/);
|
|
GuiObject_ScriptMethods::onLeftButtonDblClk(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_onMouseWheelUp(int clicked, int lines)
|
|
{
|
|
scriptVar retval;
|
|
retval = GuiObject_ScriptMethods::onMouseWheelUp(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_INT(clicked), MAKE_SCRIPT_INT(lines) );
|
|
int retv;
|
|
|
|
if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING))
|
|
retv = 0;
|
|
else
|
|
retv = GET_SCRIPT_INT(retval);
|
|
|
|
return retv;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_onMouseWheelDown(int clicked, int lines)
|
|
{
|
|
scriptVar retval;
|
|
retval = GuiObject_ScriptMethods::onMouseWheelDown(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_INT(clicked), MAKE_SCRIPT_INT(lines) );
|
|
int retv;
|
|
|
|
if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING))
|
|
retv = 0;
|
|
else
|
|
retv = GET_SCRIPT_INT(retval);
|
|
|
|
return retv;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onMouseMove(int x, int y) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
GuiObject_ScriptMethods::onMouseMove(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y);
|
|
POINT pos={x,y};
|
|
guiobject_getRootWnd()->clientToScreen((int *)&pos.x, (int *)&pos.y);
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
if (moving) {
|
|
#ifdef _WIN32
|
|
if (!Std::keyDown(MK_LBUTTON)) {
|
|
#else
|
|
#warning port me
|
|
if (0) {
|
|
#endif
|
|
moving = 0;
|
|
} else {
|
|
#ifdef WIN32
|
|
int drag_x = GetSystemMetrics(SM_CXDRAG);
|
|
int drag_y = GetSystemMetrics(SM_CYDRAG);
|
|
#else
|
|
#warning port me
|
|
int drag_x = 5;
|
|
int drag_y = 5;
|
|
#endif
|
|
POINT relatpos;
|
|
relatpos.x = (int)((float)x*guiobject_getRootWnd()->getRenderRatio()) - anchor.x;
|
|
relatpos.y = (int)((float)y*guiobject_getRootWnd()->getRenderRatio()) - anchor.y;
|
|
if (!dodragcheck || (ABS(relatpos.x) >= drag_x || ABS(relatpos.y) >= drag_y)) {
|
|
dodragcheck = 0;
|
|
ifc_window *p = guiobject_getRootWnd()->getDesktopParent();
|
|
if (p) {
|
|
RECT r, cr;
|
|
p->getWindowRect(&r);
|
|
p->getClientRect(&cr);
|
|
RECT nr=r;
|
|
int w,h;
|
|
|
|
#ifdef USEAPPBAR
|
|
int side = APPBAR_NOTDOCKED;
|
|
if (cfg_options_appbarondrag) {
|
|
AppBar *ab = reinterpret_cast<AppBar *>(p->getInterface(appBarGuid));
|
|
if (ab) {
|
|
int _x=x, _y=y;
|
|
p->clientToScreen(&_x, &_y);
|
|
side = ab->appbar_testDock(_x, _y, &nr);
|
|
if (ABS(p->getRenderRatio() - 1.0) > 0.01f) {
|
|
int _w = nr.right-nr.left;
|
|
int _h = nr.bottom-nr.top;
|
|
double rr = p->getRenderRatio();
|
|
_w = (int)((double)(_w) / rr + 0.5);
|
|
_h = (int)((double)(_h) / rr + 0.5);
|
|
nr.right = nr.left + _w;
|
|
nr.bottom = nr.top + _h;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
w = cr.right-cr.left;
|
|
h = cr.bottom-cr.top;
|
|
int resize=0;
|
|
#ifdef USEAPPBAR
|
|
if (cfg_options_appbarondrag) {
|
|
if (side != m_dock_side) {
|
|
if (side != APPBAR_NOTDOCKED) {
|
|
m_lastnondocked_x = r.left;
|
|
m_lastnondocked_y = r.top;
|
|
resize=1;
|
|
} else {
|
|
RECT rr;
|
|
p->getRestoredRect(&rr);
|
|
w = (rr.right-rr.left);
|
|
h = (rr.bottom-rr.top);
|
|
if (m_lastnondocked_x != -0xFFFF) {
|
|
r.left = m_lastnondocked_x;
|
|
r.top = m_lastnondocked_y;
|
|
}
|
|
r.right = r.left + w;
|
|
r.bottom = r.top + h;
|
|
snapAdjust(p, &r, -1);
|
|
nr=r;
|
|
resize=1;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// use the scaling to adjust the overall size so docking will be correct
|
|
double rr = p->getRenderRatio();
|
|
r.left += relatpos.x;
|
|
r.top += relatpos.y;
|
|
r.right = r.left + (int)((double)w * rr);
|
|
r.bottom = r.top + (int)((double)h * rr);
|
|
|
|
#ifdef USEAPPBAR
|
|
|
|
if (side == APPBAR_NOTDOCKED && m_dock_side == APPBAR_NOTDOCKED)
|
|
WASABI_API_WNDMGR->wndTrackDock(p, &r, &nr, LEFT|TOP|RIGHT|BOTTOM|KEEPSIZE);
|
|
|
|
if (side != APPBAR_NOTDOCKED || resize) {
|
|
Layout *l = (Layout *)p->getInterface(layoutGuid);
|
|
if (l) l->pushForceUnlink();
|
|
{
|
|
RECT adj = nr;
|
|
snapAdjust(p, &adj, 1);
|
|
int _w = adj.right-adj.left;
|
|
int _h = adj.bottom-adj.top;
|
|
if (ABS(p->getRenderRatio() - 1.0) > 0.01f) {
|
|
double rr = p->getRenderRatio();
|
|
if ((int)((double)(_w) * rr) == (int)((double)(w) * rr)) _w = w;
|
|
if ((int)((double)(_h) * rr) == (int)((double)(h) * rr)) _h = h;
|
|
}
|
|
p->resize(adj.left, adj.top, _w, _h);
|
|
}
|
|
if (l) l->popForceUnlink();
|
|
} else {
|
|
p->move(r.left, r.top);
|
|
}
|
|
|
|
m_dock_side = side;
|
|
guiobject_getParentLayout()->onMove();
|
|
if (GetCapture() != guiobject_getRootWnd()->getRootParent()->gethWnd()) {
|
|
DebugStringW(L"not mine anymore :(\n");
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
void GuiObjectI::snapAdjust(ifc_window *rw, RECT *r, int way) {
|
|
RECT s;
|
|
Layout *l = static_cast<Layout*>(rw->getInterface(layoutGuid));
|
|
if (!l) return;
|
|
l->getSnapAdjust(&s);
|
|
int h = r->bottom - r->top;
|
|
int w = r->right - r->left;
|
|
if (way == 1) {
|
|
h += s.top + s.bottom;
|
|
w += s.left + s.right;
|
|
r->left -= s.left;
|
|
r->top -= s.top;
|
|
r->bottom = r->top + h;
|
|
r->right = r->left + w;
|
|
} else if (way == -1) {
|
|
h -= s.top + s.bottom;
|
|
w -= s.left + s.right;
|
|
r->left += s.left;
|
|
r->top += s.top;
|
|
r->bottom = r->top + h;
|
|
r->right = r->left + w;
|
|
}
|
|
}
|
|
|
|
#ifdef USEAPPBAR
|
|
int GuiObjectI::guiobject_getAppBar() {
|
|
AppBar *ab = reinterpret_cast<AppBar *>(guiobject_getRootWnd()->getInterface(appBarGuid));
|
|
if (ab) return ab->appbar_getEnabledSides();
|
|
return 0;
|
|
}
|
|
|
|
BEGIN_STRINGDICTIONARY(_appbarvalues)
|
|
SDI(L"top", APPBAR_TOP_ENABLED);
|
|
SDI(L"left", APPBAR_LEFT_ENABLED);
|
|
SDI(L"right", APPBAR_RIGHT_ENABLED);
|
|
SDI(L"bottom", APPBAR_BOTTOM_ENABLED);
|
|
END_STRINGDICTIONARY(_appbarvalues, appbarvalues)
|
|
|
|
void GuiObjectI::guiobject_setAppBar(int en) {
|
|
AppBar *ab = reinterpret_cast<AppBar *>(guiobject_getRootWnd()->getInterface(appBarGuid));
|
|
if (ab) ab->appbar_setEnabledSides(en);
|
|
}
|
|
|
|
void GuiObjectI::setAppBar(const wchar_t *en)
|
|
{
|
|
AppBar *ab = reinterpret_cast<AppBar *>(guiobject_getRootWnd()->getInterface(appBarGuid));
|
|
if (ab) {
|
|
int e = 0;
|
|
ParamParser pp(en, L"|;");
|
|
for (int i=0;i<pp.getNumItems();i++)
|
|
{
|
|
const wchar_t *s = pp.enumItem(i);
|
|
if (!_wcsicmp(s, L"left")) e |= APPBAR_LEFT_ENABLED;
|
|
else if (!_wcsicmp(s, L"top")) e |= APPBAR_TOP_ENABLED;
|
|
else if (!_wcsicmp(s, L"right")) e |= APPBAR_RIGHT_ENABLED;
|
|
else if (!_wcsicmp(s, L"bottom")) e |= APPBAR_BOTTOM_ENABLED;
|
|
}
|
|
ab->appbar_setEnabledSides(e);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
const wchar_t *GuiObjectI::guiobject_getName()
|
|
{
|
|
const wchar_t *ret = NULL;
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
ret = w->getRootWndName();
|
|
return ret;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onEnable(int en) {
|
|
scriptVar _is = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_is, en);
|
|
GuiObject_ScriptMethods::onEnable(SCRIPT_CALL, guiobject_getScriptObject(), _is);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onStartup() {
|
|
GuiObject_ScriptMethods::onStartup(SCRIPT_CALL, guiobject_getScriptObject());
|
|
if (guiobject_getRootObject()) {
|
|
foreach (notifylist)
|
|
guiobject_getRootObject()->rootobject_notify(notifylist.getfor()->getValue(), L"", 0, 0);
|
|
endfor;
|
|
}
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onEnterArea() {
|
|
if (in_area) return;
|
|
GuiObject_ScriptMethods::onEnterArea(SCRIPT_CALL, guiobject_getScriptObject());
|
|
in_area = 1;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onLeaveArea() {
|
|
if (!in_area) return;
|
|
GuiObject_ScriptMethods::onLeaveArea(SCRIPT_CALL, guiobject_getScriptObject());
|
|
in_area = 0;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onCancelCapture() {
|
|
moving = 0;
|
|
}
|
|
|
|
ifc_window *GuiObjectI::guiobject_getRootWnd(void) {
|
|
return my_root_wnd;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setRootWnd(ifc_window *r) {
|
|
my_root_wnd = r;
|
|
}
|
|
|
|
RootObject *GuiObjectI::guiobject_getRootObject() {
|
|
ScriptObject *o = guiobject_getScriptObject();
|
|
if (!o) return NULL;
|
|
return static_cast<RootObject *>(o->vcpu_getInterface(rootObjectGuid));
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onResize(int x, int y, int w, int h) {
|
|
scriptVar _x = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_x, x);
|
|
scriptVar _y = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_y, y);
|
|
scriptVar _w = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_w, w);
|
|
scriptVar _h = SOM::makeVar(SCRIPT_INT);
|
|
SOM::assign(&_h, h);
|
|
GuiObject_ScriptMethods::onResize(SCRIPT_CALL, guiobject_getScriptObject(), _x, _y, _w, _h);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onSetVisible(int v) {
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
if (guiobject_getParentLayout())
|
|
guiobject_getParentLayout()->onGuiObjectSetVisible(this, v);
|
|
#endif
|
|
scriptVar _v = SOM::makeVar(SCRIPT_BOOLEAN);
|
|
SOM::assign(&_v, v);
|
|
GuiObject_ScriptMethods::onSetVisible(SCRIPT_CALL, guiobject_getScriptObject(), _v);
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
if (moving) {
|
|
if (WASABI_API_WNDMGR->wndTrackWasCooperative())
|
|
WASABI_API_WNDMGR->wndTrackEndCooperative();
|
|
moving = 0;
|
|
ifc_window *dp = guiobject_getRootWnd()->getDesktopParent();
|
|
if (dp) dp->restore(0);
|
|
guiobject_getParentGroup()->endMove();
|
|
}
|
|
#endif //WASABI_COMPILE_WNDMGR
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAlpha(int a) {
|
|
if (!my_root_wnd) return;
|
|
Layout *l = static_cast<Layout*>(my_root_wnd->getInterface(layoutGuid));
|
|
if (l) l->setAlpha(a);
|
|
else my_root_wnd->setAlpha(a);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAlpha() {
|
|
if (!my_root_wnd) return 255;
|
|
Layout *l = static_cast<Layout*>(my_root_wnd->getInterface(layoutGuid));
|
|
if (l) return l->getAlpha();
|
|
return my_root_wnd->getPaintingAlpha();
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setActiveAlpha(int a) {
|
|
if (my_root_wnd) {
|
|
int i;
|
|
my_root_wnd->getAlpha(NULL, &i);
|
|
my_root_wnd->setAlpha(a, i);
|
|
}
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getActiveAlpha() {
|
|
int a = 255;
|
|
if (my_root_wnd) my_root_wnd->getAlpha(&a);
|
|
return a;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setInactiveAlpha(int a) {
|
|
if (my_root_wnd) {
|
|
int _a;
|
|
my_root_wnd->getAlpha(&_a);
|
|
my_root_wnd->setAlpha(_a, a);
|
|
}
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getInactiveAlpha() {
|
|
if (my_root_wnd) {
|
|
int i;
|
|
my_root_wnd->getAlpha(NULL, &i);
|
|
return i;
|
|
}
|
|
return 255;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onTargetReached() {
|
|
GuiObject_ScriptMethods::onTargetReached(SCRIPT_CALL, guiobject_getScriptObject());
|
|
Layout *l = static_cast<Layout *>(guiobject_getScriptObject()->vcpu_getInterface(layoutGuid));
|
|
if (l && redock.l) windowTracker->afterRedock(l, &redock);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAutoSysMetricsX(int a) {
|
|
if (a == autosysmetricsx) return;
|
|
autosysmetricsx = a;
|
|
if (guiobject_getRootWnd() && guiobject_getRootWnd()->isInited())
|
|
if (guiobject_getParentGroup()) guiobject_getParentGroup()->updatePos(this);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAutoSysMetricsY(int a) {
|
|
if (a == autosysmetricsy) return;
|
|
autosysmetricsy = a;
|
|
if (guiobject_getRootWnd() && guiobject_getRootWnd()->isInited())
|
|
if (guiobject_getParentGroup()) guiobject_getParentGroup()->updatePos(this);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAutoSysMetricsW(int a) {
|
|
if (a == autosysmetricsw) return;
|
|
autosysmetricsw = a;
|
|
if (guiobject_getRootWnd() && guiobject_getRootWnd()->isInited())
|
|
if (guiobject_getParentGroup()) guiobject_getParentGroup()->updatePos(this);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setAutoSysMetricsH(int a) {
|
|
if (a == autosysmetricsh) return;
|
|
autosysmetricsh = a;
|
|
if (guiobject_getRootWnd() && guiobject_getRootWnd()->isInited())
|
|
if (guiobject_getParentGroup()) guiobject_getParentGroup()->updatePos(this);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoSysMetricsX() {
|
|
return autosysmetricsx;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoSysMetricsY() {
|
|
return autosysmetricsy;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoSysMetricsW() {
|
|
return autosysmetricsw;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoSysMetricsH() {
|
|
return autosysmetricsh;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoWidth() {
|
|
if (!guiobject_getRootWnd()) return AUTOWH;
|
|
return guiobject_getRootWnd()->getPreferences(SUGGESTED_W);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_getAutoHeight() {
|
|
if (!guiobject_getRootWnd()) return AUTOWH;
|
|
return guiobject_getRootWnd()->getPreferences(SUGGESTED_H);
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
int GuiObjectI::guiobject_runModal() {
|
|
if (!guiobject_getRootWnd()) return 0;
|
|
ifc_window *w = guiobject_getRootWnd()->getDesktopParent();
|
|
#ifdef WASABI_MODAL_PUSH
|
|
WASABI_MODAL_PUSH
|
|
#endif
|
|
int r = w->runModal();
|
|
#ifdef WASABI_MODAL_POP
|
|
WASABI_MODAL_POP
|
|
#endif
|
|
return r;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_endModal(int retcode) {
|
|
if (!guiobject_getRootWnd()) return;
|
|
ifc_window *w = guiobject_getRootWnd()->getDesktopParent();
|
|
w->endModal(retcode);
|
|
}
|
|
#endif
|
|
|
|
int GuiObjectI::guiobject_isActive() {
|
|
if (!guiobject_getRootWnd()) return 0;
|
|
return guiobject_getRootWnd()->isActive();
|
|
}
|
|
|
|
svc_xuiObject *GuiObjectI::guiobject_getXuiService() {
|
|
return xuisvc;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setXuiService(svc_xuiObject *svc) {
|
|
xuisvc = svc;
|
|
}
|
|
|
|
waServiceFactory *GuiObjectI::guiobject_getXuiServiceFactory() {
|
|
return xuifac;
|
|
}
|
|
void GuiObjectI::guiobject_setXuiServiceFactory(waServiceFactory *fac) {
|
|
xuifac = fac;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
void GuiObjectI::guiobject_setStatusText(const wchar_t *text, int overlay)
|
|
{
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l)
|
|
l->setStatusText(text, overlay);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_registerStatusCB(GuiStatusCallback *cb) {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->registerStatusCallback(cb);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_addAppCmds(AppCmds *commands){
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->addAppCmds(commands);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_removeAppCmds(AppCmds *commands){
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->removeAppCmds(commands);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_pushCompleted(int max) {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->pushCompleted(max);
|
|
}
|
|
void GuiObjectI::guiobject_incCompleted(int add) {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->incCompleted(add);
|
|
}
|
|
void GuiObjectI::guiobject_setCompleted(int pos) {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->setCompleted(pos);
|
|
}
|
|
void GuiObjectI::guiobject_popCompleted() {
|
|
Layout *l = guiobject_getParentLayout();
|
|
if (l) l->popCompleted();
|
|
}
|
|
#endif //WASABI_COMPILE_WNDMGR
|
|
|
|
void GuiObjectI::infoMenu(GuiObject *o, int x, int y)
|
|
{
|
|
PopupMenu pop;
|
|
pop.addCommand(StringPrintfW(L"Class : %s", o->guiobject_getScriptObject()->vcpu_getClassName()), 0, 0, 1);
|
|
pop.addCommand(StringPrintfW(L"Id : %s", o->guiobject_getId()), 0, 0, 1);
|
|
RECT r;
|
|
guiobject_getRootWnd()->getNonClientRect(&r);
|
|
pop.addCommand(StringPrintfW(L"Coordinates : %d,%d (%d x %d)", r.left, r.top, r.right-r.left, r.bottom-r.top), 0, 0, 1);
|
|
int _x, _y, _w, _h, _rx, _ry, _rw, _rh;
|
|
guiobject_getGuiPosition(&_x, &_y, &_w, &_h, &_rx, &_ry, &_rw, &_rh);
|
|
pop.addCommand(StringPrintfW(L"GuiPos : x=%d relatx=%d, y=%d relaty=%d, w=%d relatw=%d, h=%d relath=%d", _x, _rx, _y, _ry, _w, _rw, _h, _rh), 0, 0, 1);
|
|
|
|
if (guiobject_wantTranslation() == 2)
|
|
{
|
|
if (!_wcsicmp(o->guiobject_getScriptObject()->vcpu_getClassName(), L"Text"))
|
|
{
|
|
pop.addCommand(StringPrintfW(L"StringEntry : %s", guiobject_getXmlParam(L"text")), 0, 0, 1);
|
|
}
|
|
else if (!_wcsicmp(o->guiobject_getScriptObject()->vcpu_getClassName(), L"TitleBar"))
|
|
{
|
|
pop.addCommand(StringPrintfW(L"StringEntry : %s", guiobject_getXmlParam(L"title")), 0, 0, 1);
|
|
}
|
|
}
|
|
guiobject_getRootWnd()->clientToScreen(&x, &y);
|
|
pop.popAtXY(x, y, 1);
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
|
|
void GuiObjectI::guiobject_setCfgAttrib(CfgItem *item, const wchar_t *name)
|
|
{
|
|
if (cfgitem) viewer_delViewItem(cfgitem);
|
|
cfgitem = item;
|
|
cfgattrname = name;
|
|
if (cfgitem) {
|
|
viewer_addViewItem(cfgitem);
|
|
}
|
|
ifc_window *mw = guiobject_getRootWnd();
|
|
if (mw != NULL) {
|
|
if (mw->isPostOnInit())
|
|
dataChanged();
|
|
}
|
|
}
|
|
|
|
int GuiObjectI::viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen) {
|
|
if (item == cfgitem)
|
|
dataChanged();
|
|
return 1;
|
|
}
|
|
|
|
void GuiObjectI::dataChanged() {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
w->onAction(L"reload_config", NULL, -1, -1, 0, 0, NULL, 0, w);
|
|
}
|
|
GuiObject_ScriptMethods::onCfgChanged(SCRIPT_CALL, guiobject_getScriptObject());
|
|
}
|
|
|
|
|
|
CfgItem *GuiObjectI::guiobject_getCfgItem() {
|
|
return cfgitem;
|
|
}
|
|
|
|
const wchar_t *GuiObjectI::guiobject_getCfgAttrib()
|
|
{
|
|
return cfgattrname;
|
|
}
|
|
#endif //WASABI_COMPILE_CONFIG
|
|
|
|
void GuiObjectI::guiobject_onChar(wchar_t c)
|
|
{
|
|
wchar_t _c[2]=L"X";
|
|
_c[0]=c;
|
|
GuiObject_ScriptMethods::onChar(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_STRING(_c));
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onKeyDown(int vkcode) {
|
|
GuiObject_ScriptMethods::onKeyDown(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_INT(vkcode));
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onKeyUp(int vkcode) {
|
|
GuiObject_ScriptMethods::onKeyUp(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_INT(vkcode));
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setCursor(const wchar_t *c)
|
|
{
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
#ifdef _WIN32
|
|
if (w != NULL) {
|
|
delete cursor;
|
|
cursor = new SkinCursor(c);
|
|
w->setDefaultCursor(cursor);
|
|
}
|
|
#else
|
|
#warning port me
|
|
#endif
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setEnabled(int en) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL) w->setEnabled(en);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_wantTranslation()
|
|
{
|
|
return translate;
|
|
}
|
|
int GuiObjectI::guiobject_dragEnter(ifc_window *sourceWnd)
|
|
{
|
|
GuiObject_ScriptMethods::onDragEnter(SCRIPT_CALL, guiobject_getScriptObject());
|
|
return 1;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_dragOver(int x, int y, ifc_window *sourceWnd)
|
|
{
|
|
GuiObject_ScriptMethods::onDragOver(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) );
|
|
return 1;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_dragLeave(ifc_window *sourceWnd)
|
|
{
|
|
GuiObject_ScriptMethods::onDragLeave(SCRIPT_CALL, guiobject_getScriptObject());
|
|
return 1;
|
|
}
|
|
|
|
GuiObjectScriptController _guiController;
|
|
GuiObjectScriptController *guiController = &_guiController;
|
|
|
|
// -- Functions table -------------------------------------
|
|
function_descriptor_struct GuiObjectScriptController::exportedFunction[] = {
|
|
{L"getId", 0, (void*)GuiObject_ScriptMethods::getId },
|
|
{L"show", 0, (void*)GuiObject_ScriptMethods::show },
|
|
{L"hide", 0, (void*)GuiObject_ScriptMethods::hide },
|
|
{L"onSetVisible", 1, (void*)GuiObject_ScriptMethods::onSetVisible},
|
|
{L"isVisible", 0, (void*)GuiObject_ScriptMethods::isvisible },
|
|
{L"setAlpha", 1, (void*)GuiObject_ScriptMethods::setAlpha },
|
|
{L"getAlpha", 0, (void*)GuiObject_ScriptMethods::getAlpha },
|
|
{L"setActiveAlpha", 1, (void*)GuiObject_ScriptMethods::setActiveAlpha },
|
|
{L"getActiveAlpha", 0, (void*)GuiObject_ScriptMethods::getActiveAlpha },
|
|
{L"setInactiveAlpha", 1, (void*)GuiObject_ScriptMethods::setInactiveAlpha },
|
|
{L"getInactiveAlpha", 0, (void*)GuiObject_ScriptMethods::getInactiveAlpha },
|
|
{L"onLeftButtonDown", 2, (void*)GuiObject_ScriptMethods::onLeftButtonDown },
|
|
{L"onLeftButtonUp", 2, (void*)GuiObject_ScriptMethods::onLeftButtonUp },
|
|
{L"onRightButtonDown", 2, (void*)GuiObject_ScriptMethods::onRightButtonDown },
|
|
{L"onRightButtonUp", 2, (void*)GuiObject_ScriptMethods::onRightButtonUp },
|
|
{L"onRightButtonDblClk", 2, (void*)GuiObject_ScriptMethods::onRightButtonDblClk },
|
|
{L"onLeftButtonDblClk", 2, (void*)GuiObject_ScriptMethods::onLeftButtonDblClk },
|
|
{L"onMouseWheelUp", 2, (void*)GuiObject_ScriptMethods::onMouseWheelUp },
|
|
{L"onMouseWheelDown", 2, (void*)GuiObject_ScriptMethods::onMouseWheelDown },
|
|
{L"onMouseMove", 2, (void*)GuiObject_ScriptMethods::onMouseMove },
|
|
{L"onEnterArea", 0, (void*)GuiObject_ScriptMethods::onEnterArea },
|
|
{L"onLeaveArea", 0, (void*)GuiObject_ScriptMethods::onLeaveArea },
|
|
{L"isMouseOverRect", 0, (void*)GuiObject_ScriptMethods::isMouseOverRect},
|
|
{L"onStartup", 0, (void*)GuiObject_ScriptMethods::onStartup },
|
|
{L"onChar", 1, (void*)GuiObject_ScriptMethods::onChar },
|
|
{L"onKeyDown", 1, (void*)GuiObject_ScriptMethods::onKeyDown},
|
|
{L"onKeyUp", 1, (void*)GuiObject_ScriptMethods::onKeyUp},
|
|
{L"setEnabled", 1, (void*)GuiObject_ScriptMethods::setEnabled },
|
|
{L"getEnabled", 0, (void*)GuiObject_ScriptMethods::getEnabled },
|
|
{L"onEnable", 1, (void*)GuiObject_ScriptMethods::onEnable },
|
|
{L"resize", 4, (void*)GuiObject_ScriptMethods::resize },
|
|
{L"onResize", 4, (void*)GuiObject_ScriptMethods::onResize },
|
|
{L"isMouseOver", 2, (void*)GuiObject_ScriptMethods::isMouseOver },
|
|
{L"getLeft", 0, (void*)GuiObject_ScriptMethods::getLeft },
|
|
{L"getTop", 0, (void*)GuiObject_ScriptMethods::getTop },
|
|
{L"getWidth", 0, (void*)GuiObject_ScriptMethods::getWidth },
|
|
{L"getHeight", 0, (void*)GuiObject_ScriptMethods::getHeight },
|
|
{L"getGuiX", 0, (void*)GuiObject_ScriptMethods::getGuiX },
|
|
{L"getGuiY", 0, (void*)GuiObject_ScriptMethods::getGuiY },
|
|
{L"getGuiW", 0, (void*)GuiObject_ScriptMethods::getGuiW },
|
|
{L"getGuiH", 0, (void*)GuiObject_ScriptMethods::getGuiH },
|
|
{L"getGuiRelatX", 0, (void*)GuiObject_ScriptMethods::getGuiRelatX },
|
|
{L"getGuiRelatY", 0, (void*)GuiObject_ScriptMethods::getGuiRelatX },
|
|
{L"getGuiRelatW", 0, (void*)GuiObject_ScriptMethods::getGuiRelatX },
|
|
{L"getGuiRelatH", 0, (void*)GuiObject_ScriptMethods::getGuiRelatX },
|
|
{L"clientToScreenX", 1, (void*)GuiObject_ScriptMethods::clientToScreenX },
|
|
{L"clientToScreenY", 1, (void*)GuiObject_ScriptMethods::clientToScreenY },
|
|
{L"clientToScreenW", 1, (void*)GuiObject_ScriptMethods::clientToScreenW },
|
|
{L"clientToScreenH", 1, (void*)GuiObject_ScriptMethods::clientToScreenH },
|
|
{L"screenToClientX", 1, (void*)GuiObject_ScriptMethods::screenToClientX },
|
|
{L"screenToClientY", 1, (void*)GuiObject_ScriptMethods::screenToClientY },
|
|
{L"screenToClientW", 1, (void*)GuiObject_ScriptMethods::screenToClientW },
|
|
{L"screenToClientH", 1, (void*)GuiObject_ScriptMethods::screenToClientH },
|
|
{L"setTargetX", 1, (void*)GuiObject_ScriptMethods::setTargetX },
|
|
{L"setTargetY", 1, (void*)GuiObject_ScriptMethods::setTargetY },
|
|
{L"setTargetW", 1, (void*)GuiObject_ScriptMethods::setTargetW },
|
|
{L"setTargetH", 1, (void*)GuiObject_ScriptMethods::setTargetH },
|
|
{L"setTargetA", 1, (void*)GuiObject_ScriptMethods::setTargetA },
|
|
{L"setTargetSpeed", 1, (void*)GuiObject_ScriptMethods::setTargetSpeed },
|
|
{L"gotoTarget", 0, (void*)GuiObject_ScriptMethods::gotoTarget },
|
|
{L"onTargetReached", 0, (void*)GuiObject_ScriptMethods::onTargetReached },
|
|
{L"cancelTarget", 0, (void*)GuiObject_ScriptMethods::cancelTarget },
|
|
{L"reverseTarget", 1, (void*)GuiObject_ScriptMethods::reverseTarget },
|
|
{L"isGoingToTarget", 0, (void*)GuiObject_ScriptMethods::movingToTarget },
|
|
{L"setXmlParam", 2, (void*)GuiObject_ScriptMethods::setXmlParam },
|
|
{L"getXmlParam", 1, (void*)GuiObject_ScriptMethods::getXmlParam },
|
|
{L"init", 1, (void*)GuiObject_ScriptMethods::init },
|
|
{L"bringToFront", 0, (void*)GuiObject_ScriptMethods::bringToFront },
|
|
{L"bringToBack", 0, (void*)GuiObject_ScriptMethods::bringToBack },
|
|
{L"bringAbove", 1, (void*)GuiObject_ScriptMethods::bringAbove },
|
|
{L"bringBelow", 1, (void*)GuiObject_ScriptMethods::bringBelow },
|
|
{L"isActive", 0, (void*)GuiObject_ScriptMethods::isActive},
|
|
{L"getParent", 0, (void*)GuiObject_ScriptMethods::getParent},
|
|
{L"getTopParent", 0, (void*)GuiObject_ScriptMethods::getTopParent},
|
|
{L"getInterface", 1, (void*)GuiObject_ScriptMethods::getInterface},
|
|
{L"onAction", 7, (void*)GuiObject_ScriptMethods::onAction},
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
{L"getParentLayout", 0, (void*)GuiObject_ScriptMethods::getParentLayout},
|
|
{L"runModal", 0, (void*)GuiObject_ScriptMethods::runModal},
|
|
{L"endModal", 1, (void*)GuiObject_ScriptMethods::endModal},
|
|
{L"popParentLayout", 0, (void*)GuiObject_ScriptMethods::popParentLayout},
|
|
{L"setStatusText", 2, (void*)GuiObject_ScriptMethods::setStatusText},
|
|
#endif
|
|
{L"findObject", 1, (void*)GuiObject_ScriptMethods::findObject},
|
|
{L"findObjectXY", 2, (void*)GuiObject_ScriptMethods::findObjectXY},
|
|
{L"getName", 0, (void*)GuiObject_ScriptMethods::getName},
|
|
{L"getAutoWidth", 0, (void*)GuiObject_ScriptMethods::getAutoWidth },
|
|
{L"getAutoHeight", 0, (void*)GuiObject_ScriptMethods::getAutoHeight },
|
|
{L"setFocus", 0, (void*)GuiObject_ScriptMethods::setFocus},
|
|
{L"onGetFocus", 0, (void*)GuiObject_ScriptMethods::onGetFocus},
|
|
{L"onKillFocus", 0, (void*)GuiObject_ScriptMethods::onKillFocus},
|
|
{L"sendAction", 6, (void*)GuiObject_ScriptMethods::sendAction},
|
|
{L"onAccelerator", 1, (void*)GuiObject_ScriptMethods::onAccelerator},
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
{L"cfg_getInt", 0, (void*)GuiObject_ScriptMethods::cfgGetInt },
|
|
{L"cfg_setInt", 1, (void*)GuiObject_ScriptMethods::cfgSetInt },
|
|
{L"cfg_getFloat", 0, (void*)GuiObject_ScriptMethods::cfgGetFloat },
|
|
{L"cfg_setFloat", 1, (void*)GuiObject_ScriptMethods::cfgSetFloat },
|
|
{L"cfg_getString", 0, (void*)GuiObject_ScriptMethods::cfgGetString },
|
|
{L"cfg_setString", 1, (void*)GuiObject_ScriptMethods::cfgSetString },
|
|
{L"cfg_onDataChanged", 0, (void*)GuiObject_ScriptMethods::onCfgChanged },
|
|
{L"cfg_getItemGuid", 0, (void*)GuiObject_ScriptMethods::cfgGetGuid},
|
|
{L"cfg_getAttributeName", 0, (void*)GuiObject_ScriptMethods::cfgGetAttributeName},
|
|
#endif
|
|
{L"onDragEnter", 0, (void*)GuiObject_ScriptMethods::onDragEnter },
|
|
{L"onDragOver", 2, (void*)GuiObject_ScriptMethods::onDragOver},
|
|
{L"onDragLeave", 0, (void*)GuiObject_ScriptMethods::onDragLeave},
|
|
};
|
|
|
|
const wchar_t *GuiObjectScriptController::getClassName() {
|
|
return L"GuiObject";
|
|
}
|
|
|
|
const wchar_t *GuiObjectScriptController::getAncestorClassName() {
|
|
return L"Object";
|
|
}
|
|
|
|
ScriptObjectController *GuiObjectScriptController::getAncestorController() {
|
|
return rootScriptObjectController;}
|
|
|
|
int GuiObjectScriptController::getNumFunctions() {
|
|
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
|
}
|
|
|
|
const function_descriptor_struct *GuiObjectScriptController::getExportedFunctions() {
|
|
return exportedFunction;
|
|
}
|
|
|
|
GUID GuiObjectScriptController::getClassGuid() {
|
|
return guiObjectGuid;
|
|
}
|
|
|
|
int GuiObjectScriptController::getInstantiable() {
|
|
return 1;
|
|
}
|
|
|
|
ScriptObject *GuiObjectScriptController::instantiate() {
|
|
GuiObjectWnd *w = new GuiObjectWnd;
|
|
ASSERT(w != NULL);
|
|
return w->getScriptObject();
|
|
}
|
|
|
|
void GuiObjectScriptController::destroy(ScriptObject *o) {
|
|
GuiObjectWnd *w = static_cast<GuiObjectWnd *>(o->vcpu_getInterface(guiObjectWndGuid));
|
|
ASSERT(w != NULL);
|
|
delete w;
|
|
}
|
|
|
|
void *GuiObjectScriptController::encapsulate(ScriptObject *o) {
|
|
return static_cast<void *>(new GuiObjectI(o));
|
|
}
|
|
|
|
void GuiObjectScriptController::deencapsulate(void *o) {
|
|
delete static_cast<GuiObjectI *>(o);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// returns a new ScriptString object containing the xml id of this object
|
|
scriptVar GuiObject_ScriptMethods::getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
|
|
if (g)
|
|
return MAKE_SCRIPT_STRING(g->guiobject_getId());
|
|
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w)
|
|
w->setVisible(0);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w)
|
|
w->setVisible(1);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::isvisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w) return MAKE_SCRIPT_BOOLEAN(w->isVisible());
|
|
}
|
|
RETURN_SCRIPT_ZERO;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) return MAKE_SCRIPT_INT(g->guiobject_getAlpha());
|
|
return MAKE_SCRIPT_INT(255);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setAlpha(GET_SCRIPT_INT(a));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) return MAKE_SCRIPT_INT(g->guiobject_getActiveAlpha());
|
|
return MAKE_SCRIPT_INT(255);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setActiveAlpha(GET_SCRIPT_INT(a));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) return MAKE_SCRIPT_INT(g->guiobject_getInactiveAlpha());
|
|
return MAKE_SCRIPT_INT(255);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setInactiveAlpha(GET_SCRIPT_INT(a));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
|
|
scriptVar GuiObject_ScriptMethods::onMouseMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onLeftButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onLeftButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onRightButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onRightButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onLeftButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onRightButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onMouseWheelUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, clicked, lines);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, clicked, lines);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onMouseWheelDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, clicked, lines);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, clicked, lines);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onEnterArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onLeaveArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&v));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *b = g->guiobject_getRootWnd();
|
|
if (b) b->setEnabled(GET_SCRIPT_BOOLEAN(v));
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *b = g->guiobject_getRootWnd();
|
|
if (b) return MAKE_SCRIPT_BOOLEAN(b->isEnabled());
|
|
}
|
|
RETURN_SCRIPT_ZERO;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onEnable(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, v);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onSetVisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, v);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS4(o, guiController, x, y, w, h);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT4(o, x, y, w, h);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::resize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&x));
|
|
ASSERT(SOM::isNumeric(&y));
|
|
ASSERT(SOM::isNumeric(&w));
|
|
ASSERT(SOM::isNumeric(&h));
|
|
GuiObject *go = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) {
|
|
int _x = SOM::makeInt(&x);
|
|
int _y = SOM::makeInt(&y);
|
|
int _w = SOM::makeInt(&w);
|
|
int _h = SOM::makeInt(&h);
|
|
ifc_window *b = go->guiobject_getRootWnd();
|
|
if (b) b->resize(_x, _y, _w, _h);
|
|
go->guiobject_setGuiPosition(_x == NOCHANGE ? &_x : NULL, _y == NOCHANGE ? &_y : NULL, _w == NOCHANGE ? &_w : NULL, _h == NOCHANGE ? &_h : NULL, NULL, NULL, NULL, NULL);
|
|
if (b && b->getInterface(layoutGuid)) {
|
|
b->cascadeRepaint();
|
|
((Layout *)b->getInterface(layoutGuid))->savePosition();
|
|
}
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::isMouseOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&x));
|
|
ASSERT(SOM::isNumeric(&y));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *b = g->guiobject_getRootWnd();
|
|
POINT pt={GET_SCRIPT_INT(x), GET_SCRIPT_INT(y)};
|
|
b->clientToScreen((int *)&pt.x, (int *)&pt.y);
|
|
return MAKE_SCRIPT_BOOLEAN(WASABI_API_WND->rootWndFromPoint(&pt) == b);
|
|
}
|
|
RETURN_SCRIPT_ZERO;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getLeft(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
ifc_window *b = go->guiobject_getRootWnd();
|
|
int r=0;
|
|
if (b && b->isInited()) {
|
|
POINT pt;
|
|
b->getPosition(&pt);
|
|
r = pt.x;
|
|
} else if (b && !b->isInited()) {
|
|
go->guiobject_getGuiPosition(&r, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
}
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::movingToTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) return MAKE_SCRIPT_BOOLEAN(g->guiobject_movingToTarget());
|
|
RETURN_SCRIPT_ZERO;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cancelTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g && g->guiobject_movingToTarget()) g->guiobject_cancelTarget();
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::reverseTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_reverseTarget(GET_SCRIPT_INT(r));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getTop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
ifc_window *b = go->guiobject_getRootWnd();
|
|
int r=0;
|
|
if (b && b->isInited()) {
|
|
POINT pt;
|
|
b->getPosition(&pt);
|
|
r = pt.y;
|
|
} else if (b && !b->isInited()) {
|
|
go->guiobject_getGuiPosition(NULL, &r, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
}
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
ifc_window *b = go->guiobject_getRootWnd();
|
|
int r=0;
|
|
if (b && b->isInited()) {
|
|
RECT rc;
|
|
b->getClientRect(&rc);
|
|
r = rc.right-rc.left;
|
|
} else if (b && !b->isInited()) {
|
|
go->guiobject_getGuiPosition(NULL, NULL, &r, NULL, NULL, NULL, NULL, NULL);
|
|
}
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
ifc_window *b = go->guiobject_getRootWnd();
|
|
int r=0;
|
|
if (b && b->isInited()) {
|
|
RECT rc;
|
|
b->getClientRect(&rc);
|
|
r = rc.bottom-rc.top;
|
|
} else if (b && !b->isInited()) {
|
|
go->guiobject_getGuiPosition(NULL, NULL, NULL, &r, NULL, NULL, NULL, NULL);
|
|
}
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&x));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetX(GET_SCRIPT_INT(x));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&y));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetY(GET_SCRIPT_INT(y));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar w) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&w));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetW(GET_SCRIPT_INT(w));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar h) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&h));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetH(GET_SCRIPT_INT(h));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetA(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&a));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetA(GET_SCRIPT_INT(a));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setTargetSpeed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&s));
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setTargetSpeed(GET_SCRIPT_FLOAT(s));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::gotoTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_gotoTarget();
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::bringToFront(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_bringToFront();
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::bringToBack(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_bringToBack();
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::bringAbove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(obj.data.odata != NULL);
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_bringAbove((static_cast<GuiObject *>(GET_SCRIPT_OBJECT_AS(obj, guiObjectGuid))));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::bringBelow(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(obj.data.odata != NULL);
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_bringBelow((static_cast<GuiObject *>(GET_SCRIPT_OBJECT_AS(obj, guiObjectGuid))));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
|
|
scriptVar GuiObject_ScriptMethods::onTargetReached(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param, scriptVar value)
|
|
{
|
|
SCRIPT_FUNCTION_INIT;
|
|
XmlObject *x = static_cast<XmlObject*>(o->vcpu_getInterface(xmlObjectGuid));
|
|
if (x)
|
|
x->setXmlParam(GET_SCRIPT_STRING(param), GET_SCRIPT_STRING(value));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
const wchar_t *rt = NULL;
|
|
XmlObject *x = static_cast<XmlObject*>(o->vcpu_getInterface(xmlObjectGuid));
|
|
if (x) {
|
|
int r = x->getXmlParam(GET_SCRIPT_STRING(param));
|
|
if (r != -1)
|
|
rt = x->getXmlParamValue(r);
|
|
}
|
|
if (rt == NULL)
|
|
rt = L""; // returning null in a string is kinda bad, y'know?
|
|
|
|
return MAKE_SCRIPT_STRING(rt);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onStartup(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(&v, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, &v, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, &v, NULL, NULL, NULL, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, NULL, &v, NULL, NULL, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiRelatX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, NULL, NULL, &v, NULL, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiRelatY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, NULL, NULL, NULL, &v, NULL, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiRelatW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, NULL, NULL, NULL, NULL, &v, NULL);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getGuiRelatH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_getGuiPosition(NULL, NULL, NULL, NULL, NULL, NULL, NULL, &v);
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::clientToScreenX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(x);
|
|
w->clientToScreen(&v, NULL);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::clientToScreenY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(y);
|
|
w->clientToScreen(NULL, &v);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::clientToScreenW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar w) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *wn = g->guiobject_getRootWnd();
|
|
if (wn != NULL) {
|
|
v = GET_SCRIPT_INT(w);
|
|
double rr = wn->getRenderRatio();
|
|
v = (int)((double)(v) * rr);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::clientToScreenH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar h) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(h);
|
|
double rr = w->getRenderRatio();
|
|
v = (int)((double)(v) * rr);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
|
|
scriptVar GuiObject_ScriptMethods::screenToClientX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(x);
|
|
w->screenToClient(&v, NULL);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::screenToClientY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(y);
|
|
w->screenToClient(NULL, &v);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::screenToClientW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar w) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *wn = g->guiobject_getRootWnd();
|
|
if (wn != NULL) {
|
|
v = GET_SCRIPT_INT(w);
|
|
double rr = wn->getRenderRatio();
|
|
v = (int)((double)(v) / rr);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::screenToClientH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar h) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int v=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
v = GET_SCRIPT_INT(h);
|
|
double rr = w->getRenderRatio();
|
|
v = (int)((double)(v) / rr);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::isActive(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)))->guiobject_getRootWnd();
|
|
if (w) return MAKE_SCRIPT_INT(w->isActive());
|
|
}
|
|
RETURN_SCRIPT_ZERO;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)));
|
|
if (go) {
|
|
GuiObject *g = go->guiobject_getParent();
|
|
ScriptObject *so = NULL;
|
|
if (g != NULL)
|
|
so = g->guiobject_getScriptObject();
|
|
return MAKE_SCRIPT_OBJECT(so);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
scriptVar GuiObject_ScriptMethods::getParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)));
|
|
if (go) {
|
|
Layout *l = go->guiobject_getParentLayout();
|
|
return MAKE_SCRIPT_OBJECT(l ? l->getGuiObject()->guiobject_getScriptObject() : NULL);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
#endif
|
|
|
|
scriptVar GuiObject_ScriptMethods::getTopParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)));
|
|
if (go) {
|
|
GuiObject *l = go->guiobject_getTopParent();
|
|
return MAKE_SCRIPT_OBJECT(l ? l->guiobject_getScriptObject() : NULL);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getAutoWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)));
|
|
int v = 0;
|
|
if (go) { v = go->guiobject_getRootWnd()->getPreferences(SUGGESTED_W); if (v == AUTOWH) v = go->guiobject_getAutoWidth(); }
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getAutoHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *go = (static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid)));
|
|
int v = 0;
|
|
if (go) { v = go->guiobject_getRootWnd()->getPreferences(SUGGESTED_H); if (v == AUTOWH) v = go->guiobject_getAutoHeight(); }
|
|
return MAKE_SCRIPT_INT(v);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::init(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar parentGroup) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(parentGroup.data.odata != NULL);
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
Group *pg = static_cast<Group *>(GET_SCRIPT_OBJECT_AS(parentGroup, groupGuid));
|
|
pg->addChild(g);
|
|
if (!g->guiobject_getRootWnd()->isInited())
|
|
g->guiobject_getRootWnd()->init(pg);
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
scriptVar GuiObject_ScriptMethods::runModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int r=0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) r = g->guiobject_runModal();
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::endModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar retcode) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_endModal(GET_SCRIPT_INT(retcode));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
#endif
|
|
|
|
scriptVar GuiObject_ScriptMethods::setFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) {
|
|
ifc_window *w = g->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
w->setFocus();
|
|
}
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_WNDMGR
|
|
scriptVar GuiObject_ScriptMethods::popParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_popParentLayout();
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setStatusText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar text, scriptVar overlay) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g)
|
|
g->guiobject_setStatusText(GET_SCRIPT_STRING(text), GET_SCRIPT_INT(overlay));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
#endif
|
|
|
|
scriptVar GuiObject_ScriptMethods::findObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar id) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
ScriptObject *s = NULL;
|
|
if (g) {
|
|
GuiObject *o = g->guiobject_findObject(GET_SCRIPT_STRING(id));
|
|
if (o != NULL) s = o->guiobject_getScriptObject();
|
|
}
|
|
return MAKE_SCRIPT_OBJECT(s);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::findObjectXY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
ScriptObject *s = NULL;
|
|
if (g) {
|
|
GuiObject *o = g->guiobject_findObjectXY(GET_SCRIPT_INT(x), GET_SCRIPT_INT(y));
|
|
if (o != NULL) s = o->guiobject_getScriptObject();
|
|
}
|
|
return MAKE_SCRIPT_OBJECT(s);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
|
|
{
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g)
|
|
return MAKE_SCRIPT_STRING(g->guiobject_getName());
|
|
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int r = 0;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) r = g->guiobject_getMover();
|
|
return MAKE_SCRIPT_INT(r);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (g) g->guiobject_setMover(GET_SCRIPT_INT(i));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::setDropTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar targ) {
|
|
GuiObject *g = static_cast<GuiObject*>(o->vcpu_getInterface(guiObjectGuid));
|
|
const wchar_t *s = GET_SCRIPT_STRING(targ);
|
|
if (g)
|
|
g->guiobject_setDropTarget(s);
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
scriptVar GuiObject_ScriptMethods::cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) return MAKE_SCRIPT_INT(go->guiobject_getCfgInt());
|
|
return MAKE_SCRIPT_INT(0);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT
|
|
ASSERT(SOM::isNumeric(&v));
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) go->guiobject_setCfgInt(GET_SCRIPT_INT(v));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
|
|
if (go)
|
|
return MAKE_SCRIPT_STRING(go->guiobject_getCfgString());
|
|
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) go->guiobject_setCfgString(GET_SCRIPT_STRING(v));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) return MAKE_SCRIPT_FLOAT(go->guiobject_getCfgFloat());
|
|
return MAKE_SCRIPT_FLOAT(0);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) go->guiobject_setCfgFloat(GET_SCRIPT_FLOAT(v));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
if (go) {
|
|
CfgItem *i = go->guiobject_getCfgItem();
|
|
if (i != NULL)
|
|
{
|
|
GUID guid = i->getGuid();
|
|
nsGUID::toCharW(guid, txt);
|
|
return MAKE_SCRIPT_STRING(txt);
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::cfgGetAttributeName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
|
|
if (go)
|
|
return MAKE_SCRIPT_STRING(go->guiobject_getCfgAttrib());
|
|
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|
|
#endif
|
|
|
|
scriptVar GuiObject_ScriptMethods::isMouseOverRect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
int r = 0;
|
|
if (go) {
|
|
ifc_window *w = go->guiobject_getRootWnd();
|
|
if (w != NULL) {
|
|
RECT rc;
|
|
int x, y;
|
|
w->getWindowRect(&rc);
|
|
Wasabi::Std::getMousePos(&x, &y);
|
|
if (x >= rc.left && x <= rc.right && y >= rc.top && y <= rc.bottom) r = 1;
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_BOOLEAN(r);
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
scriptVar GuiObject_ScriptMethods::onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
#endif
|
|
|
|
scriptVar GuiObject_ScriptMethods::onChar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, c);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, c);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onKeyDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, c);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, c);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onKeyUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, c);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, c);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onGetFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onKillFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::sendAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2) {
|
|
SCRIPT_FUNCTION_INIT
|
|
GuiObject *go = static_cast<GuiObject *>(o->vcpu_getInterface(guiObjectGuid));
|
|
int a = 0;
|
|
if (go) {
|
|
ifc_window *w = go->guiobject_getRootWnd();
|
|
if (w!=NULL) {
|
|
a = w->onAction(GET_SCRIPT_STRING(action), GET_SCRIPT_STRING(param), GET_SCRIPT_INT(x), GET_SCRIPT_INT(y), GET_SCRIPT_INT(p1), GET_SCRIPT_INT(p2));
|
|
}
|
|
}
|
|
return MAKE_SCRIPT_INT(a);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onAccelerator(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar accel) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS1(o, guiController, accel);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, accel);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2, scriptVar source) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS7(o, guiController, action, param, x, y, p1, p2, source);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT7(o, action, param, x, y, p1, p2, source);
|
|
}
|
|
|
|
#ifdef WASABI_COMPILE_CONFIG
|
|
int GuiObjectI::guiobject_getCfgInt()
|
|
{
|
|
if (!cfgitem)
|
|
return 0;
|
|
return
|
|
cfgitem->getDataAsInt(cfgattrname);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setCfgInt(int i) {
|
|
if (!cfgitem) return;
|
|
cfgitem->setDataAsInt(cfgattrname, i);
|
|
}
|
|
|
|
float GuiObjectI::guiobject_getCfgFloat() {
|
|
if (!cfgitem) return 0;
|
|
return (float)cfgitem->getDataAsFloat(cfgattrname);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setCfgFloat(float f) {
|
|
if (!cfgitem) return;
|
|
cfgitem->setDataAsFloat(cfgattrname, f);
|
|
}
|
|
|
|
const wchar_t *GuiObjectI::guiobject_getCfgString()
|
|
{
|
|
static StringW blah;
|
|
if (!cfgitem) return 0;
|
|
cfgitem->getData(cfgattrname, txt, 4096);
|
|
return txt;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setCfgString(const wchar_t *s)
|
|
{
|
|
if (!cfgitem)
|
|
return;
|
|
cfgitem->setData(cfgattrname, s);
|
|
}
|
|
|
|
void GuiObjectI::setCfgAttr(const wchar_t *strvalue)
|
|
{
|
|
ParamParser pp(strvalue);
|
|
if (pp.getNumItems() < 2) return;
|
|
|
|
GUID g = nsGUID::fromCharW(pp.enumItem(0));
|
|
if (g == INVALID_GUID) return;
|
|
CfgItem *i = WASABI_API_CONFIG->config_getCfgItemByGuid(g);
|
|
if (i == NULL) return;
|
|
cfgattrname = pp.enumItem(1);
|
|
guiobject_setCfgAttrib(i, cfgattrname);
|
|
}
|
|
|
|
int GuiObjectI::guiobject_hasCfgAttrib() {
|
|
return (guiobject_getCfgItem() && guiobject_getCfgAttrib());
|
|
}
|
|
#endif
|
|
|
|
GuiObject *GuiObjectI::guiobject_findObject(const wchar_t *id)
|
|
{
|
|
ifc_window *me = guiobject_getRootWnd();
|
|
ifc_window *w = me->findWindow(id);
|
|
if (w != NULL) return w->getGuiObject();
|
|
return NULL;
|
|
}
|
|
|
|
GuiObject *GuiObjectI::guiobject_findObjectXY(int x, int y) {
|
|
ifc_window *me = guiobject_getRootWnd();
|
|
POINT pt={x,y};
|
|
me->clientToScreen((int *)&pt.x, (int *)&pt.y);
|
|
ifc_window *w = WASABI_API_WND->rootWndFromPoint(&pt);
|
|
if (w != NULL) return w->getGuiObject();
|
|
return NULL;
|
|
}
|
|
|
|
GuiObject *GuiObjectI::guiobject_findObjectByInterface(GUID interface_guid) {
|
|
ifc_window *me = guiobject_getRootWnd();
|
|
ifc_window *w = me->findWindowByInterface(interface_guid);
|
|
if (w != NULL) return w->getGuiObject();
|
|
return NULL;
|
|
}
|
|
|
|
GuiObject *GuiObjectI::guiobject_findObjectByCallback(FindObjectCallback *cb) {
|
|
ifc_window *me = guiobject_getRootWnd();
|
|
ifc_window *w = me->findWindowByCallback(cb);
|
|
if (w != NULL) return w->getGuiObject();
|
|
return NULL;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onAccelerator(const wchar_t *accel)
|
|
{
|
|
GuiObject_ScriptMethods::onAccelerator(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_STRING(accel));
|
|
}
|
|
|
|
int GuiObjectI::guiobject_onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source)
|
|
{
|
|
GuiObject *gsourceobj = (source == NULL) ? NULL : source->getGuiObject();
|
|
ScriptObject *sourceobj = (gsourceobj == NULL) ? NULL : gsourceobj->guiobject_getScriptObject();
|
|
GuiObject_ScriptMethods::onAction(SCRIPT_CALL, guiobject_getScriptObject(), MAKE_SCRIPT_STRING(action), MAKE_SCRIPT_STRING(param), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y), MAKE_SCRIPT_INT(p1), MAKE_SCRIPT_INT(p2), MAKE_SCRIPT_OBJECT(sourceobj));
|
|
return 1;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setTabOrder(int a) {
|
|
ifc_window *me = guiobject_getRootWnd();
|
|
me->setTabOrder(a);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_onInit() {
|
|
// api_window *me = guiobject_getRootWnd();
|
|
// nothing to do here anymore, for now
|
|
return;
|
|
}
|
|
|
|
int GuiObjectI::guiobject_wantFocus() {
|
|
return wantfocus;
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setNoDoubleClick(int no) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
w->setNoDoubleClicks(no);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setNoLeftClick(int no) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
w->setNoLeftClicks(no);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setNoRightClick(int no) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
w->setNoRightClicks(no);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setNoMouseMove(int no) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
w->setNoMouseMoves(no);
|
|
}
|
|
|
|
void GuiObjectI::guiobject_setNoContextMenu(int no) {
|
|
ifc_window *w = guiobject_getRootWnd();
|
|
if (w != NULL)
|
|
w->setNoContextMenus(no);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::getInterface(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar guid) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
int type=-1;
|
|
GUID _g = nsGUID::fromCharW(GET_SCRIPT_STRING(guid));
|
|
void *i = o->vcpu_getInterface(_g, &type);
|
|
if (i != NULL && type == INTERFACE_SCRIPTOBJECT) {
|
|
return MAKE_SCRIPT_OBJECT(reinterpret_cast<ScriptObject*>(i));
|
|
}
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onDragEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
|
|
{
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onDragOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y)
|
|
{
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS2(o, guiController, x, y);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT2(o, x, y);
|
|
}
|
|
|
|
scriptVar GuiObject_ScriptMethods::onDragLeave(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
|
|
{
|
|
SCRIPT_FUNCTION_INIT;
|
|
PROCESS_HOOKS0(o, guiController);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT0(o);
|
|
}
|