aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/seqband.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/seqband.cpp')
-rw-r--r--Src/Wasabi/api/skin/widgets/seqband.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/seqband.cpp b/Src/Wasabi/api/skin/widgets/seqband.cpp
new file mode 100644
index 00000000..2d813fd2
--- /dev/null
+++ b/Src/Wasabi/api/skin/widgets/seqband.cpp
@@ -0,0 +1,121 @@
+#include <precomp.h>
+#include "seqband.h"
+#include <api/core/api_core.h>
+
+#define NOTIFYMSG_EQ_HELLO 0x3003
+
+const wchar_t eqBandXuiStr[] = L"EqBand"; // This is the xml tag
+char eqBandXuiSvcName[] = "EqBand xui object"; // this is the name of the xuiservice
+
+XMLParamPair SEQBand::params[] = {
+ {SEQBAND_SETPARAM, L"BAND"},
+ {SEQBAND_SETPARAM, L"PARAM"},
+};
+
+SEQBand::SEQBand() {
+ band = 0;
+ setDrawOnBorders(TRUE);
+ setEnable(TRUE);
+ setHotPosition(0);
+ isactive=0;
+ discard_next_event = 0;
+ xuihandle = newXuiHandle();
+ CreateXMLParameters(xuihandle);
+
+ setLimits(-127,127);
+}
+
+void SEQBand::CreateXMLParameters(int master_handle)
+{
+ //SEQBAND_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);
+}
+
+SEQBand::~SEQBand() {
+ WASABI_API_MEDIACORE->core_delCallback(0, this);
+}
+
+int SEQBand::setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *strval) {
+ if (_xuihandle != xuihandle) return SEQBAND_PARENT::setXuiParam(_xuihandle, attrid, name, strval);
+ switch (attrid) {
+ case SEQBAND_SETPARAM:
+ case SEQBAND_SETBAND:
+ setBand(WTOI(strval)-1);
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+void SEQBand::setBand(int b) {
+ band = b;
+}
+
+int SEQBand::onInit() {
+ SEQBAND_PARENT::onInit();
+
+ corecb_onEQBandChange(band, WASABI_API_MEDIACORE->core_getEqBand(0, band));
+ WASABI_API_MEDIACORE->core_addCallback(0, this);
+
+ return 1;
+}
+
+int SEQBand::onSetPosition() {
+ setHotPosition((Std::keyDown(VK_SHIFT) ? -1 : 0));
+ SEQBAND_PARENT::onSetPosition();
+ int pos = getSliderPosition(); // get slider pos
+ discard_next_event = 1;
+ WASABI_API_MEDIACORE->core_setEqBand(0,band,pos);
+ return 1;
+}
+
+int SEQBand::onResize() {
+ SEQBAND_PARENT::onResize();
+ invalidate();
+ return 1;
+}
+
+int SEQBand::corecb_onEQBandChange(int b, int newval) {
+ if(b!=band) return 0;
+ if (discard_next_event) {
+ discard_next_event = 0;
+ return 0;
+ }
+ setPosition(newval,0);
+ return 0;
+}
+
+int SEQBand::onLeftButtonDown(int x, int y) {
+ isactive=1;
+ return SEQBAND_PARENT::onLeftButtonDown(x,y);
+}
+
+int SEQBand::onMouseMove(int x, int y) {
+ if(isactive) {
+ ifc_window *parent=getParent();
+ if(parent) {
+ ifc_window *wnd=parent->findRootWndChild(x,y);
+ if(wnd && wnd!=this) {
+ if(wnd->childNotify(this,NOTIFYMSG_EQ_HELLO,0,0)) { // will return 1 if it's another EQBand
+ onLeftButtonUp(x,y);
+ wnd->onLeftButtonDown(x,y);
+ }
+ }
+ }
+ }
+ return SEQBAND_PARENT::onMouseMove(x,y);
+}
+
+int SEQBand::onLeftButtonUp(int x, int y) {
+ isactive=0;
+ return SEQBAND_PARENT::onLeftButtonUp(x,y);
+}
+
+int SEQBand::childNotify(ifc_window *child, int msg, intptr_t param1, intptr_t param2) {
+ if(msg==NOTIFYMSG_EQ_HELLO) return 1;
+ return SEQBAND_PARENT::childNotify(child,msg,param1,param2);
+} \ No newline at end of file