1 /*
2 Open Tracker License
3
4 Terms and Conditions
5
6 Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy of
9 this software and associated documentation files (the "Software"), to deal in
10 the Software without restriction, including without limitation the rights to
11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 of the Software, and to permit persons to whom the Software is furnished to do
13 so, subject to the following conditions:
14
15 The above copyright notice and this permission notice applies to all licensees
16 and shall be included in all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
23 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
25 Except as contained in this notice, the name of Be Incorporated shall not be
26 used in advertising or otherwise to promote the sale, use or other dealings in
27 this Software without prior written authorization from Be Incorporated.
28
29 Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
30 of Be Incorporated in the United States and other countries. Other brand product
31 names are registered trademarks or trademarks of their respective holders.
32 All rights reserved.
33 */
34 #ifndef _VIEW_STATE_H
35 #define _VIEW_STATE_H
36
37
38 #include <DataIO.h>
39 #include <String.h>
40
41
42 namespace BPrivate {
43
44 const int32 kColumnStateArchiveVersion = 22;
45 // bump version when layout or size changes
46
47 class BColumn {
48 public:
49 BColumn(const char* title, float width,
50 alignment align, const char* attributeName, uint32 attrType,
51 const char* displayAs, bool statField, bool editable);
52 BColumn(const char* title, float width,
53 alignment align, const char* attributeName, uint32 attrType,
54 bool statField, bool editable);
55 ~BColumn();
56
57 BColumn(BMallocIO* stream, int32 version, bool endianSwap = false);
58 BColumn(const BMessage &, int32 index = 0);
59 static BColumn* InstantiateFromStream(BMallocIO* stream,
60 bool endianSwap = false);
61 static BColumn* InstantiateFromMessage(const BMessage &archive,
62 int32 index = 0);
63 void ArchiveToStream(BMallocIO* stream) const;
64 void ArchiveToMessage(BMessage &) const;
65
66 const char* Title() const;
67 alignment Alignment() const;
68 const char* AttrName() const;
69 uint32 AttrType() const;
70 const char* DisplayAs() const;
71 uint32 AttrHash() const;
72 bool StatField() const;
73 bool Editable() const;
74
75 //! These two values are automatically scaled to the font size.
76 float Offset() const;
77 float Width() const;
78 void SetOffset(float);
79 void SetWidth(float);
80
81 private:
82 void _Init(const char* title, float width,
83 alignment align, const char* attributeName, uint32 attrType,
84 const char* displayAs, bool statField, bool editable);
85 static BColumn* _Sanitize(BColumn* column);
86 static float _Scale();
87
88 BString fTitle;
89 float fOffset;
90 float fWidth;
91 alignment fAlignment;
92 BString fAttrName;
93 BString fDisplayAs;
94 uint32 fAttrHash;
95 uint32 fAttrType;
96 bool fStatField;
97 bool fEditable;
98 };
99
100
101 const int32 kViewStateArchiveVersion = 11;
102 // bump version when layout or size changes
103
104 class BViewState {
105 public:
106 BViewState();
107
108 BViewState(BMallocIO* stream, bool endianSwap = false);
109 BViewState(const BMessage &message);
110 static BViewState* InstantiateFromStream(BMallocIO* stream,
111 bool endianSwap = false);
112 static BViewState* InstantiateFromMessage(const BMessage &message);
113 void ArchiveToStream(BMallocIO* stream);
114 void ArchiveToMessage(BMessage &message);
115
116 uint32 ViewMode() const;
117 uint32 LastIconMode() const;
118 uint32 IconSize() const;
119 uint32 LastIconSize() const;
120 BPoint ListOrigin() const;
121 BPoint IconOrigin() const;
122 uint32 PrimarySort() const;
123 uint32 SecondarySort() const;
124 uint32 PrimarySortType() const;
125 uint32 SecondarySortType() const;
126 bool ReverseSort() const;
127
128 void SetViewMode(uint32);
129 void SetLastIconMode(uint32);
130 void SetIconSize(uint32);
131 void SetLastIconSize(uint32);
132 void SetListOrigin(BPoint);
133 void SetIconOrigin(BPoint);
134 void SetPrimarySort(uint32);
135 void SetSecondarySort(uint32);
136 void SetPrimarySortType(uint32);
137 void SetSecondarySortType(uint32);
138 void SetReverseSort(bool);
139
140 bool StateNeedsSaving();
141
142 private:
143 static BViewState* _Sanitize(BViewState* state, bool fixOnly = false);
144
145 void _ArchiveToStream(BMallocIO* stream) const;
146 void _ArchiveToMessage(BMessage &message) const;
147
148 uint32 fViewMode;
149 uint32 fLastIconMode;
150 uint32 fIconSize;
151 uint32 fLastIconSize;
152 BPoint fListOrigin;
153 BPoint fIconOrigin;
154 uint32 fPrimarySortAttr;
155 uint32 fSecondarySortAttr;
156 uint32 fPrimarySortType;
157 uint32 fSecondarySortType;
158 bool fReverseSort;
159
160 void _Init();
161 void _StorePreviousState();
162
163 uint32 fPreviousViewMode;
164 uint32 fPreviousLastIconMode;
165 uint32 fPreviousIconSize;
166 uint32 fPreviousLastIconSize;
167 BPoint fPreviousListOrigin;
168 BPoint fPreviousIconOrigin;
169 uint32 fPreviousPrimarySortAttr;
170 uint32 fPreviousSecondarySortAttr;
171 uint32 fPreviousPrimarySortType;
172 uint32 fPreviousSecondarySortType;
173 bool fPreviousReverseSort;
174 };
175
176
177 inline const char*
Title()178 BColumn::Title() const
179 {
180 return fTitle.String();
181 }
182
183
184 inline float
Offset()185 BColumn::Offset() const
186 {
187 return fOffset;
188 }
189
190
191 inline float
Width()192 BColumn::Width() const
193 {
194 return fWidth;
195 }
196
197
198 inline alignment
Alignment()199 BColumn::Alignment() const
200 {
201 return fAlignment;
202 }
203
204
205 inline const char*
AttrName()206 BColumn::AttrName() const
207 {
208 return fAttrName.String();
209 }
210
211
212 inline uint32
AttrHash()213 BColumn::AttrHash() const
214 {
215 return fAttrHash;
216 }
217
218
219 inline uint32
AttrType()220 BColumn::AttrType() const
221 {
222 return fAttrType;
223 }
224
225
226 inline const char*
DisplayAs()227 BColumn::DisplayAs() const
228 {
229 return fDisplayAs.String();
230 }
231
232
233 inline bool
StatField()234 BColumn::StatField() const
235 {
236 return fStatField;
237 }
238
239
240 inline bool
Editable()241 BColumn::Editable() const
242 {
243 return fEditable;
244 }
245
246
247 inline void
SetWidth(float w)248 BColumn::SetWidth(float w)
249 {
250 fWidth = w;
251 }
252
253
254 inline void
SetOffset(float o)255 BColumn::SetOffset(float o)
256 {
257 fOffset = o;
258 }
259
260
261 inline uint32
ViewMode()262 BViewState::ViewMode() const
263 {
264 return fViewMode;
265 }
266
267
268 inline uint32
LastIconMode()269 BViewState::LastIconMode() const
270 {
271 return fLastIconMode;
272 }
273
274
275 inline uint32
IconSize()276 BViewState::IconSize() const
277 {
278 return fIconSize;
279 }
280
281
282 inline uint32
LastIconSize()283 BViewState::LastIconSize() const
284 {
285 return fLastIconSize;
286 }
287
288
289 inline BPoint
ListOrigin()290 BViewState::ListOrigin() const
291 {
292 return fListOrigin;
293 }
294
295
296 inline BPoint
IconOrigin()297 BViewState::IconOrigin() const
298 {
299 return fIconOrigin;
300 }
301
302
303 inline uint32
PrimarySort()304 BViewState::PrimarySort() const
305 {
306 return fPrimarySortAttr;
307 }
308
309
310 inline uint32
SecondarySort()311 BViewState::SecondarySort() const
312 {
313 return fSecondarySortAttr;
314 }
315
316
317 inline uint32
PrimarySortType()318 BViewState::PrimarySortType() const
319 {
320 return fPrimarySortType;
321 }
322
323 inline uint32
SecondarySortType()324 BViewState::SecondarySortType() const
325 {
326 return fSecondarySortType;
327 }
328
329 inline bool
ReverseSort()330 BViewState::ReverseSort() const
331 {
332 return fReverseSort;
333 }
334
335
336 inline void
SetViewMode(uint32 mode)337 BViewState::SetViewMode(uint32 mode)
338 {
339 fViewMode = mode;
340 }
341
342
343 inline void
SetLastIconMode(uint32 mode)344 BViewState::SetLastIconMode(uint32 mode)
345 {
346 fLastIconMode = mode;
347 }
348
349
350 inline void
SetIconSize(uint32 size)351 BViewState::SetIconSize(uint32 size)
352 {
353 fIconSize = size;
354 }
355
356
357 inline void
SetLastIconSize(uint32 size)358 BViewState::SetLastIconSize(uint32 size)
359 {
360 fLastIconSize = size;
361 }
362
363
364 inline void
SetListOrigin(BPoint newOrigin)365 BViewState::SetListOrigin(BPoint newOrigin)
366 {
367 fListOrigin = newOrigin;
368 }
369
370 inline void
SetIconOrigin(BPoint newOrigin)371 BViewState::SetIconOrigin(BPoint newOrigin)
372 {
373 fIconOrigin = newOrigin;
374 }
375
376 inline void
SetPrimarySort(uint32 attr)377 BViewState::SetPrimarySort(uint32 attr)
378 {
379 fPrimarySortAttr = attr;
380 }
381
382
383 inline void
SetSecondarySort(uint32 attr)384 BViewState::SetSecondarySort(uint32 attr)
385 {
386 fSecondarySortAttr = attr;
387 }
388
389
390 inline void
SetPrimarySortType(uint32 type)391 BViewState::SetPrimarySortType(uint32 type)
392 {
393 fPrimarySortType = type;
394 }
395
396
397 inline void
SetSecondarySortType(uint32 type)398 BViewState::SetSecondarySortType(uint32 type)
399 {
400 fSecondarySortType = type;
401 }
402
403
404 inline void
SetReverseSort(bool on)405 BViewState::SetReverseSort(bool on)
406 {
407 fReverseSort = on;
408 }
409
410
411 inline bool
StateNeedsSaving()412 BViewState::StateNeedsSaving()
413 {
414 return (fPreviousViewMode != fViewMode)
415 || (fPreviousLastIconMode != fLastIconMode)
416 || (fPreviousIconSize != fIconSize)
417 || (fPreviousLastIconSize != fLastIconSize)
418 || (fPreviousListOrigin != fListOrigin)
419 || (fPreviousIconOrigin != fIconOrigin)
420 || (fPreviousPrimarySortAttr != fPrimarySortAttr)
421 || (fPreviousSecondarySortAttr != fSecondarySortAttr)
422 || (fPreviousPrimarySortType != fPrimarySortType)
423 || (fPreviousSecondarySortType != fSecondarySortType)
424 || (fPreviousReverseSort != fReverseSort);
425 }
426
427 } // namespace BPrivate
428
429 using namespace BPrivate;
430
431
432 #endif // _VIEW_STATE_H
433