Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
162
Src/Wasabi/api/skin/widgets/xuiprogressgrid.cpp
Normal file
162
Src/Wasabi/api/skin/widgets/xuiprogressgrid.cpp
Normal file
|
@ -0,0 +1,162 @@
|
|||
#include <precomp.h>
|
||||
#include "xuiprogressgrid.h"
|
||||
#include <tataki/canvas/ifc_canvas.h>
|
||||
#include <bfc/string/stringdict.h>
|
||||
#include <api/core/api_core.h>
|
||||
|
||||
#define ProgressGrid_TIMER_POS 1
|
||||
#define PROGRESSGRID_INTERVAL 500
|
||||
|
||||
#ifndef _WASABIRUNTIME
|
||||
|
||||
BEGIN_SERVICES(ProgressGrid_Svc);
|
||||
DECLARE_SERVICE(XuiObjectCreator<ProgressGridXuiSvc>);
|
||||
END_SERVICES(ProgressGrid_Svc, _ProgressGrid_Svc);
|
||||
|
||||
#ifdef _X86_
|
||||
extern "C" { int _link_ProgressGridXuiSvc; }
|
||||
#else
|
||||
extern "C" { int __link_ProgressGridXuiSvc; }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
BEGIN_STRINGDICTIONARY(_pgorientationvalues)
|
||||
SDI(L"top", PROGRESSGRID_TOP);
|
||||
SDI(L"left", PROGRESSGRID_LEFT);
|
||||
SDI(L"right", PROGRESSGRID_RIGHT);
|
||||
SDI(L"bottom", PROGRESSGRID_BOTTOM);
|
||||
END_STRINGDICTIONARY(_pgorientationvalues, pgorientationvalues)
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
const wchar_t ProgressGridXuiObjectStr[] = L"ProgressGrid"; // xml tag
|
||||
char ProgressGridXuiSvcName[] = "ProgressGrid xui object";
|
||||
XMLParamPair ProgressGrid::params[] = {
|
||||
{ PROGRESSGRID_SETORIENTATION, L"ORIENTATION"},
|
||||
{ PROGRESSGRID_SETINTERVAL, L"INTERVAL"},
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
ProgressGrid::ProgressGrid() {
|
||||
myxuihandle = newXuiHandle();
|
||||
CreateXMLParameters(myxuihandle);
|
||||
|
||||
orientation = PROGRESSGRID_RIGHT;
|
||||
progress = 0;
|
||||
started = 0;
|
||||
update_interval = PROGRESSGRID_INTERVAL;
|
||||
}
|
||||
|
||||
void ProgressGrid::CreateXMLParameters(int master_handle)
|
||||
{
|
||||
//PROGRESSGRID_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);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
ProgressGrid::~ProgressGrid() {
|
||||
killTimer(ProgressGrid_TIMER_POS);
|
||||
WASABI_API_MEDIACORE->core_delCallback(0, this);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ProgressGrid::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
|
||||
if (xuihandle != myxuihandle)
|
||||
return PROGRESSGRID_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
|
||||
|
||||
switch (xmlattributeid) {
|
||||
case PROGRESSGRID_SETORIENTATION:
|
||||
setOrientation(value);
|
||||
break;
|
||||
|
||||
case PROGRESSGRID_SETINTERVAL:
|
||||
if ((update_interval = WTOI(value)) <= 20)
|
||||
update_interval = PROGRESSGRID_INTERVAL;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ProgressGrid::setOrientation(const wchar_t *or) {
|
||||
int a = pgorientationvalues.getId(or);
|
||||
if (orientation == a) return;
|
||||
orientation = a;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
void ProgressGrid::getGridRect(RECT *r) {
|
||||
RECT cr;
|
||||
getClientRect(&cr);
|
||||
float p = started ? progress : 0.0f;
|
||||
int height = (int)((float)(cr.bottom - cr.top) * p);
|
||||
int width = (int)((float)(cr.right - cr.left) * p);
|
||||
|
||||
switch (orientation) {
|
||||
case PROGRESSGRID_LEFT: cr.left = cr.right - width; break;
|
||||
case PROGRESSGRID_TOP: cr.top = cr.bottom - height; break;
|
||||
case PROGRESSGRID_RIGHT: cr.right = cr.left + width; break;
|
||||
case PROGRESSGRID_BOTTOM: cr.bottom = cr.top + height; break;
|
||||
}
|
||||
*r = cr;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ProgressGrid::onInit() {
|
||||
PROGRESSGRID_PARENT::onInit();
|
||||
timerCallback(ProgressGrid_TIMER_POS);
|
||||
setTimer(ProgressGrid_TIMER_POS, update_interval);
|
||||
WASABI_API_MEDIACORE->core_addCallback(0, this);
|
||||
if (WASABI_API_MEDIACORE->core_getStatus(0) != 0) started = 1; else started = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ProgressGrid::corecb_onSeeked(int newpos) {
|
||||
if(!started) corecb_onStarted();
|
||||
int len = WASABI_API_MEDIACORE->core_getLength(0);
|
||||
if (newpos == -1 || len <= 0) setProgress(0);
|
||||
else setProgress(((float)newpos/(float)len));
|
||||
return 0;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ProgressGrid::corecb_onStarted() {
|
||||
started = 1;
|
||||
invalidate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
int ProgressGrid::corecb_onStopped() {
|
||||
started = 0;
|
||||
progress = 0.0f;
|
||||
invalidate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ProgressGrid::setProgress(float p) {
|
||||
if (progress == p) return;
|
||||
progress = p;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
void ProgressGrid::timerCallback(int id) {
|
||||
switch (id) {
|
||||
case ProgressGrid_TIMER_POS: {
|
||||
int playpos = WASABI_API_MEDIACORE->core_getPosition(0);
|
||||
corecb_onSeeked(playpos);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
PROGRESSGRID_PARENT::timerCallback(id);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue