aboutsummaryrefslogtreecommitdiffstats
path: root/headers/os/interface/TextControl.h
blob: 3c8792bc7171f46c18a5eab5619717459ffeb63a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 * Copyright 2006-2015, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef	_TEXT_CONTROL_H
#define	_TEXT_CONTROL_H


#include <Control.h>
#include <TextView.h>


class BLayoutItem;
namespace BPrivate {
	class _BTextInput_;
}


class BTextControl : public BControl {
public:
								BTextControl(BRect frame, const char* name,
									const char* label, const char* initialText,
									BMessage* message,
									uint32 resizeMask = B_FOLLOW_LEFT_TOP,
									uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
								BTextControl(const char* name,
									const char* label, const char* initialText,
									BMessage* message,
									uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
								BTextControl(const char* label,
									const char* initialText,
									BMessage* message);
	virtual						~BTextControl();

								BTextControl(BMessage* archive);
	static	BArchivable*		Instantiate(BMessage* archive);
	virtual	status_t			Archive(BMessage* archive,
									bool deep = true) const;

	virtual	void				SetText(const char* text);
			const char*			Text() const;
			int32				TextLength() const;
			void				MarkAsInvalid(bool invalid);

	virtual	void				SetValue(int32 value);
	virtual	status_t			Invoke(BMessage* message = NULL);

			BTextView*			TextView() const;

	virtual	void				SetModificationMessage(BMessage* message);
			BMessage*			ModificationMessage() const;

	virtual	void				SetAlignment(alignment label, alignment text);
			void				GetAlignment(alignment* _label,
									alignment* _text) const;
	virtual	void				SetDivider(float position);
			float				Divider() const;

	virtual	void				Draw(BRect updateRect);
	virtual	void				MouseDown(BPoint where);
	virtual	void				AttachedToWindow();
	virtual	void				MakeFocus(bool focus = true);
	virtual	void				SetEnabled(bool enable);
	virtual	void				FrameMoved(BPoint newPosition);
	virtual	void				FrameResized(float newWidth, float newHeight);
	virtual	void				WindowActivated(bool active);

	virtual	void				GetPreferredSize(float* _width,
									float* _height);
	virtual	void				ResizeToPreferred();

	virtual	void				MessageReceived(BMessage* message);
	virtual	BHandler*			ResolveSpecifier(BMessage* message,
									int32 index, BMessage* specifier,
									int32 what, const char* property);

	virtual	void				MouseUp(BPoint where);
	virtual	void				MouseMoved(BPoint where, uint32 transit,
									const BMessage* dragMessage);
	virtual	void				DetachedFromWindow();

	virtual	void				AllAttached();
	virtual	void				AllDetached();
	virtual	status_t			GetSupportedSuites(BMessage* data);
	virtual	void				SetFlags(uint32 flags);

	virtual	BSize				MinSize();
	virtual	BSize				MaxSize();
	virtual	BSize				PreferredSize();
	virtual	BAlignment			LayoutAlignment();

			BLayoutItem*		CreateLabelLayoutItem();
			BLayoutItem*		CreateTextViewLayoutItem();

protected:
	virtual	status_t			AllArchived(BMessage* into) const;
	virtual	status_t			AllUnarchived(const BMessage* from);

	virtual	void				LayoutInvalidated(bool descendants);
	virtual	void				DoLayout();

	virtual	status_t			SetIcon(const BBitmap* icon, uint32 flags = 0);

private:
	// FBC padding and forbidden methods
	virtual	status_t			Perform(perform_code d, void* arg);

	virtual	void				_ReservedTextControl1();
	virtual	void				_ReservedTextControl2();
	virtual	void				_ReservedTextControl3();
	virtual	void				_ReservedTextControl4();

			BTextControl&		operator=(const BTextControl& other);

private:
	class LabelLayoutItem;
	class TextViewLayoutItem;
	struct LayoutData;

	friend class _BTextInput_;
	friend class LabelLayoutItem;
	friend class TextViewLayoutItem;

			void				_CommitValue();
			void				_UpdateTextViewColors(bool enable);
			void				_InitData(const char* label,
									const BMessage* archive = NULL);
			void				_InitText(const char* initialText,
									const BMessage* archive = NULL);
			void				_ValidateLayout();
			void				_LayoutTextView();
			void				_UpdateFrame();

			void				_ValidateLayoutData();

private:
			BPrivate::_BTextInput_* fText;
			BMessage*			fModificationMessage;
			alignment			fLabelAlign;
			float				fDivider;

			LayoutData*			fLayoutData;
			uint32				fLook;

			uint32				_reserved[8];
};


#endif	// _TEXT_CONTROL_H