finding the corresponding tabBar fixed

This commit is contained in:
Uwe Rathmann 2019-04-18 16:16:44 +02:00
parent bbc3c6bc62
commit 89f1148a7b
2 changed files with 19 additions and 38 deletions

View File

@ -7,6 +7,7 @@
#include "QskSkinlet.h"
#include "QskTabBar.h"
#include "QskTextOptions.h"
#include "QskQuick.h"
#include <qfontmetrics.h>
#include <qpointer.h>
@ -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"

View File

@ -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;
};