diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/wnd/wndclass/buttwnd.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/buttwnd.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/buttwnd.h | 602 |
1 files changed, 602 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/buttwnd.h b/Src/Wasabi/api/wnd/wndclass/buttwnd.h new file mode 100644 index 00000000..d0367573 --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/buttwnd.h @@ -0,0 +1,602 @@ +#ifndef _BUTTWND_H +#define _BUTTWND_H + +#include <wasabicfg.h> + +#include <bfc/common.h> +#include <tataki/canvas/canvas.h> +#include <tataki/bitmap/autobitmap.h> +#include <api/wnd/wndclass/guiobjwnd.h> +#include <tataki/color/skinclr.h> +#include <api/wnd/accessible.h> +#include <api/wnd/textalign.h> + +class api_region; + +#define DEFAULT_BUTTON_TEXT_SIZE 14 +/** + Button Text Alignment + Darkain: this was changed to use TextAlign +*/ +/* +typedef enum { + BUTTONJUSTIFY_LEFT, + BUTTONJUSTIFY_CENTER +} ButtonJustify; +*/ + +#define DEFEREDCB_DOWN 0x450 +#define DEFEREDCB_UP 0x451 + +#define BUTTONWND_PARENT GuiObjectWnd + +/** + A fully skinnable button. Has images for normal, hilited, activated states. + Plus images for a checked state. It may also be used to draw OS style buttons. + See setBorderStyle() for more details. + + @short Button control. + @author Nullsoft + @ver 1.0 + @see ButtBar +*/ +class ButtonWnd : public BUTTONWND_PARENT { +public: + /** + Sets defaults for ButtonWnd objects. + + @see ~ButtonWnd() + @param button_text The button's caption. + */ + ButtonWnd(const wchar_t *button_text=NULL); + + /** + Deletes components of ButtonWnd. + + @see ButtonWnd() + */ + virtual ~ButtonWnd(); + + /** + Paints the bitmap on canvas according + to current options (centering, tiling, stretching, title). + + @ret 0 for failure, 1 for success + @param canvas The canvas on which to paint. + */ + virtual int onPaint(Canvas *canvas); + + /** + Sets the bitmaps that will be used to render the button. + This includes bitmaps for various button states. Also enables + you to set the colorgroup (gammagroup) for the bitmaps. + + @ret 1 + @param _normal Bitmap for normal state. + @param _pushed Bitmap for pushed state. + @param _hilited Bitmap for hilited state. + @param _activated Bitmap for activated state. + @param colorgroup The colorgroup for the bitmaps (gammagroup). + */ + int setBitmaps(const wchar_t *normal, const wchar_t *pushed=NULL, const wchar_t *hilited=NULL, const wchar_t *activated=NULL); + + SkinBitmap *getNormalBitmap(); + + /** + Sets the bitmaps that will be used to render the button. + This includes bitmaps for various button states. Also enables + you to set the colorgroup (gammagroup) for the bitmaps. + + @ret 1 + @param hInst The parent window's instance handle. + @param _normal Bitmap for normal state. + @param _pushed Bitmap for pushed state. + @param _hilited Bitmap for hilited state. + @param _activated Bitmap for activated state. + @param colorgroup The colorgroup for the bitmaps (gammagroup). + */ + int setBitmaps(OSMODULEHANDLE hInst, int normal, int pushed, int hilited, int activated, const wchar_t *colorgroup=NULL); + + /** + Set the right bitmap to be used. + + @see setBitmaps() + @ret 1 + @param bitmap The name of the bitmap to use. + */ + int setRightBitmap(const wchar_t *bitmap); + + /** + Center the bitmap? + + @see setBitmaps() + @ret Normalized flag + @param centerit A non zero value will center the bitmap. + */ + int setBitmapCenter(int centerit); + + /** + Sets base texture and causes rerendering. + + @see setBaseTexture() + @param useit A non zero value will use the base texture. + */ + void setUseBaseTexture(int useit); + + /** + Sets bitmap for button, sets position for button, flags whether to tile the bitmap + + @see setUseBaseTexture() + @param bmp Skin bitmap for button + @param x Button position on x-coordinate + @param yButton position on y-coordinate + @param tile Flag + */ + void setBaseTexture(SkinBitmap *bmp, int x, int y, int tile=0); + + /** + Sets the colorgroup (gammagroup) for all the bitmaps associated with + this button. + + @param _colorgroup The colorgroup for the bitmaps. + */ + void setHInstanceColorGroup(const wchar_t *_colorgroup) { colorgroup = _colorgroup; } + + /** + Writes given text to button in given size and triggers rendering. + + @see getButtonText() + @assert Text string is not empty + @ret 1 + @param text Label text + @param size Size to render label text + */ + int setButtonText(const wchar_t *text, int size=DEFAULT_BUTTON_TEXT_SIZE); + + /** + Gets text from button. + + @see setButtonText() + @ret Button text string + */ + const wchar_t * getButtonText(); + + /** + Sets text to render at left, in center, or at right. + + @see setButtonText() + @see getButtonText() + @see ButtonJustify + @param jus BUTTONJUSTIFY_LEFT, left justified; BUTTONJUSTIFY_CENTER, centered; + */ +// void setTextJustification(ButtonJustify jus); + void setTextAlign(TextAlign align); + + TextAlign getTextAlign() { return alignment; } + + /** + Enables and disables wantfocus for the button. When disabled, the button can + never receive focus. + + @param want !0, enable focus; 0, disable focus; + */ + void setWantFocus(int want) { iwantfocus = !!want; } + + /** + Return the wantfocus + */ + virtual int wantFocus() const { return iwantfocus; } + + /** + Event is triggered when the mouse leaves the button's region. + Override this event to implement your own behavior. + */ + virtual void onLeaveArea(); + virtual void onEnterArea(); + + /** + Gets width of button, allowing for length of text plus button margin, if any. + + @see getHeight() + @ret Button width (in pixels). + */ + int getWidth(); // our preferred width and height (from bitmaps) + + /** + Gets height of button, allowing for height of text plus button margin, if any. + + @see getWidth() + @ret Button height (in pixels). + */ + int getHeight(); + + /** + Event is triggered when focus is given to the button. + Override this event to implement your own behavior. + + @see onKillFocus() + @ret 1 + */ + virtual int onGetFocus(); + + /** + Event is triggered when the button focus is lost. + Override this event to implement your own behavior. + + @see onGetFocus() + @ret 1 + */ + virtual int onKillFocus(); + + /** + Event is triggered when a key is pressed and the button + has focus. + + @ret 1, if you handle the event; + @param c The value of the key that was pressed. + */ + virtual int onChar(unsigned int c); + + /** + Saves new status and rerenders, if button enabled status changes. + + @see getEnabled() + @see onEnable() + @param _enabled 0, disabled; !0 enabled; + */ + void enableButton(int enabled); // can be pushed + + /** + Tells parent to handle left button click. + + @see onRightPush() + @param x Mouse click x-coordinate + @param y Mouse click y-coordinate + */ + virtual void onLeftPush(int x, int y); + + /** + Passes right mouse clicks to the parent. + + @see onLeftPush() + @param x Mouse click x-coordinate + @param y Mouse click y-coordinate + */ + virtual void onRightPush(int x, int y); + + /** + Passes left double click to parent. + + @see onRightDoubleClick() + @param x Mouse click x-coordinate + @param y Mouse click y-coordinate + */ + virtual void onLeftDoubleClick(int x, int y); + + /** + Passes right double click to parent + + @see onLeftDoubleClick() + @param x Mouse click x-coordinate + @param y Mouse click y-coordinate + */ + virtual void onRightDoubleClick(int x, int y); + + /** + Event is triggered when the button will be resized. + Override this event to implement your own behavior. + + The default behavior is to cause a repaint. + + @ret 1 + */ + virtual int onResize(); + + /** + Sets the region pointed at after each mouse move. + If the region has changed, it invalidate the region + so that it will be updated on the screen. + + @ret Status from parent class + @param x New x-coordinate of mouse cursor + @param y New y-coordinate of mouse cursor + */ + virtual int onMouseMove(int x, int y); // need to catch region changes + + /** + Event is triggered when the button is enabled or disabled. + Override this event to implement your own behavior. + + @see getEnabled() + @ret 1 + @param is The enable state (nonzero is enabled). + */ + virtual int onEnable(int is); + + /** + Returns the value of the enabled flag. + + @see enableButton() + @see onEnable() + @ret enabled + */ + virtual int getEnabled() const; + + /** + Get the preferences for this button. + This will enable you to read the suggested width and height + for the button. + + @ret Width or height of the normal bitmap, as requested, or a property from the parent class. + @param what SUGGESTED_W, will return the width; SUGGESTED_H, will return the height; + */ + virtual int getPreferences(int what); + + /** + Get the button state. This is the state caused by user interaction. + + @ret !0, pushed; 0, not pushed; + */ + virtual int userDown() { return userdown; } + + /** + + */ + virtual int wantClicks() { return getEnabled(); } + + /** + Set the bitmap to use when the button will be "checked". + This enables you to have checked buttons and menu items. + + @see setChecked() + @see getChecked() + @param checkbm The name of the bitmap to use. + */ + void setCheckBitmap(const wchar_t *checkbm); + + /** + Set the checked state of the button. + + @param c <0, not checked; 0, none, >0 checked; + */ + void setChecked(int c) { checked=c; }; // <0=nocheck, 0=none, >0=checked + + /** + Get the checked state of the button. + + @ret <0, not checked; 0, none; >0 checked; + */ + int getChecked() const { return checked; } + + /** + Triggers rerendering in the opposite + highlight state if the hilighting flag is changed. + + @see getHilite() + @param h + */ + void setHilite(int h); + + /** + + + @see setHilite() + @ret Is either highlighting flag set? + */ + int getHilite(); + + /** + Simulate a button push. You can use this method to simulate + menu pushing also. + + @see getPushed() + @param p A nonzero value will simulate a push. + */ + void setPushed(int p); // used by menus to simulate pushing + + /** + Get the pushed state of a button. + + @see setPushed() + @ret 0, not pushed; !0, pushed; + */ + int getPushed() const; // used by menus to simulate pushing + + /** + Sets the auto dim state. Autodim will dim the normal + bitmap if no hilite bitmap is provided. + + @param ad !0, autodim on; 0, autodim off; + */ + void setAutoDim(int ad) { autodim=!!ad; } // nonzero makes it dim if there's no hilite bitmap + + /** + Get the autodim state. + + @see setAutoDim() + @ret 0, autodim off; !0 autodim on; + */ + int getAutoDim() const { return autodim; } // nonzero makes it dim if there's no hilite bitmap + + /** + Set the active state of the button. + + @see getActivatedButton() + @see setActivatedNoCallback() + @param a !0, activate the button; 0, deactivate the button; + */ + virtual void setActivatedButton(int a); + + /** + Set the active state of the button, without generating a callback. + This means that the onActivated event will not fire for this button. + + @see getActivatedButton() + @see setActivatedButton() + @param a !0, activate the button; 0, deactivate the button; + */ + virtual void setActivatedNoCallback(int a); + + /** + Get the active state of the button. + + @see setActivatedButton() + @ret activated !0, active; 0, inactive; + */ + virtual int getActivatedButton(); + + /** + Render borders around the button? + + @param b !0, borders; 0, no borders; + */ + void setBorders(int b); + + /** + Sets the border style for the button. This + has no effect if no borders are being drawn. + + "button_normal" A normal button. + "osbutton_normal" A normal OS button (if in Windows, will show a std win32 button). + "osbutton_close" An OS close button. + "osbutton_minimize" An OS minimize button. + "osbutton_maximize" An OS maximize button. + + @see getBorderStyle() + @param style The style of button you want. + */ + void setBorderStyle(const wchar_t *style); + + /** + Get the border style of the button (if there is one). + If no border is drawn, this method always returns NULL. + + @see setBorderStyle() + @ret The border style. + */ + const wchar_t *getBorderStyle(); + + /** + Set the inactive alpha blending value. This is the alpha blending + value that will be used for blending when the button does NOT have focus. + + @param a The alpha value, range is from 0 (fully transparent) to 255 (fully opaque). + */ + void setInactiveAlpha(int a); + + /** + Set the active alpha blending value. This is the alpha blending value + that will be used for blending when the button HAS focus. + + @param a The alpha value, range is from 0 (fully transparent) to 255 (fully opaque). + */ + void setActiveAlpha(int a); + + /** + Sets the colors for various states of our button. This is + done via element id's which are in the skin xml or registered + as seperate xml. + + @param text Normal text color (window has focus but button is not active). + @param hilite Hilited text color (button has focus). + @param dimmed Dimmed text color (parent window doesn't even have focus). + */ + void setColors(const wchar_t *text=L"studio.button.text", const wchar_t *hilite=L"studio.button.hiliteText", const wchar_t *dimmed=L"studio.button.dimmedText"); + + /** + Deletes the regions and resets them to NULL. + + @see reloadResources() + */ + virtual void freeResources(); + + /** + Reinitializes regions for which there are bitmaps available. + + @see freeResources() + */ + virtual void reloadResources(); + + /** + Event is triggered when the is being activated. + Override this event to implement your own behavior. + + @see setActivatedButton() + @ret 1 + @param active The button's state (nonzero is active). + */ + virtual int onActivateButton(int active); + + /** + Returns the current region of the button. + + @see api_region + @ret The region of the button. + */ + virtual api_region *getRegion(); + + /** + Set the modal return. This is what will be returned + when the window is closed and the window is set to modal. + + @param r The return code you wish to set. + */ + virtual void setModalRetCode(int r); + + /** + Get the modal return code for the window. + + @ret The modal return code. + */ + virtual int getModalRetCode() const; + + /** + Event is triggered when the button is about to be initialized. + Override this event to implement your own behavior. + + @ret 1 + */ + virtual int onInit(); + virtual int onDeferredCallback(intptr_t p1, intptr_t p2); + + virtual void setTextColor(const wchar_t *text); + virtual void setTextHoverColor(const wchar_t *text); + virtual void setTextDimmedColor(const wchar_t *text); + + virtual void checkState(POINT *pt=NULL); + virtual void onCancelCapture(); + +private: + AutoSkinBitmap normalbmp, pushedbmp, hilitebmp, checkbmp, rightbmp, activatedbmp; + SkinBitmap *base_texture; + RegionI *normalrgn, *pushedrgn, *hirgn, *currgn, *activatedrgn; + int textsize; + TextAlign alignment; + SkinColor color_text, color_hilite, color_dimmed; + int retcode; + + StringW normalBmpStr, pushedBmpStr, hilitedBmpStr, activatedBmpStr; + + int folderstyle; + int autodim; + int userhilite; + int userdown; + int activated; + int enabled; + int borders; + const wchar_t *borderstyle; + int dsoNormal, dsoPushed, dsoDisabled; + + int iwantfocus; + int center_bitmap; + int use_base_texture; + + int checked; + int xShift, yShift, tile_base_texture; + + int inactivealpha, activealpha; + StringW colorgroup; + int forcedown; +}; + +#endif |