xref: /haiku/headers/private/shared/IconButton.h (revision 5c6260dc232fcb2d4d5d1103c1623dba9663b753)
1 /*
2  * Copyright 2006-2011, Haiku.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Stephan Aßmus <superstippi@gmx.de>
7  */
8 #ifndef ICON_BUTTON_H
9 #define ICON_BUTTON_H
10 
11 
12 //! GUI class that loads an image from disk and shows it as clickable button.
13 
14 
15 #include <Control.h>
16 #include <String.h>
17 
18 
19 class BBitmap;
20 class BMimeType;
21 
22 
23 namespace BPrivate {
24 
25 
26 class BIconButton : public BControl {
27 public:
28 								BIconButton(const char* name,
29 									const char* label = NULL,
30 									BMessage* message = NULL,
31 									BHandler* target = NULL);
32 	virtual						~BIconButton();
33 
34 	// BView interface
35 	virtual	void				MessageReceived(BMessage* message);
36 	virtual	void				AttachedToWindow();
37 
38 	virtual	void				Draw(BRect updateRect);
39 	virtual	bool				ShouldDrawBorder() const;
40 	virtual	void				DrawBorder(BRect& frame,
41 									const BRect& updateRect,
42 									const rgb_color& backgroundColor,
43 									uint32 controlLookFlags);
44 	virtual	void				DrawBackground(BRect& frame,
45 									const BRect& updateRect,
46 									const rgb_color& backgroundColor,
47 									uint32 controlLookFlags);
48 
49 	virtual	void				MouseDown(BPoint where);
50 	virtual	void				MouseUp(BPoint where);
51 	virtual	void				MouseMoved(BPoint where, uint32 transit,
52 										   const BMessage* message);
53 	virtual	void				GetPreferredSize(float* width,
54 												 float* height);
55 	virtual	BSize				MinSize();
56 	virtual	BSize				MaxSize();
57 
58 
59 	// BInvoker interface
60 	virtual	status_t			Invoke(BMessage* message = NULL);
61 
62 	// BControl interface
63 	virtual	void				SetValue(int32 value);
64 	virtual	void				SetEnabled(bool enable);
65 
66 	// BIconButton
67 			bool				IsValid() const;
68 
69 			void				SetPressed(bool pressed);
70 			bool				IsPressed() const;
71 
72 			status_t			SetIcon(int32 resourceID);
73 			status_t			SetIcon(const char* pathToBitmap);
74 			status_t			SetIcon(const BBitmap* bitmap);
75 			status_t			SetIcon(const BMimeType* fileType,
76 									bool small = true);
77 			status_t			SetIcon(const unsigned char* bitsFromQuickRes,
78 									uint32 width, uint32 height,
79 									color_space format,
80 									bool convertToBW = false);
81 			void				ClearIcon();
82 			void				TrimIcon(bool keepAspect = true);
83 
84 			BBitmap*			Bitmap() const;
85 									// caller has to delete the returned bitmap
86 
87 protected:
88 			bool				IsInside() const;
89 			void				SetInside(bool inside);
90 
91 private:
92 			BBitmap*			_ConvertToRGB32(const BBitmap* bitmap) const;
93 			status_t			_MakeBitmaps(const BBitmap* bitmap);
94 			void				_DeleteBitmaps();
95 			void				_SendMessage() const;
96 			void				_Update();
97 			void				_SetTracking(bool state);
98 			void				_SetFlags(uint32 flags, bool set);
99 			bool				_HasFlags(uint32 flags) const;
100 
101 private:
102 			uint32				fButtonState;
103 			BBitmap*			fNormalBitmap;
104 			BBitmap*			fDisabledBitmap;
105 			BBitmap*			fClickedBitmap;
106 			BBitmap*			fDisabledClickedBitmap;
107 
108 			BHandler*			fTargetCache;
109 };
110 
111 
112 } // namespac BPrivate
113 
114 
115 using BPrivate::BIconButton;
116 
117 
118 #endif // ICON_BUTTON_H
119