diff options
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/sstatus.cpp')
-rw-r--r-- | Src/Wasabi/api/skin/widgets/sstatus.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/sstatus.cpp b/Src/Wasabi/api/skin/widgets/sstatus.cpp new file mode 100644 index 00000000..e17d4da2 --- /dev/null +++ b/Src/Wasabi/api/skin/widgets/sstatus.cpp @@ -0,0 +1,172 @@ +#include <precomp.h> +#include <api/wndmgr/layout.h> +#include "sstatus.h" +#include <api/core/api_core.h> + +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<SStatus *>(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<SStatus*>(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; +} + |