xref: /haiku/src/kits/interface/ListItem.cpp (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2001-2010 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Ulrich Wimboeck
7  *		Marc Flerackers (mflerackers@androme.be)
8  *		Rene Gollent
9  */
10 
11 
12 #include <ListItem.h>
13 
14 #include <Message.h>
15 #include <View.h>
16 
17 
18 BListItem::BListItem(uint32 level, bool expanded)
19 	:
20 	fTop(0.0),
21 	fTemporaryList(0),
22 	fWidth(0),
23 	fHeight(0),
24 	fLevel(level),
25 	fSelected(false),
26 	fEnabled(true),
27 	fExpanded(expanded),
28 	fHasSubitems(false),
29 	fVisible(true)
30 {
31 }
32 
33 
34 BListItem::BListItem(BMessage* data)
35 	:
36 	BArchivable(data),
37 	fTop(0.0),
38 	fWidth(0),
39 	fHeight(0),
40 	fLevel(0),
41 	fSelected(false),
42 	fEnabled(true),
43 	fExpanded(false),
44 	fHasSubitems(false),
45 	fVisible(true)
46 {
47 	data->FindBool("_sel", &fSelected);
48 
49 	if (data->FindBool("_disable", &fEnabled) != B_OK)
50 		fEnabled = true;
51 	else
52 		fEnabled = false;
53 
54 	data->FindBool("_li_expanded", &fExpanded);
55 	data->FindInt32("_li_outline_level", (int32*)&fLevel);
56 }
57 
58 
59 BListItem::~BListItem()
60 {
61 }
62 
63 
64 status_t
65 BListItem::Archive(BMessage* archive, bool deep) const
66 {
67 	status_t status = BArchivable::Archive(archive, deep);
68 	if (status == B_OK && fSelected)
69 		status = archive->AddBool("_sel", true);
70 
71 	if (status == B_OK && !fEnabled)
72 		status = archive->AddBool("_disable", true);
73 
74 	if (status == B_OK && fExpanded)
75 		status = archive->AddBool("_li_expanded", true);
76 
77 	if (status == B_OK && fLevel != 0)
78 		status = archive->AddInt32("_li_outline_level", fLevel);
79 
80 	return status;
81 }
82 
83 
84 float
85 BListItem::Height() const
86 {
87 	return fHeight;
88 }
89 
90 
91 float
92 BListItem::Width() const
93 {
94 	return fWidth;
95 }
96 
97 
98 bool
99 BListItem::IsSelected() const
100 {
101 	return fSelected;
102 }
103 
104 
105 void
106 BListItem::Select()
107 {
108 	fSelected = true;
109 }
110 
111 
112 void
113 BListItem::Deselect()
114 {
115 	fSelected = false;
116 }
117 
118 
119 void
120 BListItem::SetEnabled(bool on)
121 {
122 	fEnabled = on;
123 }
124 
125 
126 bool
127 BListItem::IsEnabled() const
128 {
129 	return fEnabled;
130 }
131 
132 
133 void
134 BListItem::SetHeight(float height)
135 {
136 	fHeight = height;
137 }
138 
139 
140 void
141 BListItem::SetWidth(float width)
142 {
143 	fWidth = width;
144 }
145 
146 
147 void
148 BListItem::Update(BView* owner, const BFont* font)
149 {
150 	font_height fh;
151 	font->GetHeight(&fh);
152 
153 	SetWidth(owner->Bounds().Width());
154 	SetHeight(ceilf(fh.ascent + fh.descent + fh.leading));
155 }
156 
157 
158 status_t
159 BListItem::Perform(perform_code d, void* arg)
160 {
161 	return BArchivable::Perform(d, arg);
162 }
163 
164 
165 void
166 BListItem::SetExpanded(bool expanded)
167 {
168 	fExpanded = expanded;
169 }
170 
171 
172 bool
173 BListItem::IsExpanded() const
174 {
175 	return fExpanded;
176 }
177 
178 
179 uint32
180 BListItem::OutlineLevel() const
181 {
182 	return fLevel;
183 }
184 
185 
186 void
187 BListItem::SetOutlineLevel(uint32 level)
188 {
189 	fLevel = level;
190 }
191 
192 
193 bool
194 BListItem::HasSubitems() const
195 {
196 	return fHasSubitems;
197 }
198 
199 
200 void BListItem::_ReservedListItem1() {}
201 void BListItem::_ReservedListItem2() {}
202 
203 
204 bool
205 BListItem::IsItemVisible() const
206 {
207 	return fVisible;
208 }
209 
210 
211 void
212 BListItem::SetTop(float top)
213 {
214 	fTop = top;
215 }
216 
217 
218 void
219 BListItem::SetItemVisible(bool visible)
220 {
221 	fVisible = visible;
222 }
223