[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" #include "utils/Logger.h"
QVariant PackageTreeItem::PackageTreeItem( const QString& packageName, PackageTreeItem* parent )
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 )
: m_parentItem( parent ) : m_parentItem( parent )
{ {
m_data.packageName = packageName; m_packageName = packageName;
if ( parent != nullptr ) 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 else
{ {
m_data.selected = Qt::Unchecked; m_selected = Qt::Unchecked;
} }
} }
PackageTreeItem::PackageTreeItem( PackageTreeItem* parent )
: m_parentItem( parent )
{
}
PackageTreeItem::PackageTreeItem::PackageTreeItem() PackageTreeItem::PackageTreeItem::PackageTreeItem()
: PackageTreeItem( QString(), nullptr ) : PackageTreeItem( QString(), nullptr )
{ {
m_data.selected = Qt::Checked; m_selected = Qt::Checked;
m_data.name = QLatin1String( "<root>" ); m_name = QLatin1String( "<root>" );
} }
PackageTreeItem::~PackageTreeItem() PackageTreeItem::~PackageTreeItem()
@ -123,7 +94,7 @@ PackageTreeItem::data( int column ) const
switch ( column ) // group switch ( column ) // group
{ {
case 0: case 0:
return QVariant( prettyName() ); return QVariant( name() );
case 1: case 1:
return QVariant( description() ); return QVariant( description() );
default: 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 bool
PackageTreeItem::hiddenSelected() const PackageTreeItem::hiddenSelected() const
{ {
Q_ASSERT( m_data.isHidden ); if ( !m_isHidden )
if ( !m_data.selected ) {
return m_selected;
}
if ( !m_selected )
{ {
return false; return false;
} }
@ -201,32 +140,20 @@ PackageTreeItem::hiddenSelected() const
} }
/* Has no non-hiddent parents */ /* 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 void
PackageTreeItem::setSelected( Qt::CheckState isSelected ) PackageTreeItem::setSelected( Qt::CheckState isSelected )
{ {
if ( parentItem() == nullptr ) 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; return;
} }
m_data.selected = isSelected; m_selected = isSelected;
setChildrenSelected( isSelected ); setChildrenSelected( isSelected );
// Look for suitable parent item which may change checked-state // 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. // 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_selected = isSelected;
child->setChildrenSelected( isSelected ); child->setChildrenSelected( isSelected );
} }
} }
@ -287,3 +214,22 @@ PackageTreeItem::type() const
{ {
return QStandardItem::UserType; 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 class PackageTreeItem : public QStandardItem
{ {
public: public:
struct ItemData using PackageList = QList< PackageTreeItem* >;
{
QString name; ///@brief A package (individual package)
QString description; explicit PackageTreeItem( const QString& packageName, PackageTreeItem* parent = nullptr );
QString preScript; ///@brief A root item, always selected, named "<root>"
QString packageName; explicit PackageTreeItem();
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>
~PackageTreeItem() override; ~PackageTreeItem() override;
void appendChild( PackageTreeItem* child ); void appendChild( PackageTreeItem* child );
@ -61,18 +44,19 @@ public:
PackageTreeItem* parentItem(); PackageTreeItem* parentItem();
const PackageTreeItem* parentItem() const; const PackageTreeItem* parentItem() const;
QString prettyName() const; QString name() const { return m_name; }
QString description() const; QString packageName() const { return m_packageName; }
QString preScript() const;
QString packageName() const; QString description() const { return m_description; }
QString postScript() const; QString preScript() const { return m_preScript; }
QString postScript() const { return m_postScript; }
/** @brief Is this item hidden? /** @brief Is this item hidden?
* *
* Hidden items (generally only groups) are maintained separately, * Hidden items (generally only groups) are maintained separately,
* not shown to the user, but do enter into the package-installation process. * 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"? /** @brief Is this hidden item, considered "selected"?
* *
@ -87,7 +71,7 @@ public:
* A critical group must be successfully installed, for the Calamares * A critical group must be successfully installed, for the Calamares
* installation to continue. * installation to continue.
*/ */
bool isCritical() const; bool isCritical() const { return m_isCritical; }
/** @brief Is this group expanded on start? /** @brief Is this group expanded on start?
* *
@ -95,17 +79,38 @@ public:
* that expands on start is shown expanded (not collapsed) * that expands on start is shown expanded (not collapsed)
* in the treeview when the page is loaded. * 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; Qt::CheckState isSelected() const;
void setSelected( Qt::CheckState isSelected ); void setSelected( Qt::CheckState isSelected );
void setChildrenSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected );
// QStandardItem methods
int type() const override; int type() const override;
private: private:
PackageTreeItem* m_parentItem; PackageTreeItem* m_parentItem;
QList< PackageTreeItem* > m_childItems; PackageList m_childItems;
ItemData m_data;
// 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 #endif // PACKAGETREEITEM_H

Loading…
Cancel
Save