From c66ef5a20199019898fedf1f0e0b2674c50743c6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 20 Mar 2020 19:48:29 +0100 Subject: [PATCH] [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. --- src/modules/netinstall/PackageTreeItem.cpp | 128 ++++++--------------- src/modules/netinstall/PackageTreeItem.h | 71 ++++++------ 2 files changed, 75 insertions(+), 124 deletions(-) diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index 7e20d63e1..81a20257d 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -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( "" ); + m_selected = Qt::Checked; + m_name = QLatin1String( "" ); } 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; + } +} diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index d9c1f9ec2..83d1cb3e7 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -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 + using PackageList = QList< PackageTreeItem* >; + + ///@brief A package (individual package) + explicit PackageTreeItem( const QString& packageName, PackageTreeItem* parent = nullptr ); + ///@brief A root item, always selected, named "" + 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