1*6d739b60SAndrew Rist /**************************************************************
2*6d739b60SAndrew Rist *
3*6d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*6d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*6d739b60SAndrew Rist * distributed with this work for additional information
6*6d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*6d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*6d739b60SAndrew Rist * "License"); you may not use this file except in compliance
9*6d739b60SAndrew Rist * with the License. You may obtain a copy of the License at
10*6d739b60SAndrew Rist *
11*6d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*6d739b60SAndrew Rist *
13*6d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*6d739b60SAndrew Rist * software distributed under the License is distributed on an
15*6d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*6d739b60SAndrew Rist * KIND, either express or implied. See the License for the
17*6d739b60SAndrew Rist * specific language governing permissions and limitations
18*6d739b60SAndrew Rist * under the License.
19*6d739b60SAndrew Rist *
20*6d739b60SAndrew Rist *************************************************************/
21*6d739b60SAndrew Rist
22*6d739b60SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_framework.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir //_________________________________________________________________________________________________________________
28cdf0e10cSrcweir // my own includes
29cdf0e10cSrcweir //_________________________________________________________________________________________________________________
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include "services.h"
32cdf0e10cSrcweir #include "services/modelwinservice.hxx"
33cdf0e10cSrcweir
34cdf0e10cSrcweir //_________________________________________________________________________________________________________________
35cdf0e10cSrcweir // interface includes
36cdf0e10cSrcweir //_________________________________________________________________________________________________________________
37cdf0e10cSrcweir
38cdf0e10cSrcweir #include <com/sun/star/awt/XControlModel.hpp>
39cdf0e10cSrcweir
40cdf0e10cSrcweir using namespace ::com::sun::star;
41cdf0e10cSrcweir
42cdf0e10cSrcweir //_________________________________________________________________________________________________________________
43cdf0e10cSrcweir // namespace
44cdf0e10cSrcweir //_________________________________________________________________________________________________________________
45cdf0e10cSrcweir
46cdf0e10cSrcweir namespace framework{
47cdf0e10cSrcweir
48cdf0e10cSrcweir //_________________________________________________________________________________________________________________
49cdf0e10cSrcweir // non exported definitions
50cdf0e10cSrcweir //_________________________________________________________________________________________________________________
51cdf0e10cSrcweir
52cdf0e10cSrcweir //_________________________________________________________________________________________________________________
53cdf0e10cSrcweir // declarations
54cdf0e10cSrcweir //_________________________________________________________________________________________________________________
55cdf0e10cSrcweir
56cdf0e10cSrcweir class Impl_ModelWinService
57cdf0e10cSrcweir {
58cdf0e10cSrcweir public:
59cdf0e10cSrcweir ~Impl_ModelWinService();
60cdf0e10cSrcweir
61cdf0e10cSrcweir static Impl_ModelWinService* getSingleInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rServiceManager );
62cdf0e10cSrcweir
63cdf0e10cSrcweir uno::Any getByName( const ::rtl::OUString& sName )
64cdf0e10cSrcweir throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException );
65cdf0e10cSrcweir
66cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > getElementNames()
67cdf0e10cSrcweir throw( uno::RuntimeException );
68cdf0e10cSrcweir
69cdf0e10cSrcweir sal_Bool hasByName( const ::rtl::OUString& sName )
70cdf0e10cSrcweir throw( uno::RuntimeException );
71cdf0e10cSrcweir
72cdf0e10cSrcweir uno::Type getElementType()
73cdf0e10cSrcweir throw( css::uno::RuntimeException );
74cdf0e10cSrcweir
75cdf0e10cSrcweir sal_Bool hasElements()
76cdf0e10cSrcweir throw( css::uno::RuntimeException );
77cdf0e10cSrcweir
78cdf0e10cSrcweir void registerModelForXWindow( const uno::Reference< awt::XWindow >& rWindow, const uno::Reference< awt::XControlModel >& rModel );
79cdf0e10cSrcweir
80cdf0e10cSrcweir void deregisterModelForXWindow( const uno::Reference< awt::XWindow >& rWindow );
81cdf0e10cSrcweir
82cdf0e10cSrcweir private:
83cdf0e10cSrcweir typedef BaseHash< uno::WeakReference< awt::XControlModel > > ModelWinMap;
84cdf0e10cSrcweir
85cdf0e10cSrcweir Impl_ModelWinService();
86cdf0e10cSrcweir Impl_ModelWinService( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rServiceManager );
87cdf0e10cSrcweir
88cdf0e10cSrcweir static Impl_ModelWinService* m_pModelWinService;
89cdf0e10cSrcweir
90cdf0e10cSrcweir ::com::sun::star::uno::WeakReference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceManager;
91cdf0e10cSrcweir ModelWinMap m_aModelMap;
92cdf0e10cSrcweir };
93cdf0e10cSrcweir
94cdf0e10cSrcweir Impl_ModelWinService* Impl_ModelWinService::m_pModelWinService = 0;
95cdf0e10cSrcweir
getSingleInstance(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rServiceManager)96cdf0e10cSrcweir Impl_ModelWinService* Impl_ModelWinService::getSingleInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rServiceManager )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
99cdf0e10cSrcweir if ( !m_pModelWinService )
100cdf0e10cSrcweir m_pModelWinService = new Impl_ModelWinService( rServiceManager );
101cdf0e10cSrcweir return m_pModelWinService;
102cdf0e10cSrcweir }
103cdf0e10cSrcweir
Impl_ModelWinService(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & rServiceManager)104cdf0e10cSrcweir Impl_ModelWinService::Impl_ModelWinService( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rServiceManager ) :
105cdf0e10cSrcweir m_xServiceManager( rServiceManager )
106cdf0e10cSrcweir {
107cdf0e10cSrcweir }
108cdf0e10cSrcweir
Impl_ModelWinService()109cdf0e10cSrcweir Impl_ModelWinService::Impl_ModelWinService()
110cdf0e10cSrcweir {
111cdf0e10cSrcweir }
112cdf0e10cSrcweir
~Impl_ModelWinService()113cdf0e10cSrcweir Impl_ModelWinService::~Impl_ModelWinService()
114cdf0e10cSrcweir {
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
registerModelForXWindow(const uno::Reference<awt::XWindow> & rWindow,const uno::Reference<awt::XControlModel> & rModel)117cdf0e10cSrcweir void Impl_ModelWinService::registerModelForXWindow( const uno::Reference< awt::XWindow >& rWindow, const uno::Reference< awt::XControlModel >& rModel )
118cdf0e10cSrcweir {
119cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
120cdf0e10cSrcweir
121cdf0e10cSrcweir ::rtl::OUString sName = rtl::OUString::valueOf( reinterpret_cast< sal_Int64 >((void*)rWindow.get()));
122cdf0e10cSrcweir ModelWinMap::iterator pIter = m_aModelMap.find( sName );
123cdf0e10cSrcweir if ( pIter != m_aModelMap.end() )
124cdf0e10cSrcweir pIter->second = rModel;
125cdf0e10cSrcweir else
126cdf0e10cSrcweir m_aModelMap[sName] = rModel;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
deregisterModelForXWindow(const uno::Reference<awt::XWindow> &)129cdf0e10cSrcweir void Impl_ModelWinService::deregisterModelForXWindow( const uno::Reference< awt::XWindow >& /*rWindow*/ )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir }
132cdf0e10cSrcweir
getByName(const::rtl::OUString & sName)133cdf0e10cSrcweir uno::Any Impl_ModelWinService::getByName( const ::rtl::OUString& sName )
134cdf0e10cSrcweir throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir uno::Any aAny;
137cdf0e10cSrcweir
138cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
139cdf0e10cSrcweir ModelWinMap::iterator pIter = m_aModelMap.find( sName );
140cdf0e10cSrcweir if ( pIter != m_aModelMap.end())
141cdf0e10cSrcweir {
142cdf0e10cSrcweir uno::Reference< awt::XControlModel > xModel( pIter->second );
143cdf0e10cSrcweir aAny = uno::makeAny(xModel);
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir return aAny;
147cdf0e10cSrcweir }
148cdf0e10cSrcweir
getElementNames()149cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > Impl_ModelWinService::getElementNames()
150cdf0e10cSrcweir throw( uno::RuntimeException )
151cdf0e10cSrcweir {
152cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
153cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > aResult( m_aModelMap.size() );
154cdf0e10cSrcweir
155cdf0e10cSrcweir sal_Int32 i = 0;
156cdf0e10cSrcweir ModelWinMap::const_iterator pIter = m_aModelMap.begin();
157cdf0e10cSrcweir while ( pIter != m_aModelMap.end())
158cdf0e10cSrcweir aResult[i++] = pIter->first;
159cdf0e10cSrcweir
160cdf0e10cSrcweir return aResult;
161cdf0e10cSrcweir }
162cdf0e10cSrcweir
hasByName(const::rtl::OUString & sName)163cdf0e10cSrcweir sal_Bool Impl_ModelWinService::hasByName( const ::rtl::OUString& sName )
164cdf0e10cSrcweir throw( uno::RuntimeException )
165cdf0e10cSrcweir {
166cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
167cdf0e10cSrcweir ModelWinMap::iterator pIter = m_aModelMap.find( sName );
168cdf0e10cSrcweir if ( pIter != m_aModelMap.end())
169cdf0e10cSrcweir return true;
170cdf0e10cSrcweir else
171cdf0e10cSrcweir return false;
172cdf0e10cSrcweir }
173cdf0e10cSrcweir
getElementType()174cdf0e10cSrcweir uno::Type Impl_ModelWinService::getElementType()
175cdf0e10cSrcweir throw( css::uno::RuntimeException )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir return ::getCppuType(( const uno::Reference< awt::XControlModel >*)NULL );
178cdf0e10cSrcweir }
179cdf0e10cSrcweir
hasElements()180cdf0e10cSrcweir sal_Bool Impl_ModelWinService::hasElements()
181cdf0e10cSrcweir throw( css::uno::RuntimeException )
182cdf0e10cSrcweir {
183cdf0e10cSrcweir osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
184cdf0e10cSrcweir return (m_aModelMap.size() > 0);
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
187cdf0e10cSrcweir //*****************************************************************************************************************
188cdf0e10cSrcweir // css::uno::XInterface, XTypeProvider, XServiceInfo
189cdf0e10cSrcweir //*****************************************************************************************************************
190cdf0e10cSrcweir
DEFINE_XINTERFACE_4(ModelWinService,OWeakObject,DIRECT_INTERFACE (css::lang::XTypeProvider),DIRECT_INTERFACE (css::lang::XServiceInfo),DIRECT_INTERFACE (css::container::XNameAccess),DIRECT_INTERFACE (css::container::XElementAccess))191cdf0e10cSrcweir DEFINE_XINTERFACE_4 ( ModelWinService ,
192cdf0e10cSrcweir OWeakObject ,
193cdf0e10cSrcweir DIRECT_INTERFACE(css::lang::XTypeProvider ),
194cdf0e10cSrcweir DIRECT_INTERFACE(css::lang::XServiceInfo ),
195cdf0e10cSrcweir DIRECT_INTERFACE(css::container::XNameAccess ),
196cdf0e10cSrcweir DIRECT_INTERFACE(css::container::XElementAccess )
197cdf0e10cSrcweir )
198cdf0e10cSrcweir
199cdf0e10cSrcweir DEFINE_XTYPEPROVIDER_4 ( ModelWinService ,
200cdf0e10cSrcweir css::lang::XTypeProvider ,
201cdf0e10cSrcweir css::lang::XServiceInfo ,
202cdf0e10cSrcweir css::container::XNameAccess ,
203cdf0e10cSrcweir css::container::XElementAccess
204cdf0e10cSrcweir )
205cdf0e10cSrcweir
206cdf0e10cSrcweir DEFINE_XSERVICEINFO_MULTISERVICE ( ModelWinService ,
207cdf0e10cSrcweir OWeakObject ,
208cdf0e10cSrcweir SERVICENAME_MODELWINSERVICE ,
209cdf0e10cSrcweir IMPLEMENTATIONNAME_MODELWINSERVICE
210cdf0e10cSrcweir )
211cdf0e10cSrcweir
212cdf0e10cSrcweir DEFINE_INIT_SERVICE ( ModelWinService,
213cdf0e10cSrcweir {
214cdf0e10cSrcweir }
215cdf0e10cSrcweir )
216cdf0e10cSrcweir
217cdf0e10cSrcweir //*****************************************************************************************************************
218cdf0e10cSrcweir // constructor
219cdf0e10cSrcweir //*****************************************************************************************************************
220cdf0e10cSrcweir ModelWinService::ModelWinService(const uno::Reference< lang::XMultiServiceFactory >& rServiceManager ) :
221cdf0e10cSrcweir m_xServiceManager( rServiceManager )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
~ModelWinService()225cdf0e10cSrcweir ModelWinService::~ModelWinService()
226cdf0e10cSrcweir {
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
registerModelForXWindow(const uno::Reference<awt::XWindow> & rWindow,const uno::Reference<awt::XControlModel> & rModel)229cdf0e10cSrcweir void ModelWinService::registerModelForXWindow( const uno::Reference< awt::XWindow >& rWindow, const uno::Reference< awt::XControlModel >& rModel )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir Impl_ModelWinService::getSingleInstance(m_xServiceManager)->registerModelForXWindow( rWindow, rModel );
232cdf0e10cSrcweir }
233cdf0e10cSrcweir
deregisterModelForXWindow(const uno::Reference<awt::XWindow> & rWindow)234cdf0e10cSrcweir void ModelWinService::deregisterModelForXWindow( const uno::Reference< awt::XWindow >& rWindow )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir Impl_ModelWinService::getSingleInstance(m_xServiceManager)->deregisterModelForXWindow( rWindow );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
getByName(const::rtl::OUString & sName)239cdf0e10cSrcweir uno::Any SAL_CALL ModelWinService::getByName( const ::rtl::OUString& sName )
240cdf0e10cSrcweir throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
241cdf0e10cSrcweir {
242cdf0e10cSrcweir return Impl_ModelWinService::getSingleInstance(m_xServiceManager)->getByName( sName );
243cdf0e10cSrcweir }
244cdf0e10cSrcweir
getElementNames()245cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > SAL_CALL ModelWinService::getElementNames()
246cdf0e10cSrcweir throw( uno::RuntimeException )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir return Impl_ModelWinService::getSingleInstance(m_xServiceManager)->getElementNames( );
249cdf0e10cSrcweir }
250cdf0e10cSrcweir
hasByName(const::rtl::OUString & sName)251cdf0e10cSrcweir sal_Bool SAL_CALL ModelWinService::hasByName( const ::rtl::OUString& sName )
252cdf0e10cSrcweir throw( uno::RuntimeException )
253cdf0e10cSrcweir {
254cdf0e10cSrcweir return Impl_ModelWinService::getSingleInstance(m_xServiceManager)->hasByName( sName );
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir //---------------------------------------------------------------------------------------------------------
258cdf0e10cSrcweir // XElementAccess
259cdf0e10cSrcweir //---------------------------------------------------------------------------------------------------------
getElementType()260cdf0e10cSrcweir uno::Type SAL_CALL ModelWinService::getElementType()
261cdf0e10cSrcweir throw( uno::RuntimeException )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir return ::getCppuType( (const uno::Reference< awt::XControlModel > *)NULL );
264cdf0e10cSrcweir }
265cdf0e10cSrcweir
hasElements()266cdf0e10cSrcweir sal_Bool SAL_CALL ModelWinService::hasElements()
267cdf0e10cSrcweir throw( uno::RuntimeException )
268cdf0e10cSrcweir {
269cdf0e10cSrcweir return Impl_ModelWinService::getSingleInstance(m_xServiceManager)->hasElements();
270cdf0e10cSrcweir }
271cdf0e10cSrcweir
272cdf0e10cSrcweir }
273