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.
212 lines
6.1 KiB
212 lines
6.1 KiB
11 years ago
|
/***************************************************************************
|
||
|
lmsensorsdock.cpp - description
|
||
|
-------------------
|
||
|
begin : Sun Sep 23 2001
|
||
|
copyright : (C) 2001 by Miguel Novas
|
||
|
email : michaell@teleline.es
|
||
|
***************************************************************************/
|
||
|
|
||
|
/***************************************************************************
|
||
|
* *
|
||
|
* 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 "lmsensorsdock.h"
|
||
|
|
||
|
#include <qobjectlist.h>
|
||
|
#include <klocale.h>
|
||
|
#include <kiconloader.h>
|
||
|
#include <kapp.h>
|
||
|
#include <kaboutapplication.h>
|
||
|
|
||
|
#include <kwin.h>
|
||
|
#include <netwm.h>
|
||
|
|
||
|
LMSensorsDock::LMSensorsDock(bool fNoDock, QObject *parent, const char *name): QObject(parent,name)
|
||
|
{
|
||
|
noDock= fNoDock;
|
||
|
|
||
|
sensors= new LMSensors;
|
||
|
sensors->setMonitorized(true);
|
||
|
|
||
|
connect(sensors,SIGNAL(configChanged(const char *)),this,SLOT(updateItemDock(const char *)));
|
||
|
|
||
|
createAlarmControl();
|
||
|
createWidgets();
|
||
|
if(!noDock) createDockWidgets();
|
||
|
createMenu();
|
||
|
}
|
||
|
|
||
|
|
||
|
LMSensorsDock::~LMSensorsDock()
|
||
|
{
|
||
|
saveConfig();
|
||
|
if(sensorsWidget) delete sensorsWidget;
|
||
|
if(sensorsCfg) delete sensorsCfg;
|
||
|
if(sensorsAlarm) delete sensorsAlarm;
|
||
|
delete menu;
|
||
|
if(sensors) delete sensors;
|
||
|
}
|
||
|
|
||
|
|
||
|
void LMSensorsDock::createMenu()
|
||
|
{
|
||
|
menu= new KPopupMenu;
|
||
|
menu->insertTitle(kapp->miniIcon(),"KSensors");
|
||
|
menu->insertItem(SmallIcon("configure"),i18n("&Configure"), this, SLOT(createConfigWidget() ) ,0,101 );
|
||
|
menu->insertSeparator();
|
||
|
menu->insertItem(kapp->miniIcon() ,i18n("&About KSensors"), this, SLOT(showAbout() ) ,0,103 );
|
||
|
menu->insertSeparator();
|
||
|
if(!noDock) menu->insertItem(sensorsWidget ? i18n("&Minimize"):i18n("&Restore"), this, SLOT(minimizeRestoreWidget() ) ,0,100 );
|
||
|
menu->insertItem(SmallIcon("exit"),i18n("&Exit"), this, SLOT(close()),0,102);
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::createWidgets()
|
||
|
{
|
||
|
KGlobal::config()->setGroup("General");
|
||
|
if(noDock) createShowWidget();
|
||
|
else if(KGlobal::config()->readBoolEntry("showWidget",false)) {
|
||
|
int desktop = KGlobal::config()->readNumEntry("desktop", 0);
|
||
|
createShowWidget(desktop);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::saveConfig()
|
||
|
{
|
||
|
KGlobal::config()->setGroup("General");
|
||
|
KGlobal::config()->writeEntry("showWidget",(bool)sensorsWidget);
|
||
|
if(sensorsWidget) {
|
||
|
NETWinInfo wm_client(qt_xdisplay(), sensorsWidget->winId(), qt_xrootwin(), NET::WMDesktop);
|
||
|
KGlobal::config()->writeEntry("desktop", wm_client.desktop());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::createDockWidgets()
|
||
|
{
|
||
|
QObjectList *chips= sensors->getSensorsChips();
|
||
|
|
||
|
countSensors= 0;
|
||
|
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( LMSensorDockPanel::readShowInDock(sensor->name()) )
|
||
|
createDockSensor(sensor);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(countSensors==0) createDockSensor(0);
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::createAlarmControl()
|
||
|
{
|
||
|
sensorsAlarm= new LMSensorsAlarms(sensors);
|
||
|
}
|
||
|
|
||
|
|
||
|
void LMSensorsDock::minimizeRestoreWidget()
|
||
|
{
|
||
|
if(sensorsWidget) delete sensorsWidget;
|
||
|
else createShowWidget();
|
||
|
updateMenu();
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::updateMenu()
|
||
|
{
|
||
|
if(noDock && !sensorsWidget)
|
||
|
close();
|
||
|
else
|
||
|
menu->changeItem(100, sensorsWidget ? i18n("&Minimize") : i18n("&Restore"));
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::createShowWidget(int desktop)
|
||
|
{
|
||
|
if(!sensorsWidget) {
|
||
|
sensorsWidget= new LMSensorsWidget(sensors);
|
||
|
connect( sensorsWidget, SIGNAL(rightMouseClicked(QMouseEvent *)), this, SLOT(mouseEventReceived(QMouseEvent *)) );
|
||
|
connect( sensorsWidget, SIGNAL(destroyed()), this, SLOT(updateMenu()) );
|
||
|
}
|
||
|
if ((desktop != 0) && (desktop <= KWin::numberOfDesktops())) KWin::setOnDesktop(sensorsWidget->winId(), desktop);
|
||
|
sensorsWidget->show();
|
||
|
}
|
||
|
|
||
|
|
||
|
void LMSensorsDock::createConfigWidget()
|
||
|
{
|
||
|
if(!sensorsCfg) {
|
||
|
sensorsCfg= new KSensorsCfg(sensors);
|
||
|
}
|
||
|
sensorsCfg->show();
|
||
|
}
|
||
|
|
||
|
|
||
|
void LMSensorsDock::close()
|
||
|
{
|
||
|
delete this;
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::mouseEventReceived(QMouseEvent *e)
|
||
|
{
|
||
|
if(e->type()==QEvent::MouseButtonRelease) {
|
||
|
if( e->button()==LeftButton ) minimizeRestoreWidget();
|
||
|
if( e->button()==RightButton ) menu->popup(e->globalPos());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::createDockSensor(Sensor *sensor)
|
||
|
{
|
||
|
if(countSensors==0) {
|
||
|
QObjectList *list= (QObjectList *)children();
|
||
|
if(list)
|
||
|
for(LMSensorDockPanel *sensor= (LMSensorDockPanel *)list->first(); sensor!=0; sensor= (LMSensorDockPanel *)list->next())
|
||
|
delete sensor;
|
||
|
}
|
||
|
const char *name= sensor ? sensor->name() : 0;
|
||
|
LMSensorDockPanel *dock= new LMSensorDockPanel(sensor,name);
|
||
|
connect( dock, SIGNAL(mouseEvent(QMouseEvent *)), this, SLOT(mouseEventReceived(QMouseEvent *)) );
|
||
|
insertChild(dock);
|
||
|
dock->show();
|
||
|
if(name) countSensors++;
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::deleteDockSensor(LMSensorDockPanel *sensor)
|
||
|
{
|
||
|
delete sensor;
|
||
|
if(--countSensors==0) createDockSensor(0);
|
||
|
}
|
||
|
|
||
|
void LMSensorsDock::updateItemDock(const char *name)
|
||
|
{
|
||
|
if(!name) return;
|
||
|
|
||
|
Sensor *sensor= sensors->getSensor(name);
|
||
|
|
||
|
// if((bool)sensor && sensor->getType()==LMSensor::lmTemp) {
|
||
|
bool fShow= LMSensorDockPanel::readShowInDock(name);
|
||
|
LMSensorDockPanel *dockSensor= (LMSensorDockPanel *)child(name);
|
||
|
if( fShow!=(bool)dockSensor ) {
|
||
|
if(dockSensor) deleteDockSensor(dockSensor);
|
||
|
else createDockSensor(sensor);
|
||
|
} else {
|
||
|
if(dockSensor!=0)
|
||
|
dockSensor->updateConfig();
|
||
|
}
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
|
||
|
void LMSensorsDock::showAbout()
|
||
|
{
|
||
|
KAboutApplication *dialog;
|
||
|
|
||
|
dialog= new KAboutApplication;
|
||
|
dialog->exec();
|
||
|
delete dialog;
|
||
|
}
|
||
|
|