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 #include "precompiled_dbaccess.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include "subcomponentloader.hxx"
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
29*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/Command.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController2.hpp>
31*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski //........................................................................
36*b1cdbd2cSJim Jagielski namespace dbaccess
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski //........................................................................
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski 	/** === begin UNO using === **/
41*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::Reference;
42*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::XInterface;
43*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::UNO_QUERY;
44*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::UNO_QUERY_THROW;
45*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::UNO_SET_THROW;
46*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::Exception;
47*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::RuntimeException;
48*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::Any;
49*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::makeAny;
50*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::Sequence;
51*b1cdbd2cSJim Jagielski 	using ::com::sun::star::uno::Type;
52*b1cdbd2cSJim Jagielski     using ::com::sun::star::frame::XController;
53*b1cdbd2cSJim Jagielski     using ::com::sun::star::frame::XFrame;
54*b1cdbd2cSJim Jagielski     using ::com::sun::star::awt::XWindow;
55*b1cdbd2cSJim Jagielski     using ::com::sun::star::awt::WindowEvent;
56*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::EventObject;
57*b1cdbd2cSJim Jagielski     using ::com::sun::star::ucb::Command;
58*b1cdbd2cSJim Jagielski     using ::com::sun::star::ucb::XCommandProcessor;
59*b1cdbd2cSJim Jagielski     using ::com::sun::star::frame::XController2;
60*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::XComponent;
61*b1cdbd2cSJim Jagielski 	/** === end UNO using === **/
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski 	//====================================================================
64*b1cdbd2cSJim Jagielski 	//= SubComponentLoader
65*b1cdbd2cSJim Jagielski 	//====================================================================
66*b1cdbd2cSJim Jagielski     struct DBACCESS_DLLPRIVATE SubComponentLoader_Data
67*b1cdbd2cSJim Jagielski     {
68*b1cdbd2cSJim Jagielski         const Reference< XCommandProcessor >    xDocDefCommands;
69*b1cdbd2cSJim Jagielski         const Reference< XComponent >           xNonDocComponent;
70*b1cdbd2cSJim Jagielski         Reference< XWindow >                    xAppComponentWindow;
71*b1cdbd2cSJim Jagielski 
SubComponentLoader_Datadbaccess::SubComponentLoader_Data72*b1cdbd2cSJim Jagielski         SubComponentLoader_Data( const Reference< XCommandProcessor >& i_rDocumentDefinition )
73*b1cdbd2cSJim Jagielski             :xDocDefCommands( i_rDocumentDefinition, UNO_SET_THROW )
74*b1cdbd2cSJim Jagielski             ,xNonDocComponent()
75*b1cdbd2cSJim Jagielski         {
76*b1cdbd2cSJim Jagielski         }
77*b1cdbd2cSJim Jagielski 
SubComponentLoader_Datadbaccess::SubComponentLoader_Data78*b1cdbd2cSJim Jagielski         SubComponentLoader_Data( const Reference< XComponent >& i_rNonDocumentComponent )
79*b1cdbd2cSJim Jagielski             :xDocDefCommands()
80*b1cdbd2cSJim Jagielski             ,xNonDocComponent( i_rNonDocumentComponent, UNO_SET_THROW )
81*b1cdbd2cSJim Jagielski         {
82*b1cdbd2cSJim Jagielski         }
83*b1cdbd2cSJim Jagielski     };
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	//====================================================================
86*b1cdbd2cSJim Jagielski 	//= helper
87*b1cdbd2cSJim Jagielski 	//====================================================================
88*b1cdbd2cSJim Jagielski     namespace
89*b1cdbd2cSJim Jagielski     {
90*b1cdbd2cSJim Jagielski 	    //................................................................
lcl_onWindowShown_nothrow(const SubComponentLoader_Data & i_rData)91*b1cdbd2cSJim Jagielski         void lcl_onWindowShown_nothrow( const SubComponentLoader_Data& i_rData )
92*b1cdbd2cSJim Jagielski         {
93*b1cdbd2cSJim Jagielski             try
94*b1cdbd2cSJim Jagielski             {
95*b1cdbd2cSJim Jagielski                 if ( i_rData.xDocDefCommands.is() )
96*b1cdbd2cSJim Jagielski                 {
97*b1cdbd2cSJim Jagielski                     Command aCommandOpen;
98*b1cdbd2cSJim Jagielski                     aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) );
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski                     const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier();
101*b1cdbd2cSJim Jagielski                     i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL );
102*b1cdbd2cSJim Jagielski                 }
103*b1cdbd2cSJim Jagielski                 else
104*b1cdbd2cSJim Jagielski                 {
105*b1cdbd2cSJim Jagielski                     const Reference< XController > xController( i_rData.xNonDocComponent, UNO_QUERY_THROW );
106*b1cdbd2cSJim Jagielski                     const Reference< XFrame > xFrame( xController->getFrame(), UNO_SET_THROW );
107*b1cdbd2cSJim Jagielski                     const Reference< XWindow > xWindow( xFrame->getContainerWindow(), UNO_SET_THROW );
108*b1cdbd2cSJim Jagielski                     xWindow->setVisible( sal_True );
109*b1cdbd2cSJim Jagielski                 }
110*b1cdbd2cSJim Jagielski             }
111*b1cdbd2cSJim Jagielski             catch( const Exception& )
112*b1cdbd2cSJim Jagielski             {
113*b1cdbd2cSJim Jagielski             	DBG_UNHANDLED_EXCEPTION();
114*b1cdbd2cSJim Jagielski             }
115*b1cdbd2cSJim Jagielski         }
116*b1cdbd2cSJim Jagielski     }
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 	//====================================================================
119*b1cdbd2cSJim Jagielski 	//= SubComponentLoader
120*b1cdbd2cSJim Jagielski 	//====================================================================
121*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
SubComponentLoader(const Reference<XController> & i_rApplicationController,const Reference<XCommandProcessor> & i_rSubDocumentDefinition)122*b1cdbd2cSJim Jagielski     SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController,
123*b1cdbd2cSJim Jagielski             const Reference< XCommandProcessor >& i_rSubDocumentDefinition )
124*b1cdbd2cSJim Jagielski         :m_pData( new SubComponentLoader_Data( i_rSubDocumentDefinition ) )
125*b1cdbd2cSJim Jagielski     {
126*b1cdbd2cSJim Jagielski         // add as window listener to the controller's container window, so we get notified when it is shown
127*b1cdbd2cSJim Jagielski         Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW );
128*b1cdbd2cSJim Jagielski         m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW );
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski         osl_incrementInterlockedCount( &m_refCount );
131*b1cdbd2cSJim Jagielski         {
132*b1cdbd2cSJim Jagielski             m_pData->xAppComponentWindow->addWindowListener( this );
133*b1cdbd2cSJim Jagielski         }
134*b1cdbd2cSJim Jagielski         osl_decrementInterlockedCount( &m_refCount );
135*b1cdbd2cSJim Jagielski     }
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
SubComponentLoader(const Reference<XController> & i_rApplicationController,const Reference<XComponent> & i_rNonDocumentComponent)138*b1cdbd2cSJim Jagielski     SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController,
139*b1cdbd2cSJim Jagielski             const Reference< XComponent >& i_rNonDocumentComponent )
140*b1cdbd2cSJim Jagielski         :m_pData( new SubComponentLoader_Data( i_rNonDocumentComponent ) )
141*b1cdbd2cSJim Jagielski     {
142*b1cdbd2cSJim Jagielski         // add as window listener to the controller's container window, so we get notified when it is shown
143*b1cdbd2cSJim Jagielski         Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW );
144*b1cdbd2cSJim Jagielski         m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW );
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski         osl_incrementInterlockedCount( &m_refCount );
147*b1cdbd2cSJim Jagielski         {
148*b1cdbd2cSJim Jagielski             m_pData->xAppComponentWindow->addWindowListener( this );
149*b1cdbd2cSJim Jagielski         }
150*b1cdbd2cSJim Jagielski         osl_decrementInterlockedCount( &m_refCount );
151*b1cdbd2cSJim Jagielski     }
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
~SubComponentLoader()154*b1cdbd2cSJim Jagielski     SubComponentLoader::~SubComponentLoader()
155*b1cdbd2cSJim Jagielski     {
156*b1cdbd2cSJim Jagielski         delete m_pData, m_pData = NULL;
157*b1cdbd2cSJim Jagielski     }
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
windowResized(const WindowEvent & i_rEvent)160*b1cdbd2cSJim Jagielski     void SAL_CALL SubComponentLoader::windowResized( const WindowEvent& i_rEvent ) throw (RuntimeException)
161*b1cdbd2cSJim Jagielski     {
162*b1cdbd2cSJim Jagielski         // not interested in
163*b1cdbd2cSJim Jagielski         (void)i_rEvent;
164*b1cdbd2cSJim Jagielski     }
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
windowMoved(const WindowEvent & i_rEvent)167*b1cdbd2cSJim Jagielski     void SAL_CALL SubComponentLoader::windowMoved( const WindowEvent& i_rEvent ) throw (RuntimeException)
168*b1cdbd2cSJim Jagielski     {
169*b1cdbd2cSJim Jagielski         // not interested in
170*b1cdbd2cSJim Jagielski         (void)i_rEvent;
171*b1cdbd2cSJim Jagielski     }
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
windowShown(const EventObject & i_rEvent)174*b1cdbd2cSJim Jagielski     void SAL_CALL SubComponentLoader::windowShown( const EventObject& i_rEvent ) throw (RuntimeException)
175*b1cdbd2cSJim Jagielski     {
176*b1cdbd2cSJim Jagielski         (void)i_rEvent;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         lcl_onWindowShown_nothrow( *m_pData );
179*b1cdbd2cSJim Jagielski         m_pData->xAppComponentWindow->removeWindowListener( this );
180*b1cdbd2cSJim Jagielski     }
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
windowHidden(const EventObject & i_rEvent)183*b1cdbd2cSJim Jagielski     void SAL_CALL SubComponentLoader::windowHidden( const EventObject& i_rEvent ) throw (RuntimeException)
184*b1cdbd2cSJim Jagielski     {
185*b1cdbd2cSJim Jagielski         // not interested in
186*b1cdbd2cSJim Jagielski         (void)i_rEvent;
187*b1cdbd2cSJim Jagielski     }
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
disposing(const EventObject & i_rEvent)190*b1cdbd2cSJim Jagielski     void SAL_CALL SubComponentLoader::disposing( const EventObject& i_rEvent ) throw (RuntimeException)
191*b1cdbd2cSJim Jagielski     {
192*b1cdbd2cSJim Jagielski         // not interested in
193*b1cdbd2cSJim Jagielski         (void)i_rEvent;
194*b1cdbd2cSJim Jagielski     }
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski //........................................................................
197*b1cdbd2cSJim Jagielski } // namespace dbaccess
198*b1cdbd2cSJim Jagielski //........................................................................
199