diff options
-rw-r--r-- | comphelper/source/misc/configuration.cxx | 13 | ||||
-rw-r--r-- | configmgr/source/readwriteaccess.cxx | 13 | ||||
-rw-r--r-- | include/comphelper/configuration.hxx | 25 | ||||
-rw-r--r-- | offapi/com/sun/star/configuration/XReadWriteAccess.idl | 4 |
4 files changed, 53 insertions, 2 deletions
diff --git a/comphelper/source/misc/configuration.cxx b/comphelper/source/misc/configuration.cxx index 7468c5592c62..371a515faf81 100644 --- a/comphelper/source/misc/configuration.cxx +++ b/comphelper/source/misc/configuration.cxx @@ -12,6 +12,7 @@ #include <cassert> #include <memory> +#include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/configuration/ReadOnlyAccess.hpp> #include <com/sun/star/configuration/ReadWriteAccess.hpp> #include <com/sun/star/configuration/XReadWriteAccess.hpp> @@ -116,11 +117,21 @@ comphelper::detail::ConfigurationWrapper::get( comphelper::detail::ConfigurationWrapper::ConfigurationWrapper( css::uno::Reference< css::uno::XComponentContext > const & context): context_(context), - access_(css::configuration::ReadOnlyAccess::create(context, "*")) + access_(css::configuration::ReadWriteAccess::create(context, "*")) {} comphelper::detail::ConfigurationWrapper::~ConfigurationWrapper() {} +bool comphelper::detail::ConfigurationWrapper::isReadOnly(OUString const & path) + const +{ +css::beans::Property SB(access_->getPropertyByHierarchicalName(path)); + return + (access_->getPropertyByHierarchicalName(path).Attributes + & css::beans::PropertyAttribute::READONLY) + != 0; +} + css::uno::Any comphelper::detail::ConfigurationWrapper::getPropertyValue( OUString const & path) const { diff --git a/configmgr/source/readwriteaccess.cxx b/configmgr/source/readwriteaccess.cxx index e503d9d556fe..19f0eb4a09b9 100644 --- a/configmgr/source/readwriteaccess.cxx +++ b/configmgr/source/readwriteaccess.cxx @@ -104,6 +104,19 @@ private: throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE { return getRoot()->getPendingChanges(); } + css::beans::Property SAL_CALL getPropertyByHierarchicalName( + OUString const & aHierarchicalName) + throw ( + css::beans::UnknownPropertyException, css::uno::RuntimeException, + std::exception) + SAL_OVERRIDE + { return getRoot()->getPropertyByHierarchicalName(aHierarchicalName); } + + sal_Bool SAL_CALL hasPropertyByHierarchicalName( + OUString const & aHierarchicalName) + throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE + { return getRoot()->hasPropertyByHierarchicalName(aHierarchicalName); } + rtl::Reference< RootAccess > getRoot(); css::uno::Reference< css::uno::XComponentContext > context_; diff --git a/include/comphelper/configuration.hxx b/include/comphelper/configuration.hxx index 2a0a593cf255..d4630c74ae64 100644 --- a/include/comphelper/configuration.hxx +++ b/include/comphelper/configuration.hxx @@ -93,6 +93,8 @@ public: SAL_DLLPRIVATE ~ConfigurationWrapper(); + bool isReadOnly(OUString const & path) const; + com::sun::star::uno::Any getPropertyValue(OUString const & path) const; void setPropertyValue( @@ -136,7 +138,11 @@ private: context_; com::sun::star::uno::Reference< - com::sun::star::container::XHierarchicalNameAccess > access_; + com::sun::star::configuration::XReadWriteAccess > access_; + // should really be an css.configuration.ReadOnlyAccess (with added + // css.beans.XHierarchicalPropertySetInfo), but then + // configmgr::Access::asProperty() would report all properties as + // READONLY, so isReadOnly() would not work }; /// @internal @@ -187,6 +193,15 @@ private: /// each given configuration property. template< typename T, typename U > struct ConfigurationProperty { + /// Get the read-only status of the given (non-localized) configuration + /// property. + static bool isReadOnly( + css::uno::Reference<css::uno::XComponentContext> const & context + = comphelper::getProcessComponentContext()) + { + return detail::ConfigurationWrapper::get(context).isReadOnly(T::path()); + } + /// Get the value of the given (non-localized) configuration property. /// /// For nillable properties, U is of type boost::optional<U'>. @@ -231,6 +246,14 @@ private: /// to access each given localized configuration property. template< typename T, typename U > struct ConfigurationLocalizedProperty { + /// Get the read-only status of the given localized configuration property. + static bool isReadOnly( + css::uno::Reference<css::uno::XComponentContext> const & context + = comphelper::getProcessComponentContext()) + { + return detail::ConfigurationWrapper::get(context).isReadOnly(T::path()); + } + /// Get the value of the given localized configuration property, for the /// locale currently set at the /// com.sun.star.configuration.theDefaultProvider. diff --git a/offapi/com/sun/star/configuration/XReadWriteAccess.idl b/offapi/com/sun/star/configuration/XReadWriteAccess.idl index b9c47327e370..9e3f95cbaa1f 100644 --- a/offapi/com/sun/star/configuration/XReadWriteAccess.idl +++ b/offapi/com/sun/star/configuration/XReadWriteAccess.idl @@ -10,6 +10,7 @@ #ifndef _COM_SUN_STAR_CONFIGURATION_XREADWRITEACCESS_IDL #define _COM_SUN_STAR_CONFIGURATION_XREADWRITEACCESS_IDL +#include <com/sun/star/beans/XHierarchicalPropertySetInfo.idl> #include <com/sun/star/container/XHierarchicalNameReplace.idl> #include <com/sun/star/util/XChangesBatch.idl> @@ -25,6 +26,9 @@ interface XReadWriteAccess { interface com::sun::star::container::XHierarchicalNameReplace; interface com::sun::star::util::XChangesBatch; + + // @since LibreOffice 4.5 + interface com::sun::star::beans::XHierarchicalPropertySetInfo; }; }; }; }; }; |