diff options
author | Balazs Varga <balazs.varga.extern@allotropia.de> | 2023-11-07 15:17:16 +0100 |
---|---|---|
committer | Balazs Varga <balazs.varga.extern@allotropia.de> | 2023-11-08 10:37:50 +0100 |
commit | e0dd56acca39524b63b708590f03a3cd6dcbe3ca (patch) | |
tree | f15c89d402170fb93753baa4fc25bab9e8b268e6 /cui | |
parent | 0ecb69d53864b582eb59533729ada01d85d383e6 (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.cxx | 45 | ||||
-rw-r--r-- | cui/source/options/doclinkdialog.hxx | 3 |
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; |