[Libreoffice-commits] core.git: include/sfx2 sfx2/inc sfx2/source sfx2/uiconfig vcl/source vcl/unx

Caolán McNamara caolanm at redhat.com
Mon Mar 5 17:09:06 UTC 2018


 include/sfx2/saveastemplatedlg.hxx    |   69 -----------------------
 sfx2/inc/saveastemplatedlg.hxx        |   59 ++++++++++++++++++++
 sfx2/source/doc/objserv.cxx           |    7 +-
 sfx2/source/doc/saveastemplatedlg.cxx |   99 ++++++++++++++--------------------
 sfx2/uiconfig/ui/saveastemplatedlg.ui |   61 +++++++++++++++-----
 vcl/source/window/builder.cxx         |   11 ++-
 vcl/unx/gtk3/gtk3gtkinst.cxx          |    9 +++
 7 files changed, 166 insertions(+), 149 deletions(-)

New commits:
commit 6ca3a21ba96f93b9ed729202ef5d4170daddd6f7
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Mar 5 13:57:56 2018 +0000

    weld SfxSaveAsTemplateDialog
    
    Change-Id: Ia663102a2d871fdca093c0d33e5af5a79deebeb5
    Reviewed-on: https://gerrit.libreoffice.org/50775
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/sfx2/saveastemplatedlg.hxx b/include/sfx2/saveastemplatedlg.hxx
deleted file mode 100644
index 9c01a4915b71..000000000000
--- a/include/sfx2/saveastemplatedlg.hxx
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
-#define INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
-
-#include <sal/config.h>
-#include <sfx2/dllapi.h>
-#include <sfx2/doctempl.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/button.hxx>
-
-class Edit;
-class ListBox;
-class CheckBox;
-
-//  class SfxSaveAsTemplateDialog -------------------------------------------------------------------
-
-class SFX2_DLLPUBLIC SfxSaveAsTemplateDialog : public ModalDialog
-{
-
-private:
-    VclPtr<ListBox>         mpLBCategory;
-    VclPtr<CheckBox>        mpCBXDefault;
-    VclPtr<Edit>            mpTemplateNameEdit;
-    VclPtr<PushButton>      mpOKButton;
-
-    OUString                msSelectedCategory;
-    OUString                msTemplateName;
-    sal_uInt16              mnRegionPos;
-
-    std::vector<OUString>   msCategories;
-
-    SfxDocumentTemplates    maDocTemplates;
-
-    css::uno::Reference< css::frame::XModel > m_xModel;
-
-public:
-    DECL_LINK(OkClickHdl, Button*, void);
-    DECL_LINK(TemplateNameEditHdl, Edit&, void);
-    DECL_LINK(SelectCategoryHdl, ListBox&, void);
-
-    void setDocumentModel (const css::uno::Reference<css::frame::XModel> &rModel);
-
-    void initialize();
-    void SetCategoryLBEntries(std::vector<OUString> names);
-
-    /*Check whether template name is unique or not in a region*/
-    bool IsTemplateNameUnique();
-
-    bool SaveTemplate();
-
-public:
-
-    explicit SfxSaveAsTemplateDialog();
-
-    virtual ~SfxSaveAsTemplateDialog() override;
-    virtual void dispose() override;
-};
-
-#endif // INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/saveastemplatedlg.hxx b/sfx2/inc/saveastemplatedlg.hxx
new file mode 100644
index 000000000000..8e7af6d3a448
--- /dev/null
+++ b/sfx2/inc/saveastemplatedlg.hxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
+#define INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
+
+#include <sal/config.h>
+#include <sfx2/doctempl.hxx>
+#include <vcl/weld.hxx>
+
+//  class SfxSaveAsTemplateDialog -------------------------------------------------------------------
+class SfxSaveAsTemplateDialog
+{
+private:
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Dialog> m_xDialog;
+    std::unique_ptr<weld::TreeView> m_xLBCategory;
+    std::unique_ptr<weld::CheckButton> m_xCBXDefault;
+    std::unique_ptr<weld::Entry> m_xTemplateNameEdit;
+    std::unique_ptr<weld::Button> m_xOKButton;
+
+    OUString msSelectedCategory;
+    OUString msTemplateName;
+    sal_uInt16 mnRegionPos;
+
+    std::vector<OUString> msCategories;
+
+    SfxDocumentTemplates maDocTemplates;
+
+    css::uno::Reference<css::frame::XModel> m_xModel;
+
+public:
+    DECL_LINK(OkClickHdl, weld::Button&, void);
+    DECL_LINK(TemplateNameEditHdl, weld::Entry&, void);
+    DECL_LINK(SelectCategoryHdl, weld::TreeView&, void);
+
+    void initialize();
+    void SetCategoryLBEntries(const std::vector<OUString>& names);
+
+    /*Check whether template name is unique or not in a region*/
+    bool IsTemplateNameUnique();
+
+    bool SaveTemplate();
+
+public:
+    SfxSaveAsTemplateDialog(weld::Window* pParent,
+                            const css::uno::Reference<css::frame::XModel>& rModel);
+    short run() { return m_xDialog->run(); }
+};
+
+#endif // INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index aaf71fb25586..5af4ef033706 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -97,7 +97,7 @@
 #include <com/sun/star/document/XDocumentProperties.hpp>
 
 #include <guisaveas.hxx>
-#include <sfx2/saveastemplatedlg.hxx>
+#include <saveastemplatedlg.hxx>
 #include <memory>
 #include <cppuhelper/implbase.hxx>
 #include <unotools/ucbstreamhelper.hxx>
@@ -795,9 +795,8 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq)
         case SID_DOCTEMPLATE:
         {
             // save as document templates
-            ScopedVclPtrInstance<SfxSaveAsTemplateDialog> aDlg;
-            aDlg->setDocumentModel(GetModel());
-            aDlg->Execute();
+            SfxSaveAsTemplateDialog aDlg(rReq.GetFrameWeld(), GetModel());
+            aDlg.run();
             break;
         }
 
diff --git a/sfx2/source/doc/saveastemplatedlg.cxx b/sfx2/source/doc/saveastemplatedlg.cxx
index 168c39bc7e79..efdb861d86a8 100644
--- a/sfx2/source/doc/saveastemplatedlg.cxx
+++ b/sfx2/source/doc/saveastemplatedlg.cxx
@@ -7,8 +7,6 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include <sfx2/saveastemplatedlg.hxx>
-
 #include <comphelper/processfactory.hxx>
 #include <comphelper/string.hxx>
 #include <comphelper/storagehelper.hxx>
@@ -28,57 +26,42 @@
 
 #include <sfx2/strings.hrc>
 
+#include <saveastemplatedlg.hxx>
+
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::frame;
 
 // Class SfxSaveAsTemplateDialog --------------------------------------------------
 
-SfxSaveAsTemplateDialog::SfxSaveAsTemplateDialog():
-        ModalDialog(nullptr, "SaveAsTemplateDialog", "sfx/ui/saveastemplatedlg.ui"),
-        msSelectedCategory(OUString()),
-        msTemplateName(OUString()),
-        mnRegionPos(0)
+SfxSaveAsTemplateDialog::SfxSaveAsTemplateDialog(weld::Window* pParent, const uno::Reference<frame::XModel> &rModel)
+    : m_xBuilder(Application::CreateBuilder(pParent, "sfx/ui/saveastemplatedlg.ui"))
+    , m_xDialog(m_xBuilder->weld_dialog("SaveAsTemplateDialog"))
+    , m_xLBCategory(m_xBuilder->weld_tree_view("categorylb"))
+    , m_xCBXDefault(m_xBuilder->weld_check_button("defaultcb"))
+    , m_xTemplateNameEdit(m_xBuilder->weld_entry("name_entry"))
+    , m_xOKButton(m_xBuilder->weld_button("ok"))
+    , msSelectedCategory(OUString())
+    , msTemplateName(OUString())
+    , mnRegionPos(0)
+    , m_xModel(rModel)
 {
-    get(mpLBCategory, "categorylb");
-    get(mpCBXDefault, "defaultcb");
-    get(mpTemplateNameEdit, "name_entry");
-    get(mpOKButton, "ok");
-
     initialize();
     SetCategoryLBEntries(msCategories);
 
-    mpTemplateNameEdit->SetModifyHdl(LINK(this, SfxSaveAsTemplateDialog, TemplateNameEditHdl));
-    mpLBCategory->SetSelectHdl(LINK(this, SfxSaveAsTemplateDialog, SelectCategoryHdl));
-    mpOKButton->SetClickHdl(LINK(this, SfxSaveAsTemplateDialog, OkClickHdl));
+    m_xTemplateNameEdit->connect_changed(LINK(this, SfxSaveAsTemplateDialog, TemplateNameEditHdl));
+    m_xLBCategory->connect_changed(LINK(this, SfxSaveAsTemplateDialog, SelectCategoryHdl));
+    m_xLBCategory->set_size_request(m_xLBCategory->get_approximate_char_width() * 32,
+                                    m_xLBCategory->get_height_rows(8));
+    m_xOKButton->connect_clicked(LINK(this, SfxSaveAsTemplateDialog, OkClickHdl));
 
-    mpOKButton->Disable();
-    mpOKButton->SetText(SfxResId(STR_SAVEDOC));
-}
-
-SfxSaveAsTemplateDialog::~SfxSaveAsTemplateDialog()
-{
-    disposeOnce();
-}
-
-void SfxSaveAsTemplateDialog::dispose()
-{
-    mpLBCategory.clear();
-    mpTemplateNameEdit.clear();
-    mpOKButton.clear();
-    mpCBXDefault.clear();
-
-    ModalDialog::dispose();
-}
-
-void SfxSaveAsTemplateDialog::setDocumentModel(const uno::Reference<frame::XModel> &rModel)
-{
-    m_xModel = rModel;
+    m_xOKButton->set_sensitive(false);
+    m_xOKButton->set_label(SfxResId(STR_SAVEDOC));
 }
 
-IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, OkClickHdl, Button*, void)
+IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, OkClickHdl, weld::Button&, void)
 {
-    std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(GetFrameWeld(), VclMessageType::Question, VclButtonsType::YesNo,
-                                                   OUString()));
+    std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Question,
+                VclButtonsType::YesNo, OUString()));
     if(!IsTemplateNameUnique())
     {
         OUString sQueryMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE));
@@ -89,34 +72,34 @@ IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, OkClickHdl, Button*, void)
             return;
     }
 
-    if(SaveTemplate())
-        Close();
+    if (SaveTemplate())
+        m_xDialog->response(RET_OK);
     else
     {
         OUString sText( SfxResId(STR_ERROR_SAVEAS) );
-        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(), VclMessageType::Warning, VclButtonsType::Ok,
-                                                  sText.replaceFirst("$1", msTemplateName)));
+        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning,
+                    VclButtonsType::Ok, sText.replaceFirst("$1", msTemplateName)));
         xBox->run();
     }
 }
 
-IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, TemplateNameEditHdl, Edit&, void)
+IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, TemplateNameEditHdl, weld::Entry&, void)
 {
-    msTemplateName = comphelper::string::strip(mpTemplateNameEdit->GetText(), ' ');
-    SelectCategoryHdl(*mpLBCategory);
+    msTemplateName = comphelper::string::strip(m_xTemplateNameEdit->get_text(), ' ');
+    SelectCategoryHdl(*m_xLBCategory);
 }
 
-IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, SelectCategoryHdl, ListBox&, void)
+IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, SelectCategoryHdl, weld::TreeView&, void)
 {
-    if(mpLBCategory->GetSelectedEntryPos() == 0)
+    if (m_xLBCategory->get_selected_index() == 0)
     {
         msSelectedCategory = OUString();
-        mpOKButton->Disable();
+        m_xOKButton->set_sensitive(false);
     }
     else
     {
-        msSelectedCategory = mpLBCategory->GetSelectedEntry();
-        mpOKButton->Enable(!msTemplateName.isEmpty());
+        msSelectedCategory = m_xLBCategory->get_selected();
+        m_xOKButton->set_sensitive(!msTemplateName.isEmpty());
     }
 }
 
@@ -130,14 +113,14 @@ void SfxSaveAsTemplateDialog::initialize()
     }
 }
 
-void SfxSaveAsTemplateDialog::SetCategoryLBEntries(std::vector<OUString> aFolderNames)
+void SfxSaveAsTemplateDialog::SetCategoryLBEntries(const std::vector<OUString>& rFolderNames)
 {
-    if (!aFolderNames.empty())
+    if (!rFolderNames.empty())
     {
-        for (size_t i = 0, n = aFolderNames.size(); i < n; ++i)
-            mpLBCategory->InsertEntry(aFolderNames[i], i+1);
+        for (size_t i = 0, n = rFolderNames.size(); i < n; ++i)
+            m_xLBCategory->insert(rFolderNames[i], i+1);
     }
-    mpLBCategory->SelectEntryPos(0);
+    m_xLBCategory->select(0);
 }
 
 bool SfxSaveAsTemplateDialog::IsTemplateNameUnique()
@@ -173,7 +156,7 @@ bool SfxSaveAsTemplateDialog::SaveTemplate()
     if (!bIsSaved)
         return false;
 
-    if ( !sURL.isEmpty() && mpCBXDefault->IsChecked() )
+    if (!sURL.isEmpty() && m_xCBXDefault->get_active())
     {
         OUString aServiceName;
         try
diff --git a/sfx2/uiconfig/ui/saveastemplatedlg.ui b/sfx2/uiconfig/ui/saveastemplatedlg.ui
index 7a8606a08928..6f46ea921473 100644
--- a/sfx2/uiconfig/ui/saveastemplatedlg.ui
+++ b/sfx2/uiconfig/ui/saveastemplatedlg.ui
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.20.2 -->
 <interface domain="sfx">
-  <requires lib="gtk+" version="3.6"/>
-  <requires lib="LibreOffice" version="1.0"/>
+  <requires lib="gtk+" version="3.20"/>
   <object class="GtkListStore" id="categorylist">
     <columns>
       <!-- column-name gchararray1 -->
@@ -19,6 +18,8 @@
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="saveastemplatedlg|SaveAsTemplateDialog">Save As Template</property>
     <property name="modal">True</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">normal</property>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
@@ -87,22 +88,25 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="margin_bottom">6</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
             <property name="row_spacing">12</property>
             <property name="column_spacing">12</property>
             <child>
               <object class="GtkBox" id="box1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
                 <property name="orientation">vertical</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="create_label">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
                     <property name="label" translatable="yes" context="saveastemplatedlg|create_label">Template _Name</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">name_entry</property>
+                    <property name="xalign">0</property>
                     <attributes>
                       <attribute name="weight" value="normal"/>
                     </attributes>
@@ -135,16 +139,17 @@
               <object class="GtkBox" id="box2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
                 <property name="orientation">vertical</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="select_label">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
                     <property name="label" translatable="yes" context="saveastemplatedlg|select_label">Template _Category</property>
                     <property name="use_underline">True</property>
-                    <property name="mnemonic_widget">categorylb:border</property>
+                    <property name="xalign">0</property>
                     <attributes>
                       <attribute name="weight" value="normal"/>
                     </attributes>
@@ -156,15 +161,38 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkTreeView" id="categorylb:border">
-                    <property name="width_request">300</property>
-                    <property name="height_request">150</property>
+                  <object class="GtkScrolledWindow" id="scroll">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="border_width">2</property>
-                    <property name="model">categorylist</property>
-                    <child internal-child="selection">
-                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    <property name="can_focus">True</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTreeView" id="categorylb">
+                        <property name="height_request">146</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="model">categorylist</property>
+                        <property name="headers_visible">False</property>
+                        <property name="headers_clickable">False</property>
+                        <property name="enable_search">False</property>
+                        <property name="show_expanders">False</property>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection1"/>
+                        </child>
+                        <child>
+                          <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                            <child>
+                              <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
                     </child>
                   </object>
                   <packing>
@@ -196,7 +224,7 @@
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
+            <property name="expand">True</property>
             <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
@@ -208,5 +236,8 @@
       <action-widget response="-5">ok</action-widget>
       <action-widget response="-6">cancel</action-widget>
     </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
   </object>
 </interface>
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 51ecf4f7a891..5156999b53a4 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -1566,11 +1566,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
         //d) remove the users of makeSvTreeViewBox
         extractModel(id, rMap);
         WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_SIMPLEMODE;
-        OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
-        if (!sBorder.isEmpty())
-            nWinStyle |= WB_BORDER;
+        if (m_bLegacy)
+        {
+            OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
+            if (!sBorder.isEmpty())
+                nWinStyle |= WB_BORDER;
+        }
         //ListBox manages its own scrolling,
         vcl::Window *pRealParent = prepareWidgetOwnScrolling(pParent, nWinStyle);
+        if (pRealParent != pParent)
+            nWinStyle |= WB_BORDER;
         xWindow = VclPtr<ListBox>::Create(pRealParent, nWinStyle);
         if (pRealParent != pParent)
             cleanupWidgetOwnScrolling(pParent, xWindow, rMap);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 6754d2089328..c5eca37b025b 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2106,6 +2106,15 @@ public:
         return (nRowHeight * nRows) + (nVerticalSeparator * (nRows + 1));
     }
 
+    virtual void set_size_request(int nWidth, int nHeight) override
+    {
+        GtkWidget* pParent = gtk_widget_get_parent(m_pWidget);
+        if (GTK_IS_SCROLLED_WINDOW(pParent))
+            gtk_widget_set_size_request(pParent, nWidth, nHeight);
+        else
+            gtk_widget_set_size_request(m_pWidget, nWidth, nHeight);
+    }
+
     virtual ~GtkInstanceTreeView() override
     {
         g_signal_handler_disconnect(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId);


More information about the Libreoffice-commits mailing list