tdf#113699 Add Remove button to Select Address List dialog of MM Wizard
To make it easier to remove no longer needed data base connections
But only enable it when the list has items to remove
Change-Id: I288ec2e4d95ea570c2b42e0024c8e9bb4207b397
Reviewed-on: https://gerrit.libreoffice.org/76209
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Tested-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index 660b87da..1164c8d 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -807,6 +807,7 @@
#define ST_SALUTATIONELEMENT NC_("ST_SALUTATIONELEMENT", "Salutation elements")
#define ST_MATCHESTO NC_("ST_MATCHESTO", "Matches to field:")
#define ST_PREVIEW NC_("ST_PREVIEW", "Preview")
#define ST_DELETE_CONFIRM NC_("ST_DELETE_CONFIRM", "Do you want to delete this registered data source?")
#define STR_NOTASSIGNED NC_("STR_NOTASSIGNED", " not yet matched ")
#define STR_FILTER_ALL NC_("STR_FILTER_ALL", "All files")
diff --git a/sw/source/ui/dbui/addresslistdialog.cxx b/sw/source/ui/dbui/addresslistdialog.cxx
index f1d0f49..12818a3 100644
--- a/sw/source/ui/dbui/addresslistdialog.cxx
+++ b/sw/source/ui/dbui/addresslistdialog.cxx
@@ -52,6 +52,7 @@
#include <unotools/pathoptions.hxx>
#include <svl/urihelper.hxx>
#include <dbui.hrc>
#include <strings.hrc>
#include <view.hxx>
#include <unomid.h>
@@ -126,6 +127,7 @@ SwAddressListDialog::SwAddressListDialog(SwMailMergeAddressBlockPage* pParent)
, m_xConnecting(m_xBuilder->weld_label("connecting"))
, m_xListLB(m_xBuilder->weld_tree_view("sources"))
, m_xLoadListPB(m_xBuilder->weld_button("add"))
, m_xRemovePB(m_xBuilder->weld_button("remove"))
, m_xCreateListPB(m_xBuilder->weld_button("create"))
, m_xFilterPB(m_xBuilder->weld_button("filter"))
, m_xEditPB(m_xBuilder->weld_button("edit"))
@@ -141,6 +143,7 @@ SwAddressListDialog::SwAddressListDialog(SwMailMergeAddressBlockPage* pParent)
m_xDescriptionFI->set_label(sTemp);
m_xFilterPB->connect_clicked( LINK( this, SwAddressListDialog, FilterHdl_Impl ));
m_xLoadListPB->connect_clicked( LINK( this, SwAddressListDialog, LoadHdl_Impl ));
m_xRemovePB->connect_clicked( LINK(this, SwAddressListDialog, RemoveHdl_Impl ));
m_xCreateListPB->connect_clicked( LINK( this, SwAddressListDialog,CreateHdl_Impl ));
m_xEditPB->connect_clicked(LINK( this, SwAddressListDialog, EditHdl_Impl));
m_xTablePB->connect_clicked(LINK( this, SwAddressListDialog, TableSelectHdl_Impl));
@@ -207,6 +210,7 @@ SwAddressListDialog::SwAddressListDialog(SwMailMergeAddressBlockPage* pParent)
m_xOK->set_sensitive(m_xListLB->n_children() > 0 && bEnableOK);
m_xEditPB->set_sensitive(bEnableEdit);
m_xRemovePB->set_sensitive(m_xListLB->n_children() > 0);
m_xListLB->connect_changed(LINK(this, SwAddressListDialog, ListBoxSelectHdl_Impl));
TableSelectHdl(nullptr);
}
@@ -282,9 +286,35 @@ IMPL_LINK_NOARG(SwAddressListDialog, LoadHdl_Impl, weld::Button&, void)
m_xListLB->set_id(*m_xIter, OUString::number(reinterpret_cast<sal_Int64>(pUserData)));
m_xListLB->select(*m_xIter);
ListBoxSelectHdl_Impl(*m_xListLB);
m_xRemovePB->set_sensitive(true);
}
}
IMPL_LINK_NOARG(SwAddressListDialog, RemoveHdl_Impl, weld::Button&, void)
{
int nEntry = m_xListLB->get_selected_index();
if (nEntry != -1)
{
std::unique_ptr<weld::MessageDialog> xQuery(Application::CreateMessageDialog(getDialog(),
VclMessageType::Question, VclButtonsType::YesNo, SwResId(ST_DELETE_CONFIRM)));
if (xQuery->run() == RET_YES)
{ // Remove data source connection
SwDBManager::RevokeDataSource(m_xListLB->get_selected_text());
// Remove item from the list
m_xListLB->remove(nEntry);
// If this was the last item, disable the Remove & Edit buttons and enable Create
if (m_xListLB->n_children() < 1 )
{
m_xRemovePB->set_sensitive(false);
m_xEditPB->set_sensitive(false);
m_xCreateListPB->set_sensitive(true);
}
}
}
}
IMPL_LINK_NOARG(SwAddressListDialog, CreateHdl_Impl, weld::Button&, void)
{
SwCreateAddressListDialog aDlg(m_xDialog.get(), /*sInputURL*/OUString(), m_xAddressPage->GetWizard()->GetConfigItem());
@@ -351,6 +381,7 @@ IMPL_LINK_NOARG(SwAddressListDialog, CreateHdl_Impl, weld::Button&, void)
m_xListLB->select(*m_xIter);
ListBoxSelectHdl_Impl(*m_xListLB);
m_xCreateListPB->set_sensitive(false);
m_xRemovePB->set_sensitive(true);
}
catch (const Exception&)
{
diff --git a/sw/source/ui/dbui/addresslistdialog.hxx b/sw/source/ui/dbui/addresslistdialog.hxx
index aba1d8d..167cf6a 100644
--- a/sw/source/ui/dbui/addresslistdialog.hxx
+++ b/sw/source/ui/dbui/addresslistdialog.hxx
@@ -59,6 +59,7 @@ class SwAddressListDialog : public SfxDialogController
std::unique_ptr<weld::Label> m_xConnecting;
std::unique_ptr<weld::TreeView> m_xListLB;
std::unique_ptr<weld::Button> m_xLoadListPB;
std::unique_ptr<weld::Button> m_xRemovePB;
std::unique_ptr<weld::Button> m_xCreateListPB;
std::unique_ptr<weld::Button> m_xFilterPB;
std::unique_ptr<weld::Button> m_xEditPB;
@@ -71,6 +72,7 @@ class SwAddressListDialog : public SfxDialogController
DECL_LINK(FilterHdl_Impl, weld::Button&, void);
DECL_LINK(LoadHdl_Impl, weld::Button&, void);
DECL_LINK(CreateHdl_Impl, weld::Button&, void);
DECL_LINK(RemoveHdl_Impl, weld::Button&, void);
DECL_LINK(ListBoxSelectHdl_Impl, weld::TreeView&, void);
DECL_LINK(EditHdl_Impl, weld::Button&, void);
DECL_LINK(TableSelectHdl_Impl, weld::Button&, void);
diff --git a/sw/uiconfig/swriter/ui/selectaddressdialog.ui b/sw/uiconfig/swriter/ui/selectaddressdialog.ui
index fee2629..e815145 100644
--- a/sw/uiconfig/swriter/ui/selectaddressdialog.ui
+++ b/sw/uiconfig/swriter/ui/selectaddressdialog.ui
@@ -132,7 +132,6 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="homogeneous">True</property>
<property name="layout_style">start</property>
<child>
<object class="GtkButton" id="add">
<property name="label" translatable="yes" context="selectaddressdialog|add">_Add...</property>
@@ -148,6 +147,20 @@
</packing>
</child>
<child>
<object class="GtkButton" id="remove">
<property name="label" translatable="yes" context="selectaddressdialog|remove">_Remove</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="create">
<property name="label" translatable="yes" context="selectaddressdialog|create">_Create...</property>
<property name="visible">True</property>
@@ -158,7 +171,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@@ -172,7 +185,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>
@@ -186,7 +199,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
<child>
@@ -200,7 +213,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
<property name="position">5</property>
</packing>
</child>
</object>