Refactor loop to use QHash and ensure SimpleFileTreeModel destructor is called (#13)

* Use QHash to see if child item was already added
* Pass parent to model so its destructor is called

---------

Co-authored-by: RJ <Liderate@users.noreply.github.com>
This commit is contained in:
RJ
2024-10-03 09:49:14 +02:00
committed by GitHub
co-authored by RJ
parent 567d8ac549
commit 79cdca3fb2
4 changed files with 14 additions and 14 deletions
+1 -1
View File
@@ -159,7 +159,7 @@ QWidget* PreviewBsa::genBsaPreview(const QString& fileName, const QSize&)
layout->addWidget(infoLabel);
QTreeView* view = new QTreeView();
SimpleFileTreeModel* model = new SimpleFileTreeModel(m_Files);
SimpleFileTreeModel* model = new SimpleFileTreeModel(m_Files, view);
view->setModel(model);
layout->addWidget(view);
+7 -1
View File
@@ -18,9 +18,10 @@ SimpleFileTreeItem::~SimpleFileTreeItem()
qDeleteAll(m_childItems);
}
void SimpleFileTreeItem::appendChild(SimpleFileTreeItem* item)
void SimpleFileTreeItem::appendChild(const QString& name, SimpleFileTreeItem* item)
{
m_childItems.append(item);
m_childItemsByName.insert(name, item);
}
SimpleFileTreeItem* SimpleFileTreeItem::child(int row)
@@ -30,6 +31,11 @@ SimpleFileTreeItem* SimpleFileTreeItem::child(int row)
return m_childItems.at(row);
}
SimpleFileTreeItem* SimpleFileTreeItem::childByName(const QString& name)
{
return m_childItemsByName.value(name);
}
QVector<SimpleFileTreeItem*> SimpleFileTreeItem::children()
{
return m_childItems;
+3 -1
View File
@@ -11,9 +11,10 @@ public:
SimpleFileTreeItem* parentItem = nullptr);
~SimpleFileTreeItem();
void appendChild(SimpleFileTreeItem* child);
void appendChild(const QString& name, SimpleFileTreeItem* child);
SimpleFileTreeItem* child(int row);
SimpleFileTreeItem* childByName(const QString& name);
QVector<SimpleFileTreeItem*> children();
int childCount() const;
int columnCount() const;
@@ -23,6 +24,7 @@ public:
private:
QVector<SimpleFileTreeItem*> m_childItems;
QHash<QString, SimpleFileTreeItem*> m_childItemsByName;
QVector<QVariant> m_itemData;
SimpleFileTreeItem* m_parentItem;
};
+3 -11
View File
@@ -130,18 +130,10 @@ void SimpleFileTreeModel::setupModelData(const QStringList& lines,
auto currentParent = m_RootItem;
for (int i = 0; i < lineEntries.count(); i++) {
QString currentEntryName = lineEntries[i];
SimpleFileTreeItem* currentEntry = nullptr;
QString currentEntryName = lineEntries[i];
// check if item was already added
if (currentParent->childCount() > 0) {
for (auto child : currentParent->children()) {
if (child->data(0).toString() == currentEntryName) {
currentEntry = child;
break;
}
}
}
SimpleFileTreeItem* currentEntry = currentParent->childByName(currentEntryName);
// add tree item if not found
if (currentEntry == nullptr) {
@@ -149,7 +141,7 @@ void SimpleFileTreeModel::setupModelData(const QStringList& lines,
columnData.reserve(m_ColumnCount);
columnData << currentEntryName;
currentEntry = new SimpleFileTreeItem(columnData, currentParent);
currentParent->appendChild(currentEntry);
currentParent->appendChild(currentEntryName, currentEntry);
}
// as we go deeper into the path