Merge branch '3.1.x-stable'

This commit is contained in:
Adriaan de Groot 2017-11-24 09:28:35 -05:00
commit 3ae65d5771
4 changed files with 86 additions and 20 deletions

View File

@ -188,7 +188,7 @@ set( CALAMARES_TRANSLATION_LANGUAGES ar ast bg ca cs_CZ da de el en en_GB es_MX
### Bump version here ### Bump version here
set( CALAMARES_VERSION_MAJOR 3 ) set( CALAMARES_VERSION_MAJOR 3 )
set( CALAMARES_VERSION_MINOR 1 ) set( CALAMARES_VERSION_MINOR 1 )
set( CALAMARES_VERSION_PATCH 8 ) set( CALAMARES_VERSION_PATCH 9 )
set( CALAMARES_VERSION_RC 1 ) set( CALAMARES_VERSION_RC 1 )
set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} ) set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} )

View File

@ -163,7 +163,8 @@ PackageModel::getPackages() const
{ {
QList<PackageTreeItem*> items = getItemPackages( m_rootItem ); QList<PackageTreeItem*> items = getItemPackages( m_rootItem );
for ( auto package : m_hiddenItems ) for ( auto package : m_hiddenItems )
items.append( getItemPackages( package ) ); if ( package->hiddenSelected() )
items.append( getItemPackages( package ) );
QList<PackageTreeItem::ItemData> packages; QList<PackageTreeItem::ItemData> packages;
for ( auto item : items ) for ( auto item : items )
{ {

View File

@ -19,6 +19,8 @@
#include "PackageTreeItem.h" #include "PackageTreeItem.h"
#include "utils/Logger.h"
PackageTreeItem::PackageTreeItem( const ItemData& data, PackageTreeItem* parent ) PackageTreeItem::PackageTreeItem( const ItemData& data, PackageTreeItem* parent )
: m_parentItem( parent ) : m_parentItem( parent )
, m_data( data ) , m_data( data )
@ -36,7 +38,15 @@ PackageTreeItem::PackageTreeItem( const QString packageName, PackageTreeItem* pa
PackageTreeItem::PackageTreeItem( PackageTreeItem* parent ) : PackageTreeItem::PackageTreeItem( PackageTreeItem* parent ) :
m_parentItem( parent ) m_parentItem( parent )
{ } {
}
PackageTreeItem::PackageTreeItem::PackageTreeItem() :
PackageTreeItem( QString(), nullptr )
{
m_data.selected = Qt::Checked;
m_data.name = QLatin1Literal( "<root>" );
}
PackageTreeItem::~PackageTreeItem() PackageTreeItem::~PackageTreeItem()
{ {
@ -101,6 +111,13 @@ PackageTreeItem::parentItem()
return m_parentItem; return m_parentItem;
} }
const PackageTreeItem*
PackageTreeItem::parentItem() const
{
return m_parentItem;
}
QString QString
PackageTreeItem::prettyName() const PackageTreeItem::prettyName() const
{ {
@ -143,6 +160,26 @@ PackageTreeItem::setHidden( bool isHidden )
m_data.isHidden = isHidden; m_data.isHidden = isHidden;
} }
bool
PackageTreeItem::hiddenSelected() const
{
Q_ASSERT( m_data.isHidden );
if (! m_data.selected )
return false;
const PackageTreeItem* currentItem = parentItem();
while ( currentItem != nullptr )
{
if ( !currentItem->isHidden() )
return currentItem->isSelected() != Qt::Unchecked;
currentItem = currentItem->parentItem();
}
/* Has no non-hiddent parents */
return m_data.selected;
}
bool bool
PackageTreeItem::isCritical() const PackageTreeItem::isCritical() const
{ {
@ -164,34 +201,47 @@ PackageTreeItem::isSelected() const
void void
PackageTreeItem::setSelected( Qt::CheckState isSelected ) PackageTreeItem::setSelected( Qt::CheckState isSelected )
{ {
if ( parentItem() == nullptr )
// This is the root, it is always checked so don't change state
return;
m_data.selected = isSelected; m_data.selected = isSelected;
setChildrenSelected( isSelected ); setChildrenSelected( isSelected );
// Look for suitable parent item which may change checked-state
// when one of its children changes.
PackageTreeItem* currentItem = parentItem(); PackageTreeItem* currentItem = parentItem();
while ( currentItem != nullptr ) while ( ( currentItem != nullptr ) && ( currentItem->childCount() == 0 ) )
{ {
int childrenSelected = 0;
bool isChildPartiallySelected = false;
for ( int i = 0; i < currentItem->childCount(); i++ )
{
if ( currentItem->child( i )->isSelected() == Qt::Checked )
childrenSelected++;
if ( currentItem->child( i )->isSelected() == Qt::PartiallyChecked )
isChildPartiallySelected = true;
}
if ( !childrenSelected && !isChildPartiallySelected )
currentItem->m_data.selected = Qt::Unchecked;
else if ( childrenSelected == currentItem->childCount() )
currentItem->m_data.selected = Qt::Checked;
else
currentItem->m_data.selected = Qt::PartiallyChecked;
currentItem = currentItem->parentItem(); currentItem = currentItem->parentItem();
} }
if ( currentItem == nullptr )
// Reached the root .. don't bother
return;
// Figure out checked-state based on the children
int childrenSelected = 0;
int childrenPartiallySelected = 0;
for ( int i = 0; i < currentItem->childCount(); i++ )
{
if ( currentItem->child( i )->isSelected() == Qt::Checked )
childrenSelected++;
if ( currentItem->child( i )->isSelected() == Qt::PartiallyChecked )
childrenPartiallySelected++;
}
if ( !childrenSelected && !childrenPartiallySelected)
currentItem->setSelected( Qt::Unchecked );
else if ( childrenSelected == currentItem->childCount() )
currentItem->setSelected( Qt::Checked );
else
currentItem->setSelected( Qt::PartiallyChecked );
} }
void void
PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected ) PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected )
{ {
if ( isSelected != Qt::PartiallyChecked ) if ( isSelected != Qt::PartiallyChecked )
// Children are never root; don't need to use setSelected on them.
for ( auto child : m_childItems ) for ( auto child : m_childItems )
{ {
child->m_data.selected = isSelected; child->m_data.selected = isSelected;

View File

@ -40,7 +40,8 @@ public:
}; };
explicit PackageTreeItem( const ItemData& data, PackageTreeItem* parent = nullptr ); explicit PackageTreeItem( const ItemData& data, PackageTreeItem* parent = nullptr );
explicit PackageTreeItem( const QString packageName, PackageTreeItem* parent = nullptr ); explicit PackageTreeItem( const QString packageName, PackageTreeItem* parent = nullptr );
explicit PackageTreeItem( PackageTreeItem* parent = nullptr ); explicit PackageTreeItem( PackageTreeItem* parent );
explicit PackageTreeItem(); // The root of the tree; always selected, named <root>
~PackageTreeItem() override; ~PackageTreeItem() override;
void appendChild( PackageTreeItem* child ); void appendChild( PackageTreeItem* child );
@ -49,16 +50,30 @@ public:
int columnCount() const; int columnCount() const;
QVariant data( int column ) const override; QVariant data( int column ) const override;
int row() const; int row() const;
PackageTreeItem* parentItem(); PackageTreeItem* parentItem();
const PackageTreeItem* parentItem() const;
QString prettyName() const; QString prettyName() const;
QString description() const; QString description() const;
QString preScript() const; QString preScript() const;
QString packageName() const; QString packageName() const;
QString postScript() const; QString postScript() const;
bool isHidden() const; bool isHidden() const;
void setHidden( bool isHidden ); void setHidden( bool isHidden );
/**
* @brief Is this hidden item, considered "selected"?
*
* This asserts when called on a non-hidden item.
* A hidden item has its own selected state, but really
* falls under the selectedness of the parent item.
*/
bool hiddenSelected() const;
bool isCritical() const; bool isCritical() const;
void setCritical( bool isCritical ); void setCritical( bool isCritical );
Qt::CheckState isSelected() const; Qt::CheckState isSelected() const;
void setSelected( Qt::CheckState isSelected ); void setSelected( Qt::CheckState isSelected );
void setChildrenSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected );