diff options
Diffstat (limited to 'src/lmsensorswidget.cpp')
-rw-r--r-- | src/lmsensorswidget.cpp | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/src/lmsensorswidget.cpp b/src/lmsensorswidget.cpp new file mode 100644 index 0000000..ab6a8b9 --- /dev/null +++ b/src/lmsensorswidget.cpp @@ -0,0 +1,371 @@ +/*************************************************************************** + lmsensorswidget.cpp - description + ------------------- + begin : Mon Aug 6 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 <qobject.h> +#include <qobjectlist.h> +#include <qpixmap.h> +#include <qtimer.h> + +#include <kiconloader.h> +#include <kstddirs.h> + +#include "lmsensorswidget.h" + + +/*************************************************************************** + * Public methods * + ***************************************************************************/ + +LMSensorsWidget::LMSensorsWidget(LMSensors *lsensors,QWidget *parent, const char *name ) + : QWidget(parent,name, + WStyle_Customize | + WType_TopLevel | + WStyle_StaysOnTop | + WStyle_NormalBorder | + WDestructiveClose ) +{ + panelsSize= 64; + setMinimumSize(0,0); + setSizeIncrement(64,64); + setBaseSize(64,64); + // + sensors= lsensors; + // + childDraging = 0; + // + setCaption("KSensors"); + // + loadPalette(); + // + loadGeneralOptions(); + // + setBackgroundPixmap( UserIcon("ksensorsbackground.png") ); + // + KConfig *cfg= KGlobal::config(); + cfg->setGroup("ShowWidget"); + QRect rect(32,32,64*4,64*3); + rect= cfg->readRectEntry ("geometry", &rect); + move( rect.topLeft() ); + resize( rect.size() ); + // + createSensorPanels(); + // + infoPanels= new InfoPanels(this); + // + connect(sensors, SIGNAL(configChanged(const char *)), this, SLOT(slotConfigChanged(const char *)) ); +} + + +LMSensorsWidget::~LMSensorsWidget() +{ + if(x()>=0 && y()>=0) { + KConfig *cfg= KGlobal::config(); + cfg->setGroup("ShowWidget"); + //cfg->writeEntry("geometry" , geometry() ); + cfg->writeEntry( "geometry" , QRect(pos(), size()) ); + } + delete infoPanels; +} + +// ******************* Protected slots ****************************** + +void LMSensorsWidget::slotConfigChanged(const char *name) +{ + if(name) { + Panel *panel= (Panel *)child(name); + Sensor *sensor= sensors->getSensor(name); + if(sensor) { + if(Panel::readShow(name)!= (bool)panel ) { + if(panel) { delete panel; } + else (void)new LMSensorPanel(sensor, this, sensor->name() ); + } + } else infoPanels->configChanged(name); + panel= (Panel *)child(name); + if(panel) loadPalette(panel); + } else { + loadPalette(); + loadGeneralOptions(); + } +} + + +/*************************************************************************** + * Private methods * + ***************************************************************************/ + +void LMSensorsWidget::childEvent(QChildEvent *e) +{ + if(e->inserted()) { + loadDisplayConfig((Panel *)e->child()); + } +} + +// ************* Draging panels and show menu ************************ + +void LMSensorsWidget::childEventReceived(QEvent *e) +{ +QMouseEvent *m = (QMouseEvent*)e; + + switch(e->type()) { + case QEvent::MouseButtonPress: + + if( m->button()==LeftButton ) startDragChild(m,(QWidget *)sender()); + break; + + case QEvent::MouseButtonRelease: + + if( m->button()==RightButton ) emit rightMouseClicked(m); + break; + } +} + + +void LMSensorsWidget::startDragChild(QMouseEvent *m, QWidget *w) +{ + if(childDraging==0) + { + childDraging= w; + grabMouse(sizeAllCursor); + origMousePt = w->mapFromGlobal(m->globalPos()); + //w->move( m->globalPos()-mapToGlobal(QPoint(0,0))-origMousePt); + w->raise(); + w->update(); + } +} + +void LMSensorsWidget::endDragChild() +{ +int x= childDraging->x(); +int y= childDraging->y(); + + if(x<0) x=0; + if(y<0) y=0; + releaseMouse(); + childDraging->move( + ((x+childDraging->width() /2) / panelsSize) * panelsSize , + ((y+childDraging->height()/2) / panelsSize) * panelsSize + ); + saveDisplayConfig((Panel *)childDraging); + childDraging= 0; +} + +void LMSensorsWidget::mouseMoveEvent ( QMouseEvent *m ) +{ + if(childDraging) + { + childDraging->move(m->pos()-origMousePt); + childDraging->update(); + } +} + + +void LMSensorsWidget::mouseReleaseEvent ( QMouseEvent *m ) +{ + if(childDraging && m->button()==LeftButton) endDragChild(); + else + if(m->button()==RightButton) emit rightMouseClicked(m); +} + +// ********************** Panels creation ************************ + +void LMSensorsWidget::findUnusedPosition(int *px,int *py) +{ +bool found; +uint mx,my,x,y,a[32]; +QObjectList *list= (QObjectList *)children(); + + for(y=0; y<32; y++) a[y]= 0; + mx= 0; my= 0; + if(list) + for(QWidget *obj= (QWidget *)list->first(); obj!=0; obj= (QWidget *)list->next()) + { + y=obj->y()/panelsSize; + x=obj->x()/panelsSize; + if(x<32 && y<32) a[y]|= (1 << x); + if(x>mx) mx= x; + if(y>my) my= y; + } + // + for(x=0,y=0,found=false;y<=my && !found;) { + found= ((a[y] & (1 << x))==0); + if(!found) + if(++x>mx) { x= 0; y++; } + } + + if(!found) { + x= (width()-1) / panelsSize; + if(x>mx) { x= mx+1; y= 0; } + else { x= 0; y= my+1; } + } + // + *px= x; + *py= y; +} + +void LMSensorsWidget::loadDisplayConfig(Panel *display) +{ + if(display==0) return; + + loadPalette(display); + + bool fNoCfg; + QPoint p(-1,-1); + KConfig *cfg= KGlobal::config(); + cfg->setGroup(display->name()); + p= cfg->readPointEntry("showPos", &p ); + fNoCfg= (p.x()<0 || p.y()<0); + if(fNoCfg) findUnusedPosition(&p.rx(),&p.ry()); + display->move(p.x()*panelsSize,p.y()*panelsSize); + display->resize(panelsSize,panelsSize); + display->show(); + if(fNoCfg) { + saveDisplayConfig(display); + adjustSize(); + } + display->installEventFilter(this); + connect(display, SIGNAL(eventReceived(QEvent *)), this, SLOT(childEventReceived(QEvent *)) ); +} + + +void LMSensorsWidget::saveDisplayConfig(Panel *display) +{ +KConfig *cfg= KGlobal::config(); + + cfg->setGroup(display->name()); + cfg->writeEntry("show",true); + QPoint p= display->pos()/panelsSize; + cfg->writeEntry("showPos",p); +} + +void LMSensorsWidget::createSensorPanels() +{ + QObjectList *chips= sensors->getSensorsChips(); + if(chips) + for(LMSensorsChip *chip= (LMSensorsChip *)chips->first(); chip!=0; chip= (LMSensorsChip *)chips->next()) { + QObjectList *list= (QObjectList *)chip->getSensors(); + if(list) { + for(LMSensor *sensor= (LMSensor *)list->first(); sensor!=0; sensor= (LMSensor *)list->next()) { + if( Panel::readShow(sensor->name()) ) + (void) new LMSensorPanel(sensor, this, sensor->name() ); + } + } + } +} + +void LMSensorsWidget::resizePanels(int newSize) +{ +QObjectList *panels= (QObjectList *)children(); + + if(panels) + for(QWidget *panel= (QWidget *)panels->first(); panel!=0; panel= (QWidget *)panels->next()) { + panel->move( (panel->x()/panelsSize)*newSize, (panel->y()/panelsSize)*newSize); + panel->resize(newSize,newSize); + } + panelsSize= newSize; + adjustSize(); +} + +int LMSensorsWidget::cfgReadPanelSize() +{ +KConfig *cfg= KGlobal::config(); + cfg->setGroup( "ShowWidget" ); + return cfg->readNumEntry("PanelsSize",64); +} + +void LMSensorsWidget::cfgWritePanelSize(int newSize) +{ +KConfig *cfg= KGlobal::config(); + cfg->setGroup( "ShowWidget" ); + cfg->writeEntry("PanelsSize",newSize); +} + + +void LMSensorsWidget::loadGeneralOptions() +{ + int newSize= cfgReadPanelSize(); + if(panelsSize!=newSize) { + setSizeIncrement(newSize,newSize); + setBaseSize(newSize,newSize); + resizePanels(newSize); + } +} + +// ************************+******** Palettes stuff **************************** + +void LMSensorsWidget::loadPalette(Panel *panel) +{ + QPalette pal= palette(); + if(panel) { + if(cfgReadPalette(pal,panel->name(),false)) panel->setPalette(pal); + else panel->unsetPalette(); + } else { + cfgReadPalette(pal,0,true); + setPalette(pal); + } +} + + +void LMSensorsWidget::getDefaultPalette(QPalette &pal) +{ + pal.setColor(QColorGroup::Background, Qt::white ); + pal.setColor(QColorGroup::Light , Qt::white ); + pal.setColor(QColorGroup::Dark, Qt::black ); + pal.setColor(QColorGroup::Foreground, Qt::black ); + pal.setColor(QColorGroup::Text, Qt::black ); +} + + +bool LMSensorsWidget::cfgReadPalette(QPalette &pal,const char *name, bool returnDefault) +{ + KConfig *cfg= KGlobal::config(); + cfg->setGroup( name ? name : "General" ); + if (cfg->readBoolEntry("PaletteActive",false)) { + pal.setColor(QColorGroup::Background, cfg->readColorEntry("ColorBackground",&Qt::white) ); + pal.setColor(QColorGroup::Light , cfg->readColorEntry("ColorBackground",&Qt::white) ); + pal.setColor(QColorGroup::Dark, cfg->readColorEntry("ColorShadow" ,&Qt::black) ); + pal.setColor(QColorGroup::Foreground, cfg->readColorEntry("ColorValue" ,&Qt::black) ); + pal.setColor(QColorGroup::Text, cfg->readColorEntry("ColorTitle" ,&Qt::black) ); + return true; + } else { + if(returnDefault) { + getDefaultPalette(pal); + return true; + } + } + return false; +} + +void LMSensorsWidget::cfgWritePalette(const QPalette &pal,const char *name) +{ + KConfig *cfg= KGlobal::config(); + QColorGroup colors= pal.active(); + cfg->setGroup( name ? name : "General" ); + cfg->writeEntry("PaletteActive",true); + cfg->writeEntry("ColorBackground",colors.background() ); + cfg->writeEntry("ColorShadow" ,colors.dark() ); + cfg->writeEntry("ColorValue" ,colors.foreground() ); + cfg->writeEntry("ColorTitle" ,colors.text() ); +} + +void LMSensorsWidget::cfgUnsetPalette(const char *name) +{ + KGlobal::config()->setGroup( name ? name : "General" ); + KGlobal::config()->writeEntry("PaletteActive",false); +} + +// *********************************** End ************************************* + |