1*96de5490SAndrew Rist /**************************************************************
2*96de5490SAndrew Rist  *
3*96de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*96de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*96de5490SAndrew Rist  * distributed with this work for additional information
6*96de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*96de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*96de5490SAndrew Rist  * "License"); you may not use this file except in compliance
9*96de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*96de5490SAndrew Rist  *
11*96de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*96de5490SAndrew Rist  *
13*96de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*96de5490SAndrew Rist  * software distributed under the License is distributed on an
15*96de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*96de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
17*96de5490SAndrew Rist  * specific language governing permissions and limitations
18*96de5490SAndrew Rist  * under the License.
19*96de5490SAndrew Rist  *
20*96de5490SAndrew Rist  *************************************************************/
21*96de5490SAndrew Rist 
22*96de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "precompiled_dbaccess.hxx"
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "subcomponentloader.hxx"
27cdf0e10cSrcweir 
28cdf0e10cSrcweir /** === begin UNO includes === **/
29cdf0e10cSrcweir #include <com/sun/star/ucb/Command.hpp>
30cdf0e10cSrcweir #include <com/sun/star/frame/XController2.hpp>
31cdf0e10cSrcweir /** === end UNO includes === **/
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include <tools/diagnose_ex.h>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir //........................................................................
36cdf0e10cSrcweir namespace dbaccess
37cdf0e10cSrcweir {
38cdf0e10cSrcweir //........................................................................
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 	/** === begin UNO using === **/
41cdf0e10cSrcweir 	using ::com::sun::star::uno::Reference;
42cdf0e10cSrcweir 	using ::com::sun::star::uno::XInterface;
43cdf0e10cSrcweir 	using ::com::sun::star::uno::UNO_QUERY;
44cdf0e10cSrcweir 	using ::com::sun::star::uno::UNO_QUERY_THROW;
45cdf0e10cSrcweir 	using ::com::sun::star::uno::UNO_SET_THROW;
46cdf0e10cSrcweir 	using ::com::sun::star::uno::Exception;
47cdf0e10cSrcweir 	using ::com::sun::star::uno::RuntimeException;
48cdf0e10cSrcweir 	using ::com::sun::star::uno::Any;
49cdf0e10cSrcweir 	using ::com::sun::star::uno::makeAny;
50cdf0e10cSrcweir 	using ::com::sun::star::uno::Sequence;
51cdf0e10cSrcweir 	using ::com::sun::star::uno::Type;
52cdf0e10cSrcweir     using ::com::sun::star::frame::XController;
53cdf0e10cSrcweir     using ::com::sun::star::frame::XFrame;
54cdf0e10cSrcweir     using ::com::sun::star::awt::XWindow;
55cdf0e10cSrcweir     using ::com::sun::star::awt::WindowEvent;
56cdf0e10cSrcweir     using ::com::sun::star::lang::EventObject;
57cdf0e10cSrcweir     using ::com::sun::star::ucb::Command;
58cdf0e10cSrcweir     using ::com::sun::star::ucb::XCommandProcessor;
59cdf0e10cSrcweir     using ::com::sun::star::frame::XController2;
60cdf0e10cSrcweir     using ::com::sun::star::lang::XComponent;
61cdf0e10cSrcweir 	/** === end UNO using === **/
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 	//====================================================================
64cdf0e10cSrcweir 	//= SubComponentLoader
65cdf0e10cSrcweir 	//====================================================================
66cdf0e10cSrcweir     struct DBACCESS_DLLPRIVATE SubComponentLoader_Data
67cdf0e10cSrcweir     {
68cdf0e10cSrcweir         const Reference< XCommandProcessor >    xDocDefCommands;
69cdf0e10cSrcweir         const Reference< XComponent >           xNonDocComponent;
70cdf0e10cSrcweir         Reference< XWindow >                    xAppComponentWindow;
71cdf0e10cSrcweir 
SubComponentLoader_Datadbaccess::SubComponentLoader_Data72cdf0e10cSrcweir         SubComponentLoader_Data( const Reference< XCommandProcessor >& i_rDocumentDefinition )
73cdf0e10cSrcweir             :xDocDefCommands( i_rDocumentDefinition, UNO_SET_THROW )
74cdf0e10cSrcweir             ,xNonDocComponent()
75cdf0e10cSrcweir         {
76cdf0e10cSrcweir         }
77cdf0e10cSrcweir 
SubComponentLoader_Datadbaccess::SubComponentLoader_Data78cdf0e10cSrcweir         SubComponentLoader_Data( const Reference< XComponent >& i_rNonDocumentComponent )
79cdf0e10cSrcweir             :xDocDefCommands()
80cdf0e10cSrcweir             ,xNonDocComponent( i_rNonDocumentComponent, UNO_SET_THROW )
81cdf0e10cSrcweir         {
82cdf0e10cSrcweir         }
83cdf0e10cSrcweir     };
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 	//====================================================================
86cdf0e10cSrcweir 	//= helper
87cdf0e10cSrcweir 	//====================================================================
88cdf0e10cSrcweir     namespace
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir 	    //................................................................
lcl_onWindowShown_nothrow(const SubComponentLoader_Data & i_rData)91cdf0e10cSrcweir         void lcl_onWindowShown_nothrow( const SubComponentLoader_Data& i_rData )
92cdf0e10cSrcweir         {
93cdf0e10cSrcweir             try
94cdf0e10cSrcweir             {
95cdf0e10cSrcweir                 if ( i_rData.xDocDefCommands.is() )
96cdf0e10cSrcweir                 {
97cdf0e10cSrcweir                     Command aCommandOpen;
98cdf0e10cSrcweir                     aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) );
99cdf0e10cSrcweir 
100cdf0e10cSrcweir                     const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier();
101cdf0e10cSrcweir                     i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL );
102cdf0e10cSrcweir                 }
103cdf0e10cSrcweir                 else
104cdf0e10cSrcweir                 {
105cdf0e10cSrcweir                     const Reference< XController > xController( i_rData.xNonDocComponent, UNO_QUERY_THROW );
106cdf0e10cSrcweir                     const Reference< XFrame > xFrame( xController->getFrame(), UNO_SET_THROW );
107cdf0e10cSrcweir                     const Reference< XWindow > xWindow( xFrame->getContainerWindow(), UNO_SET_THROW );
108cdf0e10cSrcweir                     xWindow->setVisible( sal_True );
109cdf0e10cSrcweir                 }
110cdf0e10cSrcweir             }
111cdf0e10cSrcweir             catch( const Exception& )
112cdf0e10cSrcweir             {
113cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
114cdf0e10cSrcweir             }
115cdf0e10cSrcweir         }
116cdf0e10cSrcweir     }
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	//====================================================================
119cdf0e10cSrcweir 	//= SubComponentLoader
120cdf0e10cSrcweir 	//====================================================================
121cdf0e10cSrcweir 	//--------------------------------------------------------------------
SubComponentLoader(const Reference<XController> & i_rApplicationController,const Reference<XCommandProcessor> & i_rSubDocumentDefinition)122cdf0e10cSrcweir     SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController,
123cdf0e10cSrcweir             const Reference< XCommandProcessor >& i_rSubDocumentDefinition )
124cdf0e10cSrcweir         :m_pData( new SubComponentLoader_Data( i_rSubDocumentDefinition ) )
125cdf0e10cSrcweir     {
126cdf0e10cSrcweir         // add as window listener to the controller's container window, so we get notified when it is shown
127cdf0e10cSrcweir         Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW );
128cdf0e10cSrcweir         m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW );
129cdf0e10cSrcweir 
130cdf0e10cSrcweir         osl_incrementInterlockedCount( &m_refCount );
131cdf0e10cSrcweir         {
132cdf0e10cSrcweir             m_pData->xAppComponentWindow->addWindowListener( this );
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir         osl_decrementInterlockedCount( &m_refCount );
135cdf0e10cSrcweir     }
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 	//--------------------------------------------------------------------
SubComponentLoader(const Reference<XController> & i_rApplicationController,const Reference<XComponent> & i_rNonDocumentComponent)138cdf0e10cSrcweir     SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController,
139cdf0e10cSrcweir             const Reference< XComponent >& i_rNonDocumentComponent )
140cdf0e10cSrcweir         :m_pData( new SubComponentLoader_Data( i_rNonDocumentComponent ) )
141cdf0e10cSrcweir     {
142cdf0e10cSrcweir         // add as window listener to the controller's container window, so we get notified when it is shown
143cdf0e10cSrcweir         Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW );
144cdf0e10cSrcweir         m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW );
145cdf0e10cSrcweir 
146cdf0e10cSrcweir         osl_incrementInterlockedCount( &m_refCount );
147cdf0e10cSrcweir         {
148cdf0e10cSrcweir             m_pData->xAppComponentWindow->addWindowListener( this );
149cdf0e10cSrcweir         }
150cdf0e10cSrcweir         osl_decrementInterlockedCount( &m_refCount );
151cdf0e10cSrcweir     }
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 	//--------------------------------------------------------------------
~SubComponentLoader()154cdf0e10cSrcweir     SubComponentLoader::~SubComponentLoader()
155cdf0e10cSrcweir     {
156cdf0e10cSrcweir         delete m_pData, m_pData = NULL;
157cdf0e10cSrcweir     }
158cdf0e10cSrcweir 
159cdf0e10cSrcweir     //--------------------------------------------------------------------
windowResized(const WindowEvent & i_rEvent)160cdf0e10cSrcweir     void SAL_CALL SubComponentLoader::windowResized( const WindowEvent& i_rEvent ) throw (RuntimeException)
161cdf0e10cSrcweir     {
162cdf0e10cSrcweir         // not interested in
163cdf0e10cSrcweir         (void)i_rEvent;
164cdf0e10cSrcweir     }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir     //--------------------------------------------------------------------
windowMoved(const WindowEvent & i_rEvent)167cdf0e10cSrcweir     void SAL_CALL SubComponentLoader::windowMoved( const WindowEvent& i_rEvent ) throw (RuntimeException)
168cdf0e10cSrcweir     {
169cdf0e10cSrcweir         // not interested in
170cdf0e10cSrcweir         (void)i_rEvent;
171cdf0e10cSrcweir     }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir     //--------------------------------------------------------------------
windowShown(const EventObject & i_rEvent)174cdf0e10cSrcweir     void SAL_CALL SubComponentLoader::windowShown( const EventObject& i_rEvent ) throw (RuntimeException)
175cdf0e10cSrcweir     {
176cdf0e10cSrcweir         (void)i_rEvent;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir         lcl_onWindowShown_nothrow( *m_pData );
179cdf0e10cSrcweir         m_pData->xAppComponentWindow->removeWindowListener( this );
180cdf0e10cSrcweir     }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     //--------------------------------------------------------------------
windowHidden(const EventObject & i_rEvent)183cdf0e10cSrcweir     void SAL_CALL SubComponentLoader::windowHidden( const EventObject& i_rEvent ) throw (RuntimeException)
184cdf0e10cSrcweir     {
185cdf0e10cSrcweir         // not interested in
186cdf0e10cSrcweir         (void)i_rEvent;
187cdf0e10cSrcweir     }
188cdf0e10cSrcweir 
189cdf0e10cSrcweir     //--------------------------------------------------------------------
disposing(const EventObject & i_rEvent)190cdf0e10cSrcweir     void SAL_CALL SubComponentLoader::disposing( const EventObject& i_rEvent ) throw (RuntimeException)
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         // not interested in
193cdf0e10cSrcweir         (void)i_rEvent;
194cdf0e10cSrcweir     }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir //........................................................................
197cdf0e10cSrcweir } // namespace dbaccess
198cdf0e10cSrcweir //........................................................................
199