xref: /haiku/headers/private/shared/IconButton.h (revision be4367428b6478ae059614d7a9b6f6dc721e5dcb)
1804c69caSStephan Aßmus /*
2804c69caSStephan Aßmus  * Copyright 2006-2011, Haiku.
3804c69caSStephan Aßmus  * Distributed under the terms of the MIT License.
4804c69caSStephan Aßmus  *
5804c69caSStephan Aßmus  * Authors:
6804c69caSStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7804c69caSStephan Aßmus  */
8804c69caSStephan Aßmus #ifndef ICON_BUTTON_H
9804c69caSStephan Aßmus #define ICON_BUTTON_H
10804c69caSStephan Aßmus 
11804c69caSStephan Aßmus 
12804c69caSStephan Aßmus //! GUI class that loads an image from disk and shows it as clickable button.
13804c69caSStephan Aßmus 
14804c69caSStephan Aßmus 
15a1e3c32dSAxel Dörfler #include <Control.h>
16804c69caSStephan Aßmus #include <String.h>
17804c69caSStephan Aßmus 
18804c69caSStephan Aßmus 
19804c69caSStephan Aßmus class BBitmap;
20804c69caSStephan Aßmus class BMimeType;
21804c69caSStephan Aßmus 
22804c69caSStephan Aßmus 
23804c69caSStephan Aßmus namespace BPrivate {
24804c69caSStephan Aßmus 
25804c69caSStephan Aßmus 
26a1e3c32dSAxel Dörfler class BIconButton : public BControl {
27804c69caSStephan Aßmus public:
28804c69caSStephan Aßmus 								BIconButton(const char* name,
29804c69caSStephan Aßmus 									const char* label = NULL,
30804c69caSStephan Aßmus 									BMessage* message = NULL,
31804c69caSStephan Aßmus 									BHandler* target = NULL);
32804c69caSStephan Aßmus 	virtual						~BIconButton();
33804c69caSStephan Aßmus 
34804c69caSStephan Aßmus 	// BView interface
35804c69caSStephan Aßmus 	virtual	void				MessageReceived(BMessage* message);
36804c69caSStephan Aßmus 	virtual	void				AttachedToWindow();
37804c69caSStephan Aßmus 
38804c69caSStephan Aßmus 	virtual	void				Draw(BRect updateRect);
39804c69caSStephan Aßmus 	virtual	bool				ShouldDrawBorder() const;
40804c69caSStephan Aßmus 	virtual	void				DrawBorder(BRect& frame,
41804c69caSStephan Aßmus 									const BRect& updateRect,
42804c69caSStephan Aßmus 									const rgb_color& backgroundColor,
43804c69caSStephan Aßmus 									uint32 controlLookFlags);
44804c69caSStephan Aßmus 	virtual	void				DrawBackground(BRect& frame,
45804c69caSStephan Aßmus 									const BRect& updateRect,
46804c69caSStephan Aßmus 									const rgb_color& backgroundColor,
47804c69caSStephan Aßmus 									uint32 controlLookFlags);
48804c69caSStephan Aßmus 
49804c69caSStephan Aßmus 	virtual	void				MouseDown(BPoint where);
50804c69caSStephan Aßmus 	virtual	void				MouseUp(BPoint where);
51804c69caSStephan Aßmus 	virtual	void				MouseMoved(BPoint where, uint32 transit,
52804c69caSStephan Aßmus 										   const BMessage* message);
53804c69caSStephan Aßmus 	virtual	void				GetPreferredSize(float* width,
54804c69caSStephan Aßmus 												 float* height);
55804c69caSStephan Aßmus 	virtual	BSize				MinSize();
56804c69caSStephan Aßmus 	virtual	BSize				MaxSize();
57804c69caSStephan Aßmus 
58804c69caSStephan Aßmus 
59804c69caSStephan Aßmus 	// BInvoker interface
60804c69caSStephan Aßmus 	virtual	status_t			Invoke(BMessage* message = NULL);
61804c69caSStephan Aßmus 
62a1e3c32dSAxel Dörfler 	// BControl interface
63a1e3c32dSAxel Dörfler 	virtual	void				SetValue(int32 value);
64a1e3c32dSAxel Dörfler 	virtual	void				SetEnabled(bool enable);
65a1e3c32dSAxel Dörfler 
66804c69caSStephan Aßmus 	// BIconButton
67804c69caSStephan Aßmus 			bool				IsValid() const;
68804c69caSStephan Aßmus 
69804c69caSStephan Aßmus 			void				SetPressed(bool pressed);
70804c69caSStephan Aßmus 			bool				IsPressed() const;
71804c69caSStephan Aßmus 
72804c69caSStephan Aßmus 			status_t			SetIcon(int32 resourceID);
73804c69caSStephan Aßmus 			status_t			SetIcon(const char* pathToBitmap);
74*be436742SIngo Weinhold 	virtual	status_t			SetIcon(const BBitmap* bitmap,
75*be436742SIngo Weinhold 									uint32 flags = 0);
76804c69caSStephan Aßmus 			status_t			SetIcon(const BMimeType* fileType,
77804c69caSStephan Aßmus 									bool small = true);
78804c69caSStephan Aßmus 			status_t			SetIcon(const unsigned char* bitsFromQuickRes,
79804c69caSStephan Aßmus 									uint32 width, uint32 height,
80804c69caSStephan Aßmus 									color_space format,
81804c69caSStephan Aßmus 									bool convertToBW = false);
82804c69caSStephan Aßmus 			void				ClearIcon();
83804c69caSStephan Aßmus 			void				TrimIcon(bool keepAspect = true);
84804c69caSStephan Aßmus 
85804c69caSStephan Aßmus 			BBitmap*			Bitmap() const;
86804c69caSStephan Aßmus 									// caller has to delete the returned bitmap
87804c69caSStephan Aßmus 
88804c69caSStephan Aßmus protected:
89a1e3c32dSAxel Dörfler 			bool				IsInside() const;
90a1e3c32dSAxel Dörfler 			void				SetInside(bool inside);
91804c69caSStephan Aßmus 
92804c69caSStephan Aßmus private:
93804c69caSStephan Aßmus 			BBitmap*			_ConvertToRGB32(const BBitmap* bitmap) const;
94804c69caSStephan Aßmus 			status_t			_MakeBitmaps(const BBitmap* bitmap);
95804c69caSStephan Aßmus 			void				_DeleteBitmaps();
96804c69caSStephan Aßmus 			void				_SendMessage() const;
97804c69caSStephan Aßmus 			void				_Update();
98a1e3c32dSAxel Dörfler 			void				_SetTracking(bool state);
99a1e3c32dSAxel Dörfler 			void				_SetFlags(uint32 flags, bool set);
100a1e3c32dSAxel Dörfler 			bool				_HasFlags(uint32 flags) const;
101804c69caSStephan Aßmus 
102804c69caSStephan Aßmus private:
103804c69caSStephan Aßmus 			uint32				fButtonState;
104804c69caSStephan Aßmus 			BBitmap*			fNormalBitmap;
105804c69caSStephan Aßmus 			BBitmap*			fDisabledBitmap;
106804c69caSStephan Aßmus 			BBitmap*			fClickedBitmap;
107804c69caSStephan Aßmus 			BBitmap*			fDisabledClickedBitmap;
108804c69caSStephan Aßmus 
109804c69caSStephan Aßmus 			BHandler*			fTargetCache;
110804c69caSStephan Aßmus };
111804c69caSStephan Aßmus 
112804c69caSStephan Aßmus 
113804c69caSStephan Aßmus } // namespac BPrivate
114804c69caSStephan Aßmus 
115804c69caSStephan Aßmus 
116804c69caSStephan Aßmus using BPrivate::BIconButton;
117804c69caSStephan Aßmus 
118804c69caSStephan Aßmus 
119804c69caSStephan Aßmus #endif // ICON_BUTTON_H
120