summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/styles/theme/othemestyle.cpp124
-rw-r--r--noncore/styles/theme/othemestyle.h16
2 files changed, 123 insertions, 17 deletions
diff --git a/noncore/styles/theme/othemestyle.cpp b/noncore/styles/theme/othemestyle.cpp
index 8c7a71b..a820efb 100644
--- a/noncore/styles/theme/othemestyle.cpp
+++ b/noncore/styles/theme/othemestyle.cpp
@@ -27,2 +27,3 @@
#include <qglobal.h>
+#include <qprogressbar.h>
@@ -31,2 +32,60 @@
+typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *,
+ QColorGroup &, bool, bool);
+
+QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl);
+
+
+/* !! HACK !! Beware
+ *
+ * TT forgot to make the QProgressBar widget styleable in Qt 2.x
+ * So the only way to customize the drawing, is to intercept the
+ * paint event - since we have to use protected functions, we need
+ * to derive a "hack" class from QProgressBar and do the painting
+ * in there.
+ *
+ * - sandman
+ */
+
+class HackProgressBar : public QProgressBar {
+public:
+ HackProgressBar ( );
+
+ void paint ( QPaintEvent *event, OThemeStyle *style )
+ {
+ QPainter p( this );
+
+ if ( !contentsRect().contains( event->rect() ) ) {
+ p.save();
+ p.setClipRegion( event->region().intersect(frameRect()) );
+ drawFrame( &p);
+ p.restore();
+ }
+ if ( event->rect().intersects( contentsRect() )) {
+ p.setClipRegion( event->region().intersect( contentsRect() ) );
+
+ int x, y, w, h;
+ contentsRect ( ). rect ( &x, &y, &w, &h );
+
+ int prog = progress ( );
+ int total = totalSteps ( );
+ if ( prog < 0 )
+ prog = 0;
+ if ( total <= 0 )
+ total = 1;
+ int perc = prog * 100 / total;
+
+ style-> drawProgressBar ( &p, x, y, w, h, colorGroup ( ), perc );
+
+ if ( progress ( ) >= 0 && totalSteps ( ) > 0 ) {
+ QString pstr;
+ pstr. sprintf ( "%d%%", 100 * progress()/totalSteps ());
+ p. setPen ( colorGroup().text());//g.highlightedText ( ));
+ p. drawText (x,y,w-1,h-1,AlignCenter,pstr);
+ }
+ }
+ }
+};
+
+
#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
@@ -44,3 +103,6 @@ OThemeStyle::~OThemeStyle()
void OThemeStyle::polish( QApplication * /*app*/ )
-{}
+{
+ qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &OThemeStyle::drawMenuBarItem);
+}
+
@@ -81,2 +143,3 @@ void OThemeStyle::unPolish( QApplication *app )
{
+ qt_set_draw_menu_bar_impl ( 0 );
app->setPalette( oldPalette, true );
@@ -114,3 +177,3 @@ void OThemeStyle::polish( QWidget *w )
}
- if ( w->inherits( "QCheckBox" ) ) {
+ else if ( w->inherits( "QCheckBox" ) ) {
if ( isColor( IndicatorOff ) || isColor( IndicatorOn ) ) {
@@ -127,3 +190,3 @@ void OThemeStyle::polish( QWidget *w )
}
- if ( w->inherits( "QRadioButton" ) ) {
+ else if ( w->inherits( "QRadioButton" ) ) {
if ( isColor( ExIndicatorOff ) || isColor( ExIndicatorOn ) ) {
@@ -141,2 +204,5 @@ void OThemeStyle::polish( QWidget *w )
}
+ else if ( w-> inherits ( "QProgressBar" ) ) {
+ w-> installEventFilter ( this );
+ }
}
@@ -161,6 +227,20 @@ void OThemeStyle::unPolish( QWidget* w )
w->unsetPalette();
- if ( w->inherits( "QCheckBox" ) )
+ else if ( w->inherits( "QCheckBox" ) )
w->unsetPalette();
- if ( w->inherits( "QRadioButton" ) )
+ else if ( w->inherits( "QRadioButton" ) )
w->unsetPalette();
+ else if ( w-> inherits ( "QProgressBar" ) )
+ w-> removeEventFilter ( this );
+}
+
+bool OThemeStyle::eventFilter ( QObject *obj, QEvent *ev )
+{
+ // only QProgressBar so far
+
+ if ( ev-> type ( ) == QEvent::Paint ) {
+ HackProgressBar *pb = (HackProgressBar *) obj;
+ pb-> paint ((QPaintEvent *) ev, this );
+ return true;
+ }
+ return false;
}
@@ -1349,7 +1429,15 @@ void OThemeStyle::drawKMenuBar( QPainter *p, int x, int y, int w, int h,
}
+#endif
-void OThemeStyle::drawKMenuItem( QPainter *p, int x, int y, int w, int h,
- const QColorGroup &g, bool active,
- QMenuItem *mi, QBrush * )
+void OThemeStyle::drawMenuBarItem( QPainter *p, int x, int y, int w, int h,
+ QMenuItem *mi, const QColorGroup &g,
+ bool /*enabled*/, bool active )
{
+ if(active){
+ x -= 2; // Bug in Qt/E
+ y -= 2;
+ w += 2;
+ h += 2;
+ }
+
const QColorGroup * cg = colorGroup( g, active ? MenuBarItem : MenuBar );
@@ -1363,5 +1451,23 @@ void OThemeStyle::drawKMenuItem( QPainter *p, int x, int y, int w, int h,
-1, &btext );
- ;
}
+
+
+void OThemeStyle::drawProgressBar ( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, int percent )
+{
+ const QColorGroup * cg = colorGroup( g, ProgressBg );
+ QBrush bg;
+ bg.setColor( cg->color( QColorGroup::Background ) );
+ if ( isPixmap( ProgressBg ) )
+ bg.setPixmap( *uncached( ProgressBg ) );
+
+ int pw = w * percent / 100;
+
+ p-> fillRect ( x + pw, y, w - pw, h, bg ); // ### TODO
+
+ drawBaseButton( p, x, y, pw, h, *cg, false, false, ProgressBar );
+}
+
+#if 0
+
void OThemeStyle::drawKProgressBlock( QPainter *p, int x, int y, int w, int h,
diff --git a/noncore/styles/theme/othemestyle.h b/noncore/styles/theme/othemestyle.h
index 52445c4..406b35b 100644
--- a/noncore/styles/theme/othemestyle.h
+++ b/noncore/styles/theme/othemestyle.h
@@ -28,2 +28,4 @@
+class QProgressBar;
+
@@ -65,2 +67,4 @@ public:
+ virtual bool eventFilter ( QObject *obj, QEvent *ev );
+
/**
@@ -314,8 +318,5 @@ public:
*/
-#if 0
-
- virtual void drawKMenuItem( QPainter *p, int x, int y, int w, int h,
- const QColorGroup &g, bool active,
- QMenuItem *item, QBrush *fill = NULL );
-#endif
+ virtual void drawMenuBarItem( QPainter *p, int x, int y, int w, int h,
+ QMenuItem *item, const QColorGroup &g,
+ bool enabled, bool active );
/**
@@ -354,4 +355,3 @@ public:
*/
- // virtual void drawKProgressBlock(QPainter *p, int x, int y, int w, int h,
- // const QColorGroup &g, QBrush *fill);
+ virtual void drawProgressBar (QPainter *, int , int , int , int , const QColorGroup &, int );
/**