summaryrefslogtreecommitdiff
path: root/cui
diff options
context:
space:
mode:
authorBalazs Varga <balazs.varga.extern@allotropia.de>2023-11-07 15:17:16 +0100
committerBalazs Varga <balazs.varga.extern@allotropia.de>2023-11-08 10:37:50 +0100
commite0dd56acca39524b63b708590f03a3cd6dcbe3ca (patch)
treef15c89d402170fb93753baa4fc25bab9e8b268e6 /cui
parent0ecb69d53864b582eb59533729ada01d85d383e6 (diff)
Related: tdf#158004 - UI: Part 20 - Unify lockdown behavior of
Options dialog for Databases Page. Change-Id: I573479df8048a9ff4d4aedc9780cbe0395900526 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159074 Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
Diffstat (limited to 'cui')
-rw-r--r--cui/source/options/doclinkdialog.cxx45
-rw-r--r--cui/source/options/doclinkdialog.hxx3
2 files changed, 48 insertions, 0 deletions
diff --git a/cui/source/options/doclinkdialog.cxx b/cui/source/options/doclinkdialog.cxx
index fac99002401c..f938399140ab 100644
--- a/cui/source/options/doclinkdialog.cxx
+++ b/cui/source/options/doclinkdialog.cxx
@@ -20,7 +20,11 @@
#include "doclinkdialog.hxx"
#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <comphelper/processfactory.hxx>
+#include <officecfg/Office/DataAccess.hxx>
#include <strings.hrc>
#include <svl/filenotation.hxx>
#include <vcl/svapp.hxx>
@@ -53,6 +57,9 @@ namespace svx
m_xURL->DisableHistory();
m_xURL->SetFilter(u"*.odb");
+ css::uno::Reference < css::uno::XComponentContext > xContext(::comphelper::getProcessComponentContext());
+ m_xReadWriteAccess = css::configuration::ReadWriteAccess::create(xContext, "*");
+
m_xName->connect_changed( LINK(this, ODocumentLinkDialog, OnEntryModified) );
m_xURL->connect_changed( LINK(this, ODocumentLinkDialog, OnComboBoxModified) );
m_xBrowseFile->connect_clicked( LINK(this, ODocumentLinkDialog, OnBrowseFile) );
@@ -81,6 +88,44 @@ namespace svx
void ODocumentLinkDialog::validate( )
{
m_xOK->set_sensitive((!m_xName->get_text().isEmpty()) && (!m_xURL->get_active_text().isEmpty()));
+
+ if (m_xOK->get_sensitive())
+ {
+ Reference<container::XNameAccess> xItemList = officecfg::Office::DataAccess::RegisteredNames::get();
+ Sequence< OUString > lNodeNames = xItemList->getElementNames();
+
+ for (const OUString& sNodeName : lNodeNames)
+ {
+ Reference<css::beans::XPropertySet> xSet;
+ xItemList->getByName(sNodeName) >>= xSet;
+
+ OUString aDatabaseName;
+ if (xSet->getPropertySetInfo()->hasPropertyByName("Name"))
+ xSet->getPropertyValue("Name") >>= aDatabaseName;
+
+ if (!aDatabaseName.isEmpty() && m_xName->get_text() == aDatabaseName)
+ {
+ const OUString aConfigPath = officecfg::Office::DataAccess::RegisteredNames::path() + "/" + sNodeName;
+ if (m_xReadWriteAccess->hasPropertyByHierarchicalName(aConfigPath + "/Name"))
+ {
+ css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath + "/Name");
+ bool bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
+
+ m_xURL->set_sensitive(!bReadOnly);
+ m_xBrowseFile->set_sensitive(!bReadOnly);
+ }
+
+ if (m_xReadWriteAccess->hasPropertyByHierarchicalName(aConfigPath + "/Location"))
+ {
+ css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath + "/Location");
+ bool bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
+
+ m_xName->set_sensitive(!bReadOnly);
+ }
+ break;
+ }
+ }
+ }
}
IMPL_LINK_NOARG(ODocumentLinkDialog, OnOk, weld::Button&, void)
diff --git a/cui/source/options/doclinkdialog.hxx b/cui/source/options/doclinkdialog.hxx
index 371dc6504fe9..3ea0d5027d0f 100644
--- a/cui/source/options/doclinkdialog.hxx
+++ b/cui/source/options/doclinkdialog.hxx
@@ -21,6 +21,7 @@
#include <vcl/weld.hxx>
#include <svtools/inettbc.hxx>
+#include <com/sun/star/configuration/ReadWriteAccess.hpp>
namespace svx
{
@@ -30,6 +31,8 @@ namespace svx
{
Link<const OUString&,bool> m_aNameValidator;
+ css::uno::Reference< css::configuration::XReadWriteAccess> m_xReadWriteAccess;
+
std::unique_ptr<weld::Button> m_xBrowseFile;
std::unique_ptr<weld::Entry> m_xName;
std::unique_ptr<weld::Button> m_xOK;