reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 5e1430bb8c675fb1358e8a3dd9d92e1fee9dad49
parent 7ec8511215316630b263a09de29fbddabc223398
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Mon, 17 Jul 2017 22:03:19 -0400

browser: refactoring – extract sort callbacks

Diffstat:
Msrc/browser.cpp | 68++++++++++++++++++++++++++++++++++++--------------------------------
Msrc/browser.hpp | 2++
2 files changed, 38 insertions(+), 32 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -93,40 +93,10 @@ void Browser::onInit() m_list->onContextMenu(bind(&Browser::fillContextMenu, this, placeholders::_1, placeholders::_2)); + m_list->setSortCallback(3, bind(&Browser::sortByVersion, this, _1, _2)); + m_list->setSortCallback(7, bind(&Browser::sortByLastUpdate, this, _1, _2)); m_list->sortByColumn(1); - m_list->setSortCallback(3 /* version */, [&] (const int ai, const int bi) { - const Entry &a = m_entries[m_visibleEntries[ai]]; - const Entry &b = m_entries[m_visibleEntries[bi]]; - - const VersionName *l = nullptr; - const VersionName *r = nullptr; - - if(a.test(InstalledFlag)) - l = &a.regEntry.version; - else - l = &a.latest->name(); - - if(b.test(InstalledFlag)) - r = &b.regEntry.version; - else - r = &b.latest->name(); - - return l->compare(*r); - }); - - m_list->setSortCallback(7 /* last update */, [&] (const int ai, const int bi) { - const Entry &a = m_entries[m_visibleEntries[ai]]; - const Entry &b = m_entries[m_visibleEntries[bi]]; - - if(!a.latest) - return -1; - else if(!b.latest) - return 1; - - return a.latest->time().compare(b.latest->time()); - }); - Dialog::onInit(); setMinimumSize({600, 250}); @@ -297,6 +267,40 @@ void Browser::onSelection() startTimer(100, TIMER_ABOUT); } +int Browser::sortByVersion(const int ai, const int bi) const +{ + const Entry &a = m_entries[m_visibleEntries[ai]]; + const Entry &b = m_entries[m_visibleEntries[bi]]; + + const VersionName *l = nullptr; + const VersionName *r = nullptr; + + if(a.test(InstalledFlag)) + l = &a.regEntry.version; + else + l = &a.latest->name(); + + if(b.test(InstalledFlag)) + r = &b.regEntry.version; + else + r = &b.latest->name(); + + return l->compare(*r); +} + +int Browser::sortByLastUpdate(const int ai, const int bi) const +{ + const Entry &a = m_entries[m_visibleEntries[ai]]; + const Entry &b = m_entries[m_visibleEntries[bi]]; + + if(!a.latest) + return -1; + else if(!b.latest) + return 1; + + return a.latest->time().compare(b.latest->time()); +} + bool Browser::fillContextMenu(Menu &menu, const int index) { m_currentIndex = index; diff --git a/src/browser.hpp b/src/browser.hpp @@ -111,6 +111,8 @@ private: Entry makeEntry(const Package *, const Registry::Entry &, const IndexPtr &) const; void onSelection(); + int sortByVersion(int l, int r) const; + int sortByLastUpdate(int l, int r) const; bool fillContextMenu(Menu &, int index); void populate(const std::vector<IndexPtr> &); void transferActions();