2017-07-21 18:21:34 +02:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
|
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#include "QskIndexedLayoutBox.h"
|
2018-08-03 08:15:28 +02:00
|
|
|
#include "QskQuick.h"
|
2018-05-01 12:41:20 +02:00
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
class QskIndexedLayoutBox::PrivateData
|
|
|
|
{
|
2018-08-03 08:15:28 +02:00
|
|
|
public:
|
|
|
|
PrivateData()
|
|
|
|
: autoAddChildren( true )
|
2019-12-03 17:21:56 +01:00
|
|
|
, blockChildAddedRemoved( false )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
bool autoAddChildren : 1;
|
2019-12-03 17:21:56 +01:00
|
|
|
bool blockChildAddedRemoved : 1;
|
2017-07-21 18:21:34 +02:00
|
|
|
};
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
QskIndexedLayoutBox::QskIndexedLayoutBox( QQuickItem* parent )
|
2019-06-19 14:08:45 +02:00
|
|
|
: QskBox( false, parent )
|
2018-08-03 08:15:28 +02:00
|
|
|
, m_data( new PrivateData() )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
// classBegin/componentComplete -> setActive( false/true ) ?
|
|
|
|
}
|
|
|
|
|
|
|
|
QskIndexedLayoutBox::~QskIndexedLayoutBox()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void QskIndexedLayoutBox::setAutoAddChildren( bool on )
|
|
|
|
{
|
|
|
|
if ( on != m_data->autoAddChildren )
|
|
|
|
{
|
|
|
|
m_data->autoAddChildren = on;
|
|
|
|
Q_EMIT autoAddChildrenChanged();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool QskIndexedLayoutBox::autoAddChildren() const
|
|
|
|
{
|
|
|
|
return m_data->autoAddChildren;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QskIndexedLayoutBox::itemChange(
|
|
|
|
QQuickItem::ItemChange change, const QQuickItem::ItemChangeData& value )
|
|
|
|
{
|
2018-08-03 08:15:28 +02:00
|
|
|
switch ( change )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
case QQuickItem::ItemChildAddedChange:
|
|
|
|
{
|
2019-12-03 17:21:56 +01:00
|
|
|
if ( m_data->autoAddChildren && !m_data->blockChildAddedRemoved )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2018-01-19 10:07:05 +01:00
|
|
|
if ( !qskIsTransparentForPositioner( value.item ) )
|
2019-06-19 14:08:45 +02:00
|
|
|
autoAddItem( value.item );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case QQuickItem::ItemChildRemovedChange:
|
|
|
|
{
|
2019-12-03 17:21:56 +01:00
|
|
|
if ( !m_data->blockChildAddedRemoved )
|
|
|
|
autoRemoveItem( value.item );
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
break;
|
|
|
|
}
|
2019-06-19 14:08:45 +02:00
|
|
|
#if 1
|
|
|
|
case QQuickItem::ItemSceneChange:
|
|
|
|
{
|
|
|
|
// when changing the window we should run into polish anyway
|
|
|
|
if ( value.window )
|
|
|
|
polish();
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
default:
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-24 07:59:28 +01:00
|
|
|
Inherited::itemChange( change, value );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2019-06-19 14:08:45 +02:00
|
|
|
void QskIndexedLayoutBox::reparentItem( QQuickItem* item )
|
|
|
|
{
|
|
|
|
if ( item->parent() == nullptr )
|
|
|
|
item->setParent( this );
|
|
|
|
|
|
|
|
if ( item->parentItem() != this )
|
|
|
|
{
|
2019-12-03 17:21:56 +01:00
|
|
|
m_data->blockChildAddedRemoved = true;
|
2019-06-19 14:08:45 +02:00
|
|
|
item->setParentItem( this );
|
2019-12-03 17:21:56 +01:00
|
|
|
m_data->blockChildAddedRemoved = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void QskIndexedLayoutBox::unparentItem( QQuickItem* item )
|
|
|
|
{
|
|
|
|
if ( item->parentItem() == this )
|
|
|
|
{
|
|
|
|
m_data->blockChildAddedRemoved = true;
|
|
|
|
item->setParentItem( nullptr );
|
|
|
|
m_data->blockChildAddedRemoved = false;
|
2019-06-19 14:08:45 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
#include "moc_QskIndexedLayoutBox.cpp"
|