commit 1f302a47b52ed102e764abf9733b983cfdaa3df4
parent ab67343aea243f007dd5f81a3333fd809e13680e
Author: cfillion <cfillion@users.noreply.github.com>
Date: Fri, 25 Aug 2017 22:55:43 -0400
about: store address of packages and sources along with the listview's row (refactoring)
Diffstat:
2 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/src/about.cpp b/src/about.cpp
@@ -308,9 +308,10 @@ void AboutIndexDelegate::init(About *dialog)
dialog->list()->addColumn({AUTO_STR("Author"), 90});
dialog->list()->setSortCallback(1, [&] (const int a, const int b) {
- const Version *l = m_packagesData->at(a)->lastVersion();
- const Version *r = m_packagesData->at(b)->lastVersion();
- return l->name().compare(r->name());
+ auto pkgA = (const Package *)dialog->list()->row(a).userData();
+ auto pkgB = (const Package *)dialog->list()->row(b).userData();
+
+ return pkgA->lastVersion()->name().compare(pkgB->lastVersion()->name());
});
initInstalledFiles();
@@ -368,18 +369,22 @@ void AboutIndexDelegate::updateList(const int index)
// -1: all packages, >0 selected category
const int catIndex = index - 1;
+ const vector<const Package *> *packages;
+
if(catIndex < 0)
- m_packagesData = &m_index->packages();
+ packages = &m_index->packages();
else
- m_packagesData = &m_index->category(catIndex)->packages();
+ packages = &m_index->category(catIndex)->packages();
- for(const Package *pkg : *m_packagesData) {
+ for(const Package *pkg : *packages) {
const Version *lastVer = pkg->lastVersion();
const auto_string &name = make_autostring(pkg->displayName());
const auto_string &version = make_autostring(lastVer->name().toString());
const auto_string &author = make_autostring(lastVer->displayAuthor());
- m_dialog->list()->addRow({name, version, author});
+ ListView::Row row{name, version, author};
+ row.setUserData((void *)pkg);
+ m_dialog->list()->addRow(row);
}
}
@@ -416,7 +421,7 @@ const Package *AboutIndexDelegate::currentPackage() const
if(index < 0)
return nullptr;
else
- return m_packagesData->at(index);
+ return (const Package *)m_dialog->list()->row(index).userData();
}
void AboutIndexDelegate::findInBrowser()
@@ -568,8 +573,6 @@ void AboutPackageDelegate::updateList(const int index)
SetWindowText(m_dialog->getControl(IDC_CHANGELOG),
make_autostring(stream.str()).c_str());
- m_sources = &ver->sources();
-
for(const Source *src : ver->sources()) {
int sections = src->sections();
string actionList;
@@ -594,8 +597,10 @@ void AboutPackageDelegate::updateList(const int index)
else
actionList = "No";
- m_dialog->list()->addRow({make_autostring(src->targetPath().join()),
- make_autostring(actionList)});
+ ListView::Row row{
+ make_autostring(src->targetPath().join()), make_autostring(actionList)};
+ row.setUserData((void *)src);
+ m_dialog->list()->addRow(row);
}
}
@@ -604,7 +609,7 @@ bool AboutPackageDelegate::fillContextMenu(Menu &menu, const int index) const
if(index < 0)
return false;
- const Source *src = m_sources->at(index);
+ auto src = (const Source *)m_dialog->list()->row(index).userData();
menu.addAction(AUTO_STR("Copy source URL"), ACTION_COPY_URL);
menu.setEnabled(m_current.size() > 0 && FS::exists(src->targetPath()),
@@ -635,7 +640,7 @@ const Source *AboutPackageDelegate::currentSource() const
if(index < 0)
return nullptr;
else
- return m_sources->at(index);
+ return (const Source *)m_dialog->list()->row(index).userData();
}
void AboutPackageDelegate::copySourceUrl()
diff --git a/src/about.hpp b/src/about.hpp
@@ -115,7 +115,6 @@ private:
void install();
IndexPtr m_index;
- const std::vector<const Package *> *m_packagesData;
About *m_dialog;
};
@@ -143,7 +142,6 @@ private:
const Package *m_package;
VersionName m_current;
IndexPtr m_index; // keeps the package loaded in memory
- const std::vector<const Source *> *m_sources;
About *m_dialog;
};