#include #include #include "sstatus.h" #include const wchar_t statusXuiStr[] = L"Status"; // This is the xml tag char statusXuiSvcName[] = "Status xui object"; // this is the name of the xuiservice XMLParamPair SStatus::params[] = { {SSTATUS_SETPLAYBITMAP, L"PLAYBITMAP"}, {SSTATUS_SETSTOPBITMAP, L"STOPBITMAP"}, {SSTATUS_SETPAUSEBITMAP, L"PAUSEBITMAP"}, }; SStatus::SStatus() { getScriptObject()->vcpu_setInterface(statusGuid, (void *)static_cast(this)); getScriptObject()->vcpu_setClassName(L"Status"); getScriptObject()->vcpu_setController(statusController); currentStatus = -666; xuihandle = newXuiHandle(); CreateXMLParameters(xuihandle); } void SStatus::CreateXMLParameters(int master_handle) { //SSTATUS_PARENT::CreateXMLParameters(master_handle); int numParams = sizeof(params) / sizeof(params[0]); hintNumberOfParams(xuihandle, numParams); for (int i = 0;i < numParams;i++) addParam(xuihandle, params[i], XUI_ATTRIBUTE_IMPLIED); } SStatus::~SStatus() { WASABI_API_MEDIACORE->core_delCallback(0, this); } int SStatus::setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *strval) { if (_xuihandle != xuihandle) return SSTATUS_PARENT::setXuiParam(_xuihandle, attrid, name, strval); switch (attrid) { case SSTATUS_SETPLAYBITMAP: setPlayBitmap(strval); break; case SSTATUS_SETSTOPBITMAP: setStopBitmap(strval); break; case SSTATUS_SETPAUSEBITMAP: setPauseBitmap(strval); break; default: return 0; } return 1; } int SStatus::getPreferences(int what) { if (what == SUGGESTED_W) return getWidth(); if (what == SUGGESTED_H) return getHeight(); return SSTATUS_PARENT::getPreferences(what); } int SStatus::getWidth() { if (!playBitmap.getBitmap()) return 16; return playBitmap.getWidth(); } int SStatus::getHeight() { if (!playBitmap.getBitmap()) return 16; return playBitmap.getHeight(); } int SStatus::onInit() { SSTATUS_PARENT::onInit(); WASABI_API_MEDIACORE->core_addCallback(0, this); currentStatus=WASABI_API_MEDIACORE->core_getStatus(0); return 1; } int SStatus::onPaint(Canvas *canvas) { PaintBltCanvas paintcanvas; if (canvas == NULL) { if (!paintcanvas.beginPaint(this)) return 0; canvas = &paintcanvas; } SSTATUS_PARENT::onPaint(canvas); RECT r; getClientRect(&r); AutoSkinBitmap *rb = NULL; switch(currentStatus) { case -1: rb = &pauseBitmap; break; case 0: rb = &stopBitmap; break; case 1: rb = &playBitmap; break; } if (rb != NULL && rb->getBitmap() != NULL) rb->stretchToRect(canvas, &r); return 1; } int SStatus::corecb_onStarted() { currentStatus=1; invalidate(); return 0; } int SStatus::corecb_onStopped() { currentStatus=0; invalidate(); return 0; } int SStatus::corecb_onPaused() { currentStatus=-1; invalidate(); return 0; } int SStatus::corecb_onUnpaused() { currentStatus=1; invalidate(); return 0; } void SStatus::setPlayBitmap(const wchar_t *name) { playBitmap=name; } void SStatus::setPauseBitmap(const wchar_t *name) { pauseBitmap=name; } void SStatus::setStopBitmap(const wchar_t *name) { stopBitmap=name; } StatusScriptController _statusController; StatusScriptController *statusController=&_statusController; // -- Functions table ------------------------------------- function_descriptor_struct StatusScriptController::exportedFunction[] = { {L"fake", 0, (void*)SStatus::script_vcpu_fake }, }; // -------------------------------------------------------- const wchar_t *StatusScriptController::getClassName() { return L"Status"; } const wchar_t *StatusScriptController::getAncestorClassName() { return L"GuiObject"; } ScriptObject *StatusScriptController::instantiate() { SStatus *st = new SStatus; ASSERT(st != NULL); return st->getScriptObject(); } void StatusScriptController::destroy(ScriptObject *o) { SStatus *st = static_cast(o->vcpu_getInterface(statusGuid)); ASSERT(st != NULL); delete st; } void *StatusScriptController::encapsulate(ScriptObject *o) { return NULL; // no encapsulation for status yet } void StatusScriptController::deencapsulate(void *o) { } int StatusScriptController::getNumFunctions() { return sizeof(exportedFunction) / sizeof(function_descriptor_struct); } const function_descriptor_struct *StatusScriptController::getExportedFunctions() { return exportedFunction; } GUID StatusScriptController::getClassGuid() { return statusGuid; } scriptVar SStatus::script_vcpu_fake(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT RETURN_SCRIPT_VOID; }