xref: /AOO41X/main/extensions/source/bibliography/formcontrolcontainer.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_extensions.hxx"
30*cdf0e10cSrcweir #include "formcontrolcontainer.hxx"
31*cdf0e10cSrcweir #include <tools/debug.hxx>
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #include <algorithm>
34*cdf0e10cSrcweir #include <functional>
35*cdf0e10cSrcweir 
36*cdf0e10cSrcweir //.........................................................................
37*cdf0e10cSrcweir namespace bib
38*cdf0e10cSrcweir {
39*cdf0e10cSrcweir //.........................................................................
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
42*cdf0e10cSrcweir 	using namespace ::com::sun::star::form;
43*cdf0e10cSrcweir 	using namespace ::com::sun::star::lang;
44*cdf0e10cSrcweir 	using namespace ::com::sun::star::awt;
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir 	//=====================================================================
47*cdf0e10cSrcweir 	//= FormControlContainer
48*cdf0e10cSrcweir 	//=====================================================================
49*cdf0e10cSrcweir 	//---------------------------------------------------------------------
50*cdf0e10cSrcweir 	FormControlContainer::FormControlContainer( )
51*cdf0e10cSrcweir 		:OLoadListener( m_aMutex )
52*cdf0e10cSrcweir 		,m_pFormAdapter( NULL )
53*cdf0e10cSrcweir 	{
54*cdf0e10cSrcweir 	}
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir 	//---------------------------------------------------------------------
57*cdf0e10cSrcweir 	//--- 18.10.01 18:54:57 -----------------------------------------------
58*cdf0e10cSrcweir 	FormControlContainer::~FormControlContainer( )
59*cdf0e10cSrcweir 	{
60*cdf0e10cSrcweir 		DBG_ASSERT( !isFormConnected(), "FormControlContainer::~FormControlContainer: you should disconnect in your derived class!" );
61*cdf0e10cSrcweir 		if ( isFormConnected() )
62*cdf0e10cSrcweir 			disconnectForm();
63*cdf0e10cSrcweir 	}
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir 	//---------------------------------------------------------------------
66*cdf0e10cSrcweir 	//--- 18.10.01 17:03:14 -----------------------------------------------
67*cdf0e10cSrcweir 	void FormControlContainer::disconnectForm()
68*cdf0e10cSrcweir 	{
69*cdf0e10cSrcweir 		::osl::MutexGuard aGuard( m_aMutex );
70*cdf0e10cSrcweir 		DBG_ASSERT( isFormConnected(), "FormControlContainer::connectForm: not connected!" );
71*cdf0e10cSrcweir 		if ( isFormConnected() )
72*cdf0e10cSrcweir 		{
73*cdf0e10cSrcweir 			m_pFormAdapter->dispose();
74*cdf0e10cSrcweir 			m_pFormAdapter->release();
75*cdf0e10cSrcweir 			m_pFormAdapter = NULL;
76*cdf0e10cSrcweir 		}
77*cdf0e10cSrcweir 	}
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir 	//---------------------------------------------------------------------
80*cdf0e10cSrcweir 	//--- 18.10.01 16:56:01 -----------------------------------------------
81*cdf0e10cSrcweir 	void FormControlContainer::connectForm( const Reference< XLoadable >& _rxForm )
82*cdf0e10cSrcweir 	{
83*cdf0e10cSrcweir 		DBG_ASSERT( !isFormConnected(), "FormControlContainer::connectForm: already connected!" );
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir 		DBG_ASSERT( _rxForm.is(), "FormControlContainer::connectForm: invalid form!" );
86*cdf0e10cSrcweir 		if ( !isFormConnected() && _rxForm.is() )
87*cdf0e10cSrcweir 		{
88*cdf0e10cSrcweir 			m_pFormAdapter = new OLoadListenerAdapter( _rxForm );
89*cdf0e10cSrcweir 			m_pFormAdapter->acquire();
90*cdf0e10cSrcweir 			m_pFormAdapter->Init( this );
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir 			ensureDesignMode();
93*cdf0e10cSrcweir 		}
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 		m_xForm = _rxForm;
96*cdf0e10cSrcweir 	}
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir 	//---------------------------------------------------------------------
99*cdf0e10cSrcweir 	//--- 18.10.01 18:50:14 -----------------------------------------------
100*cdf0e10cSrcweir 	struct ControlModeSwitch : public ::std::unary_function< Reference< XControl >, void >
101*cdf0e10cSrcweir 	{
102*cdf0e10cSrcweir 		sal_Bool bDesign;
103*cdf0e10cSrcweir 		ControlModeSwitch( sal_Bool _bDesign ) : bDesign( _bDesign ) { }
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir 		void operator() ( const Reference< XControl >& _rxControl ) const
106*cdf0e10cSrcweir 		{
107*cdf0e10cSrcweir 			if ( _rxControl.is() )
108*cdf0e10cSrcweir 				_rxControl->setDesignMode( bDesign );
109*cdf0e10cSrcweir 		}
110*cdf0e10cSrcweir 	};
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir 	//---------------------------------------------------------------------
113*cdf0e10cSrcweir 	//--- 18.10.01 18:49:57 -----------------------------------------------
114*cdf0e10cSrcweir 	void FormControlContainer::implSetDesignMode( sal_Bool _bDesign )
115*cdf0e10cSrcweir 	{
116*cdf0e10cSrcweir 		try
117*cdf0e10cSrcweir 		{
118*cdf0e10cSrcweir 			Reference< XControlContainer > xControlCont = getControlContainer();
119*cdf0e10cSrcweir 			Sequence< Reference< XControl > > aControls;
120*cdf0e10cSrcweir 			if ( xControlCont.is() )
121*cdf0e10cSrcweir 				aControls = xControlCont->getControls();
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 			::std::for_each(
124*cdf0e10cSrcweir 				aControls.getConstArray(),
125*cdf0e10cSrcweir 				aControls.getConstArray() + aControls.getLength(),
126*cdf0e10cSrcweir 				ControlModeSwitch( _bDesign )
127*cdf0e10cSrcweir 			);
128*cdf0e10cSrcweir 		}
129*cdf0e10cSrcweir 		catch( const Exception& e)
130*cdf0e10cSrcweir 		{
131*cdf0e10cSrcweir             (void) e;	// make compiler happy
132*cdf0e10cSrcweir             DBG_ERROR( "FormControlContainer::implSetDesignMode: caught an exception!" );
133*cdf0e10cSrcweir 		}
134*cdf0e10cSrcweir 	}
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir 	//---------------------------------------------------------------------
137*cdf0e10cSrcweir 	//--- 18.10.01 18:16:54 -----------------------------------------------
138*cdf0e10cSrcweir 	void FormControlContainer::ensureDesignMode()
139*cdf0e10cSrcweir 	{
140*cdf0e10cSrcweir 		implSetDesignMode( !m_xForm.is() || !m_xForm->isLoaded() );
141*cdf0e10cSrcweir 	}
142*cdf0e10cSrcweir 
143*cdf0e10cSrcweir 	//---------------------------------------------------------------------
144*cdf0e10cSrcweir 	//--- 18.10.01 16:45:33 -----------------------------------------------
145*cdf0e10cSrcweir 	void FormControlContainer::_loaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ )
146*cdf0e10cSrcweir 	{
147*cdf0e10cSrcweir 		implSetDesignMode( sal_False );
148*cdf0e10cSrcweir 	}
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir 	//---------------------------------------------------------------------
151*cdf0e10cSrcweir 	//--- 18.10.01 16:45:35 -----------------------------------------------
152*cdf0e10cSrcweir 	void FormControlContainer::_unloading( const ::com::sun::star::lang::EventObject& /*_rEvent*/ )
153*cdf0e10cSrcweir 	{
154*cdf0e10cSrcweir 		implSetDesignMode( sal_True );
155*cdf0e10cSrcweir 	}
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir 	//---------------------------------------------------------------------
158*cdf0e10cSrcweir 	//--- 18.10.01 16:45:36 -----------------------------------------------
159*cdf0e10cSrcweir 	void FormControlContainer::_unloaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ )
160*cdf0e10cSrcweir 	{
161*cdf0e10cSrcweir 	}
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir 	//---------------------------------------------------------------------
164*cdf0e10cSrcweir 	//--- 18.10.01 16:45:36 -----------------------------------------------
165*cdf0e10cSrcweir 	void FormControlContainer::_reloading( const ::com::sun::star::lang::EventObject& /*_rEvent*/ )
166*cdf0e10cSrcweir 	{
167*cdf0e10cSrcweir 		implSetDesignMode( sal_True );
168*cdf0e10cSrcweir 	}
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir 	//---------------------------------------------------------------------
171*cdf0e10cSrcweir 	//--- 18.10.01 16:45:37 -----------------------------------------------
172*cdf0e10cSrcweir 	void FormControlContainer::_reloaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ )
173*cdf0e10cSrcweir 	{
174*cdf0e10cSrcweir 		implSetDesignMode( sal_False );
175*cdf0e10cSrcweir 	}
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir //.........................................................................
178*cdf0e10cSrcweir }	// namespace bib
179*cdf0e10cSrcweir //.........................................................................
180*cdf0e10cSrcweir 
181