31 #include <QGridLayout>
32 #include <QHBoxLayout>
37 #include <QToolButton>
42 class KMessageWidgetPrivate
56 QList<QToolButton*> buttons;
57 QPixmap contentSnapShot;
60 void updateSnapShot();
62 void slotTimeLineChanged(qreal);
63 void slotTimeLineFinished();
70 q->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
72 timeLine =
new QTimeLine(500, q);
73 QObject::connect(timeLine, SIGNAL(valueChanged(qreal)), q, SLOT(slotTimeLineChanged(qreal)));
74 QObject::connect(timeLine, SIGNAL(finished()), q, SLOT(slotTimeLineFinished()));
77 content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
81 iconLabel =
new QLabel(content);
82 iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
84 textLabel =
new QLabel(content);
85 textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
86 textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
91 closeButton->setAutoRaise(
true);
92 closeButton->setDefaultAction(closeAction);
97 void KMessageWidgetPrivate::createLayout()
99 delete content->layout();
101 content->resize(q->size());
106 Q_FOREACH(
QAction* action, q->actions()) {
108 button->setDefaultAction(action);
109 button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
110 buttons.append(button);
116 closeButton->setAutoRaise(buttons.isEmpty());
119 QGridLayout* layout =
new QGridLayout(content);
121 layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
122 layout->addWidget(textLabel, 0, 1);
124 QHBoxLayout* buttonLayout =
new QHBoxLayout;
125 buttonLayout->addStretch();
131 buttonLayout->addWidget(button);
133 buttonLayout->addWidget(closeButton);
134 layout->addItem(buttonLayout, 1, 0, 1, 2);
136 QHBoxLayout* layout =
new QHBoxLayout(content);
137 layout->addWidget(iconLabel);
138 layout->addWidget(textLabel);
141 layout->addWidget(button);
144 layout->addWidget(closeButton);
147 if (q->isVisible()) {
148 q->setFixedHeight(content->sizeHint().height());
153 void KMessageWidgetPrivate::updateLayout()
155 if (content->layout()) {
160 void KMessageWidgetPrivate::updateSnapShot()
162 contentSnapShot = QPixmap(content->size());
163 contentSnapShot.fill(Qt::transparent);
164 content->render(&contentSnapShot,
QPoint(), QRegion(), QWidget::DrawChildren);
167 void KMessageWidgetPrivate::slotTimeLineChanged(qreal value)
169 q->setFixedHeight(qMin(value * 2, qreal(1.0)) * content->height());
173 void KMessageWidgetPrivate::slotTimeLineFinished()
190 , d(new KMessageWidgetPrivate)
197 , d(new KMessageWidgetPrivate)
210 return d->textLabel->text();
215 d->textLabel->setText(text);
221 return d->messageType;
233 d->messageType = type;
235 QColor bg0, bg1, bg2, border, fg;
238 icon =
KIcon(
"dialog-ok");
242 icon =
KIcon(
"dialog-information");
245 bg1 = palette().highlight().color();
246 fg = palette().highlightedText().color();
249 icon =
KIcon(
"dialog-warning");
253 icon =
KIcon(
"dialog-error");
259 bg0 = bg1.lighter(110);
260 bg2 = bg1.darker(110);
263 d->content->setStyleSheet(
265 "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
269 "border-radius: 5px;"
270 "border: 1px solid %4;"
272 ".QLabel { color: %5; }"
283 d->iconLabel->setPixmap(icon.pixmap(size));
289 return d->content->sizeHint();
295 return d->content->minimumSizeHint();
300 if (event->type() == QEvent::Polish && !d->content->layout()) {
309 if (d->timeLine->state() == QTimeLine::NotRunning) {
310 int contentHeight = d->content->heightForWidth(width());
311 if (contentHeight == -1) {
312 contentHeight = d->content->sizeHint().height();
314 d->content->resize(width(), contentHeight);
321 return d->content->heightForWidth(width);
327 if (d->timeLine->state() == QTimeLine::Running) {
328 QPainter painter(
this);
329 painter.setOpacity(d->timeLine->currentValue() * d->timeLine->currentValue());
330 painter.drawPixmap(0, 0, d->contentSnapShot);
349 d->textLabel->setWordWrap(wordWrap);
355 return d->closeButton->isVisible();
360 d->closeButton->setVisible(show);
388 int wantedHeight = d->content->sizeHint().height();
389 d->content->setGeometry(0, -wantedHeight, width(), wantedHeight);
394 if (d->timeLine->state() == QTimeLine::NotRunning) {
395 d->timeLine->start();
410 d->content->move(0, -d->content->height());
413 d->timeLine->setDirection(QTimeLine::Backward);
414 if (d->timeLine->state() == QTimeLine::NotRunning) {
415 d->timeLine->start();
419 #include "kmessagewidget.moc"