-rw-r--r-- | core/applets/batteryapplet/battery.cpp | 104 | ||||
-rw-r--r-- | core/applets/batteryapplet/battery.h | 3 | ||||
-rw-r--r-- | core/applets/batteryapplet/batterystatus.cpp | 407 | ||||
-rw-r--r-- | core/applets/batteryapplet/batterystatus.h | 12 |
4 files changed, 270 insertions, 256 deletions
diff --git a/core/applets/batteryapplet/battery.cpp b/core/applets/batteryapplet/battery.cpp index 98b61b5..0d3d190 100644 --- a/core/applets/batteryapplet/battery.cpp +++ b/core/applets/batteryapplet/battery.cpp @@ -1,182 +1,186 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "battery.h" #include "batterystatus.h" /* OPIE */ #include <opie2/otaskbarapplet.h> #include <qpe/qpeapplication.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qpe/power.h> /* QT */ #include <qpainter.h> #include <qtimer.h> using namespace Opie::Ui; BatteryMeter::BatteryMeter( QWidget *parent ) - : QWidget( parent ), charging(false) -{ +: QWidget( parent ), charging(false) { ps = new PowerStatus; startTimer( 10000 ); - setFixedWidth( QMAX(AppLnk::smallIconSize()*3/4, 6) ); + setFixedWidth( QMAX(AppLnk::smallIconSize()*3/4, 6) ); setFixedHeight( AppLnk::smallIconSize() ); chargeTimer = new QTimer( this ); connect( chargeTimer, SIGNAL(timeout()), this, SLOT(chargeTimeout()) ); timerEvent(0); QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold ); Config c( "qpe" ); c.setGroup( "Battery" ); style = c.readNumEntry( "Style", 0 ); } -BatteryMeter::~BatteryMeter() -{ +BatteryMeter::~BatteryMeter() { delete ps; } -QSize BatteryMeter::sizeHint() const -{ +QSize BatteryMeter::sizeHint() const { return QSize(QMAX(AppLnk::smallIconSize()*3/4, 6), height() ); } -void BatteryMeter::mousePressEvent( QMouseEvent* e ) -{ - if ( e->button() == RightButton ) - { +void BatteryMeter::mousePressEvent( QMouseEvent* e ) { + if ( e->button() == RightButton ) { style = 1-style; Config c( "qpe" ); c.setGroup( "Battery" ); c.writeEntry( "Style", style ); repaint( true ); } QWidget::mousePressEvent( e ); } -void BatteryMeter::mouseReleaseEvent( QMouseEvent* /*e*/ ) -{ +void BatteryMeter::mouseReleaseEvent( QMouseEvent* /*e*/ ) { if ( batteryView && batteryView->isVisible() ) { - delete (QWidget *) batteryView; + batteryView->hide(); } else { - if ( !batteryView ) batteryView = new BatteryStatus( ps ); - QPEApplication::showWidget( batteryView ); + if ( !batteryView ) { + batteryView = new BatteryStatus( ps, 0, WStyle_StaysOnTop | WType_Popup ); + batteryView->setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); + } + + QRect r(batteryView->pos(),batteryView->sizeHint()); + QPoint curPos = this->mapToGlobal ( rect().topLeft() ); + + int lp = qApp->desktop()->width() - batteryView->sizeHint().width(); + r.moveTopLeft( QPoint(lp, curPos.y()-batteryView->sizeHint().height()-1) ); + batteryView->setGeometry(r); + batteryView->raise(); - batteryView->showMaximized(); + batteryView->show(); } } -void BatteryMeter::timerEvent( QTimerEvent * ) -{ + +void BatteryMeter::timerEvent( QTimerEvent * ) { PowerStatus prev = *ps; *ps = PowerStatusManager::readStatus(); if ( prev != *ps ) { - percent = ps->batteryPercentRemaining(); - if ( !charging && ps->batteryStatus() == PowerStatus::Charging ) { - percent = 0; - charging = true; - chargeTimer->start( 500 ); - } else if ( charging && ps->batteryStatus() != PowerStatus::Charging ) { - charging = false; - chargeTimer->stop(); + percent = ps->batteryPercentRemaining(); + if ( !charging && ps->batteryStatus() == PowerStatus::Charging ) { + percent = 0; + charging = true; + chargeTimer->start( 500 ); + } else if ( charging && ps->batteryStatus() != PowerStatus::Charging ) { + charging = false; + chargeTimer->stop(); + if ( batteryView ) + batteryView->updatePercent( percent ); + } + repaint( style != 0 ); if ( batteryView ) - batteryView->updatePercent( percent ); - } - repaint( style != 0 ); - if ( batteryView ) - batteryView->repaint(); + batteryView->repaint(); } } -void BatteryMeter::chargeTimeout() -{ +void BatteryMeter::chargeTimeout() { percent += 20; if ( percent > 100 ) - percent = 0; + percent = 0; repaint(FALSE); if ( batteryView ) - batteryView->updatePercent( percent ); + batteryView->updatePercent( percent ); } -void BatteryMeter::paintEvent( QPaintEvent* ) -{ +void BatteryMeter::paintEvent( QPaintEvent* ) { - if ( style == 1 ) - { + if ( style == 1 ) { QPainter p(this); QFont f( "Fixed", AppLnk::smallIconSize()/2 ); QFontMetrics fm( f ); p.setFont( f ); p.drawText( 0, height()/2, QString::number( percent ) ); p.drawText( width()/4, height(), "%" ); return; } QPainter p(this); QColor color; QColor g = gray.light( 160 ); - switch ( ps->acStatus() ) - { - case PowerStatus::Offline: color = blue.light( 150 ); break; - case PowerStatus::Online: color = green.dark( 130 ).light( 180 ); break; - default: color = red.light( 160 ); + switch ( ps->acStatus() ) { + case PowerStatus::Offline: + color = blue.light( 150 ); + break; + case PowerStatus::Online: + color = green.dark( 130 ).light( 180 ); + break; + default: + color = red.light( 160 ); } int w = height() / 2; - if ( !(w%2) ) w--; // should have an odd value to get a real middle line + if ( !(w%2) ) + w--; // should have an odd value to get a real middle line int h = height() - 4; int pix = (percent * h) / 100; int y2 = height() -2; int y = y2 - pix; int x1 = (width() - w ) / 2; p.setPen(QColor(80,80,80)); p.drawLine(x1+w/4,0,x1+w/4+w/2+1,0); // header p.drawRect(x1,1,w,height()-1); // corpus p.setBrush(color); //int extra = ((percent * h) % 100)/(100/4); int middle = w/2; - for ( int i = 0; i < middle; i++ ) - { + for ( int i = 0; i < middle; i++ ) { p.setPen( gray.dark( 100+i*20 ) ); p.drawLine( x1+middle-i, 2, x1+middle-i, y-1 ); p.drawLine( x1+middle+i, 2, x1+middle+i, y-1 ); p.setPen( color.dark( 100+i*20 ) ); p.drawLine( x1+middle-i, y, x1+middle-i, y2 ); p.drawLine( x1+middle+i, y, x1+middle+i, y2 ); } } -int BatteryMeter::position() -{ +int BatteryMeter::position() { return 8; } EXPORT_OPIE_APPLET_v1( BatteryMeter ) diff --git a/core/applets/batteryapplet/battery.h b/core/applets/batteryapplet/battery.h index 622c083..970c857 100644 --- a/core/applets/batteryapplet/battery.h +++ b/core/applets/batteryapplet/battery.h @@ -1,58 +1,59 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef BATTERY_H #define BATTERY_H #include <qwidget.h> #include <qguardedptr.h> class PowerStatus; class BatteryStatus; class QTimer; class BatteryMeter : public QWidget { Q_OBJECT public: BatteryMeter( QWidget *parent = 0 ); ~BatteryMeter(); QSize sizeHint() const; static int position(); + + protected: void timerEvent( QTimerEvent* ); void paintEvent( QPaintEvent* ); void mousePressEvent( QMouseEvent* ); void mouseReleaseEvent( QMouseEvent* ); - protected slots: void chargeTimeout(); protected: QGuardedPtr<BatteryStatus> batteryView; PowerStatus *ps; QTimer *chargeTimer; int percent; bool charging; int style; }; #endif diff --git a/core/applets/batteryapplet/batterystatus.cpp b/core/applets/batteryapplet/batterystatus.cpp index ab8f36d..655fdc4 100644 --- a/core/applets/batteryapplet/batterystatus.cpp +++ b/core/applets/batteryapplet/batterystatus.cpp @@ -1,251 +1,256 @@ #include "batterystatus.h" /* OPIE */ #include <opie2/odevice.h> #include <qpe/power.h> /* QT */ #include <qpushbutton.h> #include <qdrawutil.h> #include <qfile.h> -#include <qlayout.h> #include <qtextstream.h> #include <qmessagebox.h> using namespace Opie::Core; -BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent ) - : QWidget( parent, 0, WDestructiveClose), ps(p), bat2(false) { - setCaption( tr("Battery status") ); - setMinimumSize( 150, 200 ); +BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent, WFlags f ) +: QFrame( parent, 0, f), ps(p), bat2(false) { - QPushButton *pb = new QPushButton( tr("Close"), this ); - QVBoxLayout *layout = new QVBoxLayout ( this ); + jackPercent = 0; - jackPercent = 0; - - pb->setMaximumSize( 120, 40 ); - - pb->show(); - - layout->addStretch(); - layout->addWidget( pb ); - - if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { - getProcApmStatusIpaq(); - } - connect( pb, SIGNAL( clicked() ), this, SLOT( close() ) ); - percent = ps->batteryPercentRemaining(); - show(); + if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { + getProcApmStatusIpaq(); + } + percent = ps->batteryPercentRemaining(); } -BatteryStatus::~BatteryStatus() -{ -} +BatteryStatus::~BatteryStatus() {} /* * Make use of the advanced apm interface of the ipaq */ bool BatteryStatus::getProcApmStatusIpaq() { - bat2 = false; - - QFile procApmIpaq("/proc/hal/battery"); - - if (procApmIpaq.open(IO_ReadOnly) ) { - QStringList list; - // since it is /proc we _must_ use QTextStream - QTextStream stream ( &procApmIpaq); - QString streamIn; - streamIn = stream.read(); - list = QStringList::split("\n", streamIn); - - for(QStringList::Iterator line=list.begin(); line!=list.end(); line++) { - // not nice, need a rewrite later - if( (*line).startsWith(" Percentage") ){ - if (bat2 == true) { - perc2 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); + bat2 = false; + + QFile procApmIpaq("/proc/hal/battery"); + + if (procApmIpaq.open(IO_ReadOnly) ) { + QStringList list; + // since it is /proc we _must_ use QTextStream + QTextStream stream ( &procApmIpaq); + QString streamIn; + streamIn = stream.read(); + list = QStringList::split("\n", streamIn); + + for(QStringList::Iterator line=list.begin(); line!=list.end(); line++) { + // not nice, need a rewrite later + if( (*line).startsWith(" Percentage") ) { + if (bat2 == true) { + perc2 = (*line).mid(((*line).find('(')) +1,(*line).find(')')-(*line).find('(')-2); + } else { + perc1 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); + } + } else if( (*line).startsWith(" Life") ) { + if (bat2 == true) { + sec2 = (*line).mid(((*line).find(':')+2), 5 ); + } else { + sec1 = (*line).mid(((*line).find(':')+2), 5 ); + } + } else if( (*line).startsWith("Battery #1") ) { + bat2 = true; + } else if( (*line).startsWith(" Status") ) { + if (bat2 == true) { + jackStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); + } else { + ipaqStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); + } + } else if( (*line).startsWith(" Chemistry") ) { + if (bat2 == true) { + jackChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); + } else { + ipaqChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); + } + } + } } else { - perc1 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); + QMessageBox::warning(this, tr("Failure"),tr("could not open file")); } - }else if( (*line).startsWith(" Life") ){ - if (bat2 == true) { - sec2 = (*line).mid(((*line).find(':')+2), 5 ); + + procApmIpaq.close(); + jackPercent = perc2.toInt(); + ipaqPercent = perc1.toInt(); + + if (perc2.isEmpty()) { + perc2 = tr("no data"); } else { - sec1 = (*line).mid(((*line).find(':')+2), 5 ); + perc2 += " %"; } - }else if( (*line).startsWith("Battery #1") ){ - bat2 = true; - }else if( (*line).startsWith(" Status") ){ - if (bat2 == true) { - jackStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); - } else { - ipaqStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); - } - }else if( (*line).startsWith(" Chemistry") ) { - if (bat2 == true) { - jackChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); + + if (sec2 == "0" || sec2 == "" || sec2.isEmpty()) { + sec2 = tr("no data"); } else { - ipaqChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); + sec2 += " min"; } - } - } - } else { - QMessageBox::warning(this, tr("Failure"),tr("could not open file")); - } - - procApmIpaq.close(); - - jackPercent = perc2.toInt(); - ipaqPercent = perc1.toInt(); - - if (perc2.isEmpty()) { - perc2 = tr("no data"); - } else { - perc2 += " %"; - } - - - if (sec2 == "0" || sec2 == "" || sec2.isEmpty()) { - sec2 = tr("no data"); - } else { - sec2 += " min"; - } - - jackStatus == (" ( " + jackStatus + " )"); - return true; + jackStatus == (" ( " + jackStatus + " )"); + return true; } void BatteryStatus::updatePercent( int pc ) { - percent = pc; - repaint(FALSE); + percent = pc; + repaint(FALSE); } void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height ) { - int h1, h2, s1, s2, v1, v2, ng = r.height(), hy = ng*30/100, hh = hightlight_height; - topgrad.hsv( &h1, &s1, &v1 ); - botgrad.hsv( &h2, &s2, &v2 ); - for ( int j = 0; j < hy-2; j++ ) { - p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), - v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); - p->drawLine( r.x(), r.top()+hy-2-j, r.x()+r.width(), r.top()+hy-2-j ); - } - for ( int j = 0; j < hh; j++ ) { - p->setPen( highlight ); - p->drawLine( r.x(), r.top()+hy-2+j, r.x()+r.width(), r.top()+hy-2+j ); + int h1, h2, s1, s2, v1, v2, ng = r.height(), hy = ng*30/100, hh = hightlight_height; + topgrad.hsv( &h1, &s1, &v1 ); + botgrad.hsv( &h2, &s2, &v2 ); + for ( int j = 0; j < hy-2; j++ ) { + p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), + v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); + p->drawLine( r.x(), r.top()+hy-2-j, r.x()+r.width(), r.top()+hy-2-j ); + } + for ( int j = 0; j < hh; j++ ) { + p->setPen( highlight ); + p->drawLine( r.x(), r.top()+hy-2+j, r.x()+r.width(), r.top()+hy-2+j ); + } + for ( int j = 0; j < ng-hy-hh; j++ ) { + p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), + v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); + p->drawLine( r.x(), r.top()+hy+hh-2+j, r.x()+r.width(), r.top()+hy+hh-2+j ); } - for ( int j = 0; j < ng-hy-hh; j++ ) { - p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), - v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); - p->drawLine( r.x(), r.top()+hy+hh-2+j, r.x()+r.width(), r.top()+hy+hh-2+j ); - } } -void BatteryStatus::paintEvent( QPaintEvent * ) { +QString BatteryStatus::statusText() const { + QString text; - QPainter p(this); - QString text; - if ( ps->batteryStatus() == PowerStatus::Charging ) { + if ( ps->batteryStatus() == PowerStatus::Charging ) { if (bat2) { - text = tr("Charging both devices"); - } else { - text = tr("Charging"); - } - } else if ( ps->batteryPercentAccurate() ) { + text = tr("Charging both devices"); + } else { + text = tr("Charging"); + } + } else if ( ps->batteryPercentAccurate() ) { text.sprintf( tr("Percentage battery remaining") + ": %i%%", percent ); - } else { - text = tr("Battery status: "); - switch ( ps->batteryStatus() ) { - case PowerStatus::High: - text += tr("Good"); - break; - case PowerStatus::Low: - text += tr("Low"); - break; - case PowerStatus::VeryLow: - text += tr("Very Low"); - break; - case PowerStatus::Critical: - text += tr("Critical"); - break; - default: // NotPresent, etc. - text += tr("Unknown"); + } else { + text = tr("Battery status: "); + switch ( ps->batteryStatus() ) { + case PowerStatus::High: + text += tr("Good"); + break; + case PowerStatus::Low: + text += tr("Low"); + break; + case PowerStatus::VeryLow: + text += tr("Very Low"); + break; + case PowerStatus::Critical: + text += tr("Critical"); + break; + default: // NotPresent, etc. + text += tr("Unknown"); + } } - } - p.drawText( 10, 90, text ); - - if ( ps->acStatus() == PowerStatus::Backup ) - p.drawText( 10, 110, tr("On backup power") ); - else if ( ps->acStatus() == PowerStatus::Online ) - p.drawText( 10, 110, tr("Power on-line") ); - else if ( ps->acStatus() == PowerStatus::Offline ) - p.drawText( 10, 110, tr("External power disconnected") ); - - if ( ps->batteryTimeRemaining() >= 0 ) { - text.sprintf( tr("Battery time remaining") + ": %im %02is", - ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 ); - p.drawText( 10, 130, text ); - } - - QColor c; - QColor darkc; - QColor lightc; - if ( ps->acStatus() == PowerStatus::Offline ) { - c = blue.light(120); - darkc = c.dark(280); - lightc = c.light(145); - } else if ( ps->acStatus() == PowerStatus::Online ) { - c = green.dark(130); - darkc = c.dark(200); - lightc = c.light(220); - } else { - c = red; - darkc = c.dark(280); - lightc = c.light(140); - } - if ( percent < 0 ) - return; - - int rightEnd1 = width() - 47; - int rightEnd2 = width() - 35; - int percent2 = (percent * rightEnd1) / 100; - p.setPen( black ); - qDrawShadePanel( &p, 9, 30, rightEnd1 , 39, colorGroup(), TRUE, 1, NULL); - qDrawShadePanel( &p, rightEnd2, 37, 12, 24, colorGroup(), TRUE, 1, NULL); - drawSegment( &p, QRect( 10, 30, percent2, 40 ), lightc, darkc, lightc.light(115), 6 ); - drawSegment( &p, QRect( 11 + percent2, 30, rightEnd1 - percent2, 40 ), white.light(80), black, white.light(90), 6 ); - drawSegment( &p, QRect( rightEnd2, 37, 10, 25 ), white.light(80), black, white.light(90), 2 ); - p.setPen( black); - - - if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { - - p.drawText(15, 50, tr ("Ipaq ") + ipaqChem); - - QString jacketMsg; - if (bat2) { - p.setPen(black); - p.drawText(10,220, tr("Percentage battery remaining: ") + perc2 + " " + jackStatus); - p.drawText(10,240, tr("Battery time remaining: ") + sec2); - jacketMsg = tr("Jacket ") + jackChem; - } else { - jackPercent = 0; - jacketMsg = tr("No jacket with battery inserted"); - } - - int jackPerc = ( jackPercent * ( width() - 47 ) ) / 100; - - qDrawShadePanel( &p, 9, 160, rightEnd1, 39, colorGroup(), TRUE, 1, NULL); - qDrawShadePanel( &p, rightEnd2, 167, 12, 24, colorGroup(), TRUE, 1, NULL); - drawSegment( &p, QRect( 10, 160, jackPerc, 40 ), lightc, darkc, lightc.light(115), 6 ); - drawSegment( &p, QRect( 11 + jackPerc, 160, rightEnd1 - jackPerc, 40 ), white.light(80), black, white.light(90), 6 ); - drawSegment( &p, QRect( rightEnd2, 167, 10, 25 ), white.light(80), black, white.light(90), 2 ); - p.setPen( black ); - p.drawText(15, 180, jacketMsg); - } + if ( ps->acStatus() == PowerStatus::Backup ) + text += "\n" + tr("On backup power"); + else if ( ps->acStatus() == PowerStatus::Online ) + text += "\n" + tr("Power on-line"); + else if ( ps->acStatus() == PowerStatus::Offline ) + text += "\n" + tr("External power disconnected"); + + if ( ps->batteryTimeRemaining() >= 0 ) { + text += "\n" + QString().sprintf( tr("Battery time remaining") + ": %im %02is", + ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 ); + } + return text; +} + +QString BatteryStatus::statusTextIpaq() const { + QString text; + text += tr("Percentage battery remaining: ") + perc2 + " " + jackStatus; + text += "\n" + tr("Battery time remaining: ") + sec2; + return text; +} + +void BatteryStatus::paintEvent( QPaintEvent * ) { + + QPainter p( this ); + + QString text = statusText(); + p.drawText( 10, 50, width() - 20, 40 , AlignVCenter, text ); + + QColor c; + QColor darkc; + QColor lightc; + if ( ps->acStatus() == PowerStatus::Offline ) { + c = blue.light(120); + darkc = c.dark(280); + lightc = c.light(145); + } else if ( ps->acStatus() == PowerStatus::Online ) { + c = green.dark(130); + darkc = c.dark(200); + lightc = c.light(220); + } else { + c = red; + darkc = c.dark(280); + lightc = c.light(140); + } + if ( percent < 0 ) + return; + + int rightEnd1 = width() - 47; + int rightEnd2 = width() - 35; + int percent2 = (percent * rightEnd1) / 100; + p.setPen( black ); + qDrawShadePanel( &p, 9, 10, rightEnd1 , 39, colorGroup(), TRUE, 1, NULL); + qDrawShadePanel( &p, rightEnd2, 17, 12, 24, colorGroup(), TRUE, 1, NULL); + drawSegment( &p, QRect( 10, 10, percent2, 40 ), lightc, darkc, lightc.light(115), 6 ); + drawSegment( &p, QRect( 11 + percent2, 10, rightEnd1 - percent2, 40 ), white.light(80), black, white.light(90), 6 ); + drawSegment( &p, QRect( rightEnd2, 17, 10, 25 ), white.light(80), black, white.light(90), 2 ); + p.setPen( black); + + if ( ODevice::inst ( )-> series ( ) == Model_iPAQ && bat2 ) { + + p.drawText( 15, 30, tr ("Ipaq ") + ipaqChem ); + + QString jacketMsg; + if (bat2) { + p.setPen(black); + QString text = statusTextIpaq(); + p.drawText( 10, 150, text ); + jacketMsg = tr("Jacket ") + jackChem; + } else { + jackPercent = 0; + jacketMsg = tr("No jacket with battery inserted"); + } + + int jackPerc = ( jackPercent * ( width() - 47 ) ) / 100; + + qDrawShadePanel( &p, 9, 90, rightEnd1, 39, colorGroup(), TRUE, 1, NULL); + qDrawShadePanel( &p, rightEnd2, 97, 12, 24, colorGroup(), TRUE, 1, NULL); + drawSegment( &p, QRect( 10, 90, jackPerc, 40 ), lightc, darkc, lightc.light(115), 6 ); + drawSegment( &p, QRect( 11 + jackPerc, 90, rightEnd1 - jackPerc, 40 ), white.light(80), black, white.light(90), 6 ); + drawSegment( &p, QRect( rightEnd2, 97, 10, 25 ), white.light(80), black, white.light(90), 2 ); + p.setPen( black ); + p.drawText(15, 100, width() - 20, 20 , AlignVCenter, jacketMsg); + } } +QSize BatteryStatus::sizeHint() const { + QString text = statusText(); + QString text2 = statusTextIpaq(); + QFontMetrics fm = fontMetrics(); + QRect r=fm.boundingRect( 10, 0, width(), height(), AlignVCenter, text ); + QRect r2=fm.boundingRect( 10, 0, width(), height(), AlignVCenter, text2 ); + + if ( bat2 ) { + return QSize( QMAX( QMIN( 200, qApp->desktop()->width() ), + r.width() ), 2 * 10 + 80 + r.height() + r2.height() ); + } + return QSize( QMAX( QMIN( 200, qApp->desktop()->width() ), + r.width() ), 2 * 10 + 40 + r.height() ); +} diff --git a/core/applets/batteryapplet/batterystatus.h b/core/applets/batteryapplet/batterystatus.h index a5ab804..bb95ece 100644 --- a/core/applets/batteryapplet/batterystatus.h +++ b/core/applets/batteryapplet/batterystatus.h @@ -1,60 +1,64 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef BATTERY_STATUS_H #define BATTERY_STATUS_H -#include <qwidget.h> +#include <qframe.h> class PowerStatus; -class BatteryStatus : public QWidget +class BatteryStatus : public QFrame { Q_OBJECT public: - BatteryStatus( const PowerStatus *s, QWidget *parent=0 ); + BatteryStatus( const PowerStatus *s, QWidget *parent=0, WFlags f = 0 ); ~BatteryStatus(); void updatePercent( int ); - + QSize sizeHint() const; protected: void drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height ); void paintEvent( QPaintEvent *pe ); bool BatteryStatus::getProcApmStatusIpaq(); + private: + QString statusText() const; + QString statusTextIpaq() const; const PowerStatus *ps; int percent; int ipaqPercent; int jackPercent; int jackMinutes; QString perc1; QString sec1; QString perc2; QString sec2; QString ipaqStatus; QString jackStatus; QString ipaqChem; QString jackChem; bool bat2; + bool bat2inserted; int screenWidth; int screenHeight; }; #endif |