#include #include #include #include "grouplist.h" #include #include const wchar_t groupListXuiObjectStr[] = L"GroupList"; // This is the xml tag char groupListXuiSvcName[] = "GroupList xui object"; // this is the name of the xuiservice GroupList::GroupList() { getScriptObject()->vcpu_setInterface(grouplistGuid, (void *)static_cast(this)); getScriptObject()->vcpu_setClassName(L"GroupList"); getScriptObject()->vcpu_setController(grouplistController); scrollY = 0; maxheight = 0; maxwidth = 0; redraw=1; } GroupList::~GroupList() { // todo: unload group scripts for (int i=0;isetParent(this); last->init(this); groups.addItem(last); } reposChildren(); notifyParent(ChildNotify::AUTOWHCHANGED); invalidate(); return last; } int GroupList::onResize() { int r = GROUPLIST_PARENT::onResize(); reposChildren(); return r; } Group *GroupList::enumItem(int n) { return groups.enumItem(n); } void GroupList::removeAll() { for (int i=0;i maxheight) return; scrollTo((int)((float)(maxheight - height) * (float)p / 100.0f)); } void GroupList::scrollTo(int y) { scrollY = y; if (!redraw) return; invalidate(); } void GroupList::reposChildren() { if (!redraw) return; RECT r; getClientRect(&r); int ch = -scrollY+r.top; maxheight = 0; for (int i=0;igetPreferences(SUGGESTED_H); int w = g->getPreferences(SUGGESTED_W); RECT cr; getClientRect(&cr); cr.top = ch; cr.bottom = cr.top + h; g->resize(&cr); maxheight += h; if (maxwidth < w) maxwidth = w; ch += h; } } void GroupList::setRedraw(int i) { if (redraw == i) return; redraw=i; if (redraw) { notifyParent(ChildNotify::AUTOWHCHANGED); reposChildren(); invalidate(); } } int GroupList::getPreferences(int what) { if (what == SUGGESTED_H) { reposChildren(); return maxheight; } if (what == SUGGESTED_W) { reposChildren(); return maxwidth; } return GROUPLIST_PARENT::getPreferences(what); } GroupListScriptController _grouplistController; GroupListScriptController *grouplistController = &_grouplistController; // -- Functions table ------------------------------------- function_descriptor_struct GroupListScriptController ::exportedFunction[] = { {L"instantiate", 2, (void*)GroupList::script_vcpu_instantiate }, {L"getNumItems", 0, (void*)GroupList::script_vcpu_getNumItems }, {L"enumItem", 1, (void*)GroupList::script_vcpu_enumItem }, {L"removeAll", 0, (void*)GroupList::script_vcpu_removeAll }, {L"scrollToPercent", 1, (void*)GroupList::script_vcpu_scrollToPercent }, {L"setRedraw", 1, (void*)GroupList::script_vcpu_setRedraw}, }; const wchar_t *GroupListScriptController ::getClassName() { return L"GroupList"; } const wchar_t *GroupListScriptController ::getAncestorClassName() { return L"GuiObject"; } ScriptObject *GroupListScriptController::instantiate() { GroupList *gl = new GroupList; ASSERT(gl != NULL); return gl->getScriptObject(); } void GroupListScriptController::destroy(ScriptObject *o) { GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); ASSERT(gl != NULL); delete gl; } void *GroupListScriptController::encapsulate(ScriptObject *o) { return NULL; // no encapsulation for grouplist yet } void GroupListScriptController::deencapsulate(void *o) { } int GroupListScriptController ::getNumFunctions() { return sizeof(exportedFunction) / sizeof(function_descriptor_struct); } const function_descriptor_struct *GroupListScriptController ::getExportedFunctions() { return exportedFunction; } GUID GroupListScriptController ::getClassGuid() { return grouplistGuid; } scriptVar GroupList::script_vcpu_instantiate(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar id, scriptVar n) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); Group *g = NULL; if (gl) g = gl->instantiate(GET_SCRIPT_STRING(id), GET_SCRIPT_INT(n)); return MAKE_SCRIPT_OBJECT(g ? g->getScriptObject() : NULL); } scriptVar GroupList::script_vcpu_getNumItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); if (gl) return MAKE_SCRIPT_INT(gl->getNumItems()); RETURN_SCRIPT_ZERO; } scriptVar GroupList::script_vcpu_enumItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); Group *g = NULL; if (gl) g = gl->enumItem(GET_SCRIPT_INT(n)); return MAKE_SCRIPT_OBJECT(g ? g->getScriptObject() : NULL); } scriptVar GroupList::script_vcpu_removeAll(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); if (gl) gl->removeAll(); RETURN_SCRIPT_VOID; } scriptVar GroupList::script_vcpu_scrollToPercent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); if (gl) gl->scrollToPercent(GET_SCRIPT_INT(n)); RETURN_SCRIPT_VOID; } scriptVar GroupList::script_vcpu_setRedraw(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) { SCRIPT_FUNCTION_INIT GroupList *gl = static_cast(o->vcpu_getInterface(grouplistGuid)); if (gl) gl->setRedraw(GET_SCRIPT_INT(n)); RETURN_SCRIPT_VOID; }