summaryrefslogtreecommitdiff
path: root/canvas
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2005-11-02 11:55:02 +0000
committerKurt Zenker <kz@openoffice.org>2005-11-02 11:55:02 +0000
commit2819e9eb89c99e7c462e7b0feead7db96150c9ee (patch)
tree8fd367af3966f6e04815f5f7618e12178501a28b /canvas
parent8574ae6db61c2a121eb1fa3e74ba614fe17c6a7c (diff)
INTEGRATION: CWS canvas02 (1.1.2); FILE ADDED
2005/10/19 16:47:52 thb 1.1.2.2: #i48939# Property names are of course case _sensitive_ 2005/10/19 13:34:08 thb 1.1.2.1: #i48939# Initial revision. Class provides a rather minimalistic XPropertySet helper implementation
Diffstat (limited to 'canvas')
-rw-r--r--canvas/source/tools/propertysethelper.cxx192
1 files changed, 192 insertions, 0 deletions
diff --git a/canvas/source/tools/propertysethelper.cxx b/canvas/source/tools/propertysethelper.cxx
new file mode 100644
index 000000000000..a06d5fbc3dc0
--- /dev/null
+++ b/canvas/source/tools/propertysethelper.cxx
@@ -0,0 +1,192 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: propertysethelper.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: kz $ $Date: 2005-11-02 12:55:02 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#include <canvas/propertysethelper.hxx>
+
+using namespace ::com::sun::star;
+
+namespace canvas
+{
+ namespace
+ {
+ void throwUnknown( const ::rtl::OUString& aPropertyName )
+ {
+ throw beans::UnknownPropertyException(
+ ::rtl::OUString::createFromAscii("PropertySetHelper: property ") +
+ aPropertyName +
+ ::rtl::OUString::createFromAscii(" not found."),
+ uno::Reference< uno::XInterface >()
+ );
+ }
+
+ void throwVeto( const ::rtl::OUString& aPropertyName )
+ {
+ throw beans::PropertyVetoException(
+ ::rtl::OUString::createFromAscii("PropertySetHelper: property ") +
+ aPropertyName +
+ ::rtl::OUString::createFromAscii(" access was vetoed."),
+ uno::Reference< uno::XInterface >() );
+ }
+
+ struct EntryComparator
+ {
+ bool operator()( const PropertySetHelper::MapType::MapEntry& rLHS,
+ const PropertySetHelper::MapType::MapEntry& rRHS )
+ {
+ return strcmp( rLHS.maKey,
+ rRHS.maKey ) < 0;
+ }
+ };
+ }
+
+ PropertySetHelper::PropertySetHelper() :
+ mpMap(),
+ maMapEntries()
+ {
+ }
+
+ PropertySetHelper::PropertySetHelper( const InputMap& rMap ) :
+ mpMap(),
+ maMapEntries()
+ {
+ initProperties(rMap);
+ }
+
+ void PropertySetHelper::initProperties( const InputMap& rMap )
+ {
+ mpMap.reset();
+ maMapEntries = rMap;
+
+ std::sort( maMapEntries.begin(),
+ maMapEntries.end(),
+ EntryComparator() );
+
+ if( !maMapEntries.empty() )
+ mpMap.reset( new MapType(&maMapEntries[0],
+ maMapEntries.size(),
+ true) );
+ }
+
+ void PropertySetHelper::addProperties( const InputMap& rMap )
+ {
+ InputMap aMerged( getPropertyMap() );
+ aMerged.insert( aMerged.end(),
+ rMap.begin(),
+ rMap.end() );
+
+ initProperties( aMerged );
+ }
+
+ bool PropertySetHelper::isPropertyName( const ::rtl::OUString& aPropertyName ) const
+ {
+ if( !mpMap.get() )
+ return false;
+
+ Callbacks aDummy;
+ return mpMap->lookup( aPropertyName,
+ aDummy );
+ }
+
+ uno::Reference< beans::XPropertySetInfo > PropertySetHelper::getPropertySetInfo() const
+ {
+ // we're a stealth property set
+ return uno::Reference< beans::XPropertySetInfo >();
+ }
+
+ void PropertySetHelper::setPropertyValue( const ::rtl::OUString& aPropertyName,
+ const uno::Any& aValue )
+ {
+ Callbacks aCallbacks;
+ if( !mpMap.get() ||
+ !mpMap->lookup( aPropertyName,
+ aCallbacks ) )
+ {
+ throwUnknown( aPropertyName );
+ }
+
+ if( aCallbacks.setter.empty() )
+ throwVeto( aPropertyName );
+
+ aCallbacks.setter(aValue);
+ }
+
+ uno::Any PropertySetHelper::getPropertyValue( const ::rtl::OUString& aPropertyName ) const
+ {
+ Callbacks aCallbacks;
+ if( !mpMap.get() ||
+ !mpMap->lookup( aPropertyName,
+ aCallbacks ) )
+ {
+ throwUnknown( aPropertyName );
+ }
+
+ if( !aCallbacks.getter.empty() )
+ return aCallbacks.getter();
+
+ // TODO(Q1): subtlety, empty getter method silently returns
+ // the empty any
+ return uno::Any();
+ }
+
+ void PropertySetHelper::addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
+ const uno::Reference< beans::XPropertyChangeListener >& xListener )
+ {
+ // check validity of property, but otherwise ignore the
+ // request
+ if( !isPropertyName( aPropertyName ) )
+ throwUnknown( aPropertyName );
+ }
+
+ void PropertySetHelper::removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
+ const uno::Reference< beans::XPropertyChangeListener >& xListener )
+ {
+ // ignore request, no listener added in the first place
+ }
+
+ void PropertySetHelper::addVetoableChangeListener( const ::rtl::OUString& aPropertyName,
+ const uno::Reference< beans::XVetoableChangeListener >& xListener )
+ {
+ // check validity of property, but otherwise ignore the
+ // request
+ if( !isPropertyName( aPropertyName ) )
+ throwUnknown( aPropertyName );
+ }
+
+ void PropertySetHelper::removeVetoableChangeListener( const ::rtl::OUString& aPropertyName,
+ const uno::Reference< beans::XVetoableChangeListener >& xListener )
+ {
+ // ignore request, no listener added in the first place
+ }
+}