diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/slider.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/slider.h | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/slider.h b/Src/Wasabi/api/wnd/wndclass/slider.h new file mode 100644 index 00000000..55c451ea --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/slider.h @@ -0,0 +1,451 @@ +#ifndef _SLIDER_H +#define _SLIDER_H + +#include <bfc/common.h> +#include <tataki/bitmap/autobitmap.h> +#include <api/wnd/wndclass/guiobjwnd.h> + +#define SLIDERWND_PARENT GuiObjectWnd +/** + Slider style control. + + @short Slider style control. + @author Nullsoft + @ver 1.0 +*/ +class SliderWnd : public SLIDERWND_PARENT +{ +public: + /** + Sets the defaults for the slider. Defaults to a horizontal + slider with the thumb in the center and is enabled. + */ + SliderWnd(); + + /** + Nothing is handled by the destructor. + */ + virtual ~SliderWnd(); + + /** + Event is triggered when the window requires a repaint. + Override this to implement your own behavior. + + Paints the slider on canvas according to current + state of the slider. + + @ret 0, Failed; 1, Success; + @param canvas The canvas on which to paint. + */ + virtual int onPaint(Canvas *canvas); + + /** + Event is triggered when the left mouse button is pressed while + the slider has focus. Override this to implement your + own behavior. + + @ret + @param x X coordinate of the mouse pointer. + @param y Y coordinate of the mouse pointer. + */ + virtual int onLeftButtonDown(int x, int y); + + /** + Event is triggered when the mouse has capture on the slider + and is being moved. Override this to implement your own + behavior. + + @ret 0, Failed; 1, Success; + @param x The X position of the mouse. + @param y The Y position of the mouse. + */ + virtual int onMouseMove(int x, int y); // only called when mouse captured + + /** + Event is triggered when the left mouse button is released. + Note that the mouse button must have been previously pressed + for this event to happen. Override this to implement your + own behavior. + + @ret 1, If you handle the event; 0, If you don't handle the event; + @param x The X position of the mouse. + @param y The Y position of the mouse. + */ + virtual int onLeftButtonUp(int x, int y); + + /** + Event is triggered when the right mouse button is pressed. + Override this to implement your own behavior. + */ + virtual int onRightButtonDown(int x, int y); + + /** + Event is triggered when a key is pressed and the slider + has focus. Override this to implement your own behavior. + + @ret 1, If you handle the event; 0, If you don't handle the event; + @param c The key that was pressed. + */ + virtual int onChar(unsigned int c); + + /** + Event is triggered when the mouse enters the region + of the slider. Override this to implement your + own behavior. + */ + virtual void onEnterArea(); + + /** + Event is triggered when the mouse leaves the region + of the slider. Override this to implement your + own behavior. + */ + virtual void onLeaveArea(); + + /** + Event is triggered then the slider is about to be initialized. + Override this event to implement your own behavior. + + By default this will render the slider according the it's current settings + and position of the thumb. + + @ret 1, Success; 0, Failure; + */ + virtual int onInit(); + + /** + Constants for positioning of the thumb. + */ + enum { + START = 0, + END = 65535, + FULL = END + }; + + /** + Set the sliders position. + + @param newpos The sliders new position. + @param wantcb !0, Generate a callback after the position has been set; 0, No callback; + */ + virtual void setPosition(int newpos, int wantcb=1); + + /** + Get the sliders current position. The range is from + START (0) to END (65535). + + @ret The sliders position (ranges from 0 to 65535). + */ + int getSliderPosition(); + + //void cancelSeek(); + + /** + Use a base texture when rendering the slider. + + @see setBaseTexture() + @param useit 0, Do not use; 1, Use base texture; + */ + void setUseBaseTexture(int useit); + + /** + Set the base texture of the slider. + + @see setUseBaseTexture() + @see SkinBitmap + @param bmp The bitmap to use as a texture. + @param x The X position of the base texture. + @param y The Y position of the base texture. + */ + void setBaseTexture(SkinBitmap *bmp, int x, int y); + + /** + Set the draw area to include the edge borders. + + @param draw 0, Do not include the edges; 1, Include the edges; + */ + void setDrawOnBorders(int draw); + + /** + Do not use the default background provided + by the current skin? + + If you set this to 1, you MUST specify your bitmaps. + + @param no 0, Use default background; 1, Do not use default; + */ + void setNoDefaultBackground(int no); + + /** + Set the bitmaps to be used to render the slider. + These include bitmaps for the left, middle, right of + the slider. For the thumb, we have bitmaps for the + normal, hilited and pushed thumb. + + The bitmaps are set using their xml id or "name". + The name should resemble something like this: + "studio.seekbar.left". + + @see setLeftBmp() + @see setMiddleBmp() + @see setRightBmp() + @see setThumbBmp() + @see setThumbDownBmp() + @see setThumbHiliteBmp() + @param thumbbmp The normal thumb bitmap name. + @param thumbdownbmp The thumb down bitmap name. + @param thumbhighbmp The hilited thumb bitmap name. + @param leftbmp The left bitmap of the slider name. + @param middlebmp The middle bitmap of the slider name. + @param rightbmp The right bitmap of the slider name. + */ + void setBitmaps(const wchar_t *thumbbmp, const wchar_t *thumbdownbmp, const wchar_t *thumbhighbmp, const wchar_t *leftbmp, const wchar_t *middlebmp, const wchar_t *rightbmp); + + /** + Set the left bitmap of the slider. + + @param name The left bitmap name. + */ + void setLeftBmp(const wchar_t *name); + + /** + Set the middle bitmap of the slider. + + @param name The middle bitmap name. + */ + void setMiddleBmp(const wchar_t *name); + + /** + Set the right bitmap of the slider. + + @param name The right bitmap name. + */ + void setRightBmp(const wchar_t *name); + + /** + Set the normal thumb bitmap of the slider. + + @param name The normal thumb bitmap name. + */ + void setThumbBmp(const wchar_t *name); + + /** + Set the thumb down bitmap of the slider. + + @param name The thumb down bitmap name. + */ + void setThumbDownBmp(const wchar_t *name); + + /** + Set the hilited thumb bitmap of the slider. + + @param name The hilited thumb bitmap name. + */ + void setThumbHiliteBmp(const wchar_t *name); + + /** + Get the height of the slider in pixels. + + @ret The height of the slider (in pixels). + */ + virtual int getHeight(); + + /** + Get the width of the slider in pixels. + + @ret The width of the slider (in pixels). + */ + virtual int getWidth(); + + /** + Get the left bitmap of the slider. + + @see SkinBitmap + @ret The left SkinBitmap. + */ + SkinBitmap *getLeftBitmap(); + + /** + Get the right bitmap of the slider. + + @see SkinBitmap + @ret The right SkinBitmap. + */ + SkinBitmap *getRightBitmap(); + + /** + Get the middle bitmap of the slider. + + @see SkinBitmap + @ret The middle SkinBitmap. + */ + SkinBitmap *getMiddleBitmap(); + + /** + Get the thumb bitmap of the slider. + + @see SkinBitmap + @ret The thumb SkinBitmap. + */ + SkinBitmap *getThumbBitmap(); + + /** + Get the thumb down bitmap of the slider. + + @see SkinBitmap + @ret The thumb down SkinBitmap. + */ + SkinBitmap *getThumbDownBitmap(); + + /** + Get the thumb hilite bitmap of the slider. + + @see SkinBitmap + @ret The thumb hilite SkinBitmap. + */ + SkinBitmap *getThumbHiliteBitmap(); + + /** + Set the sliders enable state. + + @param en 1, Enabled; 0, Disabled; + */ + + virtual void setEnable(int en); + + /** + Get the sliders enable state. + + @ret 1, Enabled; 0, Disabled; + */ + virtual int getEnable(void); + + /** + Set the orientation of the slider + (horizontal or vertical). + + @param o 0, Horizontal; 1, Vertical; + */ + virtual void setOrientation(int o); + + /** + This will set a "jump-to" position (like "center" for a balance slider). + The parameter is in thumb coordinates (0 to 65535). + + @param h The jump-to position (ranges from 0 to 65535, or START to END). + */ + virtual void setHotPosition(int h); + virtual int getHotPosRange() { return hotposrange; } + virtual void setHotPosRange(int range) { hotposrange = range; } + + /** + Set the thumb center flag. If on, this flag will + cause the thumb of the slider to be centered + automatically. + + @param c 1, Centered; 0, No centering; + */ + virtual void setThumbCentered(int c); + virtual void setThumbStretched(int c); + + /** + Set the thumb offset (from the left hand side). + This offset will be added to the zero position of the thumb. + Note, if you're using centering also, this will cause the slider + thumb to be passed the middle of the slider. + + @param o The offset of the thumb (in pixels). + */ + virtual void setThumbOffset(int o); + + /** + Set the minimum and maximum limit for the slider. + + @param minlimit The minimum value. + @param maxlimit The maximum value. + */ + virtual void setLimits(int minlimit, int maxlimit); + + virtual int getMaxLimit() { return maxlimit; } + virtual int getMinLimit() { return minlimit; } + virtual int getRange() { return maxlimit-minlimit; } + + virtual int onKeyDown(int vkcode); + + virtual void onCancelCapture(); +protected: + /** + Abort the current seek and end capture. + */ + void abort(); + + // override this to get position change notification + /** + Event is triggered when the mouse is moving the thumb + is being moved. Override this to implment your own behavior. + + @ret The thumb's position (ranges from 0 to 65535 or START to END). + */ + virtual int onSetPosition(); // called constantly as mouse moves + + /** + Event is triggered when the thumb is released and the final position + is about to be set. + + @ret The thumb's position (ranges from 0 to 65535 or START to END). + */ + virtual int onSetFinalPosition(); // called once after move done + + /** + Get the seeking status. + + @ret 1, User is seeking; 0, User is not seeking; + */ + int getSeekStatus(); // returns 1 if user is sliding tab + + int vertical; // set to 1 for up-n-down instead + + /** + Get the width of the thumb bitmap, in pixels. + + @ret The thumb's width (in pixels). + */ + int thumbWidth(); + + /** + Get the height of the thumb bitmap, in pixels. + + @ret The thumb's width (in pixels). + */ + int thumbHeight(); + // keyboard + void move_left(int bigstep); + void move_right(int bigstep); + void move_start(); + void move_end(); + + int minlimit, maxlimit, length; + +private: + int seeking; + int enabled; + int hilite; + int pos; + int oldpos; + int thumbwidth; + int captured; + int xShift, yShift; + SkinBitmap *base_texture; + int use_base_texture; + int no_default_background; + int drawOnBorders; + int hotPosition; + int origPos; + int thumbCentered, thumbOffset, thumbStretched; + int hotposrange; + + AutoSkinBitmap left, middle, right; + AutoSkinBitmap thumb, thumbdown, thumbhilite; +}; + +#endif |