diff options
Diffstat (limited to 'src/sources/source.cpp')
-rw-r--r-- | src/sources/source.cpp | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/src/sources/source.cpp b/src/sources/source.cpp new file mode 100644 index 0000000..605537f --- /dev/null +++ b/src/sources/source.cpp @@ -0,0 +1,222 @@ +/*************************************************************************** + * Copyright (C) 2006 by Ken Werner * + * [email protected] * + * * + * 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 "source.h" +#include <math.h> +#include <qlayout.h> +#include <qlineedit.h> +#include <qcheckbox.h> +#include <qlabel.h> +#include <klocale.h> +#include <kglobal.h> + +//#include "kdebug.h" + +Source::Source(QWidget* inParent): + mID(""), + mPosition(0), + mName(""), + mDescription(""), + mEnabled(true), + mMaybeEnabled(true), + mShowOnApplet(true), + mMaybeShowOnApplet(true), + mShowName(true), + mToolTipEnabled(true), + mSourcePrefs(0) { +} + +Source::~Source(){ +} + +const QString& Source::getID() const{ + return mID; +} + + +int Source::getPosition() const{ + return mPosition; +} + +void Source::setPosition(int inPosition, KConfig* inKConfig){ + mPosition = inPosition; + inKConfig->writeEntry(mID + "_position", mPosition); +} + +const QString& Source::getName() const{ + return mName; +} + +const QString& Source::getDescription() const{ + return mDescription; +} + +bool Source::isMetric() const{ + return mIsMetric; +} + +bool Source::isEnabled() const{ + return mEnabled; +} + +bool Source::showOnApplet() const{ + return mShowOnApplet; +} + +bool Source::showName() const{ + return mShowName; +} + +bool Source::isToolTipEnabled() const{ + return mToolTipEnabled; +} + +void Source::setMaybeEnabled(bool inMaybeEnabled){ + if(inMaybeEnabled != mMaybeEnabled){ + mMaybeEnabled = inMaybeEnabled; + // disable/enable some widgets if source is disabled/enabled + setPrefsWidgetsEnabled(mMaybeEnabled, mSourcePrefs->taskbarCheckBox->isChecked()); + } +} + +QWidget* Source::createPrefs(QWidget* inParent){ + if(!mSourcePrefs){ + mSourcePrefs = new SourcePrefs(inParent, "sourceprefsui"); + + // disable nameCheckBox if taskbarCheckBox is disabled + connect(mSourcePrefs->taskbarCheckBox, SIGNAL(toggled(bool)), mSourcePrefs->nameCheckBox, SLOT(setEnabled(bool))); + + // add prefs widgets from sub classes + createSubPrefs(mSourcePrefs); + + // add bottom vspacer + mSourcePrefs->layout()->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding) ); + + updatePrefsGUI(); // fill the prefs gui + } + return mSourcePrefs; +} + +SourcePrefs* Source::getPrefs(){ + return mSourcePrefs; +} + +void Source::updatePrefsGUI(){ + // set values + mSourcePrefs->nameLineEdit->setText(mName); + mSourcePrefs->descriptionLabel->setText(mDescription); + mSourcePrefs->taskbarCheckBox->setChecked(mShowOnApplet); + mSourcePrefs->nameCheckBox->setChecked(mShowName); + mSourcePrefs->tooltipCheckBox->setChecked(mToolTipEnabled); + + // disable/enable some widgets if source is disabled/enabled + setPrefsWidgetsEnabled(mEnabled, mShowOnApplet); +} + +void Source::setPrefsWidgetsEnabled(bool isEnabled, bool isShownOnApplet){ + mSourcePrefs->nameLabel->setEnabled(isEnabled); + mSourcePrefs->nameLineEdit->setEnabled(isEnabled); + mSourcePrefs->taskbarCheckBox->setEnabled(isEnabled); + mSourcePrefs->nameCheckBox->setEnabled(isEnabled && isShownOnApplet); + mSourcePrefs->tooltipCheckBox->setEnabled(isEnabled); +} + +void Source::addPrefs(QWidget* inParent){ + if(inParent != NULL) + mSourcePrefs->layout()->add(inParent); +} + +void Source::applyPrefs(){ + mMaybeShowOnApplet = mSourcePrefs->taskbarCheckBox->isChecked(); + mShowName = mSourcePrefs->nameCheckBox->isChecked(); + mName = mSourcePrefs->nameLineEdit->text(); + mToolTipEnabled = mSourcePrefs->tooltipCheckBox->isChecked(); + + //kdDebug() << "Source::applyPrefs() mEnabled: " << mEnabled << ", mMaybeEnabled: " << mMaybeEnabled << endl; + if(mEnabled != mMaybeEnabled){ + mEnabled = mMaybeEnabled; + //kdDebug() << "Source::applyPrefs() emit enabledChanged: " << mEnabled << endl; + emit enabledChanged(mEnabled, this); + // force hide/show on kicker. if the user just + // disabled/enabled the source, we want to show / hide + // the source too, also if the "show on kicker" property + // did not changed. so, force this here. + mShowOnApplet = !mMaybeShowOnApplet; + } + + if(!mEnabled) + emit displaySource(false, this); + else if(mMaybeShowOnApplet != mShowOnApplet) { + emit displaySource(mMaybeShowOnApplet, this); + } + mShowOnApplet = mMaybeShowOnApplet; +} + +void Source::savePrefs(KConfig* inKConfig){ + inKConfig->writeEntry(mID + "_position", mPosition); + inKConfig->writeEntry(mID + "_enabled", mEnabled); + inKConfig->writeEntry(mID + "_showOnApplet", mShowOnApplet); + inKConfig->writeEntry(mID + "_showName", mShowName); + inKConfig->writeEntry(mID + "_name", mName); + inKConfig->writeEntry(mID + "_toolTipEnabled", mToolTipEnabled); +} + +void Source::loadPrefs(KConfig* inKConfig){ + mPosition = inKConfig->readNumEntry(mID + "_position", mPosition); + mEnabled = inKConfig->readBoolEntry(mID + "_enabled", mEnabled); + mMaybeEnabled = mEnabled; + mShowOnApplet = inKConfig->readBoolEntry(mID + "_showOnApplet", mShowOnApplet); + mMaybeShowOnApplet = mShowOnApplet; + mShowName = inKConfig->readBoolEntry(mID + "_showName", mShowName); + mName = inKConfig->readEntry(mID + "_name", mName); + mToolTipEnabled = inKConfig->readBoolEntry(mID + "_toolTipEnabled", mToolTipEnabled); + + // initializing + // this signal is usually catched by the ThreadedTrigger who enables or disables the fetch loop + emit enabledChanged(mEnabled, this); +} + +// utility methods +QString Source::formatTemperature(const QString& temp) const { + if(mIsMetric) { + return temp + QString::fromUtf8(" °C"); + } else { + return QString::number(celsiusToFahrenheit(temp.toInt())).append(QString::fromUtf8(" °F")); + } +} + +QString Source::KHzinHumanReadable( uint value ) const{ + if( value >= 1000000 ) + return QString::number( round(value/1000000.0, 1) ) + " GHz"; + else if( value >= 1000 ) + return QString::number( round(value/1000.0, -1) ) + " MHz"; + else + return QString::number( value ) + " KHz"; +} +double Source::round(double inValue, int inDigits) const{ + return floor(inValue * pow( 10, inDigits) + 0.5) * pow(10, -inDigits); +} +int Source::celsiusToFahrenheit(int inCelsius) const{ + return qRound(1.8 * inCelsius + 32); +} + +void Source::realizeWidget(){ + mIsMetric = KGlobal::locale()->measureSystem() == KLocale::Metric; +} |