📄 lmsensorswidget.cpp
字号:
/*************************************************************************** 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 *************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -