Kaydet (Commit) 6ca3a21b authored tarafından Caolán McNamara's avatar Caolán McNamara

weld SfxSaveAsTemplateDialog

Change-Id: Ia663102a2d871fdca093c0d33e5af5a79deebeb5
Reviewed-on: https://gerrit.libreoffice.org/50775Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 5ad62544
...@@ -11,45 +11,37 @@ ...@@ -11,45 +11,37 @@
#define INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX #define INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
#include <sal/config.h> #include <sal/config.h>
#include <sfx2/dllapi.h>
#include <sfx2/doctempl.hxx> #include <sfx2/doctempl.hxx>
#include <vcl/dialog.hxx> #include <vcl/weld.hxx>
#include <vcl/button.hxx>
class Edit;
class ListBox;
class CheckBox;
// class SfxSaveAsTemplateDialog ------------------------------------------------------------------- // class SfxSaveAsTemplateDialog -------------------------------------------------------------------
class SfxSaveAsTemplateDialog
class SFX2_DLLPUBLIC SfxSaveAsTemplateDialog : public ModalDialog
{ {
private: private:
VclPtr<ListBox> mpLBCategory; std::unique_ptr<weld::Builder> m_xBuilder;
VclPtr<CheckBox> mpCBXDefault; std::unique_ptr<weld::Dialog> m_xDialog;
VclPtr<Edit> mpTemplateNameEdit; std::unique_ptr<weld::TreeView> m_xLBCategory;
VclPtr<PushButton> mpOKButton; std::unique_ptr<weld::CheckButton> m_xCBXDefault;
std::unique_ptr<weld::Entry> m_xTemplateNameEdit;
std::unique_ptr<weld::Button> m_xOKButton;
OUString msSelectedCategory; OUString msSelectedCategory;
OUString msTemplateName; OUString msTemplateName;
sal_uInt16 mnRegionPos; sal_uInt16 mnRegionPos;
std::vector<OUString> msCategories; std::vector<OUString> msCategories;
SfxDocumentTemplates maDocTemplates; SfxDocumentTemplates maDocTemplates;
css::uno::Reference< css::frame::XModel > m_xModel; css::uno::Reference<css::frame::XModel> m_xModel;
public: public:
DECL_LINK(OkClickHdl, Button*, void); DECL_LINK(OkClickHdl, weld::Button&, void);
DECL_LINK(TemplateNameEditHdl, Edit&, void); DECL_LINK(TemplateNameEditHdl, weld::Entry&, void);
DECL_LINK(SelectCategoryHdl, ListBox&, void); DECL_LINK(SelectCategoryHdl, weld::TreeView&, void);
void setDocumentModel (const css::uno::Reference<css::frame::XModel> &rModel);
void initialize(); void initialize();
void SetCategoryLBEntries(std::vector<OUString> names); void SetCategoryLBEntries(const std::vector<OUString>& names);
/*Check whether template name is unique or not in a region*/ /*Check whether template name is unique or not in a region*/
bool IsTemplateNameUnique(); bool IsTemplateNameUnique();
...@@ -57,11 +49,9 @@ public: ...@@ -57,11 +49,9 @@ public:
bool SaveTemplate(); bool SaveTemplate();
public: public:
SfxSaveAsTemplateDialog(weld::Window* pParent,
explicit SfxSaveAsTemplateDialog(); const css::uno::Reference<css::frame::XModel>& rModel);
short run() { return m_xDialog->run(); }
virtual ~SfxSaveAsTemplateDialog() override;
virtual void dispose() override;
}; };
#endif // INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX #endif // INCLUDED_SFX2_INC_SAVEASTEMPLATEDLG_HXX
......
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
#include <com/sun/star/document/XDocumentProperties.hpp> #include <com/sun/star/document/XDocumentProperties.hpp>
#include <guisaveas.hxx> #include <guisaveas.hxx>
#include <sfx2/saveastemplatedlg.hxx> #include <saveastemplatedlg.hxx>
#include <memory> #include <memory>
#include <cppuhelper/implbase.hxx> #include <cppuhelper/implbase.hxx>
#include <unotools/ucbstreamhelper.hxx> #include <unotools/ucbstreamhelper.hxx>
...@@ -795,9 +795,8 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) ...@@ -795,9 +795,8 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq)
case SID_DOCTEMPLATE: case SID_DOCTEMPLATE:
{ {
// save as document templates // save as document templates
ScopedVclPtrInstance<SfxSaveAsTemplateDialog> aDlg; SfxSaveAsTemplateDialog aDlg(rReq.GetFrameWeld(), GetModel());
aDlg->setDocumentModel(GetModel()); aDlg.run();
aDlg->Execute();
break; break;
} }
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/ */
#include <sfx2/saveastemplatedlg.hxx>
#include <comphelper/processfactory.hxx> #include <comphelper/processfactory.hxx>
#include <comphelper/string.hxx> #include <comphelper/string.hxx>
#include <comphelper/storagehelper.hxx> #include <comphelper/storagehelper.hxx>
...@@ -28,57 +26,42 @@ ...@@ -28,57 +26,42 @@
#include <sfx2/strings.hrc> #include <sfx2/strings.hrc>
#include <saveastemplatedlg.hxx>
using namespace ::com::sun::star; using namespace ::com::sun::star;
using namespace ::com::sun::star::frame; using namespace ::com::sun::star::frame;
// Class SfxSaveAsTemplateDialog -------------------------------------------------- // Class SfxSaveAsTemplateDialog --------------------------------------------------
SfxSaveAsTemplateDialog::SfxSaveAsTemplateDialog(): SfxSaveAsTemplateDialog::SfxSaveAsTemplateDialog(weld::Window* pParent, const uno::Reference<frame::XModel> &rModel)
ModalDialog(nullptr, "SaveAsTemplateDialog", "sfx/ui/saveastemplatedlg.ui"), : m_xBuilder(Application::CreateBuilder(pParent, "sfx/ui/saveastemplatedlg.ui"))
msSelectedCategory(OUString()), , m_xDialog(m_xBuilder->weld_dialog("SaveAsTemplateDialog"))
msTemplateName(OUString()), , m_xLBCategory(m_xBuilder->weld_tree_view("categorylb"))
mnRegionPos(0) , 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(); initialize();
SetCategoryLBEntries(msCategories); SetCategoryLBEntries(msCategories);
mpTemplateNameEdit->SetModifyHdl(LINK(this, SfxSaveAsTemplateDialog, TemplateNameEditHdl)); m_xTemplateNameEdit->connect_changed(LINK(this, SfxSaveAsTemplateDialog, TemplateNameEditHdl));
mpLBCategory->SetSelectHdl(LINK(this, SfxSaveAsTemplateDialog, SelectCategoryHdl)); m_xLBCategory->connect_changed(LINK(this, SfxSaveAsTemplateDialog, SelectCategoryHdl));
mpOKButton->SetClickHdl(LINK(this, SfxSaveAsTemplateDialog, OkClickHdl)); 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(); m_xOKButton->set_sensitive(false);
mpOKButton->SetText(SfxResId(STR_SAVEDOC)); m_xOKButton->set_label(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;
} }
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, std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Question,
OUString())); VclButtonsType::YesNo, OUString()));
if(!IsTemplateNameUnique()) if(!IsTemplateNameUnique())
{ {
OUString sQueryMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE)); OUString sQueryMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE));
...@@ -89,34 +72,34 @@ IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, OkClickHdl, Button*, void) ...@@ -89,34 +72,34 @@ IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, OkClickHdl, Button*, void)
return; return;
} }
if(SaveTemplate()) if (SaveTemplate())
Close(); m_xDialog->response(RET_OK);
else else
{ {
OUString sText( SfxResId(STR_ERROR_SAVEAS) ); OUString sText( SfxResId(STR_ERROR_SAVEAS) );
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(), VclMessageType::Warning, VclButtonsType::Ok, std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning,
sText.replaceFirst("$1", msTemplateName))); VclButtonsType::Ok, sText.replaceFirst("$1", msTemplateName)));
xBox->run(); xBox->run();
} }
} }
IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, TemplateNameEditHdl, Edit&, void) IMPL_LINK_NOARG(SfxSaveAsTemplateDialog, TemplateNameEditHdl, weld::Entry&, void)
{ {
msTemplateName = comphelper::string::strip(mpTemplateNameEdit->GetText(), ' '); msTemplateName = comphelper::string::strip(m_xTemplateNameEdit->get_text(), ' ');
SelectCategoryHdl(*mpLBCategory); 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(); msSelectedCategory = OUString();
mpOKButton->Disable(); m_xOKButton->set_sensitive(false);
} }
else else
{ {
msSelectedCategory = mpLBCategory->GetSelectedEntry(); msSelectedCategory = m_xLBCategory->get_selected();
mpOKButton->Enable(!msTemplateName.isEmpty()); m_xOKButton->set_sensitive(!msTemplateName.isEmpty());
} }
} }
...@@ -130,14 +113,14 @@ void SfxSaveAsTemplateDialog::initialize() ...@@ -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) for (size_t i = 0, n = rFolderNames.size(); i < n; ++i)
mpLBCategory->InsertEntry(aFolderNames[i], i+1); m_xLBCategory->insert(rFolderNames[i], i+1);
} }
mpLBCategory->SelectEntryPos(0); m_xLBCategory->select(0);
} }
bool SfxSaveAsTemplateDialog::IsTemplateNameUnique() bool SfxSaveAsTemplateDialog::IsTemplateNameUnique()
...@@ -173,7 +156,7 @@ bool SfxSaveAsTemplateDialog::SaveTemplate() ...@@ -173,7 +156,7 @@ bool SfxSaveAsTemplateDialog::SaveTemplate()
if (!bIsSaved) if (!bIsSaved)
return false; return false;
if ( !sURL.isEmpty() && mpCBXDefault->IsChecked() ) if (!sURL.isEmpty() && m_xCBXDefault->get_active())
{ {
OUString aServiceName; OUString aServiceName;
try try
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 --> <!-- Generated with glade 3.20.2 -->
<interface domain="sfx"> <interface domain="sfx">
<requires lib="gtk+" version="3.6"/> <requires lib="gtk+" version="3.20"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkListStore" id="categorylist"> <object class="GtkListStore" id="categorylist">
<columns> <columns>
<!-- column-name gchararray1 --> <!-- column-name gchararray1 -->
...@@ -19,6 +18,8 @@ ...@@ -19,6 +18,8 @@
<property name="border_width">6</property> <property name="border_width">6</property>
<property name="title" translatable="yes" context="saveastemplatedlg|SaveAsTemplateDialog">Save As Template</property> <property name="title" translatable="yes" context="saveastemplatedlg|SaveAsTemplateDialog">Save As Template</property>
<property name="modal">True</property> <property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">normal</property> <property name="type_hint">normal</property>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1"> <object class="GtkBox" id="dialog-vbox1">
...@@ -87,22 +88,25 @@ ...@@ -87,22 +88,25 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_bottom">6</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="row_spacing">12</property>
<property name="column_spacing">12</property> <property name="column_spacing">12</property>
<child> <child>
<object class="GtkBox" id="box1"> <object class="GtkBox" id="box1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">6</property> <property name="spacing">6</property>
<child> <child>
<object class="GtkLabel" id="create_label"> <object class="GtkLabel" id="create_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</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="label" translatable="yes" context="saveastemplatedlg|create_label">Template _Name</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="mnemonic_widget">name_entry</property> <property name="mnemonic_widget">name_entry</property>
<property name="xalign">0</property>
<attributes> <attributes>
<attribute name="weight" value="normal"/> <attribute name="weight" value="normal"/>
</attributes> </attributes>
...@@ -135,16 +139,17 @@ ...@@ -135,16 +139,17 @@
<object class="GtkBox" id="box2"> <object class="GtkBox" id="box2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">6</property> <property name="spacing">6</property>
<child> <child>
<object class="GtkLabel" id="select_label"> <object class="GtkLabel" id="select_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</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="label" translatable="yes" context="saveastemplatedlg|select_label">Template _Category</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="mnemonic_widget">categorylb:border</property> <property name="xalign">0</property>
<attributes> <attributes>
<attribute name="weight" value="normal"/> <attribute name="weight" value="normal"/>
</attributes> </attributes>
...@@ -156,15 +161,38 @@ ...@@ -156,15 +161,38 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkTreeView" id="categorylb:border"> <object class="GtkScrolledWindow" id="scroll">
<property name="width_request">300</property>
<property name="height_request">150</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">True</property>
<property name="border_width">2</property> <property name="hexpand">True</property>
<property name="model">categorylist</property> <property name="vexpand">True</property>
<child internal-child="selection"> <property name="shadow_type">in</property>
<object class="GtkTreeSelection" id="treeview-selection1"/> <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> </child>
</object> </object>
<packing> <packing>
...@@ -196,7 +224,7 @@ ...@@ -196,7 +224,7 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
...@@ -208,5 +236,8 @@ ...@@ -208,5 +236,8 @@
<action-widget response="-5">ok</action-widget> <action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget> <action-widget response="-6">cancel</action-widget>
</action-widgets> </action-widgets>
<child>
<placeholder/>
</child>
</object> </object>
</interface> </interface>
...@@ -1566,11 +1566,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString & ...@@ -1566,11 +1566,16 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
//d) remove the users of makeSvTreeViewBox //d) remove the users of makeSvTreeViewBox
extractModel(id, rMap); extractModel(id, rMap);
WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_SIMPLEMODE; WinBits nWinStyle = WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_SIMPLEMODE;
OUString sBorder = BuilderUtils::extractCustomProperty(rMap); if (m_bLegacy)
if (!sBorder.isEmpty()) {
nWinStyle |= WB_BORDER; OUString sBorder = BuilderUtils::extractCustomProperty(rMap);
if (!sBorder.isEmpty())
nWinStyle |= WB_BORDER;
}
//ListBox manages its own scrolling, //ListBox manages its own scrolling,
vcl::Window *pRealParent = prepareWidgetOwnScrolling(pParent, nWinStyle); vcl::Window *pRealParent = prepareWidgetOwnScrolling(pParent, nWinStyle);
if (pRealParent != pParent)
nWinStyle |= WB_BORDER;
xWindow = VclPtr<ListBox>::Create(pRealParent, nWinStyle); xWindow = VclPtr<ListBox>::Create(pRealParent, nWinStyle);
if (pRealParent != pParent) if (pRealParent != pParent)
cleanupWidgetOwnScrolling(pParent, xWindow, rMap); cleanupWidgetOwnScrolling(pParent, xWindow, rMap);
......
...@@ -2106,6 +2106,15 @@ public: ...@@ -2106,6 +2106,15 @@ public:
return (nRowHeight * nRows) + (nVerticalSeparator * (nRows + 1)); 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 virtual ~GtkInstanceTreeView() override
{ {
g_signal_handler_disconnect(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId); g_signal_handler_disconnect(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment