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 @@ -34,10 +34,9 @@ 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) ); @@ -51,22 +50,18 @@ BatteryMeter::BatteryMeter( QWidget *parent ) 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 ); @@ -74,22 +69,31 @@ void BatteryMeter::mousePressEvent( QMouseEvent* e ) } 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(); @@ -110,10 +114,9 @@ void BatteryMeter::timerEvent( QTimerEvent * ) batteryView->repaint(); } } -void BatteryMeter::chargeTimeout() -{ +void BatteryMeter::chargeTimeout() { percent += 20; if ( percent > 100 ) percent = 0; @@ -121,13 +124,11 @@ void BatteryMeter::chargeTimeout() 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 ); @@ -138,17 +139,22 @@ void BatteryMeter::paintEvent( QPaintEvent* ) 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; @@ -161,10 +167,9 @@ void BatteryMeter::paintEvent( QPaintEvent* ) //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 ) ); @@ -172,10 +177,9 @@ void BatteryMeter::paintEvent( QPaintEvent* ) 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 @@ -36,14 +36,15 @@ class BatteryMeter : public QWidget QSize sizeHint() const; static int position(); + + protected: void timerEvent( QTimerEvent* ); void paintEvent( QPaintEvent* ); void mousePressEvent( QMouseEvent* ); void mouseReleaseEvent( QMouseEvent* ); - protected slots: void chargeTimeout(); protected: 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 @@ -8,42 +8,25 @@ /* 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 */ @@ -95,9 +78,8 @@ bool BatteryStatus::getProcApmStatusIpaq() { QMessageBox::warning(this, tr("Failure"),tr("could not open file")); } procApmIpaq.close(); - jackPercent = perc2.toInt(); ipaqPercent = perc1.toInt(); if (perc2.isEmpty()) { @@ -105,17 +87,15 @@ bool BatteryStatus::getProcApmStatusIpaq() { } else { perc2 += " %"; } - if (sec2 == "0" || sec2 == "" || sec2.isEmpty()) { sec2 = tr("no data"); } else { sec2 += " min"; } jackStatus == (" ( " + jackStatus + " )"); - return true; } @@ -143,12 +123,11 @@ void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topg 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 { @@ -174,22 +153,36 @@ void BatteryStatus::paintEvent( QPaintEvent * ) { 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; @@ -212,40 +205,52 @@ void BatteryStatus::paintEvent( QPaintEvent * ) { 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 @@ -19,26 +19,29 @@ **********************************************************************/ #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; @@ -51,8 +54,9 @@ private: QString jackStatus; QString ipaqChem; QString jackChem; bool bat2; + bool bat2inserted; int screenWidth; int screenHeight; }; |