xref: /haiku/src/apps/icon-o-matic/generic/gui/IconButton.h (revision 128277c969aa806add78941cd2972754c37a1572)
1*128277c9SStephan Aßmus /*
2*128277c9SStephan Aßmus  * Copyright 2006, Haiku.
3*128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4*128277c9SStephan Aßmus  *
5*128277c9SStephan Aßmus  * Authors:
6*128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7*128277c9SStephan Aßmus  */
8*128277c9SStephan Aßmus 
9*128277c9SStephan Aßmus /** gui class that loads an image from disk and shows it
10*128277c9SStephan Aßmus     as clickable button */
11*128277c9SStephan Aßmus 
12*128277c9SStephan Aßmus // TODO: inherit from BControl?
13*128277c9SStephan Aßmus 
14*128277c9SStephan Aßmus #ifndef ICON_BUTTON_H
15*128277c9SStephan Aßmus #define ICON_BUTTON_H
16*128277c9SStephan Aßmus 
17*128277c9SStephan Aßmus #include <layout.h>
18*128277c9SStephan Aßmus 
19*128277c9SStephan Aßmus #include <Invoker.h>
20*128277c9SStephan Aßmus #include <String.h>
21*128277c9SStephan Aßmus #include <View.h>
22*128277c9SStephan Aßmus 
23*128277c9SStephan Aßmus class BBitmap;
24*128277c9SStephan Aßmus class BMimeType;
25*128277c9SStephan Aßmus 
26*128277c9SStephan Aßmus class IconButton : public MView, public BView, public BInvoker {
27*128277c9SStephan Aßmus  public:
28*128277c9SStephan Aßmus 								IconButton(const char* name,
29*128277c9SStephan Aßmus 										   uint32 id,
30*128277c9SStephan Aßmus 										   const char* label = NULL,
31*128277c9SStephan Aßmus 										   BMessage* message = NULL,
32*128277c9SStephan Aßmus 										   BHandler* target = NULL);
33*128277c9SStephan Aßmus 	virtual						~IconButton();
34*128277c9SStephan Aßmus 
35*128277c9SStephan Aßmus 								// BHandler
36*128277c9SStephan Aßmus 	virtual	void				MessageReceived(BMessage* message);
37*128277c9SStephan Aßmus 
38*128277c9SStephan Aßmus 								// BView
39*128277c9SStephan Aßmus 	virtual	void				AttachedToWindow();
40*128277c9SStephan Aßmus 	virtual	void				Draw(BRect updateRect);
41*128277c9SStephan Aßmus 	virtual	void				MouseDown(BPoint where);
42*128277c9SStephan Aßmus 	virtual	void				MouseUp(BPoint where);
43*128277c9SStephan Aßmus 	virtual	void				MouseMoved(BPoint where, uint32 transit,
44*128277c9SStephan Aßmus 										   const BMessage* message);
45*128277c9SStephan Aßmus 	virtual	void				GetPreferredSize(float* width,
46*128277c9SStephan Aßmus 												 float* height);
47*128277c9SStephan Aßmus 
48*128277c9SStephan Aßmus 								// BInvoker
49*128277c9SStephan Aßmus 	virtual	status_t			Invoke(BMessage* message = NULL);
50*128277c9SStephan Aßmus 
51*128277c9SStephan Aßmus 								// MView
52*128277c9SStephan Aßmus 	virtual	minimax				layoutprefs();
53*128277c9SStephan Aßmus 	virtual	BRect				layout(BRect rect);
54*128277c9SStephan Aßmus 
55*128277c9SStephan Aßmus 								// IconButton
56*128277c9SStephan Aßmus 			bool				IsValid() const;
57*128277c9SStephan Aßmus 
58*128277c9SStephan Aßmus 	virtual	int32				Value() const;
59*128277c9SStephan Aßmus 	virtual	void				SetValue(int32 value);
60*128277c9SStephan Aßmus 
61*128277c9SStephan Aßmus 			bool				IsEnabled() const;
62*128277c9SStephan Aßmus 			void				SetEnabled(bool enable);
63*128277c9SStephan Aßmus 
64*128277c9SStephan Aßmus 			void				SetPressed(bool pressed);
65*128277c9SStephan Aßmus 			bool				IsPressed() const;
ID()66*128277c9SStephan Aßmus 			uint32				ID() const
67*128277c9SStephan Aßmus 									{ return fID; }
68*128277c9SStephan Aßmus 
69*128277c9SStephan Aßmus 			status_t			SetIcon(const char* pathToBitmap);
70*128277c9SStephan Aßmus 			status_t			SetIcon(const BBitmap* bitmap);
71*128277c9SStephan Aßmus 			status_t			SetIcon(const BMimeType* fileType,
72*128277c9SStephan Aßmus 										bool small = true);
73*128277c9SStephan Aßmus 			status_t			SetIcon(const unsigned char* bitsFromQuickRes,
74*128277c9SStephan Aßmus 										uint32 width, uint32 height,
75*128277c9SStephan Aßmus 										color_space format,
76*128277c9SStephan Aßmus 										bool convertToBW = false);
77*128277c9SStephan Aßmus 			void				ClearIcon();
78*128277c9SStephan Aßmus 
79*128277c9SStephan Aßmus 			BBitmap*			Bitmap() const;	// caller has to delete the returned bitmap
80*128277c9SStephan Aßmus 
81*128277c9SStephan Aßmus 	virtual	bool				DrawBorder() const;
82*128277c9SStephan Aßmus 	virtual	void				DrawNormalBorder(BRect r, rgb_color background,
83*128277c9SStephan Aßmus 														  rgb_color shadow,
84*128277c9SStephan Aßmus 														  rgb_color darkShadow,
85*128277c9SStephan Aßmus 														  rgb_color lightShadow,
86*128277c9SStephan Aßmus 														  rgb_color light);
87*128277c9SStephan Aßmus 	virtual	void				DrawPressedBorder(BRect r, rgb_color background,
88*128277c9SStephan Aßmus 														   rgb_color shadow,
89*128277c9SStephan Aßmus 														   rgb_color darkShadow,
90*128277c9SStephan Aßmus 														   rgb_color lightShadow,
91*128277c9SStephan Aßmus 														   rgb_color light);
92*128277c9SStephan Aßmus 
93*128277c9SStephan Aßmus  protected:
94*128277c9SStephan Aßmus 			enum {
95*128277c9SStephan Aßmus 				STATE_NONE			= 0x0000,
96*128277c9SStephan Aßmus 				STATE_TRACKING		= 0x0001,
97*128277c9SStephan Aßmus 				STATE_PRESSED		= 0x0002,
98*128277c9SStephan Aßmus 				STATE_ENABLED		= 0x0004,
99*128277c9SStephan Aßmus 				STATE_INSIDE		= 0x0008,
100*128277c9SStephan Aßmus 				STATE_FORCE_PRESSED	= 0x0010,
101*128277c9SStephan Aßmus 			};
102*128277c9SStephan Aßmus 
103*128277c9SStephan Aßmus 			void				_AddFlags(uint32 flags);
104*128277c9SStephan Aßmus 			void				_ClearFlags(uint32 flags);
105*128277c9SStephan Aßmus 			bool				_HasFlags(uint32 flags) const;
106*128277c9SStephan Aßmus 
107*128277c9SStephan Aßmus 			void				_DrawFrame(BRect frame,
108*128277c9SStephan Aßmus 										   rgb_color col1,
109*128277c9SStephan Aßmus 										   rgb_color col2,
110*128277c9SStephan Aßmus 										   rgb_color col3,
111*128277c9SStephan Aßmus 										   rgb_color col4);
112*128277c9SStephan Aßmus 
113*128277c9SStephan Aßmus // private:
114*128277c9SStephan Aßmus 			BBitmap*			_ConvertToRGB32(const BBitmap* bitmap) const;
115*128277c9SStephan Aßmus 			status_t			_MakeBitmaps(const BBitmap* bitmap);
116*128277c9SStephan Aßmus 			void				_DeleteBitmaps();
117*128277c9SStephan Aßmus 			void				_SendMessage() const;
118*128277c9SStephan Aßmus 			void				_Update();
119*128277c9SStephan Aßmus 
120*128277c9SStephan Aßmus 			uint32				fButtonState;
121*128277c9SStephan Aßmus 			int32				fID;
122*128277c9SStephan Aßmus 			BBitmap*			fNormalBitmap;
123*128277c9SStephan Aßmus 			BBitmap*			fDisabledBitmap;
124*128277c9SStephan Aßmus 			BBitmap*			fClickedBitmap;
125*128277c9SStephan Aßmus 			BBitmap*			fDisabledClickedBitmap;
126*128277c9SStephan Aßmus 			BString				fLabel;
127*128277c9SStephan Aßmus 
128*128277c9SStephan Aßmus 			BHandler*			fTargetCache;
129*128277c9SStephan Aßmus };
130*128277c9SStephan Aßmus 
131*128277c9SStephan Aßmus #endif // ICON_BUTTON_H
132