147 lines
3.6 KiB
C++
147 lines
3.6 KiB
C++
/*
|
|
* Copyright 2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef ACTIVITY_VIEW_H
|
|
#define ACTIVITY_VIEW_H
|
|
|
|
|
|
#include <map>
|
|
|
|
#include <Locker.h>
|
|
#include <Message.h>
|
|
#include <ObjectList.h>
|
|
#include <View.h>
|
|
|
|
#include "CircularBuffer.h"
|
|
#include "DataSource.h"
|
|
|
|
|
|
class BBitmap;
|
|
class BMessageRunner;
|
|
class Scale;
|
|
class SystemInfoHandler;
|
|
class ViewHistory;
|
|
struct data_item;
|
|
|
|
class DataHistory {
|
|
public:
|
|
DataHistory(bigtime_t memorize, bigtime_t interval);
|
|
~DataHistory();
|
|
|
|
void AddValue(bigtime_t time, int64 value);
|
|
|
|
int64 ValueAt(bigtime_t time);
|
|
int64 MaximumValue() const;
|
|
int64 MinimumValue() const;
|
|
bigtime_t Start() const;
|
|
bigtime_t End() const;
|
|
|
|
void SetRefreshInterval(bigtime_t interval);
|
|
void SetScale(Scale* scale);
|
|
|
|
private:
|
|
CircularBuffer<data_item> fBuffer;
|
|
int64 fMinimumValue;
|
|
int64 fMaximumValue;
|
|
bigtime_t fRefreshInterval;
|
|
int32 fLastIndex;
|
|
Scale* fScale;
|
|
};
|
|
|
|
|
|
class ActivityView : public BView {
|
|
public:
|
|
ActivityView(BRect frame, const char* name,
|
|
const BMessage* settings, uint32 resizingMode);
|
|
ActivityView(const char* name,
|
|
const BMessage* settings);
|
|
ActivityView(BMessage* archive);
|
|
virtual ~ActivityView();
|
|
|
|
virtual status_t Archive(BMessage* into, bool deep = true) const;
|
|
static BArchivable* Instantiate(BMessage* archive);
|
|
|
|
status_t SaveState(BMessage& state) const;
|
|
|
|
#ifdef __HAIKU__
|
|
BLayoutItem* CreateHistoryLayoutItem();
|
|
BLayoutItem* CreateLegendLayoutItem();
|
|
#endif
|
|
|
|
DataSource* FindDataSource(const DataSource* source);
|
|
status_t AddDataSource(const DataSource* source,
|
|
const BMessage* state = NULL);
|
|
status_t RemoveDataSource(const DataSource* source);
|
|
void RemoveAllDataSources();
|
|
|
|
bigtime_t RefreshInterval() const
|
|
{ return atomic_get64((int64*)&fRefreshInterval); }
|
|
|
|
protected:
|
|
virtual void AttachedToWindow();
|
|
virtual void DetachedFromWindow();
|
|
|
|
#ifdef __HAIKU__
|
|
virtual BSize MinSize();
|
|
#endif
|
|
|
|
virtual void MouseDown(BPoint where);
|
|
virtual void MouseUp(BPoint where);
|
|
virtual void MouseMoved(BPoint where, uint32 transit,
|
|
const BMessage* dragMessage);
|
|
|
|
virtual void MessageReceived(BMessage* message);
|
|
|
|
virtual void Draw(BRect updateRect);
|
|
|
|
private:
|
|
void _Init(const BMessage* settings);
|
|
::Scale* _ScaleFor(scale_type type);
|
|
void _Refresh();
|
|
static status_t _RefreshThread(void* self);
|
|
void _UpdateFrame();
|
|
BRect _HistoryFrame() const;
|
|
float _LegendHeight() const;
|
|
BRect _LegendFrame() const;
|
|
BRect _LegendFrameAt(BRect frame, int32 index) const;
|
|
BRect _LegendColorFrameAt(BRect frame, int32 index) const;
|
|
float _PositionForValue(DataSource* source,
|
|
DataHistory* values, int64 value);
|
|
void _DrawHistory();
|
|
void _UpdateResolution(int32 resolution,
|
|
bool broadcast = true);
|
|
|
|
private:
|
|
class HistoryLayoutItem;
|
|
class LegendLayoutItem;
|
|
|
|
friend class HistoryLayoutItem;
|
|
friend class LegendLayoutItem;
|
|
|
|
rgb_color fHistoryBackgroundColor;
|
|
rgb_color fLegendBackgroundColor;
|
|
#ifdef __HAIKU__
|
|
BLayoutItem* fHistoryLayoutItem;
|
|
BLayoutItem* fLegendLayoutItem;
|
|
#endif
|
|
|
|
mutable BLocker fSourcesLock;
|
|
BObjectList<DataSource> fSources;
|
|
BObjectList<DataHistory> fValues;
|
|
BObjectList<ViewHistory> fViewValues;
|
|
thread_id fRefreshThread;
|
|
sem_id fRefreshSem;
|
|
bigtime_t fRefreshInterval;
|
|
bigtime_t fLastRefresh;
|
|
int32 fDrawResolution;
|
|
bool fShowLegend;
|
|
bool fZooming;
|
|
BPoint fZoomPoint;
|
|
int32 fOriginalResolution;
|
|
SystemInfoHandler* fSystemInfoHandler;
|
|
std::map<scale_type, ::Scale*> fScales;
|
|
};
|
|
|
|
#endif // ACTIVITY_VIEW_H
|