aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates/qquicktabbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/templates/qquicktabbar.cpp')
-rw-r--r--src/templates/qquicktabbar.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/templates/qquicktabbar.cpp b/src/templates/qquicktabbar.cpp
index 1c8cc435..a2fc1e11 100644
--- a/src/templates/qquicktabbar.cpp
+++ b/src/templates/qquicktabbar.cpp
@@ -35,6 +35,7 @@
****************************************************************************/
#include "qquicktabbar_p.h"
+#include "qquicktabbutton_p.h"
#include "qquickcontainer_p_p.h"
QT_BEGIN_NAMESPACE
@@ -66,13 +67,26 @@ class QQuickTabBarPrivate : public QQuickContainerPrivate
Q_DECLARE_PUBLIC(QQuickTabBar)
public:
- QQuickTabBarPrivate()
- {
- }
-
+ void updateCurrentItem();
+ void updateCurrentIndex();
void updateLayout();
};
+void QQuickTabBarPrivate::updateCurrentItem()
+{
+ QQuickTabButton *button = qobject_cast<QQuickTabButton *>(contentModel->get(currentIndex));
+ if (button)
+ button->setChecked(true);
+}
+
+void QQuickTabBarPrivate::updateCurrentIndex()
+{
+ Q_Q(QQuickTabBar);
+ QQuickTabButton *button = qobject_cast<QQuickTabButton *>(q->sender());
+ if (button && button->isChecked())
+ q->setCurrentIndex(contentModel->indexOf(button, Q_NULLPTR));
+}
+
void QQuickTabBarPrivate::updateLayout()
{
Q_Q(QQuickTabBar);
@@ -96,8 +110,9 @@ void QQuickTabBarPrivate::updateLayout()
QQuickTabBar::QQuickTabBar(QQuickItem *parent) :
QQuickContainer(*(new QQuickTabBarPrivate), parent)
{
- setExclusive(true);
+ Q_D(QQuickTabBar);
setFlag(ItemIsFocusScope);
+ QObjectPrivate::connect(this, &QQuickTabBar::currentIndexChanged, d, &QQuickTabBarPrivate::updateCurrentItem);
}
void QQuickTabBar::updatePolish()
@@ -111,6 +126,7 @@ void QQuickTabBar::componentComplete()
{
Q_D(QQuickTabBar);
QQuickContainer::componentComplete();
+ d->updateCurrentItem();
d->updateLayout();
}
@@ -121,18 +137,27 @@ void QQuickTabBar::geometryChanged(const QRectF &newGeometry, const QRectF &oldG
d->updateLayout();
}
+bool QQuickTabBar::isContent(QQuickItem *item) const
+{
+ return qobject_cast<QQuickTabButton *>(item);
+}
+
void QQuickTabBar::itemAdded(int index, QQuickItem *item)
{
+ Q_D(QQuickTabBar);
Q_UNUSED(index);
- Q_UNUSED(item);
+ if (QQuickTabButton *button = qobject_cast<QQuickTabButton *>(item))
+ QObjectPrivate::connect(button, &QQuickTabButton::checkedChanged, d, &QQuickTabBarPrivate::updateCurrentIndex);
if (isComponentComplete())
polish();
}
void QQuickTabBar::itemRemoved(int index, QQuickItem *item)
{
+ Q_D(QQuickTabBar);
Q_UNUSED(index);
- Q_UNUSED(item);
+ if (QQuickTabButton *button = qobject_cast<QQuickTabButton *>(item))
+ QObjectPrivate::disconnect(button, &QQuickTabButton::checkedChanged, d, &QQuickTabBarPrivate::updateCurrentIndex);
if (isComponentComplete())
polish();
}