winamp/Src/Wasabi/api/skin/widgets/sstatus.cpp

173 lines
4.6 KiB
C++
Raw Normal View History

2024-09-24 14:54:57 +02:00
#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;
}