From 89f1148a7bb8c9668d1909813817aea3a9a1e740 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 18 Apr 2019 16:16:44 +0200 Subject: [PATCH] finding the corresponding tabBar fixed --- src/controls/QskTabButton.cpp | 51 +++++++++++------------------------ src/controls/QskTabButton.h | 6 ++--- 2 files changed, 19 insertions(+), 38 deletions(-) diff --git a/src/controls/QskTabButton.cpp b/src/controls/QskTabButton.cpp index 64023ac3..2aa7eb3c 100644 --- a/src/controls/QskTabButton.cpp +++ b/src/controls/QskTabButton.cpp @@ -7,6 +7,7 @@ #include "QskSkinlet.h" #include "QskTabBar.h" #include "QskTextOptions.h" +#include "QskQuick.h" #include #include @@ -14,6 +15,11 @@ QSK_SUBCONTROL( QskTabButton, Panel ) QSK_SUBCONTROL( QskTabButton, Text ) +static inline QskTabBar* qskFindTabBar( QskTabButton* button ) +{ + return qskFindAncestorOf< QskTabBar* >( button->parentItem() ); +} + class QskTabButton::PrivateData { public: @@ -36,7 +42,8 @@ QskTabButton::QskTabButton( const QString& text, QQuickItem* parent ) : Inherited( parent ) , m_data( new PrivateData( text ) ) { - resolveTabBar(); + if ( parent ) + m_data->tabBar = qskFindTabBar( this ); initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); @@ -102,29 +109,17 @@ QRectF QskTabButton::layoutRect() const QskAspect::Placement QskTabButton::effectivePlacement() const { if ( m_data->tabBar ) - { - const auto pos = m_data->tabBar->position(); - - switch ( pos ) - { - case Qsk::Left: - return QskAspect::Left; - - case Qsk::Right: - return QskAspect::Right; - - case Qsk::Top: - return QskAspect::Top; - - case Qsk::Bottom: - return QskAspect::Bottom; - } - } + return m_data->tabBar->effectivePlacement(); return QskAspect::NoPlacement; } -QskTabBar* QskTabButton::tabBar() const +const QskTabBar* QskTabButton::tabBar() const +{ + return m_data->tabBar; +} + +QskTabBar* QskTabButton::tabBar() { return m_data->tabBar; } @@ -145,7 +140,7 @@ void QskTabButton::changeEvent( QEvent* event ) } case QEvent::ParentChange: { - resolveTabBar(); + m_data->tabBar = qskFindTabBar( this ); break; } default: @@ -155,18 +150,4 @@ void QskTabButton::changeEvent( QEvent* event ) Inherited::changeEvent( event ); } -void QskTabButton::resolveTabBar() -{ - auto p = parent(); - while ( p ) - { - if ( const auto tabBar = qobject_cast< QskTabBar* >( p ) ) - { - m_data->tabBar = tabBar; - break; - } - p = p->parent(); - } -} - #include "moc_QskTabButton.cpp" diff --git a/src/controls/QskTabButton.h b/src/controls/QskTabButton.h index f2f60fb4..1f3b1691 100644 --- a/src/controls/QskTabButton.h +++ b/src/controls/QskTabButton.h @@ -38,9 +38,11 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton QSizeF contentsSizeHint() const override; QRectF layoutRect() const override; + QskAspect::Placement effectivePlacement() const override; - QskTabBar* tabBar() const; + const QskTabBar* tabBar() const; + QskTabBar* tabBar(); Q_SIGNALS: void textChanged( const QString& text ); @@ -50,8 +52,6 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton void changeEvent( QEvent* ) override; private: - void resolveTabBar(); - class PrivateData; std::unique_ptr< PrivateData > m_data; };