diff options
author | Yusuf Keten <ketenyusuf@gmail.com> | 2020-08-21 02:30:26 +0300 |
---|---|---|
committer | Muhammet Kara <muhammet.kara@collabora.com> | 2020-08-26 21:49:22 +0200 |
commit | f1e6919a5072b3f4bc67dbf5d8fcde524b74ecf8 (patch) | |
tree | 3c48b5593bc64d49a6ad1c15dc17aa0d3edd5520 | |
parent | e5356fb099d5fe0d476fa99697e4a7e04688f9ee (diff) |
tdf#135275: Additions: Sorting of extensions
Change-Id: If10820786ebc1f97aef24a7cb71a9f8a67e4bb8d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101097
Tested-by: Jenkins
Reviewed-by: Muhammet Kara <muhammet.kara@collabora.com>
-rw-r--r-- | cui/source/dialogs/AdditionsDialog.cxx | 59 | ||||
-rw-r--r-- | cui/source/inc/AdditionsDialog.hxx | 6 |
2 files changed, 55 insertions, 10 deletions
diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx index 7460fb576790..395198948dea 100644 --- a/cui/source/dialogs/AdditionsDialog.cxx +++ b/cui/source/dialogs/AdditionsDialog.cxx @@ -445,6 +445,8 @@ void SearchAndParseThread::execute() { std::string sResponse = curlGet(m_pAdditionsDialog->m_sURL); parseResponse(sResponse, m_pAdditionsDialog->m_aAllExtensionsVector); + std::sort(m_pAdditionsDialog->m_aAllExtensionsVector.begin(), + m_pAdditionsDialog->m_aAllExtensionsVector.end(), AdditionsDialog::sortByRating); Search(); } else // Searching @@ -471,6 +473,9 @@ AdditionsDialog::AdditionsDialog(weld::Window* pParent, const OUString& sAdditio , m_xLabelProgress(m_xBuilder->weld_label("labelProgress")) , m_xGearBtn(m_xBuilder->weld_menu_button("buttonGear")) { + m_xGearBtn->connect_selected(LINK(this, AdditionsDialog, GearHdl)); + m_xGearBtn->set_item_active("gear_sort_voting", true); + m_aSearchDataTimer.SetInvokeHandler(LINK(this, AdditionsDialog, ImplUpdateDataHdl)); m_aSearchDataTimer.SetDebugName("AdditionsDialog SearchDataTimer"); m_aSearchDataTimer.SetTimeout(EDIT_UPDATEDATA_TIMEOUT); @@ -579,6 +584,32 @@ void AdditionsDialog::ClearList() this->m_aAdditionsItems.clear(); } +void AdditionsDialog::RefreshUI() +{ + if (m_pSearchThread.is()) + m_pSearchThread->StopExecution(); + ClearList(); + m_nCurrentListItemCount = 0; + m_nMaxItemCount = PAGE_SIZE; + m_pSearchThread = new SearchAndParseThread(this, false); + m_pSearchThread->launch(); +} + +bool AdditionsDialog::sortByRating(const AdditionInfo& a, const AdditionInfo& b) +{ + return a.sRating.toDouble() > b.sRating.toDouble(); +} + +bool AdditionsDialog::sortByComment(const AdditionInfo& a, const AdditionInfo& b) +{ + return a.sCommentNumber.toUInt32() > b.sCommentNumber.toUInt32(); +} + +bool AdditionsDialog::sortByDownload(const AdditionInfo& a, const AdditionInfo& b) +{ + return a.sDownloadNumber.toUInt32() > b.sDownloadNumber.toUInt32(); +} + AdditionsItem::AdditionsItem(weld::Widget* pParent, AdditionsDialog* pParentDialog, AdditionInfo& additionInfo) : m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/additionsfragment.ui")) @@ -700,16 +731,7 @@ bool AdditionsItem::getExtensionFile(OUString& sExtensionFile) return true; } -IMPL_LINK_NOARG(AdditionsDialog, ImplUpdateDataHdl, Timer*, void) -{ - if (m_pSearchThread.is()) - m_pSearchThread->StopExecution(); - ClearList(); - m_nCurrentListItemCount = 0; - m_nMaxItemCount = PAGE_SIZE; - m_pSearchThread = new SearchAndParseThread(this, false); - m_pSearchThread->launch(); -} +IMPL_LINK_NOARG(AdditionsDialog, ImplUpdateDataHdl, Timer*, void) { RefreshUI(); } IMPL_LINK_NOARG(AdditionsDialog, SearchUpdateHdl, weld::Entry&, void) { @@ -848,4 +870,21 @@ void TmpRepositoryCommandEnv::update(uno::Any const& /*Status */) {} void TmpRepositoryCommandEnv::pop() {} +IMPL_LINK(AdditionsDialog, GearHdl, const OString&, rIdent, void) +{ + if (rIdent == "gear_sort_voting") + { + std::sort(m_aAllExtensionsVector.begin(), m_aAllExtensionsVector.end(), sortByRating); + } + else if (rIdent == "gear_sort_comments") + { + std::sort(m_aAllExtensionsVector.begin(), m_aAllExtensionsVector.end(), sortByComment); + } + else if (rIdent == "gear_sort_downloads") + { + std::sort(m_aAllExtensionsVector.begin(), m_aAllExtensionsVector.end(), sortByDownload); + } + // After the sorting, UI will be refreshed to update extension list. + RefreshUI(); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cui/source/inc/AdditionsDialog.hxx b/cui/source/inc/AdditionsDialog.hxx index 9061b755a5be..9efaad017af7 100644 --- a/cui/source/inc/AdditionsDialog.hxx +++ b/cui/source/inc/AdditionsDialog.hxx @@ -68,6 +68,7 @@ class AdditionsDialog : public weld::GenericDialogController private: Timer m_aSearchDataTimer; + DECL_LINK(GearHdl, const OString&, void); DECL_LINK(SearchUpdateHdl, weld::Entry&, void); DECL_LINK(ImplUpdateDataHdl, Timer*, void); DECL_LINK(FocusOut_Impl, weld::Widget&, void); @@ -102,6 +103,11 @@ public: getInstalledExtensions(); void SetProgress(const OUString& rProgress); void ClearList(); + void RefreshUI(); + + static bool sortByComment(const AdditionInfo& a, const AdditionInfo& b); + static bool sortByRating(const AdditionInfo& a, const AdditionInfo& b); + static bool sortByDownload(const AdditionInfo& a, const AdditionInfo& b); }; class AdditionsItem |