1/*******************************************************************************
2/
3/	File:			ColumnTypes.h
4/
5/   Description:    Experimental classes that implement particular column/field
6/					data types for use in BColumnListView.
7/
8/	Copyright 2000+, Be Incorporated, All Rights Reserved
9/
10*******************************************************************************/
11
12
13#ifndef _COLUMN_TYPES_H
14#define _COLUMN_TYPES_H
15
16
17#include "ColumnListView.h"
18
19#include <Bitmap.h>
20#include <DateFormat.h>
21#include <DateTimeFormat.h>
22#include <Font.h>
23#include <NumberFormat.h>
24#include <String.h>
25
26
27//=====================================================================
28// Common base-class: a column that draws a standard title at its top.
29
30class BTitledColumn : public BColumn
31{
32public:
33						BTitledColumn(const char* title, float width, float minWidth,
34							float maxWidth, alignment align = B_ALIGN_LEFT);
35	virtual void		DrawTitle(BRect rect, BView* parent);
36	virtual void		GetColumnName(BString* into) const;
37
38			void		DrawString(const char*, BView*, BRect);
39			void		SetTitle(const char* title);
40			void		Title(BString* forTitle) const;
41							// sets the BString arg to be the title
42			float		FontHeight() const;
43
44	virtual float		GetPreferredWidth(BField* field, BView* parent) const;
45
46protected:
47		BNumberFormat	fNumberFormat;
48
49private:
50			float		fFontHeight;
51			BString		fTitle;
52};
53
54
55//=====================================================================
56// Field and column classes for strings.
57
58class BStringField : public BField
59{
60public:
61								BStringField(const char* string);
62
63			void				SetString(const char* string);
64			const char*			String() const;
65			void				SetClippedString(const char* string);
66			bool				HasClippedString() const;
67			const char*			ClippedString();
68			void				SetWidth(float);
69			float				Width();
70
71private:
72			float				fWidth;
73			BString				fString;
74			BString				fClippedString;
75};
76
77
78//--------------------------------------------------------------------
79
80class BStringColumn : public BTitledColumn
81{
82public:
83								BStringColumn(const char* title, float width,
84									float minWidth, float maxWidth, uint32 truncate,
85									alignment align = B_ALIGN_LEFT);
86	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
87	virtual	int					CompareFields(BField* field1, BField* field2);
88	virtual	float				GetPreferredWidth(BField* field, BView* parent) const;
89	virtual	bool				AcceptsField(const BField* field) const;
90
91private:
92			uint32				fTruncate;
93};
94
95
96//=====================================================================
97// Field and column classes for dates.
98
99class BDateField : public BField
100{
101public:
102								BDateField(time_t* t);
103			void				SetWidth(float);
104			float				Width();
105			void				SetClippedString(const char*);
106			const char*			ClippedString();
107			time_t				Seconds();
108			time_t				UnixTime();
109
110private:
111	struct	tm					fTime;
112			time_t				fUnixTime;
113			time_t				fSeconds;
114			BString				fClippedString;
115			float				fWidth;
116};
117
118
119//--------------------------------------------------------------------
120
121class BDateColumn : public BTitledColumn
122{
123public:
124								BDateColumn(const char* title, float width,
125									float minWidth, float maxWidth,
126									alignment align = B_ALIGN_LEFT);
127	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
128	virtual	int					CompareFields(BField* field1, BField* field2);
129
130private:
131			BDateTimeFormat		fDateTimeFormat;
132			BDateFormat			fDateFormat;
133			BString				fTitle;
134};
135
136
137//=====================================================================
138// Field and column classes for numeric sizes.
139
140class BSizeField : public BField
141{
142public:
143								BSizeField(off_t size);
144			void				SetSize(off_t);
145			off_t				Size();
146
147private:
148			off_t				fSize;
149};
150
151
152//--------------------------------------------------------------------
153
154class BSizeColumn : public BTitledColumn
155{
156public:
157								BSizeColumn(const char* title, float width,
158									float minWidth, float maxWidth,
159									alignment align = B_ALIGN_LEFT);
160	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
161	virtual	int					CompareFields(BField* field1, BField* field2);
162};
163
164
165//=====================================================================
166// Field and column classes for integers.
167
168class BIntegerField : public BField
169{
170public:
171								BIntegerField(int32 number);
172			void				SetValue(int32);
173			int32				Value();
174
175private:
176			int32				fInteger;
177};
178
179
180//--------------------------------------------------------------------
181
182class BIntegerColumn : public BTitledColumn
183{
184public:
185								BIntegerColumn(const char* title, float width,
186									float minWidth, float maxWidth,
187									alignment align = B_ALIGN_LEFT);
188	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
189	virtual	int					CompareFields(BField* field1, BField* field2);
190};
191
192
193//=====================================================================
194// Field and column classes for bitmaps
195
196class BBitmapField : public BField
197{
198public:
199								BBitmapField(BBitmap* bitmap);
200	const	BBitmap*			Bitmap();
201			void				SetBitmap(BBitmap* bitmap);
202
203private:
204			BBitmap*			fBitmap;
205};
206
207
208//--------------------------------------------------------------------
209
210class BBitmapColumn : public BTitledColumn
211{
212public:
213								BBitmapColumn(const char* title, float width,
214									float minWidth, float maxWidth,
215									alignment align = B_ALIGN_LEFT);
216	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
217	virtual	int					CompareFields(BField* field1, BField* field2);
218	virtual	bool				AcceptsField(const BField* field) const;
219};
220
221
222//=====================================================================
223// Column to display BIntegerField objects as a graph.
224
225class GraphColumn : public BIntegerColumn
226{
227public:
228								GraphColumn(const char* name, float width,
229									float minWidth, float maxWidth,
230									alignment align = B_ALIGN_LEFT);
231	virtual	void				DrawField(BField* field, BRect rect, BView* parent);
232};
233
234
235#endif	// _COLUMN_TYPES_H
236