39
40
static const int TIMEOUT = 10000;
41
class PieWidget : public QWidget {
42
class PieWidget : public QWidget
43
PieWidget(QWidget* parent=0)
47
setMinimumSize(16, 16);
50
void setValue(qreal value) {
55
int heightForWidth(int width) const {
45
PieWidget(QWidget* parent = 0)
48
setMinimumSize(16, 16);
51
void setValue(qreal value)
57
int heightForWidth(int width) const {
60
void paintEvent(QPaintEvent*) {
61
QPainter painter(this);
62
painter.setRenderHint(QPainter::Antialiasing);
63
const int circle = 5760;
64
const int start = circle / 4; // Start at 12h, not 3h
65
const int end = int(circle * mValue);
66
painter.setBrush(palette().dark());
67
painter.setPen(palette().light().color());
62
void paintEvent(QPaintEvent*)
64
QPainter painter(this);
65
painter.setRenderHint(QPainter::Antialiasing);
66
const int circle = 5760;
67
const int start = circle / 4; // Start at 12h, not 3h
68
const int end = int(circle * mValue);
69
painter.setBrush(palette().dark());
70
painter.setPen(palette().light().color());
69
QRectF square = QRectF(rect()).adjusted(.5, .5, -.5, -.5);
70
qreal width = square.width();
71
qreal height= square.height();
73
square.setHeight(width);
74
square.moveTop((height - width) / 2);
76
square.setWidth(height);
77
square.moveLeft((width - height) / 2);
79
painter.drawPie(square, start, end);
72
QRectF square = QRectF(rect()).adjusted(.5, .5, -.5, -.5);
73
qreal width = square.width();
74
qreal height = square.height();
76
square.setHeight(width);
77
square.moveTop((height - width) / 2);
79
square.setWidth(height);
80
square.moveLeft((width - height) / 2);
82
painter.drawPie(square, start, end);
87
89
struct MessageBubblePrivate {
88
PieWidget* mCountDownWidget;
90
PieWidget* mCountDownWidget;
94
95
MessageBubble::MessageBubble(QWidget* parent)
95
96
: HudWidget(parent)
96
, d(new MessageBubblePrivate) {
97
d->mWidget = new QWidget;
98
d->mCountDownWidget = new PieWidget;
99
d->mCountDownWidget->setValue(1);
100
d->mLabel = new QLabel;
102
QTimeLine* timeLine = new QTimeLine(TIMEOUT, this);
103
connect(timeLine, SIGNAL(valueChanged(qreal)),
104
SLOT(slotTimeLineChanged(qreal)));
105
connect(timeLine, SIGNAL(finished()),
106
SLOT(deleteLater()));
109
QHBoxLayout* layout = new QHBoxLayout(d->mWidget);
110
layout->setMargin(0);
111
layout->addWidget(d->mCountDownWidget);
112
layout->addWidget(d->mLabel);
114
init(d->mWidget, HudWidget::OptionCloseButton);
118
MessageBubble::~MessageBubble() {
123
void MessageBubble::setText(const QString& text) {
124
d->mLabel->setText(text);
129
QToolButton* MessageBubble::addButton(const KGuiItem& guiItem) {
130
QToolButton* button = new QToolButton;
131
button->setText(guiItem.text());
132
button->setIcon(guiItem.icon());
133
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
134
d->mWidget->layout()->addWidget(button);
140
void MessageBubble::slotTimeLineChanged(qreal value) {
141
d->mCountDownWidget->setValue(1 - value);
97
, d(new MessageBubblePrivate)
99
d->mWidget = new QWidget;
100
d->mCountDownWidget = new PieWidget;
101
d->mCountDownWidget->setValue(1);
102
d->mLabel = new QLabel;
104
QTimeLine* timeLine = new QTimeLine(TIMEOUT, this);
105
connect(timeLine, SIGNAL(valueChanged(qreal)),
106
SLOT(slotTimeLineChanged(qreal)));
107
connect(timeLine, SIGNAL(finished()),
108
SLOT(deleteLater()));
111
QHBoxLayout* layout = new QHBoxLayout(d->mWidget);
112
layout->setMargin(0);
113
layout->addWidget(d->mCountDownWidget);
114
layout->addWidget(d->mLabel);
116
init(d->mWidget, HudWidget::OptionCloseButton);
119
MessageBubble::~MessageBubble()
124
void MessageBubble::setText(const QString& text)
126
d->mLabel->setText(text);
130
QToolButton* MessageBubble::addButton(const KGuiItem& guiItem)
132
QToolButton* button = new QToolButton;
133
button->setText(guiItem.text());
134
button->setIcon(guiItem.icon());
135
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
136
d->mWidget->layout()->addWidget(button);
141
void MessageBubble::slotTimeLineChanged(qreal value)
143
d->mCountDownWidget->setValue(1 - value);