diff options
author | Darrell Anderson <humanreadable@yahoo.com> | 2012-11-10 11:43:40 -0600 |
---|---|---|
committer | Darrell Anderson <humanreadable@yahoo.com> | 2012-11-10 11:43:40 -0600 |
commit | 6bcbe0a787127751122109caf4a3cd621e13004e (patch) | |
tree | 5a0f15dcfa9330f1e1dbabe346ba69c848e17bdf /src/widgets | |
parent | f7873ac3368532ee4ab09e77e5112d7b6b1a8069 (diff) | |
parent | d1c672237288068a5e3777d16277221912bc0088 (diff) | |
download | qt3-6bcbe0a787127751122109caf4a3cd621e13004e.tar.gz qt3-6bcbe0a787127751122109caf4a3cd621e13004e.zip |
Merge branch 'master' of http://scm.trinitydesktop.org/scm/git/qt3
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/qprogressbar.cpp | 116 | ||||
-rw-r--r-- | src/widgets/qprogressbar.h | 8 |
2 files changed, 94 insertions, 30 deletions
diff --git a/src/widgets/qprogressbar.cpp b/src/widgets/qprogressbar.cpp index 3d0f403..d5011da 100644 --- a/src/widgets/qprogressbar.cpp +++ b/src/widgets/qprogressbar.cpp @@ -44,6 +44,7 @@ #include "qdrawutil.h" #include "qpixmap.h" #include "qstyle.h" +#include "qwmatrix.h" #include "../kernel/qinternal_p.h" #if defined(QT_ACCESSIBILITY_SUPPORT) #include "qaccessible.h" @@ -102,7 +103,8 @@ QProgressBar::QProgressBar( QWidget *parent, const char *name, WFlags f ) center_indicator( TRUE ), auto_indicator( TRUE ), percentage_visible( TRUE ), - d( 0 ) + d( 0 ), + m_orientation( Horizontal ) { setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); initFrame(); @@ -133,7 +135,8 @@ QProgressBar::QProgressBar( int totalSteps, center_indicator( TRUE ), auto_indicator( TRUE ), percentage_visible( TRUE ), - d( 0 ) + d( 0 ), + m_orientation( Horizontal ) { setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); initFrame(); @@ -234,9 +237,15 @@ QSize QProgressBar::sizeHint() const constPolish(); QFontMetrics fm = fontMetrics(); int cw = style().pixelMetric(QStyle::PM_ProgressBarChunkWidth, this); - return style().sizeFromContents(QStyle::CT_ProgressBar, this, + QSize sh = style().sizeFromContents(QStyle::CT_ProgressBar, this, QSize( cw * 7 + fm.width( '0' ) * 4, fm.height() + 8)); + if (m_orientation == Qt::Horizontal) { + return sh; + } + else { + return QSize(sh.height(), sh.width()); + } } @@ -321,6 +330,22 @@ void QProgressBar::styleChange( QStyle& old ) QFrame::styleChange( old ); } +Qt::Orientation QProgressBar::orientation() const +{ + return m_orientation; +} + +void QProgressBar::setOrientation(Orientation orient) +{ + m_orientation = orient; + if (m_orientation == Qt::Horizontal) { + setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + } + else { + setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Expanding ) ); + } +} + /*! This method is called to generate the text displayed in the center @@ -371,40 +396,71 @@ bool QProgressBar::setIndicator( QString & indicator, int progress, */ void QProgressBar::drawContents( QPainter *p ) { - const QRect bar = contentsRect(); + const QRect bar = contentsRect(); + + QSharedDoubleBuffer buffer( p, bar.x(), bar.y(), bar.width(), bar.height() ); + + QPoint pn = backgroundOffset(); + buffer.painter()->setBrushOrigin( -pn.x(), -pn.y() ); + + const QPixmap *bpm = paletteBackgroundPixmap(); + if ( bpm ) { + buffer.painter()->fillRect( bar, QBrush( paletteBackgroundColor(), *bpm ) ); + } + else { + buffer.painter()->fillRect( bar, paletteBackgroundColor() ); + } + buffer.painter()->setFont( p->font() ); - QSharedDoubleBuffer buffer( p, bar.x(), bar.y(), bar.width(), bar.height() ); + QStyle::SFlags flags = QStyle::Style_Default; + if (isEnabled()) { + flags |= QStyle::Style_Enabled; + } + if (hasFocus()) { + flags |= QStyle::Style_HasFocus; + } + if (hasMouse()) { + flags |= QStyle::Style_MouseOver; + } - QPoint pn = backgroundOffset(); - buffer.painter()->setBrushOrigin( -pn.x(), -pn.y() ); + style().drawControl(QStyle::CE_ProgressBarGroove, buffer.painter(), this, + QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarGroove, this), this ), + colorGroup(), flags); - const QPixmap *bpm = paletteBackgroundPixmap(); - if ( bpm ) - buffer.painter()->fillRect( bar, QBrush( paletteBackgroundColor(), *bpm ) ); - else - buffer.painter()->fillRect( bar, paletteBackgroundColor() ); - buffer.painter()->setFont( p->font() ); + QWMatrix oldMatrix = buffer.painter()->worldMatrix(); - QStyle::SFlags flags = QStyle::Style_Default; - if (isEnabled()) - flags |= QStyle::Style_Enabled; - if (hasFocus()) - flags |= QStyle::Style_HasFocus; - if (hasMouse()) - flags |= QStyle::Style_MouseOver; + QStyleControlElementData ceData = populateControlElementDataFromWidget(this, QStyleOption()); + QStyle::ControlElementFlags elementFlags = getControlElementFlagsForObject(this, ceData.widgetObjectTypes, QStyleOption()); - style().drawControl(QStyle::CE_ProgressBarGroove, buffer.painter(), this, - QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarGroove, this), this ), - colorGroup(), flags); + // Draw contents + if (m_orientation == Qt::Vertical) { + // If oriented vertically, apply a 90 degree rotation matrix to the painter + QWMatrix m; - style().drawControl(QStyle::CE_ProgressBarContents, buffer.painter(), this, - QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarContents, this), this ), - colorGroup(), flags); +// // Upside down +// m.rotate(90.0); +// m.translate(0, (bar.width())*(-1.0)); + + // Right side up + m.rotate(-90.0); + m.translate((bar.height())*(-1.0), 0); - if (percentageVisible()) - style().drawControl(QStyle::CE_ProgressBarLabel, buffer.painter(), this, - QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarLabel, this), this ), - colorGroup(), flags); + buffer.painter()->setWorldMatrix(m, TRUE); + + ceData.rect = QRect(ceData.rect.y(), ceData.rect.x(), ceData.rect.height(), ceData.rect.width()); + } + + style().drawControl(QStyle::CE_ProgressBarContents, buffer.painter(), ceData, elementFlags, + QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarContents, ceData, elementFlags, this), ceData, elementFlags), + colorGroup(), flags, QStyleOption(), this); + + buffer.painter()->setWorldMatrix(oldMatrix, TRUE); + + if (percentageVisible()) { + style().drawControl(QStyle::CE_ProgressBarLabel, buffer.painter(), this, + QStyle::visualRect(style().subRect(QStyle::SR_ProgressBarLabel, this), this ), + colorGroup(), flags); + } } #endif diff --git a/src/widgets/qprogressbar.h b/src/widgets/qprogressbar.h index 2c4f039..ac69914 100644 --- a/src/widgets/qprogressbar.h +++ b/src/widgets/qprogressbar.h @@ -60,6 +60,7 @@ class Q_EXPORT QProgressBar : public QFrame Q_PROPERTY( bool centerIndicator READ centerIndicator WRITE setCenterIndicator ) Q_PROPERTY( bool indicatorFollowsStyle READ indicatorFollowsStyle WRITE setIndicatorFollowsStyle ) Q_PROPERTY( bool percentageVisible READ percentageVisible WRITE setPercentageVisible ) + Q_PROPERTY( Orientation orientation READ orientation WRITE setOrientation ) public: QProgressBar( QWidget* parent=0, const char* name=0, WFlags f=0 ); @@ -111,6 +112,13 @@ private: // Disabled copy constructor and operator= QProgressBar( const QProgressBar & ); QProgressBar &operator=( const QProgressBar & ); #endif + +public: + virtual void setOrientation ( Orientation ); + Orientation orientation () const; + +private: + Orientation m_orientation; }; |