diff --git a/src/kpagedialog_p.h b/src/kpagedialog_p.h --- a/src/kpagedialog_p.h +++ b/src/kpagedialog_p.h @@ -23,6 +23,7 @@ #include "kpagedialog.h" #include #include +#include class KPageDialogPrivate { @@ -64,7 +65,11 @@ if (mButtonBox) { q->connect(mButtonBox, &QDialogButtonBox::accepted, q, &QDialog::accept); q->connect(mButtonBox, &QDialogButtonBox::rejected, q, &QDialog::reject); - layout->addWidget(mButtonBox); + if (mPageWidget) { + mPageWidget->setPageFooter(mButtonBox); + } else { + layout->addWidget(mButtonBox); + } } } }; diff --git a/src/kpageview.h b/src/kpageview.h --- a/src/kpageview.h +++ b/src/kpageview.h @@ -159,6 +159,31 @@ */ void setDefaultWidget(QWidget *widget); + /** + * Set a widget as the header for this Page view + * It will replace the standard page title + * @since 5.60 + */ + void setPageHeader(QWidget *header); + + /** + * Widget of the header for this page view + * @since 5.60 + */ + QWidget *pageHeader() const; + + /** + * Set a widget as the footer for this Page view + * @since 5.60 + */ + void setPageFooter(QWidget *footer); + + /** + * Widget of the footer for this page view + * @since 5.60 + */ + QWidget *pageFooter() const; + Q_SIGNALS: /** * This signal is emitted whenever the current page changes. diff --git a/src/kpageview.cpp b/src/kpageview.cpp --- a/src/kpageview.cpp +++ b/src/kpageview.cpp @@ -78,7 +78,12 @@ stack->setVisible(true); } - titleWidget->setVisible(q->showPageHeader()); + if (pageHeader) { + pageHeader->setVisible(q->showPageHeader()); + titleWidget->setVisible(false); + } else { + titleWidget->setVisible(q->showPageHeader()); + } Qt::Alignment alignment = q->viewPosition(); if (alignment & Qt::AlignTop) { @@ -88,7 +93,7 @@ } else if (alignment & Qt::AlignBottom) { layout->addWidget(view, 4, 1); } else if (alignment & Qt::AlignLeft) { - layout->addWidget(view, 1, 0, 2, 1); + layout->addWidget(view, 1, 0, 3, 1); } } @@ -303,6 +308,7 @@ { Q_Q(KPageView); layout = new QGridLayout(q); + layout->setContentsMargins(0, 0, 0, 0); stack = new KPageStackedWidget(q); titleWidget = new KTitleWidget(q); QPixmap emptyPixmap(22, 22); @@ -442,6 +448,64 @@ } } +void KPageView::setPageHeader(QWidget *header) +{ + Q_D(KPageView); + if (d->pageHeader == header) { + return; + } + + if (d->pageHeader == header) { + return; + } + + if (d->pageHeader) { + d->layout->removeWidget(d->pageHeader); + } + d->layout->removeWidget(d->titleWidget); + + d->pageHeader = header; + + if (d->pageHeader) { + d->layout->addWidget(d->pageHeader, 1, 1); + d->pageHeader->setVisible(showPageHeader()); + } else { + d->layout->addWidget(d->titleWidget, 1, 1); + d->titleWidget->setVisible(showPageHeader()); + } + +} + +QWidget *KPageView::pageHeader() const +{ + Q_D(const KPageView); + return d->pageHeader; +} + +void KPageView::setPageFooter(QWidget *footer) +{ + Q_D(KPageView); + if (d->pageFooter == footer) { + return; + } + + if (d->pageFooter) { + d->layout->removeWidget(d->pageFooter); + } + + d->pageFooter = footer; + + if (footer) { + d->layout->addWidget(d->pageFooter, 3, 1); + } +} + +QWidget *KPageView::pageFooter() const +{ + Q_D(const KPageView); + return d->pageFooter; +} + QAbstractItemView *KPageView::createView() { Q_D(KPageView); @@ -482,7 +546,7 @@ if (faceType == Tabbed) { return false; } else { - return !d->titleWidget->text().isEmpty(); + return d->pageHeader || !d->titleWidget->text().isEmpty(); } } diff --git a/src/kpageview_p.h b/src/kpageview_p.h --- a/src/kpageview_p.h +++ b/src/kpageview_p.h @@ -33,6 +33,7 @@ #include #include #include +#include class KPageStackedWidget : public QStackedWidget { @@ -77,6 +78,9 @@ QAbstractItemView *view; + QPointer pageHeader; + QPointer pageFooter; + void updateTitleWidget(const QModelIndex &index); void updateSelection();