kdeui: place the close button of KMessageWidget conditionally again

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-16 20:15:45 +03:00
parent 324518962f
commit 71e27caf2e

View file

@ -76,11 +76,13 @@ void KMessageLabel::paintEvent(QPaintEvent *event)
class KMessageWidgetPrivate class KMessageWidgetPrivate
{ {
public: public:
KMessageWidgetPrivate(); KMessageWidgetPrivate(KMessageWidget *messagewidget);
~KMessageWidgetPrivate(); ~KMessageWidgetPrivate();
void updateColors(); void updateColors();
void updateLayout();
KMessageWidget* messagewidget;
QVBoxLayout* mainlayout; QVBoxLayout* mainlayout;
QHBoxLayout* messagelayout; QHBoxLayout* messagelayout;
KPixmapWidget* iconwidget; KPixmapWidget* iconwidget;
@ -92,8 +94,9 @@ public:
QList<QToolButton*> buttons; QList<QToolButton*> buttons;
}; };
KMessageWidgetPrivate::KMessageWidgetPrivate() KMessageWidgetPrivate::KMessageWidgetPrivate(KMessageWidget *_messagewidget)
: mainlayout(nullptr), : messagewidget(_messagewidget),
mainlayout(nullptr),
messagelayout(nullptr), messagelayout(nullptr),
iconwidget(nullptr), iconwidget(nullptr),
textlabel(nullptr), textlabel(nullptr),
@ -108,6 +111,9 @@ KMessageWidgetPrivate::~KMessageWidgetPrivate()
qDeleteAll(buttons); qDeleteAll(buttons);
buttons.clear(); buttons.clear();
delete buttonslayout; delete buttonslayout;
delete iconwidget;
delete textlabel;
delete closebutton;
delete messagelayout; delete messagelayout;
} }
@ -133,12 +139,37 @@ void KMessageWidgetPrivate::updateColors()
textlabel->border = KColorScheme::shade(textlabel->bg, KColorScheme::DarkShade); textlabel->border = KColorScheme::shade(textlabel->bg, KColorScheme::DarkShade);
} }
void KMessageWidgetPrivate::updateLayout()
{
qDeleteAll(buttons);
buttons.clear();
delete buttonslayout;
buttonslayout = new QHBoxLayout();
mainlayout->addLayout(buttonslayout);
buttonslayout->addStretch();
foreach (QAction* action, messagewidget->actions()) {
QToolButton* button = new QToolButton(messagewidget);
button->setDefaultAction(action);
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
buttons.append(button);
buttonslayout->addWidget(button, 1, Qt::AlignCenter);
}
if (!textlabel->wordWrap()) {
messagelayout->removeWidget(closebutton);
buttonslayout->addWidget(closebutton, 1, Qt::AlignCenter);
} else {
buttonslayout->removeWidget(closebutton);
messagelayout->addWidget(closebutton);
}
buttonslayout->addStretch();
}
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// KMessageWidget // KMessageWidget
//--------------------------------------------------------------------- //---------------------------------------------------------------------
KMessageWidget::KMessageWidget(QWidget *parent) KMessageWidget::KMessageWidget(QWidget *parent)
: QWidget(parent), : QWidget(parent),
d(new KMessageWidgetPrivate()) d(new KMessageWidgetPrivate(this))
{ {
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
@ -161,9 +192,6 @@ KMessageWidget::KMessageWidget(QWidget *parent)
d->messagelayout->addWidget(d->textlabel); d->messagelayout->addWidget(d->textlabel);
d->mainlayout->addLayout(d->messagelayout); d->mainlayout->addLayout(d->messagelayout);
d->buttonslayout = new QHBoxLayout();
d->mainlayout->addLayout(d->buttonslayout);
// NOTE: the standard close action tooltip refers to document, this is not one // NOTE: the standard close action tooltip refers to document, this is not one
d->closebutton = new QToolButton(this); d->closebutton = new QToolButton(this);
d->closebutton->setText(i18n("&Close")); d->closebutton->setText(i18n("&Close"));
@ -171,11 +199,9 @@ KMessageWidget::KMessageWidget(QWidget *parent)
d->closebutton->setToolTip(i18n("Close message")); d->closebutton->setToolTip(i18n("Close message"));
d->closebutton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); d->closebutton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
connect(d->closebutton, SIGNAL(clicked()), this, SLOT(hide())); connect(d->closebutton, SIGNAL(clicked()), this, SLOT(hide()));
d->buttonslayout->addStretch();
d->buttonslayout->addWidget(d->closebutton, 1, Qt::AlignCenter);
d->buttonslayout->addStretch();
d->updateColors(); d->updateColors();
d->updateLayout();
} }
KMessageWidget::~KMessageWidget() KMessageWidget::~KMessageWidget()
@ -213,6 +239,7 @@ bool KMessageWidget::wordWrap() const
void KMessageWidget::setWordWrap(bool wordWrap) void KMessageWidget::setWordWrap(bool wordWrap)
{ {
d->textlabel->setWordWrap(wordWrap); d->textlabel->setWordWrap(wordWrap);
d->updateLayout();
} }
bool KMessageWidget::isCloseButtonVisible() const bool KMessageWidget::isCloseButtonVisible() const
@ -254,21 +281,7 @@ bool KMessageWidget::event(QEvent *event)
case QEvent::ActionChanged: case QEvent::ActionChanged:
case QEvent::ActionAdded: case QEvent::ActionAdded:
case QEvent::ActionRemoved: { case QEvent::ActionRemoved: {
qDeleteAll(d->buttons); d->updateLayout();
d->buttons.clear();
delete d->buttonslayout;
d->buttonslayout = new QHBoxLayout();
d->mainlayout->addLayout(d->buttonslayout);
d->buttonslayout->addStretch();
foreach (QAction* action, actions()) {
QToolButton* button = new QToolButton(this);
button->setDefaultAction(action);
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
d->buttons.append(button);
d->buttonslayout->addWidget(button, 1, Qt::AlignCenter);
}
d->buttonslayout->addWidget(d->closebutton, 1, Qt::AlignCenter);
d->buttonslayout->addStretch();
break; break;
} }
} }