[netinstall] Refactor: kill ItemData

- This doesn't compile right now.
- The nested class ItemData doesn't do anything useful or
  meaningful that having model items with the right data wouldn't.
main
Adriaan de Groot 5 years ago
parent 8825c9c995
commit c66ef5a201

@ -21,55 +21,26 @@
#include "utils/Logger.h"
QVariant
PackageTreeItem::ItemData::toOperation() const
{
// If it's a package with a pre- or post-script, replace
// with the more complicated datastructure.
if ( !preScript.isEmpty() || !postScript.isEmpty() )
{
QMap< QString, QVariant > sdetails;
sdetails.insert( "pre-script", preScript );
sdetails.insert( "package", packageName );
sdetails.insert( "post-script", postScript );
return sdetails;
}
else
{
return packageName;
}
}
PackageTreeItem::PackageTreeItem( const ItemData& data, PackageTreeItem* parent )
: m_parentItem( parent )
, m_data( data )
{
}
PackageTreeItem::PackageTreeItem( const QString packageName, PackageTreeItem* parent )
PackageTreeItem::PackageTreeItem( const QString& packageName, PackageTreeItem* parent )
: m_parentItem( parent )
{
m_data.packageName = packageName;
m_packageName = packageName;
if ( parent != nullptr )
{
m_data.selected = parent->isSelected();
// Avoid partially-checked .. a package can't be partial
m_selected = parent->isSelected() == Qt::Unchecked ? Qt::Unchecked : Qt::Checked;
}
else
{
m_data.selected = Qt::Unchecked;
m_selected = Qt::Unchecked;
}
}
PackageTreeItem::PackageTreeItem( PackageTreeItem* parent )
: m_parentItem( parent )
{
}
PackageTreeItem::PackageTreeItem::PackageTreeItem()
: PackageTreeItem( QString(), nullptr )
{
m_data.selected = Qt::Checked;
m_data.name = QLatin1String( "<root>" );
m_selected = Qt::Checked;
m_name = QLatin1String( "<root>" );
}
PackageTreeItem::~PackageTreeItem()
@ -123,7 +94,7 @@ PackageTreeItem::data( int column ) const
switch ( column ) // group
{
case 0:
return QVariant( prettyName() );
return QVariant( name() );
case 1:
return QVariant( description() );
default:
@ -145,47 +116,15 @@ PackageTreeItem::parentItem() const
}
QString
PackageTreeItem::prettyName() const
{
return m_data.name;
}
QString
PackageTreeItem::description() const
{
return m_data.description;
}
QString
PackageTreeItem::preScript() const
{
return m_data.preScript;
}
QString
PackageTreeItem::packageName() const
{
return m_data.packageName;
}
QString
PackageTreeItem::postScript() const
{
return m_data.postScript;
}
bool
PackageTreeItem::isHidden() const
{
return m_data.isHidden;
}
bool
PackageTreeItem::hiddenSelected() const
{
Q_ASSERT( m_data.isHidden );
if ( !m_data.selected )
if ( !m_isHidden )
{
return m_selected;
}
if ( !m_selected )
{
return false;
}
@ -201,32 +140,20 @@ PackageTreeItem::hiddenSelected() const
}
/* Has no non-hiddent parents */
return m_data.selected;
return m_selected;
}
bool
PackageTreeItem::isCritical() const
{
return m_data.isCritical;
}
Qt::CheckState
PackageTreeItem::isSelected() const
{
return m_data.selected;
}
void
PackageTreeItem::setSelected( Qt::CheckState isSelected )
{
if ( parentItem() == nullptr )
// This is the root, it is always checked so don't change state
{
// This is the root, it is always checked so don't change state
return;
}
m_data.selected = isSelected;
m_selected = isSelected;
setChildrenSelected( isSelected );
// Look for suitable parent item which may change checked-state
@ -277,7 +204,7 @@ PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected )
// Children are never root; don't need to use setSelected on them.
for ( auto child : m_childItems )
{
child->m_data.selected = isSelected;
child->m_selected = isSelected;
child->setChildrenSelected( isSelected );
}
}
@ -287,3 +214,22 @@ PackageTreeItem::type() const
{
return QStandardItem::UserType;
}
QVariant
PackageTreeItem::toOperation() const
{
// If it's a package with a pre- or post-script, replace
// with the more complicated datastructure.
if ( !m_preScript.isEmpty() || !m_postScript.isEmpty() )
{
QMap< QString, QVariant > sdetails;
sdetails.insert( "pre-script", m_preScript );
sdetails.insert( "package", m_packageName );
sdetails.insert( "post-script", m_postScript );
return sdetails;
}
else
{
return m_packageName;
}
}

@ -27,29 +27,12 @@
class PackageTreeItem : public QStandardItem
{
public:
struct ItemData
{
QString name;
QString description;
QString preScript;
QString packageName;
QString postScript;
bool isCritical = false;
bool isHidden = false;
bool startExpanded = false; // Only for groups
Qt::CheckState selected = Qt::Unchecked;
/** @brief Turns this item into a variant for PackageOperations use
*
* For "plain" items, this is just the package name; items with
* scripts return a map. See the package module for how it's interpreted.
*/
QVariant toOperation() const;
};
explicit PackageTreeItem( const ItemData& data, PackageTreeItem* parent = nullptr );
explicit PackageTreeItem( const QString packageName, PackageTreeItem* parent = nullptr );
explicit PackageTreeItem( PackageTreeItem* parent );
explicit PackageTreeItem(); // The root of the tree; always selected, named <root>
using PackageList = QList< PackageTreeItem* >;
///@brief A package (individual package)
explicit PackageTreeItem( const QString& packageName, PackageTreeItem* parent = nullptr );
///@brief A root item, always selected, named "<root>"
explicit PackageTreeItem();
~PackageTreeItem() override;
void appendChild( PackageTreeItem* child );
@ -61,18 +44,19 @@ public:
PackageTreeItem* parentItem();
const PackageTreeItem* parentItem() const;
QString prettyName() const;
QString description() const;
QString preScript() const;
QString packageName() const;
QString postScript() const;
QString name() const { return m_name; }
QString packageName() const { return m_packageName; }
QString description() const { return m_description; }
QString preScript() const { return m_preScript; }
QString postScript() const { return m_postScript; }
/** @brief Is this item hidden?
*
* Hidden items (generally only groups) are maintained separately,
* not shown to the user, but do enter into the package-installation process.
*/
bool isHidden() const;
bool isHidden() const { return m_isHidden; }
/** @brief Is this hidden item, considered "selected"?
*
@ -87,7 +71,7 @@ public:
* A critical group must be successfully installed, for the Calamares
* installation to continue.
*/
bool isCritical() const;
bool isCritical() const { return m_isCritical; }
/** @brief Is this group expanded on start?
*
@ -95,17 +79,38 @@ public:
* that expands on start is shown expanded (not collapsed)
* in the treeview when the page is loaded.
*/
bool expandOnStart() const { return m_data.startExpanded; }
bool expandOnStart() const { return m_startExpanded; }
/** @brief Turns this item into a variant for PackageOperations use
*
* For "plain" items, this is just the package name; items with
* scripts return a map. See the package module for how it's interpreted.
*/
QVariant toOperation() const;
Qt::CheckState isSelected() const;
void setSelected( Qt::CheckState isSelected );
void setChildrenSelected( Qt::CheckState isSelected );
// QStandardItem methods
int type() const override;
private:
PackageTreeItem* m_parentItem;
QList< PackageTreeItem* > m_childItems;
ItemData m_data;
PackageList m_childItems;
// An entry can be a packkage, or a group.
QString m_name;
QString m_packageName;
Qt::CheckState m_selected = Qt::Unchecked;
// These are only useful for groups
QString m_description;
QString m_preScript;
QString m_postScript;
bool m_isCritical = false;
bool m_isHidden = false;
bool m_startExpanded = false;
};
#endif // PACKAGETREEITEM_H

Loading…
Cancel
Save