[netinstall] Hidden groups follow selectedness of parents.

If a subgroup is hidden, then it should be considered
selected if its parent is selected or partially-selected.
If the parent group is totally unselected, then the hidden
subgroup shouldn't be installed either. This allows putting
required-packages into a group, without cluttering the
interface.

FIXES #864
main
Adriaan de Groot 7 years ago
parent 71e80f680e
commit aa0fa37492

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

@ -101,6 +101,13 @@ PackageTreeItem::parentItem()
return m_parentItem;
}
const PackageTreeItem*
PackageTreeItem::parentItem() const
{
return m_parentItem;
}
QString
PackageTreeItem::prettyName() const
{
@ -143,6 +150,26 @@ PackageTreeItem::setHidden( bool 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
PackageTreeItem::isCritical() const
{

@ -49,16 +49,30 @@ public:
int columnCount() const;
QVariant data( int column ) const override;
int row() const;
PackageTreeItem* parentItem();
const PackageTreeItem* parentItem() const;
QString prettyName() const;
QString description() const;
QString preScript() const;
QString packageName() const;
QString postScript() const;
bool isHidden() const;
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;
void setCritical( bool isCritical );
Qt::CheckState isSelected() const;
void setSelected( Qt::CheckState isSelected );
void setChildrenSelected( Qt::CheckState isSelected );

Loading…
Cancel
Save