1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753 |
- #include <precomp.h>
- #include <tataki/bitmap/bitmap.h>
- #include <api/wnd/popup.h>
- #include <api/wndmgr/layout.h>
- #include <api/skin/skinparse.h>
- //#include <api/skin/widgets/button.h>
- //#include <api/core/buttons.h>
- #include <api/wnd/wndtrack.h>
- #include <api/wac/compon.h>
- #include <api/skin/skin.h>
- #include <api/wnd/notifmsg.h>
- #include <api/config/items/intarray.h>
- #include <api/config/items/cfgitem.h>
- #include <api/config/items/attribute.h>
- #include <api/wndmgr/layout.h>
- #include <api/script/script.h>
- #include <api/script/scriptmgr.h>
- #include <bfc/util/profiler.h>
- #include <api/wndmgr/resize.h>
- #include <bfc/wasabi_std_wnd.h>
- #include <api/wnd/PaintCanvas.h>
- #ifndef WM_MOUSEWHEEL
- #define WM_MOUSEWHEEL 0x20A
- #endif
- const wchar_t groupXuiObjectStr[] = L"Group"; // This is the xml tag
- char groupXuiSvcName[] = "Group xui object"; // this is the name of the xuiservice
- #ifdef WASABI_COMPILE_CONFIG
- const wchar_t cfgGroupXuiObjectStr[] = L"CfgGroup"; // This is the xml tag
- char cfgGroupXuiSvcName[] = "CfgGroup xui object"; // this is the name of the xuiservice
- #endif
- XMLParamPair Group::groupParams[] =
- {
- {XUIGROUP_AUTOHEIGHTSOURCE, L"AUTOHEIGHTSOURCE"},
- {XUIGROUP_AUTOWIDTHSOURCE, L"AUTOWIDTHSOURCE"},
- {XUIGROUP_BACKGROUND, L"BACKGROUND"},
- {XUIGROUP_DRAWBACKGROUND, L"DRAWBACKGROUND"},
- {XUIGROUP_DEFAULT_W, L"DEFAULT_W"},
- {XUIGROUP_DEFAULT_H, L"DEFAULT_H"},
- {XUIGROUP_DESIGN_H, L"DESIGN_H"},
- {XUIGROUP_DESIGN_W, L"DESIGN_W"},
- {XUIGROUP_EMBED_XUI, L"EMBED_XUI"},
- {XUIGROUP_INHERIT_CONTENT, L"INHERIT_CONTENT"},
- {XUIGROUP_INHERIT_GROUP, L"INHERIT_GROUP"},
- {XUIGROUP_INSTANCEID, L"INSTANCEID"},
- {XUIGROUP_LOCKMINMAX, L"LOCKMINMAX"},
- {XUIGROUP_MAXIMUM_H, L"MAXIMUM_H"},
- {XUIGROUP_MAXIMUM_W, L"MAXIMUM_W"},
- {XUIGROUP_MINIMUM_H, L"MINIMUM_H"},
- {XUIGROUP_MINIMUM_W, L"MINIMUM_W"},
- {XUIGROUP_NAME, L"NAME"},
- {XUIGROUP_PROPAGATESIZE, L"PROPAGATESIZE"},
- {XUIGROUP_XUITAG, L"XUITAG"},
- };
- Group::Group()
- {
- scripts_enabled = 1;
- getScriptObject()->vcpu_setInterface(groupGuid, (void *)static_cast<Group *>(this));
- getScriptObject()->vcpu_setClassName(L"Group");
- getScriptObject()->vcpu_setController(groupController);
- background = NULL;
- skinpart = 0;
- captured = 0; resizing = 0;
- x = 0; y = 0;
- size_w = 0; size_h = 0;
- lockminmax = 0;
- propagatesize = 0;
- reg = NULL;
- default_h = AUTOWH;
- default_w = AUTOWH;
- // allreg = NULL;
- // subregionlayers = new PtrList<api_window>;
- // subregiongroups = new PtrList<api_window>;
- deleting = 0;
- moving = 0;
- drawbackground = 0;
- groupmaxheight = AUTOWH;
- groupmaxwidth = AUTOWH;
- groupminheight = AUTOWH;
- groupminwidth = AUTOWH;
- // regionop = 0;
- // allsubreg = NULL;
- groups.addItem(this);
- scaledreg = NULL;
- scaledregionvalid = 0;
- autoregionop = 1;
- setRectRgn(0);
- disable_update_pos = 0;
- no_init_on_addchild = 0;
- lastheightsource = lastwidthsource = NULL;
- lastgetwidthbasedon = lastgetheightbasedon = AUTOWH;
- content_item = NULL;
- xuihandle = newXuiHandle();
- CreateXMLParameters(xuihandle);
- design_w = AUTOWH;
- design_h = AUTOWH;
- }
- void Group::CreateXMLParameters(int master_handle)
- {
- //GROUP_PARENT::CreateXMLParameters(master_handle);
- int numParams = sizeof(groupParams) / sizeof(groupParams[0]);
- hintNumberOfParams(xuihandle, numParams);
- for (int i = 0;i < numParams;i++)
- {
- addParam(xuihandle, groupParams[i], XUI_ATTRIBUTE_IMPLIED);
- }
- }
- Group::~Group()
- {
- deleteScripts();
- deleting = 1;
- WASABI_API_WND->skin_unregisterBaseTextureWindow(this);
- while (gui_objects.getNumItems() > 0)
- {
- SkinParser::destroyGuiObject(gui_objects.enumItem(0));
- gui_objects.removeByPos(0);
- }
- delete background;
- delete reg;
- delete scaledreg;
- xuiparams.deleteAll();
- /* subregionlayers->removeAll();
- delete subregionlayers;
- subregiongroups->removeAll();
- delete subregiongroups;*/
- groups.removeItem(this);
- WASABI_API_SYSCB->syscb_deregisterCallback(static_cast<WndCallbackI*>(this));
- }
- int Group::isGroup(Group *o)
- {
- return groups.haveItem(o);
- }
- int Group::setXmlParam(const wchar_t *paramname, const wchar_t *strvalue)
- {
- if (!WCSICMP(paramname, L"id") && !instanceid.isempty())
- return GROUP_PARENT::setXmlParam(paramname, instanceid);
- return GROUP_PARENT::setXmlParam(paramname, strvalue);
- }
- int Group::setXuiParam(int _xuihandle, int xuiid, const wchar_t *paramname, const wchar_t *strvalue)
- {
- if (xuihandle == _xuihandle)
- {
- switch (xuiid)
- {
- case XUIGROUP_INSTANCEID:
- instanceid = strvalue;
- getGuiObject()->guiobject_setId(instanceid);
- return 1;
- case XUIGROUP_BACKGROUND:
- setBaseTexture(strvalue);
- setDrawBackground(1);
- return 1;
- case XUIGROUP_DRAWBACKGROUND:
- setDrawBackground(WTOI(strvalue));
- return 1;
- case XUIGROUP_DEFAULT_W:
- {
- int w = WTOI(strvalue);
- //getGuiObject()->guiobject_setGuiPosition(NULL, NULL, &w, NULL, NULL, NULL, NULL, NULL);
- default_w = w;
- return 1;
- }
- case XUIGROUP_DEFAULT_H:
- {
- int h = WTOI(strvalue);
- //getGuiObject()->guiobject_setGuiPosition(NULL, NULL, NULL, &h, NULL, NULL, NULL, NULL);
- default_h = h;
- return 1;
- }
- case XUIGROUP_MAXIMUM_H:
- groupmaxheight = WTOI(strvalue);
- return 1;
- case XUIGROUP_MAXIMUM_W:
- groupmaxwidth = WTOI(strvalue);
- return 1;
- case XUIGROUP_MINIMUM_H:
- groupminheight = WTOI(strvalue);
- return 1;
- case XUIGROUP_MINIMUM_W:
- groupminwidth = WTOI(strvalue);
- return 1;
- case XUIGROUP_PROPAGATESIZE:
- propagatesize = WTOI(strvalue);
- return 1;
- case XUIGROUP_LOCKMINMAX:
- lockminmax = WTOI(strvalue);
- return 1;
- case XUIGROUP_NAME:
- setName(strvalue);
- return 1;
- case XUIGROUP_AUTOWIDTHSOURCE:
- setAutoWidthSource(strvalue);
- return 1;
- case XUIGROUP_AUTOHEIGHTSOURCE:
- setAutoHeightSource(strvalue);
- return 1;
- case XUIGROUP_EMBED_XUI:
- xui_embedded_id = strvalue;
- return 1;
- case XUIGROUP_XUITAG:
- return 1;
- case XUIGROUP_INHERIT_GROUP:
- return 1;
- case XUIGROUP_INHERIT_CONTENT:
- return 1;
- case XUIGROUP_DESIGN_W:
- setDesignWidth(WTOI(strvalue));
- return 1;
- case XUIGROUP_DESIGN_H:
- setDesignHeight(WTOI(strvalue));
- return 1;
- }
- }
- return GROUP_PARENT::setXuiParam(_xuihandle, xuiid, paramname, strvalue);
- }
- void Group::setDesignWidth(int w)
- {
- design_w = w;
- if (isPostOnInit())
- onResize();
- }
- void Group::setDesignHeight(int h)
- {
- design_h = h;
- if (isPostOnInit())
- onResize();
- }
- int Group::getDesignWidth()
- {
- return design_w;
- }
- int Group::getDesignHeight()
- {
- return design_h;
- }
- int Group::onPostedMove()
- {
- return GROUP_PARENT::onPostedMove();
- }
- #ifdef WASABI_COMPILE_WNDMGR
- void Group::beginMove()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->beginMove();
- }
- void Group::beginScale()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->beginScale();
- }
- void Group::beginResize()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->beginResize();
- }
- void Group::endMove()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->endMove();
- }
- void Group::endScale()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->endScale();
- }
- void Group::endResize()
- {
- if (getGuiObject()->guiobject_getParentGroup())
- getGuiObject()->guiobject_getParentGroup()->endResize();
- }
- #endif
- void Group::onMinMaxEnforcerChanged()
- {
- if (!isPostOnInit()) return ;
- int min_x = getPreferences(MINIMUM_W);
- int min_y = getPreferences(MINIMUM_H);
- int max_x = getPreferences(MAXIMUM_W);
- int max_y = getPreferences(MAXIMUM_H);
- int sug_x = getPreferences(SUGGESTED_W);
- int sug_y = getPreferences(SUGGESTED_H);
- min_x = MAX(RESIZE_MINW, min_x);
- min_y = MAX(RESIZE_MINH, min_y);
- RECT r;
- POINT pt;
- getClientRect(&r);
- int w = r.right - r.left;
- int h = r.bottom - r.top;
- getPosition(&pt);
- if ((w < min_x || h < min_y || w > max_x || h > max_y) && (w != sug_x || h != sug_y))
- {
- //DebugString("reapplying minmax constraints\n");
- resize(pt.x, pt.y, sug_x, sug_y);
- }
- }
- #ifdef WASABI_COMPILE_WNDMGR
- void Group::mouseResize(int x, int y, int resizeway)
- { // screen coords!
- int min_x = getPreferences(MINIMUM_W);
- int min_y = getPreferences(MINIMUM_H);
- int max_x = getPreferences(MAXIMUM_W);
- int max_y = getPreferences(MAXIMUM_H);
- int sug_x = getPreferences(SUGGESTED_W);
- int sug_y = getPreferences(SUGGESTED_H);
- if (max_x != AUTOWH && min_x != AUTOWH && max_x < min_x) max_x = min_x;
- if (max_y != AUTOWH && min_y != AUTOWH && max_y < min_y) max_y = min_y;
- if (min_x != AUTOWH && max_x != AUTOWH && min_x > max_x) min_x = max_x;
- if (min_y != AUTOWH && max_y != AUTOWH && min_y > max_y) min_y = max_y;
- if (sug_x != AUTOWH && min_x != AUTOWH && sug_x < min_x) sug_x = min_x;
- if (sug_y != AUTOWH && min_y != AUTOWH && sug_y < min_y) sug_y = min_y;
- if (sug_x != AUTOWH && max_x != AUTOWH && sug_x > max_x) sug_x = max_x;
- if (sug_y != AUTOWH && max_y != AUTOWH && sug_y > max_y) sug_y = max_y;
- beginResize();
- int mask = 0;
- if (resizeway & RESIZE_BOTTOM)
- {
- mask |= BOTTOM;
- }
- if (resizeway & RESIZE_RIGHT)
- {
- mask |= RIGHT;
- }
- if (resizeway & RESIZE_TOP)
- {
- mask |= TOP;
- }
- if (resizeway & RESIZE_LEFT)
- {
- mask |= LEFT;
- }
- min_x = MAX(RESIZE_MINW, min_x);
- min_y = MAX(RESIZE_MINH, min_y);
- if (renderRatioActive())
- {
- if (min_x != AUTOWH) multRatio(&min_x);
- if (min_y != AUTOWH) multRatio(NULL, &min_y);
- if (max_x != AUTOWH) multRatio(&max_x);
- if (max_y != AUTOWH) multRatio(NULL, &max_y);
- if (sug_x != AUTOWH) multRatio(&sug_x);
- if (sug_y != AUTOWH) multRatio(NULL, &sug_y);
- }
- if (min_x == AUTOWH) min_x = -1;
- if (max_x == AUTOWH) max_x = -1;
- if (min_y == AUTOWH) min_y = -1;
- if (max_y == AUTOWH) max_y = -1;
- if (sug_x == AUTOWH) sug_x = -1;
- if (sug_y == AUTOWH) sug_y = -1;
- resizeClass rsize(this, min_x, min_y, max_x, max_y, sug_x, sug_y);
- if (rsize.resizeWindow(this, mask | NOINTERSECT))
- {
- RECT r = rsize.getRect();
- if (renderRatioActive())
- {
- r.right = (int)(((double)(r.right - r.left) / getRenderRatio()) + r.left + 0.5f);
- r.bottom = (int)(((double)(r.bottom - r.top) / getRenderRatio()) + r.top + 0.5f);
- }
- int _min_x = getPreferences(MINIMUM_W);
- int _min_y = getPreferences(MINIMUM_H);
- int _max_x = getPreferences(MAXIMUM_W);
- int _max_y = getPreferences(MAXIMUM_H);
- if (_max_x != AUTOWH && _min_x != AUTOWH && _max_x < _min_x) _max_x = _min_x;
- if (_max_y != AUTOWH && _min_y != AUTOWH && _max_y < _min_y) _max_y = _min_y;
- if (_min_x != AUTOWH && _max_x != AUTOWH && _min_x > _max_x) _min_x = _max_x;
- if (_min_y != AUTOWH && _max_y != AUTOWH && _min_y > _max_y) _min_y = _max_y;
- if (r.right - r.left < _min_x) r.right = r.left + _min_x;
- if (r.bottom - r.top < _min_y) r.bottom = r.top + _min_y;
- if (r.right - r.left > _max_x) r.right = r.left + _max_x;
- if (r.bottom - r.top > _max_y) r.bottom = r.top + _max_y;
- resizeToRect(&r);
- invalidate();
- endResize();
- }
- }
- #endif
- void Group::setAutoWidthSource(const wchar_t *obj)
- {
- autowidthsource = obj;
- }
- void Group::setAutoHeightSource(const wchar_t *obj)
- {
- autoheightsource = obj;
- }
- int Group::getAutoWidth()
- {
- return default_w == AUTOWH ? GROUP_PARENT::getPreferences(SUGGESTED_W) : default_w;
- }
- int Group::getAutoHeight()
- {
- return default_h == AUTOWH ? GROUP_PARENT::getPreferences(SUGGESTED_H) : default_h;
- }
- int Group::getWidthBasedOn(GuiObject *o)
- {
- if (o == NULL)
- {
- if (lastwidthsource == NULL)
- {
- if (!autowidthsource.isempty())
- {
- lastwidthsource = getObject(autowidthsource);
- }
- }
- o = lastwidthsource;
- }
- if (o == NULL) return AUTOWH;
- if (lastgetwidthbasedon != AUTOWH) return lastgetwidthbasedon;
- int x, rx, w, rw;
- o->guiobject_getGuiPosition(&x, NULL, &w, NULL, &rx, NULL, &rw, NULL);
- int p = o->guiobject_getAutoWidth();
- if (w == AUTOWH) { w = p; rw = 0; }
- if (rx == 0 && rw == 1)
- lastgetwidthbasedon = p - w;
- else if (rx == 0 && rw == 0)
- lastgetwidthbasedon = p + x;
- else
- lastgetwidthbasedon = AUTOWH;
- return lastgetwidthbasedon;
- }
- int Group::getHeightBasedOn(GuiObject *o)
- {
- if (o == NULL)
- {
- if (lastheightsource == NULL)
- {
- if (!autoheightsource.isempty())
- {
- lastheightsource = getObject(autoheightsource);
- }
- }
- o = lastheightsource;
- }
- if (o == NULL) return AUTOWH;
- if (lastgetheightbasedon != AUTOWH) return lastgetheightbasedon;
- int y, ry, h, rh;
- o->guiobject_getGuiPosition(NULL, &y, NULL, &h, NULL, &ry, NULL, &rh);
- int p = o->guiobject_getAutoHeight();
- if (h == AUTOWH) { h = p; rh = 0; }
- if (ry == 0 && rh == 1)
- lastgetheightbasedon = p - h;
- else if (ry == 0 && rh == 0)
- lastgetheightbasedon = h + y;
- else
- lastgetheightbasedon = AUTOWH;
- return lastgetheightbasedon;
- }
- int Group::getPreferences(int what)
- {
- int _what = what;
- if (lockminmax)
- {
- if (_what == MAXIMUM_W || _what == MINIMUM_W)
- _what = SUGGESTED_W;
- if (_what == MAXIMUM_H || _what == MINIMUM_H)
- _what = SUGGESTED_H;
- }
- switch (_what)
- {
- case SUGGESTED_W:
- {
- int w, rw;
- getGuiObject()->guiobject_getGuiPosition(NULL, NULL, &w, NULL, NULL, NULL, &rw, NULL);
- if (w == AUTOWH)
- w = getWidthBasedOn();
- if (w == AUTOWH || rw == 1)
- w = getAutoWidth();
- if (w == AUTOWH && getBaseTexture())
- w = getBaseTexture()->getWidth();
- if (groupmaxwidth != AUTOWH)
- {
- if (groupminwidth != AUTOWH)
- {
- return MIN(groupmaxwidth, MAX(groupminwidth, w));
- }
- else
- {
- return MIN(groupmaxwidth, w);
- }
- }
- else if (groupminwidth != AUTOWH)
- {
- return MAX(groupminwidth, w);
- }
- return w;
- }
- case SUGGESTED_H:
- {
- int h, rh;
- getGuiObject()->guiobject_getGuiPosition(NULL, NULL, NULL, &h, NULL, NULL, NULL, &rh);
- if (h == AUTOWH)
- h = getHeightBasedOn();
- if (h == AUTOWH || rh == 1)
- h = getAutoHeight();
- if (h == AUTOWH && getBaseTexture())
- h = getBaseTexture()->getHeight();
- if (groupmaxheight != AUTOWH)
- {
- if (groupminheight != AUTOWH)
- {
- return MIN(groupmaxheight, MAX(groupminheight, h));
- }
- else
- {
- return MIN(groupmaxheight, h);
- }
- }
- else if (groupminheight != AUTOWH)
- {
- return MAX(groupminheight, h);
- }
- return h;
- }
- case MAXIMUM_H:
- {
- int h = GROUP_PARENT::getPreferences(what);
- if (h != AUTOWH)
- return MIN(h, groupmaxheight);
- return groupmaxheight;
- }
- case MAXIMUM_W:
- {
- int w = GROUP_PARENT::getPreferences(what);
- if (w != AUTOWH)
- return MIN(w, groupmaxwidth);
- return groupmaxwidth;
- }
- case MINIMUM_H:
- {
- int h = GROUP_PARENT::getPreferences(what);
- if (h != AUTOWH)
- return MAX(h, groupminheight);
- return groupminheight;
- }
- case MINIMUM_W:
- {
- int w = GROUP_PARENT::getPreferences(what);
- if (w != AUTOWH)
- return MAX(w, groupminwidth);
- return groupminwidth;
- }
- }
- return GROUP_PARENT::getPreferences(what);
- }
- void Group::updatePos(GuiObject *o, RECT *r2)
- {
- if (disable_update_pos) return ;
- RECT r;
- if (r2 == NULL)
- {
- getClientRect(&r);
- r2 = &r;
- }
- double d = getRenderRatio();
- int w, h;
- int ox, oy, ow, oh, orx, ory, orw, orh;
- int ox1, ox2, oy1, oy2, oanchor;
- if (o->guiobject_getAnchoragePosition(&ox1, &oy1, &ox2, &oy2, &oanchor))
- {
- // anchorage values have not been translated into native values yet, do it now
- int x, y, w, h, rx, ry, rw, rh;
- x = y = w = h = rx = ry = rw = rh = AUTOWH;
- int lw = ox2 - ox1;
- int lh = oy2 - oy1;
- int iw = getDesignWidth();
- int ih = getDesignHeight();
- if (iw == AUTOWH || ih == AUTOWH)
- {
- Wasabi::Std::messageBox(L"anchor coordinate system used without design size for the parent group.\nYour parent group needs the design_w/design_h parameters if you are using x1/y1/x2/y2/anchor parameters on one of its children\nDefaulting to 320x200", L"XML Error", 0);
- iw = 320;
- ih = 200;
- }
- int right_m = iw - ox2;
- int bottom_m = ih - oy2;
- if ((oanchor & ANCHOR_LEFT) == 0 && (oanchor & ANCHOR_RIGHT) == 0) oanchor |= ANCHOR_LEFT;
- if ((oanchor & ANCHOR_TOP) == 0 && (oanchor & ANCHOR_BOTTOM) == 0) oanchor |= ANCHOR_TOP;
- if (oanchor & ANCHOR_LEFT)
- {
- x = ox1;
- rx = 0;
- if (oanchor & ANCHOR_RIGHT)
- {
- w = -((iw - ox2) + ox1);
- rw = 1;
- }
- else
- {
- w = lw;
- rw = 0;
- }
- }
- else
- {
- if (oanchor & ANCHOR_RIGHT)
- {
- x = -(right_m + lw);
- rx = 1;
- w = lw;
- rw = 0;
- }
- }
- if (oanchor & ANCHOR_TOP)
- {
- y = oy1;
- ry = 0;
- if (oanchor & ANCHOR_BOTTOM)
- {
- h = -((ih - oy2) + oy1);
- rh = 1;
- }
- else
- {
- h = lh;
- rh = 0;
- }
- }
- else
- {
- if (oanchor & ANCHOR_BOTTOM)
- {
- y = -(bottom_m + lh);
- ry = 1;
- h = lh;
- rh = 0;
- }
- }
- disable_update_pos = 1;
- o->guiobject_setGuiPosition(&x, &y, &w, &h, &rx, &ry, &rw, &rh);
- o->guiobject_validateAnchorage();
- disable_update_pos = 0;
- }
- o->guiobject_getGuiPosition(&ox, &oy, &ow, &oh, &orx, &ory, &orw, &orh);
- if (ow == AUTOWH) { ow = o->guiobject_getAutoWidth(); orw = 0; }
- if (oh == AUTOWH) { oh = o->guiobject_getAutoHeight(); orh = 0; }
- TextInfoCanvas fontInfoCanvas(this);
- double fontScale = fontInfoCanvas.getSystemFontScale();
- if (o->guiobject_getAutoSysMetricsX())
- ox = (int)((float)ox * fontScale);
- if (o->guiobject_getAutoSysMetricsY())
- oy = (int)((float)oy * fontScale);
- if (o->guiobject_getAutoSysMetricsW())
- ow = (int)((float)ow * fontScale);
- if (o->guiobject_getAutoSysMetricsH())
- oh = (int)((float)oh * fontScale);
- if (!o->guiobject_getRootWnd()->handleRatio())
- {
- if (orw == 1)
- w = (int)((float)(r2->right - r2->left + ow) * d);
- else if (orw == 2)
- w = (int)(((float)(r2->right - r2->left) * ((float)ow / 100.0f)) * d);
- else
- w = (int)((float)(ow) * d);
- if (orh == 1)
- h = (int)((float)(r2->bottom - r2->top + oh) * d);
- else if (orh == 2)
- h = (int)(((float)(r2->bottom - r2->top) * ((float)oh / 100.0f)) * d);
- else
- h = (int)((float)(oh) * d);
- if (orx == 1)
- x = (int)((float)(r2->right - r2->left + ox) * d);
- else if (orx == 2)
- x = (int)(((float)(r2->right - r2->left) * ((float)ox / 100.0f)) * d);
- else
- x = (int)((float)(ox) * d);
- if (ory == 1)
- y = (int)((float)(r2->bottom - r2->top + oy) * d);
- else if (ory == 2)
- y = (int)(((float)(r2->bottom - r2->top) * ((float)oy / 100.0f)) * d);
- else
- y = (int)((float)(oy) * d);
- x += (int)((float)(r2->left) * d);
- y += (int)((float)(r2->top) * d);
- }
- else
- {
- if (orw == 1)
- w = r2->right - r2->left + ow;
- else if (orw == 2)
- w = (int)((float)(r2->right - r2->left) * ((float)ow / 100.0f));
- else
- w = ow;
- if (orh == 1)
- h = r2->bottom - r2->top + oh;
- else if (orh == 2)
- h = (int)((float)(r2->bottom - r2->top) * ((float)oh / 100.0f));
- else
- h = oh;
- if (orx == 1)
- x = r2->right - r2->left + ox;
- else if (orx == 2)
- x = (int)((float)(r2->right - r2->left) * ((float)ox / 100.0f));
- else
- x = ox;
- if (ory == 1)
- y = r2->bottom - r2->top + oy;
- else if (ory == 2)
- y = (int)((float)(r2->bottom - r2->top) * ((float)oy / 100.0f));
- else
- y = oy;
- x += r2->left;
- y += r2->top;
- }
- o->guiobject_getRootWnd()->resize(x, y, w, h);
- }
- int Group::onResize()
- {
- GROUP_PARENT::onResize();
- if (!isInited()) return 1;
- RECT wr;
- getWindowRect(&wr);
- RECT r2;
- getClientRect(&r2);
- size_w = r2.right - r2.left; size_h = r2.bottom - r2.top;
- for (int i = 0;i < gui_objects.getNumItems();i++)
- {
- GuiObject *o = gui_objects.enumItem(i);
- updatePos(o, &r2);
- }
- invalidateScaledReg();
- return 1;
- }
- void Group::invalidateScaledReg()
- {
- scaledregionvalid = 0;
- invalidateWindowRegion();
- }
- int Group::onInit()
- {
- GROUP_PARENT::onInit();
- WASABI_API_SYSCB->syscb_registerCallback(static_cast<WndCallbackI*>(this));
- disable_update_pos = 1;
- no_init_on_addchild = 1;
- const wchar_t *id = getGroupContentId();
- SkinItem *item = getGroupContentSkinItem();
- if ((id && *id) || item != NULL)
- {
- SkinParser::fillGroup(this, id, item, 0, 1, scripts_enabled);
- }
- disable_update_pos = 0;
- no_init_on_addchild = 0;
- onFillGroup();
- return 1;
- }
- void Group::onFillGroup()
- {
- reloadDefaults();
- if (xui_embedded_id.len() > 0)
- embeddedxui_onNewEmbeddedContent();
- }
- int Group::onGroupChange(const wchar_t *id)
- {
- GROUP_PARENT::onGroupChange(id);
- if (!isInited()) return 1;
- const wchar_t *cid = getGroupContentId();
- SkinItem *item = getGroupContentSkinItem();
- if (!(cid && *cid) || item != NULL) return 1;
- if (!WCSICMP(id, cid)) return 1;
- deleteScripts();
- WASABI_API_WND->skin_unregisterBaseTextureWindow(this);
- while (gui_objects.getNumItems() > 0)
- {
- SkinParser::destroyGuiObject(gui_objects.enumItem(0));
- }
- delete background; background = NULL;
- delete reg; reg = NULL;
- delete scaledreg; scaledreg = NULL;
- disable_update_pos = 1;
- no_init_on_addchild = 1;
- SkinParser::fillGroup(this, cid, item, 0, 1, scripts_enabled);
- disable_update_pos = 0;
- no_init_on_addchild = 0;
- onFillGroup();
- if (isInited())
- onResize();
- getGuiObject()->guiobject_onStartup();
- return 1;
- }
- void Group::reloadDefaults()
- {
- getGuiObject()->guiobject_getGuiPosition(NULL, NULL, &size_w, &size_h, NULL, NULL, NULL, NULL);
- if (size_w == AUTOWH && size_h == AUTOWH)
- {
- /* if (!background) {
- size_w = 250;
- size_h = 100;
- } else {
- size_w = background->getWidth();
- size_h = background->getHeight();
- }*/
- if (background)
- {
- setPreferences(SUGGESTED_W, background->getWidth());
- setPreferences(SUGGESTED_H, background->getHeight());
- }
- size_w = GROUP_PARENT::getPreferences(SUGGESTED_W);
- size_h = GROUP_PARENT::getPreferences(SUGGESTED_H);
- }
- //setName(getGuiObject()->guiobject_getId());
- if (propagatesize)
- {
- Layout *l = getGuiObject()->guiobject_getParentLayout();
- if (l) l->addMinMaxEnforcer(this);
- }
- int i;
- for (i = 0;i < gui_objects.getNumItems();i++)
- {
- GuiObject *o = gui_objects.enumItem(i);
- if (o->guiobject_getParentGroup())
- {
- o->guiobject_getRootWnd()->setParent(o->guiobject_getParentGroup());
- if (!o->guiobject_getRootWnd()->isInited())
- {
- o->guiobject_getRootWnd()->init(o->guiobject_getParentGroup());
- o->guiobject_getParentGroup()->onCreateObject(getGuiObject());
- }
- }
- }
- /* if (getGuiObject()->guiobject_getParentGroup() && regionop)
- getGuiObject()->guiobject_getParentGroup()->addSubRegionGroup(this);*/
- invalidateWindowRegion();
- startScripts();
- for (i = 0;i < gui_objects.getNumItems();i++)
- {
- GuiObject *o = gui_objects.enumItem(i);
- o->guiobject_onStartup();
- }
- autoResize();
- const wchar_t *name = getName();
- if (name != NULL)
- onSetName();
- }
- void Group::startScripts()
- {
- for (int i = 0;i < getNumScripts();i++)
- {
- int vcpuid = enumScript(i);
- SystemObject *o = SOM::getSystemObjectByScriptId(vcpuid);
- if (o != NULL)
- {
- o->onLoad();
- foreach(xuiparams)
- XuiParam *p = xuiparams.getfor();
- o->onSetXuiParam(p->param, p->value);
- endfor;
- }
- }
- }
- int Group::onPaint(Canvas *canvas)
- {
- PaintCanvas paintcanvas;
- if (canvas == NULL)
- {
- if (!paintcanvas.beginPaint(this)) return 0;
- canvas = &paintcanvas;
- }
- GROUP_PARENT::onPaint(canvas);
- RECT r;
- if (!canvas->getClipBox(&r))
- getClientRect(&r);
- if (getDrawBackground()) RenderBaseTexture(canvas, r);
- return 1;
- }
- ifc_window *Group::getBaseTextureWindow()
- {
- if (reg && !reg->isEmpty()) return this;
- if (getParent()) return getParent()->getBaseTextureWindow();
- return this;
- }
- void Group::autoResize()
- {
- int w = getWidthBasedOn();
- int h = getHeightBasedOn();
- if (h == AUTOWH && w == AUTOWH) return ;
- resize(NOCHANGE, NOCHANGE, w == AUTOWH ? NOCHANGE : w, h == AUTOWH ? NOCHANGE : h);
- }
- int Group::childNotify(ifc_window *child, int msg, intptr_t p1, intptr_t p2)
- {
- if (msg == ChildNotify::AUTOWHCHANGED)
- {
- if (lastwidthsource && child == lastwidthsource->guiobject_getRootWnd() ||
- lastheightsource && child == lastheightsource->guiobject_getRootWnd())
- {
- lastgetwidthbasedon = AUTOWH;
- lastgetheightbasedon = AUTOWH;
- autoResize();
- }
- }
- if (!getParent())
- return 0;
- return getParent()->childNotify(child, msg, p1, p2);
- }
- void Group::sendNotifyToAllChildren(int notifymsg, intptr_t param1, intptr_t param2)
- {
- for (int i = 0;i < gui_objects.getNumItems();i++)
- gui_objects.enumItem(i)->guiobject_getRootWnd()->childNotify(this, notifymsg, param1, param2);
- }
- void Group::addScript(int scriptid)
- {
- scripts.addItem(scriptid);
- }
- int Group::getNumScripts()
- {
- return scripts.getNumItems();
- }
- int Group::enumScript(int n)
- {
- return scripts.enumItem(n);
- }
- void Group::deleteScripts()
- {
- for (int i = 0;i < scripts.getNumItems();i++)
- Script::unloadScript(scripts.enumItem(i));
- scripts.removeAll();
- }
- SkinBitmap *Group::getBaseTexture()
- {
- if (!background) return NULL;
- return background->getBitmap();
- }
- void Group::setBaseTexture(const wchar_t *b, int regis)
- {
- backgroundstr = b;
- if (regis) WASABI_API_WND->skin_unregisterBaseTextureWindow(this);
- delete background;
- background = NULL;
- if (b != NULL && *b)
- {
- background = new AutoSkinBitmap();
- background->setBitmap(b);
- #ifdef _WIN32
- RegionI r(background->getBitmap());
- setRegion(&r);
- #else
- #warning port me!
- #endif
- if (regis) WASABI_API_WND->skin_registerBaseTextureWindow(this, b);
- }
- else
- {
- delete reg;
- reg = NULL;
- delete scaledreg;
- scaledreg = NULL;
- invalidateWindowRegion();
- }
- }
- const wchar_t *Group::getBackgroundStr()
- {
- return backgroundstr;
- }
- int Group::onUnknownXuiParam(const wchar_t *xmlattributename, const wchar_t *value)
- {
- int r = GROUP_PARENT::onUnknownXuiParam(xmlattributename, value);
- if (r == 0)
- {
- if (!isInited())
- {
- xuiparams.addItem(new XuiParam(xmlattributename, value));
- }
- else
- {
- for (int i = 0;i < getNumScripts();i++)
- {
- int vcpuid = enumScript(i);
- SystemObject *o = SOM::getSystemObjectByScriptId(vcpuid);
- if (o != NULL) o->onSetXuiParam(xmlattributename, value);
- }
- }
- }
- return r;
- }
- api_region *Group::getRegion()
- {
- ensureScaledRegValid();
- return scaledreg;
- }
- void Group::ensureScaledRegValid()
- {
- if (!scaledregionvalid)
- {
- scaledregionvalid = 1;
- if (!reg) return ;
- if (!scaledreg) scaledreg = new RegionI;
- scaledreg->empty();
- scaledreg->addRegion(reg);
- RECT rr;
- getNonClientRect(&rr);
- if (background)
- {
- float w = (float)(rr.right - rr.left) / (float)background->getWidth();
- float h = (float)(rr.bottom - rr.top) / (float)background->getHeight();
- if (w && h && (ABS(w - 1.0f) > 0.01f || ABS(h - 1.0f) > 0.01f))
- scaledreg->scale(w, h, 1);
- else if (w == 0 || h == 0)
- {
- RECT r = {0, 0, 0, 0};
- scaledreg->setRect(&r);
- }
- }
- }
- }
- void Group::setRegion(api_region *r)
- {
- ASSERT(r != NULL);
- if (!reg) reg = new RegionI;
- reg->empty();
- reg->addRegion(r); // background
- invalidateWindowRegion();
- invalidateScaledReg();
- }
- Container *Group::getParentContainer()
- {
- if (!getGuiObject()->guiobject_getParentGroup())
- {
- ifc_window *r = getDesktopParent();
- if (r != NULL)
- {
- //ASSERT(r != NULL);
- Layout *l = static_cast<Layout *>(r->getInterface(layoutGuid));
- if (!l) return NULL;
- return l->getParentContainer();
- }
- }
- Group *g = getGuiObject()->guiobject_getParentGroup();
- if (g) return g->getParentContainer();
- return NULL;
- }
- ifc_window *Group::enumObjects(int i)
- {
- if (i >= gui_objects.getNumItems()) return NULL;
- return gui_objects.enumItem(i)->guiobject_getRootWnd();
- }
- int Group::getNumObjects()
- {
- return gui_objects.getNumItems();
- }
- void Group::addChild(GuiObject *g)
- {
- gui_objects.addItem(g);
- script_objects.addItem((ScriptObject *)g);
- g->guiobject_setParentGroup(this);
- g->guiobject_getRootWnd()->setParent(this);
- if (!no_init_on_addchild && isInited()
- && !g->guiobject_getRootWnd()->isInited())
- g->guiobject_getRootWnd()->init(this);
- }
- void Group::removeChild(GuiObject *g)
- {
- if (!deleting)
- gui_objects.removeItem(g);
- script_objects.removeItem((ScriptObject *)g);
- }
- void Group::onCreateObject(GuiObject *o)
- {
- script_vcpu_onCreateObject(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(o->guiobject_getScriptObject()));
- }
- int Group::getDrawBackground()
- {
- return drawbackground;
- }
- void Group::setDrawBackground(int t)
- {
- drawbackground = t;
- }
- int Group::isLayout()
- {
- return 0;
- }
- int Group::isDesktopAlphaSafe()
- {
- if (!Wasabi::Std::Wnd::isDesktopAlphaAvailable()) return 0;
- for (int i = 0;i < getNumObjects();i++)
- {
- ifc_window *w = enumObjects(i);
- Group *cg = static_cast<Group *>(w);
- if (Group::isGroup(cg))
- if (!cg->isDesktopAlphaSafe()) return 0;
- if (!w->handleDesktopAlpha()) return 0;
- }
- return 1;
- }
- int Group::isTransparencySafe(int excludeme)
- {
- if (!Wasabi::Std::Wnd::isTransparencyAvailable()) return 0;
- if (!excludeme && isTransparencyForcedOff()) return 0;
- for (int i = 0;i < getNumObjects();i++)
- {
- ifc_window *w = enumObjects(i);
- Group *cg = static_cast<Group *>(w);
- if (Group::isGroup(cg))
- if (!cg->isTransparencySafe()) return 0;
- if (!w->handleTransparency()) return 0;
- }
- return 1;
- }
- GuiObject *Group::getObject(const wchar_t *id)
- {
- for (int i = 0;i < script_objects.getNumItems();i++)
- {
- if (!WCSICMP(id, gui_objects.enumItem(i)->guiobject_getId()))
- {
- return gui_objects.enumItem(i);
- }
- }
- return NULL;
- }
- void Group::setGroupContent(const wchar_t *id, SkinItem *item, int allowscripts)
- {
- content_id = id;
- content_item = item;
- scripts_enabled = allowscripts;
- }
- const wchar_t *Group::getGroupContentId()
- {
- return content_id;
- }
- SkinItem *Group::getGroupContentSkinItem()
- {
- return content_item;
- }
- ScriptObject *Group::script_cast(GUID g)
- {
- GuiObject *o = embeddedxui_getEmbeddedObject();
- if (o != NULL)
- {
- void *r = o->guiobject_getScriptObject()->vcpu_getInterface(g);
- if (r != NULL)
- {
- return o->guiobject_getScriptObject();
- }
- }
- return NULL;
- }
- // -----------------------------------------------------------------------
- GroupScriptController _groupController;
- GroupScriptController *groupController = &_groupController;
- // -- Functions table -------------------------------------
- function_descriptor_struct GroupScriptController::exportedFunction[] = {
- {L"getObject", 1, (void*)Group::script_vcpu_getObject },
- {L"enumObject", 1, (void*)Group::script_vcpu_enumObject },
- {L"getNumObjects", 0, (void*)Group::script_vcpu_getNumObjects },
- {L"onCreateObject", 1, (void*)Group::script_vcpu_onCreateObject },
- {L"getMousePosX", 0, (void*)Group::script_vcpu_getMousePosX },
- {L"getMousePosY", 0, (void*)Group::script_vcpu_getMousePosY },
- {L"isLayout", 0, (void*)Group::script_vcpu_isLayout },
- {L"autoResize", 0, (void*)Group::script_vcpu_autoResize},
- };
- // --------------------------------------------------------
- ScriptObject *GroupScriptController::cast(ScriptObject *o, GUID g)
- {
- Group *grp = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- if (grp != NULL)
- return grp->script_cast(g);
- return NULL;
- }
- const wchar_t *GroupScriptController::getClassName()
- {
- return L"Group";
- }
- const wchar_t *GroupScriptController::getAncestorClassName()
- {
- return L"GuiObject";
- }
- int GroupScriptController::getInstantiable()
- {
- return 1;
- }
- ScriptObject *GroupScriptController::instantiate()
- {
- return NULL;
- }
- void GroupScriptController::destroy(ScriptObject *o)
- {}
- void *GroupScriptController::encapsulate(ScriptObject *o)
- {
- return NULL;
- }
- void GroupScriptController::deencapsulate(void *o)
- {}
- int GroupScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *GroupScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID GroupScriptController::getClassGuid()
- {
- return groupGuid;
- }
- const wchar_t *Group::vcpu_getClassName()
- {
- return L"Group";
- }
- void Group::addObject(GuiObject *o)
- {
- addChild(o);
- }
- void Group::removeObject(GuiObject *o)
- {
- removeChild(o);
- }
- void Group::setRegionOp(int o)
- {
- GROUP_PARENT::setRegionOp(o);
- autoregionop = 0;
- }
- void Group::invalidateWindowRegion()
- {
- GROUP_PARENT::invalidateWindowRegion();
- if (!isInited() || isLayout()) return ;
- if (autoregionop)
- {
- int yes = 0;
- for (int i = 0;i < gui_objects.getNumItems();i++)
- {
- if (gui_objects.enumItem(i)->guiobject_getRegionOp() != REGIONOP_NONE)
- {
- yes = 1;
- break;
- }
- }
- if (yes)
- GROUP_PARENT::setRegionOp(REGIONOP_OR);
- else
- GROUP_PARENT::setRegionOp(REGIONOP_NONE);
- }
- }
- // VCPU
- scriptVar Group::script_vcpu_onCreateObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar ob)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, groupController, ob);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, ob);
- }
- // Get an object from its ID
- scriptVar Group::script_vcpu_getObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(obj.type == SCRIPT_STRING); // compiler discarded
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- GuiObject *ob = NULL;
- if (g)
- ob = g->getObject(GET_SCRIPT_STRING(obj));
- return MAKE_SCRIPT_OBJECT(ob ? ob->guiobject_getScriptObject() : NULL);
- }
- scriptVar Group::script_vcpu_getMousePosX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- if (g)
- {
- POINT pt;
- Wasabi::Std::getMousePos(&pt);
- g->screenToClient(&pt);
- return MAKE_SCRIPT_INT(pt.x);
- }
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Group::script_vcpu_getMousePosY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- if (g)
- {
- POINT pt;
- Wasabi::Std::getMousePos(&pt);
- g->screenToClient(&pt);
- return MAKE_SCRIPT_INT(pt.y);
- }
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Group::script_vcpu_getNumObjects(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- if (g) return MAKE_SCRIPT_INT(g->getNumObjects());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Group::script_vcpu_enumObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- GuiObject *obj = NULL;
- if (g)
- obj = g->gui_objects.enumItem(GET_SCRIPT_INT(i));
- return MAKE_SCRIPT_OBJECT(obj ? obj->guiobject_getScriptObject() : NULL);
- }
- scriptVar Group::script_vcpu_isLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- return MAKE_SCRIPT_BOOLEAN(g ? g->isLayout() : NULL);
- }
- scriptVar Group::script_vcpu_autoResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Group *g = static_cast<Group *>(o->vcpu_getInterface(groupGuid));
- if (g != NULL) g->autoResize();
- RETURN_SCRIPT_VOID
- }
- #ifdef WASABI_COMPILE_CONFIG
- int Group::isCfgGroup(Group *ptr)
- {
- CfgGroup *g = static_cast<CfgGroup *>(ptr);
- return cfggrouplist.haveItem(g);
- }
- #endif
- PtrList<CfgGroup> Group::cfggrouplist;
- PtrList<Group> Group::groups;
- // ---------------------------------------------------------------
- // Config Groups
- #ifdef WASABI_COMPILE_CONFIG
- CfgGroup::CfgGroup()
- {
- getScriptObject()->vcpu_setInterface(cfgGroupGuid, (void *)static_cast<CfgGroup *>(this));
- getScriptObject()->vcpu_setClassName(L"CfgGroup");
- getScriptObject()->vcpu_setController(cfgGroupController);
- cfgitem = NULL;
- cfggrouplist.addItem(this);
- }
- CfgGroup::~CfgGroup()
- {
- if (cfgitem) viewer_delViewItem(cfgitem);
- cfggrouplist.removeItem(this);
- }
- const wchar_t *CfgGroup::vcpu_getClassName()
- {
- return L"CfgGroup";
- }
- void CfgGroup::setAttr(CfgItem *item, const wchar_t *name)
- {
- if (cfgitem) viewer_delViewItem(cfgitem);
- cfgitem = item;
- attrname = name;
- if (cfgitem != NULL)
- {
- wchar_t t[256] = L"";
- nsGUID::toCharW(cfgitem->getGuid(), t);
- cfgguid = t;
- }
- if (cfgitem) viewer_addViewItem(cfgitem);
- dataChanged();
- }
- int CfgGroup::viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen)
- {
- dataChanged();
- return 1;
- }
- int CfgGroup::onInit()
- {
- int r = Group::onInit();
- dataChanged();
- return r;
- }
- void CfgGroup::dataChanged()
- {
- script_vcpu_onCfgChanged(SCRIPT_CALL, getScriptObject());
- }
- CfgItem *CfgGroup::getCfgItem()
- {
- return cfgitem;
- }
- const wchar_t *CfgGroup::getAttributeName()
- {
- return attrname;
- }
- scriptVar CfgGroup::script_vcpu_cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *attrname = cg->getAttributeName();
- if (o != NULL && attrname != NULL)
- return MAKE_SCRIPT_INT(i->getDataAsInt(attrname, 0));
- }
- return MAKE_SCRIPT_INT(0);
- }
- scriptVar CfgGroup::script_vcpu_cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(SOM::isNumeric(&v));
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *attrname = cg->getAttributeName();
- if (o != NULL && attrname != NULL)
- {
- i->setDataAsInt(attrname, GET_SCRIPT_INT(v));
- }
- }
- RETURN_SCRIPT_VOID;
- }
- scriptVar CfgGroup::script_vcpu_cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *a = cg->getAttributeName();
- *txt = 0;
- if (!i || !a)
- return MAKE_SCRIPT_STRING(txt);
- if (o != NULL && a != NULL)
- {
- i->getData(a, txt, 512);
- }
- return MAKE_SCRIPT_STRING(txt);
- }
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar CfgGroup::script_vcpu_cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(!SOM::isNumeric(&v));
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *a = cg->getAttributeName();
- if (!i || !a) RETURN_SCRIPT_VOID;
- if (o != NULL && a != NULL)
- {
- i->setData(a, GET_SCRIPT_STRING(v));
- }
- }
- RETURN_SCRIPT_VOID;
- }
- scriptVar CfgGroup::script_vcpu_cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *attrname = cg->getAttributeName();
- if (o != NULL && attrname != NULL)
- return MAKE_SCRIPT_FLOAT((float)i->getDataAsFloat(attrname, 0));
- }
- return MAKE_SCRIPT_FLOAT(0);
- }
- scriptVar CfgGroup::script_vcpu_cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(SOM::isNumeric(&v));
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- CfgItem *i = cg->getCfgItem();
- const wchar_t *attrname = cg->getAttributeName();
- if (o != NULL && attrname != NULL)
- {
- i->setDataAsFloat(attrname, GET_SCRIPT_FLOAT(v));
- }
- }
- RETURN_SCRIPT_VOID;
- }
- scriptVar CfgGroup::script_vcpu_cfgGetName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- {
- return MAKE_SCRIPT_STRING(cg->getAttributeName());
- }
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar CfgGroup::script_vcpu_cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- CfgGroup *cg = static_cast<CfgGroup *>(o->vcpu_getInterface(cfgGroupGuid));
- if (cg)
- return MAKE_SCRIPT_STRING(cg->getCfgGuid());
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar CfgGroup::script_vcpu_onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS0(o, cfgGroupController);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT0(o);
- }
- CfgGroupScriptController _cfgGroupController;
- CfgGroupScriptController *cfgGroupController = &_cfgGroupController;
- // -- Functions table -------------------------------------
- function_descriptor_struct CfgGroupScriptController::exportedFunction[] = {
- {L"cfgGetInt", 0, (void*)CfgGroup::script_vcpu_cfgGetInt },
- {L"cfgSetInt", 1, (void*)CfgGroup::script_vcpu_cfgSetInt },
- {L"cfgGetFloat", 0, (void*)CfgGroup::script_vcpu_cfgGetFloat },
- {L"cfgSetFloat", 1, (void*)CfgGroup::script_vcpu_cfgSetFloat },
- {L"cfgGetString", 0, (void*)CfgGroup::script_vcpu_cfgGetString },
- {L"cfgSetString", 1, (void*)CfgGroup::script_vcpu_cfgSetString },
- {L"onCfgChanged", 0, (void*)CfgGroup::script_vcpu_onCfgChanged },
- {L"cfgGetName", 0, (void*)CfgGroup::script_vcpu_cfgGetName },
- {L"cfgGetGuid", 0, (void*)CfgGroup::script_vcpu_cfgGetGuid},
- };
- /*SET_HIERARCHY(Group, SCRIPT_LAYOUT);
- SET_HIERARCHY2(Group, SCRIPT_LAYOUT, LAYOUT_SCRIPTPARENT);*/
- const wchar_t *CfgGroupScriptController::getClassName()
- {
- return L"CfgGroup";
- }
- const wchar_t *CfgGroupScriptController::getAncestorClassName()
- {
- return L"Group";
- }
- int CfgGroupScriptController::getInstantiable()
- {
- return 1;
- }
- ScriptObject *CfgGroupScriptController::instantiate()
- {
- return NULL;
- }
- int CfgGroupScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *CfgGroupScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID CfgGroupScriptController::getClassGuid()
- {
- return cfgGroupGuid;
- }
- wchar_t CfgGroup::txt[512] = L"";
- #endif // config
|