1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include "inspectormodelbase.hxx"
27*b1cdbd2cSJim Jagielski #include "pcrcommon.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
30*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
31*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include <comphelper/propertycontainerhelper.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski //........................................................................
36*b1cdbd2cSJim Jagielski namespace pcr
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski //........................................................................
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski #define MODEL_PROPERTY_ID_HAS_HELP_SECTION      2000
41*b1cdbd2cSJim Jagielski #define MODEL_PROPERTY_ID_MIN_HELP_TEXT_LINES   2001
42*b1cdbd2cSJim Jagielski #define MODEL_PROPERTY_ID_MAX_HELP_TEXT_LINES   2002
43*b1cdbd2cSJim Jagielski #define MODEL_PROPERTY_ID_IS_READ_ONLY          2003
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 	/** === begin UNO using === **/
46*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Reference;
47*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::XComponentContext;
48*b1cdbd2cSJim Jagielski     using ::com::sun::star::beans::XPropertySetInfo;
49*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::RuntimeException;
50*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Any;
51*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::IllegalArgumentException;
52*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Exception;
53*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Sequence;
54*b1cdbd2cSJim Jagielski     using ::com::sun::star::inspection::PropertyCategoryDescriptor;
55*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::makeAny;
56*b1cdbd2cSJim Jagielski     using ::com::sun::star::beans::Property;
57*b1cdbd2cSJim Jagielski 	/** === end UNO using === **/
58*b1cdbd2cSJim Jagielski     namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 	//====================================================================
61*b1cdbd2cSJim Jagielski 	//= InspectorModelProperties
62*b1cdbd2cSJim Jagielski 	//====================================================================
63*b1cdbd2cSJim Jagielski     /** helper class for implementing the property set related functionality
64*b1cdbd2cSJim Jagielski         of an ImplInspectorModel
65*b1cdbd2cSJim Jagielski     */
66*b1cdbd2cSJim Jagielski     class InspectorModelProperties : public ::comphelper::OPropertyContainerHelper
67*b1cdbd2cSJim Jagielski 	{
68*b1cdbd2cSJim Jagielski     private:
69*b1cdbd2cSJim Jagielski         ::osl::Mutex&           m_rMutex;
70*b1cdbd2cSJim Jagielski         sal_Bool                m_bHasHelpSection;
71*b1cdbd2cSJim Jagielski         sal_Int32               m_nMinHelpTextLines;
72*b1cdbd2cSJim Jagielski         sal_Int32               m_nMaxHelpTextLines;
73*b1cdbd2cSJim Jagielski         sal_Bool                m_bIsReadOnly;
74*b1cdbd2cSJim Jagielski         ::std::auto_ptr< ::cppu::IPropertyArrayHelper >
75*b1cdbd2cSJim Jagielski                                 m_pPropertyInfo;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski     public:
78*b1cdbd2cSJim Jagielski         InspectorModelProperties( ::osl::Mutex& _rMutex );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski         using ::comphelper::OPropertyContainerHelper::convertFastPropertyValue;
81*b1cdbd2cSJim Jagielski         using ::comphelper::OPropertyContainerHelper::setFastPropertyValue;
82*b1cdbd2cSJim Jagielski         using ::comphelper::OPropertyContainerHelper::getFastPropertyValue;
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski     public:
hasHelpSection() const85*b1cdbd2cSJim Jagielski         inline  sal_Bool    hasHelpSection() const { return m_bHasHelpSection; }
isReadOnly() const86*b1cdbd2cSJim Jagielski         inline  sal_Bool    isReadOnly() const { return m_bIsReadOnly; }
getMinHelpTextLines() const87*b1cdbd2cSJim Jagielski         inline  sal_Int32   getMinHelpTextLines() const { return m_nMinHelpTextLines; }
getMaxHelpTextLines() const88*b1cdbd2cSJim Jagielski         inline  sal_Int32   getMaxHelpTextLines() const { return m_nMaxHelpTextLines; }
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
91*b1cdbd2cSJim Jagielski                             getPropertySetInfo();
92*b1cdbd2cSJim Jagielski         ::cppu::IPropertyArrayHelper&
93*b1cdbd2cSJim Jagielski                             getInfoHelper();
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski         void    constructWithHelpSection( sal_Int32 _nMinHelpTextLines, sal_Int32 _nMaxHelpTextLines );
96*b1cdbd2cSJim Jagielski 	};
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	//====================================================================
99*b1cdbd2cSJim Jagielski 	//= InspectorModelProperties
100*b1cdbd2cSJim Jagielski 	//====================================================================
101*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
InspectorModelProperties(::osl::Mutex & _rMutex)102*b1cdbd2cSJim Jagielski     InspectorModelProperties::InspectorModelProperties( ::osl::Mutex& _rMutex )
103*b1cdbd2cSJim Jagielski         :m_rMutex( _rMutex )
104*b1cdbd2cSJim Jagielski         ,m_bHasHelpSection( sal_False )
105*b1cdbd2cSJim Jagielski         ,m_nMinHelpTextLines( 3 )
106*b1cdbd2cSJim Jagielski         ,m_nMaxHelpTextLines( 8 )
107*b1cdbd2cSJim Jagielski         ,m_bIsReadOnly( sal_False )
108*b1cdbd2cSJim Jagielski     {
109*b1cdbd2cSJim Jagielski         registerProperty(
110*b1cdbd2cSJim Jagielski             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HasHelpSection" ) ),
111*b1cdbd2cSJim Jagielski             MODEL_PROPERTY_ID_HAS_HELP_SECTION,
112*b1cdbd2cSJim Jagielski             PropertyAttribute::READONLY,
113*b1cdbd2cSJim Jagielski             &m_bHasHelpSection, ::getCppuType( &m_bHasHelpSection )
114*b1cdbd2cSJim Jagielski         );
115*b1cdbd2cSJim Jagielski         registerProperty(
116*b1cdbd2cSJim Jagielski             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MinHelpTextLines" ) ),
117*b1cdbd2cSJim Jagielski             MODEL_PROPERTY_ID_MIN_HELP_TEXT_LINES,
118*b1cdbd2cSJim Jagielski             PropertyAttribute::READONLY,
119*b1cdbd2cSJim Jagielski             &m_nMinHelpTextLines, ::getCppuType( &m_nMinHelpTextLines )
120*b1cdbd2cSJim Jagielski         );
121*b1cdbd2cSJim Jagielski         registerProperty(
122*b1cdbd2cSJim Jagielski             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MaxHelpTextLines" ) ),
123*b1cdbd2cSJim Jagielski             MODEL_PROPERTY_ID_MAX_HELP_TEXT_LINES,
124*b1cdbd2cSJim Jagielski             PropertyAttribute::READONLY,
125*b1cdbd2cSJim Jagielski             &m_nMaxHelpTextLines, ::getCppuType( &m_nMaxHelpTextLines )
126*b1cdbd2cSJim Jagielski         );
127*b1cdbd2cSJim Jagielski         registerProperty(
128*b1cdbd2cSJim Jagielski             ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsReadOnly" ) ),
129*b1cdbd2cSJim Jagielski             MODEL_PROPERTY_ID_IS_READ_ONLY,
130*b1cdbd2cSJim Jagielski             PropertyAttribute::BOUND,
131*b1cdbd2cSJim Jagielski             &m_bIsReadOnly, ::getCppuType( &m_bIsReadOnly )
132*b1cdbd2cSJim Jagielski         );
133*b1cdbd2cSJim Jagielski     }
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
constructWithHelpSection(sal_Int32 _nMinHelpTextLines,sal_Int32 _nMaxHelpTextLines)136*b1cdbd2cSJim Jagielski     void InspectorModelProperties::constructWithHelpSection( sal_Int32 _nMinHelpTextLines, sal_Int32 _nMaxHelpTextLines )
137*b1cdbd2cSJim Jagielski     {
138*b1cdbd2cSJim Jagielski         m_bHasHelpSection = sal_True;
139*b1cdbd2cSJim Jagielski         m_nMinHelpTextLines = _nMinHelpTextLines;
140*b1cdbd2cSJim Jagielski         m_nMaxHelpTextLines = _nMaxHelpTextLines;
141*b1cdbd2cSJim Jagielski         // no need to notify this, those properties are not bound. Also, the method should
142*b1cdbd2cSJim Jagielski         // only be used during construction phase, where we don't expect to have any listeners.
143*b1cdbd2cSJim Jagielski     }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getInfoHelper()146*b1cdbd2cSJim Jagielski     ::cppu::IPropertyArrayHelper& InspectorModelProperties::getInfoHelper()
147*b1cdbd2cSJim Jagielski     {
148*b1cdbd2cSJim Jagielski         ::osl::MutexGuard aGuard( m_rMutex );
149*b1cdbd2cSJim Jagielski         if ( m_pPropertyInfo.get() == NULL )
150*b1cdbd2cSJim Jagielski         {
151*b1cdbd2cSJim Jagielski             Sequence< Property > aProperties;
152*b1cdbd2cSJim Jagielski             describeProperties( aProperties );
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski             m_pPropertyInfo.reset( new ::cppu::OPropertyArrayHelper( aProperties ) );
155*b1cdbd2cSJim Jagielski         }
156*b1cdbd2cSJim Jagielski         return *m_pPropertyInfo;
157*b1cdbd2cSJim Jagielski     }
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
getPropertySetInfo()160*b1cdbd2cSJim Jagielski     Reference< XPropertySetInfo > InspectorModelProperties::getPropertySetInfo()
161*b1cdbd2cSJim Jagielski     {
162*b1cdbd2cSJim Jagielski         return ::cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() );
163*b1cdbd2cSJim Jagielski     }
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     //====================================================================
166*b1cdbd2cSJim Jagielski 	//= ImplInspectorModel
167*b1cdbd2cSJim Jagielski 	//====================================================================
ImplInspectorModel(const Reference<XComponentContext> & _rxContext)168*b1cdbd2cSJim Jagielski     ImplInspectorModel::ImplInspectorModel( const Reference< XComponentContext >& _rxContext )
169*b1cdbd2cSJim Jagielski         :ImplInspectorModel_PBase( GetBroadcastHelper() )
170*b1cdbd2cSJim Jagielski         ,m_aContext( _rxContext )
171*b1cdbd2cSJim Jagielski         ,m_pProperties( new InspectorModelProperties( m_aMutex ) )
172*b1cdbd2cSJim Jagielski     {
173*b1cdbd2cSJim Jagielski     }
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
~ImplInspectorModel()176*b1cdbd2cSJim Jagielski     ImplInspectorModel::~ImplInspectorModel()
177*b1cdbd2cSJim Jagielski     {
178*b1cdbd2cSJim Jagielski     }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
IMPLEMENT_FORWARD_XINTERFACE2(ImplInspectorModel,ImplInspectorModel_Base,ImplInspectorModel_PBase)181*b1cdbd2cSJim Jagielski     IMPLEMENT_FORWARD_XINTERFACE2( ImplInspectorModel, ImplInspectorModel_Base, ImplInspectorModel_PBase )
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
184*b1cdbd2cSJim Jagielski     IMPLEMENT_FORWARD_XTYPEPROVIDER2( ImplInspectorModel, ImplInspectorModel_Base, ImplInspectorModel_PBase )
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
187*b1cdbd2cSJim Jagielski     Reference< XPropertySetInfo > SAL_CALL ImplInspectorModel::getPropertySetInfo(  ) throw (RuntimeException)
188*b1cdbd2cSJim Jagielski     {
189*b1cdbd2cSJim Jagielski         return m_pProperties->getPropertySetInfo();
190*b1cdbd2cSJim Jagielski     }
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getInfoHelper()193*b1cdbd2cSJim Jagielski     ::cppu::IPropertyArrayHelper& SAL_CALL ImplInspectorModel::getInfoHelper()
194*b1cdbd2cSJim Jagielski     {
195*b1cdbd2cSJim Jagielski         return m_pProperties->getInfoHelper();
196*b1cdbd2cSJim Jagielski     }
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
convertFastPropertyValue(Any & rConvertedValue,Any & rOldValue,sal_Int32 nHandle,const Any & rValue)199*b1cdbd2cSJim Jagielski     sal_Bool SAL_CALL ImplInspectorModel::convertFastPropertyValue( Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle, const Any& rValue ) throw (IllegalArgumentException)
200*b1cdbd2cSJim Jagielski     {
201*b1cdbd2cSJim Jagielski         return m_pProperties->convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue );
202*b1cdbd2cSJim Jagielski     }
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any & rValue)205*b1cdbd2cSJim Jagielski     void SAL_CALL ImplInspectorModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception)
206*b1cdbd2cSJim Jagielski     {
207*b1cdbd2cSJim Jagielski         m_pProperties->setFastPropertyValue( nHandle, rValue );
208*b1cdbd2cSJim Jagielski     }
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getFastPropertyValue(Any & rValue,sal_Int32 nHandle) const211*b1cdbd2cSJim Jagielski     void SAL_CALL ImplInspectorModel::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const
212*b1cdbd2cSJim Jagielski     {
213*b1cdbd2cSJim Jagielski         m_pProperties->getFastPropertyValue( rValue, nHandle );
214*b1cdbd2cSJim Jagielski     }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getHasHelpSection()217*b1cdbd2cSJim Jagielski     ::sal_Bool SAL_CALL ImplInspectorModel::getHasHelpSection() throw (RuntimeException)
218*b1cdbd2cSJim Jagielski     {
219*b1cdbd2cSJim Jagielski         return m_pProperties->hasHelpSection();
220*b1cdbd2cSJim Jagielski     }
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getMinHelpTextLines()223*b1cdbd2cSJim Jagielski     ::sal_Int32 SAL_CALL ImplInspectorModel::getMinHelpTextLines() throw (RuntimeException)
224*b1cdbd2cSJim Jagielski     {
225*b1cdbd2cSJim Jagielski         return m_pProperties->getMinHelpTextLines();
226*b1cdbd2cSJim Jagielski     }
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getMaxHelpTextLines()229*b1cdbd2cSJim Jagielski     ::sal_Int32 SAL_CALL ImplInspectorModel::getMaxHelpTextLines() throw (RuntimeException)
230*b1cdbd2cSJim Jagielski     {
231*b1cdbd2cSJim Jagielski         return m_pProperties->getMaxHelpTextLines();
232*b1cdbd2cSJim Jagielski     }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getIsReadOnly()235*b1cdbd2cSJim Jagielski     ::sal_Bool SAL_CALL ImplInspectorModel::getIsReadOnly() throw (::com::sun::star::uno::RuntimeException)
236*b1cdbd2cSJim Jagielski     {
237*b1cdbd2cSJim Jagielski         return m_pProperties->isReadOnly();
238*b1cdbd2cSJim Jagielski     }
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setIsReadOnly(::sal_Bool _IsReadOnly)241*b1cdbd2cSJim Jagielski     void SAL_CALL ImplInspectorModel::setIsReadOnly( ::sal_Bool _IsReadOnly ) throw (::com::sun::star::uno::RuntimeException)
242*b1cdbd2cSJim Jagielski     {
243*b1cdbd2cSJim Jagielski         setFastPropertyValue( MODEL_PROPERTY_ID_IS_READ_ONLY, makeAny( _IsReadOnly ) );
244*b1cdbd2cSJim Jagielski     }
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
supportsService(const::rtl::OUString & ServiceName)247*b1cdbd2cSJim Jagielski     ::sal_Bool SAL_CALL ImplInspectorModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
248*b1cdbd2cSJim Jagielski     {
249*b1cdbd2cSJim Jagielski 		StlSyntaxSequence< ::rtl::OUString > aSupported( getSupportedServiceNames() );
250*b1cdbd2cSJim Jagielski         for (   StlSyntaxSequence< ::rtl::OUString >::const_iterator check = aSupported.begin();
251*b1cdbd2cSJim Jagielski                 check != aSupported.end();
252*b1cdbd2cSJim Jagielski                 ++check
253*b1cdbd2cSJim Jagielski             )
254*b1cdbd2cSJim Jagielski             if ( check->equals( ServiceName ) )
255*b1cdbd2cSJim Jagielski                 return sal_True;
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski         return sal_False;
258*b1cdbd2cSJim Jagielski     }
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
enableHelpSectionProperties(sal_Int32 _nMinHelpTextLines,sal_Int32 _nMaxHelpTextLines)261*b1cdbd2cSJim Jagielski     void ImplInspectorModel::enableHelpSectionProperties( sal_Int32 _nMinHelpTextLines, sal_Int32 _nMaxHelpTextLines )
262*b1cdbd2cSJim Jagielski     {
263*b1cdbd2cSJim Jagielski         m_pProperties->constructWithHelpSection( _nMinHelpTextLines, _nMaxHelpTextLines );
264*b1cdbd2cSJim Jagielski     }
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski //........................................................................
267*b1cdbd2cSJim Jagielski } // namespace pcr
268*b1cdbd2cSJim Jagielski //........................................................................
269