blob: 7486dfdd380eb4a021ab190e812a241a4b49285a [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef INCLUDED_CANVAS_PROPERTYSETHELPER_HXX
#define INCLUDED_CANVAS_PROPERTYSETHELPER_HXX
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <canvas/canvastools.hxx>
#include <boost/function.hpp>
#include <vector>
#include <memory>
namespace canvas
{
/** Really simplistic XPropertySet helper for properties.
This class provides easy access to properties, referenced via
ASCII strings. The name/property modification callbacks pairs
are passed into this class via a vector. Each time a property
is set or queried, the corresponding getter or setter callback
is called.
Use this class as a delegate for the corresponding
XPropertySet methods, and take care of UNO XInterface and lock
handling by yourself.
The core responsibility of this this class is the name/value
mapping for property sets.
*/
class PropertySetHelper
{
public:
typedef boost::function0< ::com::sun::star::uno::Any > GetterType;
typedef boost::function1<void, const ::com::sun::star::uno::Any&> SetterType;
struct Callbacks
{
GetterType getter;
SetterType setter;
};
typedef tools::ValueMap< Callbacks > MapType;
typedef std::vector< MapType::MapEntry > InputMap;
class MakeMap : public InputMap
{
public:
MakeMap(const char* name,
const GetterType& getter,
const SetterType& setter)
{
MapType::MapEntry aEntry={name, {getter, setter}};
this->push_back(aEntry);
}
MakeMap(const char* name,
const GetterType& getter)
{
MapType::MapEntry aEntry={name, {getter, SetterType()}};
this->push_back(aEntry);
}
MakeMap& operator()(const char* name,
const GetterType& getter,
const SetterType& setter)
{
MapType::MapEntry aEntry={name, {getter, setter}};
this->push_back(aEntry);
return *this;
}
MakeMap& operator()(const char* name,
const GetterType& getter)
{
MapType::MapEntry aEntry={name, {getter, SetterType()}};
this->push_back(aEntry);
return *this;
}
};
/** Create helper with zero properties
*/
PropertySetHelper();
/** Create helper with given name/value map
*/
explicit PropertySetHelper( const InputMap& rMap );
/** Init helper with new name/value map
@param rMap
Vector of name/function pointers. Each name is offered as
a property, and reading/writing to this property is passed
on to the given function pointer.
*/
void initProperties( const InputMap& rMap );
/** Add given properties to helper
@param rMap
Vector of name/function pointers. Each name is offered as
a property, and reading/writing to this property is passed
on to the given function pointer. These name/function
pairs are added to the already existing ones.
*/
void addProperties( const InputMap& rMap );
/** Checks whether the given string corresponds to a valid
property name.
@return true, if the given name maps to a known property.
*/
bool isPropertyName( const ::rtl::OUString& aPropertyName ) const;
/** Request the currently active map
*/
const InputMap& getPropertyMap() const { return maMapEntries; }
// XPropertySet implementation
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > getPropertySetInfo() const;
void setPropertyValue( const ::rtl::OUString& aPropertyName,
const ::com::sun::star::uno::Any& aValue );
::com::sun::star::uno::Any getPropertyValue( const ::rtl::OUString& PropertyName ) const;
void addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener );
void removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener );
void addVetoableChangeListener( const ::rtl::OUString& aPropertyName,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& xListener );
void removeVetoableChangeListener( const ::rtl::OUString& aPropertyName,
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& xListener );
private:
std::auto_ptr<MapType> mpMap;
InputMap maMapEntries;
};
}
#endif /* INCLUDED_CANVAS_PROPERTYSETHELPER_HXX */