summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNorwegian Rock Cat <qt-info@nokia.com>2009-07-03 13:05:58 +0200
committerNorwegian Rock Cat <qt-info@nokia.com>2009-07-03 13:05:58 +0200
commit48784989a429da87ba8a3b8b5a5390616b146a60 (patch)
tree72e6398e135af64bff71bf85d87e71c3532a23d3
parent26fba3ca3300639024a0c39acb70d3b34ff61bf1 (diff)
Some work with the enabled property.
Basics are there, mouse events aren't delivered at all to a disabled item. The appearance isn't quite correct though.
-rw-r--r--example/simple/main.cpp14
-rw-r--r--src/qtsegmentcontrol.cpp22
2 files changed, 29 insertions, 7 deletions
diff --git a/example/simple/main.cpp b/example/simple/main.cpp
index 2b19edd..ea9fc86 100644
--- a/example/simple/main.cpp
+++ b/example/simple/main.cpp
@@ -1,5 +1,6 @@
#include <QtGui/QApplication>
#include <QtGui/QWidget>
+#include <QtGui/QCheckBox>
#include <QtGui/QVBoxLayout>
#include "qtsegmentcontrol.h"
@@ -9,10 +10,12 @@ class MyWindow : public QWidget
public:
MyWindow() {
controller = new QtSegmentControl();
- controller->setCount(3);
+ controller->setCount(4);
controller->setSegmentText(0, tr("Select One"));
controller->setSegmentText(1, tr("Select All"));
controller->setSegmentText(2, tr("Select None"));
+ controller->setSegmentText(3, tr("Permanently Disabled"));
+ controller->setSegmentEnabled(3, false);
controller->setSelectionBehavior(QtSegmentControl::SelectOne);
connect(controller, SIGNAL(segmentSelected(int)), this, SLOT(updateBehavior(int)));
segmentControl = new QtSegmentControl();
@@ -24,9 +27,14 @@ public:
segmentControl->setSegmentText(4, "Maggie");
controller->setSegmentSelected(0, true);
+ QCheckBox *button = new QCheckBox(tr("Disable Bart"));
+ button->setChecked(false);
+ connect(button, SIGNAL(toggled(bool)), SLOT(updateBart(bool)));
+
QVBoxLayout *vboxlayout = new QVBoxLayout();
vboxlayout->addWidget(controller);
vboxlayout->addWidget(segmentControl);
+ vboxlayout->addWidget(button);
setLayout(vboxlayout);
}
@@ -35,6 +43,10 @@ private slots:
segmentControl->setSelectionBehavior(QtSegmentControl::SelectionBehavior(newOne));
}
+ void updateBart(bool enabled) {
+ segmentControl->setSegmentEnabled(2, !enabled);
+ }
+
private:
QtSegmentControl *controller;
QtSegmentControl *segmentControl;
diff --git a/src/qtsegmentcontrol.cpp b/src/qtsegmentcontrol.cpp
index 617f54a..762b40f 100644
--- a/src/qtsegmentcontrol.cpp
+++ b/src/qtsegmentcontrol.cpp
@@ -1,6 +1,8 @@
+#include <QtGui/QApplication>
#include <QtGui/QIcon>
#include <QtGui/QMenu>
#include <QtGui/QPainter>
+#include <QtGui/QStyle>
#include <QtGui/QStyleOption>
#include <QtGui/QMouseEvent>
#include <QtCore/QDebug>
@@ -120,7 +122,8 @@ static void drawSegmentControlSegmentLabel(const QStyleOption *option, QPainter
{
if (const QtStyleOptionSegmentControlSegment *segment
= static_cast<const QtStyleOptionSegmentControlSegment *>(option)) {
- painter->drawText(segment->rect, Qt::AlignCenter, segment->text);
+ qApp->style()->drawItemText(painter, segment->rect, Qt::AlignCenter, segment->palette,
+ segment->state & QStyle::State_Enabled, segment->text);
}
}
@@ -416,7 +419,7 @@ int QtSegmentControl::segmentAt(const QPoint &pos) const
const int segmentCount = d->segments.count();
for (int i = 0; i < segmentCount; ++i) {
QRect rect = segmentRect(i);
- if (rect.contains(pos))
+ if (rect.contains(pos) && d->segments.at(i).enabled)
return i;
}
return -1;
@@ -437,8 +440,11 @@ void QtSegmentControl::paintEvent(QPaintEvent *)
void QtSegmentControl::mousePressEvent(QMouseEvent *event)
{
- d->wasPressed = d->pressedIndex = segmentAt(event->pos());
- d->postUpdate(d->pressedIndex);
+ int segmentIndex = segmentAt(event->pos());
+ if (segmentIndex != -1) {
+ d->wasPressed = d->pressedIndex = segmentAt(event->pos());
+ d->postUpdate(d->pressedIndex);
+ }
}
void QtSegmentControl::mouseMoveEvent(QMouseEvent *event)
@@ -456,6 +462,8 @@ void QtSegmentControl::mouseMoveEvent(QMouseEvent *event)
void QtSegmentControl::mouseReleaseEvent(QMouseEvent *event)
{
int index = segmentAt(event->pos());
+ if (index == -1)
+ return;
// This order of reset is important.
d->pressedIndex = -1;
if (index == d->wasPressed && d->selectionBehavior != SelectNone) {
@@ -504,9 +512,11 @@ void QtSegmentControl::initStyleOption(int segment, QStyleOption *option) const
} else {
sgi->position = QtStyleOptionSegmentControlSegment::Middle;
}
- if (segmentInfo.selected) {
+
+ if (segmentInfo.selected)
sgi->state |= QStyle::State_Selected;
- }
+ if (!segmentInfo.enabled)
+ sgi->state &= ~QStyle::State_Enabled;
if (d->selectionBehavior != QtSegmentControl::SelectNone) {
sgi->selectedPositions = QtStyleOptionSegmentControlSegment::NotAdjacent;