File indexing completed on 2024-04-28 03:59:10

0001 /*
0002     This file is part of the KDE Libraries
0003     SPDX-FileCopyrightText: 2006 Tobias Koenig <tokoe@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "kpagewidget.h"
0009 #include "kpagewidget_p.h"
0010 
0011 #include "kpagewidgetmodel.h"
0012 
0013 KPageWidgetPrivate::KPageWidgetPrivate(KPageWidget *qq)
0014     : KPageViewPrivate(qq)
0015 {
0016 }
0017 
0018 void KPageWidgetPrivate::slotCurrentPageChanged(const QModelIndex &current, const QModelIndex &before)
0019 {
0020     KPageWidgetItem *currentItem = nullptr;
0021     if (current.isValid()) {
0022         currentItem = model()->item(current);
0023     }
0024 
0025     KPageWidgetItem *beforeItem = nullptr;
0026     if (before.isValid()) {
0027         beforeItem = model()->item(before);
0028     }
0029 
0030     Q_Q(KPageWidget);
0031     Q_EMIT q->currentPageChanged(currentItem, beforeItem);
0032 }
0033 
0034 KPageWidget::KPageWidget(KPageWidgetPrivate &dd, QWidget *parent)
0035     : KPageView(dd, parent)
0036 {
0037     Q_D(KPageWidget);
0038     connect(this, &KPageView::currentPageChanged, this, [d](const QModelIndex &current, const QModelIndex &before) {
0039         d->slotCurrentPageChanged(current, before);
0040     });
0041 
0042     if (!d->KPageViewPrivate::model) {
0043         setModel(new KPageWidgetModel(this));
0044     } else {
0045         Q_ASSERT(qobject_cast<KPageWidgetModel *>(d->KPageViewPrivate::model));
0046     }
0047 
0048     connect(d->model(), &KPageWidgetModel::toggled, this, &KPageWidget::pageToggled);
0049 }
0050 
0051 KPageWidget::KPageWidget(QWidget *parent)
0052     : KPageWidget(*new KPageWidgetPrivate(this), parent)
0053 {
0054 }
0055 
0056 KPageWidget::~KPageWidget()
0057 {
0058 }
0059 
0060 KPageWidgetItem *KPageWidget::addPage(QWidget *widget, const QString &name)
0061 {
0062     Q_D(KPageWidget);
0063 
0064     return d->model()->addPage(widget, name);
0065 }
0066 
0067 void KPageWidget::addPage(KPageWidgetItem *item)
0068 {
0069     Q_D(KPageWidget);
0070 
0071     d->model()->addPage(item);
0072 }
0073 
0074 KPageWidgetItem *KPageWidget::insertPage(KPageWidgetItem *before, QWidget *widget, const QString &name)
0075 {
0076     Q_D(KPageWidget);
0077 
0078     return d->model()->insertPage(before, widget, name);
0079 }
0080 
0081 void KPageWidget::insertPage(KPageWidgetItem *before, KPageWidgetItem *item)
0082 {
0083     Q_D(KPageWidget);
0084 
0085     d->model()->insertPage(before, item);
0086 }
0087 
0088 KPageWidgetItem *KPageWidget::addSubPage(KPageWidgetItem *parent, QWidget *widget, const QString &name)
0089 {
0090     Q_D(KPageWidget);
0091 
0092     return d->model()->addSubPage(parent, widget, name);
0093 }
0094 
0095 void KPageWidget::addSubPage(KPageWidgetItem *parent, KPageWidgetItem *item)
0096 {
0097     Q_D(KPageWidget);
0098 
0099     d->model()->addSubPage(parent, item);
0100 }
0101 
0102 void KPageWidget::removePage(KPageWidgetItem *item)
0103 {
0104     Q_D(KPageWidget);
0105 
0106     Q_EMIT pageRemoved(item); // Q_EMIT signal before we remove it, because the item will be deleted in the model
0107     d->model()->removePage(item);
0108 }
0109 
0110 void KPageWidget::setCurrentPage(KPageWidgetItem *item)
0111 {
0112     Q_D(KPageWidget);
0113 
0114     const QModelIndex index = d->model()->index(item);
0115     if (!index.isValid()) {
0116         return;
0117     }
0118 
0119     KPageView::setCurrentPage(index);
0120 }
0121 
0122 KPageWidgetItem *KPageWidget::currentPage() const
0123 {
0124     Q_D(const KPageWidget);
0125 
0126     const QModelIndex index = KPageView::currentPage();
0127 
0128     if (!index.isValid()) {
0129         return nullptr;
0130     }
0131 
0132     return d->model()->item(index);
0133 }
0134 
0135 #include "moc_kpagewidget.cpp"