vcl/inc/jsdialog/jsdialogbuilder.hxx |    9 +++++++
 vcl/jsdialog/jsdialogbuilder.cxx     |   44 +++++++++++++++++++++++------------
 2 files changed, 38 insertions(+), 15 deletions(-)

New commits:
commit afeaa3394ecaa913a409a12d5a67b27eb9596405
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Oct 20 10:59:12 2021 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Oct 29 10:23:17 2021 +0200

    jsdialog: weld Image widget
    
    Change-Id: Iaf900da5d6256b1aa441dc0dad07ba967f88b085
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124224
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index a6b8021a50b4..d826e6625606 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -259,6 +259,8 @@ public:
                                                            bool bTakeOwnership 
= false) override;
     virtual std::unique_ptr<weld::RadioButton>
     weld_radio_button(const OString& id, bool bTakeOwnership = false) override;
+    virtual std::unique_ptr<weld::Image> weld_image(const OString& id,
+                                                    bool bTakeOwnership = 
false) override;
 
     static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
                                                     VclMessageType 
eMessageType,
@@ -597,4 +599,11 @@ public:
     virtual void set_active(bool active) override;
 };
 
+class JSImage : public JSWidget<SalInstanceImage, FixedImage>
+{
+public:
+    JSImage(JSDialogSender* pSender, FixedImage* pImage, SalInstanceBuilder* 
pBuilder,
+            bool bTakeOwnership);
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index b102b557002f..56163a3e377d 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -520,7 +520,8 @@ void JSInstanceBuilder::RememberWidget(const OString& id, 
weld::Widget* pWidget)
     }
 }
 
-void JSInstanceBuilder::AddChildWidget(sal_uInt64 nWindowId, const OString& 
id, weld::Widget* pWidget)
+void JSInstanceBuilder::AddChildWidget(sal_uInt64 nWindowId, const OString& id,
+                                       weld::Widget* pWidget)
 {
     auto it = GetLOKWeldWidgetsMap().find(nWindowId);
     if (it != GetLOKWeldWidgetsMap().end())
@@ -807,6 +808,19 @@ std::unique_ptr<weld::RadioButton> 
JSInstanceBuilder::weld_radio_button(const OS
     return pWeldWidget;
 }
 
+std::unique_ptr<weld::Image> JSInstanceBuilder::weld_image(const OString& id, 
bool bTakeOwnership)
+{
+    FixedImage* pImage = m_xBuilder->get<FixedImage>(id);
+
+    auto pWeldWidget
+        = pImage ? std::make_unique<JSImage>(this, pImage, this, 
bTakeOwnership) : nullptr;
+
+    if (pWeldWidget)
+        RememberWidget(id, pWeldWidget.get());
+
+    return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
                                                             VclMessageType 
eMessageType,
                                                             VclButtonsType 
eButtonType,
@@ -1023,21 +1037,21 @@ JSMessageDialog::JSMessageDialog(::MessageDialog* 
pDialog, SalInstanceBuilder* p
 
     if (!pBuilder)
     {
-        if(::OKButton* pOKBtn = 
dynamic_cast<::OKButton*>(m_xMessageDialog->get_widget_for_response(RET_OK)))
+        if (::OKButton* pOKBtn
+            = 
dynamic_cast<::OKButton*>(m_xMessageDialog->get_widget_for_response(RET_OK)))
         {
             m_pOK.reset(new JSButton(m_pSender, pOKBtn, nullptr, false));
             
JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
-                                              pOKBtn->get_id().toUtf8(),
-                                              m_pOK.get());
+                                              pOKBtn->get_id().toUtf8(), 
m_pOK.get());
             m_pOK->connect_clicked(LINK(this, JSMessageDialog, OKHdl));
         }
 
-        if(::CancelButton* pCancelBtn = 
dynamic_cast<::CancelButton*>(m_xMessageDialog->get_widget_for_response(RET_CANCEL)))
+        if (::CancelButton* pCancelBtn
+            = 
dynamic_cast<::CancelButton*>(m_xMessageDialog->get_widget_for_response(RET_CANCEL)))
         {
             m_pCancel.reset(new JSButton(m_pSender, pCancelBtn, nullptr, 
false));
             
JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
-                                              pCancelBtn->get_id().toUtf8(),
-                                              m_pCancel.get());
+                                              pCancelBtn->get_id().toUtf8(), 
m_pCancel.get());
             m_pCancel->connect_clicked(LINK(this, JSMessageDialog, CancelHdl));
         }
     }
@@ -1049,15 +1063,9 @@ JSMessageDialog::~JSMessageDialog()
         
JSInstanceBuilder::RemoveWindowWidget(m_xMessageDialog->GetLOKWindowId());
 }
 
-IMPL_LINK_NOARG(JSMessageDialog, OKHdl, weld::Button&, void)
-{
-    response(RET_OK);
-}
+IMPL_LINK_NOARG(JSMessageDialog, OKHdl, weld::Button&, void) { 
response(RET_OK); }
 
-IMPL_LINK_NOARG(JSMessageDialog, CancelHdl, weld::Button&, void)
-{
-    response(RET_CANCEL);
-}
+IMPL_LINK_NOARG(JSMessageDialog, CancelHdl, weld::Button&, void) { 
response(RET_CANCEL); }
 
 void JSMessageDialog::set_primary_text(const OUString& rText)
 {
@@ -1334,4 +1342,10 @@ void JSRadioButton::set_active(bool active)
     sendUpdate();
 }
 
+JSImage::JSImage(JSDialogSender* pSender, FixedImage* pImage, 
SalInstanceBuilder* pBuilder,
+                 bool bTakeOwnership)
+    : JSWidget<SalInstanceImage, FixedImage>(pSender, pImage, pBuilder, 
bTakeOwnership)
+{
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */

Reply via email to