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.
ksensors/src/lmsensorpanel.cpp

169 lines
4.5 KiB

/***************************************************************************
lmsensordisplay.cpp - description
-------------------
begin : Sat Aug 11 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 "lmsensorpanel.h"
LMSensorPanel::LMSensorPanel(Sensor *newSensor, QWidget *parent, const char *name ) : Panel(parent,name)
{
alarm= false;
//
sensor= newSensor;
//
createTitleWidget();
createGraphicWidget();
createValueWidget();
//
updateConfig();
//
connect( sensor, SIGNAL(valueChanged(double)) , this, SLOT(setValue(double)) );
connect( sensor, SIGNAL(configChanged()) , this, SLOT(updateConfig()) );
//
}
LMSensorPanel::~LMSensorPanel()
{
}
void LMSensorPanel::updateConfig()
{
switch(sensor->getType())
{
case Sensor::lmTemp:
if(arc) {
arc->setValueRanges(sensor->celsiusTo(0),sensor->celsiusTo(100));
arc->setValueMinLimit( sensor->getValueMin(),0);
arc->setValueMaxLimit( sensor->getValueMax(),15);
arc->setColorRanges(red,green,red);
}
switch( sensor->getTempScale() )
{
case Sensor::dgKelvin: valMask= "%.0fK"; break;
default : valMask= "%.0f^"; break;
}
break;
case Sensor::lmFan :
if(arc) {
arc->setValueRanges(0,10000);
arc->setValueMinLimit( sensor->getValueMin(),15);
arc->setValueMaxLimit( sensor->getValueMax(),0);
arc->setColorRanges(red,green,green);
}
valMask= "%.0f RPM";
break;
case Sensor::lmVoltage :
if(arc) {
double min= sensor->getValueMin();
double max= sensor->getValueMax();
arc->setValueRanges( min - (max-min)/3, max + (max-min)/3 );
arc->setValueMinLimit( min,10);
arc->setValueMaxLimit( max,10);
arc->setColorRanges(blue,QColor(0,200,150),blue);
arc->setArrowColor(darkBlue);
}
valMask= "%.2fv";
break;
}
setValue(sensor->getValue());
arc->update();
lcdVal->update();
lcdDes->display(sensor->getDescription());
}
void LMSensorPanel::setValue(double value)
{
QString str;
str.sprintf(valMask.latin1(),value);
lcdVal->display(str);
arc->setValue(value);
//
bool newAlarm= sensor->getAlarm();
if(newAlarm!=alarm) {
alarm= newAlarm;
if(newAlarm) {
startTimer(500);
lcdVal->setForeColor(red);
} else {
killTimers();
lcdVal->setForeColor(black);
if(lcdVal->isHidden()) lcdVal->show();
}
}
}
//**********************************************************************
void LMSensorPanel::createTitleWidget()
{
lcdDes = new QLCDString(this);
lcdDes->setNumberDisplay(true);
lcdDes->installEventFilter(this);
}
void LMSensorPanel::createGraphicWidget()
{
arc = new QDialArc(this);
arc->installEventFilter(this);
arc->setAngles(180,-180);
}
void LMSensorPanel::createValueWidget()
{
lcdVal = new QLCDString(this);
lcdVal->installEventFilter(this);
lcdVal->setShadow(true);
lcdVal->setNumberDisplay(sensor->getType()==Sensor::lmVoltage);
}
void LMSensorPanel::resizeEvent ( QResizeEvent *e )
{
int w= width();
int h= height();
int i1= (h * 2) / 5;
int i2= (h * 4) / 5;
if(sensor->getType()==Sensor::lmVoltage) lcdVal->setGeometry( 3 , h/8 , w -4 , h/5-h/32);
else lcdVal->setGeometry( 3 , h/8 , w -4 , h/4-h/16);
arc->setGeometry ( 3 , i1 , w -6 , i2-i1-2);
lcdDes->setGeometry( 3 , i2+1, w -6 , h -i2-h/11);
}
void LMSensorPanel::timerEvent( QTimerEvent * )
{
if(lcdVal->isVisible()) lcdVal->hide();
else lcdVal->show();
repaint();
}
void LMSensorPanel::paletteChange(const QPalette &oldPalette)
{
lcdDes->setForeColor(getColorTitle());
lcdVal->setForeColor(getColorValue());
lcdVal->setShadowColor(getColorValue());
arc->setArrowColor(getColorValue());
}