diff options
author | Yusuf Keten <ketenyusuf@gmail.com> | 2020-08-07 17:40:30 +0300 |
---|---|---|
committer | Muhammet Kara <muhammet.kara@collabora.com> | 2020-08-13 14:24:04 +0200 |
commit | d21f802d91cce6d3de40f95d7478401776afab00 (patch) | |
tree | 971a1e99ffcf89c1f76369ba51ab9db8aea2e68d /cui | |
parent | 96b3de39bc723ffe0beea278e32b9c858873bfc5 (diff) |
tdf#133026: Additions: Install Button Handler
Change-Id: If4e9b192557b6c9f56bd04ccf9f6a5a8273d7515
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100340
Tested-by: Jenkins
Reviewed-by: Muhammet Kara <muhammet.kara@collabora.com>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/dialogs/AdditionsDialog.cxx | 110 | ||||
-rw-r--r-- | cui/source/inc/AdditionsDialog.hxx | 92 |
2 files changed, 99 insertions, 103 deletions
diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx index 71f7fb1f09c4..c467e647e020 100644 --- a/cui/source/dialogs/AdditionsDialog.cxx +++ b/cui/source/dialogs/AdditionsDialog.cxx @@ -14,7 +14,6 @@ #include <rtl/ustrbuf.hxx> #include <unordered_set> #include <sal/log.hxx> -#include <strings.hrc> #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/inspection/PropertyLineElement.hpp> @@ -29,8 +28,6 @@ #include <tools/urlobj.hxx> #include <tools/stream.hxx> #include <comphelper/processfactory.hxx> -#include <comphelper/string.hxx> -#include <dialmgr.hxx> #include <vcl/virdev.hxx> #include <vcl/svapp.hxx> #include <vcl/settings.hxx> @@ -293,7 +290,7 @@ bool getPreviewFile(const AdditionInfo& aAdditionInfo, OUString& sPreviewFile) return true; } -void LoadImage(const OUString& rPreviewFile, const AdditionsItem& rCurrentItem) +void LoadImage(const OUString& rPreviewFile, std::shared_ptr<AdditionsItem> pCurrentItem) { SolarMutexGuard aGuard; @@ -306,11 +303,11 @@ void LoadImage(const OUString& rPreviewFile, const AdditionsItem& rCurrentItem) aFilter.ImportGraphic(aGraphic, aURLObj); BitmapEx aBmp = aGraphic.GetBitmapEx(); - ScopedVclPtr<VirtualDevice> xVirDev = rCurrentItem.m_xImageScreenshot->create_virtual_device(); + ScopedVclPtr<VirtualDevice> xVirDev = pCurrentItem->m_xImageScreenshot->create_virtual_device(); xVirDev->SetOutputSizePixel(aBmp.GetSizePixel()); xVirDev->DrawBitmapEx(Point(0, 0), aBmp); - rCurrentItem.m_xImageScreenshot->set_image(xVirDev.get()); + pCurrentItem->m_xImageScreenshot->set_image(xVirDev.get()); xVirDev.disposeAndClear(); } @@ -326,32 +323,7 @@ SearchAndParseThread::SearchAndParseThread(AdditionsDialog* pDialog, const bool& SearchAndParseThread::~SearchAndParseThread() {} -void SearchAndParseThread::LoadInfo(const AdditionInfo& additionInfo, AdditionsItem& rCurrentItem) -{ - SolarMutexGuard aGuard; - - rCurrentItem.m_xContainer->set_grid_left_attach(0); - rCurrentItem.m_xContainer->set_grid_top_attach(m_pAdditionsDialog->m_aAdditionsItems.size() - - 1); - - rCurrentItem.m_xLinkButtonName->set_label(additionInfo.sName); - rCurrentItem.m_xLinkButtonName->set_uri(additionInfo.sExtensionURL); - rCurrentItem.m_xLabelDescription->set_label(additionInfo.sIntroduction); - rCurrentItem.m_xLabelAuthor->set_label(additionInfo.sAuthorName); - rCurrentItem.m_xButtonInstall->set_label(CuiResId(RID_SVXSTR_ADDITIONS_INSTALLBUTTON)); - OUString sLicenseString = CuiResId(RID_SVXSTR_ADDITIONS_LICENCE) + additionInfo.sLicense; - rCurrentItem.m_xLabelLicense->set_label(sLicenseString); - OUString sVersionString - = CuiResId(RID_SVXSTR_ADDITIONS_REQUIREDVERSION) + additionInfo.sCompatibleVersion; - rCurrentItem.m_xLabelVersion->set_label(sVersionString); - rCurrentItem.m_xLinkButtonComments->set_label(additionInfo.sCommentNumber); - rCurrentItem.m_xLinkButtonComments->set_uri(additionInfo.sCommentURL); - rCurrentItem.m_xLabelDownloadNumber->set_label(additionInfo.sDownloadNumber); - rCurrentItem.m_pParentDialog = m_pAdditionsDialog; - rCurrentItem.m_sDownloadURL = additionInfo.sDownloadURL; -} - -void SearchAndParseThread::Append(const AdditionInfo& additionInfo) +void SearchAndParseThread::Append(AdditionInfo& additionInfo) { if (!m_bExecute) return; @@ -366,10 +338,11 @@ void SearchAndParseThread::Append(const AdditionInfo& additionInfo) SolarMutexGuard aGuard; - m_pAdditionsDialog->m_aAdditionsItems.emplace_back(m_pAdditionsDialog->m_xContentGrid.get()); - AdditionsItem& aCurrentItem = m_pAdditionsDialog->m_aAdditionsItems.back(); + auto newItem = std::make_shared<AdditionsItem>(m_pAdditionsDialog->m_xContentGrid.get(), + m_pAdditionsDialog, additionInfo); + m_pAdditionsDialog->m_aAdditionsItems.push_back(newItem); + std::shared_ptr<AdditionsItem> aCurrentItem = m_pAdditionsDialog->m_aAdditionsItems.back(); - LoadInfo(additionInfo, aCurrentItem); LoadImage(aPreviewFile, aCurrentItem); m_pAdditionsDialog->m_nCurrentListItemCount++; @@ -377,15 +350,7 @@ void SearchAndParseThread::Append(const AdditionInfo& additionInfo) { if (m_pAdditionsDialog->m_nCurrentListItemCount != m_pAdditionsDialog->m_aAllExtensionsVector.size()) - aCurrentItem.m_xButtonShowMore->set_visible(true); - } -} - -void SearchAndParseThread::AppendAllExtensions() -{ - for (auto& additionInfo : m_pAdditionsDialog->m_aAllExtensionsVector) - { - Append(additionInfo); + aCurrentItem->m_xButtonShowMore->set_visible(true); } } @@ -445,7 +410,7 @@ void SearchAndParseThread::CheckInstalledExtensions() for (auto& rInfo : m_pAdditionsDialog->m_aAdditionsItems) { - OUString sExtensionDownloadURL = rInfo.m_sDownloadURL; + OUString sExtensionDownloadURL = rInfo->m_sDownloadURL; if (!textSearch.searchForward(sExtensionDownloadURL)) { @@ -453,7 +418,7 @@ void SearchAndParseThread::CheckInstalledExtensions() } else { - rInfo.m_xButtonInstall->set_sensitive(false); + rInfo->m_xButtonInstall->set_sensitive(false); } } } @@ -604,11 +569,57 @@ void AdditionsDialog::ClearList() for (auto& item : this->m_aAdditionsItems) { - item.m_xContainer->hide(); + item->m_xContainer->hide(); } this->m_aAdditionsItems.clear(); } +AdditionsItem::AdditionsItem(weld::Widget* pParent, AdditionsDialog* pParentDialog, + AdditionInfo& additionInfo) + : m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/additionsfragment.ui")) + , m_xContainer(m_xBuilder->weld_widget("additionsEntry")) + , m_xImageScreenshot(m_xBuilder->weld_image("imageScreenshot")) + , m_xButtonInstall(m_xBuilder->weld_button("buttonInstall")) + , m_xLinkButtonName(m_xBuilder->weld_link_button("linkButtonName")) + , m_xLabelAuthor(m_xBuilder->weld_label("labelAuthor")) + , m_xLabelDesc(m_xBuilder->weld_label("labelDesc")) // no change (print description) + , m_xLabelDescription(m_xBuilder->weld_label("labelDescription")) + , m_xLabelLicense(m_xBuilder->weld_label("labelLicense")) + , m_xLabelVersion(m_xBuilder->weld_label("labelVersion")) + , m_xLabelComments(m_xBuilder->weld_label("labelComments")) // no change + , m_xLinkButtonComments(m_xBuilder->weld_link_button("linkButtonComments")) + , m_xImageVoting(m_xBuilder->weld_image("imageVoting")) + , m_xImageDownloadNumber(m_xBuilder->weld_image("imageDownloadNumber")) + , m_xLabelDownloadNumber(m_xBuilder->weld_label("labelDownloadNumber")) + , m_xButtonShowMore(m_xBuilder->weld_button("buttonShowMore")) + , m_pParentDialog(pParentDialog) + , m_sDownloadURL("") +{ + SolarMutexGuard aGuard; + + m_xContainer->set_grid_left_attach(0); + m_xContainer->set_grid_top_attach(pParentDialog->m_aAdditionsItems.size() - 1); + + m_xLinkButtonName->set_label(additionInfo.sName); + m_xLinkButtonName->set_uri(additionInfo.sExtensionURL); + m_xLabelDescription->set_label(additionInfo.sIntroduction); + m_xLabelAuthor->set_label(additionInfo.sAuthorName); + m_xButtonInstall->set_label(CuiResId(RID_SVXSTR_ADDITIONS_INSTALLBUTTON)); + OUString sLicenseString = CuiResId(RID_SVXSTR_ADDITIONS_LICENCE) + additionInfo.sLicense; + m_xLabelLicense->set_label(sLicenseString); + OUString sVersionString + = CuiResId(RID_SVXSTR_ADDITIONS_REQUIREDVERSION) + additionInfo.sCompatibleVersion; + m_xLabelVersion->set_label(sVersionString); + m_xLinkButtonComments->set_label(additionInfo.sCommentNumber); + m_xLinkButtonComments->set_uri(additionInfo.sCommentURL); + m_xLabelDownloadNumber->set_label(additionInfo.sDownloadNumber); + m_pParentDialog = pParentDialog; + m_sDownloadURL = additionInfo.sDownloadURL; + + m_xButtonShowMore->connect_clicked(LINK(this, AdditionsItem, ShowMoreHdl)); + m_xButtonInstall->connect_clicked(LINK(this, AdditionsItem, InstallHdl)); +} + IMPL_LINK_NOARG(AdditionsDialog, ImplUpdateDataHdl, Timer*, void) { if (m_pSearchThread.is()) @@ -651,4 +662,9 @@ IMPL_LINK_NOARG(AdditionsItem, ShowMoreHdl, weld::Button&, void) m_pParentDialog->m_pSearchThread->launch(); } +IMPL_LINK_NOARG(AdditionsItem, InstallHdl, weld::Button&, void) +{ + m_xButtonInstall->set_label("Success"); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cui/source/inc/AdditionsDialog.hxx b/cui/source/inc/AdditionsDialog.hxx index 7a688516fa1a..027f2f1f24c9 100644 --- a/cui/source/inc/AdditionsDialog.hxx +++ b/cui/source/inc/AdditionsDialog.hxx @@ -14,6 +14,9 @@ #include <salhelper/thread.hxx> #include <rtl/ref.hxx> #include <vcl/weld.hxx> +#include <strings.hrc> +#include <comphelper/string.hxx> +#include "dialmgr.hxx" // Detect changes on the UI #include <vcl/timer.hxx> @@ -28,53 +31,7 @@ class AdditionsDialog; class SearchAndParseThread; - -struct AdditionsItem -{ - AdditionsItem(weld::Widget* pParent) - : m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/additionsfragment.ui")) - , m_xContainer(m_xBuilder->weld_widget("additionsEntry")) - , m_xImageScreenshot(m_xBuilder->weld_image("imageScreenshot")) - , m_xButtonInstall(m_xBuilder->weld_button("buttonInstall")) - , m_xLinkButtonName(m_xBuilder->weld_link_button("linkButtonName")) - , m_xLabelAuthor(m_xBuilder->weld_label("labelAuthor")) - , m_xLabelDesc(m_xBuilder->weld_label("labelDesc")) // no change (print description) - , m_xLabelDescription(m_xBuilder->weld_label("labelDescription")) - , m_xLabelLicense(m_xBuilder->weld_label("labelLicense")) - , m_xLabelVersion(m_xBuilder->weld_label("labelVersion")) - , m_xLabelComments(m_xBuilder->weld_label("labelComments")) // no change - , m_xLinkButtonComments(m_xBuilder->weld_link_button("linkButtonComments")) - , m_xImageVoting(m_xBuilder->weld_image("imageVoting")) - , m_xImageDownloadNumber(m_xBuilder->weld_image("imageDownloadNumber")) - , m_xLabelDownloadNumber(m_xBuilder->weld_label("labelDownloadNumber")) - , m_xButtonShowMore(m_xBuilder->weld_button("buttonShowMore")) - , m_pParentDialog(nullptr) - , m_sDownloadURL("") - { - m_xButtonShowMore->connect_clicked(LINK(this, AdditionsItem, ShowMoreHdl)); - } - - DECL_LINK(ShowMoreHdl, weld::Button&, void); - - std::unique_ptr<weld::Builder> m_xBuilder; - std::unique_ptr<weld::Widget> m_xContainer; - std::unique_ptr<weld::Image> m_xImageScreenshot; - std::unique_ptr<weld::Button> m_xButtonInstall; - std::unique_ptr<weld::LinkButton> m_xLinkButtonName; - std::unique_ptr<weld::Label> m_xLabelAuthor; - std::unique_ptr<weld::Label> m_xLabelDesc; - std::unique_ptr<weld::Label> m_xLabelDescription; - std::unique_ptr<weld::Label> m_xLabelLicense; - std::unique_ptr<weld::Label> m_xLabelVersion; - std::unique_ptr<weld::Label> m_xLabelComments; - std::unique_ptr<weld::LinkButton> m_xLinkButtonComments; - std::unique_ptr<weld::Image> m_xImageVoting; - std::unique_ptr<weld::Image> m_xImageDownloadNumber; - std::unique_ptr<weld::Label> m_xLabelDownloadNumber; - std::unique_ptr<weld::Button> m_xButtonShowMore; - AdditionsDialog* m_pParentDialog; - OUString m_sDownloadURL; -}; +class AdditionsItem; struct AdditionInfo { @@ -99,7 +56,6 @@ class AdditionsDialog : public weld::GenericDialogController { private: Timer m_aSearchDataTimer; - css::uno::Reference<css::deployment::XExtensionManager> m_xExtensionManager; DECL_LINK(SearchUpdateHdl, weld::Entry&, void); @@ -111,8 +67,8 @@ public: std::unique_ptr<weld::Entry> m_xEntrySearch; std::unique_ptr<weld::Button> m_xButtonClose; std::unique_ptr<weld::MenuButton> m_xMenuButtonSettings; - std::vector<AdditionsItem> m_aAdditionsItems; // UI components - std::vector<AdditionInfo> m_aAllExtensionsVector; // + std::vector<std::shared_ptr<AdditionsItem>> m_aAdditionsItems; // UI components + std::vector<AdditionInfo> m_aAllExtensionsVector; // Stores the all extensions' info std::unique_ptr<weld::ScrolledWindow> m_xContentWindow; std::unique_ptr<weld::Container> m_xContentGrid; @@ -135,6 +91,35 @@ public: void ClearList(); }; +class AdditionsItem +{ +public: + AdditionsItem(weld::Widget* pParent, AdditionsDialog* pParentDialog, + AdditionInfo& additionInfo); + + DECL_LINK(ShowMoreHdl, weld::Button&, void); + DECL_LINK(InstallHdl, weld::Button&, void); + + std::unique_ptr<weld::Builder> m_xBuilder; + std::unique_ptr<weld::Widget> m_xContainer; + std::unique_ptr<weld::Image> m_xImageScreenshot; + std::unique_ptr<weld::Button> m_xButtonInstall; + std::unique_ptr<weld::LinkButton> m_xLinkButtonName; + std::unique_ptr<weld::Label> m_xLabelAuthor; + std::unique_ptr<weld::Label> m_xLabelDesc; + std::unique_ptr<weld::Label> m_xLabelDescription; + std::unique_ptr<weld::Label> m_xLabelLicense; + std::unique_ptr<weld::Label> m_xLabelVersion; + std::unique_ptr<weld::Label> m_xLabelComments; + std::unique_ptr<weld::LinkButton> m_xLinkButtonComments; + std::unique_ptr<weld::Image> m_xImageVoting; + std::unique_ptr<weld::Image> m_xImageDownloadNumber; + std::unique_ptr<weld::Label> m_xLabelDownloadNumber; + std::unique_ptr<weld::Button> m_xButtonShowMore; + AdditionsDialog* m_pParentDialog; + OUString m_sDownloadURL; +}; + class SearchAndParseThread : public salhelper::Thread { private: @@ -142,13 +127,8 @@ private: std::atomic<bool> m_bExecute; bool m_bIsFirstLoading; - void LoadInfo(const AdditionInfo& additionInfo, AdditionsItem& rCurrentItem); void Search(); - - void Append(const AdditionInfo& additionInfo); - - void AppendAllExtensions(); - + void Append(AdditionInfo& additionInfo); void CheckInstalledExtensions(); virtual ~SearchAndParseThread() override; |