File indexing completed on 2025-02-02 14:20:07
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 ¤t, 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 ¤t, 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"