748 lines
24 KiB
C++
748 lines
24 KiB
C++
|
#include <precomp.h>
|
||
|
#include "dropdownlist.h"
|
||
|
#include <api/wnd/wndclass/listwnd.h>
|
||
|
#include <api/script/objects/guiobject.h>
|
||
|
#include <api/script/scriptguid.h>
|
||
|
#include <api/script/objects/c_script/c_text.h>
|
||
|
#include <api/wnd/popexitcb.h>
|
||
|
#include <api/wnd/notifmsg.h>
|
||
|
#include <api/service/svc_enum.h>
|
||
|
#include <bfc/parse/paramparser.h>
|
||
|
#include <api/service/svcs/svc_textfeed.h>
|
||
|
|
||
|
#define DDL_CLOSELISTCB 0x0721
|
||
|
|
||
|
XMLParamPair DropDownList::params[] =
|
||
|
{
|
||
|
{DROPDOWNLIST_SETFEED, L"FEED"},
|
||
|
{DROPDOWNLIST_SETITEMS, L"ITEMS"},
|
||
|
{DROPDOWNLIST_LISTHEIGHT, L"LISTHEIGHT"},
|
||
|
{DROPDOWNLIST_MAXITEMS, L"MAXITEMS"},
|
||
|
{DROPDOWNLIST_SELECT, L"SELECT"},
|
||
|
{DROPDOWNLIST_SETLISTANTIALIAS, L"ANTIALIAS"},
|
||
|
};
|
||
|
// -----------------------------------------------------------------------
|
||
|
DropDownList::DropDownList() {
|
||
|
selected = -1;
|
||
|
//abstract_setAllowDeferredContent(1);
|
||
|
clicks_button = NULL;
|
||
|
clicks_text = NULL;
|
||
|
list_key = NULL;
|
||
|
height = 128;
|
||
|
maxitems = 0;
|
||
|
noitemtext = L"";
|
||
|
list_group = NULL;
|
||
|
trap_click = 0;
|
||
|
disable_cfg_event = 0;
|
||
|
|
||
|
GuiObjectWnd::getScriptObject()->vcpu_setInterface(dropDownListGuid, (void *)static_cast<DropDownList *>(this));
|
||
|
GuiObjectWnd::getScriptObject()->vcpu_setClassName(L"DropDownList"); // this is the script class name
|
||
|
GuiObjectWnd::getScriptObject()->vcpu_setController(dropDownListController);
|
||
|
|
||
|
myxuihandle = newXuiHandle();
|
||
|
CreateXMLParameters(myxuihandle);
|
||
|
|
||
|
registerAcceleratorSection(L"popup", 1);
|
||
|
}
|
||
|
|
||
|
void DropDownList::CreateXMLParameters(int master_handle)
|
||
|
{
|
||
|
//DROPDOWNLIST_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);
|
||
|
}
|
||
|
// -----------------------------------------------------------------------
|
||
|
DropDownList::~DropDownList() {
|
||
|
doCloseList(0);
|
||
|
delete clicks_text;
|
||
|
delete clicks_button;
|
||
|
delete list_key;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onAcceleratorEvent(const wchar_t *name) {
|
||
|
int r = DROPDOWNLIST_PARENT::onAcceleratorEvent(name);
|
||
|
if (WCSCASEEQLSAFE(name, L"exit")) {
|
||
|
escapeCallback();
|
||
|
return 1;
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
|
||
|
if (xuihandle != myxuihandle)
|
||
|
return DROPDOWNLIST_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
|
||
|
|
||
|
switch (xmlattributeid) {
|
||
|
case DROPDOWNLIST_SETITEMS:
|
||
|
setItems(value);
|
||
|
break;
|
||
|
case DROPDOWNLIST_SETFEED:
|
||
|
setFeed(value);
|
||
|
break;
|
||
|
case DROPDOWNLIST_SELECT:
|
||
|
selectItem(findItem(value));
|
||
|
break;
|
||
|
case DROPDOWNLIST_LISTHEIGHT:
|
||
|
setListHeight(WTOI(value));
|
||
|
break;
|
||
|
case DROPDOWNLIST_MAXITEMS:
|
||
|
setMaxItems(WTOI(value));
|
||
|
break;
|
||
|
case DROPDOWNLIST_SETLISTANTIALIAS:
|
||
|
listAntialias = WTOI(value);
|
||
|
break;
|
||
|
default:
|
||
|
return 0;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onInit()
|
||
|
{
|
||
|
int rt = DROPDOWNLIST_PARENT::onInit();
|
||
|
abstract_setContent(dropdownlist_getMainGroupId());
|
||
|
return rt;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::abstract_onNewContent() {
|
||
|
DROPDOWNLIST_PARENT::abstract_onNewContent();
|
||
|
trapControls();
|
||
|
updateTextInControl(getSelectedText());
|
||
|
}
|
||
|
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onReloadConfig() {
|
||
|
int r = DROPDOWNLIST_PARENT::onReloadConfig();
|
||
|
disable_cfg_event = 1;
|
||
|
updateTextFromConfig(); // triggers onSelect
|
||
|
disable_cfg_event = 0;
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::updateTextFromConfig() {
|
||
|
const wchar_t *val = getGuiObject()->guiobject_getCfgString();
|
||
|
const wchar_t *old = getSelectedText();
|
||
|
if (old && val && !_wcsicmp(val, old)) return;
|
||
|
|
||
|
if (val != NULL) {
|
||
|
int id = findItem(val);
|
||
|
if (id != -1)
|
||
|
selectItem(id);
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::trapControls() {
|
||
|
delete clicks_button;
|
||
|
delete clicks_text;
|
||
|
|
||
|
clicks_button = NULL;
|
||
|
clicks_text = NULL;
|
||
|
|
||
|
if (wantTrapText()) {
|
||
|
GuiObject *textGuiObj = getGuiObject()->guiobject_findObject(dropdownlist_getTextId());
|
||
|
if (textGuiObj) clicks_text = new DDLClicksCallback(*textGuiObj, this);
|
||
|
}
|
||
|
|
||
|
if (wantTrapButton()) {
|
||
|
GuiObject *butGuiObj = getGuiObject()->guiobject_findObject(dropdownlist_getButtonId());
|
||
|
if (butGuiObj) clicks_button = new DDLClicksCallback(*butGuiObj, this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::clickCallback() {
|
||
|
if (list_group != NULL)
|
||
|
closeList();
|
||
|
else
|
||
|
openList();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::escapeCallback() {
|
||
|
if (isListOpen())
|
||
|
closeList();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::openList() {
|
||
|
onPreOpenList();
|
||
|
WASABI_API_WND->appdeactivation_push_disallow(this);
|
||
|
#ifdef WASABI_COMPILE_WNDMGR
|
||
|
list_group = WASABI_API_SKIN->group_create_layout(dropdownlist_getListGroupId());
|
||
|
#else
|
||
|
list_group = WASABI_API_SKIN->group_create(dropdownlist_getListGroupId());
|
||
|
#endif
|
||
|
group_dep = list_group->getDependencyPtr();
|
||
|
viewer_addViewItem(group_dep);
|
||
|
if (list_group == NULL) return;
|
||
|
list_group->setStartHidden(1);
|
||
|
list_group->setParent(WASABI_API_WND->main_getRootWnd());
|
||
|
trap_click = 0;
|
||
|
list_group->init(this, TRUE);
|
||
|
setListParams();
|
||
|
|
||
|
// At this point, the list should be good. Calc for max-items size
|
||
|
int calc_height = 0;
|
||
|
if (maxitems) {
|
||
|
ifc_window *listroot = list_group->findWindowByInterface(listGuid);
|
||
|
ListWnd *listwnd = static_cast<ListWnd *>(listroot->getInterface(guilistGuid));
|
||
|
GuiObject *listobj = listroot->getGuiObject();
|
||
|
if (listwnd) {
|
||
|
int numitems = 0;
|
||
|
if (maxitems == -1) {
|
||
|
numitems = listwnd->getNumItems();
|
||
|
} else {
|
||
|
numitems = MIN(maxitems, listwnd->getNumItems());
|
||
|
}
|
||
|
int offset_h = 0;
|
||
|
if (listobj) {
|
||
|
const wchar_t *y_param = listobj->guiobject_getXmlParam(L"y");
|
||
|
const wchar_t *h_param = listobj->guiobject_getXmlParam(L"h");
|
||
|
const wchar_t *ry_param = listobj->guiobject_getXmlParam(L"relaty");
|
||
|
const wchar_t *rh_param = listobj->guiobject_getXmlParam(L"relath");
|
||
|
int h_val = (h_param)?WTOI(h_param):0;
|
||
|
int y_val = (y_param)?WTOI(y_param):0;
|
||
|
if (ry_param && (wcscmp(ry_param, L"1") == 0)) {
|
||
|
if (y_val < 0) y_val = -y_val;
|
||
|
else y_val = 0;
|
||
|
}
|
||
|
if (rh_param && (wcscmp(rh_param, L"1") == 0)) {
|
||
|
if (h_val < 0) h_val = -h_val;
|
||
|
}
|
||
|
offset_h = h_val + y_val;
|
||
|
}
|
||
|
calc_height = (numitems * listwnd->getItemHeight()) + offset_h;
|
||
|
}
|
||
|
} else {
|
||
|
calc_height = height;
|
||
|
}
|
||
|
|
||
|
RECT r;
|
||
|
getWindowRect(&r);
|
||
|
r.top = r.bottom;
|
||
|
r.bottom = r.top + calc_height;
|
||
|
divRatio(&r);
|
||
|
list_group->resize(r.left, r.top, r.right-r.left, r.bottom-r.top);
|
||
|
list_group->setVisible(1);
|
||
|
WASABI_API_WND->popupexit_register(this, list_group); // this will call us back whenever someone clicks outside us
|
||
|
trap_click = 1;
|
||
|
listif = list_group->findWindowByInterface(listGuid);
|
||
|
if (listif != NULL)
|
||
|
list_key = new DDLKeyCallback(listif->getGuiObject()->guiobject_getScriptObject(), this);
|
||
|
dropdownlist_onOpenList();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::dropdownlist_onOpenList()
|
||
|
{
|
||
|
#ifdef _WIN32
|
||
|
SetCapture(NULL); // NONPORTABLE, the goal is to cancel any capture some of our content guiobject might have so as to let the click down + slide in list transfer mouse capture
|
||
|
#else
|
||
|
#warning port me?
|
||
|
#endif
|
||
|
setFocus();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::dropdownlist_onCloseList() {
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::closeList() {
|
||
|
if (list_group != NULL) {
|
||
|
onPreCloseList();
|
||
|
postDeferredCallback(DDL_CLOSELISTCB, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::doCloseList(int cb) {
|
||
|
if (cb) dropdownlist_onCloseList();
|
||
|
if (list_group) {
|
||
|
trap_click = 0;
|
||
|
WASABI_API_WND->popupexit_deregister(this);
|
||
|
WASABI_API_SKIN->group_destroy(list_group);
|
||
|
list_group = NULL;
|
||
|
group_dep = NULL;
|
||
|
action_list = NULL;
|
||
|
delete list_key;
|
||
|
list_key = NULL;
|
||
|
WASABI_API_WND->appdeactivation_pop_disallow(this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::setListParams() {
|
||
|
ASSERT(list_group != NULL);
|
||
|
GuiObject *go = static_cast<GuiObject *>(list_group->getInterface(guiObjectGuid));
|
||
|
if (go != NULL) {
|
||
|
dropdownlist_onConfigureList(go);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::dropdownlist_onConfigureList(GuiObject *go) {
|
||
|
XmlObject *o = NULL;
|
||
|
if (go != NULL) {
|
||
|
GuiObject *list = go->guiobject_findObject(dropdownlist_getListId());
|
||
|
if (list != NULL) {
|
||
|
action_list = list->guiobject_getRootWnd();
|
||
|
o = static_cast<XmlObject *>(list->guiobject_getScriptObject()->vcpu_getInterface(xmlObjectGuid));
|
||
|
}
|
||
|
}
|
||
|
StringW s;
|
||
|
foreach(items)
|
||
|
if (foreach_index > 0)
|
||
|
s += L";";
|
||
|
s += items.getfor()->getText();
|
||
|
endfor;
|
||
|
o->setXmlParam(L"multiselect", L"0");
|
||
|
o->setXmlParam(L"hoverselect", L"1");
|
||
|
o->setXmlParam(L"selectonupdown", L"0");
|
||
|
o->setXmlParam(L"sort", StringPrintfW(L"%d", wantAutoSort()));
|
||
|
o->setXmlParam(L"items", s);
|
||
|
o->setXmlParam(L"antialias", listAntialias ? L"1" : L"0");
|
||
|
if (selected != -1)
|
||
|
o->setXmlParam(L"select", getSelectedText());
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::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) {
|
||
|
if (WCSCASEEQLSAFE(action, L"set_selection")) {
|
||
|
int p = findItem(param);
|
||
|
selectItem(p);
|
||
|
return p;
|
||
|
}
|
||
|
if (WCSCASEEQLSAFE(action, L"get_selection")) {
|
||
|
if (source)
|
||
|
sendAction(source, L"set_selection", getSelectedText());
|
||
|
}
|
||
|
return DROPDOWNLIST_PARENT::onAction(action, param, x, y, p1, p2, data, datalen, source);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::addItem(const wchar_t *text) {
|
||
|
DDLEntry *e = new DDLEntry(text);
|
||
|
items.setSorted(wantAutoSort());
|
||
|
items.addItem(e);
|
||
|
return e->getId();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::selectDefault() {
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
onReloadConfig();
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::delItem(int id) {
|
||
|
foreach(items)
|
||
|
if (items.getfor()->getId() == id) {
|
||
|
delete items.getfor();
|
||
|
items.removeByPos(foreach_index);
|
||
|
break;
|
||
|
}
|
||
|
endfor;
|
||
|
if (list_group != NULL)
|
||
|
setListParams();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::selectItem(int id, int hover) {
|
||
|
//FG> DO NOT PUT THIS TEST BACK: if (selected == id) return;
|
||
|
selected = id;
|
||
|
onSelect(selected, hover);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::onSelect(int id, int hover) {
|
||
|
updateTextInControl(getSelectedText());
|
||
|
if (!disable_cfg_event && !hover) {
|
||
|
#ifdef WASABI_COMPILE_CONFIG
|
||
|
if (selected == -1)
|
||
|
getGuiObject()->guiobject_setCfgString(L"");
|
||
|
else
|
||
|
getGuiObject()->guiobject_setCfgString(getSelectedText());
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// Let the script have the callback, too.
|
||
|
DropDownListScriptController::DropDownList_onSelect(SCRIPT_CALL, GuiObjectWnd::getScriptObject(), MAKE_SCRIPT_INT(id), MAKE_SCRIPT_INT(hover));
|
||
|
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
const wchar_t *DropDownList::getItemText(int id) {
|
||
|
foreach(items)
|
||
|
if (items.getfor()->getId() == id)
|
||
|
return items.getfor()->getText();
|
||
|
endfor;
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::findItem(const wchar_t *text) {
|
||
|
int pos=-1;
|
||
|
items.findItem(text, &pos);
|
||
|
if (pos < 0) return -1;
|
||
|
return items[pos]->getId();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::updateTextInControl(const wchar_t *txt)
|
||
|
{
|
||
|
GuiObject *content = getContent();
|
||
|
if (content != NULL) {
|
||
|
if (wantTrapText()) {
|
||
|
GuiObject *text = content->guiobject_findObject(dropdownlist_getTextId());
|
||
|
if (text != NULL) {
|
||
|
C_Text t(*text);
|
||
|
t.setText(txt);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::setNoItemText(const wchar_t *txt)
|
||
|
{
|
||
|
noitemtext = txt;
|
||
|
if (selected == -1)
|
||
|
updateTextInControl(getSelectedText());
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::popupexitcb_onExitPopup() {
|
||
|
closeList();
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::childNotify(ifc_window *child, int msg, intptr_t param1, intptr_t param2) {
|
||
|
if (msg == ChildNotify::LISTWND_ITEMSELCHANGED && param2 && trap_click) {
|
||
|
sendAction(action_list, L"get_selection");
|
||
|
closeList();
|
||
|
}
|
||
|
return DROPDOWNLIST_PARENT::childNotify(child, msg, param1, param2);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onDeferredCallback(intptr_t p1, intptr_t p2) {
|
||
|
if (p1 == DDL_CLOSELISTCB)
|
||
|
doCloseList();
|
||
|
return DROPDOWNLIST_PARENT::onDeferredCallback(p1, p2);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::viewer_onItemDeleted(ifc_dependent *item) {
|
||
|
if (item == group_dep) {
|
||
|
WASABI_API_WND->popupexit_deregister(this);
|
||
|
trap_click = 0;
|
||
|
list_group = NULL;
|
||
|
group_dep = NULL;
|
||
|
action_list = NULL;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
|
||
|
void DropDownList::feedwatcher_onSetFeed(svc_textFeed *svc)
|
||
|
{
|
||
|
StringW a = getRootWndName();
|
||
|
if (a.isempty())
|
||
|
setName(svc->getFeedDescription(getFeedId()));
|
||
|
}
|
||
|
|
||
|
void DropDownList::feedwatcher_onFeedChange(const wchar_t *data)
|
||
|
{
|
||
|
setItems(data);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::deleteAllItems() {
|
||
|
items.deleteAll();
|
||
|
selected = -1;
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onKeyDown(int keyCode) {
|
||
|
#ifdef _WIN32
|
||
|
if (isListOpen()) {
|
||
|
switch (keyCode) {
|
||
|
case VK_ESCAPE:
|
||
|
closeList();
|
||
|
break;
|
||
|
}
|
||
|
if (listif != NULL) {
|
||
|
listif->onKeyDown(keyCode);
|
||
|
}
|
||
|
} else {
|
||
|
switch (keyCode) {
|
||
|
case VK_SPACE:
|
||
|
case VK_RETURN:
|
||
|
openList();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
#else
|
||
|
#warning port me
|
||
|
#endif
|
||
|
return DROPDOWNLIST_PARENT::onKeyDown(keyCode);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
int DropDownList::onKeyUp(int keyCode) {
|
||
|
if (isListOpen()) {
|
||
|
if (listif != NULL) {
|
||
|
listif->onKeyUp(keyCode);
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
return DROPDOWNLIST_PARENT::onKeyDown(keyCode);
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
void DropDownList::setItems(const wchar_t *value) {
|
||
|
deleteAllItems();
|
||
|
ParamParser pp(value);
|
||
|
for (int i=0;i<pp.getNumItems();i++) {
|
||
|
addItem(pp.enumItem(i));
|
||
|
}
|
||
|
selectDefault();
|
||
|
}
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
|
||
|
int DDLEntry::id_gen=0;
|
||
|
|
||
|
|
||
|
// -----------------------------------------------------------------------
|
||
|
// Script Object
|
||
|
|
||
|
DropDownListScriptController _dropDownListController;
|
||
|
DropDownListScriptController *dropDownListController = &_dropDownListController;
|
||
|
|
||
|
// -- Functions table -------------------------------------
|
||
|
function_descriptor_struct DropDownListScriptController::exportedFunction[] = {
|
||
|
{L"getItemSelected", 0, (void*)DropDownListScriptController::DropDownList_getItemSelected},
|
||
|
{L"onSelect", 2, (void*)DropDownListScriptController::DropDownList_onSelect},
|
||
|
|
||
|
{L"setListHeight", 1, (void*)DropDownListScriptController::DropDownList_setListHeight},
|
||
|
{L"openList", 0, (void*)DropDownListScriptController::DropDownList_openList},
|
||
|
{L"closeList", 0, (void*)DropDownListScriptController::DropDownList_closeList},
|
||
|
{L"setItems", 1, (void*)DropDownListScriptController::DropDownList_setItems},
|
||
|
{L"addItem", 1, (void*)DropDownListScriptController::DropDownList_addItem},
|
||
|
{L"delItem", 1, (void*)DropDownListScriptController::DropDownList_delItem},
|
||
|
{L"findItem", 1, (void*)DropDownListScriptController::DropDownList_findItem},
|
||
|
{L"getNumItems", 0, (void*)DropDownListScriptController::DropDownList_getNumItems},
|
||
|
{L"selectItem", 2, (void*)DropDownListScriptController::DropDownList_selectItem},
|
||
|
{L"getItemText", 1, (void*)DropDownListScriptController::DropDownList_getItemText},
|
||
|
{L"getSelected", 0, (void*)DropDownListScriptController::DropDownList_getSelected},
|
||
|
{L"getSelectedText", 0, (void*)DropDownListScriptController::DropDownList_getSelectedText},
|
||
|
{L"getCustomText", 0, (void*)DropDownListScriptController::DropDownList_getCustomText},
|
||
|
{L"deleteAllItems", 0, (void*)DropDownListScriptController::DropDownList_deleteAllItems},
|
||
|
{L"setNoItemText", 1, (void*)DropDownListScriptController::DropDownList_setNoItemText},
|
||
|
};
|
||
|
|
||
|
ScriptObject *DropDownListScriptController::instantiate() {
|
||
|
DropDownList *ddl = new DropDownList;
|
||
|
ASSERT(ddl != NULL);
|
||
|
return ddl->GuiObjectWnd::getScriptObject();
|
||
|
}
|
||
|
|
||
|
void DropDownListScriptController::destroy(ScriptObject *o) {
|
||
|
DropDownList *ddl= static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
ASSERT(ddl != NULL);
|
||
|
delete ddl;
|
||
|
}
|
||
|
|
||
|
void *DropDownListScriptController::encapsulate(ScriptObject *o) {
|
||
|
return NULL; // no encapsulation for DropDownlist yet
|
||
|
}
|
||
|
|
||
|
void DropDownListScriptController::deencapsulate(void *o) {
|
||
|
}
|
||
|
|
||
|
int DropDownListScriptController::getNumFunctions() {
|
||
|
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
||
|
}
|
||
|
|
||
|
const function_descriptor_struct *DropDownListScriptController::getExportedFunctions() {
|
||
|
return exportedFunction;
|
||
|
}
|
||
|
|
||
|
|
||
|
scriptVar DropDownListScriptController::DropDownList_getItemSelected(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList*>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
const wchar_t *p=L"";
|
||
|
if (ddl) p = ddl->getSelectedText();
|
||
|
|
||
|
|
||
|
return MAKE_SCRIPT_STRING(p);
|
||
|
}
|
||
|
|
||
|
scriptVar DropDownListScriptController::DropDownList_onSelect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar id, scriptVar hover) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
PROCESS_HOOKS2(o, dropDownListController, id, hover);
|
||
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
||
|
SCRIPT_EXEC_EVENT2(o, id, hover);
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_setListHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar h) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->setListHeight(GET_SCRIPT_INT(h));
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_openList(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->openList();
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_closeList(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->closeList();
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_setItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar lotsofitems) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->setItems(GET_SCRIPT_STRING(lotsofitems));
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*int*/ scriptVar DropDownListScriptController::DropDownList_addItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar text) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
int retval = 0;
|
||
|
if (ddl)
|
||
|
{
|
||
|
retval = ddl->addItem(GET_SCRIPT_STRING(text));
|
||
|
}
|
||
|
return MAKE_SCRIPT_INT(retval);
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_delItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar id) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->delItem(GET_SCRIPT_INT(id));
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*int*/ scriptVar DropDownListScriptController::DropDownList_findItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar text) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
int retval = 0;
|
||
|
if (ddl) {
|
||
|
retval = ddl->findItem(GET_SCRIPT_STRING(text));
|
||
|
}
|
||
|
return MAKE_SCRIPT_INT(retval);
|
||
|
}
|
||
|
|
||
|
/*int*/ scriptVar DropDownListScriptController::DropDownList_getNumItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
int retval = 0;
|
||
|
if (ddl) {
|
||
|
retval = ddl->getNumItems();
|
||
|
}
|
||
|
return MAKE_SCRIPT_INT(retval);
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_selectItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar id, /*int*/ scriptVar hover) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->selectItem(GET_SCRIPT_INT(id), GET_SCRIPT_INT(hover));
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*String*/ scriptVar DropDownListScriptController::DropDownList_getItemText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*int*/ scriptVar id) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
const wchar_t *retval = L"";
|
||
|
if (ddl) {
|
||
|
retval = ddl->getItemText(GET_SCRIPT_INT(id));
|
||
|
}
|
||
|
return MAKE_SCRIPT_STRING(retval);
|
||
|
}
|
||
|
|
||
|
/*int*/ scriptVar DropDownListScriptController::DropDownList_getSelected(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
int retval = 0;
|
||
|
if (ddl) {
|
||
|
retval = ddl->getSelected();
|
||
|
}
|
||
|
return MAKE_SCRIPT_INT(retval);
|
||
|
}
|
||
|
|
||
|
/*String*/ scriptVar DropDownListScriptController::DropDownList_getSelectedText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
const wchar_t *retval = L"";
|
||
|
if (ddl) {
|
||
|
retval = ddl->getSelectedText();
|
||
|
}
|
||
|
return MAKE_SCRIPT_STRING(retval);
|
||
|
}
|
||
|
|
||
|
/*String*/ scriptVar DropDownListScriptController::DropDownList_getCustomText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
const wchar_t *retval=L"";
|
||
|
if (ddl) {
|
||
|
retval = ddl->getCustomText();
|
||
|
}
|
||
|
return MAKE_SCRIPT_STRING(retval);
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_deleteAllItems(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->deleteAllItems();
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|
||
|
/*void*/ scriptVar DropDownListScriptController::DropDownList_setNoItemText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, /*String*/ scriptVar txt) {
|
||
|
SCRIPT_FUNCTION_INIT
|
||
|
DropDownList *ddl = static_cast<DropDownList *>(o->vcpu_getInterface(dropDownListGuid));
|
||
|
if (ddl) {
|
||
|
ddl->setNoItemText(GET_SCRIPT_STRING(txt));
|
||
|
}
|
||
|
RETURN_SCRIPT_VOID;
|
||
|
}
|
||
|
|