[RFC PATCH] Use QDialogButtonBox in KMessageWidget

Tomaz Canabrava tcanabrava at kde.org
Wed Jul 2 14:32:45 PDT 2014


On Wed, Jul 2, 2014 at 5:59 PM, Anton Lundin <glance at acc.umu.se> wrote:
> QDialogButtonBox can auto-choose the order of the actions based on the
> current interfaces guidelines, but in this case its a guessing game.
>
> It does a half-decent job off guessing.
> ---
>  qt-ui/kmessagewidget.cpp | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/qt-ui/kmessagewidget.cpp b/qt-ui/kmessagewidget.cpp
> index 2f9ac68..e03d10c 100644
> --- a/qt-ui/kmessagewidget.cpp
> +++ b/qt-ui/kmessagewidget.cpp
> @@ -21,7 +21,7 @@
>
>  #include <QEvent>
>  #include <QGridLayout>
> -#include <QHBoxLayout>
> +#include <QDialogButtonBox>
>  #include <QLabel>
>  #include <QPainter>
>  #include <QShowEvent>
> @@ -92,27 +92,32 @@ void KMessageWidgetPrivate::createLayout()
>                 layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
>                 layout->addWidget(textLabel, 0, 1);
>
> -               QHBoxLayout *buttonLayout = new QHBoxLayout;
> -               buttonLayout->addStretch();
> +               QDialogButtonBox *buttonLayout = new QDialogButtonBox();
> +               //buttonLayout->addStretch();
>                 Q_FOREACH (QToolButton *button, buttons) {
>                         // For some reason, calling show() is necessary if wordwrap is true,
>                         // otherwise the buttons do not show up. It is not needed if
>                         // wordwrap is false.
>                         button->show();
> -                       buttonLayout->addWidget(button);
> +                       buttonLayout->addButton(button, QDialogButtonBox::QDialogButtonBox::AcceptRole);
>                 }
> -               buttonLayout->addWidget(closeButton);
> -               layout->addItem(buttonLayout, 1, 0, 1, 2);
> +               buttonLayout->addButton(closeButton, QDialogButtonBox::RejectRole);
> +               layout->addWidget(buttonLayout, 1, 0, 1, 2, Qt::AlignHCenter | Qt::AlignTop);
>         } else {
> +               bool closeButtonVisible = closeButton->isVisible();
>                 QHBoxLayout *layout = new QHBoxLayout(content);
>                 layout->addWidget(iconLabel);
>                 layout->addWidget(textLabel);
>
> +               QDialogButtonBox *buttonLayout = new QDialogButtonBox();
>                 Q_FOREACH (QToolButton *button, buttons) {
> -                       layout->addWidget(button);
> +                       buttonLayout->addButton(button, QDialogButtonBox::QDialogButtonBox::AcceptRole);
>                 }
>
> -               layout->addWidget(closeButton);
> +               buttonLayout->addButton(closeButton, QDialogButtonBox::RejectRole);
> +               // Something gets changed when added to the buttonLayout
> +               closeButton->setVisible(closeButtonVisible);
> +               layout->addWidget(buttonLayout);
>         };
>
>         if (q->isVisible()) {
> --
> 1.9.1
>
> _______________________________________________
> subsurface mailing list
> subsurface at hohndel.org
> http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Ack
And this probably should be upstreamed to KDE. :)


More information about the subsurface mailing list