diff options
Diffstat (limited to 'vstgui/vstcontrols.h')
-rw-r--r-- | vstgui/vstcontrols.h | 994 |
1 files changed, 994 insertions, 0 deletions
diff --git a/vstgui/vstcontrols.h b/vstgui/vstcontrols.h new file mode 100644 index 0000000..0505f82 --- /dev/null +++ b/vstgui/vstcontrols.h @@ -0,0 +1,994 @@ +/* ---------------------------------------------------------------------------- + * VSTGUI for X11/LV2/PNG + * Author: Dave Robillard + * Released under the revised BSD license, as below + * ---------------------------------------------------------------------------- + * + * Based on: + * ---------------------------------------------------------------------------- + * VSTGUIL: Graphical User Interface Framework for VST plugins on LINUX + * Version: 0.1, Date: 2007/01/21 + * Author: kRAkEn/gORe + * + * Which was based on: + * ---------------------------------------------------------------------------- + * VSTGUI: Graphical User Interface Framework for VST plugins + * Version 3.0 $Date: 2005/08/12 12:45:00 $ + * ---------------------------------------------------------------------------- + * VSTGUI LICENSE + * 2004, Steinberg Media Technologies, All Rights Reserved + * ---------------------------------------------------------------------------- + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Steinberg Media Technologies nor the names of + * its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +#ifndef __vstcontrols__ +#define __vstcontrols__ + +#ifndef __vstgui__ +#include "vstgui.h" +#endif + +//------------------ +// defines +//------------------ +#ifndef kPI +#define kPI 3.14159265358979323846 +#endif + +#ifndef k2PI +#define k2PI 6.28318530717958647692 +#endif + +#ifndef kPI_2 +#define kPI_2 1.57079632679489661923f +#endif + +#ifndef kPI_4 +#define kPI_4 0.78539816339744830962 +#endif + +#ifndef kE +#define kE 2.7182818284590452354 +#endif + +#ifndef kLN2 +#define kLN2 0.69314718055994530942 +#endif + +#ifndef kSQRT2 +#define kSQRT2 1.41421356237309504880 +#endif + +//------------------ +// CControlEnum type +//------------------ +enum CControlEnum +{ + kHorizontal = 1 << 0, + kVertical = 1 << 1, + kShadowText = 1 << 2, + kLeft = 1 << 3, + kRight = 1 << 4, + kTop = 1 << 5, + kBottom = 1 << 6, + k3DIn = 1 << 7, + k3DOut = 1 << 8, + kPopupStyle = 1 << 9, + kCheckStyle = 1 << 10, + kMultipleCheckStyle, + kNoTextStyle = 1 << 11, + kNoDrawStyle = 1 << 12, + kDoubleClickStyle = 1 << 13, + kNoFrame = 1 << 14 +}; + +//--------------------------- +// Some defines for Menu item +//--------------------------- +#define kMenuTitle "-T" +#define kMenuSeparator "-" +#define kMenuDisable "-G" +#define kMenuSubMenu "-M" + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +class CControlListener +{ +public: + virtual ~CControlListener () {} + + virtual void valueChanged (VSTGUI::CDrawContext *pContext, VSTGUI::CControl *pControl) = 0; + virtual long controlModifierClicked (VSTGUI::CDrawContext *pContext, VSTGUI::CControl *pControl, long button) { return 0; } // return 1 if you want the control to not handle it, otherwise 0 +}; + +class AudioEffectX; + +//----------------------------------------------------------------------------- +namespace VSTGUI { +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// CControl Declaration +//! base class of all VSTGUI controls +//----------------------------------------------------------------------------- +class CControl : public CView +{ +public: + CControl (const CRect &size, CControlListener *listener = 0, long tag = 0, + CBitmap *pBackground = 0); + virtual ~CControl (); + + virtual void draw (CDrawContext *pContext) = 0; + virtual void doIdleStuff () { if (pParentFrame) pParentFrame->doIdleStuff (); } + + virtual void setValue (float val) { value = val; } + virtual float getValue () const { return value; }; + + virtual void setMin (float val) { vmin = val; } + virtual float getMin () const { return vmin; } + virtual void setMax (float val) { vmax = val; } + virtual float getMax () const { return vmax; } + + virtual void setOldValue (float val) { oldValue = val; } + virtual float getOldValue (void) const { return oldValue; } + virtual void setDefaultValue (float val) { defaultValue = val; } + virtual float getDefaultValue (void) const { return defaultValue; } + + virtual void setTag (long val) { tag = val; } + virtual long getTag () const { return tag; } + + virtual bool isDirty () const; + virtual void setDirty (const bool val = true); + + virtual void beginEdit (); + virtual void endEdit (); + + virtual void setBackOffset (CPoint &offset); + virtual void copyBackOffset (); + + virtual void setWheelInc (float val) { wheelInc = val; } + virtual float getWheelInc () const { return wheelInc; } + + virtual void bounceValue (); + virtual bool checkDefaultValue (CDrawContext *pContext, long button); + + CControlListener* getListener () const { return listener; } + void setListener (CControlListener* l) { listener = l; } + bool isDoubleClick (); + + CLASS_METHODS(CControl, CView) + +protected: + CControlListener *listener; + long tag; + float oldValue; + float defaultValue; + float value; + float vmin; + float vmax; + float wheelInc; + + long lastTicks; + long delta; + + CPoint backOffset; +}; + + +//----------------------------------------------------------------------------- +// COnOffButton Declaration +//! a button control with 2 states +//----------------------------------------------------------------------------- +class COnOffButton : public CControl +{ +public: + COnOffButton (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, long style = kPreListenerUpdate); + virtual ~COnOffButton (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + virtual long getStyle () const { return style; } + virtual void setStyle (long newStyle) { style = newStyle; } + + enum { + kPreListenerUpdate, ///< listener will be called after doIdleStuff was called + kPostListenerUpdate ///< listener will be called before doIdleStuff is called + }; + + CLASS_METHODS(COnOffButton, CControl) +protected: + long style; +}; + + +//----------------------------------------------------------------------------- +// CParamDisplay Declaration +//! a parameter display control +//----------------------------------------------------------------------------- +class CParamDisplay : public CControl +{ +public: + CParamDisplay (const CRect &size, CBitmap *background = 0, const long style = 0); + virtual ~CParamDisplay (); + + virtual void setFont (CFont fontID); + CFont getFont () const { return fontID; } + + virtual void setFontColor (CColor color); + CColor getFontColor () const { return fontColor; } + + virtual void setBackColor (CColor color); + CColor getBackColor () const { return backColor; } + + virtual void setFrameColor (CColor color); + CColor getFrameColor () const { return frameColor; } + + virtual void setShadowColor (CColor color); + CColor getShadowColor () const { return shadowColor; } + + virtual void setHoriAlign (CHoriTxtAlign hAlign); + + virtual void setStringConvert (void (*convert) (float value, char *string)); + virtual void setStringConvert (void (*convert) (float value, char *string, void *userDta), + void *userData); + virtual void setString2FloatConvert (void (*convert) (char *string, float &output)); + + virtual void setStyle (long val); + long getStyle () const { return style; } + + virtual void setTxtFace (CTxtFace val); + CTxtFace getTxtFace () const { return txtFace; } + + virtual void draw (CDrawContext *pContext); + + virtual void setTextTransparency (bool val) { bTextTransparencyEnabled = val; } + bool getTextTransparency () const { return bTextTransparencyEnabled; } + + CLASS_METHODS(CParamDisplay, CControl) + +protected: + void drawText (CDrawContext *pContext, char *string, CBitmap *newBack = 0); + + void (*stringConvert) (float value, char *string); + void (*stringConvert2) (float value, char *string, void *userData); + void (*string2FloatConvert) (char *string, float &output); + void *userData; + + CHoriTxtAlign horiTxtAlign; + long style; + + CFont fontID; + CTxtFace txtFace; + CColor fontColor; + CColor backColor; + CColor frameColor; + CColor shadowColor; + bool bTextTransparencyEnabled; +}; + + +//----------------------------------------------------------------------------- +// CLabel Declaration +//! a text label +//----------------------------------------------------------------------------- +class CTextLabel : public CParamDisplay +{ +public: + CTextLabel (const CRect& size, const char* txt = 0, CBitmap* background = 0, const long style = 0); + ~CTextLabel (); + + virtual void setText (const char* txt); + virtual const char* getText () const; + + virtual void draw (CDrawContext *pContext); + + CLASS_METHODS(CTextLabel, CParamDisplay) + +protected: + void freeText (); + char* text; +}; + +//----------------------------------------------------------------------------- +// CTextEdit Declaration +//! a text edit control +//----------------------------------------------------------------------------- +class CTextEdit : public CParamDisplay +{ +public: + CTextEdit (const CRect &size, CControlListener *listener, long tag, const char *txt = 0, + CBitmap *background = 0, const long style = 0); + virtual ~CTextEdit (); + + virtual void setText (char *txt); + virtual void getText (char *txt) const; + + virtual void draw (CDrawContext *pContext); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + virtual void setTextEditConvert (void (*editConvert) (char *input, char *string)); + virtual void setTextEditConvert (void (*editConvert2) (char *input, char *string, + void *userDta), void *userData); + + virtual void takeFocus (CDrawContext *pContext = 0); + virtual void looseFocus (CDrawContext *pContext = 0); + + void *platformFontColor; + void *platformControl; + bool bWasReturnPressed; + + CLASS_METHODS(CTextEdit, CParamDisplay) + +protected: + void *platformFont; + char text[256]; + + void (*editConvert) (char *input, char *string); + void (*editConvert2) (char *input, char *string, void *userData); +}; + + +//----------------------------------------------------------------------------- +// COptionMenuScheme Declaration +//----------------------------------------------------------------------------- +class COptionMenuScheme : public CReferenceCounter +{ +public: + COptionMenuScheme (); + virtual ~COptionMenuScheme (); + + enum { kChecked = 0x01, kDisabled = 0x02, kSelected = 0x04, kSubMenu = 0x08, kTitle = 0x10 }; + + virtual void getItemSize (const char* text, CDrawContext* pContext, CPoint& size); + virtual void drawItem (const char* text, long itemId, long state, CDrawContext* pContext, const CRect& rect); + + void setColors (CColor back, CColor select, CColor text, CColor htext, CColor dtext) + { backgroundColor = back; selectionColor = select; textColor = text; + hiliteTextColor = htext; disableTextColor = dtext;} + + void setFont (CFont f) { font = f; } +protected: + + CColor backgroundColor; + CColor selectionColor; + CColor textColor; + CColor hiliteTextColor; + CColor disableTextColor; + CFont font; + + virtual void drawItemBack (CDrawContext* pContext, const CRect& rect, bool hilite); +}; + +//----------------------------------------------------------------------------- +extern COptionMenuScheme* gOptionMenuScheme; + +//----------------------------------------------------------------------------- +// COptionMenu Declaration +//! a popup menu control +//----------------------------------------------------------------------------- +class COptionMenu : public CParamDisplay +{ +public: + COptionMenu (const CRect &size, CControlListener *listener, long tag, + CBitmap *background = 0, CBitmap *bgWhenClick = 0, + const long style = 0); + virtual ~COptionMenu (); + + enum { MAX_ENTRY = 1024 }; + + virtual void setValue (float val); + virtual bool addEntry (COptionMenu *subMenu, char *txt); + virtual bool addEntry (char *txt, long index = -1); + virtual long getCurrent (char *txt = 0, bool countSeparator = true) const; + virtual bool setCurrent (long index, bool countSeparator = true); + virtual bool getEntry (long index, char *txt) const; + virtual bool setEntry (long index, char *txt); + virtual bool removeEntry (long index); + virtual bool removeAllEntry (); + virtual long getNbEntries () const { return nbEntries; } + virtual long getIndex (char *txt) const; + + virtual bool checkEntry (long index, bool state); + virtual bool checkEntryAlone (long index); + virtual bool isCheckEntry (long index) const; + + virtual void draw (CDrawContext *pContext); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + virtual void takeFocus (CDrawContext *pContext = 0); + virtual void looseFocus (CDrawContext *pContext = 0); + + virtual void setNbItemsPerColumn (long val) { nbItemsPerColumn = val; } + virtual long getNbItemsPerColumn () const { return nbItemsPerColumn; } + + void setCurrentSelected (void *itemSelected); + + long getLastResult () const { return lastResult; } + COptionMenu *getLastItemMenu (long &idxInMenu) const; + + void setScheme (COptionMenuScheme* s) { scheme = s; } + virtual COptionMenuScheme* getScheme () const { return scheme; } + + virtual void setPrefixNumbers (long preCount); + + COptionMenu* getSubMenu (long idx) const; + + CLASS_METHODS(COptionMenu, CParamDisplay) + +protected: + COptionMenu *getItemMenu (long idx, long &idxInMenu, long &offsetIdx); + void removeItems (); + void *appendItems (long &offsetIdx); + + void *platformControl; + + bool allocateMenu (long nb); + bool allocateSubMenu (long nb); + + char **entry; + COptionMenu **submenuEntry; + bool *check; + + void *itemWidget[MAX_ENTRY]; + + long nbEntries; + long nbSubMenus; + long currentIndex; + CBitmap *bgWhenClick; + long lastButton; + long nbItemsPerColumn; + long nbAllocated; + long nbSubMenuAllocated; + long lastResult; + long prefixNumbers; + COptionMenu *lastMenu; + COptionMenuScheme* scheme; +}; + + +//----------------------------------------------------------------------------- +// CKnob Declaration +//! a knob control +//----------------------------------------------------------------------------- +class CKnob : public CControl +{ +public: + CKnob (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CBitmap *handle, const CPoint &offset); + virtual ~CKnob (); + + virtual void draw (CDrawContext *pContext); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); + virtual long onKeyDown (VstKeyCode& keyCode); + + virtual void drawHandle (CDrawContext *pContext); + + virtual void setStartAngle (float val); + virtual float getStartAngle () const { return startAngle; } + + virtual void setRangeAngle (float val); + virtual float getRangeAngle () const { return rangeAngle; } + + virtual void valueToPoint (CPoint &point) const; + virtual float valueFromPoint (CPoint &point) const; + + virtual void setInsetValue (long val) { inset = val; } + + virtual void setColorShadowHandle (CColor color); + virtual void setColorHandle (CColor color); + + virtual void setHandleBitmap (CBitmap *bitmap); + + virtual void setZoomFactor (float val) { zoomFactor = val; } + virtual float getZoomFactor () const { return zoomFactor; } + + CLASS_METHODS(CKnob, CControl) + +protected: + void compute (); + + CPoint offset; + CColor colorHandle, colorShadowHandle; + + CBitmap *pHandle; + long inset; + float startAngle, rangeAngle, halfAngle; + float aCoef, bCoef; + float radius; + float zoomFactor; +}; + +//----------------------------------------------------------------------------- +// CAnimKnob Declaration +//! a bitmap knob control +//----------------------------------------------------------------------------- +class CAnimKnob : public CKnob +{ +public: + CAnimKnob (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CAnimKnob (const CRect &size, CControlListener *listener, long tag, + long subPixmaps, // number of subPixmaps + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset); + virtual ~CAnimKnob (); + + virtual bool isDirty () const; + + virtual void draw (CDrawContext* pContext); + + void setInverseBitmap (bool val) { bInverseBitmap = val; } + + CLASS_METHODS(CAnimKnob, CKnob) + +protected: + long subPixmaps; // number of subPixmaps + CCoord heightOfOneImage; + bool bInverseBitmap; + CPoint lastDrawnPoint; +}; + +//----------------------------------------------------------------------------- +// CVerticalSwitch Declaration +//! a vertical switch control +//----------------------------------------------------------------------------- +class CVerticalSwitch : public CControl +{ +public: + CVerticalSwitch (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CVerticalSwitch (const CRect &size, CControlListener *listener, long tag, + long subPixmaps, // number of subPixmaps + CCoord heightOfOneImage, // pixel + long iMaxPositions, + CBitmap *background, CPoint &offset); + virtual ~CVerticalSwitch (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + CLASS_METHODS(CVerticalSwitch, CControl) + +protected: + CPoint offset; + long subPixmaps; // number of subPixmaps + CCoord heightOfOneImage; + long iMaxPositions; +}; + + +//----------------------------------------------------------------------------- +// CHorizontalSwitch Declaration +//! a horizontal switch control +//----------------------------------------------------------------------------- +class CHorizontalSwitch : public CControl +{ +public: + CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag, + long subPixmaps, // number of subPixmaps + CCoord heightOfOneImage, // pixel + long iMaxPositions, + CBitmap *background, CPoint &offset); + virtual ~CHorizontalSwitch (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + CLASS_METHODS(CHorizontalSwitch, CControl) + +protected: + CPoint offset; + long subPixmaps; // number of subPixmaps + long iMaxPositions; + CCoord heightOfOneImage; +}; + + +//----------------------------------------------------------------------------- +// CRockerSwitch Declaration +//! a switch control with 3 sub bitmaps +//----------------------------------------------------------------------------- +class CRockerSwitch : public CControl +{ +public: + CRockerSwitch (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset, const long style = kHorizontal); + CRockerSwitch (const CRect &size, CControlListener *listener, long tag, + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset, const long style = kHorizontal); + virtual ~CRockerSwitch (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); + + CLASS_METHODS(CRockerSwitch, CControl) + +protected: + CPoint offset; + CCoord heightOfOneImage; + long style; +}; + + +//----------------------------------------------------------------------------- +// CMovieBitmap Declaration +//! a bitmap control that displays different bitmaps according to its current value +//----------------------------------------------------------------------------- +class CMovieBitmap : public CControl +{ +public: + CMovieBitmap (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CMovieBitmap (const CRect &size, CControlListener *listener, long tag, + long subPixmaps, // number of subPixmaps + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset); + virtual ~CMovieBitmap (); + + virtual void draw (CDrawContext*); + + CLASS_METHODS(CMovieBitmap, CControl) + +protected: + CPoint offset; + long subPixmaps; // number of subPixmaps + CCoord heightOfOneImage; +}; + + +//----------------------------------------------------------------------------- +// CMovieButton Declaration +//! a bi-states button with 2 subbitmaps +//----------------------------------------------------------------------------- +class CMovieButton : public CControl +{ +public: + CMovieButton (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CMovieButton (const CRect &size, CControlListener *listener, long tag, + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset); + virtual ~CMovieButton (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + CLASS_METHODS(CMovieButton, CControl) + +protected: + CPoint offset; + CCoord heightOfOneImage; + float buttonState; +}; + + +//----------------------------------------------------------------------------- +// CAutoAnimation Declaration +//! +//----------------------------------------------------------------------------- +class CAutoAnimation : public CControl +{ +public: + CAutoAnimation (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CAutoAnimation (const CRect &size, CControlListener *listener, long tag, + long subPixmaps, // number of subPixmaps... + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset); + virtual ~CAutoAnimation (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + virtual void openWindow (void); + virtual void closeWindow (void); + + virtual void nextPixmap (void); + virtual void previousPixmap (void); + + bool isWindowOpened () const { return bWindowOpened; } + + CLASS_METHODS(CAutoAnimation, CControl) + +protected: + CPoint offset; + + long subPixmaps; + CCoord heightOfOneImage; + CCoord totalHeightOfBitmap; + + bool bWindowOpened; +}; + + +//----------------------------------------------------------------------------- +// CSlider Declaration +//! a slider control +//----------------------------------------------------------------------------- +class CSlider : public CControl +{ +public: + CSlider (const CRect &size, CControlListener *listener, long tag, + long iMinPos, // min position in pixel + long iMaxPos, // max position in pixel + CBitmap *handle, // handle bitmap + CBitmap *background, // background bitmap + CPoint &offset, // offset in the background + const long style = kLeft|kHorizontal); // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical) + + CSlider (const CRect &rect, CControlListener *listener, long tag, + CPoint &offsetHandle, // handle offset + long rangeHandle, // size of handle range + CBitmap *handle, // handle bitmap + CBitmap *background, // background bitmap + CPoint &offset, // offset in the background + const long style = kLeft|kHorizontal); // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical) + + virtual ~CSlider (); + + virtual bool attached (CView *parent); + virtual bool removed (CView *parent); + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance); + virtual long onKeyDown (VstKeyCode& keyCode); + + virtual void setDrawTransparentHandle (bool val) { bDrawTransparentEnabled = val; } + virtual void setFreeClick (bool val) { bFreeClick = val; } + virtual bool getFreeClick () const { return bFreeClick; } + virtual void setOffsetHandle (CPoint &val); + + virtual void setHandle (CBitmap* pHandle); + virtual CBitmap *getHandle () const { return pHandle; } + + virtual void setZoomFactor (float val) { zoomFactor = val; } + virtual float getZoomFactor () const { return zoomFactor; } + + CLASS_METHODS(CSlider, CControl) + +protected: + CPoint offset; + CPoint offsetHandle; + + CBitmap *pHandle; + COffscreenContext *pOScreen; + + long style; + + CCoord widthOfSlider; // size of the handle-slider + CCoord heightOfSlider; + CCoord rangeHandle; + CCoord minTmp; + CCoord maxTmp; + CCoord minPos; + CCoord widthControl; + CCoord heightControl; + float zoomFactor; + + bool bDrawTransparentEnabled; + bool bFreeClick; +}; + +//----------------------------------------------------------------------------- +// CVerticalSlider Declaration +//! a vertical slider control +//----------------------------------------------------------------------------- +class CVerticalSlider : public CSlider +{ +public: + CVerticalSlider (const CRect &size, CControlListener *listener, long tag, + long iMinPos, // min Y position in pixel + long iMaxPos, // max Y position in pixel + CBitmap *handle, // bitmap slider + CBitmap *background, // bitmap background + CPoint &offset, // offset in the background + const long style = kBottom); // style (kBottom, kTop)) + + CVerticalSlider (const CRect &rect, CControlListener *listener, long tag, + CPoint &offsetHandle, // handle offset + long rangeHandle, // size of handle range + CBitmap *handle, // bitmap of slider + CBitmap *background, // bitmap of background + CPoint &offset, // offset in the background + const long style = kBottom); // style (kBottom, kTop) +}; + +//----------------------------------------------------------------------------- +// CHorizontalSlider Declaration +//! a horizontal slider control +//----------------------------------------------------------------------------- +class CHorizontalSlider : public CSlider +{ +public: + CHorizontalSlider (const CRect &size, CControlListener *listener, long tag, + long iMinPos, // min X position in pixel + long iMaxPos, // max X position in pixel + CBitmap *handle, // bitmap slider + CBitmap *background, // bitmap background + CPoint &offset, // offset in the background + const long style = kRight); // style (kRight, kLeft) + + CHorizontalSlider (const CRect &rect, CControlListener *listener, long tag, + CPoint &offsetHandle, // handle offset + long rangeHandle, // size of handle range + CBitmap *handle, // bitmap of slider + CBitmap *background, // bitmap of background + CPoint &offset, // offset in the background + const long style = kRight); // style (kRight, kLeft) +}; + + +//----------------------------------------------------------------------------- +// CSpecialDigit Declaration +//! special display with custom numbers (0...9) +//----------------------------------------------------------------------------- +class CSpecialDigit : public CControl +{ +public: + CSpecialDigit (const CRect &size, CControlListener *listener, long tag, // tag identifier + long dwPos, // actual value + long iNumbers, // amount of numbers (max 7) + long *xpos, // array of all XPOS + long *ypos, // array of all YPOS + long width, // width of ONE number + long height, // height of ONE number + CBitmap *background); // bitmap numbers + virtual ~CSpecialDigit (); + + virtual void draw (CDrawContext*); + + virtual float getNormValue (void) const; + + CLASS_METHODS(CSpecialDigit, CControl) + +protected: + long iNumbers; // amount of numbers + long xpos[7]; // array of all XPOS, max 7 possible + long ypos[7]; // array of all YPOS, max 7 possible + long width; // width of ONE number + long height; // height of ONE number +}; + + +//----------------------------------------------------------------------------- +// CKickButton Declaration +//! +//----------------------------------------------------------------------------- +class CKickButton : public CControl +{ +public: + CKickButton (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, CPoint &offset); + CKickButton (const CRect &size, CControlListener *listener, long tag, + CCoord heightOfOneImage, // pixel + CBitmap *background, CPoint &offset); + virtual ~CKickButton (); + + virtual void draw (CDrawContext*); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + + CLASS_METHODS(CKickButton, CControl) + +protected: + CPoint offset; + CCoord heightOfOneImage; +}; + + +//----------------------------------------------------------------------------- +// CSplashScreen Declaration +//! +//----------------------------------------------------------------------------- +class CSplashScreen : public CControl +{ +public: + CSplashScreen (const CRect &size, CControlListener *listener, long tag, + CBitmap *background, + CRect &toDisplay, + CPoint &offset); + virtual ~CSplashScreen (); + + virtual void draw (CDrawContext*); + virtual bool hitTest (const CPoint& where, const long buttons = -1); + virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1); + virtual void unSplash (); + + void setBitmapTransparency (unsigned char transparency); + + CLASS_METHODS(CSplashScreen, CControl) + +protected: + CRect toDisplay; + CRect keepSize; + CPoint offset; + unsigned char bitmapTransparency; +}; + + +//----------------------------------------------------------------------------- +// CVuMeter Declaration +//! +//----------------------------------------------------------------------------- +class CVuMeter : public CControl +{ +public: + CVuMeter (const CRect& size, CBitmap *onBitmap, CBitmap *offBitmap, + long nbLed, const long style = kVertical); + virtual ~CVuMeter (); + + virtual void setDecreaseStepValue (float value) { decreaseValue = value; } + + virtual bool attached (CView *parent); + virtual bool removed (CView *parent); + virtual void draw (CDrawContext *pContext); + virtual void setDirty (const bool val = true); + + void setUseOffscreen (bool val = true); + bool getUseOffscreen () const { return bUseOffscreen; } + + CLASS_METHODS(CVuMeter, CControl) + +protected: + CBitmap *onBitmap; + CBitmap *offBitmap; + COffscreenContext *pOScreen; + + long nbLed; + long style; + float decreaseValue; + bool bUseOffscreen; + + CRect rectOn; + CRect rectOff; +}; + + +#if !PLUGGUI +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +class CFileSelector +{ +public: + CFileSelector (AudioEffectX* effect); + virtual ~CFileSelector (); + + long run (VstFileSelect *vstFileSelect); + +protected: + AudioEffectX* effect; + VstFileSelect *vstFileSelect; +}; +#endif + +} // namespace VSTGUI + +#endif // __vstcontrol__ |