123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602 |
- #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
|