summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--comphelper/source/misc/configuration.cxx13
-rw-r--r--configmgr/source/readwriteaccess.cxx13
-rw-r--r--include/comphelper/configuration.hxx25
-rw-r--r--offapi/com/sun/star/configuration/XReadWriteAccess.idl4
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;
};
}; }; }; };