author | harlekin <harlekin> | 2004-05-11 22:41:22 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2004-05-11 22:41:22 (UTC) |
commit | 7a9cabb330284777113bb544139843dcf0593628 (patch) (side-by-side diff) | |
tree | ec706423d2abc2b7d2dcbbab8f3d846bcff45ee0 | |
parent | 81104f00cb87962333a024d3fa5ff6cf3d8d7d83 (diff) | |
download | opie-7a9cabb330284777113bb544139843dcf0593628.zip opie-7a9cabb330284777113bb544139843dcf0593628.tar.gz opie-7a9cabb330284777113bb544139843dcf0593628.tar.bz2 |
the "bett ery" commit, batteryapplet is now a popup, only shows second battery on ipaq if a second battery is present
-rw-r--r-- | core/applets/batteryapplet/battery.cpp | 72 | ||||
-rw-r--r-- | core/applets/batteryapplet/battery.h | 3 | ||||
-rw-r--r-- | core/applets/batteryapplet/batterystatus.cpp | 103 | ||||
-rw-r--r-- | core/applets/batteryapplet/batterystatus.h | 12 |
4 files changed, 102 insertions, 88 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 @@ -32,14 +32,13 @@ #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) ); setFixedHeight( AppLnk::smallIconSize() ); @@ -49,49 +48,54 @@ BatteryMeter::BatteryMeter( QWidget *parent ) 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(); @@ -108,49 +112,51 @@ void BatteryMeter::timerEvent( QTimerEvent * ) repaint( style != 0 ); if ( batteryView ) batteryView->repaint(); } } -void BatteryMeter::chargeTimeout() -{ +void BatteryMeter::chargeTimeout() { percent += 20; if ( percent > 100 ) percent = 0; repaint(FALSE); if ( batteryView ) 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; @@ -159,24 +165,22 @@ void BatteryMeter::paintEvent( QPaintEvent* ) 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 @@ -34,18 +34,19 @@ class BatteryMeter : public QWidget 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; 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 @@ -6,46 +6,29 @@ #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 ); - - QPushButton *pb = new QPushButton( tr("Close"), this ); - QVBoxLayout *layout = new QVBoxLayout ( this ); +BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent, WFlags f ) +: QFrame( parent, 0, f), ps(p), bat2(false) { 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(); } -BatteryStatus::~BatteryStatus() -{ -} +BatteryStatus::~BatteryStatus() {} /* * Make use of the advanced apm interface of the ipaq */ bool BatteryStatus::getProcApmStatusIpaq() { @@ -93,31 +76,28 @@ bool BatteryStatus::getProcApmStatusIpaq() { } } 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; } void BatteryStatus::updatePercent( int pc ) { percent = pc; @@ -141,16 +121,15 @@ void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topg 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 * ) { - - QPainter p(this); +QString BatteryStatus::statusText() const { QString text; + if ( ps->batteryStatus() == PowerStatus::Charging ) { if (bat2) { text = tr("Charging both devices"); } else { text = tr("Charging"); } @@ -172,26 +151,40 @@ void BatteryStatus::paintEvent( QPaintEvent * ) { 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") ); + text += "\n" + tr("On backup power"); else if ( ps->acStatus() == PowerStatus::Online ) - p.drawText( 10, 110, tr("Power on-line") ); + text += "\n" + tr("Power on-line"); else if ( ps->acStatus() == PowerStatus::Offline ) - p.drawText( 10, 110, tr("External power disconnected") ); + text += "\n" + tr("External power disconnected"); if ( ps->batteryTimeRemaining() >= 0 ) { - text.sprintf( tr("Battery time remaining") + ": %im %02is", + text += "\n" + QString().sprintf( tr("Battery time remaining") + ": %im %02is", ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 ); - p.drawText( 10, 130, text ); } + 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); @@ -210,42 +203,54 @@ void BatteryStatus::paintEvent( QPaintEvent * ) { 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 ); + 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 ) { - if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { - - p.drawText(15, 50, tr ("Ipaq ") + ipaqChem); + p.drawText( 15, 30, 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); + 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, 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 ); + 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, 180, jacketMsg); + 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 @@ -17,30 +17,33 @@ ** 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; @@ -49,12 +52,13 @@ private: QString sec2; QString ipaqStatus; QString jackStatus; QString ipaqChem; QString jackChem; bool bat2; + bool bat2inserted; int screenWidth; int screenHeight; }; #endif |