aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/buttwnd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/buttwnd.h')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/buttwnd.h602
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