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