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 <[email protected]> Date: Mon Mar 5 13:57:56 2018 +0000 weld SfxSaveAsTemplateDialog Change-Id: Ia663102a2d871fdca093c0d33e5af5a79deebeb5 Reviewed-on: https://gerrit.libreoffice.org/50775 Tested-by: Jenkins <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> 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); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
