TextWidget.h revision 477bd87b
1/*
2Open Tracker License
3
4Terms and Conditions
5
6Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
7
8Permission is hereby granted, free of charge, to any person obtaining a copy of
9this software and associated documentation files (the "Software"), to deal in
10the Software without restriction, including without limitation the rights to
11use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12of the Software, and to permit persons to whom the Software is furnished to do
13so, subject to the following conditions:
14
15The above copyright notice and this permission notice applies to all licensees
16and shall be included in all copies or substantial portions of the Software.
17
18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
20FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
23WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
25Except as contained in this notice, the name of Be Incorporated shall not be
26used in advertising or otherwise to promote the sale, use or other dealings in
27this Software without prior written authorization from Be Incorporated.
28
29Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
30of Be Incorporated in the United States and other countries. Other brand product
31names are registered trademarks or trademarks of their respective holders.
32All rights reserved.
33*/
34
35#ifndef _TEXT_WIDGET_H
36#define _TEXT_WIDGET_H
37
38
39#include "Model.h"
40#include "WidgetAttributeText.h"
41
42
43namespace BPrivate {
44
45class BPose;
46class BPoseView;
47class BColumn;
48
49
50struct MouseUpParams {
51	BPose* 		pose;
52	BRect 		bounds;
53	BPoseView* 	poseView;
54};
55
56
57class BTextWidget {
58public:
59	BTextWidget(Model*, BColumn*, BPoseView*);
60	virtual ~BTextWidget();
61
62	void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
63		bool selected, uint32 clipboardMode);
64	void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
65		BView* drawView, bool selected, uint32 clipboardMode, BPoint offset,
66		bool direct);
67		// second call is used for offscreen drawing, where PoseView
68		// and current drawing view are different
69
70	void MouseUp(BRect bounds, BPoseView*, BPose*, BPoint mouseLoc);
71
72	BRect CalcRect(BPoint poseLoc, const BColumn*, const BPoseView*);
73		// returns the rect derived from the formatted string width
74		// may force WidgetAttributeText recalculation
75	BRect CalcClickRect(BPoint poseLoc, const BColumn*, const BPoseView*);
76		// calls CalcRect, if result too narow, returns a wider rect for
77		// easy clicking
78	BRect ColumnRect(BPoint poseLoc, const BColumn*, const BPoseView*);
79		// returns the rect of the widget in a column, regardless
80		// of the string width; faster than CalcRect
81	BRect CalcOldRect(BPoint poseLoc, const BColumn*, const BPoseView*);
82		// after an update call this to determine the old rect so that
83		// we can invalidate properly
84
85	void StartEdit(BRect bounds, BPoseView*, BPose*);
86	void StopEdit(bool saveChanges, BPoint loc, BPoseView*, BPose*,
87		int32 index);
88
89	void SelectAll(BPoseView* view);
90	void CheckAndUpdate(BPoint, const BColumn*, BPoseView*, bool visible);
91
92	uint32 AttrHash() const;
93	bool IsEditable() const;
94	void SetEditable(bool);
95	bool IsVisible() const;
96	void SetVisible(bool);
97	bool IsActive() const;
98	void SetActive(bool);
99
100	const char* Text(const BPoseView* view) const;
101		// returns the untruncated version of the text
102	float TextWidth(const BPoseView*) const;
103	float PreferredWidth(const BPoseView*) const;
104	int Compare(const BTextWidget&, BPoseView*) const;
105		// used for sorting in PoseViews
106
107	void CheckExpiration();
108	void CancelWait();
109
110private:
111	BRect CalcRectCommon(BPoint poseLoc, const BColumn*, const BPoseView*,
112		float width);
113
114	WidgetAttributeText* fText;
115	uint32 fAttrHash;
116		// TODO: get rid of this
117	alignment fAlignment;
118
119	bool fEditable : 1;
120	bool fVisible : 1;
121	bool fActive : 1;
122	bool fSymLink : 1;
123
124	bigtime_t fLastClickedTime;
125	struct MouseUpParams fParams;
126};
127
128
129inline uint32
130BTextWidget::AttrHash() const
131{
132	return fAttrHash;
133}
134
135
136inline void
137BTextWidget::SetEditable(bool on)
138{
139	fEditable = on;
140}
141
142
143inline bool
144BTextWidget::IsEditable() const
145{
146	return fEditable && fText->IsEditable();
147}
148
149
150inline bool
151BTextWidget::IsVisible() const
152{
153	return fVisible;
154}
155
156
157inline void
158BTextWidget::SetVisible(bool on)
159{
160	fVisible = on;
161}
162
163
164inline bool
165BTextWidget::IsActive() const
166{
167	return fActive;
168}
169
170
171inline void
172BTextWidget::SetActive(bool on)
173{
174	fActive = on;
175}
176
177
178inline void
179BTextWidget::Draw(BRect widgetRect, BRect widgetTextRect, float width,
180	BPoseView* view, bool selected, uint32 clipboardMode)
181{
182	Draw(widgetRect, widgetTextRect, width, view, (BView*)view, selected,
183		clipboardMode, BPoint(0, 0), true);
184}
185
186} // namespace BPrivate
187
188using namespace BPrivate;
189
190
191#endif	// _TEXT_WIDGET_H
192