1/*
2 * Copyright 2008-2009, Axel D��rfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef DATA_SOURCE_H
6#define DATA_SOURCE_H
7
8
9#include <InterfaceDefs.h>
10#include <NumberFormat.h>
11#include <String.h>
12
13class SystemInfo;
14
15
16enum scale_type {
17	kNoScale,
18	kBytePerSecondScale,
19};
20
21class DataSource {
22public:
23						DataSource(int64 initialMin, int64 initialMax);
24						DataSource();
25						DataSource(const DataSource& other);
26	virtual				~DataSource();
27
28	virtual DataSource*	Copy() const;
29	virtual DataSource*	CopyForCPU(int32 cpu) const;
30
31			int64		Minimum() const;
32			int64		Maximum() const;
33			bigtime_t	RefreshInterval() const;
34
35	virtual void		SetLimits(int64 min, int64 max);
36	virtual void		SetRefreshInterval(bigtime_t interval);
37	virtual void		SetColor(rgb_color color);
38
39	virtual	int64		NextValue(SystemInfo& info);
40	virtual void		Print(BString& text, int64 value) const;
41
42	virtual const char*	InternalName() const = 0;
43	virtual const char*	Name() const;
44	virtual const char*	Label() const;
45	virtual const char*	ShortLabel() const;
46	virtual const char*	Unit() const;
47	virtual rgb_color	Color() const;
48	virtual bool		AdaptiveScale() const;
49	virtual scale_type	ScaleType() const;
50	virtual int32		CPU() const;
51	virtual bool		PerCPU() const;
52	virtual bool		MultiCPUOnly() const;
53	virtual bool		Primary() const;
54
55	static int32		CountSources();
56	static const DataSource* SourceAt(int32 index);
57	static const DataSource* FindSource(const char* internalName);
58	static int32		IndexOf(const DataSource* source);
59
60protected:
61	int64				fMinimum;
62	int64				fMaximum;
63	bigtime_t			fInterval;
64	rgb_color			fColor;
65
66	mutable BNumberFormat	fNumberFormat;
67};
68
69
70class MemoryDataSource : public DataSource {
71public:
72						MemoryDataSource();
73	virtual				~MemoryDataSource();
74
75	virtual void		Print(BString& text, int64 value) const;
76};
77
78
79class UsedMemoryDataSource : public MemoryDataSource {
80public:
81						UsedMemoryDataSource();
82	virtual				~UsedMemoryDataSource();
83
84	virtual DataSource*	Copy() const;
85
86	virtual	int64		NextValue(SystemInfo& info);
87	virtual const char*	InternalName() const;
88	virtual const char*	Label() const;
89	virtual const char*	ShortLabel() const;
90	virtual bool		Primary() const;
91};
92
93
94class CachedMemoryDataSource : public MemoryDataSource {
95public:
96						CachedMemoryDataSource();
97	virtual				~CachedMemoryDataSource();
98
99	virtual DataSource*	Copy() const;
100
101	virtual	int64		NextValue(SystemInfo& info);
102	virtual const char*	InternalName() const;
103	virtual const char*	Label() const;
104	virtual const char*	ShortLabel() const;
105	virtual bool		Primary() const;
106};
107
108
109class SwapSpaceDataSource : public MemoryDataSource {
110public:
111						SwapSpaceDataSource();
112	virtual				~SwapSpaceDataSource();
113
114	virtual DataSource*	Copy() const;
115
116	virtual	int64		NextValue(SystemInfo& info);
117	virtual const char*	InternalName() const;
118	virtual const char*	Label() const;
119	virtual const char*	ShortLabel() const;
120	virtual bool		Primary() const;
121};
122
123
124class BlockCacheDataSource : public MemoryDataSource {
125public:
126						BlockCacheDataSource();
127	virtual				~BlockCacheDataSource();
128
129	virtual DataSource*	Copy() const;
130
131	virtual	int64		NextValue(SystemInfo& info);
132	virtual const char*	InternalName() const;
133	virtual const char*	Label() const;
134	virtual const char*	ShortLabel() const;
135};
136
137
138class SemaphoresDataSource : public DataSource {
139public:
140						SemaphoresDataSource();
141	virtual				~SemaphoresDataSource();
142
143	virtual DataSource*	Copy() const;
144
145	virtual	int64		NextValue(SystemInfo& info);
146	virtual const char*	InternalName() const;
147	virtual const char*	Label() const;
148	virtual const char*	ShortLabel() const;
149	virtual bool		AdaptiveScale() const;
150};
151
152
153class PortsDataSource : public DataSource {
154public:
155						PortsDataSource();
156	virtual				~PortsDataSource();
157
158	virtual DataSource*	Copy() const;
159
160	virtual	int64		NextValue(SystemInfo& info);
161	virtual const char*	InternalName() const;
162	virtual const char*	Label() const;
163	virtual bool		AdaptiveScale() const;
164};
165
166
167class ThreadsDataSource : public DataSource {
168public:
169						ThreadsDataSource();
170	virtual				~ThreadsDataSource();
171
172	virtual DataSource*	Copy() const;
173
174	virtual	int64		NextValue(SystemInfo& info);
175	virtual const char*	InternalName() const;
176	virtual const char*	Label() const;
177	virtual bool		AdaptiveScale() const;
178};
179
180
181class TeamsDataSource : public DataSource {
182public:
183						TeamsDataSource();
184	virtual				~TeamsDataSource();
185
186	virtual DataSource*	Copy() const;
187
188	virtual	int64		NextValue(SystemInfo& info);
189	virtual const char*	InternalName() const;
190	virtual const char*	Label() const;
191	virtual bool		AdaptiveScale() const;
192};
193
194
195class RunningAppsDataSource : public DataSource {
196public:
197						RunningAppsDataSource();
198	virtual				~RunningAppsDataSource();
199
200	virtual DataSource*	Copy() const;
201
202	virtual	int64		NextValue(SystemInfo& info);
203	virtual const char*	InternalName() const;
204	virtual const char*	Label() const;
205	virtual const char*	ShortLabel() const;
206	virtual bool		AdaptiveScale() const;
207};
208
209
210class CPUUsageDataSource : public DataSource {
211public:
212						CPUUsageDataSource(int32 cpu = 0);
213						CPUUsageDataSource(const CPUUsageDataSource& other);
214	virtual				~CPUUsageDataSource();
215
216	virtual DataSource*	Copy() const;
217	virtual DataSource*	CopyForCPU(int32 cpu) const;
218
219	virtual void		Print(BString& text, int64 value) const;
220	virtual	int64		NextValue(SystemInfo& info);
221
222	virtual const char*	InternalName() const;
223	virtual const char*	Name() const;
224	virtual const char*	Label() const;
225	virtual const char*	ShortLabel() const;
226
227	virtual int32		CPU() const;
228	virtual bool		PerCPU() const;
229	virtual bool		Primary() const;
230
231private:
232			void		_SetCPU(int32 cpu);
233
234	bigtime_t			fPreviousActive;
235	bigtime_t			fPreviousTime;
236	int32				fCPU;
237	BString				fLabel;
238	BString				fShortLabel;
239};
240
241
242class CPUCombinedUsageDataSource : public DataSource {
243public:
244						CPUCombinedUsageDataSource();
245						CPUCombinedUsageDataSource(
246							const CPUCombinedUsageDataSource& other);
247	virtual				~CPUCombinedUsageDataSource();
248
249	virtual DataSource*	Copy() const;
250
251	virtual void		Print(BString& text, int64 value) const;
252	virtual	int64		NextValue(SystemInfo& info);
253
254	virtual const char*	InternalName() const;
255	virtual const char*	Name() const;
256	virtual const char*	Label() const;
257	virtual const char*	ShortLabel() const;
258
259	virtual bool		MultiCPUOnly() const;
260	virtual bool		Primary() const;
261
262private:
263	bigtime_t			fPreviousActive;
264	bigtime_t			fPreviousTime;
265};
266
267
268class CPUFrequencyDataSource : public DataSource {
269public:
270						CPUFrequencyDataSource(int32 cpu = 0);
271						CPUFrequencyDataSource(const CPUFrequencyDataSource& other);
272	virtual				~CPUFrequencyDataSource();
273
274	virtual DataSource*	Copy() const;
275	virtual DataSource*	CopyForCPU(int32 cpu) const;
276
277	virtual void		Print(BString& text, int64 value) const;
278	virtual	int64		NextValue(SystemInfo& info);
279
280	virtual const char*	InternalName() const;
281	virtual const char*	Name() const;
282	virtual const char*	Label() const;
283	virtual const char*	ShortLabel() const;
284
285	virtual int32		CPU() const;
286	virtual bool		PerCPU() const;
287	virtual bool		Primary() const;
288
289private:
290			void		_SetCPU(int32 cpu);
291
292	int32				fCPU;
293	BString				fLabel;
294	BString				fShortLabel;
295};
296
297
298class PageFaultsDataSource : public DataSource {
299public:
300						PageFaultsDataSource();
301						PageFaultsDataSource(
302							const PageFaultsDataSource& other);
303	virtual				~PageFaultsDataSource();
304
305	virtual DataSource*	Copy() const;
306
307	virtual void		Print(BString& text, int64 value) const;
308	virtual	int64		NextValue(SystemInfo& info);
309
310	virtual const char*	InternalName() const;
311	virtual const char*	Name() const;
312	virtual const char*	Label() const;
313	virtual const char*	ShortLabel() const;
314	virtual bool		AdaptiveScale() const;
315	virtual bool		Primary() const;
316
317private:
318	uint32				fPreviousFaults;
319	bigtime_t			fPreviousTime;
320};
321
322
323class NetworkUsageDataSource : public DataSource {
324public:
325						NetworkUsageDataSource(bool in);
326						NetworkUsageDataSource(
327							const NetworkUsageDataSource& other);
328	virtual				~NetworkUsageDataSource();
329
330	virtual DataSource*	Copy() const;
331
332	virtual void		Print(BString& text, int64 value) const;
333	virtual	int64		NextValue(SystemInfo& info);
334
335	virtual const char*	InternalName() const;
336	virtual const char*	Name() const;
337	virtual const char*	Label() const;
338	virtual const char*	ShortLabel() const;
339	virtual bool		AdaptiveScale() const;
340	virtual scale_type	ScaleType() const;
341	virtual bool		Primary() const;
342
343private:
344	bool				fIn;
345	uint64				fPreviousBytes;
346	bigtime_t			fPreviousTime;
347};
348
349
350class ClipboardSizeDataSource : public DataSource {
351public:
352						ClipboardSizeDataSource(bool text);
353						ClipboardSizeDataSource(
354							const ClipboardSizeDataSource& other);
355	virtual				~ClipboardSizeDataSource();
356
357	virtual DataSource*	Copy() const;
358
359	virtual	int64		NextValue(SystemInfo& info);
360
361	virtual const char*	InternalName() const;
362	virtual const char*	Label() const;
363	virtual const char*	Unit() const;
364	virtual bool		AdaptiveScale() const;
365
366private:
367	bool				fText;
368};
369
370
371class MediaNodesDataSource : public DataSource {
372public:
373						MediaNodesDataSource();
374	virtual				~MediaNodesDataSource();
375
376	virtual DataSource*	Copy() const;
377
378	virtual const char*	InternalName() const;
379	virtual	int64		NextValue(SystemInfo& info);
380	virtual const char*	Label() const;
381	virtual bool		AdaptiveScale() const;
382};
383
384#endif	// DATA_SOURCE_H
385