You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tork/src/statgraph.h

230 lines
8.1 KiB

/***************************************************************************
* $Id: statgraph.h,v 1.4 2008/07/31 19:56:26 hoganrobert Exp $
* Copyright (C) 2006 - 2008 Robert Hogan *
* robert@roberthogan.net *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
/***************************************************************************
* *
* KCPULoad and KNetLoad are copyright (c) 1999-2000, Markus Gustavsson *
* (c) 2002, Ben Burton *
* (c) 2004-2005, Diego Pettenò *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef STATGRAPH_H
#define STATGRAPH_H
#include <ntqobject.h>
#include <ntqstring.h>
#include <ntqcolor.h>
#include <ntqlabel.h>
/**
* @author Diego 'Flameeyes' Pettenò
*
* @brief Abstraction of the dock's graph class for KNetLoad and KCPULoad.
*
* This classes abstracts the access to the graphs for KNetLoad and KCPULoad
* (and eventually other apps, too), making possible to use them without
* system trays and so on.
*
*/
class StatGraph : public TQLabel {
Q_OBJECT
public:
//@{
/**
* @name defaultcolors Default graphs' colors
* @brief These colors will be used as defaults color for graphs.
*/
static const TQColor defaultBgColor;
static const TQColor defaultReadingColor;
static const TQColor defaultLabelColor;
static const TQColor defaultGridColor;
static const TQColor invalidColor; ///< Color used to pass transparent colors
//@}
enum Style { Lines, Bars, Shades };
protected:
Style m_style; ///< Style of the graph
TQString m_label; ///< Label to show on the graph (TQString::null to not show label)
TQColor m_bgColor; ///< Background color for the graph @see defaultBgColor
TQColor m_readingColor; ///< Color for the readings graph
TQColor m_labelColor; ///< Color for the graph's label (if any)
TQColor m_gridColor; ///< Color for the graph's grid (if any)
ushort m_gridPace; ///< Pace at which a the grid is drawn. If 0, the grid is not drawn.
ushort m_pace; ///< Horizontal pace for readings
uint m_numReadings; ///< Maximum number of readings (label's width / graph's pace)
uint m_currReading; ///< Current index in the readings arrays.
uint *m_readings; ///< Array for readings.
TQt::ButtonState m_button; ///< Button clicked in pressed/released events
public:
/**
* @brief Constructor for a StatGraph instance
* @param parent Label where to draw the graph
* @param pace X-distance between two reads. This will also influence the number
* of readings which can be added (label's width / pace)
* @param gridPace Y-distance between two grid lines. If 0, the grid is not drawn.
* @param label Label to show on the graph (TQString::null to not show label)
* @param bgColor Background color to apply to the graph
* @param name Name of the statgraph instance (passed to TQObject)
*
* This constructor initialize the TQObject parent class and the
* label which will be used to draw the graph on.
* Note: it will @b not change the background of the label, nor it will draw
* the label.
*/
StatGraph(TQWidget *parent, ushort pace = 1, ushort gridPace = 0, const TQString &label = TQString::null, const TQColor &bgColor = defaultBgColor, const char *name = "");
virtual ~StatGraph();
/**
* @brief Sets the graph's style
*/
void setStyle(Style style)
{ m_style = style; }
protected:
virtual void resizeEvent(TQResizeEvent*);
virtual void paintEvent(TQPaintEvent*);
virtual void mousePressEvent(TQMouseEvent *);
virtual void mouseReleaseEvent(TQMouseEvent *);
/**
* @brief Paints the grid on the graph
*/
void paintGrid(TQPainter &p);
/**
* @brief Paints the graph using Shades style
*/
void paintShades(TQPainter &p);
/**
* @brief Paints the graph using Bars style
*/
void paintBars(TQPainter &p);
/**
* @brief Paints the graph using Lines style
*/
void paintLines(TQPainter &p);
/**
* @brief Paints the label on the graph
*/
void paintLabel(TQPainter &p);
/**
* @brief Apply softening algorithm to readings
*
* This function is called to 'soften' the readings when addPercentReadings() is
* called with @c soft parameter true.
*/
void softenReadings(uint &reading);
public slots:
/**
* @brief REquest a clear of the graph
*
* This functions resets the readings arrays and redraw completely the graph.
*/
void clear();
/**
* @brief Sets the label to show on the graph
*
* This function sets the string to show on the graph.
* To disable showLabel, simply pass TQString::null as label to show.
*/
inline void setLabel(const TQString &label)
{
m_label = label;
}
/**
* @brief Sets the background color for the graph.
*
* This function sets the background color for the graph instance
* To set the background to transparent, simply pass invalidColor value.
*/
void setBgColor(const TQColor &color);
/**
* @brief Sets the reading color for the graph.
*
* This function sets the reading color for the graph instance.
* @note Passing invalidColor to this, made it move to the default color
* as soon as a redraw is requested.
*/
inline void setReadingColor(const TQColor &color)
{ m_readingColor = color; }
/**
* @brief Sets the label color for the graph.
*
* This function sets the label color for the graph instance.
* @note Passing invalidColor to this, made it move to the default color
* as soon as a redraw is requested.
*/
inline void setLabelColor(const TQColor &color)
{ m_labelColor = color; }
/**
* @brief Sets the grid color for the graph.
*
* This function sets the grid color for the graph instance.
* @note Passing invalidColor to this, made it move to the default color
* as soon as a redraw is requested.
*/
inline void setGridColor(const TQColor &color)
{ m_gridColor = color; }
/**
* @brief Sets the grid pace for the graph.
*
* This function sets the grid pace for the graph instance.
* @note Pass 0 to disable grid painting.
*/
inline void setGridPace(const ushort gridpace)
{ m_gridPace = gridpace; }
/**
* @brief Add the given reading as the most recent in our list.
* @param reading The reading
* @param soft If true, the reading will be aproximated to have a soft curve.
*
* The diagram will be updated accordingly.
*/
void addPercentReading(uchar reading, bool soft);
signals:
void clickedLeft();
void clickedRight();
};
#endif