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 #ifndef DBACCESS_SUBCOMPONENTMANAGER_HXX
25*b1cdbd2cSJim Jagielski #define DBACCESS_SUBCOMPONENTMANAGER_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "AppElementType.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
30*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyChangeListener.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp>
32*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <comphelper/sharedmutex.hxx>
35*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include <memory>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski //........................................................................
40*b1cdbd2cSJim Jagielski namespace dbaui
41*b1cdbd2cSJim Jagielski {
42*b1cdbd2cSJim Jagielski //........................................................................
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski     struct SubComponentManager_Data;
45*b1cdbd2cSJim Jagielski     class OApplicationController;
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	//====================================================================
48*b1cdbd2cSJim Jagielski 	//= SubComponentManager
49*b1cdbd2cSJim Jagielski 	//====================================================================
50*b1cdbd2cSJim Jagielski     typedef ::cppu::WeakImplHelper1 <   ::com::sun::star::beans::XPropertyChangeListener
51*b1cdbd2cSJim Jagielski                                     >   SubComponentManager_Base;
52*b1cdbd2cSJim Jagielski     class SubComponentManager : public SubComponentManager_Base
53*b1cdbd2cSJim Jagielski 	{
54*b1cdbd2cSJim Jagielski     public:
55*b1cdbd2cSJim Jagielski         SubComponentManager( OApplicationController& _rController, const ::comphelper::SharedMutex& _rMutex );
56*b1cdbd2cSJim Jagielski         virtual ~SubComponentManager();
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski         void    disposing();
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski         // XPropertyChangeListener
61*b1cdbd2cSJim Jagielski         virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException);
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski         // XEventListener
64*b1cdbd2cSJim Jagielski         virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski         // XDatabaseDocumentUI helpers
67*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent> >
68*b1cdbd2cSJim Jagielski                     getSubComponents() const;
69*b1cdbd2cSJim Jagielski         sal_Bool    closeSubComponents();
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski         // container access
72*b1cdbd2cSJim Jagielski         void        onSubComponentOpened(
73*b1cdbd2cSJim Jagielski                         const ::rtl::OUString&  _rName,
74*b1cdbd2cSJim Jagielski                         const sal_Int32         _nComponentType,
75*b1cdbd2cSJim Jagielski                         const ElementOpenMode   _eOpenMode,
76*b1cdbd2cSJim Jagielski                         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >&
77*b1cdbd2cSJim Jagielski                                                 _rxComponent
78*b1cdbd2cSJim Jagielski                     );
79*b1cdbd2cSJim Jagielski         bool        empty() const;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski         /** activates (i.e. brings to top) the frame in which the given component is loaded, if any
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski             @return
84*b1cdbd2cSJim Jagielski                 <TRUE/> if any only of such a frame was found, i.e. the component had already been loaded
85*b1cdbd2cSJim Jagielski                 previously
86*b1cdbd2cSJim Jagielski         */
87*b1cdbd2cSJim Jagielski         bool        activateSubFrame(
88*b1cdbd2cSJim Jagielski                         const ::rtl::OUString& _rName,
89*b1cdbd2cSJim Jagielski                         const sal_Int32 _nComponentType,
90*b1cdbd2cSJim Jagielski                         const ElementOpenMode _eOpenMode,
91*b1cdbd2cSJim Jagielski                               ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& o_rComponent
92*b1cdbd2cSJim Jagielski                     ) const;
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski         /** closes all frames of the given component
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski             If a view for the component (given by name and type) has been loaded into one or more
97*b1cdbd2cSJim Jagielski             frames (with potentially different OpenModes), then those frames are gracefully closed.
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski             @return
100*b1cdbd2cSJim Jagielski                 <TRUE/> if and only if closing those frames was successful, or frames for the given sub component
101*b1cdbd2cSJim Jagielski                 exist.
102*b1cdbd2cSJim Jagielski         */
103*b1cdbd2cSJim Jagielski         bool        closeSubFrames(
104*b1cdbd2cSJim Jagielski                         const ::rtl::OUString& _rName,
105*b1cdbd2cSJim Jagielski                         const sal_Int32 _nComponentType
106*b1cdbd2cSJim Jagielski                     );
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski         /** searches for the given sub component
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski             @param i_rComponent
111*b1cdbd2cSJim Jagielski                 the sub component to look up
112*b1cdbd2cSJim Jagielski             @param o_rName
113*b1cdbd2cSJim Jagielski                 contains, upon successful return, the name of the sub component
114*b1cdbd2cSJim Jagielski             @param o_nComponentType
115*b1cdbd2cSJim Jagielski                 contains, upon successful return, the type of the sub component
116*b1cdbd2cSJim Jagielski             @return
117*b1cdbd2cSJim Jagielski                 <TRUE/> if and only if the component was found
118*b1cdbd2cSJim Jagielski         */
119*b1cdbd2cSJim Jagielski         bool        lookupSubComponent(
120*b1cdbd2cSJim Jagielski                         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& i_rComponent,
121*b1cdbd2cSJim Jagielski                               ::rtl::OUString&  o_rName,
122*b1cdbd2cSJim Jagielski                               sal_Int32&        o_rComponentType
123*b1cdbd2cSJim Jagielski                     );
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     private:
126*b1cdbd2cSJim Jagielski         ::std::auto_ptr< SubComponentManager_Data > m_pData;
127*b1cdbd2cSJim Jagielski 	};
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski //........................................................................
130*b1cdbd2cSJim Jagielski } // namespace dbaui
131*b1cdbd2cSJim Jagielski //........................................................................
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski #endif // DBACCESS_SUBCOMPONENTMANAGER_HXX
134