summaryrefslogtreecommitdiffstats
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-rw-r--r--src/qtsegmentcontrol.cpp22
1 files changed, 16 insertions, 6 deletions
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;