winamp/Src/Wasabi/api/skin/widgets/db/xuiquerylist.cpp
2024-09-24 14:54:57 +02:00

120 lines
4.1 KiB
C++

#include <precomp.h>
#include "xuiquerylist.h"
#include <tataki/canvas/ifc_canvas.h>
#include <api/service/svcs/svc_objectdir.h>
// -----------------------------------------------------------------------
char QueryListXuiObjectStr[] = "QueryResults"; // This is the xml tag
char QueryListXuiSvcName[] = "ScriptQueryResults xui object";
XMLParamPair ScriptQueryList::params[] = {
{QUERYLIST_SETTITLE, "TITLE"},
};
// -----------------------------------------------------------------------
ScriptQueryList::ScriptQueryList() {
getScriptObject()->vcpu_setInterface(queryListGuid, (void *)static_cast<ScriptQueryList *>(this));
#ifdef WASABI_COMPILE_METADB
getScriptObject()->vcpu_setInterface(multiQueryServerGuid, (void *)static_cast<MultiQueryServer *>(this));
#endif
getScriptObject()->vcpu_setClassName("QueryList"); // this is the script class name
getScriptObject()->vcpu_setController(queryListController);
myxuihandle = newXuiHandle();
int numParams = sizeof(params) / sizeof(params[0]);
hintNumberOfParams(numParams);
for (int i = 0;i < numParams;i++)
addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
}
ScriptQueryList::~ScriptQueryList() {
}
// -----------------------------------------------------------------------
int ScriptQueryList::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
if (xuihandle != myxuihandle)
return QUERYLIST_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
switch (xmlattributeid) {
case QUERYLIST_SETTITLE: setTitle(value); break;
default: return 0;
}
return 1;
}
// -----------------------------------------------------------------------
void ScriptQueryList::setTitle(const char *name) {
setName(name);
//CUT if (!name || !*name) showLabel(0); else showLabel(1);
}
#ifdef WASABI_COMPILE_METADB
// -----------------------------------------------------------------------
void ScriptQueryList::onResetSubqueries() {
QUERYLIST_PARENT::onResetSubqueries();
QueryListScriptController::querylist_onResetQuery(SCRIPT_CALL, getScriptObject());
}
#endif
#ifdef WASABI_COMPILE_METADB
int ScriptQueryList::onAction(const char *action, const char *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, api_window *source) {
if (STRCASEEQLSAFE(action, "SAVEQUERY")) {
String q = mqs_getMultiQuery();
if (!q.isempty()) {
svc_objectDir *qd = ObjectDirEnum("querydir").getNext();
if (qd != NULL) {
qd->insertObject(q, "gay", "user is gay");
}
}
return 1;
}
return QUERYLIST_PARENT::onAction(action, param, x, y, p1, p2, data, datalen, source);
}
#endif
// -----------------------------------------------------------------------
// Script Object
QueryListScriptController _queryListController;
QueryListScriptController *queryListController = &_queryListController;
// -- Functions table -------------------------------------
function_descriptor_struct QueryListScriptController::exportedFunction[] = {
{"onResetQuery", 0, (void*)QueryListScriptController::querylist_onResetQuery},
};
ScriptObject *QueryListScriptController::instantiate() {
ScriptQueryList *sql = new ScriptQueryList;
ASSERT(sql != NULL);
return sql->getScriptObject();
}
void QueryListScriptController::destroy(ScriptObject *o) {
ScriptQueryList *sql = static_cast<ScriptQueryList *>(o->vcpu_getInterface(queryListGuid));
ASSERT(sql != NULL);
delete sql;
}
void *QueryListScriptController::encapsulate(ScriptObject *o) {
return NULL; // no encapsulation for querylist yet
}
void QueryListScriptController::deencapsulate(void *o) {
}
int QueryListScriptController::getNumFunctions() {
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
}
const function_descriptor_struct *QueryListScriptController::getExportedFunctions() {
return exportedFunction;
}
scriptVar QueryListScriptController::querylist_onResetQuery(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
SCRIPT_FUNCTION_INIT;
PROCESS_HOOKS0(o, queryListController);
SCRIPT_FUNCTION_CHECKABORTEVENT;
SCRIPT_EXEC_EVENT0(o);
}