LibreOffice Module forms (master) 1
FormComponent.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include "cloneable.hxx"
23#include "propertybaghelper.hxx"
24#include "resettable.hxx"
25#include "windowstateguard.hxx"
26
27#include <com/sun/star/awt/XControl.hpp>
28#include <com/sun/star/beans/XPropertyAccess.hpp>
29#include <com/sun/star/beans/XPropertyContainer.hpp>
30#include <com/sun/star/container/XNamed.hpp>
31#include <com/sun/star/form/binding/XBindableValue.hpp>
32#include <com/sun/star/form/validation/XValidatableFormComponent.hpp>
33#include <com/sun/star/form/validation/XValidityConstraintListener.hpp>
34#include <com/sun/star/form/XBoundComponent.hpp>
35#include <com/sun/star/form/XBoundControl.hpp>
36#include <com/sun/star/form/XFormComponent.hpp>
37#include <com/sun/star/form/XLoadListener.hpp>
38#include <com/sun/star/form/XReset.hpp>
39#include <com/sun/star/io/XPersistObject.hpp>
40#include <com/sun/star/lang/XEventListener.hpp>
41#include <com/sun/star/lang/XServiceInfo.hpp>
42#include <com/sun/star/sdb/XColumn.hpp>
43#include <com/sun/star/sdb/XColumnUpdate.hpp>
44#include <com/sun/star/sdb/XRowSetChangeListener.hpp>
45#include <com/sun/star/sdbc/XRowSet.hpp>
46#include <com/sun/star/uno/XAggregation.hpp>
47#include <com/sun/star/uno/XComponentContext.hpp>
48#include <com/sun/star/util/XCloneable.hpp>
49#include <com/sun/star/util/XModifyListener.hpp>
50#include <com/sun/star/form/XLoadable.hpp>
51
55#include <comphelper/uno3.hxx>
63#include <osl/mutex.hxx>
64#include <rtl/ustring.hxx>
65
66
67namespace frm
68{
69
70
71 // default tab index for components
72 const sal_Int16 FRM_DEFAULT_TABINDEX = 0;
73
74 class OControlModel;
75
76
77 //= ControlModelLock
78
88 {
89 public:
91 :m_rModel( _rModel )
92 ,m_bLocked( false )
93 {
94 acquire();
95 }
96
98 {
99 if ( m_bLocked )
100 release();
101 }
102 inline void acquire();
103 inline void release();
104
105 OControlModel& getModel() const { return m_rModel; };
106
111 const sal_Int32 _nHandle,
112 const css::uno::Any& _rOldValue,
113 const css::uno::Any& _rNewValue
114 );
115
116 private:
118
121 std::vector< sal_Int32 > m_aHandles;
122 std::vector< css::uno::Any > m_aOldValues;
123 std::vector< css::uno::Any > m_aNewValues;
124
127 };
128
129
130//= OControl
131//= base class for form layer controls
132
133typedef ::cppu::ImplHelper3 < css::awt::XControl
134 , css::lang::XEventListener
135 , css::lang::XServiceInfo
137
139 ,public OControl_BASE
140{
141protected:
142 ::osl::Mutex m_aMutex;
143 css::uno::Reference< css::awt::XControl > m_xControl;
144 css::uno::Reference< css::uno::XAggregation>
146
147 css::uno::Reference< css::uno::XComponentContext >
150
151public:
176 OControl(
177 const css::uno::Reference< css::uno::XComponentContext >& _rFactory,
178 const OUString& _rAggregateService,
179 const bool _bSetDelegator = true
180 );
181
182protected:
183 virtual ~OControl() override;
184
191 void doSetDelegator();
192 void doResetDelegator();
193
194// UNO
196 virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& _rType ) override;
197
198// XTypeProvider
199 virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override;
200 virtual css::uno::Sequence< css::uno::Type> SAL_CALL getTypes() override;
201
202// OComponentHelper
203 virtual void SAL_CALL disposing() override;
204
205// XComponent (as base of XControl)
206 virtual void SAL_CALL dispose( ) override
207 { OComponentHelper::dispose(); }
208 virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener>& _rxListener) override
209 { OComponentHelper::addEventListener(_rxListener); }
210 virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener>& _rxListener) override
211 { OComponentHelper::removeEventListener(_rxListener); }
212
213// XEventListener
214 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
215
216// XServiceInfo
217 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
218 virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
219 virtual OUString SAL_CALL getImplementationName() override = 0;
220
221// XControl
222 virtual void SAL_CALL setContext(const css::uno::Reference<css::uno::XInterface>& Context) override;
223 virtual css::uno::Reference<css::uno::XInterface> SAL_CALL getContext() override;
224 virtual void SAL_CALL createPeer(const css::uno::Reference<css::awt::XToolkit>& Toolkit, const css::uno::Reference<css::awt::XWindowPeer>& Parent) override;
225 virtual css::uno::Reference<css::awt::XWindowPeer> SAL_CALL getPeer() override;
226 virtual sal_Bool SAL_CALL setModel(const css::uno::Reference<css::awt::XControlModel>& Model) override;
227 virtual css::uno::Reference<css::awt::XControlModel> SAL_CALL getModel() override;
228 virtual css::uno::Reference<css::awt::XView> SAL_CALL getView() override;
229 virtual void SAL_CALL setDesignMode(sal_Bool bOn) override;
230 virtual sal_Bool SAL_CALL isDesignMode() override;
231 virtual sal_Bool SAL_CALL isTransparent() override;
232
233protected:
234 virtual css::uno::Sequence< css::uno::Type> _getTypes();
235 // overwrite this and call the base class if you have additional types
236
237 css::uno::Sequence< OUString > getAggregateServiceNames() const;
238
239private:
241};
242
243// a form control implementing the XBoundControl interface
244typedef ::cppu::ImplHelper1 < css::form::XBoundControl
247 ,public OBoundControl_BASE
248{
249 bool m_bLocked : 1;
250
251public:
253 const css::uno::Reference< css::uno::XComponentContext >& _rxContext,
254 const OUString& _rAggregateService,
255 const bool _bSetDelegator = true
256 );
257
258 virtual ~OBoundControl() override;
259
261 virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& _rType ) override;
262
263 // XBoundControl
264 virtual sal_Bool SAL_CALL getLock() override;
265 virtual void SAL_CALL setLock(sal_Bool _bLock) override;
266 // default implementation just disables the controls, overwrite _setLock to change this behaviour
267
268 // XControl
269 virtual sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel >& Model) override;
270
271 // XEventListener
272 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
273
274 // OComponentHelper
275 virtual void SAL_CALL disposing() override;
276
277protected:
278 virtual css::uno::Sequence< css::uno::Type> _getTypes() override;
279 // implement the lock setting
280 void _setLock(bool _bLock);
281};
282
283
284//= OControlModel
285//= model of a form layer control
286
287//added for exporting OCX control
288#define INVALID_OBJ_ID_IN_MSO 0xFFFF
289
290typedef ::cppu::ImplHelper7 < css::form::XFormComponent
291 , css::io::XPersistObject
292 , css::container::XNamed
293 , css::lang::XServiceInfo
294 , css::util::XCloneable
295 , css::beans::XPropertyContainer
296 , css::beans::XPropertyAccess
298
300 ,public comphelper::OPropertySetAggregationHelper
301 ,public OControlModel_BASE
304{
305
306protected:
307 css::uno::Reference<css::uno::XComponentContext> m_xContext;
308
309 ::osl::Mutex m_aMutex;
310 oslInterlockedCount m_lockCount;
311
312 css::uno::Reference<css::uno::XInterface> m_xParent; // ParentComponent
314
315 const css::uno::Reference<css::uno::XComponentContext>&
316 getContext() const { return m_xContext; }
317
318// <properties>
319 OUString m_aName; // name of the control
320 OUString m_aTag; // tag for additional data
321 sal_Int16 m_nTabIndex; // index within the taborder
322 sal_Int16 m_nClassId; // type of the control
323 bool m_bNativeLook; // should the control use the native platform look?
324 bool m_bStandardTheme; // should the default control colors be 'standard' or use the native platform theme?
325 bool m_bGenerateVbEvents; // should the control generate fake vba events
326 //added for exporting OCX control
327 sal_Int16 m_nControlTypeinMSO; //keep the MS office control type for exporting to MS binary file
328 sal_uInt16 m_nObjIDinMSO; //keep the OCX control obj id for exporting to MS binary file
329// </properties>
330
331
332protected:
334 const css::uno::Reference< css::uno::XComponentContext>& _rFactory, // factory to create the aggregate with
335 const OUString& _rUnoControlModelTypeName, // service name of te model to aggregate
336 const OUString& rDefault = OUString(), // service name of the default control
337 const bool _bSetDelegator = true // set to sal_False if you want to call setDelegator later (after returning from this ctor)
338 );
340 const OControlModel* _pOriginal, // the original object to clone
341 const css::uno::Reference< css::uno::XComponentContext>& _rFactory, // factory to create the aggregate with
342 const bool _bCloneAggregate = true, // should the aggregate of the original be cloned, too?
343 const bool _bSetDelegator = true // set to sal_False if you want to call setDelegator later (after returning from this ctor)
344 );
345 virtual ~OControlModel() override;
346
353 virtual void clonedFrom( const OControlModel* _pOriginal );
354
355 using OComponentHelper::rBHelper;
356
357 virtual css::uno::Sequence< css::uno::Type> _getTypes();
358
359 void readHelpTextCompatibly(const css::uno::Reference< css::io::XObjectInputStream >& _rxInStream);
360 void writeHelpTextCompatibly(const css::uno::Reference< css::io::XObjectOutputStream >& _rxOutStream);
361
362 void doSetDelegator();
363 void doResetDelegator();
364
365 css::uno::Sequence< OUString > getAggregateServiceNames() const;
366
367public:
369 virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& _rType ) override;
370
371// XTypeProvider
372 virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override;
373 virtual css::uno::Sequence< css::uno::Type> SAL_CALL getTypes() override;
374
375// OComponentHelper
376 virtual void SAL_CALL disposing() override;
377
378// XNamed
379 virtual OUString SAL_CALL getName() override;
380 virtual void SAL_CALL setName(const OUString& aName) override;
381
382// XServiceInfo
383 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
384 virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
385 virtual OUString SAL_CALL getImplementationName() override = 0;
386
387// XServiceInfo - static version(s)
389 static css::uno::Sequence<OUString> getSupportedServiceNames_Static();
390
391// XPersistObject
392 virtual OUString SAL_CALL getServiceName() override = 0;
393 virtual void SAL_CALL
394 write(const css::uno::Reference< css::io::XObjectOutputStream>& _rxOutStream) override;
395 virtual void SAL_CALL
396 read(const css::uno::Reference< css::io::XObjectInputStream>& _rxInStream) override;
397
398// XChild (base of XFormComponent)
399 virtual css::uno::Reference<css::uno::XInterface> SAL_CALL getParent() override;
400 virtual void SAL_CALL setParent(const css::uno::Reference<css::uno::XInterface>& Parent) override;
401
402// XEventListener
403 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
404
405// XPropertySet
406 virtual void SAL_CALL getFastPropertyValue(css::uno::Any& rValue, sal_Int32 nHandle) const override;
407 virtual sal_Bool SAL_CALL convertFastPropertyValue(
408 css::uno::Any& _rConvertedValue, css::uno::Any& _rOldValue, sal_Int32 _nHandle, const css::uno::Any& _rValue ) override;
409 virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
410 using ::cppu::OPropertySetHelper::getFastPropertyValue;
411
412// css::beans::XPropertyState
413 virtual css::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle) override;
414 virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle) override;
415 virtual css::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const override;
416
417// XCloneable
418 virtual css::uno::Reference< css::util::XCloneable > SAL_CALL createClone( ) override = 0;
419
420// XPropertyContainer
421 virtual void SAL_CALL addProperty( const OUString& Name, ::sal_Int16 Attributes, const css::uno::Any& DefaultValue ) override;
422 virtual void SAL_CALL removeProperty( const OUString& Name ) override;
423
424// XPropertyAccess
425 virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getPropertyValues( ) override;
426 virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< css::beans::PropertyValue >& aProps ) override;
427
428protected:
429 using OPropertySetAggregationHelper::setPropertyValues;
430 using OPropertySetAggregationHelper::getPropertyValues;
431
432protected:
433 virtual void writeAggregate( const css::uno::Reference< css::io::XObjectOutputStream >& _rxOutStream ) const;
434 virtual void readAggregate( const css::uno::Reference< css::io::XObjectInputStream >& _rxInStream );
435
436protected:
437 // XPropertySet
438 virtual css::uno::Reference< css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() override;
439 // OPropertySetHelper
440 virtual cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
441
447 virtual void describeFixedProperties(
448 css::uno::Sequence< css::beans::Property >& /* [out] */ _rProps
449 ) const;
450
451 // IPropertyBagHelperContext
452 virtual ::osl::Mutex& getMutex() override;
454 css::uno::Sequence< css::beans::Property >& _out_rFixedProperties,
455 css::uno::Sequence< css::beans::Property >& _out_rAggregateProperties
456 ) const override;
457 virtual css::uno::Reference< css::beans::XMultiPropertySet >
458 getPropertiesInterface() override;
459
467 virtual void describeAggregateProperties(
468 css::uno::Sequence< css::beans::Property >& /* [out] */ _rAggregateProps
469 ) const;
470
471public:
472 struct LockAccess { friend class ControlModelLock; private: LockAccess() { } };
473
474 void lockInstance( LockAccess );
475 oslInterlockedCount unlockInstance( LockAccess );
476
478 const std::vector< sal_Int32 >& _rHandles,
479 const std::vector< css::uno::Any >& _rOldValues,
480 const std::vector< css::uno::Any >& _rNewValues,
482 );
483
484 ::osl::Mutex&
486};
487
488//= OBoundControlModel
489//= model of a form layer control which is bound to a data source field
490
491typedef ::cppu::ImplHelper4 < css::form::XLoadListener
492 , css::form::XReset
493 , css::beans::XPropertyChangeListener
494 , css::sdb::XRowSetChangeListener
496
497// separated into an own base class since derivees can disable the support for this
498// interface, thus we want to easily exclude it in the queryInterface and getTypes
499typedef ::cppu::ImplHelper1 < css::form::XBoundComponent
501
502// ditto
503typedef ::cppu::ImplHelper2 < css::form::binding::XBindableValue
504 , css::util::XModifyListener
506
507// ditto
508typedef ::cppu::ImplHelper2 < css::form::validation::XValidityConstraintListener
509 , css::form::validation::XValidatableFormComponent
511
518{
519protected:
521 {
524 eOther
525 };
526
527private:
528 css::uno::Reference< css::beans::XPropertySet >
530 // the form which controls supplies the field we bind to.
531 css::uno::Reference< css::form::XLoadable >
533
536 sal_Int32 m_nFieldType;
537 css::uno::Type m_aValuePropertyType;
539
545
546 css::uno::Reference< css::form::binding::XValueBinding >
548 css::uno::Reference< css::form::validation::XValidator >
550 css::uno::Type m_aExternalValueType;
551
552// <properties>
553 OUString m_aControlSource; // data source, name of the field
554 css::uno::Reference< css::beans::XPropertySet >
555 m_xLabelControl; // reference to a sibling control (model) which is our label
557// </properties>
558
561
562 bool m_bFormListening : 1; // are we currently a XLoadListener at our ambient form?
563 bool m_bLoaded : 1;
564 bool m_bRequired : 1;
565 const bool m_bCommitable : 1; // do we support XBoundComponent?
566 const bool m_bSupportsExternalBinding : 1; // do we support XBindableValue?
567 const bool m_bSupportsValidation : 1; // do we support XValidatable?
568 bool m_bForwardValueChanges : 1; // do we currently handle changes in the bound database field?
569 bool m_bTransferringValue : 1; // true if we're currently transferring our value to an external binding
570 bool m_bIsCurrentValueValid : 1; // flag specifying whether our current value is valid, relative to our external validator
571 bool m_bBindingControlsRO : 1; // is our ReadOnly property currently controlled by our external binding?
572 bool m_bBindingControlsEnable : 1; // is our Enabled property currently controlled by our external binding?
573
575
576protected:
578 // when setting the label for our control (property FM_PROP_CONTROLLABEL, member m_xLabelControl),
579 // we accept only objects supporting an XControlModel interface, an XServiceInfo interface and
580 // support for a service (XServiceInfo::supportsService) determined by this string.
581 // Any other arguments will throw an IllegalArgumentException.
582 // The default value is FM_COMPONENT_FIXEDTEXT.
583
584 css::uno::Reference< css::sdbc::XRowSet >
586 css::uno::Reference< css::sdb::XColumnUpdate >
588 css::uno::Reference< css::sdb::XColumn >
590
591protected:
593 const OUString& getControlSource( ) const { return m_aControlSource; }
594 bool isRequired() const { return m_bRequired; }
595 bool isLoaded() const { return m_bLoaded; }
596
597protected:
598
600 const css::uno::Reference< css::uno::XComponentContext>& _rxContext,
601 // factory to create the aggregate with
602 const OUString& _rUnoControlModelTypeName, // service name of te model to aggregate
603 const OUString& _rDefault, // service name of the default control
604 const bool _bCommitable, // is the control (model) committable?
605 const bool _bSupportExternalBinding, // set to sal_True if you want to support XBindableValue
606 const bool _bSupportsValidation // set to sal_True if you want to support XValidatable
607 );
609 const OBoundControlModel* _pOriginal, // the original object to clone
610 const css::uno::Reference< css::uno::XComponentContext>& _rxContext
611 // factory to create the aggregate with
612 );
613 virtual ~OBoundControlModel() override;
614
616 virtual void clonedFrom( const OControlModel* _pOriginal ) override;
617
650 const OUString& _rValuePropertyName,
651 sal_Int32 _nValuePropertyExternalHandle
652 );
653
663 const OUString& i_rValuePropertyName
664 );
665
674 void suspendValueListening( );
675
687 void resumeValueListening( );
688
697 void onValuePropertyChange( ControlModelLock& i_rControLock );
698
708 void startAggregatePropertyListening( const OUString& _rPropertyName );
709
716 virtual css::uno::Any
717 getDefaultForReset() const;
718
728 virtual css::uno::Any
730
743 virtual css::uno::Sequence< css::uno::Type >
745
756 virtual css::uno::Any
757 translateExternalValueToControlValue( const css::uno::Any& _rExternalValue ) const;
758
766 virtual css::uno::Any
768
778 bool _bPostReset
779 ) = 0;
780
795 void setControlValue(
796 const css::uno::Any& _rValue,
797 ValueChangeInstigator _eInstigator
798 );
810 virtual void doSetControlValue(
811 const css::uno::Any& _rValue
812 );
813
822 virtual css::uno::Any
823 getControlValue( ) const;
824
827 virtual void onConnectedDbColumn( const css::uno::Reference< css::uno::XInterface >& _rxForm );
830 virtual void onDisconnectedDbColumn();
831
835 virtual void onConnectedExternalValue( );
836
839 void onConnectedValidator( );
843
849 virtual bool approveDbColumnType(sal_Int32 _nColumnType);
850
859 virtual css::uno::Any
861
870 virtual css::uno::Any
872
877 void writeCommonProperties(const css::uno::Reference< css::io::XObjectOutputStream>& _rxOutStream);
878 void readCommonProperties(const css::uno::Reference< css::io::XObjectInputStream>& _rxInStream);
879 // the next method may be used in derived classes's read when an unknown version is encountered
881
893 virtual void resetNoBroadcast();
894
895 virtual css::uno::Sequence< css::uno::Type> _getTypes() override;
896
899 const css::uno::Reference< css::beans::XPropertySet>& _rxField
900 );
901 bool hasField() const
902 {
903 return m_xField.is();
904 }
905 sal_Int32 getFieldType() const
906 {
907 return m_nFieldType;
908 }
909
910 // OControlModel's property handling
911 virtual void describeFixedProperties(
912 css::uno::Sequence< css::beans::Property >& /* [out] */ _rProps
913 ) const override;
914
915public:
916 const css::uno::Reference< css::beans::XPropertySet>& getField() const
917 {
918 return m_xField;
919 }
920
921public:
922 // UNO link
924 virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& _rType ) override;
925
926 // OComponentHelper
927 virtual void SAL_CALL disposing() override;
928
929 // XReset
930 virtual void SAL_CALL reset( ) override;
931 virtual void SAL_CALL addResetListener( const css::uno::Reference< css::form::XResetListener >& aListener ) override;
932 virtual void SAL_CALL removeResetListener( const css::uno::Reference< css::form::XResetListener >& aListener ) override;
933
934 // XServiceInfo
935 virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames( ) override;
936
937 // XServiceInfo - static version
939 static css::uno::Sequence<OUString> getSupportedServiceNames_Static();
940
941 // XChild
942 virtual void SAL_CALL setParent( const css::uno::Reference< css::uno::XInterface >& Parent ) override;
943
944 // XPersistObject
945 virtual void SAL_CALL write( const css::uno::Reference< css::io::XObjectOutputStream >& OutStream ) override;
946 virtual void SAL_CALL read( const css::uno::Reference< css::io::XObjectInputStream >& InStream ) override;
947
948 // XBoundComponent
949 virtual sal_Bool SAL_CALL commit() override;
950
951 // XUpdateBroadcaster (base of XBoundComponent)
952 virtual void SAL_CALL addUpdateListener( const css::uno::Reference< css::form::XUpdateListener >& aListener ) override;
953 virtual void SAL_CALL removeUpdateListener( const css::uno::Reference< css::form::XUpdateListener >& aListener ) override;
954
955 // XPropertySet
956 virtual void SAL_CALL getFastPropertyValue(css::uno::Any& rValue, sal_Int32 nHandle) const override;
957 virtual sal_Bool SAL_CALL convertFastPropertyValue(
958 css::uno::Any& _rConvertedValue, css::uno::Any& _rOldValue, sal_Int32 _nHandle, const css::uno::Any& _rValue ) override;
959 virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
960 using ::cppu::OPropertySetHelper::getFastPropertyValue;
961
962// css::beans::XPropertyState
963 virtual css::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const override;
964
965// XEventListener
966 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
967
968// XPropertyChangeListener
969 virtual void SAL_CALL propertyChange( const css::beans::PropertyChangeEvent& evt ) override;
970
971 // XRowSetChangeListener
972 virtual void SAL_CALL onRowSetChanged( const css::lang::EventObject& i_Event ) override;
973
974// XLoadListener
975 virtual void SAL_CALL loaded( const css::lang::EventObject& aEvent ) override;
976 virtual void SAL_CALL unloading( const css::lang::EventObject& aEvent ) override;
977 virtual void SAL_CALL unloaded( const css::lang::EventObject& aEvent ) override;
978 virtual void SAL_CALL reloading( const css::lang::EventObject& aEvent ) override;
979 virtual void SAL_CALL reloaded( const css::lang::EventObject& aEvent ) override;
980
981protected:
982 // XBindableValue
983 virtual void SAL_CALL setValueBinding( const css::uno::Reference< css::form::binding::XValueBinding >& _rxBinding ) override;
984 virtual css::uno::Reference< css::form::binding::XValueBinding > SAL_CALL getValueBinding( ) override;
985
986 // XModifyListener
987 virtual void SAL_CALL modified( const css::lang::EventObject& _rEvent ) override;
988
989 // XValidatable
990 virtual void SAL_CALL setValidator( const css::uno::Reference< css::form::validation::XValidator >& Validator ) override;
991 virtual css::uno::Reference< css::form::validation::XValidator > SAL_CALL getValidator( ) override;
992
993 // XValidityConstraintListener
994 virtual void SAL_CALL validityConstraintChanged( const css::lang::EventObject& Source ) override;
995
996 // XValidatableFormComponent
997 virtual sal_Bool SAL_CALL isValid( ) override;
998 virtual css::uno::Any SAL_CALL getCurrentValue( ) override;
999 virtual void SAL_CALL addFormComponentValidityListener( const css::uno::Reference< css::form::validation::XFormComponentValidityListener >& Listener ) override;
1000 virtual void SAL_CALL removeFormComponentValidityListener( const css::uno::Reference< css::form::validation::XFormComponentValidityListener >& Listener ) override;
1001
1002protected:
1003 // OPropertyChangeListener
1004 virtual void
1005 _propertyChanged( const css::beans::PropertyChangeEvent& _rEvt ) override;
1006
1008 bool hasExternalValueBinding() const { return m_xExternalBinding.is(); }
1009
1010 // checks whether we currently have an external validator
1011 bool hasValidator() const { return m_xValidator.is(); }
1012
1020
1025 void transferExternalValueToControl( ControlModelLock& _rInstanceLock );
1026
1033 void transferControlValueToExternal( ControlModelLock& _rInstanceLock );
1034
1042
1047 const css::uno::Type&
1049
1058 void initFromField( const css::uno::Reference< css::sdbc::XRowSet>& _rxForm );
1059
1060private:
1061 void connectToField( const css::uno::Reference< css::sdbc::XRowSet>& _rxForm );
1062 void resetField();
1063
1080 void recheckValidity( bool _bForceNotification );
1081
1083 void implInitAggMultiplexer( );
1084
1086 void implInitValuePropertyListening( ) const;
1087
1093 void doFormListening( const bool _bStart );
1094
1095 bool isFormListening() const { return m_bFormListening; }
1096
1100
1114 bool _bFromReload
1115 );
1116
1123
1136 const css::uno::Reference< css::form::binding::XValueBinding >& _rxBinding,
1137 ControlModelLock& _rInstanceLock
1138 );
1139
1146
1154 void connectValidator(
1155 const css::uno::Reference< css::form::validation::XValidator >& _rxValidator
1156 );
1157
1165 void disconnectValidator( );
1166
1182 const css::uno::Reference< css::form::binding::XValueBinding >& _rxBinding
1183 );
1184};
1185
1186
1187 //= inlines
1188
1190 {
1192 m_bLocked = true;
1193 }
1195 {
1196 OSL_ENSURE( m_bLocked, "ControlModelLock::release: not locked!" );
1197 m_bLocked = false;
1198
1201 }
1202
1203
1204}
1205
1206
1207/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OComponentHelper(::osl::Mutex &rMutex)
class whose instances lock an OControlModel
ControlModelLock(const ControlModelLock &)=delete
OControlModel & getModel() const
std::vector< sal_Int32 > m_aHandles
void addPropertyNotification(const sal_Int32 _nHandle, const css::uno::Any &_rOldValue, const css::uno::Any &_rNewValue)
adds a property change notification, which is to be fired when the last lock on the model (in the cur...
ControlModelLock & operator=(const ControlModelLock &)=delete
std::vector< css::uno::Any > m_aNewValues
ControlModelLock(OControlModel &_rModel)
OControlModel & m_rModel
std::vector< css::uno::Any > m_aOldValues
void impl_disconnectDatabaseColumn_noNotify()
disconnects from a value supplier which is a database column
virtual css::uno::Any getDefaultForReset() const
returns the default which should be used when resetting the control
void transferControlValueToExternal(ControlModelLock &_rInstanceLock)
transfers the control value to the external binding @precond our own mutex is locked,...
void writeCommonProperties(const css::uno::Reference< css::io::XObjectOutputStream > &_rxOutStream)
We can't write (new) common properties in this base class, as the file format doesn't allow this (unf...
sal_Int32 getValuePropertyAggHandle() const
virtual css::uno::Any translateControlValueToValidatableValue() const
retrieves the current value of the control, in a shape which can be used with our external validator.
sal_Int32 m_nValuePropertyAggregateHandle
virtual css::uno::Any translateDbColumnToControlValue()=0
translates a db column value into a control value.
sal_Int32 getFieldType() const
OBoundControlModel(const css::uno::Reference< css::uno::XComponentContext > &_rxContext, const OUString &_rUnoControlModelTypeName, const OUString &_rDefault, const bool _bCommitable, const bool _bSupportExternalBinding, const bool _bSupportsValidation)
virtual void SAL_CALL unloading(const css::lang::EventObject &aEvent) override
bool hasExternalValueBinding() const
checks whether we currently have an external value binding in place
const bool m_bSupportsExternalBinding
virtual void SAL_CALL reloading(const css::lang::EventObject &aEvent) override
virtual void onConnectedDbColumn(const css::uno::Reference< css::uno::XInterface > &_rxForm)
called whenever a connection to a database column has been established
const css::uno::Type & getExternalValueType() const
returns the type which should be used to exchange data with our external value binding
void onValuePropertyChange(ControlModelLock &i_rControLock)
(to be) called when the value property changed
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
css::uno::Reference< css::form::binding::XValueBinding > m_xExternalBinding
virtual css::uno::Reference< css::form::validation::XValidator > SAL_CALL getValidator() override
virtual void doSetControlValue(const css::uno::Any &_rValue)
css::uno::Type m_aExternalValueType
virtual void onConnectedExternalValue()
called whenever a connection to an external supplier of values (XValueBinding) has been established
rtl::Reference<::comphelper::OPropertyChangeMultiplexer > m_pAggPropMultiplexer
bool impl_approveValueBinding_nolock(const css::uno::Reference< css::form::binding::XValueBinding > &_rxBinding)
called from within <member scope="css:::form::binding">XBindableValue::setValueBinding</member> to ap...
css::uno::Type m_aValuePropertyType
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL removeFormComponentValidityListener(const css::uno::Reference< css::form::validation::XFormComponentValidityListener > &Listener) override
void setControlValue(const css::uno::Any &_rValue, ValueChangeInstigator _eInstigator)
sets the given value as new current value for the control
void disconnectExternalValueBinding()
disconnects from an external value binding
void initFromField(const css::uno::Reference< css::sdbc::XRowSet > &_rxForm)
initializes the control from m_xField
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue) override
void connectToField(const css::uno::Reference< css::sdbc::XRowSet > &_rxForm)
virtual void SAL_CALL unloaded(const css::lang::EventObject &aEvent) override
void implInitAggMultiplexer()
initializes m_pAggPropMultiplexer
virtual void SAL_CALL disposing() override
virtual css::uno::Any translateControlValueToExternalValue() const
commits the current control value to our external value binding
css::uno::Reference< css::form::XLoadable > m_xAmbientForm
void initValueProperty(const OUString &_rValuePropertyName, sal_Int32 _nValuePropertyExternalHandle)
initializes the part of the class which is related to the control value.
void implInitValuePropertyListening() const
initializes listening at the value property
css::uno::Reference< css::sdb::XColumn > m_xColumn
virtual void describeFixedProperties(css::uno::Sequence< css::beans::Property > &_rProps) const override
describes the properties provided by this class, or its respective derived class
virtual void resetNoBroadcast()
called to reset the control to some kind of default.
css::uno::Reference< css::beans::XPropertySet > m_xField
const OUString & getControlSource() const
virtual css::uno::Any translateExternalValueToControlValue(const css::uno::Any &_rExternalValue) const
translates the given value, which was obtained from the current external value binding,...
virtual css::uno::Sequence< css::uno::Type > _getTypes() override
css::uno::Reference< css::beans::XPropertySet > m_xLabelControl
virtual void SAL_CALL onRowSetChanged(const css::lang::EventObject &i_Event) override
virtual void SAL_CALL write(const css::uno::Reference< css::io::XObjectOutputStream > &OutStream) override
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
virtual void SAL_CALL removeUpdateListener(const css::uno::Reference< css::form::XUpdateListener > &aListener) override
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &_rConvertedValue, css::uno::Any &_rOldValue, sal_Int32 _nHandle, const css::uno::Any &_rValue) override
virtual void clonedFrom(const OControlModel *_pOriginal) override
late ctor after cloning
virtual void SAL_CALL read(const css::uno::Reference< css::io::XObjectInputStream > &InStream) override
::comphelper::OInterfaceContainerHelper3< css::form::XUpdateListener > m_aUpdateListeners
virtual void SAL_CALL setParent(const css::uno::Reference< css::uno::XInterface > &Parent) override
void readCommonProperties(const css::uno::Reference< css::io::XObjectInputStream > &_rxInStream)
void connectExternalValueBinding(const css::uno::Reference< css::form::binding::XValueBinding > &_rxBinding, ControlModelLock &_rInstanceLock)
connects to an external value binding
virtual css::uno::Any getCurrentFormComponentValue() const
retrieves the current value of the form component
void connectValidator(const css::uno::Reference< css::form::validation::XValidator > &_rxValidator)
connects the component to an external validator
void calculateExternalValueType()
calculates the type which is to be used to communicate with the current external binding,...
virtual void SAL_CALL loaded(const css::lang::EventObject &aEvent) override
void resumeValueListening()
resumes listening at the value property
virtual void SAL_CALL addFormComponentValidityListener(const css::uno::Reference< css::form::validation::XFormComponentValidityListener > &Listener) override
void impl_setField_noNotify(const css::uno::Reference< css::beans::XPropertySet > &_rxField)
sets m_xField to the given new value, without notifying our listeners
virtual void SAL_CALL addResetListener(const css::uno::Reference< css::form::XResetListener > &aListener) override
virtual bool commitControlValueToDbColumn(bool _bPostReset)=0
commits the current control value to the database column we're bound to @precond we're properly bound...
css::uno::Reference< css::sdbc::XRowSet > m_xCursor
void impl_connectDatabaseColumn_noNotify(bool _bFromReload)
connects to a value supplier which is a database column.
void transferExternalValueToControl(ControlModelLock &_rInstanceLock)
transfers the current value of the active external binding to the control @precond we do have an acti...
virtual void SAL_CALL validityConstraintChanged(const css::lang::EventObject &Source) override
void suspendValueListening()
suspends listening at the value property
virtual css::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const override
const css::uno::Reference< css::beans::XPropertySet > & getField() const
virtual void SAL_CALL reset() override
css::uno::Reference< css::sdb::XColumnUpdate > m_xColumnUpdate
virtual void SAL_CALL setValidator(const css::uno::Reference< css::form::validation::XValidator > &Validator) override
void impl_determineAmbientForm_nothrow()
determines the new value of m_xAmbientForm
void onDisconnectedValidator()
called whenever an external validator has been revoked
virtual sal_Bool SAL_CALL isValid() override
static css::uno::Sequence< OUString > getSupportedServiceNames_Static()
void startAggregatePropertyListening(const OUString &_rPropertyName)
starts listening at the aggregate, for changes in the given property
void recheckValidity(bool _bForceNotification)
does a new validation of the control value
ValueChangeInstigator m_eControlValueChangeInstigator
virtual void onDisconnectedDbColumn()
called whenever a connection to a database column has been suspended
css::uno::Reference< css::form::validation::XValidator > m_xValidator
virtual css::uno::Reference< css::form::binding::XValueBinding > SAL_CALL getValueBinding() override
void doFormListening(const bool _bStart)
adds or removes the component as load listener to/from our form, and (if necessary) as RowSetChange l...
void onConnectedValidator()
called whenever an external validator has been registered
void disconnectValidator()
disconnects the component from its current an external validator
virtual void SAL_CALL setValueBinding(const css::uno::Reference< css::form::binding::XValueBinding > &_rxBinding) override
virtual css::uno::Any getControlValue() const
retrieves the current value of the control
::comphelper::OInterfaceContainerHelper3< css::form::validation::XFormComponentValidityListener > m_aFormComponentListeners
virtual css::uno::Any SAL_CALL getCurrentValue() override
virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent &evt) override
virtual void SAL_CALL addUpdateListener(const css::uno::Reference< css::form::XUpdateListener > &aListener) override
OBoundControlModel(const OBoundControlModel *_pOriginal, const css::uno::Reference< css::uno::XComponentContext > &_rxContext)
virtual void _propertyChanged(const css::beans::PropertyChangeEvent &_rEvt) override
virtual sal_Bool SAL_CALL commit() override
virtual bool approveDbColumnType(sal_Int32 _nColumnType)
nFieldType is the type of the field, on which the model will be linked.
virtual css::uno::Sequence< css::uno::Type > getSupportedBindingTypes()
returns the data types which the control could use to exchange data with an external value binding
virtual ~OBoundControlModel() override
virtual void SAL_CALL reloaded(const css::lang::EventObject &aEvent) override
void transferDbValueToControl()
transfers the very current value of the db column we're bound to the control @precond our own mutex i...
virtual void SAL_CALL removeResetListener(const css::uno::Reference< css::form::XResetListener > &aListener) override
void initOwnValueProperty(const OUString &i_rValuePropertyName)
initializes the part of the class which is related to the control value.
virtual void SAL_CALL modified(const css::lang::EventObject &_rEvent) override
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel > &Model) override
virtual ~OBoundControl() override
void _setLock(bool _bLock)
virtual void SAL_CALL disposing() override
virtual css::uno::Sequence< css::uno::Type > _getTypes() override
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
OBoundControl(const css::uno::Reference< css::uno::XComponentContext > &_rxContext, const OUString &_rAggregateService, const bool _bSetDelegator=true)
virtual sal_Bool SAL_CALL getLock() override
virtual void SAL_CALL setLock(sal_Bool _bLock) override
css::uno::Sequence< OUString > getAggregateServiceNames() const
virtual void describeFixedProperties(css::uno::Sequence< css::beans::Property > &_rProps) const
describes the properties provided by this class, or its respective derived class
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
virtual ::osl::Mutex & getMutex() override
virtual void SAL_CALL read(const css::uno::Reference< css::io::XObjectInputStream > &_rxInStream) override
virtual css::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle) override
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getParent() override
virtual void SAL_CALL removeProperty(const OUString &Name) override
css::uno::Reference< css::uno::XComponentContext > m_xContext
virtual void SAL_CALL setParent(const css::uno::Reference< css::uno::XInterface > &Parent) override
PropertyBagHelper m_aPropertyBagHelper
virtual void readAggregate(const css::uno::Reference< css::io::XObjectInputStream > &_rxInStream)
virtual void writeAggregate(const css::uno::Reference< css::io::XObjectOutputStream > &_rxOutStream) const
virtual css::uno::Reference< css::beans::XMultiPropertySet > getPropertiesInterface() override
virtual css::uno::Sequence< css::uno::Type > _getTypes()
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
::osl::Mutex m_aMutex
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
OControlModel(const OControlModel *_pOriginal, const css::uno::Reference< css::uno::XComponentContext > &_rFactory, const bool _bCloneAggregate=true, const bool _bSetDelegator=true)
virtual void SAL_CALL addProperty(const OUString &Name, ::sal_Int16 Attributes, const css::uno::Any &DefaultValue) override
virtual void SAL_CALL disposing() override
virtual void describeFixedAndAggregateProperties(css::uno::Sequence< css::beans::Property > &_out_rFixedProperties, css::uno::Sequence< css::beans::Property > &_out_rAggregateProperties) const override
virtual OUString SAL_CALL getServiceName() override=0
oslInterlockedCount m_lockCount
::osl::Mutex & getInstanceMutex()
sal_uInt16 m_nObjIDinMSO
virtual css::uno::Reference< css::util::XCloneable > SAL_CALL createClone() override=0
void firePropertyChanges(const std::vector< sal_Int32 > &_rHandles, const std::vector< css::uno::Any > &_rOldValues, const std::vector< css::uno::Any > &_rNewValues, LockAccess)
const css::uno::Reference< css::uno::XComponentContext > & getContext() const
virtual css::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const override
virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle) override
virtual OUString SAL_CALL getImplementationName() override=0
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue) override
virtual void describeAggregateProperties(css::uno::Sequence< css::beans::Property > &_rAggregateProps) const
describes the properties of our aggregate
void writeHelpTextCompatibly(const css::uno::Reference< css::io::XObjectOutputStream > &_rxOutStream)
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
oslInterlockedCount unlockInstance(LockAccess)
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getPropertyValues() override
virtual void SAL_CALL setPropertyValues(const css::uno::Sequence< css::beans::PropertyValue > &aProps) override
css::uno::Reference< css::uno::XInterface > m_xParent
void lockInstance(LockAccess)
static css::uno::Sequence< OUString > getSupportedServiceNames_Static()
virtual ~OControlModel() override
virtual OUString SAL_CALL getName() override
virtual void SAL_CALL write(const css::uno::Reference< css::io::XObjectOutputStream > &_rxOutStream) override
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &_rConvertedValue, css::uno::Any &_rOldValue, sal_Int32 _nHandle, const css::uno::Any &_rValue) override
virtual void clonedFrom(const OControlModel *_pOriginal)
to be called after an OBoundControlModel (a derivee, respectively) has been cloned
virtual void SAL_CALL setName(const OUString &aName) override
void readHelpTextCompatibly(const css::uno::Reference< css::io::XObjectInputStream > &_rxInStream)
virtual cppu::IPropertyArrayHelper &SAL_CALL getInfoHelper() override
sal_Int16 m_nControlTypeinMSO
OControlModel(const css::uno::Reference< css::uno::XComponentContext > &_rFactory, const OUString &_rUnoControlModelTypeName, const OUString &rDefault=OUString(), const bool _bSetDelegator=true)
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
css::uno::Reference< css::uno::XAggregation > m_xAggregate
virtual css::uno::Reference< css::awt::XView > SAL_CALL getView() override
void impl_resetStateGuard_nothrow()
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getContext() override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
virtual void SAL_CALL setContext(const css::uno::Reference< css::uno::XInterface > &Context) override
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &_rxListener) override
void doSetDelegator()
sets the control as delegator at the aggregate
virtual sal_Bool SAL_CALL isDesignMode() override
virtual ~OControl() override
virtual void SAL_CALL createPeer(const css::uno::Reference< css::awt::XToolkit > &Toolkit, const css::uno::Reference< css::awt::XWindowPeer > &Parent) override
virtual css::uno::Reference< css::awt::XWindowPeer > SAL_CALL getPeer() override
void doResetDelegator()
virtual css::uno::Reference< css::awt::XControlModel > SAL_CALL getModel() override
virtual sal_Bool SAL_CALL isTransparent() override
virtual OUString SAL_CALL getImplementationName() override=0
OControl(const css::uno::Reference< css::uno::XComponentContext > &_rFactory, const OUString &_rAggregateService, const bool _bSetDelegator=true)
constructs a control
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &_rxListener) override
css::uno::Reference< css::uno::XComponentContext > m_xContext
virtual sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel > &Model) override
virtual void SAL_CALL disposing() override
css::uno::Reference< css::awt::XControl > m_xControl
virtual void SAL_CALL setDesignMode(sal_Bool bOn) override
virtual css::uno::Sequence< css::uno::Type > _getTypes()
::osl::Mutex m_aMutex
virtual void SAL_CALL dispose() override
WindowStateGuard m_aWindowStateGuard
css::uno::Sequence< OUString > getAggregateServiceNames() const
a helper class which monitors certain states of an XWindow2, and ensures that they're consistent with...
ListBox is a bit confusing / different from other form components, so here are a few notes:
Definition: BaseListBox.hxx:25
const sal_Int16 FRM_DEFAULT_TABINDEX
::cppu::ImplHelper1< css::form::XBoundControl > OBoundControl_BASE
::cppu::ImplHelper1< css::form::XBoundComponent > OBoundControlModel_COMMITTING
::cppu::ImplHelper4< css::form::XLoadListener, css::form::XReset, css::beans::XPropertyChangeListener, css::sdb::XRowSetChangeListener > OBoundControlModel_BASE1
::cppu::ImplHelper3< css::awt::XControl, css::lang::XEventListener, css::lang::XServiceInfo > OControl_BASE
::cppu::ImplHelper2< css::form::validation::XValidityConstraintListener, css::form::validation::XValidatableFormComponent > OBoundControlModel_VALIDATION
::cppu::ImplHelper2< css::form::binding::XBindableValue, css::util::XModifyListener > OBoundControlModel_BINDING
::cppu::ImplHelper7< css::form::XFormComponent, css::io::XPersistObject, css::container::XNamed, css::lang::XServiceInfo, css::util::XCloneable, css::beans::XPropertyContainer, css::beans::XPropertyAccess > OControlModel_BASE
unsigned char sal_Bool
#define DECLARE_UNO3_AGG_DEFAULTS(classname, baseclass)