1/*
2 * Copyright 2001-2013, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _CONTROL_H
6#define _CONTROL_H
7
8#include <Invoker.h>
9#include <Message.h>	// For convenience
10#include <View.h>
11
12
13enum {
14	B_CONTROL_OFF = 0,
15	B_CONTROL_ON = 1,
16	B_CONTROL_PARTIALLY_ON = 2
17};
18
19class BBitmap;
20class BWindow;
21
22namespace BPrivate {
23	class BIcon;
24};
25
26
27class BControl : public BView, public BInvoker {
28public:
29								BControl(BRect frame, const char* name,
30									const char* label, BMessage* message,
31									uint32 resizingMode, uint32 flags);
32								BControl(const char* name, const char* label,
33									BMessage* message, uint32 flags);
34	virtual						~BControl();
35
36								BControl(BMessage* data);
37	static	BArchivable*		Instantiate(BMessage* data);
38	virtual	status_t			Archive(BMessage* data, bool deep = true) const;
39
40	virtual	void				WindowActivated(bool active);
41
42	virtual	void				AttachedToWindow();
43	virtual	void				DetachedFromWindow();
44	virtual	void				AllAttached();
45	virtual	void				AllDetached();
46
47	virtual	void				MessageReceived(BMessage* message);
48	virtual	void				MakeFocus(bool focus = true);
49
50	virtual	void				KeyDown(const char* bytes, int32 numBytes);
51	virtual	void				MouseDown(BPoint where);
52	virtual	void				MouseUp(BPoint where);
53	virtual	void				MouseMoved(BPoint where, uint32 code,
54									const BMessage* dragMessage);
55
56	virtual	void				SetLabel(const char* string);
57			const char*			Label() const;
58
59	virtual	void				SetValue(int32 value);
60			int32				Value() const;
61
62	virtual	void				SetEnabled(bool enabled);
63			bool				IsEnabled() const;
64
65	virtual	void				GetPreferredSize(float* _width,
66									float* _height);
67	virtual	void				ResizeToPreferred();
68
69	virtual	status_t			Invoke(BMessage* message = NULL);
70	virtual	BHandler*			ResolveSpecifier(BMessage* message,
71									int32 index, BMessage* specifier,
72									int32 what, const char* property);
73	virtual	status_t			GetSupportedSuites(BMessage* message);
74
75	virtual	status_t			Perform(perform_code d, void* arg);
76
77	virtual	status_t			SetIcon(const BBitmap* bitmap,
78									uint32 flags = 0);
79			status_t			SetIconBitmap(const BBitmap* bitmap,
80									uint32 which, uint32 flags = 0);
81			const BBitmap*		IconBitmap(uint32 which) const;
82
83protected:
84			bool				IsFocusChanging() const;
85			bool				IsTracking() const;
86			void				SetTracking(bool state);
87
88			void				SetValueNoUpdate(int32 value);
89
90private:
91			struct IconData;
92
93private:
94	virtual	void				_ReservedControl2();
95	virtual	void				_ReservedControl3();
96	virtual	void				_ReservedControl4();
97
98			BControl&			operator=(const BControl&);
99
100			void				InitData(BMessage* data = NULL);
101
102private:
103			char*				fLabel;
104			int32				fValue;
105			bool				fEnabled;
106			bool				fFocusChanging;
107			bool				fTracking;
108			bool				fWantsNav;
109			BPrivate::BIcon*	fIcon;
110
111#ifdef B_HAIKU_64_BIT
112			uint32				_reserved[2];
113#else
114			uint32				_reserved[3];
115#endif
116};
117
118#endif // _CONTROL_H
119