[Libreoffice-commits] core.git: Branch 'distro/collabora/co-2021' - 2 commits - sw/inc sw/source sw/uiconfig
GülÅah Köse (via logerrit)
logerrit at kemper.freedesktop.org
Fri Apr 9 21:38:07 UTC 2021
sw/inc/strings.hrc | 3 +
sw/inc/view.hxx | 6 +++
sw/source/ui/dbui/mailmergewizard.cxx | 9 ++++
sw/source/ui/dbui/mmdocselectpage.cxx | 17 +++++++-
sw/source/ui/dbui/mmdocselectpage.hxx | 1
sw/source/uibase/uiview/view.cxx | 65 ++++++++++++++++++++++++++++++++-
sw/uiconfig/swriter/ui/mmselectpage.ui | 17 ++++++++
7 files changed, 114 insertions(+), 4 deletions(-)
New commits:
commit 4d2db8230fa7412dd523cf78fd0efe3609b6cb31
Author: Gülşah Köse <gulsah.kose at collabora.com>
AuthorDate: Wed Mar 31 22:48:03 2021 +0300
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Fri Apr 9 23:35:41 2021 +0200
tdf#139906 Prevent to use the Mail Merge wizard without data source.
When the file has a data source but that data source is not available in
LibreOffice we shouldn't let user continue mail merging.
Change-Id: Ic28101a12b2e33e78fd9b478fc41707786344e52
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113432
Tested-by: Jenkins
Reviewed-by: Gülşah Köse <gulsah.kose at collabora.com>
diff --git a/sw/source/ui/dbui/mailmergewizard.cxx b/sw/source/ui/dbui/mailmergewizard.cxx
index bb10a2a9a0da..87116262facf 100644
--- a/sw/source/ui/dbui/mailmergewizard.cxx
+++ b/sw/source/ui/dbui/mailmergewizard.cxx
@@ -142,7 +142,16 @@ void SwMailMergeWizard::enterState( WizardState _nState )
switch(_nState)
{
case MM_DOCUMENTSELECTPAGE:
+ {
bEnablePrev = false; // the first page
+
+ OUString sDataSourceName = GetSwView()->GetDataSourceName();
+ if(!sDataSourceName.isEmpty() &&
+ !SwView::IsDataSourceAvailable(sDataSourceName))
+ {
+ bEnableNext = false;
+ }
+ }
break;
case MM_ADDRESSBLOCKPAGE :
bEnableNext = m_xConfigItem->GetResultSet().is();
diff --git a/sw/source/ui/dbui/mmdocselectpage.cxx b/sw/source/ui/dbui/mmdocselectpage.cxx
index f19089126a03..a83a7e727f7b 100644
--- a/sw/source/ui/dbui/mmdocselectpage.cxx
+++ b/sw/source/ui/dbui/mmdocselectpage.cxx
@@ -49,6 +49,7 @@ SwMailMergeDocSelectPage::SwMailMergeDocSelectPage(weld::Container* pPage, SwMai
, m_xBrowseDocPB(m_xBuilder->weld_button("browsedoc"))
, m_xBrowseTemplatePB(m_xBuilder->weld_button("browsetemplate"))
, m_xRecentDocLB(m_xBuilder->weld_combo_box("recentdoclb"))
+ , m_xDataSourceWarningFT(m_xBuilder->weld_label("datasourcewarning"))
{
m_xCurrentDocRB->set_active(true);
DocSelectHdl(*m_xNewDocRB);
@@ -84,9 +85,21 @@ SwMailMergeDocSelectPage::~SwMailMergeDocSelectPage()
IMPL_LINK_NOARG(SwMailMergeDocSelectPage, DocSelectHdl, weld::ToggleButton&, void)
{
m_xRecentDocLB->set_sensitive(m_xRecentDocRB->get_active());
-
m_pWizard->UpdateRoadmap();
- m_pWizard->enableButtons(WizardButtonFlags::NEXT, m_pWizard->isStateEnabled(MM_OUTPUTTYPETPAGE));
+ OUString sDataSourceName = m_pWizard->GetSwView()->GetDataSourceName();
+
+ if(m_xCurrentDocRB->get_active() &&
+ !sDataSourceName.isEmpty() &&
+ !SwView::IsDataSourceAvailable(sDataSourceName))
+ {
+ m_xDataSourceWarningFT->show();
+ m_pWizard->enableButtons(WizardButtonFlags::NEXT, false);
+ }
+ else
+ {
+ m_xDataSourceWarningFT->hide();
+ m_pWizard->enableButtons(WizardButtonFlags::NEXT, m_pWizard->isStateEnabled(MM_OUTPUTTYPETPAGE));
+ }
}
IMPL_LINK(SwMailMergeDocSelectPage, FileSelectHdl, weld::Button&, rButton, void)
diff --git a/sw/source/ui/dbui/mmdocselectpage.hxx b/sw/source/ui/dbui/mmdocselectpage.hxx
index 88ac9e40dc8d..67cea59b6450 100644
--- a/sw/source/ui/dbui/mmdocselectpage.hxx
+++ b/sw/source/ui/dbui/mmdocselectpage.hxx
@@ -39,6 +39,7 @@ class SwMailMergeDocSelectPage : public vcl::OWizardPage
std::unique_ptr<weld::Button> m_xBrowseDocPB;
std::unique_ptr<weld::Button> m_xBrowseTemplatePB;
std::unique_ptr<weld::ComboBox> m_xRecentDocLB;
+ std::unique_ptr<weld::Label> m_xDataSourceWarningFT;
DECL_LINK(DocSelectHdl, weld::ToggleButton&, void);
DECL_LINK(FileSelectHdl, weld::Button&, void);
diff --git a/sw/uiconfig/swriter/ui/mmselectpage.ui b/sw/uiconfig/swriter/ui/mmselectpage.ui
index 124f91b38c99..dd2f71529348 100644
--- a/sw/uiconfig/swriter/ui/mmselectpage.ui
+++ b/sw/uiconfig/swriter/ui/mmselectpage.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.36.0 -->
+<!-- Generated with glade 3.22.2 -->
<interface domain="sw">
<requires lib="gtk+" version="3.20"/>
<object class="GtkBox" id="MMSelectPage">
@@ -192,6 +192,21 @@
</child>
</object>
</child>
+ <child>
+ <object class="GtkLabel" id="datasourcewarning">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes" context="mmselectpage|extended_tip|datasourcewarning">Data source of the current document is not registered.</property>
+ <attributes>
+ <attribute name="foreground" value="#cccc00000000"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">8</property>
+ </packing>
+ </child>
</object>
</child>
<child type="label">
commit 330bfa09d825b4a5827f45d5cd3d19086ff2c692
Author: Gülşah Köse <gulsah.kose at collabora.com>
AuthorDate: Mon Mar 29 11:52:05 2021 +0300
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Fri Apr 9 23:35:25 2021 +0200
tdf#139906 Show warning message when data source is not avaible.
CurrentDatabaseDataSource config item holds a database name for a
specific file. When document has CurrentDatabaseDataSource config
item but LibreOffice doesn't have in registered databases we should
notify the user at load time and put a button to fix the problem.
Change-Id: Ia0a6fd53985fc2fb82ce37d3962b3f479c20a647
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113296
Tested-by: Jenkins
Reviewed-by: Gülşah Köse <gulsah.kose at collabora.com>
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index e5f20d867d2d..9a924698a82e 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -1384,6 +1384,9 @@
#define STR_AUTOMARK_NO NC_("createautomarkdialog|no", "No")
#define STR_WRAP_PANEL_CUSTOM_STR NC_("sidebarwrap|customlabel", "Custom")
+#define STR_DATASOURCE_NOT_AVAILABLE NC_("STR_DATASOURCE_NOT_AVAILABLE", "Data source is not available. Mail merge wizard will not work properly.")
+#define STR_EXCHANGE_DATABASE NC_("STR_EXCHANGE_DATABASE", "Exchange Database")
+
#endif
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index 7e3feca87883..0cf34eccc881 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -542,6 +542,8 @@ public:
// form control has been activated
DECL_LINK( FormControlActivated, LinkParamNone*, void );
+ DECL_LINK( ExchangeDatabaseHandler, weld::Button&, void);
+
// edit links
void EditLinkDlg();
void AutoCaption(const sal_uInt16 nType, const SvGlobalName *pOleId = nullptr);
@@ -611,6 +613,10 @@ public:
std::shared_ptr<SwMailMergeConfigItem> const & GetMailMergeConfigItem() const;
std::shared_ptr<SwMailMergeConfigItem> EnsureMailMergeConfigItem(const SfxItemSet* pArgs = nullptr);
+ OUString GetDataSourceName() const;
+ static bool IsDataSourceAvailable(const OUString sDataSourceName);
+ void AppendDataSourceInfobar();
+
void ExecFormatPaintbrush(SfxRequest const &);
void StateFormatPaintbrush(SfxItemSet &);
diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx
index 3e10ab192e5a..9dd7b932de0b 100644
--- a/sw/source/uibase/uiview/view.cxx
+++ b/sw/source/uibase/uiview/view.cxx
@@ -34,6 +34,8 @@
#include <sfx2/docfile.hxx>
#include <sfx2/objface.hxx>
#include <sfx2/request.hxx>
+#include <sfx2/event.hxx>
+#include <sfx2/infobar.hxx>
#include <svx/ruler.hxx>
#include <svx/srchdlg.hxx>
#include <svx/fmshell.hxx>
@@ -66,6 +68,7 @@
#include <gloshdl.hxx>
#include <usrpref.hxx>
#include <srcview.hxx>
+#include <strings.hrc>
#include <doc.hxx>
#include <IDocumentUndoRedo.hxx>
#include <IDocumentSettingAccess.hxx>
@@ -84,6 +87,10 @@
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <com/sun/star/scanner/ScannerContext.hpp>
#include <com/sun/star/scanner/XScannerManager2.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/sdb/XDatabaseContext.hpp>
+#include <com/sun/star/sdb/DatabaseContext.hpp>
+#include <com/sun/star/sdbc/XDataSource.hpp>
#include <toolkit/helper/vclunohelper.hxx>
#include <sal/log.hxx>
@@ -105,6 +112,8 @@ using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::scanner;
+using namespace ::com::sun::star::sdb;
+using namespace ::com::sun::star::sdbc;
#define SWVIEWFLAGS SfxViewShellFlags::HAS_PRINTOPTIONS
@@ -203,6 +212,11 @@ IMPL_LINK_NOARG(SwView, FormControlActivated, LinkParamNone*, void)
}
}
+IMPL_LINK_NOARG(SwView, ExchangeDatabaseHandler, weld::Button&, void)
+{
+ GetDispatcher().Execute(FN_CHANGE_DBFIELD);
+}
+
namespace
{
uno::Reference<frame::XLayoutManager> getLayoutManager(const SfxViewFrame& rViewFrame)
@@ -1629,7 +1643,25 @@ void SwView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
}
else
{
+ if (auto pSfxEventHint = dynamic_cast<const SfxEventHint*>(&rHint))
+ {
+ switch( pSfxEventHint->GetEventId() )
+ {
+ case SfxEventHintId::CreateDoc:
+ case SfxEventHintId::OpenDoc:
+ {
+ OUString sDataSourceName = GetDataSourceName();
+ if ( !sDataSourceName.isEmpty() && !IsDataSourceAvailable(sDataSourceName))
+ AppendDataSourceInfobar();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
SfxHintId nId = rHint.GetId();
+
switch ( nId )
{
// sub shells will be destroyed by the
@@ -1710,7 +1742,6 @@ void SwView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
GetViewFrame()->GetBindings().Invalidate(aSlotRedLine);
}
break;
-
default: break;
}
}
@@ -1864,6 +1895,38 @@ void SwView::AddTransferable(SwTransferable& rTransferable)
GetViewImpl()->AddTransferable(rTransferable);
}
+OUString SwView::GetDataSourceName() const
+{
+ uno::Reference<lang::XMultiServiceFactory> xFactory(GetDocShell()->GetModel(), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xSettings(
+ xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
+ OUString sDataSourceName = "";
+ xSettings->getPropertyValue("CurrentDatabaseDataSource") >>= sDataSourceName;
+
+ return sDataSourceName;
+}
+
+bool SwView::IsDataSourceAvailable(const OUString sDataSourceName)
+{
+ uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
+ Reference< XDatabaseContext> xDatabaseContext = DatabaseContext::create(xContext);
+
+ return xDatabaseContext->hasByName(sDataSourceName);
+}
+
+void SwView::AppendDataSourceInfobar()
+{
+ auto pInfoBar = GetViewFrame()->AppendInfoBar("datasource", "",
+ SwResId(STR_DATASOURCE_NOT_AVAILABLE),
+ InfobarType::WARNING);
+ if (!pInfoBar)
+ return;
+
+ weld::Button& rBtn = pInfoBar->addButton();
+ rBtn.set_label(SwResId(STR_EXCHANGE_DATABASE));
+ rBtn.connect_clicked(LINK(this, SwView, ExchangeDatabaseHandler));
+}
+
namespace sw {
void InitPrintOptionsFromApplication(SwPrintData & o_rData, bool const bWeb)
More information about the Libreoffice-commits
mailing list