1 /* BEGIN_COMMON_COPYRIGHT_HEADER
2  * (c)LGPL2+
3  *
4  * LXQt - a lightweight, Qt based, desktop toolset
5  * https://lxqt.org
6  *
7  * Copyright: 2012 Razor team
8  * Authors:
9  *   Kuzma Shapran <kuzma.shapran@gmail.com>
10  *
11  * This program or library is free software; you can redistribute it
12  * and/or modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20 
21  * You should have received a copy of the GNU Lesser General
22  * Public License along with this library; if not, write to the
23  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301 USA
25  *
26  * END_COMMON_COPYRIGHT_HEADER */
27 
28 #ifndef LXQTPANELSYSSTAT_H
29 #define LXQTPANELSYSSTAT_H
30 
31 #include "../panel/ilxqtpanelplugin.h"
32 #include "lxqtsysstatconfiguration.h"
33 
34 #include <QLabel>
35 
36 
37 class LXQtSysStatTitle;
38 class LXQtSysStatContent;
39 class LXQtPanel;
40 
41 namespace SysStat {
42     class BaseStat;
43 }
44 
45 class LXQtSysStat : public QObject, public ILXQtPanelPlugin
46 {
47     Q_OBJECT
48 public:
49     LXQtSysStat(const ILXQtPanelPluginStartupInfo &startupInfo);
50     ~LXQtSysStat();
51 
widget()52     virtual QWidget *widget() { return mWidget; }
themeId()53     virtual QString themeId() const { return QStringLiteral("SysStat"); }
flags()54     virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; }
isSeparate()55     virtual bool isSeparate() const { return true; }
56 
57     QDialog *configureDialog();
58 
59     void realign();
60 
61 protected slots:
62     virtual void lateInit();
63     virtual void settingsChanged();
64 
65 private:
66     QWidget *mWidget;
67     LXQtSysStatTitle *mFakeTitle;
68     LXQtSysStatContent *mContent;
69     QSize mSize;
70 };
71 
72 class LXQtSysStatTitle : public QLabel
73 {
74     Q_OBJECT
75 public:
76     LXQtSysStatTitle(QWidget *parent = nullptr);
77     ~LXQtSysStatTitle();
78 
79 protected:
80     bool event(QEvent *e);
81 
82 signals:
83     void fontChanged(QFont);
84 };
85 
86 class LXQtSysStatContent : public QWidget
87 {
88     Q_OBJECT
89 
90     Q_PROPERTY(QColor gridColor           READ gridColour           WRITE setGridColour)
91     Q_PROPERTY(QColor titleColor          READ titleColour          WRITE setTitleColour)
92     Q_PROPERTY(QColor cpuSystemColor      READ cpuSystemColour      WRITE setCpuSystemColour)
93     Q_PROPERTY(QColor cpuUserColor        READ cpuUserColour        WRITE setCpuUserColour)
94     Q_PROPERTY(QColor cpuNiceColor        READ cpuNiceColour        WRITE setCpuNiceColour)
95     Q_PROPERTY(QColor cpuOtherColor       READ cpuOtherColour       WRITE setCpuOtherColour)
96     Q_PROPERTY(QColor frequencyColor      READ frequencyColour      WRITE setFrequencyColour)
97     Q_PROPERTY(QColor memAppsColor        READ memAppsColour        WRITE setMemAppsColour)
98     Q_PROPERTY(QColor memBuffersColor     READ memBuffersColour     WRITE setMemBuffersColour)
99     Q_PROPERTY(QColor memCachedColor      READ memCachedColour      WRITE setMemCachedColour)
100     Q_PROPERTY(QColor swapUsedColor       READ swapUsedColour       WRITE setSwapUsedColour)
101     Q_PROPERTY(QColor netReceivedColor    READ netReceivedColour    WRITE setNetReceivedColour)
102     Q_PROPERTY(QColor netTransmittedColor READ netTransmittedColour WRITE setNetTransmittedColour)
103 
104 public:
105     LXQtSysStatContent(ILXQtPanelPlugin *plugin, QWidget *parent = nullptr);
106     ~LXQtSysStatContent();
107 
108     void updateSettings(const PluginSettings *);
109 
110 #undef QSS_COLOUR
111 #define QSS_COLOUR(GETNAME, SETNAME) \
112     QColor GETNAME##Colour() const; \
113     void SETNAME##Colour(QColor value);
114 
115     QSS_COLOUR(grid,           setGrid)
116     QSS_COLOUR(title,          setTitle)
117     QSS_COLOUR(cpuSystem,      setCpuSystem)
118     QSS_COLOUR(cpuUser,        setCpuUser)
119     QSS_COLOUR(cpuNice,        setCpuNice)
120     QSS_COLOUR(cpuOther,       setCpuOther)
121     QSS_COLOUR(frequency,      setFrequency)
122     QSS_COLOUR(memApps,        setMemApps)
123     QSS_COLOUR(memBuffers,     setMemBuffers)
124     QSS_COLOUR(memCached,      setMemCached)
125     QSS_COLOUR(swapUsed,       setSwapUsed)
126     QSS_COLOUR(netReceived,    setNetReceived)
127     QSS_COLOUR(netTransmitted, setNetTransmitted)
128 
129 #undef QSS_COLOUR
130 
131 public slots:
132     void setTitleFont(QFont value);
133     void reset();
134 
135 protected:
136     void paintEvent(QPaintEvent *);
137     void resizeEvent(QResizeEvent *);
138 
139 protected slots:
140     void cpuLoadFrequencyUpdate(float user, float nice, float system, float other, float frequencyRate, uint frequency);
141     void cpuLoadUpdate(float user, float nice, float system, float other);
142     void memoryUpdate(float apps, float buffers, float cached);
143     void swapUpdate(float used);
144     void networkUpdate(unsigned received, unsigned transmitted);
145 
146 private:
147     void toolTipInfo(QString const & tooltip);
148 
149 private:
150     ILXQtPanelPlugin *mPlugin;
151 
152     SysStat::BaseStat *mStat;
153 
154     typedef struct ColourPalette
155     {
156         QColor gridColour;
157 
158         QColor titleColour;
159 
160         QColor cpuSystemColour;
161         QColor cpuUserColour;
162         QColor cpuNiceColour;
163         QColor cpuOtherColour;
164         QColor frequencyColour;
165 
166         QColor memAppsColour;
167         QColor memBuffersColour;
168         QColor memCachedColour;
169         QColor swapUsedColour;
170 
171         QColor netReceivedColour;
172         QColor netTransmittedColour;
173     } ColourPalette;
174 
175     double mUpdateInterval;
176     int mMinimalSize;
177 
178     int mGridLines;
179 
180     QString mTitleLabel;
181     QFont mTitleFont;
182     int mTitleFontPixelHeight;
183 
184     QString mDataType;
185 
186     QString mDataSource;
187 
188     bool mUseFrequency;
189 
190     int mNetMaximumSpeed;
191     qreal mNetRealMaximumSpeed;
192     bool mLogarithmicScale;
193     int mLogScaleSteps;
194     qreal mLogScaleMax;
195 
196 
197     bool mUseThemeColours;
198     ColourPalette mThemeColours;
199     ColourPalette mSettingsColours;
200     ColourPalette mColours;
201     QColor mNetBothColour;
202 
203 
204     int mHistoryOffset;
205     QImage mHistoryImage;
206 
207 
208     void clearLine();
209 
210     void mixNetColours();
211     void updateTitleFontPixelHeight();
212 };
213 
214 
215 class LXQtSysStatLibrary: public QObject, public ILXQtPanelPluginLibrary
216 {
217     Q_OBJECT
218     Q_PLUGIN_METADATA(IID "lxqt.org/Panel/PluginInterface/3.0")
Q_INTERFACES(ILXQtPanelPluginLibrary)219     Q_INTERFACES(ILXQtPanelPluginLibrary)
220 public:
221     ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const
222     {
223         return new LXQtSysStat(startupInfo);
224     }
225 };
226 
227 #endif // LXQTPANELSYSSTAT_H
228