diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 2bda8f7717adf28da4af0d34fb82f63d2868c31d (patch) | |
tree | 8d927b7b47a90c4adb646482a52613f58acd6f8c /ksim/ksimsysinfo.cpp | |
download | tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.tar.gz tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ksim/ksimsysinfo.cpp')
-rw-r--r-- | ksim/ksimsysinfo.cpp | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/ksim/ksimsysinfo.cpp b/ksim/ksimsysinfo.cpp new file mode 100644 index 0000000..724adb6 --- /dev/null +++ b/ksim/ksimsysinfo.cpp @@ -0,0 +1,325 @@ +/* ksim - a system monitor for kde + * + * Copyright (C) 2001 Robbie Ward <linuxphreak@gmx.co.uk> + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <qtooltip.h> +#include <qlayout.h> +#include <qtimer.h> +#include <qregexp.h> +#include <qtextstream.h> +#include <qdatetime.h> + +#include <kdebug.h> +#include <klocale.h> +#include <kapplication.h> +#include <kglobal.h> + +#include "ksimsysinfo.h" +#include "ksimsysinfo.moc" +#include "systeminfo.h" +#include <label.h> +#include <ksimconfig.h> +#include <progress.h> +#include <themetypes.h> + +#include <time.h> +#include <string.h> + +KSim::Sysinfo::Sysinfo(KSim::Config *config, + QWidget *parent, const char *name, WFlags fl) + : DCOPObject("sysinfo"), QWidget(parent, name, fl) +{ + m_config = config; + m_layout = new QVBoxLayout(this); + + m_timeLabel = 0L; + m_dateLabel = 0L; + m_uptimeLabel = 0L; + m_memLabel = 0L; + m_swapLabel = 0L; + //m_procsLabel = 0L; + + m_timer = new QTimer(this); + connect(m_timer, SIGNAL(timeout()), SLOT(clockUptimeUpdate())); + + m_sysTimer = new QTimer(this); + connect(m_sysTimer, SIGNAL(timeout()), SLOT(sysUpdate())); + + createView(); +} + +KSim::Sysinfo::~Sysinfo() +{ + // remember to cleanup + System::cleanup(); +} + +void KSim::Sysinfo::clockUptimeUpdate() +{ + QString time; + static bool updateDate = true; + + if (m_timeLabel) { + QTime now = QTime::currentTime(); + time = KGlobal::locale()->formatTime(now, true); + if ( now == QTime(0, 0) ) + updateDate = true; + + m_timeLabel->setText(time); + } + + // only update the date when necessary + if (m_dateLabel) { + if (updateDate) { + m_dateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate())); + updateDate = false; + } + } + else { + updateDate = true; + } + + if (m_uptimeLabel) { + QString uptime = m_config->uptimeFormat(); + ++m_totalUptime; + long uptimeDays, uptimeHours, uptimeMins, uptimeSecs; + + uptimeHours = m_totalUptime / 3600; + uptimeDays = uptimeHours / 24; + uptimeMins = (m_totalUptime - uptimeHours * 3600) / 60; + uptimeSecs = m_totalUptime % 60; + + QString days; + QString hours; + QString minutes; + QString seconds; + + // found days so we have to modify hours + if (uptime.find(QRegExp("%d" ), 0) >= 0) + uptimeHours -= (uptimeDays * 24); + + days.sprintf("%02li", uptimeDays); + hours.sprintf("%02li", uptimeHours); + minutes.sprintf("%02li", uptimeMins); + seconds.sprintf("%02li", uptimeSecs); + + uptime.replace(QRegExp("%d"), days); + uptime.replace(QRegExp("%h"), hours); + uptime.replace(QRegExp("%m"), minutes); + uptime.replace(QRegExp("%s"), seconds); + m_uptimeLabel->setText(uptime); + } +} + +void KSim::Sysinfo::sysUpdate() +{ + const System &system = System::self(); + m_totalUptime = system.uptime(); + + if (m_memLabel) { + QString memory = m_config->memoryFormat(); + unsigned long total = system.totalRam(); + unsigned long free = system.freeRam(); + unsigned long shared = system.sharedRam(); + unsigned long buffer = system.bufferRam(); + unsigned long cache = system.cacheRam(); + unsigned long used = system.usedRam(); + unsigned long allFree = free + buffer + cache; + bool all = memory.find( "%F" ) != -1; + + memory.replace(QRegExp("%s"), QString::number(System::bytesToMegs(shared))); + memory.replace(QRegExp("%b"), QString::number(System::bytesToMegs(buffer))); + memory.replace(QRegExp("%c"), QString::number(System::bytesToMegs(cache))); + memory.replace(QRegExp("%u"), QString::number(System::bytesToMegs(used))); + memory.replace(QRegExp("%t"), QString::number(System::bytesToMegs(total))); + memory.replace(QRegExp("%f"), QString::number(System::bytesToMegs(free))); + memory.replace(QRegExp("%F"), QString::number(System::bytesToMegs(allFree))); + kdDebug(2003) << memory << endl; + m_memLabel->setText("Memory"); + QToolTip::add(m_memLabel, memory ); + + if ( !all ) + m_memLabel->setValue( System::bytesToMegs( total ) - System::bytesToMegs( free ) ); + else + m_memLabel->setValue( System::bytesToMegs( total ) - System::bytesToMegs( allFree ) ); + } + + if (m_swapLabel) { + QString swap = m_config->swapFormat(); + unsigned long total = system.totalSwap(); + unsigned long free = system.freeSwap(); + unsigned long swapUsed = system.usedSwap(); + swap.replace(QRegExp("%u"), QString::number(System::bytesToMegs(swapUsed))); + swap.replace(QRegExp("%t"), QString::number(System::bytesToMegs(total))); + swap.replace(QRegExp("%f"), QString::number(System::bytesToMegs(free))); + m_swapLabel->setText("Swap"); + QToolTip::add(m_swapLabel, swap); + m_swapLabel->setValue(System::bytesToMegs(total) - System::bytesToMegs(free)); + } + +// if (m_config->showProcs()) { +// m_procsLabel->setText(i18n("Procs: %1").arg(sysInfo.procs)); +// } +} + +void KSim::Sysinfo::createView() +{ + stopTimers(); + const System &system = System::self(); + int timeLocation = 0; + int dateLocation = 1; + int uptimeLocation = 2; + int memLocation = 3; + int swapLocation = 4; + // int procsLocation = 5; + int offset = 0; + + if (m_config->showTime()) { + if (!m_timeLabel) { + m_timeLabel = new KSim::Label(this); + m_layout->insertWidget(timeLocation - offset, m_timeLabel); + } + QToolTip::add(m_timeLabel, i18n("Current system time")); + m_timeLabel->show(); + } + else { + offset++; + delete m_timeLabel; + m_timeLabel = 0L; + } + + if (m_config->showDate()) { + if (!m_dateLabel) { + m_dateLabel = new KSim::Label(this); + m_layout->insertWidget(dateLocation - offset, m_dateLabel); + } + QToolTip::add(m_dateLabel, i18n("Current system date")); + m_dateLabel->show(); + } + else { + offset++; + delete m_dateLabel; + m_dateLabel = 0L; + } + + kdDebug(2003) << m_dateLabel << endl; + + if (m_config->showUptime()) { + if (!m_uptimeLabel) { + m_uptimeLabel = new KSim::Label(KSim::Types::Uptime, this); + m_layout->insertWidget(uptimeLocation - offset, m_uptimeLabel); + } + QToolTip::add(m_uptimeLabel, i18n("System uptime")); + m_uptimeLabel->show(); + } + else { + offset++; + delete m_uptimeLabel; + m_uptimeLabel = 0L; + } + + if (m_config->showMemory()) { + if (!m_memLabel) { + m_memLabel = new KSim::Progress(System::bytesToMegs(system.totalRam()), + KSim::Types::Mem, this); + m_layout->insertWidget(memLocation - offset, m_memLabel); + } + + m_memLabel->show(); + } + else { + offset++; + delete m_memLabel; + m_memLabel = 0L; + } + + if (m_config->showSwap()) { + if (!m_swapLabel) { + m_swapLabel = new KSim::Progress(System::bytesToMegs(system.totalSwap()), + KSim::Types::Swap, this); + m_layout->insertWidget(swapLocation - offset, m_swapLabel); + } + m_swapLabel->show(); + } + else { + offset++; + delete m_swapLabel; + m_swapLabel = 0L; + } + + /*if (m_config->showProcs()) { + if (!m_procsLabel) { + m_procsLabel = new KSimLabel(this); + m_layout->insertWidget(procsLocation, m_procsLabel); + } + m_procsLabel->show(); + } + else { + delete m_procsLabel; + m_procsLabel = 0L; + }*/ + +// m_layout->invalidate(); + updateGeometry(); + adjustSize(); + + startTimers(); + sysUpdate(); + clockUptimeUpdate(); +} + +void KSim::Sysinfo::stopTimers() +{ + m_timer->stop(); + m_sysTimer->stop(); +} + +void KSim::Sysinfo::startTimers() +{ + // Cellecting meminfo on fbsd seems to be expensive :( + // so better update the memory display every 5 seconds rather than 1 + // until i can find a better solution (if there is one) + if (!m_sysTimer->isActive() && !m_timer->isActive()) { + m_sysTimer->start(5000); + m_timer->start(1000); + } +} + +QString KSim::Sysinfo::uptime() const +{ + if (m_uptimeLabel) + return m_uptimeLabel->text(); + + return i18n("Uptime display disabled"); +} + +QString KSim::Sysinfo::memInfo() const +{ + if (m_memLabel) + return m_memLabel->text(); + + return i18n("Memory display disabled"); +} + +QString KSim::Sysinfo::swapInfo() const +{ + if (m_swapLabel) + return m_swapLabel->text(); + + return i18n("Swap display disabled"); +} |