123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- #include <precomp.h>
- #include <wasabicfg.h>
- #include "pslider.h"
- #include <api/script/scriptmgr.h>
- #include <api/script/vcpu.h>
- #include <api/skin/skinparse.h>
- #ifdef WASABI_WIDGETS_MEDIASLIDERS
- #include "seqband.h"
- #include "seqpreamp.h"
- #include "svolbar.h"
- #include "sseeker.h"
- #include "spanbar.h"
- #endif
- char sliderObjectStr[] = "Slider"; // This is the xml tag
- char sliderXuiSvcName[] = "Slider xui object"; // this is the name of the xuiservice
- XMLParamPair PSliderWnd::params[] =
- {
- {PSLIDER_SETBARLEFT, L"BARLEFT"},
- {PSLIDER_SETBARMIDDLE, L"BARMIDDLE"},
- {PSLIDER_SETBARRIGHT, L"BARRIGHT"},
- {PSLIDER_SETDOWNTHUMB, L"DOWNTHUMB"},
- {PSLIDER_SETHIGH, L"HIGH"},
- {PSLIDER_SETHOTPOS, L"HOTPOS"},
- {PSLIDER_SETHOTRANGE, L"HOTRANGE"},
- {PSLIDER_SETHOVERTHUMB, L"HOVERTHUMB"},
- {PSLIDER_SETLOW, L"LOW"},
- {PSLIDER_SETORIENTATION, L"ORIENTATION"},
- {PSLIDER_SETTHUMB, L"THUMB"},
- {PSLIDER_SETSTRETCHTHUMB, L"STRETCHTHUMB"},
- };
- PSliderWnd::PSliderWnd()
- {
- setLimits(0, 255);
- getScriptObject()->vcpu_setInterface(sliderGuid, (void *)static_cast<PSliderWnd *>(this));
- getScriptObject()->vcpu_setClassName(L"Slider");
- getScriptObject()->vcpu_setController(sliderController);
- xuihandle = newXuiHandle();
- CreateXMLParameters(xuihandle);
- }
- void PSliderWnd::CreateXMLParameters(int master_handle)
- {
- //PSLIDER_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);
- }
- PSliderWnd::~PSliderWnd()
- {}
- int PSliderWnd::setXuiParam(int _xuihandle, int attrid, const wchar_t *paramname, const wchar_t *strvalue)
- {
- if (xuihandle != _xuihandle) return PSLIDER_PARENT::setXuiParam(_xuihandle, attrid, paramname, strvalue);
- switch (attrid)
- {
- case PSLIDER_SETBARLEFT:
- setLeftBmp(strvalue);
- break;
- case PSLIDER_SETBARMIDDLE:
- setMiddleBmp(strvalue);
- break;
- case PSLIDER_SETBARRIGHT:
- setRightBmp(strvalue);
- break;
- case PSLIDER_SETTHUMB:
- setThumbBmp(strvalue);
- break;
- case PSLIDER_SETDOWNTHUMB:
- setThumbDownBmp(strvalue);
- break;
- case PSLIDER_SETHOVERTHUMB:
- setThumbHiliteBmp(strvalue);
- break;
- case PSLIDER_SETSTRETCHTHUMB:
- setThumbStretched(_wtoi(strvalue));
- break;
- case PSLIDER_SETORIENTATION:
- setOrientation(SkinParser::getOrientation(strvalue));
- break;
- case PSLIDER_SETLOW:
- {
- int mx = getMaxLimit();
- setLimits(WTOI(strvalue), mx);
- #ifdef WASABI_COMPILE_CONFIG
- reloadConfig();
- #endif
- break;
- }
- case PSLIDER_SETHIGH:
- {
- int mn = getMinLimit();
- setLimits(mn, WTOI(strvalue));
- #ifdef WASABI_COMPILE_CONFIG
- reloadConfig();
- #endif
- break;
- }
- case PSLIDER_SETHOTPOS:
- {
- int a = WTOI(strvalue);
- setHotPosition(a);
- break;
- }
- case PSLIDER_SETHOTRANGE:
- {
- int a = WTOI(strvalue);
- setHotPosRange(a);
- break;
- }
- default:
- return 0;
- }
- return 1;
- }
- int PSliderWnd::onInit()
- {
- setNoDefaultBackground(1);
- PSLIDER_PARENT::onInit();
- return 1;
- }
- #ifdef WASABI_COMPILE_CONFIG
- void PSliderWnd::reloadConfig()
- {
- if (getGuiObject()->guiobject_hasCfgAttrib())
- onReloadConfig();
- }
- #endif
- #ifdef WASABI_COMPILE_CONFIG
- int PSliderWnd::onReloadConfig()
- {
- int newVal = getGuiObject()->guiobject_getCfgInt();
- setPosition(newVal, 0);
- return PSLIDER_PARENT::onReloadConfig();
- }
- #endif
- int PSliderWnd::onSetPosition()
- {
- int r = PSLIDER_PARENT::onSetPosition();
- scriptVar p = SOM::makeVar(SCRIPT_INT);
- int intVal = getSliderPosition();
- #ifdef WASABI_COMPILE_CONFIG
- getGuiObject()->guiobject_setCfgInt(intVal);
- #endif
- SOM::assign(&p, intVal / scriptDivisor());
- script_onSetPosition(SCRIPT_CALL, getScriptObject(), p);
- return r;
- }
- int PSliderWnd::onPostedPosition(int pp)
- {
- scriptVar p = SOM::makeVar(SCRIPT_INT);
- int intVal = getSliderPosition();
- #ifdef WASABI_COMPILE_CONFIG
- getGuiObject()->guiobject_setCfgInt(intVal);
- #endif
- SOM::assign(&p, intVal / scriptDivisor());
- script_onPostedPosition(SCRIPT_CALL, getScriptObject(), p);
- return 1;
- }
- int PSliderWnd::onSetFinalPosition()
- {
- int r = PSLIDER_PARENT::onSetPosition();
- scriptVar p = SOM::makeVar(SCRIPT_INT);
- int intVal = getSliderPosition();
- #ifdef WASABI_COMPILE_CONFIG
- getGuiObject()->guiobject_setCfgInt(intVal);
- #endif
- SOM::assign(&p, intVal / scriptDivisor());
- script_onSetFinalPosition(SCRIPT_CALL, getScriptObject(), p);
- return r;
- }
- SliderScriptController _sliderController;
- SliderScriptController *sliderController = &_sliderController;
- // -- Functions table -------------------------------------
- function_descriptor_struct SliderScriptController::exportedFunction[] = {
- {L"setPosition", 1, (void*)PSliderWnd::script_setPosition },
- {L"getPosition", 0, (void*)PSliderWnd::script_getPosition },
- {L"onSetPosition", 1, (void*)PSliderWnd::script_onSetPosition },
- {L"onPostedPosition", 1, (void*)PSliderWnd::script_onPostedPosition },
- {L"onSetFinalPosition", 1, (void*)PSliderWnd::script_onSetFinalPosition },
- {L"lock", 0, (void*)PSliderWnd::script_lock},
- {L"unlock", 0, (void*)PSliderWnd::script_unlock},
- };
- // --------------------------------------------------------
- const wchar_t *SliderScriptController::getClassName()
- {
- return L"Slider";
- }
- const wchar_t *SliderScriptController::getAncestorClassName()
- {
- return L"GuiObject";
- }
- ScriptObject *SliderScriptController::instantiate()
- {
- PSliderWnd *s = new PSliderWnd;
- ASSERT(s != NULL);
- return s->getScriptObject();
- }
- void SliderScriptController::destroy(ScriptObject *o)
- {
- PSliderWnd *s = static_cast<PSliderWnd *>(o->vcpu_getInterface(sliderGuid));
- ASSERT(s != NULL);
- delete s;
- }
- void *SliderScriptController::encapsulate(ScriptObject *o)
- {
- return NULL; // no encapsulation for sliders yet
- }
- void SliderScriptController::deencapsulate(void *o)
- {}
- int SliderScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *SliderScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID SliderScriptController::getClassGuid()
- {
- return sliderGuid;
- }
- const wchar_t *PSliderWnd::vcpu_getClassName()
- {
- return L"Slider";
- }
- void PSliderWnd::lock ()
- {}
- void PSliderWnd::unlock()
- {}
- //------------------------------------------------------------------------
- scriptVar PSliderWnd::script_onSetPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, sliderController, p);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, p);
- }
- scriptVar PSliderWnd::script_onPostedPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, sliderController, p);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, p);
- }
- scriptVar PSliderWnd::script_onSetFinalPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p)
- {
- SCRIPT_FUNCTION_INIT;
- PROCESS_HOOKS1(o, sliderController, p);
- SCRIPT_FUNCTION_CHECKABORTEVENT;
- SCRIPT_EXEC_EVENT1(o, p);
- }
- scriptVar PSliderWnd::script_setPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v)
- {
- SCRIPT_FUNCTION_INIT
- ASSERT(SOM::isNumeric(&v));
- PSliderWnd *s = static_cast<PSliderWnd *>(o->vcpu_getInterface(sliderGuid));
- if (s) s->setPosition(GET_SCRIPT_INT(v) * s->scriptDivisor());
- RETURN_SCRIPT_VOID;
- }
- scriptVar PSliderWnd::script_getPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- PSliderWnd *s = static_cast<PSliderWnd *>(o->vcpu_getInterface(sliderGuid));
- if (s) return MAKE_SCRIPT_INT(s->getSliderPosition() / s->scriptDivisor());
- return MAKE_SCRIPT_FLOAT(0);
- }
- scriptVar PSliderWnd::script_lock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- PSliderWnd *s = static_cast<PSliderWnd *>(o->vcpu_getInterface(sliderGuid));
- if (s) s->lock ();
- RETURN_SCRIPT_VOID;
- }
- scriptVar PSliderWnd::script_unlock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT
- PSliderWnd *s = static_cast<PSliderWnd *>(o->vcpu_getInterface(sliderGuid));
- if (s) s->unlock();
- RETURN_SCRIPT_VOID;
- }
- GuiObject *SliderXuiSvc::instantiate(const wchar_t *xmltag, ifc_xmlreaderparams *params)
- {
- #ifdef WASABI_WIDGETS_MEDIASLIDERS
- if (!params)
- {
- PSliderWnd *r = new PSliderWnd;
- return r->getGuiObject();
- }
- const wchar_t *action = params->getItemValue(L"action");
- const wchar_t *param = params->getItemValue(L"param");
- if (!action)
- action=L"";
- PSliderWnd *r = NULL;
- #ifdef WASABI_WIDGETS_MEDIASLIDERS
- if (!_wcsicmp(action, L"seek"))
- r = new SSeeker;
- else if (!_wcsicmp(action, L"volume"))
- r = new SVolBar;
- else if (!_wcsicmp(action, L"pan"))
- r = new SPanBar;
- else if (!_wcsicmp(action, L"eq_band"))
- {
- if (!_wcsicmp(param, L"preamp"))
- r = new SEQPreamp;
- else
- r = new SEQBand;
- }
- else if (!_wcsicmp(action, L"eq_preamp"))
- {
- r = new SEQPreamp;
- }
- else
- {
- #endif
- r = new PSliderWnd;
- #ifdef WASABI_WIDGETS_MEDIASLIDERS
- }
- #endif
- return r->getGuiObject();
- #else
- PSliderWnd *r = new PSliderWnd;
- return r->getGuiObject();
- #endif
- }
- void SliderXuiSvc::destroy(GuiObject *g)
- {
- PSliderWnd *obj = static_cast<PSliderWnd *>(g->guiobject_getRootWnd());
- delete obj;
- }
|