#include #include "xuitree.h" #include #include #include #include // The temporary memory buffer to hold our string returns. StringW GuiTreeScriptController::staticStr; class ScriptTreeItem; // ----------------------------------------------------------------------- // class TreeItemScript -- This is the tree item type inserted into // the tree if a script or XML piece is inserting items into the tree. class TreeItemScript : public TreeItem { public: TreeItemScript(const wchar_t *label = NULL, ScriptTreeItem *_scriptitem = NULL) : scriptitem(_scriptitem), TreeItem(label) {} virtual ~TreeItemScript() {} virtual void onTreeAdd() { if (scriptitem) TreeItemScriptController::treeitem_onTreeAdd(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual void onTreeRemove() { if (scriptitem) TreeItemScriptController::treeitem_onTreeRemove(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual void onSelect() { if (scriptitem) TreeItemScriptController::treeitem_onSelect(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual void onDeselect() { if (scriptitem) TreeItemScriptController::treeitem_onDeselect(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual int onLeftDoubleClick() { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onLeftDoubleClick(SCRIPT_CALL, scriptitem->getScriptObject()); if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) return 0; return GET_SCRIPT_INT(retval); } virtual int onRightDoubleClick() { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onRightDoubleClick(SCRIPT_CALL, scriptitem->getScriptObject()); if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) return 0; return GET_SCRIPT_INT(retval); } // return 1 if you eat the key virtual int onChar(UINT key) { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onChar(SCRIPT_CALL, scriptitem->getScriptObject(), MAKE_SCRIPT_INT(key)); if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) return 0; return GET_SCRIPT_INT(retval); } // these are called after the expand/collapse happens virtual void onExpand() { if (scriptitem) TreeItemScriptController::treeitem_onExpand(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual void onCollapse() { if (scriptitem) TreeItemScriptController::treeitem_onCollapse(SCRIPT_CALL, scriptitem->getScriptObject()); } virtual int onBeginLabelEdit() { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onBeginLabelEdit(SCRIPT_CALL, scriptitem->getScriptObject()); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = TreeItem::onBeginLabelEdit(); } return retv; } virtual int onEndLabelEdit(const wchar_t *newlabel) { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onEndLabelEdit(SCRIPT_CALL, scriptitem->getScriptObject(), MAKE_SCRIPT_STRING(newlabel)); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = TreeItem::onEndLabelEdit(newlabel); } return retv; } virtual int onContextMenu(int x, int y) { scriptVar retval; if (scriptitem) retval = TreeItemScriptController::treeitem_onContextMenu(SCRIPT_CALL, scriptitem->getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = TreeItem::onContextMenu(x, y); } return retv; } protected: ScriptTreeItem *scriptitem; }; // ----------------------------------------------------------------------- const wchar_t ScriptTreeXuiObjectStr[] = L"Tree"; // This is the xml tag char ScriptTreeXuiSvcName[] = "Tree xui object"; XMLParamPair ScriptTree::params[] = { {SCRIPTTREE_CHILDTABS, L"CHILDTABS"}, {SCRIPTTREE_EXPANDROOT, L"EXPANDROOT"}, {SCRIPTTREE_FEED, L"FEED"}, {SCRIPTTREE_SETITEMS, L"ITEMS"}, {SCRIPTTREE_SORTED, L"SORTED"}, }; // ----------------------------------------------------------------------- ScriptTree::ScriptTree() { getScriptObject()->vcpu_setInterface(guitreeGuid, (void *)static_cast(this)); getScriptObject()->vcpu_setClassName(L"GuiTree"); // this is the script class name getScriptObject()->vcpu_setController(guiTreeController); myxuihandle = newXuiHandle(); CreateXMLParameters(myxuihandle); feed = NULL; childtabs = 1; expandroot = 1; } void ScriptTree::CreateXMLParameters(int master_handle) { //SCRIPTTREE_PARENT::CreateXMLParameters(master_handle); int numParams = sizeof(params) / sizeof(params[0]); hintNumberOfParams(myxuihandle, numParams); for (int i = 0;i < numParams;i++) addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED); } // ----------------------------------------------------------------------- ScriptTree::~ScriptTree() { closeFeed(); // Clean up the ScriptTreeItems owned by this guy. TreeItem *item = enumRootItem(0); while (item != NULL) { // Delete this item. ScriptTreeItem *dead = NULL; //if (TISC::g_scriptitems.getItem(item, &dead) && (dead != NULL)) //{ // true if it found something. // TISC::g_scriptitems.delItem(item); // delete dead; // // DebugString(" === deleting tree item (%08X, %08X, %08X)\n", item, dead, this); // continue; //} auto it = TISC::g_scriptitems.find(item); if (TISC::g_scriptitems.end() != it) { dead = it->second; delete dead; TISC::g_scriptitems.erase(it); continue; } else { // DebugString(" !!! ORPHAN TREE ITEM (%08X, %08X, %08X)\n", item, 0, this); } // Figure out who the next item to process should be. // 1) Children first. TreeItem *child = item->getChild(); if (child != NULL) { item = child; } else { // 2) Siblings next. TreeItem *sibling = item->getSibling(); if (sibling != NULL) { item = sibling; } else { // 3) Zip up parent chain last. TreeItem *item_parent, *parent_sibling; item_parent = item->getParent(); item = NULL; // at this point if we do not assign, we are NULL. while (item_parent != NULL) { parent_sibling = item_parent->getSibling(); if (parent_sibling != NULL) { item = parent_sibling; break; } item_parent = item_parent->getParent(); } // 4) Uhhh.... you're null. All done. Go home. } } } /* // delete all of our script items from g_scriptitems int i = 0; TreeItem *next = enumRootItem(0); while (next) { // go through all of our items ScriptTreeItem *dead = NULL; if (TISC::g_scriptitems.getItem(next, &dead) && (dead != NULL)) { // true if it found something. TISC::g_scriptitems.delItem(next); delete dead; // DebugString(" === deleting tree item (%08X, %08X)\n", next, dead); } else { // DebugString(" !!! ORPHAN TREE ITEM (%08X, %08X)\n", next, i); } TreeItem *next = enumAllItems(i++); } */ // some items will wind up leaked into g_scriptitems, most likely. } // ----------------------------------------------------------------------- int ScriptTree::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) { if (xuihandle != myxuihandle) return SCRIPTTREE_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value); switch (xmlattributeid) { case SCRIPTTREE_SETITEMS: items = value; fillFromParams(); #ifdef WASABI_COMPILE_CONFIG if (getGuiObject()->guiobject_hasCfgAttrib()) selectFromConfig(); #endif break; case SCRIPTTREE_FEED: { closeFeed(); openFeed(value); break; } case SCRIPTTREE_SORTED: { setSorted(WTOB(value)); break; } case SCRIPTTREE_CHILDTABS: { childtabs = WTOI(value); break; } case SCRIPTTREE_EXPANDROOT: { expandRoot(WTOI(value)); break; } default: return 0; } return 1; } // ----------------------------------------------------------------------- int ScriptTree::onInit() { SCRIPTTREE_PARENT::onInit(); fillFromParams(); return 1; } // ----------------------------------------------------------------------- int ScriptTree::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) { SCRIPTTREE_PARENT::onAction(action, param, x, y, p1, p2, data, datalen, source); if (!WCSICMP(action, L"get_selection")) { if (source != NULL) { StringW res(L""); // Hmmmmm..... multiselection trees? sendAction(source, L"set_selection", res); } } return 1; } // ----------------------------------------------------------------------- ScriptTreeItem *ScriptTree::bindScriptTreeItem(TreeItem *item) { ASSERT(item != NULL); // find this tree item in our map of tree items. ScriptTreeItem *si = NULL; //TISC::g_scriptitems.getItem(item, &si); auto it = TISC::g_scriptitems.find(item); if (TISC::g_scriptitems.end() == it) { // if there was no scriptobject in our map already, make one // for this tree item and place it in our map. si = new ScriptTreeItem(item, this); TISC::g_scriptitems.insert({ item, si }); } else { si = it->second; } return si; } // ----------------------------------------------------------------------- int ScriptTree::destroyScriptTreeItem(ScriptTreeItem *item) { ASSERT(item != NULL); // find this tree item in our map of tree items. TreeItem *ti = item->getItem(); if (ti) { ScriptTreeItem *check = NULL; //TISC::g_scriptitems.getItem(ti, &check); // this is a doublecheck on who owns who. auto it = TISC::g_scriptitems.find(ti); if (TISC::g_scriptitems.end() != it) { // remove the treeitem from the tree this->removeTreeItem(ti); // (removes without deleting) // remove the scripttreeitem from the map TISC::g_scriptitems.erase(it); // and delete.(phew! bomb disposal!) delete ti; delete item; return 1; // yes, we deleted it. } } return 0; // Not ours, don't wanna delete it. Someone else can Deal With It. } // ----------------------------------------------------------------------- void ScriptTree::onSetVisible(int i) { SCRIPTTREE_PARENT::onSetVisible(i); } #ifdef WASABI_COMPILE_CONFIG // ----------------------------------------------------------------------- int ScriptTree::onReloadConfig() { SCRIPTTREE_PARENT::onReloadConfig(); selectFromConfig(); return 1; } // ----------------------------------------------------------------------- void ScriptTree::saveToConfig() {} // ----------------------------------------------------------------------- void ScriptTree::selectFromConfig() {} #endif // ----------------------------------------------------------------------- int ScriptTree::selectEntry(const wchar_t *e, int cb) { return -1; } // ----------------------------------------------------------------------- void ScriptTree::expandRoot(int val) { if (val) { expandroot = 1; int count; TreeItem *rootitem; for (count = 0, rootitem = enumRootItem(count); rootitem; rootitem = enumRootItem(++count)) { rootitem->expand(); } } else { expandroot = 0; } } // ----------------------------------------------------------------------- void ScriptTree::fillFromHPNode(HPNode *node, TreeItem *parent) { // Go through the given node's children and add items for them // to the corresponding parent item. int i, n = node->getNumChildren(); for (i = 0; i < n; i++) { // Here's a child node HPNode *child_node = static_cast(node->enumChild(i)); // Make a script-aware tree item and script item to correspond to it, labelled with the child_node's name ScriptTreeItem *si = new ScriptTreeItem; TreeItem *child_item = new TreeItemScript((*child_node)(), si); si->setItem(child_item); si->setScriptTree(this); // Add the script and tree items to the scriptitems map TISC::g_scriptitems.insert({ child_item, si }); // DebugString(StringPrintf(" === NEW NODE ITEM (%08X, %08X, %08X)\n", child_item, si, this); // Add the child item to either ourselves or the given parent. addTreeItem(child_item, parent, getSorted(), childtabs); // And then continue to fill from that node. fillFromHPNode(child_node, child_item); } } // ----------------------------------------------------------------------- void ScriptTree::fillFromParams() { deleteAllItems(); if (!items.isempty()) { HierarchyParser hierarchy(items); fillFromHPNode(hierarchy.rootNode()); } // If we want our roots opened, do so now. expandRoot(expandroot); } // ----------------------------------------------------------------------- void ScriptTree::selectEntries(const wchar_t *entries, int cb) {} // ----------------------------------------------------------------------- void ScriptTree::openFeed(const wchar_t *feedid) { if (!_wcsicmp(feedid, last_feed)) return ; feed = TextFeedEnum(feedid).getFirst(); if (feed != NULL) { viewer_addViewItem(feed->getDependencyPtr()); setXuiParam(myxuihandle, SCRIPTTREE_SETITEMS, L"items", feed->getFeedText(feedid)); } last_feed = feedid; } // ----------------------------------------------------------------------- void ScriptTree::closeFeed() { if (feed) { viewer_delViewItem(feed->getDependencyPtr()); SvcEnum::release(feed); } feed = NULL; last_feed = L""; } // ----------------------------------------------------------------------- int ScriptTree::viewer_onEvent(api_dependent *item, const GUID *classguid, int event, intptr_t param, void *ptr, size_t ptrlen) { if (feed == dynamic_guid_cast(item, classguid)) { if (event == svc_textFeed::Event_TEXTCHANGE) { setXuiParam(myxuihandle, SCRIPTTREE_SETITEMS, L"items", (const wchar_t *)ptr); return 1; } } return 0; } // ----------------------------------------------------------------------- // Callback methods that send hooks into the Script system int ScriptTree::onLeftButtonDown(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onLeftButtonDown(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onLeftButtonDown(x, y); } return retv; } int ScriptTree::onLeftButtonUp(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onLeftButtonUp(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onLeftButtonUp(x, y); } return retv; } int ScriptTree::onRightButtonUp(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onRightButtonUp(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onRightButtonUp(x, y); } return retv; } int ScriptTree::onMouseMove(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onMouseMove(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onMouseMove(x, y); } return retv; } int ScriptTree::wantAutoContextMenu() { scriptVar retval; retval = GuiTreeScriptController::guitree_wantAutoContextMenu(SCRIPT_CALL, getScriptObject() ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::wantAutoContextMenu(); } return retv; } int ScriptTree::onLeftButtonDblClk(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onLeftButtonDblClk(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onLeftButtonDblClk(x, y); } return retv; } int ScriptTree::onRightButtonDblClk(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onRightButtonDblClk(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onRightButtonDblClk(x, y); } return retv; } int ScriptTree::onMouseWheelUp(int clicked, int lines) { scriptVar retval; retval = GuiTreeScriptController::guitree_onMouseWheelUp(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(clicked), MAKE_SCRIPT_INT(lines) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onMouseWheelUp(clicked, lines); } return retv; } int ScriptTree::onMouseWheelDown(int clicked, int lines) { scriptVar retval; retval = GuiTreeScriptController::guitree_onMouseWheelDown(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(clicked), MAKE_SCRIPT_INT(lines) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onMouseWheelDown(clicked, lines); } return retv; } int ScriptTree::onContextMenu(int x, int y) { scriptVar retval; retval = GuiTreeScriptController::guitree_onContextMenu(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(x), MAKE_SCRIPT_INT(y) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onContextMenu(x, y); } return retv; } int ScriptTree::onChar(wchar_t c) { scriptVar retval; retval = GuiTreeScriptController::guitree_onChar(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(c)); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onChar(c); } return retv; } int ScriptTree::onKeyDown(int keycode) { scriptVar retval; retval = GuiTreeScriptController::guitree_onKeyDown(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(keycode) ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onKeyDown(keycode); } return retv; } void ScriptTree::onItemRecvDrop(TreeItem *item) { ScriptTreeItem *sti_item = bindScriptTreeItem(item); GuiTreeScriptController::guitree_onItemRecvDrop(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(sti_item->getScriptObject()) ); } void ScriptTree::onLabelChange(TreeItem *item) { ScriptTreeItem *sti_item = bindScriptTreeItem(item); GuiTreeScriptController::guitree_onLabelChange(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(sti_item->getScriptObject()) ); } void ScriptTree::onItemSelected(TreeItem *item) { ScriptTreeItem *sti_item = bindScriptTreeItem(item); GuiTreeScriptController::guitree_onItemSelected(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(sti_item->getScriptObject()) ); } void ScriptTree::onItemDeselected(TreeItem *item) { ScriptTreeItem *sti_item = bindScriptTreeItem(item); GuiTreeScriptController::guitree_onItemDeselected(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_OBJECT(sti_item->getScriptObject()) ); } int ScriptTree::onKillFocus() { scriptVar retval; retval = GuiTreeScriptController::guitree_onKillFocus(SCRIPT_CALL, getScriptObject() ); int retv = 0; if ((retval.type == SCRIPT_VOID) || (retval.type == SCRIPT_OBJECT) || (retval.type == SCRIPT_STRING)) { retv = -1; } if (!retv) { retv = GET_SCRIPT_INT(retval); } if (retv < 1) { retv = SCRIPTTREE_PARENT::onKillFocus(); } return retv; } // ----------------------------------------------------------------------- // Script Object GuiTreeScriptController _guiTreeController; GuiTreeScriptController *guiTreeController = &_guiTreeController; // -- Functions table ------------------------------------- function_descriptor_struct GuiTreeScriptController::exportedFunction[] = { {L"getNumRootItems", 0, (void*)GuiTreeScriptController::guitree_getNumRootItems }, {L"enumRootItem", 1, (void*)GuiTreeScriptController::guitree_enumRootItem }, {L"onLeftButtonDown", 2, (void*)GuiTreeScriptController::guitree_onLeftButtonDown }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onLeftButtonUp", 2, (void*)GuiTreeScriptController::guitree_onLeftButtonUp }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onRightButtonUp", 2, (void*)GuiTreeScriptController::guitree_onRightButtonUp }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onMouseMove", 2, (void*)GuiTreeScriptController::guitree_onMouseMove }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onWantAutoContextMenu", 0, (void*)GuiTreeScriptController::guitree_wantAutoContextMenu }, // ); {L"onLeftButtonDblClk", 2, (void*)GuiTreeScriptController::guitree_onLeftButtonDblClk }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onRightButtonDblClk", 2, (void*)GuiTreeScriptController::guitree_onRightButtonDblClk }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onMouseWheelUp", 2, (void*)GuiTreeScriptController::guitree_onMouseWheelUp }, // , /*Int*/ scriptVar clicked, /*Int*/ scriptVar lines); {L"onMouseWheelDown", 2, (void*)GuiTreeScriptController::guitree_onMouseWheelDown }, // , /*Int*/ scriptVar clicked, /*Int*/ scriptVar lines); {L"onContextMenu", 2, (void*)GuiTreeScriptController::guitree_onContextMenu }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"onChar", 1, (void*)GuiTreeScriptController::guitree_onChar }, // , /*Int*/ scriptVar c); {L"onKeyDown", 1, (void*)GuiTreeScriptController::guitree_onKeyDown }, // , /*Int*/ scriptVar keycode); {L"onItemRecvDrop", 1, (void*)GuiTreeScriptController::guitree_onItemRecvDrop }, // , /*TreeItem*/ scriptVar item); {L"onLabelChange", 1, (void*)GuiTreeScriptController::guitree_onLabelChange }, // , /*TreeItem*/ scriptVar item); {L"onItemSelected", 1, (void*)GuiTreeScriptController::guitree_onItemSelected }, // , /*TreeItem*/ scriptVar item); {L"onItemDeselected", 1, (void*)GuiTreeScriptController::guitree_onItemDeselected }, // , /*TreeItem*/ scriptVar item); {L"onKillFocus", 0, (void*)GuiTreeScriptController::guitree_onKillFocus }, // ); {L"jumpToNext", 1, (void*)GuiTreeScriptController::guitree_jumpToNext }, // , /*Int*/ scriptVar c); {L"ensureItemVisible", 1, (void*)GuiTreeScriptController::guitree_ensureItemVisible }, // , /*TreeItem*/ scriptVar item); {L"getContentsWidth", 0, (void*)GuiTreeScriptController::guitree_getContentsWidth }, // ); {L"getContentsHeight", 0, (void*)GuiTreeScriptController::guitree_getContentsHeight }, // ); {L"addTreeItem", 4, (void*)GuiTreeScriptController::guitree_addTreeItem }, // , /*TreeItem*/ scriptVar item, /*TreeItem*/ scriptVar par, /*Int*/ scriptVar sorted, /*Int*/ scriptVar haschildtab); {L"removeTreeItem", 1, (void*)GuiTreeScriptController::guitree_removeTreeItem }, // , /*TreeItem*/ scriptVar item); {L"moveTreeItem", 2, (void*)GuiTreeScriptController::guitree_moveTreeItem }, // , /*TreeItem*/ scriptVar item, /*TreeItem*/ scriptVar newparent); {L"deleteAllItems", 0, (void*)GuiTreeScriptController::guitree_deleteAllItems }, // ); {L"expandItem", 1, (void*)GuiTreeScriptController::guitree_expandItem }, // , /*TreeItem*/ scriptVar item); {L"expandItemDeferred", 1, (void*)GuiTreeScriptController::guitree_expandItemDeferred }, // , /*TreeItem*/ scriptVar item); {L"collapseItem", 1, (void*)GuiTreeScriptController::guitree_collapseItem }, // , /*TreeItem*/ scriptVar item); {L"collapseItemDeferred", 1, (void*)GuiTreeScriptController::guitree_collapseItemDeferred }, // , /*TreeItem*/ scriptVar item); {L"selectItem", 1, (void*)GuiTreeScriptController::guitree_selectItem }, // , /*TreeItem*/ scriptVar item); {L"selectItemDeferred", 1, (void*)GuiTreeScriptController::guitree_selectItemDeferred }, // , /*TreeItem*/ scriptVar item); {L"delItemDeferred", 1, (void*)GuiTreeScriptController::guitree_delItemDeferred }, // , /*TreeItem*/ scriptVar item); {L"hiliteItem", 1, (void*)GuiTreeScriptController::guitree_hiliteItem }, // , /*TreeItem*/ scriptVar item); {L"unhiliteItem", 1, (void*)GuiTreeScriptController::guitree_unhiliteItem }, // , /*TreeItem*/ scriptVar item); {L"getCurItem", 0, (void*)GuiTreeScriptController::guitree_getCurItem }, // ); {L"hitTest", 2, (void*)GuiTreeScriptController::guitree_hitTest }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); {L"editItemLabel", 1, (void*)GuiTreeScriptController::guitree_editItemLabel }, // , /*TreeItem*/ scriptVar item); {L"cancelEditLabel", 1, (void*)GuiTreeScriptController::guitree_cancelEditLabel }, // , /*Int*/ scriptVar destroyit); {L"setAutoEdit", 1, (void*)GuiTreeScriptController::guitree_setAutoEdit }, // , /*Int*/ scriptVar ae); {L"getAutoEdit", 0, (void*)GuiTreeScriptController::guitree_getAutoEdit }, // ); {L"getByLabel", 2, (void*)GuiTreeScriptController::guitree_getByLabel }, // , /*TreeItem*/ scriptVar item, /*String*/ scriptVar name); {L"setSorted", 1, (void*)GuiTreeScriptController::guitree_setSorted }, // , /*Int*/ scriptVar dosort); {L"getSorted", 0, (void*)GuiTreeScriptController::guitree_getSorted }, // ); {L"sortTreeItems", 0, (void*)GuiTreeScriptController::guitree_sortTreeItems }, // ); {L"getSibling", 1, (void*)GuiTreeScriptController::guitree_getSibling }, // , /*TreeItem*/ scriptVar item); {L"setAutoCollapse", 1, (void*)GuiTreeScriptController::guitree_setAutoCollapse }, // , /*Int*/ scriptVar doautocollapse); {L"setFontSize", 1, (void*)GuiTreeScriptController::guitree_setFontSize }, // , /*Int*/ scriptVar newsize); {L"getFontSize", 0, (void*)GuiTreeScriptController::guitree_getFontSize }, // ); {L"getNumVisibleChildItems", 1, (void*)GuiTreeScriptController::guitree_getNumVisibleChildItems }, // , /*TreeItem*/ scriptVar c); {L"getNumVisibleItems", 0, (void*)GuiTreeScriptController::guitree_getNumVisibleItems }, // ); {L"enumVisibleItems", 1, (void*)GuiTreeScriptController::guitree_enumVisibleItems }, // , /*Int*/ scriptVar n); {L"enumVisibleChildItems", 2, (void*)GuiTreeScriptController::guitree_enumVisibleChildItems }, // , /*TreeItem*/ scriptVar c, /*Int*/ scriptVar n); {L"enumAllItems", 1, (void*)GuiTreeScriptController::guitree_enumAllItems }, // , /*Int*/ scriptVar n); {L"getItemRectX", 1, (void*)GuiTreeScriptController::guitree_getItemRectX }, // , /*TreeItem*/ scriptVar item); {L"getItemRectY", 1, (void*)GuiTreeScriptController::guitree_getItemRectY }, // , /*TreeItem*/ scriptVar item); {L"getItemRectW", 1, (void*)GuiTreeScriptController::guitree_getItemRectW }, // , /*TreeItem*/ scriptVar item); {L"getItemRectH", 1, (void*)GuiTreeScriptController::guitree_getItemRectH }, // , /*TreeItem*/ scriptVar item); // {L"getItemFromPoint", 2, (void*)GuiTreeScriptController::guitree_getItemFromPoint }, // , /*Int*/ scriptVar x, /*Int*/ scriptVar y); }; ScriptObject *GuiTreeScriptController::instantiate() { ScriptTree *sp = new ScriptTree; ASSERT(sp != NULL); return sp->getScriptObject(); } void GuiTreeScriptController::destroy(ScriptObject *o) { ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); ASSERT(sp != NULL); delete sp; } void *GuiTreeScriptController::encapsulate(ScriptObject *o) { return NULL; // no encapsulation for guitrees yet } void GuiTreeScriptController::deencapsulate(void *o) {} int GuiTreeScriptController::getNumFunctions() { return sizeof(exportedFunction) / sizeof(function_descriptor_struct); } const function_descriptor_struct *GuiTreeScriptController::getExportedFunctions() { return exportedFunction; } /*int*/ scriptVar GuiTreeScriptController::guitree_getNumRootItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int a = 0; if (sp != NULL) { a = sp->getNumRootItems(); } return MAKE_SCRIPT_INT(a); } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_enumRootItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar which) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; int _which = GET_SCRIPT_INT(which); a = sp->enumRootItem(_which); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_onLeftButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onLeftButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onRightButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onMouseMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_wantAutoContextMenu(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onLeftButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onRightButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onMouseWheelUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar clicked, /*Int*/ scriptVar lines) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, clicked, lines); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, clicked, lines); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onMouseWheelDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar clicked, /*Int*/ scriptVar lines) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, clicked, lines); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, clicked, lines); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onContextMenu(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar x, /*Int*/ scriptVar y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, x, y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, x, y); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onChar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar c) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, c); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, c); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onKeyDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*Int*/ scriptVar keycode) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, keycode); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, keycode); } /*Void*/ scriptVar GuiTreeScriptController::guitree_onItemRecvDrop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*TreeItem*/ scriptVar item) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, item); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, item); } /*Void*/ scriptVar GuiTreeScriptController::guitree_onLabelChange(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*TreeItem*/ scriptVar item) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, item); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, item); } /*Void*/ scriptVar GuiTreeScriptController::guitree_onItemSelected(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*TreeItem*/ scriptVar item) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, item); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, item); } /*Void*/ scriptVar GuiTreeScriptController::guitree_onItemDeselected(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*TreeItem*/ scriptVar item) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, item); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, item); } /*Int*/ scriptVar GuiTreeScriptController::guitree_onKillFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } // ------------------------------------------------------------------------- /*Void*/ scriptVar GuiTreeScriptController::guitree_jumpToNext(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _c = GET_SCRIPT_INT(c); if (sp != NULL) { sp->jumpToNext(_c); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_ensureItemVisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->ensureItemVisible(_item); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getContentsWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getContentsWidth(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getContentsHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getContentsHeight(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_addTreeItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item, scriptVar par, scriptVar sorted, scriptVar haschildtab) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_par = NULL; ScriptObject *so_par = GET_SCRIPT_OBJECT(par); if (so_par) { ScriptTreeItem *sti_par = static_cast(so_par->vcpu_getInterface(treeitemGuid)); if (sti_par) { _par = sti_par->getItem(); } } TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } int _haschildtab = GET_SCRIPT_INT(haschildtab); int _sorted = GET_SCRIPT_INT(sorted); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->addTreeItem(_item, _par, _sorted, _haschildtab); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_removeTreeItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->removeTreeItem(_item); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_moveTreeItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item, scriptVar newparent) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_newparent = NULL; ScriptObject *so_newparent = GET_SCRIPT_OBJECT(newparent); if (so_newparent) { ScriptTreeItem *sti_newparent = static_cast(so_newparent->vcpu_getInterface(treeitemGuid)); if (sti_newparent) { _newparent = sti_newparent->getItem(); } } TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->moveTreeItem(_item, _newparent); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_deleteAllItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); if (sp != NULL) { sp->deleteAllItems(); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_expandItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->expandItem(_item); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_expandItemDeferred(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->expandItemDeferred(_item); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_collapseItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->collapseItem(_item); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_collapseItemDeferred(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->collapseItemDeferred(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_selectItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->selectItem(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_selectItemDeferred(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->selectItemDeferred(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_delItemDeferred(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->delItemDeferred(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_hiliteItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->hiliteItem(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_unhiliteItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->unhiliteItem(_item); } RETURN_SCRIPT_VOID; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_getCurItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->getCurItem(); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_hitTest(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _y = GET_SCRIPT_INT(y); int _x = GET_SCRIPT_INT(x); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->hitTest(_x, _y); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_editItemLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } if (sp != NULL) { sp->editItemLabel(_item); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_cancelEditLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar destroyit) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _destroyit = GET_SCRIPT_INT(destroyit); if (sp != NULL) { sp->cancelEditLabel(_destroyit); } RETURN_SCRIPT_VOID; } /*Void*/ scriptVar GuiTreeScriptController::guitree_setAutoEdit(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar ae) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _ae = GET_SCRIPT_INT(ae); if (sp != NULL) { sp->setAutoEdit(_ae); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getAutoEdit(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getAutoEdit(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_getByLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item, /*String*/ scriptVar name) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } StringW _name = GET_SCRIPT_STRING(name); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->getByLabel(_item, _name); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_setSorted(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar dosort) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _dosort = GET_SCRIPT_INT(dosort); if (sp != NULL) { sp->setSorted(!!_dosort); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getSorted(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { int a = NULL; a = sp->getSorted(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_sortTreeItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); if (sp != NULL) { sp->sortTreeItems(); } RETURN_SCRIPT_VOID; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_getSibling(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->getSibling(_item); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Void*/ scriptVar GuiTreeScriptController::guitree_setAutoCollapse(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar doautocollapse) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _doautocollapse = GET_SCRIPT_INT(doautocollapse); if (sp != NULL) { sp->setAutoCollapse(!!_doautocollapse); } RETURN_SCRIPT_VOID; } /*Int*/ scriptVar GuiTreeScriptController::guitree_setFontSize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar newsize) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _newsize = GET_SCRIPT_INT(newsize); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->setFontSize(_newsize); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getFontSize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getFontSize(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getNumVisibleChildItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_c = NULL; ScriptObject *so_c = GET_SCRIPT_OBJECT(c); if (so_c) { ScriptTreeItem *sti_c = static_cast(so_c->vcpu_getInterface(treeitemGuid)); if (sti_c) { _c = sti_c->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getNumVisibleChildItems(_c); retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getNumVisibleItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; a = sp->getNumVisibleItems(); retval = MAKE_SCRIPT_INT(a); } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_enumVisibleItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _n = GET_SCRIPT_INT(n); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->enumVisibleItems(_n); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_enumVisibleChildItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c, scriptVar n) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_c = NULL; ScriptObject *so_c = GET_SCRIPT_OBJECT(c); if (so_c) { ScriptTreeItem *sti_c = static_cast(so_c->vcpu_getInterface(treeitemGuid)); if (sti_c) { _c = sti_c->getItem(); } } int _n = GET_SCRIPT_INT(n); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->enumVisibleChildItems(_c, _n); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_enumAllItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _n = GET_SCRIPT_INT(n); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; a = sp->enumAllItems(_n); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getItemRectX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; RECT r; sp->getItemRect(_item, &r); a = r.left; retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getItemRectY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; RECT r; sp->getItemRect(_item, &r); a = r.top; retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getItemRectW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; RECT r; sp->getItemRect(_item, &r); a = r.left - r.right; retval = MAKE_SCRIPT_INT(a); } return retval; } /*Int*/ scriptVar GuiTreeScriptController::guitree_getItemRectH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar item) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); TreeItem *_item = NULL; ScriptObject *so_item = GET_SCRIPT_OBJECT(item); if (so_item) { ScriptTreeItem *sti_item = static_cast(so_item->vcpu_getInterface(treeitemGuid)); if (sti_item) { _item = sti_item->getItem(); } } scriptVar retval = MAKE_SCRIPT_INT(0); if (sp != NULL) { int a = 0; RECT r; sp->getItemRect(_item, &r); a = r.bottom - r.top; retval = MAKE_SCRIPT_INT(a); } return retval; } #if 0 // Not implemented in TreeWnd, dammit. /*TreeItem*/ scriptVar GuiTreeScriptController::guitree_getItemFromPoint(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) { SCRIPT_FUNCTION_INIT ScriptTree *sp = static_cast(o->vcpu_getInterface(guitreeGuid)); int _y = GET_SCRIPT_INT(y); int _x = GET_SCRIPT_INT(x); scriptVar retval = MAKE_SCRIPT_OBJECT(NULL); if (sp != NULL) { TreeItem *a = NULL; POINT p = {_x, _y}; a = sp->getItemFromPoint(&p); if (a != NULL) { ScriptTreeItem *item = sp->bindScriptTreeItem(a); if (item != NULL) { retval = MAKE_SCRIPT_OBJECT(item->getScriptObject()); } } } return retval; } #endif // ----------------------------------------------------------------------- // Script Object For The Tree Item ScriptTreeItem::ScriptTreeItem(TreeItem *_item, ScriptTree *_tree) : item(_item), tree(_tree), SCRIPTTREEITEM_SCRIPTPARENT() { getScriptObject()->vcpu_setInterface(treeitemGuid, (void *)static_cast(this)); getScriptObject()->vcpu_setClassName(L"TreeItem"); getScriptObject()->vcpu_setController(treeItemController); } ScriptTreeItem::~ScriptTreeItem() {} int ScriptTreeItem::getNumChildren() { ASSERT(item); return item->getNumChildren(); } void ScriptTreeItem::setLabel(const wchar_t *label) { ASSERT(item); item->setLabel(label); } const wchar_t *ScriptTreeItem::getLabel() { ASSERT(item); return item->getLabel(); } void ScriptTreeItem::ensureVisible() { ASSERT(item); item->ensureVisible(); } TreeItem *ScriptTreeItem::getNthChild(int nth) { ASSERT(item); return item->getNthChild(nth); } TreeItem *ScriptTreeItem::getChild() { ASSERT(item); return item->getChild(); } TreeItem *ScriptTreeItem::getChildSibling(TreeItem *_item) { ASSERT(item); return item->getChildSibling(_item); } TreeItem *ScriptTreeItem::getSibling() { ASSERT(item); return item->getSibling(); } TreeItem *ScriptTreeItem::getParent() { ASSERT(item); return item->getParent(); } void ScriptTreeItem::editLabel() { ASSERT(item); item->editLabel(); } bool ScriptTreeItem::hasSubItems() { ASSERT(item); return item->hasSubItems(); } void ScriptTreeItem::setSorted(int issorted) { ASSERT(item); item->setSorted(issorted); } void ScriptTreeItem::setChildTab(int haschildtab) { ASSERT(item); item->setChildTab(haschildtab); } bool ScriptTreeItem::isSorted() { ASSERT(item); return item->isSorted(); } bool ScriptTreeItem::isCollapsed() { ASSERT(item); return item->isCollapsed(); } bool ScriptTreeItem::isExpanded() { ASSERT(item); return item->isExpanded(); } void ScriptTreeItem::invalidate() { ASSERT(item); item->invalidate(); } bool ScriptTreeItem::isSelected() { ASSERT(item); return item->isSelected(); } bool ScriptTreeItem::isHilited() { ASSERT(item); return item->isHilited(); } void ScriptTreeItem::setHilited(bool ishilited) { ASSERT(item); item->setHilited(ishilited); } int ScriptTreeItem::collapse() { ASSERT(item); return item->collapse(); } int ScriptTreeItem::expand() { ASSERT(item); return item->expand(); } #if 0 // This was never implemented! void ScriptTreeItem::setCurrent(bool tf) { ASSERT(item); item->setCurrent(tf); } #endif TreeWnd *ScriptTreeItem::getTree() { ASSERT(item); return item->getTree(); } // ----------------------------------------------------------------------- // Script Controller For The Tree Item TreeItemScriptController _treeItemController; TreeItemScriptController *treeItemController = &_treeItemController; // -- Functions table ------------------------------------- function_descriptor_struct TreeItemScriptController::exportedFunction[] = { {L"getNumChildren", 0, (void*)TreeItemScriptController::treeitem_getNumChildren }, {L"setLabel", 1, (void*)TreeItemScriptController::treeitem_setLabel }, {L"getLabel", 0, (void*)TreeItemScriptController::treeitem_getLabel }, {L"ensureVisible", 0, (void*)TreeItemScriptController::treeitem_ensureVisible }, {L"getNthChild", 1, (void*)TreeItemScriptController::treeitem_getNthChild }, {L"getChild", 0, (void*)TreeItemScriptController::treeitem_getChild }, {L"getChildSibling", 1, (void*)TreeItemScriptController::treeitem_getChildSibling }, {L"getSibling", 0, (void*)TreeItemScriptController::treeitem_getSibling }, {L"getParent", 0, (void*)TreeItemScriptController::treeitem_getParent }, {L"editLabel", 0, (void*)TreeItemScriptController::treeitem_editLabel }, {L"hasSubItems", 0, (void*)TreeItemScriptController::treeitem_hasSubItems }, {L"setSorted", 1, (void*)TreeItemScriptController::treeitem_setSorted }, {L"setChildTab", 1, (void*)TreeItemScriptController::treeitem_setChildTab }, {L"isSorted", 0, (void*)TreeItemScriptController::treeitem_isSorted }, {L"isCollapsed", 0, (void*)TreeItemScriptController::treeitem_isCollapsed }, {L"isExpanded", 0, (void*)TreeItemScriptController::treeitem_isExpanded }, {L"invalidate", 0, (void*)TreeItemScriptController::treeitem_invalidate }, {L"isSelected", 0, (void*)TreeItemScriptController::treeitem_isSelected }, {L"isHilited", 0, (void*)TreeItemScriptController::treeitem_isHilited }, {L"setHilited", 1, (void*)TreeItemScriptController::treeitem_setHilited }, {L"collapse", 0, (void*)TreeItemScriptController::treeitem_collapse }, {L"expand", 0, (void*)TreeItemScriptController::treeitem_expand }, {L"getTree", 0, (void*)TreeItemScriptController::treeitem_getTree }, {L"onTreeAdd", 0, (void*)TreeItemScriptController::treeitem_onTreeAdd }, {L"onTreeRemove", 0, (void*)TreeItemScriptController::treeitem_onTreeRemove }, {L"onSelect", 0, (void*)TreeItemScriptController::treeitem_onSelect }, {L"onDeselect", 0, (void*)TreeItemScriptController::treeitem_onDeselect }, {L"onLeftDoubleClick", 0, (void*)TreeItemScriptController::treeitem_onLeftDoubleClick }, {L"onRightDoubleClick", 0, (void*)TreeItemScriptController::treeitem_onRightDoubleClick }, {L"onChar", 1, (void*)TreeItemScriptController::treeitem_onChar }, {L"onExpand", 0, (void*)TreeItemScriptController::treeitem_onExpand }, {L"onCollapse", 0, (void*)TreeItemScriptController::treeitem_onCollapse }, {L"onBeginLabelEdit", 0, (void*)TreeItemScriptController::treeitem_onBeginLabelEdit }, {L"onEndLabelEdit", 1, (void*)TreeItemScriptController::treeitem_onEndLabelEdit }, {L"onContextMenu", 2, (void*)TreeItemScriptController::treeitem_onContextMenu }, }; StringW TreeItemScriptController::staticStr; ScriptTreeMap TreeItemScriptController::g_scriptitems; ScriptObject *TreeItemScriptController::instantiate() { ScriptTreeItem *sp = new ScriptTreeItem; ASSERT(sp != NULL); TreeItem *child_item = new TreeItemScript(L"", sp); ASSERT(child_item != NULL); sp->setItem(child_item); TISC::g_scriptitems.insert({ child_item, sp }); // We're not attached to a tree. that's okay! return sp->getScriptObject(); } // If the script asks to delete the item, delete the internal item as well. // We tell the owning ScriptTree to remove this object. void TreeItemScriptController::destroy(ScriptObject *o) { ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); ASSERT(sp != NULL); if (!sp->destroyScriptTreeItem()) { auto item = sp->getItem(); // Ask the owner tree to do it for us, but if not owned, we do it ourselves. if (item) { //TISC::g_scriptitems.delItem(sp->getItem()); auto it = TISC::g_scriptitems.find(item); if (TISC::g_scriptitems.end() != it) { TISC::g_scriptitems.erase(it); } } // AND we delete our item, since we're not a part of a tree that will do it for us. delete item; delete sp; } } void *TreeItemScriptController::encapsulate(ScriptObject *o) { return NULL; // no encapsulation for guitrees yet } void TreeItemScriptController::deencapsulate(void *o) {} int TreeItemScriptController::getNumFunctions() { return sizeof(exportedFunction) / sizeof(function_descriptor_struct); } const function_descriptor_struct *TreeItemScriptController::getExportedFunctions() { return exportedFunction; } /*int*/ scriptVar TreeItemScriptController::treeitem_getNumChildren(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->getNumChildren(); } return MAKE_SCRIPT_INT(a); } /*void*/ scriptVar TreeItemScriptController::treeitem_setLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar label) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); StringW _label = GET_SCRIPT_STRING(label); if (sp != NULL) { sp->setLabel(_label); } RETURN_SCRIPT_VOID; } /*String*/ scriptVar TreeItemScriptController::treeitem_getLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); if (sp != NULL) { staticStr = sp->getLabel(); } return MAKE_SCRIPT_STRING(staticStr); } /*void*/ scriptVar TreeItemScriptController::treeitem_ensureVisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); if (sp != NULL) { sp->ensureVisible(); } RETURN_SCRIPT_VOID; } /*TreeItem*/ scriptVar TreeItemScriptController::treeitem_getNthChild(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar nth) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int _nth = GET_SCRIPT_INT(nth); TreeItem *a = NULL; if (sp != NULL) { a = sp->getNthChild(_nth); } ScriptTree *tree = sp->getScriptTree(); ScriptTreeItem *retval = NULL; if (tree && a) { retval = tree->bindScriptTreeItem(a); } if (retval) { return MAKE_SCRIPT_OBJECT(retval->getScriptObject()); } return MAKE_SCRIPT_OBJECT(NULL); // Return NULL } /*TreeItem*/ scriptVar TreeItemScriptController::treeitem_getChild(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); TreeItem *a = NULL; if (sp != NULL) { a = sp->getChild(); } ScriptTree *tree = sp->getScriptTree(); ScriptTreeItem *retval = NULL; if (tree && a) { retval = tree->bindScriptTreeItem(a); } if (retval) { return MAKE_SCRIPT_OBJECT(retval->getScriptObject()); } return MAKE_SCRIPT_OBJECT(NULL); // Return NULL } /*TreeItem*/ scriptVar TreeItemScriptController::treeitem_getChildSibling(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*TreeItem*/ scriptVar _item) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); TreeItem *__item = NULL; ScriptObject *io = GET_SCRIPT_OBJECT(_item); if (io) { ScriptTreeItem *sio = static_cast(io->vcpu_getInterface(treeitemGuid)); if (sio) { __item = sio->getItem(); } } TreeItem *a = NULL; if (sp != NULL) { a = sp->getChildSibling(__item); } ScriptTree *tree = sp->getScriptTree(); ScriptTreeItem *retval = NULL; if (tree && a) { retval = tree->bindScriptTreeItem(a); } if (retval) { return MAKE_SCRIPT_OBJECT(retval->getScriptObject()); } return MAKE_SCRIPT_OBJECT(NULL); // Return NULL } /*TreeItem*/ scriptVar TreeItemScriptController::treeitem_getSibling(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); TreeItem *a = NULL; if (sp != NULL) { a = sp->getSibling(); } ScriptTree *tree = sp->getScriptTree(); ScriptTreeItem *retval = NULL; if (tree && a) { retval = tree->bindScriptTreeItem(a); } if (retval) { return MAKE_SCRIPT_OBJECT(retval->getScriptObject()); } return MAKE_SCRIPT_OBJECT(NULL); // Return NULL } /*TreeItem*/ scriptVar TreeItemScriptController::treeitem_getParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); TreeItem *a = NULL; if (sp != NULL) { a = sp->getParent(); } ScriptTree *tree = sp->getScriptTree(); ScriptTreeItem *retval = NULL; if (tree && a) { retval = tree->bindScriptTreeItem(a); } if (retval) { return MAKE_SCRIPT_OBJECT(retval->getScriptObject()); } return MAKE_SCRIPT_OBJECT(NULL); // Return NULL } /*void*/ scriptVar TreeItemScriptController::treeitem_editLabel(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); if (sp != NULL) { sp->editLabel(); } RETURN_SCRIPT_VOID; } /*int*/ scriptVar TreeItemScriptController::treeitem_hasSubItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->hasSubItems(); } return MAKE_SCRIPT_INT(a); } /*void*/ scriptVar TreeItemScriptController::treeitem_setSorted(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar issorted) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int _issorted = GET_SCRIPT_INT(issorted); if (sp != NULL) { sp->setSorted(_issorted); } RETURN_SCRIPT_VOID; } /*void*/ scriptVar TreeItemScriptController::treeitem_setChildTab(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar haschildtab) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int _haschildtab = GET_SCRIPT_INT(haschildtab); if (sp != NULL) { sp->setChildTab(_haschildtab); } RETURN_SCRIPT_VOID; } /*int*/ scriptVar TreeItemScriptController::treeitem_isSorted(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->isSorted(); } return MAKE_SCRIPT_INT(a); } /*int*/ scriptVar TreeItemScriptController::treeitem_isCollapsed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->isCollapsed(); } return MAKE_SCRIPT_INT(a); } /*int*/ scriptVar TreeItemScriptController::treeitem_isExpanded(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->isExpanded(); } return MAKE_SCRIPT_INT(a); } /*void*/ scriptVar TreeItemScriptController::treeitem_invalidate(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); if (sp != NULL) { sp->invalidate(); } RETURN_SCRIPT_VOID; } /*int*/ scriptVar TreeItemScriptController::treeitem_isSelected(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->isSelected(); } return MAKE_SCRIPT_INT(a); } /*int*/ scriptVar TreeItemScriptController::treeitem_isHilited(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->isHilited(); } return MAKE_SCRIPT_INT(a); } /*void*/ scriptVar TreeItemScriptController::treeitem_setHilited(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar ishilited) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int _ishilited = GET_SCRIPT_INT(ishilited); if (sp != NULL) { sp->setHilited(!!_ishilited); } RETURN_SCRIPT_VOID; } /*int*/ scriptVar TreeItemScriptController::treeitem_collapse(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->collapse(); } return MAKE_SCRIPT_INT(a); } /*int*/ scriptVar TreeItemScriptController::treeitem_expand(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int a = 0; if (sp != NULL) { a = sp->expand(); } return MAKE_SCRIPT_INT(a); } #if 0 // This was never implemented! /*void*/ scriptVar TreeItemScriptController::treeitem_setCurrent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar tf) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); int _tf = GET_SCRIPT_INT(tf); if (sp != NULL) { sp->setCurrent(_tf); } RETURN_SCRIPT_VOID; } #endif /*GuiTree*/ scriptVar TreeItemScriptController::treeitem_getTree(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT ScriptTreeItem *sp = static_cast(o->vcpu_getInterface(treeitemGuid)); ScriptTree *a = NULL; ScriptObject *retval = NULL; if (sp != NULL) { a = sp->getScriptTree(); } if (a) { retval = a->getScriptObject(); } return MAKE_SCRIPT_OBJECT(retval); } /*void*/ scriptVar TreeItemScriptController::treeitem_onTreeAdd(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*void*/ scriptVar TreeItemScriptController::treeitem_onTreeRemove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*void*/ scriptVar TreeItemScriptController::treeitem_onSelect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*void*/ scriptVar TreeItemScriptController::treeitem_onDeselect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*int*/ scriptVar TreeItemScriptController::treeitem_onLeftDoubleClick(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*int*/ scriptVar TreeItemScriptController::treeitem_onRightDoubleClick(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*int*/ scriptVar TreeItemScriptController::treeitem_onChar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar _key) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, _key); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, _key); } /*void*/ scriptVar TreeItemScriptController::treeitem_onExpand(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*void*/ scriptVar TreeItemScriptController::treeitem_onCollapse(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*int*/ scriptVar TreeItemScriptController::treeitem_onBeginLabelEdit(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS0(o, guiTreeController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } /*int*/ scriptVar TreeItemScriptController::treeitem_onEndLabelEdit(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar _newlabel) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS1(o, guiTreeController, _newlabel); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, _newlabel); } /*int*/ scriptVar TreeItemScriptController::treeitem_onContextMenu(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar _x, /*int*/ scriptVar _y) { SCRIPT_FUNCTION_INIT PROCESS_HOOKS2(o, guiTreeController, _x, _y); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT2(o, _x, _y); }