Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
747
Src/Wasabi/api/skin/widgets/dropdownlist.cpp
Normal file
747
Src/Wasabi/api/skin/widgets/dropdownlist.cpp
Normal file
|
@ -0,0 +1,747 @@
|
|||
#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;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue