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.
kima/src/sources/source.cpp

223 lines
7.2 KiB

/***************************************************************************
* Copyright (C) 2006 by Ken Werner *
* ken.werner@web.de *
* *
* 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;
}