123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919 |
- #include <precomp.h>
- #include "wasabicfg.h"
- #include <api/wndmgr/container.h>
- #include <api/script/script.h>
- #include <api/script/scriptmgr.h>
- #include <api/config/items/attrbool.h>
- #include <api/config/items/cfgitem.h>
- #include <api/skin/skinparse.h>
- #include <api/wac/compon.h>
- #include <api/wnd/wndtrack.h>
- #include <api/skin/skin.h>
- #include <api/wndmgr/skinembed.h>
- #include <api/syscb/callbacks/wndcb.h>
- #include <bfc/string/stringdict.h>
- #include <api/skin/widgets/xuiwndholder.h> // TODO: cut, but we need XuiWindowHolder::parseGUID for now
- #include <bfc/platform/guid.h>
- #ifdef WIN32
- #include "resource.h"
- #include "../Agave/Language/api_language.h"
- #endif
- BEGIN_STRINGDICTIONARY(_containerparams)
- SDI(L"name", CONTAINERPARAM_NAME);
- SDI(L"id", CONTAINERPARAM_ID);
- SDI(L"dynamic", CONTAINERPARAM_DYNAMIC);
- SDI(L"default_x", CONTAINERPARAM_DEFAULTX);
- SDI(L"default_y", CONTAINERPARAM_DEFAULTY);
- SDI(L"default_visible", CONTAINERPARAM_DEFAULTVISIBLE);
- SDI(L"canclose", CONTAINERPARAM_CANCLOSE);
- SDI(L"nomenu", CONTAINERPARAM_NOMENU);
- SDI(L"nofocusapponclose", CONTAINERPARAM_NOFOCUSAPPONCLOSE);
- SDI(L"primarycomponent", CONTAINERPARAM_CONTENT);
- END_STRINGDICTIONARY(_containerparams, containerparams);
- Container::Container(int script_id)
- {
- getScriptObject()->vcpu_setInterface(containerGuid, (void *)static_cast<Container *>(this));
- getScriptObject()->vcpu_setClassName(L"Container");
- getScriptObject()->vcpu_setController(containerController);
- scriptid = script_id;
- currentLayout = -1;
- default_visible = TRUE;
- loaded_default_visible = TRUE;
- dynamic = 0;
- MEMCPY(&myGUID, &INVALID_GUID, sizeof(GUID));
- lastLayout = -1;
- refocusapponclose = 1;
- canclose = 1;
- inited = 0;
- deleting = 0;
- transcient = 0;
- switching_layout = 0;
- nomenu = 0;
- prevent_save_visibility = 0;
- contentGuid = INVALID_GUID;
- hasContentGuid=false;
- }
- void Container::setName(const wchar_t *name)
- {
- #ifdef ON_TWEAK_CONTAINER_NAMEW
- ON_TWEAK_CONTAINER_NAMEW(name);
- #endif
- containerName = name ? name : CONTAINER_UNDEFINED_NAME;
- foreach(layouts)
- Layout *l = layouts.getfor();
- if (l->getRootWndName() == NULL)
- {
- l->setOSWndName(name);
- }
- endfor;
- updateDefaultVisible();
- dependent_sendEvent(Container::depend_getClassGuid(), Event_NAMECHANGE, 0, this);
- }
- void Container::resetLayouts()
- {
- updateDefaultVisible();
- foreach(layouts)
- layouts.getfor()->loadSavedState();
- endfor;
- }
- void Container::setId(const wchar_t *id)
- {
- containerId = id ? id : L"undefined";
- ismain = !WCSICMP(id, L"main");
- }
- int Container::setXmlParam(const wchar_t *paramname, const wchar_t *strvalue)
- {
- switch (containerparams.getId(paramname))
- {
- case CONTAINERPARAM_NAME:
- setName(strvalue);
- return 1;
- case CONTAINERPARAM_ID:
- setId(strvalue);
- return 1;
- case CONTAINERPARAM_DYNAMIC:
- setDynamic(WTOI(strvalue));
- return 1;
- case CONTAINERPARAM_DEFAULTX:
- default_x = WTOI(strvalue);
- return 1;
- case CONTAINERPARAM_DEFAULTY:
- default_y = WTOI(strvalue);
- return 1;
- case CONTAINERPARAM_DEFAULTVISIBLE:
- default_visible = WTOI(strvalue);
- updateDefaultVisible();
- return 1;
- case CONTAINERPARAM_CANCLOSE:
- canclose = WTOI(strvalue);
- return 1;
- case CONTAINERPARAM_NOMENU:
- nomenu = WTOI(strvalue);
- return 1;
- case CONTAINERPARAM_NOFOCUSAPPONCLOSE:
- refocusapponclose = !WTOI(strvalue);
- break;
- case CONTAINERPARAM_CONTENT:
- {
- // TODO: move this out of XuiWindowHolder
- GUID *g = XuiWindowHolder::parseGUID(strvalue);
- contentGuid = *g;
- hasContentGuid=true;
-
- break;
- }
- }
- return 0;
- }
- Container::~Container()
- {
- containerCallback(CONT_CB_HIDDEN);
- layouts.deleteAll();
- contents.deleteAll();
- SkinParser::containers.removeItem(this);
- }
- void Container::getWindowRect(RECT *r)
- {
- Layout *l = getCurrentLayout();
- if (l)
- l->getWindowRect(r);
- }
- void Container::addLayout(Layout *layout)
- {
- layouts.addItem(layout);
- }
- const wchar_t *Container::getName()
- {
- return containerName;
- }
- const wchar_t *Container::getId()
- {
- return containerId;
- }
- int Container::getDefaultPositionX(void)
- {
- return default_x;
- }
- int Container::getDefaultPositionY(void)
- {
- return default_y;
- }
- void Container::onInit(int noshow)
- {
- if (inited) return ;
- inited++;
- loadFromDefaults(noshow);
- }
- void Container::loadFromDefaults(int noshow)
- {
- #ifdef WASABI_COMPILE_CONFIG
- if (last_layout.isempty())
- {
- StringPrintfW tmp(L"container_%s|active", getName());
- wchar_t c[512] = {0};
- WASABI_API_CONFIG->getStringPrivate(tmp, c, 511, L"");
- c[510] = 0;
- last_layout = c;
- }
- #endif
- if (loaded_default_visible)
- {
- showDefaultLayout(noshow);
- }
- }
- void Container::setDefaultLayout(const wchar_t *name)
- {
- last_layout = name;
- }
- void Container::showDefaultLayout(int noshow)
- {
- Layout *l = getLayout(last_layout);
- if (!l)
- l = layouts.enumItem(0);
- if (l)
- {
- currentLayout = layouts.searchItem(l);
- if (!noshow)
- l->setVisible(1);
- containerCallback(CONT_CB_VISIBLE); // since we set currentLayout prior to showing the layout, the callback will not be processed in onChildSetLayoutVisible
- }
- }
- void Container::setVisible(int sh)
- {
- if (!sh && !canclose)
- return ;
- int is = isVisible();
- if (!!sh == !!is)
- return ;
- Layout *l = getCurrentLayout();
- if (!l && lastLayout != -1)
- l = layouts[lastLayout];
- if (sh)
- {
- if (!l)
- showDefaultLayout();
- else
- {
- l->setVisible(1);
- }
- }
- else
- {
- if (l)
- l->setVisible(0);
- }
- }
- int Container::isVisible()
- {
- if (switching_layout) return 1;
- Layout *l = getCurrentLayout();
- if (!l) return 0;
- return l->isVisible();
- }
- void Container::onChildSetLayoutVisible(Layout *l, int v)
- {
- for (int i = 0;i < layouts.getNumItems();i++)
- {
- if (layouts[i] == l)
- {
- if (v)
- {
- if (currentLayout != i)
- {
- Layout *l = NULL;
- if (currentLayout >= 0)
- l = layouts[currentLayout];
- if (l) l->setVisible(0);
- containerCallback(CONT_CB_VISIBLE);
- currentLayout = i;
- l = layouts[currentLayout];
- #ifdef WASABI_COMPILE_CONFIG
- if (!isTranscient() && !prevent_save_visibility)
- WASABI_API_CONFIG->setStringPrivate(StringPrintfW(L"container_%s|active", getName()), l->getGuiObject()->guiobject_getId());
- #endif
- #ifdef WA3COMPATIBILITY
- l->setForwardMsgWnd(WASABI_API_WND->main_getRootWnd()->gethWnd());
- #endif
- if (l->wantActivation())
- {
- l->bringToFront();
- l->setFocus();
- }
- l->invalidate();
- }
- #ifdef WASABI_COMPILE_CONFIG
- if (!isTranscient() && !isDynamic() && !prevent_save_visibility)
- WASABI_API_CONFIG->setIntPrivate(StringPrintfW(L"activated/%s", getName()), v);
- WASABI_API_CONFIG->setIntPrivate(StringPrintfW(L"everloaded/%s", getName()), 1);
- #endif
- }
- else
- {
- if (i == currentLayout)
- {
- if (!isDeleting() && !isTranscient() && !isDynamic())
- {
- #ifdef WASABI_COMPILE_CONFIG
- WASABI_API_CONFIG->setIntPrivate(StringPrintfW(L"activated/%s", getName()), v);
- #endif
- lastLayout = currentLayout;
- currentLayout = -1;
- }
- containerCallback(CONT_CB_HIDDEN);
- }
- }
- return ;
- }
- }
- }
- void Container::containerCallback(int msg)
- {
- switch (msg)
- {
- case CONT_CB_VISIBLE:
- {
- foreach(contents)
- ContentEntry *e = contents.getfor();
- WndInfo i;
- i.groupid = e->groupid;
- i.guid = e->guid;
- i.c = this;
- WASABI_API_SYSCB->syscb_issueCallback(SysCallback::WINDOW, WndCallback::SHOWWINDOW, reinterpret_cast<intptr_t>(&i));
- endfor
- WndInfo i;
- i.groupid = getId();
- i.guid = INVALID_GUID;
- i.c = this;
- WASABI_API_SYSCB->syscb_issueCallback(SysCallback::WINDOW, WndCallback::SHOWWINDOW, reinterpret_cast<intptr_t>(&i));
- }
- break;
- case CONT_CB_HIDDEN:
- {
- foreach(contents)
- ContentEntry *e = contents.getfor();
- WndInfo i;
- i.groupid = e->groupid;
- i.guid = e->guid;
- i.c = this;
- WASABI_API_SYSCB->syscb_issueCallback(SysCallback::WINDOW, WndCallback::HIDEWINDOW, reinterpret_cast<intptr_t>(&i));
- endfor
- WndInfo i;
- i.groupid = getId();
- i.guid = INVALID_GUID;
- i.c = this;
- WASABI_API_SYSCB->syscb_issueCallback(SysCallback::WINDOW, WndCallback::HIDEWINDOW, reinterpret_cast<intptr_t>(&i));
- }
- break;
- }
- }
- void Container::close()
- {
- int norefocs = !wantRefocusApp();
- if (norefocs) WASABI_API_WND->appdeactivation_push_disallow(NULL);
- if (!canclose) return ;
- if (isDynamic())
- {
- setVisible(0);
- skinEmbedder->destroyContainer(this); // deferred
- }
- else
- setVisible(0);
- if (norefocs) WASABI_API_WND->appdeactivation_pop_disallow(NULL);
- }
- void Container::toggle()
- {
- if (isVisible()) close(); else setVisible(1); // close has special function hide/destroy depending on dynamic status
- }
- void Container::switchToLayout(const wchar_t *name, int moveit)
- {
- int l = -1;
- getLayout(name, &l);
- if (l == -1)
- {
- // Layout not found, reverting to first in the list
- if (layouts.getNumItems() > 0) l = 0;
- else
- return ; // none found, abort
- }
- switching_layout = 1;
- if (l != currentLayout)
- {
- int old = currentLayout;
- RECT r = {0};
- Layout *oldlayout = old >= 0 ? layouts[old] : NULL;
- Layout *newlayout = layouts[l];
- onBeforeSwitchToLayout(oldlayout, newlayout);
- if (oldlayout)
- {
- oldlayout->getWindowRect(&r);
- oldlayout->endCapture();
- }
- int unlinked = layouts[l]->isUnlinked();
- unlinked |= oldlayout ? oldlayout->isUnlinked() : 0;
- if (moveit && !unlinked && oldlayout)
- layouts[l]->move(r.left, r.top);
- #ifdef WASABI_COMPILE_CONFIG
- // {9149C445-3C30-4e04-8433-5A518ED0FDDE}
- const GUID uioptions_guid =
- { 0x9149c445, 0x3c30, 0x4e04, { 0x84, 0x33, 0x5a, 0x51, 0x8e, 0xd0, 0xfd, 0xde } };
- if (_intVal(WASABI_API_CONFIG->config_getCfgItemByGuid(uioptions_guid), L"Link layouts scale"))
- {
- #else
- if (WASABI_WNDMGR_LINKLAYOUTSCALES)
- {
- #endif
- if (oldlayout)
- {
- double _r = oldlayout->getRenderRatio();
- newlayout->setRenderRatio(_r);
- }
- }
- #ifdef WASABI_COMPILE_CONFIG
- if (_intVal(WASABI_API_CONFIG->config_getCfgItemByGuid(uioptions_guid), L"Link layouts alpha"))
- {
- #else
- if (WASABI_WNDMGR_LINKLAYOUTSALPHA)
- {
- #endif
- if (oldlayout)
- {
- int a = layouts[old]->getAlpha();
- newlayout->setAlpha(a);
- int autoopacify = layouts[old]->getAutoOpacify();
- newlayout->setAutoOpacify(autoopacify);
- }
- }
- WindowTracker::layoutChanged(oldlayout, newlayout);
- #ifdef ON_LAYOUT_CHANGED
- ON_LAYOUT_CHANGED;
- #endif
- layouts[l]->setVisible(1);
- foreach(SkinParser::containers)
- SkinParser::containers.getfor()->savePositions();
- endfor
- onSwitchToLayout(newlayout);
- }
- switching_layout = 0;
- }
- void Container::savePositions()
- {
- foreach (layouts)
- layouts.getfor()->savePosition();
- endfor
- }
- Layout *Container::getLayout(const wchar_t *name, int *pos)
- {
- for ( int i = 0; i < getNumLayouts(); i++ )
- {
- if ( WCSCASEEQLSAFE( enumLayout( i )->getGuiObject()->guiobject_getId(), name ) )
- {
- if (pos)
- {
- *pos = i;
- }
-
- return enumLayout( i );
-
- }
- }
- return NULL;
- }
- Layout *Container::getCurrentLayout()
- {
- if (currentLayout < 0)
- return NULL;
- return layouts.enumItem(currentLayout);
- }
- void Container::otherContainerToggled(const wchar_t *id, int visible)
- {
- for (int i = 0;i < layouts.getNumItems();i++)
- layouts[i]->containerToggled(id, visible);
- }
- void Container::componentToggled(GUID *g, int visible)
- {
- for (int i = 0;i < layouts.getNumItems();i++)
- layouts[i]->componentToggled(g, visible);
- }
- void Container::sendNotifyToAllLayouts(int notifymsg, int param1, int param2)
- {
- for (int i = 0;i < layouts.getNumItems();i++)
- layouts[i]->sendNotifyToAllChildren(notifymsg, param1, param2);
- }
- int Container::isMainContainer()
- {
- return ismain;
- }
- void Container::sysMenu()
- {
- POINT p;
- Wasabi::Std::getMousePos(&p);
- layouts.enumItem(currentLayout)->onRightButtonDown(p.x, p.y);
- }
- void Container::setDynamic(int i)
- {
- dynamic = i;
- if (!containerId.isempty())
- setId(containerId);
- }
- int Container::isDynamic()
- {
- return dynamic;
- }
- void Container::onSwitchToLayout(Layout *l)
- {
- ScriptObject *ls = l ? l->getGuiObject()->guiobject_getScriptObject() : NULL;
- script_onSwitchToLayout(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(ls));
- }
- void Container::onBeforeSwitchToLayout(Layout *oldl, Layout *newl)
- {
- ScriptObject *olds = oldl ? oldl->getGuiObject()->guiobject_getScriptObject() : NULL;
- ScriptObject *news = newl ? newl->getGuiObject()->guiobject_getScriptObject() : NULL;
- script_onBeforeSwitchToLayout(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(olds), MAKE_SCRIPT_OBJECT(news));
- }
- void Container::onHideLayout(Layout *l)
- {
- script_onHideLayout(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(l->getGuiObject()->guiobject_getScriptObject()));
- }
- void Container::onShowLayout(Layout *l)
- {
- script_onShowLayout(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(l->getGuiObject()->guiobject_getScriptObject()));
- }
- int Container::getNumLayouts()
- {
- return layouts.getNumItems();
- }
- Layout *Container::enumLayout(int n)
- {
- return layouts.enumItem(n);
- }
- const wchar_t *Container::getDescriptor()
- {
- static wchar_t d[256];
- // if we've tweaked the container names then when saving out we can see and attempt to 'untweak'
- // so that things like Winamp Modern's ML will be correctly positioned irrespective of language
- int untweak = 0;
- wchar_t tweaked[96] = {0};
- // Martin> We need to check the containerName against null - dunno why some skins cause this string to be null
- if(containerName.v() != NULL && !_wcsicmp(containerName.v(), WASABI_API_LNGSTRINGW_BUF(IDS_MEDIA_LIBRARY,tweaked,96))){
- untweak = 1;
- }
- WCSNPRINTF(d, 256,L"%s/%s", getId(), (!untweak ? containerName.v() : L"Media Library"));
- return d;
- }
- void Container::updateDefaultVisible()
- {
- if (!canclose)
- {
- loaded_default_visible = 1;
- return ;
- }
- #ifdef WASABI_COMPILE_CONFIG
- loaded_default_visible = WASABI_API_CONFIG->getIntPrivate(StringPrintfW(L"activated/%s", getName()), default_visible);
- #else
- loaded_default_visible = default_visible;
- #endif
- }
- int Container::getScriptId()
- {
- return scriptid;
- }
- void Container::notifyAddContent(ifc_window *w, const wchar_t *id, GUID g)
- {
- contents.addItem(new ContentEntry(id, g, w));
- ScriptObject *_w = w ? w->getGuiObject()->guiobject_getScriptObject() : NULL;
- wchar_t guidstr[256] = {0};
- nsGUID::toCharW(g, guidstr);
- script_onAddContent(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(_w), MAKE_SCRIPT_STRING(id), MAKE_SCRIPT_STRING(guidstr));
- }
- void Container::notifyRemoveContent(ifc_window *w)
- {
- foreach(contents)
- ContentEntry *e = contents.getfor();
- if (e->wnd == w)
- {
- contents.removeItem(e);
- delete e;
- return ;
- }
- endfor;
- }
- int Container::hasContent(GUID g)
- {
- foreach(contents)
- ContentEntry *e = contents.getfor();
- if (e->guid == g)
- {
- return 1;
- }
- endfor;
- return 0;
- }
- GUID Container::getDefaultContent()
- {
- if (hasContentGuid)
- return contentGuid;
- if (contents.getNumItems() > 0) return contents.enumItem(0)->guid;
- return INVALID_GUID;
- }
- ContainerScriptController _containerController;
- ContainerScriptController *containerController = &_containerController;
- // -- Functions table -------------------------------------
- function_descriptor_struct ContainerScriptController::exportedFunction[] = {
- {L"onSwitchToLayout", 1, (void*)Container::script_onSwitchToLayout },
- {L"onBeforeSwitchToLayout", 2, (void*)Container::script_onBeforeSwitchToLayout },
- {L"onHideLayout", 1, (void*)Container::script_onHideLayout },
- {L"onShowLayout", 1, (void*)Container::script_onShowLayout },
- {L"getLayout", 1, (void*)Container::script_getLayout },
- {L"getNumLayouts", 0, (void*)Container::script_getNumLayouts },
- {L"enumLayout", 1, (void*)Container::script_enumLayout },
- {L"getCurLayout", 0, (void*)Container::script_getCurrentLayout},
- {L"switchToLayout", 1, (void*)Container::script_switchToLayout },
- {L"isDynamic", 0, (void*)Container::script_isDynamic },
- {L"show", 0, (void*)Container::script_show },
- {L"hide", 0, (void*)Container::script_hide },
- {L"close", 0, (void*)Container::script_close},
- {L"toggle", 0, (void*)Container::script_toggle },
- {L"setName", 1, (void*)Container::script_setName },
- {L"getName", 0, (void*)Container::script_getName },
- {L"getGuid", 0, (void*)Container::script_getGuid },
- {L"setXmlParam", 2, (void*)Container::script_setXmlParam},
- {L"onAddContent", 3, (void*)Container::script_onAddContent},
- };
- // --------------------------------------------------------
- /*SET_HIERARCHY(Container, SCRIPT_CONTAINER);
- SET_HIERARCHY2(Container, SCRIPT_CONTAINER, CONTAINER_SCRIPTPARENT);*/
- const wchar_t *ContainerScriptController::getClassName()
- {
- return L"Container";
- }
- const wchar_t *ContainerScriptController::getAncestorClassName()
- {
- return L"Object";
- }
- ScriptObjectController *ContainerScriptController::getAncestorController()
- {
- return rootScriptObjectController;
- }
- int ContainerScriptController::getInstantiable()
- {
- return 1;
- }
- ScriptObject *ContainerScriptController::instantiate()
- {
- Container *c = new Container;
- return c->getScriptObject();
- }
- void ContainerScriptController::destroy(ScriptObject *o)
- {
- //ASSERTALWAYS("be nice, don't do that");
- Container *c = (Container *)o->vcpu_getInterface(containerGuid);
- delete c;
- }
- void *ContainerScriptController::encapsulate(ScriptObject *o)
- {
- return NULL;
- }
- void ContainerScriptController::deencapsulate(void *o)
- {}
- int ContainerScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *ContainerScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID ContainerScriptController::getClassGuid()
- {
- return containerGuid;
- }
- //-----------------------------------------------------------------------
- scriptVar Container::script_onSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, containerController, l);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, l);
- }
- scriptVar Container::script_onBeforeSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar oldl, scriptVar newl)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS2(o, containerController, oldl, newl);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT2(o, oldl, newl);
- }
- scriptVar Container::script_onHideLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, containerController, l);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, l);
- }
- scriptVar Container::script_onShowLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, containerController, l);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, l);
- }
- // Get an layout from its ID
- scriptVar Container::script_getLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(obj.type == SCRIPT_STRING); // compiler discarded
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c)
- {
- for (int i = 0;i < c->layouts.getNumItems();i++)
- if (!WCSICMP(obj.data.sdata, c->layouts.enumItem(i)->getGuiObject()->guiobject_getId()))
- {
- return MAKE_SCRIPT_OBJECT(c->layouts.enumItem(i)->getGuiObject()->guiobject_getScriptObject());
- }
- }
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Container::script_show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->setVisible(1);
- RETURN_SCRIPT_VOID;
- }
- scriptVar Container::script_hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->setVisible(0);
- RETURN_SCRIPT_VOID;
- }
- scriptVar Container::script_close(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->close();
- RETURN_SCRIPT_VOID;
- }
- scriptVar Container::script_toggle(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->toggle();
- RETURN_SCRIPT_VOID;
- }
- // Switch to another layout
- scriptVar Container::script_switchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c)
- c->switchToLayout(GET_SCRIPT_STRING(l));
- RETURN_SCRIPT_VOID;
- }
- scriptVar Container::script_getNumLayouts(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) return MAKE_SCRIPT_INT(c->getNumLayouts());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Container::script_enumLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(SOM::isNumeric(&n)); // compiler discarded
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- Layout *l = NULL;
- if (c) l = c->enumLayout(SOM::makeInt(&n));
- return MAKE_SCRIPT_OBJECT(l ? l->getScriptObject() : NULL);
- }
- scriptVar Container::script_getCurrentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- Layout *l = c->getCurrentLayout();
- return MAKE_SCRIPT_OBJECT(l ? l->getScriptObject() : NULL);
- }
- // Switch to another layout
- scriptVar Container::script_vcpu_getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
-
- if (c)
- return MAKE_SCRIPT_STRING(c->getId());
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar Container::script_isDynamic(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) return MAKE_SCRIPT_INT(c->isDynamic());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar Container::script_setName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar name)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->setName(GET_SCRIPT_STRING(name));
- RETURN_SCRIPT_VOID;
- }
- scriptVar Container::script_getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) return MAKE_SCRIPT_STRING(c->getName());
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar Container::script_getGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c)
- {
- static wchar_t guidstr[256];
- nsGUID::toCharW(c->getGUID(), guidstr);
- return MAKE_SCRIPT_STRING(guidstr);
- }
- return MAKE_SCRIPT_STRING(L"");
- }
- scriptVar Container::script_setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p, scriptVar v)
- {
- SCRIPT_FUNCTION_INIT
- Container *c = static_cast<Container *>(o->vcpu_getInterface(containerGuid));
- if (c) c->setXmlParam(GET_SCRIPT_STRING(p), GET_SCRIPT_STRING(v));
- RETURN_SCRIPT_VOID;
- }
- //void Container::notifyAddContent(ifc_window *w, const wchar_t *id, GUID g)
- scriptVar Container::script_onAddContent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar window, scriptVar id, scriptVar g)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS3(o, containerController, window, id, g);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT3(o, window, id, g);
- }
|