mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-10 11:59:58 -05:00
Initial community commit
This commit is contained in:
217
Src/Wasabi/api/skin/widgets/xuitabsheet.cpp
Normal file
217
Src/Wasabi/api/skin/widgets/xuitabsheet.cpp
Normal file
@@ -0,0 +1,217 @@
|
||||
#include <precomp.h>
|
||||
#include "xuitabsheet.h"
|
||||
#include <bfc/parse/paramparser.h>
|
||||
static ScriptTabSheetController TabsheetController;
|
||||
ScriptTabSheetController *tabsheetController=&TabsheetController;
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
const wchar_t ScriptTabSheetXuiObjectStr[] = L"Wasabi:TabSheet"; // This is the xml tag
|
||||
char ScriptTabSheetXuiSvcName[] = "Wasabi:TabSheet xui object";
|
||||
|
||||
XMLParamPair ScriptTabSheet::params[] = {
|
||||
|
||||
{SCRIPTTABSHEET_SETCHILDREN, L"CHILDREN"},
|
||||
{SCRIPTTABSHEET_SETCONTENTMARGINBOTTOM, L"CONTENT_MARGIN_BOTTOM"},
|
||||
{SCRIPTTABSHEET_SETCONTENTMARGINLEFT, L"CONTENT_MARGIN_LEFT"},
|
||||
{SCRIPTTABSHEET_SETCONTENTMARGINRIGHT, L"CONTENT_MARGIN_RIGHT"},
|
||||
{SCRIPTTABSHEET_SETCONTENTMARGINTOP, L"CONTENT_MARGIN_TOP"},
|
||||
{SCRIPTTABSHEET_SETTYPE, L"TYPE"},
|
||||
{SCRIPTTABSHEET_SETWINDOWTYPE, L"WINDOWTYPE"},
|
||||
};
|
||||
// -----------------------------------------------------------------------
|
||||
ScriptTabSheet::ScriptTabSheet() : TypeSheet(0) {
|
||||
getScriptObject()->vcpu_setInterface(tabsheetGuid, (void *)static_cast<ScriptTabSheet*>(this));
|
||||
getScriptObject()->vcpu_setClassName(L"TabSheet"); // this is the script class name
|
||||
getScriptObject()->vcpu_setController(tabsheetController);
|
||||
|
||||
myxuihandle = newXuiHandle();
|
||||
CreateXMLParameters(myxuihandle);
|
||||
|
||||
wndtype = 0;
|
||||
type = TABSHEET_GROUPS;
|
||||
left_margin = right_margin = bottom_margin = top_margin = 0;
|
||||
}
|
||||
|
||||
void ScriptTabSheet::CreateXMLParameters(int master_handle)
|
||||
{
|
||||
//SCRIPTTABSHEET_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);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
ScriptTabSheet::~ScriptTabSheet() {
|
||||
children_id.deleteAll();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ScriptTabSheet::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value)
|
||||
{
|
||||
if (xuihandle != myxuihandle)
|
||||
return SCRIPTTABSHEET_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
|
||||
|
||||
switch (xmlattributeid)
|
||||
{
|
||||
case SCRIPTTABSHEET_SETWINDOWTYPE:
|
||||
setWindowType(value);
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETCHILDREN:
|
||||
setChildrenIds(value);
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETTYPE:
|
||||
setType(value);
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINLEFT:
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINTOP:
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINRIGHT:
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINBOTTOM:
|
||||
setContentMarginX(value, xmlattributeid);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ScriptTabSheet::setWindowType(const wchar_t *paramvalue) {
|
||||
if (WCSEQLSAFE(wndtype, paramvalue)) return;
|
||||
wndtype = paramvalue;
|
||||
reloadChildren();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ScriptTabSheet::setChildrenIds(const wchar_t *paramvalue) {
|
||||
if (WCSEQLSAFE(paramvalue, L"")) {
|
||||
children_id.removeAll();
|
||||
}
|
||||
ParamParser pp(paramvalue);
|
||||
for (int i=0;i<pp.getNumItems();i++)
|
||||
children_id.addItem(new StringW(pp.enumItem(i)));
|
||||
reloadChildren();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ScriptTabSheet::setType(const wchar_t *paramvalue) {
|
||||
int ttype = WTOI(paramvalue);
|
||||
if (type == ttype) return;
|
||||
type = ttype;
|
||||
setButtonType(type);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ScriptTabSheet::reloadChildren() {
|
||||
if (!isInited()) return;
|
||||
killChildren();
|
||||
for (int i=0;i<children_id.getNumItems();i++) {
|
||||
GuiObjectWnd *w = new GuiObjectWnd;
|
||||
//w->abstract_setAllowDeferredContent(1);
|
||||
w->setContent(children_id.enumItem(i)->getValue());
|
||||
addChild(w);
|
||||
}
|
||||
TypeSheet::setWindowType(wndtype);
|
||||
if (!wndtype.isempty())
|
||||
TypeSheet::load();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ScriptTabSheet::onInit() {
|
||||
int r = SCRIPTTABSHEET_PARENT::onInit();
|
||||
setButtonType(type);
|
||||
reloadChildren();
|
||||
return r;
|
||||
}
|
||||
|
||||
void ScriptTabSheet::setContentMarginX(const wchar_t *value, int what) {
|
||||
switch (what) {
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINLEFT:
|
||||
setContentMarginLeft(WTOI(value));
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINTOP:
|
||||
setContentMarginTop(WTOI(value));
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINRIGHT:
|
||||
setContentMarginRight(WTOI(value));
|
||||
break;
|
||||
case SCRIPTTABSHEET_SETCONTENTMARGINBOTTOM:
|
||||
setContentMarginBottom(WTOI(value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Script Object
|
||||
|
||||
// -- Functions table -------------------------------------
|
||||
function_descriptor_struct ScriptTabSheetController::exportedFunction[] = {
|
||||
{L"getCurPage", 0, (void*)ScriptTabSheetController::tabsheet_getCurPage },
|
||||
{L"setCurPage", 1, (void*)ScriptTabSheetController::tabsheet_setCurPage },
|
||||
};
|
||||
|
||||
ScriptObject *ScriptTabSheetController::instantiate() {
|
||||
ScriptTabSheet *sts = new ScriptTabSheet;
|
||||
ASSERT(sts != NULL);
|
||||
return sts->getScriptObject();
|
||||
}
|
||||
|
||||
void ScriptTabSheetController::destroy(ScriptObject *o) {
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
ASSERT(sts != NULL);
|
||||
delete sts;
|
||||
}
|
||||
|
||||
void *ScriptTabSheetController::encapsulate(ScriptObject *o) {
|
||||
return NULL; // no encapsulation for tabsheet yet
|
||||
}
|
||||
|
||||
void ScriptTabSheetController::deencapsulate(void *o) {
|
||||
}
|
||||
|
||||
int ScriptTabSheetController::getNumFunctions() {
|
||||
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
||||
}
|
||||
|
||||
const function_descriptor_struct *ScriptTabSheetController::getExportedFunctions() {
|
||||
return exportedFunction;
|
||||
}
|
||||
|
||||
|
||||
scriptVar ScriptTabSheetController::tabsheet_getCurPage(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
int a = 0;
|
||||
if (sts) a = sts->getCurPage();
|
||||
return MAKE_SCRIPT_INT(a);
|
||||
}
|
||||
|
||||
scriptVar ScriptTabSheetController::tabsheet_getNumPages(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
int a = 0;
|
||||
if (sts) a = sts->getNumPages();
|
||||
return MAKE_SCRIPT_INT(a);
|
||||
}
|
||||
|
||||
scriptVar ScriptTabSheetController::tabsheet_setCurPage(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a) {
|
||||
SCRIPT_FUNCTION_INIT
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
int _a = GET_SCRIPT_INT(a);
|
||||
if (sts) sts->setCurPage(_a);
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
||||
|
||||
scriptVar ScriptTabSheetController::tabsheet_nextPage(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
if (sts) sts->nextPage();
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
||||
|
||||
scriptVar ScriptTabSheetController::tabsheet_previousPage(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
||||
SCRIPT_FUNCTION_INIT
|
||||
ScriptTabSheet *sts = static_cast<ScriptTabSheet *>(o->vcpu_getInterface(tabsheetGuid));
|
||||
if (sts) sts->previousPage();
|
||||
RETURN_SCRIPT_VOID;
|
||||
}
|
Reference in New Issue
Block a user