xref: /haiku/headers/os/interface/Button.h (revision 22440f4105cafc95cc1d49f9bc65bb395c527d86)
1 /*
2  * Copyright 2001-2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _BUTTON_H
6 #define _BUTTON_H
7 
8 
9 #include <Control.h>
10 
11 
12 class BButton : public BControl {
13 public:
14 			enum BBehavior {
15 				B_BUTTON_BEHAVIOR,
16 				B_TOGGLE_BEHAVIOR,
17 				B_POP_UP_BEHAVIOR,
18 			};
19 
20 public:
21 								BButton(BRect frame, const char* name,
22 									const char* label, BMessage* message,
23 									uint32 resizingMode
24 										= B_FOLLOW_LEFT | B_FOLLOW_TOP,
25 									uint32 flags = B_WILL_DRAW | B_NAVIGABLE
26 										| B_FULL_UPDATE_ON_RESIZE);
27 								BButton(const char* name, const char* label,
28 									BMessage* message,
29 										uint32 flags = B_WILL_DRAW | B_NAVIGABLE
30 											| B_FULL_UPDATE_ON_RESIZE);
31 								BButton(const char* label,
32 									BMessage* message = NULL);
33 								BButton(BMessage* data);
34 
35 	virtual						~BButton();
36 
37 	static	BArchivable*		Instantiate(BMessage* data);
38 	virtual	status_t			Archive(BMessage* data, bool deep = true) const;
39 
40 	virtual	void				Draw(BRect updateRect);
41 	virtual	void				MouseDown(BPoint where);
42 	virtual	void				AttachedToWindow();
43 	virtual	void				KeyDown(const char* bytes, int32 numBytes);
44 	virtual	void				MakeDefault(bool flag);
45 	virtual	void				SetLabel(const char* string);
46 			bool				IsDefault() const;
47 
48 			bool				IsFlat() const;
49 			void				SetFlat(bool flat);
50 
51 			BBehavior			Behavior() const;
52 			void				SetBehavior(BBehavior behavior);
53 
54 			BMessage*			PopUpMessage() const;
55 			void				SetPopUpMessage(BMessage* message);
56 
57 	virtual	void				MessageReceived(BMessage* message);
58 	virtual	void				WindowActivated(bool active);
59 	virtual	void				MouseMoved(BPoint where, uint32 code,
60 									const BMessage* dragMessage);
61 	virtual	void				MouseUp(BPoint where);
62 	virtual	void				DetachedFromWindow();
63 	virtual	void				SetValue(int32 value);
64 	virtual	void				GetPreferredSize (float* _width,
65 									float* _height);
66 	virtual	void				ResizeToPreferred();
67 	virtual	status_t			Invoke(BMessage* message = NULL);
68 	virtual	void				FrameMoved(BPoint newPosition);
69 	virtual	void				FrameResized(float newWidth, float newHeight);
70 
71 	virtual	void				MakeFocus(bool focus = true);
72 	virtual	void				AllAttached();
73 	virtual	void				AllDetached();
74 
75 	virtual	BHandler*			ResolveSpecifier(BMessage* message,
76 									int32 index, BMessage* specifier,
77 									int32 what, const char* property);
78 	virtual	status_t			GetSupportedSuites(BMessage* message);
79 	virtual	status_t			Perform(perform_code d, void* arg);
80 
81 	virtual	BSize				MinSize();
82 	virtual	BSize				MaxSize();
83 	virtual	BSize				PreferredSize();
84 
85 	virtual	status_t			SetIcon(const BBitmap* icon, uint32 flags = 0);
86 
87 protected:
88 	virtual	void				LayoutInvalidated(bool descendants = false);
89 
90 private:
91 	virtual	void				_ReservedButton1();
92 	virtual	void				_ReservedButton2();
93 	virtual	void				_ReservedButton3();
94 
95 			BButton&			operator=(const BButton &);
96 
97 			BSize				_ValidatePreferredSize();
98 
99 			BRect				_PopUpRect() const;
100 
101 	inline	bool				_Flag(uint32 flag) const;
102 	inline	bool				_SetFlag(uint32 flag, bool set);
103 
104 private:
105 			BSize				fPreferredSize;
106 			uint32				fFlags;
107 			BBehavior			fBehavior;
108 			BMessage*			fPopUpMessage;
109 };
110 
111 
112 #endif	// _BUTTON_H
113