[Libreoffice-commits] core.git: cui/source

Yusuf Keten (via logerrit) logerrit at kemper.freedesktop.org
Thu Aug 13 12:24:46 UTC 2020


 cui/source/dialogs/AdditionsDialog.cxx |  110 ++++++++++++++++++---------------
 cui/source/inc/AdditionsDialog.hxx     |   92 ++++++++++-----------------
 2 files changed, 99 insertions(+), 103 deletions(-)

New commits:
commit d21f802d91cce6d3de40f95d7478401776afab00
Author:     Yusuf Keten <ketenyusuf at gmail.com>
AuthorDate: Fri Aug 7 17:40:30 2020 +0300
Commit:     Muhammet Kara <muhammet.kara at collabora.com>
CommitDate: Thu Aug 13 14:24:04 2020 +0200

    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 at collabora.com>

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;


More information about the Libreoffice-commits mailing list