f@0: // f@0: // Controls.h f@0: // AccessibleSpectrumAnalyser f@0: // f@0: // Created by Fiore Martin on 18/01/2016. f@0: // f@0: // f@0: f@0: #ifndef Controls_h f@0: #define Controls_h f@0: f@0: f@0: /* Knob with a text label and a text displaying the current value */ f@0: class IKnobMultiControlText : public IKnobControl f@0: { f@0: private: f@0: IRECT mDisplayRECT, mImgRECT, mNameRECT, mLabelRECT; f@0: IBitmap mBitmap; f@0: f@0: public: f@0: IKnobMultiControlText(IPlugBase* pPlug, IRECT pR, int paramIdx, IBitmap* pBitmap, IText* pText, int indent = 10) f@0: : IKnobControl(pPlug, pR, paramIdx), mBitmap(*pBitmap) f@0: { f@0: mText = *pText; f@0: /* mRECT is the bounding rectangle of the whole KnobMultiControlText */ f@0: mNameRECT = IRECT(mRECT.L, mRECT.T,mRECT.R, mRECT.T+16); f@0: mDisplayRECT = IRECT(mRECT.L, mRECT.B-25, mRECT.R-21, mRECT.B); // left, top, right, bottom f@0: mLabelRECT = mDisplayRECT; f@0: mLabelRECT.L = mDisplayRECT.R; // shift it to the right of the diplay RECT f@0: mLabelRECT.R = mLabelRECT.L+indent; // how much the display is indented f@0: mImgRECT = IRECT(mRECT.L, mRECT.T+16, &mBitmap); f@0: mDisablePrompt = false; f@0: } f@0: f@0: ~IKnobMultiControlText() {} f@0: f@0: bool Draw(IGraphics* pGraphics) f@0: { f@0: int i = 1 + int(0.5 + mValue * (double) (mBitmap.N - 1)); f@0: i = BOUNDED(i, 1, mBitmap.N); f@0: f@0: /* draw the knob */ f@0: pGraphics->DrawBitmap(&mBitmap, &mImgRECT, i, &mBlend); f@0: f@0: /* draw displayed value for host, that is the value as represented in the host */ f@0: char displayedValue[20]; f@0: mPlug->GetParam(mParamIdx)->GetDisplayForHost(displayedValue); f@0: f@0: bool dispDrawn = true; f@0: if (CSTR_NOT_EMPTY(displayedValue)) { f@0: dispDrawn = pGraphics->DrawIText(&mText, displayedValue, &mDisplayRECT); f@0: } f@0: f@0: /* name of the parameter */ f@0: if (CSTR_NOT_EMPTY(mPlug->GetParam(mParamIdx)->GetNameForHost())){ f@0: char nameDisp[MAX_PARAM_NAME_LEN]; f@0: strcpy(nameDisp, mPlug->GetParam(mParamIdx)->GetNameForHost()); f@0: f@0: if (CSTR_NOT_EMPTY(mPlug->GetParam(mParamIdx)->GetLabelForHost())){ f@0: char label[MAX_PARAM_LABEL_LEN]; f@0: strcpy(label, mPlug->GetParam(mParamIdx)->GetLabelForHost()); f@0: pGraphics->DrawIText(&mText, label, &mLabelRECT); f@0: } f@0: f@0: return dispDrawn && pGraphics->DrawIText(&mText, nameDisp, &mNameRECT); f@0: } f@0: f@0: return dispDrawn; f@0: } f@0: f@0: void OnMouseDown(int x, int y, IMouseMod* pMod) f@0: { f@0: OnMouseDrag(x, y, 0, 0, pMod); f@0: } f@0: f@0: /* double click puts it back to default value */ f@0: void OnMouseDblClick(int x, int y, IMouseMod* pMod) f@0: { f@0: if (mDefaultValue >= 0.0) f@0: { f@0: mValue = mDefaultValue; f@0: SetDirty(); f@0: } f@0: } f@0: f@0: }; f@0: f@0: f@0: #endif /* Controls_h */