diff options
Diffstat (limited to 'src/lmsensorscfg.cpp')
-rw-r--r-- | src/lmsensorscfg.cpp | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/src/lmsensorscfg.cpp b/src/lmsensorscfg.cpp new file mode 100644 index 0000000..42c8dc2 --- /dev/null +++ b/src/lmsensorscfg.cpp @@ -0,0 +1,292 @@ +/*************************************************************************** + lmsensorscfg.cpp - description + ------------------- + begin : Mon Aug 13 2001 + copyright : (C) 2001 by + email : + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "lmsensorscfg.h" + +#include "lmsensorsalarms.h" +#include "lmsensorpanel.h" +#include "lmsensordockpanel.h" +#include "lmsensorswidget.h" + +#include <qcolor.h> +#include <qlistbox.h> +#include <qlineedit.h> +#include <qcheckbox.h> +#include <qgroupbox.h> +#include <qradiobutton.h> +#include <qpushbutton.h> +#include <qobjcoll.h> +#include <qtabwidget.h> +#include <qcombobox.h> +#include <qspinbox.h> +#include <qlayout.h> +#include <kcolorbutton.h> +#include <kiconloader.h> +#include <klocale.h> +#include <kaboutapplication.h> + +LMSensorsCfg::LMSensorsCfg(SensorsList *lsensors,QWidget *parent, const char *name) : LMSensorsCfgDesign(parent,name,WDestructiveClose) +{ + sensors = lsensors; + + curSensor= 0; + + palPanelCfg= new PaletteCfg( boxPanelPalette ); + boxPanelPalette->setColumnLayout(0, Qt::Vertical ); + boxPanelPalette->layout()->setSpacing( 6 ); + boxPanelPalette->layout()->setMargin( 12 ); + QGridLayout *boxPanelPaletteLayout = new QGridLayout( boxPanelPalette->layout() ); + boxPanelPaletteLayout->setAlignment( Qt::AlignTop ); + boxPanelPaletteLayout->addWidget( palPanelCfg, 0, 0 ); + + readSensorsList(); + + connect( MainTab ,SIGNAL(currentChanged(QWidget*)), this, SLOT(slotMainTabPageChanged(QWidget *))); + connect( listSensors ,SIGNAL(highlighted(int)),this,SLOT(slotCurrentSensorChanged(int)) ); + //connect( buttonApply ,SIGNAL(clicked()),this,SLOT(slotApplyChanges())); + connect( buttonTest ,SIGNAL(clicked()),this,SLOT(slotTestAlarm())); + connect( editMinValue ,SIGNAL(activated(int)),this,SLOT(slotComboMinMaxSelected(int))); + connect( editMaxValue ,SIGNAL(activated(int)),this,SLOT(slotComboMinMaxSelected(int))); +} + +LMSensorsCfg::~LMSensorsCfg() +{ +} + +void LMSensorsCfg::readSensorsList() +{ + QObjectList *list= sensors->getSensors(); + if(list) { + listSensors->clear(); + QPixmap pm; + for(LMSensor *sensor=(LMSensor*)list->first(); sensor!=0; sensor= (LMSensor*)list->next()) { + switch(sensor->getType()) { + case LMSensor::lmTemp : pm= UserIcon("thermometer18x18.png"); break; + case LMSensor::lmFan : pm= UserIcon("cooler18x18.png"); break; + case LMSensor::lmVoltage: pm= UserIcon("battery18x18.png"); break; + } + listSensors->insertItem(pm,sensor->getDescription()); + } + listSensors->setCurrentItem(0); + } +} + + +void LMSensorsCfg::readSensorInfo(int index) +{ + if(index<0) return; + + Sensor *oldSensor= curSensor; + + curSensor= sensors->getSensor(index); + + if(!curSensor) return; + + if( oldSensor==0 || curSensor->getType()!=oldSensor->getType() || curSensor->getClass()!=oldSensor->getClass() ) + switch(curSensor->getType()) { + case LMSensor::lmTemp : GroupBoxDes->setTitle(i18n("Temperature")); + pixmapSensor->setPixmap( UserIcon( + curSensor->getClass()==Sensor::lmSensor ? + "thermometer.png":"harddisk.png" + ) ); + break; + case LMSensor::lmFan : GroupBoxDes->setTitle(i18n("Fan")); + pixmapSensor->setPixmap(UserIcon("cooler.png")); + break; + case LMSensor::lmVoltage: GroupBoxDes->setTitle(i18n("Voltage")); + pixmapSensor->setPixmap(UserIcon("battery.png")); + break; + } + + editDescription ->setText(curSensor->getDescription()); + + QString str; + + const char *mask= curSensor->getType()==LMSensor::lmVoltage ? "%.2lf":"%.0lf"; + + str.sprintf(curSensor->getPrintMask(true), curSensor->getValue()); + editValue->setText(str); + + str.sprintf(mask, curSensor->getValueIdeal()); + editIdealValue->setText(str); + + str.sprintf(mask, curSensor->getValueMin()); + editMinValue->setEditText(str); + + str.sprintf(mask, curSensor->getValueMax()); + editMaxValue->setEditText(str); + + editSum->setText(QString::number(curSensor->getCompensation())); + editMul->setText(QString::number(curSensor->getMultiplicator())); + + //checkShowInDock->setEnabled( curSensor->getType()==LMSensor::lmTemp ); + //GroupBoxColorDock->setEnabled( curSensor->getType()==LMSensor::lmTemp ); + + CheckAllSensors->setChecked(false); + + colorAlarm ->setColor ( LMSensorDockPanel::readColorAlarm(curSensor->name()) ); + colorNormal ->setColor ( LMSensorDockPanel::readColorNormal(curSensor->name()) ); + checkShow ->setChecked( LMSensorPanel::readShow(curSensor->name()) ); + checkShowInDock->setChecked( checkShowInDock->isEnabled() && LMSensorDockPanel::readShowInDock(curSensor->name()) ); + + editLaunch->setText( LMSensorsAlarms::readAlarmCommand(curSensor->name()) ); + editPlay ->setText( LMSensorsAlarms::readAlarmSound (curSensor->name()) ); + switch( LMSensorsAlarms::readAlarm(curSensor->name()) ) + { + case LMSensorsAlarms::acNothing : radioAlarm1->setChecked(true); break; + case LMSensorsAlarms::acSound : radioAlarm2->setChecked(true); break; + case LMSensorsAlarms::acCommand : radioAlarm3->setChecked(true); break; + } + palPanelCfg->readPalette(curSensor->name()); + +} + + +void LMSensorsCfg::readPreferencesInfo() +{ + switch(sensors->getTempScale()) { + case LMSensor::dgCelsius : RadioC->setChecked(true); break; + case LMSensor::dgFahrenheit: RadioF->setChecked(true); break; + case LMSensor::dgKelvin : RadioK->setChecked(true); break; + } + SpinUpdateTime->setValue(sensors->getUpdateInterval()); +} + + +void LMSensorsCfg::applySensorChanges() +{ + if(!curSensor) return; + + const QString sName(curSensor->name()); + // Apply sensor configuration + curSensor->setDescription(editDescription->text()); + curSensor->setCompensation(editSum->text().toDouble()); + curSensor->setMultiplicator(editMul->text().toDouble()); + curSensor->setValueIdeal(editIdealValue->text().toDouble()); + curSensor->setValueMax(editMaxValue->currentText().toDouble()); + curSensor->setValueMin(editMinValue->currentText().toDouble()); + curSensor->setMonitorized( + checkShow->isChecked() || + checkShowInDock->isChecked() || + !radioAlarm1->isChecked() + ); + // Apply show in main window configuration + LMSensorPanel::writeShow(sName,checkShow->isChecked() ); + // Apply dock configuration + LMSensorDockPanel::writeShowInDock(sName,checkShowInDock->isChecked()); + LMSensorDockPanel::writeColorNormal(sName,colorNormal->color()); + LMSensorDockPanel::writeColorAlarm(sName,colorAlarm->color()); + // + palPanelCfg->savePalette(); + // + // Apply alarms configuration + if( CheckAllSensors->isChecked() ) { + QObjectList *list= sensors->getSensors(); + for(Sensor *sensor=(Sensor*)list->first(); sensor!=0; sensor= (Sensor*)list->next()) { + applySensorAlarmConfig(sensor); + sensor->writeConfig(); + } + } else { + applySensorAlarmConfig(curSensor); + curSensor->writeConfig(); + } + // This line must always be at the end of the method + listSensors->changeItem( *listSensors->pixmap(listSensors->currentItem()),editDescription->text(), listSensors->currentItem() ); +} + + +void LMSensorsCfg::applySensorAlarmConfig(Sensor *sensor) +{ + const char *name= sensor->name(); + LMSensorsAlarms::writeAlarmCommand(name,editLaunch->text()); + LMSensorsAlarms::writeAlarmSound (name,editPlay ->text()); + int code= LMSensorsAlarms::acNothing; + if(radioAlarm1->isChecked()) code= LMSensorsAlarms::acNothing; + else if(radioAlarm2->isChecked()) code= LMSensorsAlarms::acSound; + else if(radioAlarm3->isChecked()) code= LMSensorsAlarms::acCommand; + LMSensorsAlarms::writeAlarm(name,code); +} + + +void LMSensorsCfg::applyPreferencesChanges() +{ + LMSensor::TempScale scale= LMSensor::dgCelsius; + if(RadioK->isChecked()) scale= LMSensor::dgKelvin; + else if(RadioF->isChecked()) scale= LMSensor::dgFahrenheit; + sensors->setTempScale(scale); + sensors->setUpdateInterval(SpinUpdateTime->value()); + sensors->writeConfig(); +} + + +void LMSensorsCfg::slotCurrentSensorChanged(int index) +{ + readSensorInfo(index); +} + +void LMSensorsCfg::slotApplyChanges() +{ + if (!isVisible()) + return; + + switch(MainTab->currentPageIndex()) + { + case 0: applySensorChanges(); break; + case 1: applyPreferencesChanges(); break; + } +} + +void LMSensorsCfg::slotAccept() +{ + slotApplyChanges(); + close(); +} + +void LMSensorsCfg::slotTestAlarm() +{ + if( radioAlarm2->isChecked() ) { + LMSensorsAlarms::playSound(editPlay->text()); + } else + if( radioAlarm3->isChecked() ) { + LMSensorsAlarms::runSensorCommand("TEST","100",editLaunch->text()); + } +} + +void LMSensorsCfg::slotMainTabPageChanged(QWidget *) +{ + switch(MainTab->currentPageIndex()) + { + case 0: readSensorInfo(listSensors->currentItem()); break; + case 1: readPreferencesInfo(); break; + } +} + +void LMSensorsCfg::slotComboMinMaxSelected(int index) +{ + QComboBox *combo = (QComboBox*)sender(); + QString str = combo->text(index); + double percent= str.left(str.length()-1).toDouble(); + double value = editIdealValue->text().toDouble(); + + if(value<0) percent= -percent; + value= value + value * percent / 100; + + const char *mask= curSensor->getType()==LMSensor::lmVoltage ? "%.2lf":"%.0lf"; + str.sprintf(mask,value); + + combo->setEditText(str); +} |