xref: /haiku/headers/os/interface/TextControl.h (revision 85892ec52f476b254d75e2bb2e6560e72faa567c)
1 /*
2  * Copyright 2006-2015, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef	_TEXT_CONTROL_H
6 #define	_TEXT_CONTROL_H
7 
8 
9 #include <Control.h>
10 #include <TextView.h>
11 
12 
13 class BLayoutItem;
14 namespace BPrivate {
15 	class _BTextInput_;
16 }
17 
18 
19 class BTextControl : public BControl {
20 public:
21 								BTextControl(BRect frame, const char* name,
22 									const char* label, const char* initialText,
23 									BMessage* message,
24 									uint32 resizeMask
25 										= B_FOLLOW_LEFT | B_FOLLOW_TOP,
26 									uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
27 								BTextControl(const char* name,
28 									const char* label, const char* initialText,
29 									BMessage* message,
30 									uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
31 								BTextControl(const char* label,
32 									const char* initialText,
33 									BMessage* message);
34 	virtual						~BTextControl();
35 
36 								BTextControl(BMessage* archive);
37 	static	BArchivable*		Instantiate(BMessage* archive);
38 	virtual	status_t			Archive(BMessage* archive,
39 									bool deep = true) const;
40 
41 	virtual	void				SetText(const char* text);
42 			const char*			Text() const;
43 			int32				TextLength() const;
44 			void				MarkAsInvalid(bool invalid);
45 
46 	virtual	void				SetValue(int32 value);
47 	virtual	status_t			Invoke(BMessage* message = NULL);
48 
49 			BTextView*			TextView() const;
50 
51 	virtual	void				SetModificationMessage(BMessage* message);
52 			BMessage*			ModificationMessage() const;
53 
54 	virtual	void				SetAlignment(alignment label, alignment text);
55 			void				GetAlignment(alignment* _label,
56 									alignment* _text) const;
57 	virtual	void				SetDivider(float position);
58 			float				Divider() const;
59 
60 	virtual	void				Draw(BRect updateRect);
61 	virtual	void				MouseDown(BPoint where);
62 	virtual	void				AttachedToWindow();
63 	virtual	void				MakeFocus(bool focus = true);
64 	virtual	void				SetEnabled(bool enable);
65 	virtual	void				FrameMoved(BPoint newPosition);
66 	virtual	void				FrameResized(float newWidth, float newHeight);
67 	virtual	void				WindowActivated(bool active);
68 
69 	virtual	void				GetPreferredSize(float* _width,
70 									float* _height);
71 	virtual	void				ResizeToPreferred();
72 
73 	virtual	void				MessageReceived(BMessage* message);
74 	virtual	BHandler*			ResolveSpecifier(BMessage* message,
75 									int32 index, BMessage* specifier,
76 									int32 what, const char* property);
77 
78 	virtual	void				MouseUp(BPoint where);
79 	virtual	void				MouseMoved(BPoint where, uint32 transit,
80 									const BMessage* dragMessage);
81 	virtual	void				DetachedFromWindow();
82 
83 	virtual	void				AllAttached();
84 	virtual	void				AllDetached();
85 	virtual	status_t			GetSupportedSuites(BMessage* data);
86 	virtual	void				SetFlags(uint32 flags);
87 
88 	virtual	BSize				MinSize();
89 	virtual	BSize				MaxSize();
90 	virtual	BSize				PreferredSize();
91 	virtual	BAlignment			LayoutAlignment();
92 
93 			BLayoutItem*		CreateLabelLayoutItem();
94 			BLayoutItem*		CreateTextViewLayoutItem();
95 
96 protected:
97 	virtual	status_t			AllArchived(BMessage* into) const;
98 	virtual	status_t			AllUnarchived(const BMessage* from);
99 
100 	virtual	void				LayoutInvalidated(bool descendants);
101 	virtual	void				DoLayout();
102 
103 	virtual	status_t			SetIcon(const BBitmap* icon, uint32 flags = 0);
104 
105 private:
106 	// FBC padding and forbidden methods
107 	virtual	status_t			Perform(perform_code d, void* arg);
108 
109 	virtual	void				_ReservedTextControl1();
110 	virtual	void				_ReservedTextControl2();
111 	virtual	void				_ReservedTextControl3();
112 	virtual	void				_ReservedTextControl4();
113 
114 			BTextControl&		operator=(const BTextControl& other);
115 
116 private:
117 	class LabelLayoutItem;
118 	class TextViewLayoutItem;
119 	struct LayoutData;
120 
121 	friend class _BTextInput_;
122 	friend class LabelLayoutItem;
123 	friend class TextViewLayoutItem;
124 
125 			void				_CommitValue();
126 			void				_UpdateTextViewColors(bool enable);
127 			void				_InitData(const char* label,
128 									const BMessage* archive = NULL);
129 			void				_InitText(const char* initialText,
130 									const BMessage* archive = NULL);
131 			void				_ValidateLayout();
132 			void				_LayoutTextView();
133 			void				_UpdateFrame();
134 
135 			void				_ValidateLayoutData();
136 
137 private:
138 			BPrivate::_BTextInput_* fText;
139 			BMessage*			fModificationMessage;
140 			alignment			fLabelAlign;
141 			float				fDivider;
142 
143 			LayoutData*			fLayoutData;
144 			uint32				fLook;
145 
146 			uint32				_reserved[8];
147 };
148 
149 
150 #endif	// _TEXT_CONTROL_H
151