summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-11-06 22:37:56 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-11-06 22:37:56 -0600
commitd1c672237288068a5e3777d16277221912bc0088 (patch)
treed811e1eb3634399e65f9e37bfb64ff7b142c3eb4
parent37a8b8a9126f613eb94ee76e3476d3c6a5830018 (diff)
downloadqt3-d1c67223.tar.gz
qt3-d1c67223.zip
Add ability to set progressbar orientation
-rw-r--r--src/kernel/qstyle.cpp6
-rw-r--r--src/styles/qcommonstyle.cpp3
-rw-r--r--src/widgets/qprogressbar.cpp116
-rw-r--r--src/widgets/qprogressbar.h8
4 files changed, 102 insertions, 31 deletions
diff --git a/src/kernel/qstyle.cpp b/src/kernel/qstyle.cpp
index 843027d..4e689c2 100644
--- a/src/kernel/qstyle.cpp
+++ b/src/kernel/qstyle.cpp
@@ -2606,6 +2606,12 @@ QPixmap QStyle::stylePixmap(StylePixmap sp, const QWidget *w, const QStyleOption
QStyleControlElementData::QStyleControlElementData() {
activePainter = 0;
+ tickMarkSetting = 0;
+ comboBoxLineEditFlags = 0;
+ frameStyle = 0;
+ comboBoxListBoxFlags = 0;
+ parentWidgetFlags = 0;
+ topLevelWidgetFlags = 0;
}
#endif // QT_NO_STYLE
diff --git a/src/styles/qcommonstyle.cpp b/src/styles/qcommonstyle.cpp
index 2052ef1..a0e64d0 100644
--- a/src/styles/qcommonstyle.cpp
+++ b/src/styles/qcommonstyle.cpp
@@ -159,7 +159,7 @@ QStringList getObjectTypeListForObject(const QObject* object) {
}
QStyle::ControlElementFlags getControlElementFlagsForObject(const QObject* object, QStringList objectTypeList, const QStyleOption& opt, bool populateReliantFields) {
- QStyle::ControlElementFlags cef = (QStyle::ControlElementFlags)0;
+ QStyle::ControlElementFlags cef = QStyle::CEF_None;
if (object) {
if (objectTypeList.contains("QPushButton")) {
@@ -405,6 +405,7 @@ QStyleControlElementData populateControlElementDataFromWidget(const QWidget* wid
ceData.totalSteps = pb->totalSteps();
ceData.progressText = pb->progressString();
ceData.percentageVisible = pb->percentageVisible();
+ ceData.orientation = pb->orientation();
}
}
if (ceData.widgetObjectTypes.contains("QHeader")) {
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;
};