10b4ced1dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
30b4ced1dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
40b4ced1dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
50b4ced1dSAndrew Rist  * distributed with this work for additional information
60b4ced1dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
70b4ced1dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
80b4ced1dSAndrew Rist  * "License"); you may not use this file except in compliance
90b4ced1dSAndrew Rist  * with the License.  You may obtain a copy of the License at
100b4ced1dSAndrew Rist  *
110b4ced1dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
120b4ced1dSAndrew Rist  *
130b4ced1dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
140b4ced1dSAndrew Rist  * software distributed under the License is distributed on an
150b4ced1dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
160b4ced1dSAndrew Rist  * KIND, either express or implied.  See the License for the
170b4ced1dSAndrew Rist  * specific language governing permissions and limitations
180b4ced1dSAndrew Rist  * under the License.
190b4ced1dSAndrew Rist  *
200b4ced1dSAndrew Rist  *************************************************************/
210b4ced1dSAndrew Rist 
220b4ced1dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir //____________________________________________________________________________________________________________
25cdf0e10cSrcweir //	my own includes
26cdf0e10cSrcweir //____________________________________________________________________________________________________________
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include "statusindicator.hxx"
29cdf0e10cSrcweir 
30cdf0e10cSrcweir //____________________________________________________________________________________________________________
31cdf0e10cSrcweir //	includes of other projects
32cdf0e10cSrcweir //____________________________________________________________________________________________________________
33cdf0e10cSrcweir #include <com/sun/star/awt/InvalidateStyle.hpp>
34cdf0e10cSrcweir #include <com/sun/star/awt/WindowAttribute.hpp>
35cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
36cdf0e10cSrcweir #include <tools/debug.hxx>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir //____________________________________________________________________________________________________________
39cdf0e10cSrcweir //	includes of my project
40cdf0e10cSrcweir //____________________________________________________________________________________________________________
41cdf0e10cSrcweir #include "progressbar.hxx"
42cdf0e10cSrcweir 
43cdf0e10cSrcweir //____________________________________________________________________________________________________________
44cdf0e10cSrcweir //	namespace
45cdf0e10cSrcweir //____________________________________________________________________________________________________________
46cdf0e10cSrcweir 
47cdf0e10cSrcweir using namespace	::cppu					;
48cdf0e10cSrcweir using namespace	::osl					;
49cdf0e10cSrcweir using namespace	::rtl					;
50cdf0e10cSrcweir using namespace	::com::sun::star::uno	;
51cdf0e10cSrcweir using namespace	::com::sun::star::lang	;
52cdf0e10cSrcweir using namespace	::com::sun::star::awt	;
53cdf0e10cSrcweir using namespace	::com::sun::star::task	;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir namespace unocontrols{
56cdf0e10cSrcweir 
57cdf0e10cSrcweir //____________________________________________________________________________________________________________
58cdf0e10cSrcweir //	construct/destruct
59cdf0e10cSrcweir //____________________________________________________________________________________________________________
60cdf0e10cSrcweir 
StatusIndicator(const Reference<XMultiServiceFactory> & xFactory)61cdf0e10cSrcweir StatusIndicator::StatusIndicator( const Reference< XMultiServiceFactory >& xFactory )
62cdf0e10cSrcweir 	: BaseContainerControl	( xFactory	)
63cdf0e10cSrcweir {
64cdf0e10cSrcweir 	// Its not allowed to work with member in this method (refcounter !!!)
65cdf0e10cSrcweir 	// But with a HACK (++refcount) its "OK" :-(
66cdf0e10cSrcweir 	++m_refCount ;
67cdf0e10cSrcweir 
68cdf0e10cSrcweir 	// Create instances for fixedtext and progress ...
69cdf0e10cSrcweir 	m_xText			= Reference< XFixedText > 	( xFactory->createInstance( OUString::createFromAscii( FIXEDTEXT_SERVICENAME	) ), UNO_QUERY );
70cdf0e10cSrcweir 	m_xProgressBar	= Reference< XProgressBar >	( xFactory->createInstance( OUString::createFromAscii( SERVICENAME_PROGRESSBAR	) ), UNO_QUERY );
71cdf0e10cSrcweir 	// ... cast controls to Reference< XControl > and set model ...
72cdf0e10cSrcweir 	// ( ProgressBar has no model !!! )
73cdf0e10cSrcweir 	Reference< XControl > xTextControl		( m_xText		, UNO_QUERY );
74cdf0e10cSrcweir 	Reference< XControl > xProgressControl	( m_xProgressBar, UNO_QUERY );
75cdf0e10cSrcweir 	xTextControl->setModel( Reference< XControlModel >( xFactory->createInstance( OUString::createFromAscii( FIXEDTEXT_MODELNAME ) ), UNO_QUERY ) );
76cdf0e10cSrcweir 	// ... and add controls to basecontainercontrol!
77cdf0e10cSrcweir 	addControl( OUString::createFromAscii( CONTROLNAME_TEXT			), xTextControl   	);
78cdf0e10cSrcweir 	addControl( OUString::createFromAscii( CONTROLNAME_PROGRESSBAR	), xProgressControl	);
79*b4abecfeSPedro Giffuni 	// FixedText make it automatically visible by himself ... but not the progressbar !!!
80cdf0e10cSrcweir 	// it must be set explicitly
81cdf0e10cSrcweir 	Reference< XWindow > xProgressWindow( m_xProgressBar, UNO_QUERY );
82cdf0e10cSrcweir 	xProgressWindow->setVisible( sal_True );
83cdf0e10cSrcweir 	// Reset to defaults !!!
84*b4abecfeSPedro Giffuni 	// (progressbar take automatically its own defaults)
85cdf0e10cSrcweir 	m_xText->setText( OUString::createFromAscii( DEFAULT_TEXT ) );
86cdf0e10cSrcweir 
87cdf0e10cSrcweir 	--m_refCount ;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
~StatusIndicator()90cdf0e10cSrcweir StatusIndicator::~StatusIndicator()
91cdf0e10cSrcweir {
92cdf0e10cSrcweir 	// Release all references
93cdf0e10cSrcweir 	m_xText			= Reference< XFixedText >();
94cdf0e10cSrcweir 	m_xProgressBar	= Reference< XProgressBar >();
95cdf0e10cSrcweir }
96cdf0e10cSrcweir 
97cdf0e10cSrcweir //____________________________________________________________________________________________________________
98cdf0e10cSrcweir //	XInterface
99cdf0e10cSrcweir //____________________________________________________________________________________________________________
100cdf0e10cSrcweir 
queryInterface(const Type & rType)101cdf0e10cSrcweir Any SAL_CALL StatusIndicator::queryInterface( const Type& rType ) throw( RuntimeException )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 	// Attention:
104cdf0e10cSrcweir 	//	Don't use mutex or guard in this method!!! Is a method of XInterface.
105cdf0e10cSrcweir 	Any aReturn ;
106cdf0e10cSrcweir 	Reference< XInterface > xDel = BaseContainerControl::impl_getDelegator();
107cdf0e10cSrcweir 	if ( xDel.is() )
108cdf0e10cSrcweir 	{
109cdf0e10cSrcweir 		// If an delegator exist, forward question to his queryInterface.
110cdf0e10cSrcweir 		// Delegator will ask his own queryAggregation!
111cdf0e10cSrcweir 		aReturn = xDel->queryInterface( rType );
112cdf0e10cSrcweir 	}
113cdf0e10cSrcweir 	else
114cdf0e10cSrcweir 	{
115cdf0e10cSrcweir 		// If an delegator unknown, forward question to own queryAggregation.
116cdf0e10cSrcweir 		aReturn = queryAggregation( rType );
117cdf0e10cSrcweir 	}
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 	return aReturn ;
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir //____________________________________________________________________________________________________________
123cdf0e10cSrcweir //	XInterface
124cdf0e10cSrcweir //____________________________________________________________________________________________________________
125cdf0e10cSrcweir 
acquire()126cdf0e10cSrcweir void SAL_CALL StatusIndicator::acquire() throw()
127cdf0e10cSrcweir {
128cdf0e10cSrcweir 	// Attention:
129cdf0e10cSrcweir 	//	Don't use mutex or guard in this method!!! Is a method of XInterface.
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	// Forward to baseclass
132cdf0e10cSrcweir 	BaseControl::acquire();
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir //____________________________________________________________________________________________________________
136cdf0e10cSrcweir //	XInterface
137cdf0e10cSrcweir //____________________________________________________________________________________________________________
138cdf0e10cSrcweir 
release()139cdf0e10cSrcweir void SAL_CALL StatusIndicator::release() throw()
140cdf0e10cSrcweir {
141cdf0e10cSrcweir 	// Attention:
142cdf0e10cSrcweir 	//	Don't use mutex or guard in this method!!! Is a method of XInterface.
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	// Forward to baseclass
145cdf0e10cSrcweir 	BaseControl::release();
146cdf0e10cSrcweir }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir //____________________________________________________________________________________________________________
149cdf0e10cSrcweir //	XTypeProvider
150cdf0e10cSrcweir //____________________________________________________________________________________________________________
151cdf0e10cSrcweir 
getTypes()152cdf0e10cSrcweir Sequence< Type > SAL_CALL StatusIndicator::getTypes() throw( RuntimeException )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir 	// Optimize this method !
155cdf0e10cSrcweir 	// We initialize a static variable only one time. And we don't must use a mutex at every call!
156cdf0e10cSrcweir 	// For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL!
157cdf0e10cSrcweir 	static OTypeCollection* pTypeCollection = NULL ;
158cdf0e10cSrcweir 
159cdf0e10cSrcweir 	if ( pTypeCollection == NULL )
160cdf0e10cSrcweir 	{
161cdf0e10cSrcweir 		// Ready for multithreading; get global mutex for first call of this method only! see before
162cdf0e10cSrcweir 		MutexGuard aGuard( Mutex::getGlobalMutex() );
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 		// Control these pointer again ... it can be, that another instance will be faster then these!
165cdf0e10cSrcweir 		if ( pTypeCollection == NULL )
166cdf0e10cSrcweir 		{
167cdf0e10cSrcweir 			// Create a static typecollection ...
168cdf0e10cSrcweir 			static OTypeCollection aTypeCollection	(	::getCppuType(( const Reference< XLayoutConstrains	>*)NULL )	,
169cdf0e10cSrcweir 												  		::getCppuType(( const Reference< XStatusIndicator	>*)NULL )	,
170cdf0e10cSrcweir 														BaseContainerControl::getTypes()
171cdf0e10cSrcweir 													);
172cdf0e10cSrcweir 			// ... and set his address to static pointer!
173cdf0e10cSrcweir 			pTypeCollection = &aTypeCollection ;
174cdf0e10cSrcweir 		}
175cdf0e10cSrcweir 	}
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	return pTypeCollection->getTypes();
178cdf0e10cSrcweir }
179cdf0e10cSrcweir 
180cdf0e10cSrcweir //____________________________________________________________________________________________________________
181cdf0e10cSrcweir //	XAggregation
182cdf0e10cSrcweir //____________________________________________________________________________________________________________
183cdf0e10cSrcweir 
queryAggregation(const Type & aType)184cdf0e10cSrcweir Any SAL_CALL StatusIndicator::queryAggregation( const Type& aType ) throw( RuntimeException )
185cdf0e10cSrcweir {
186cdf0e10cSrcweir 	// Ask for my own supported interfaces ...
187cdf0e10cSrcweir 	// Attention: XTypeProvider and XInterface are supported by OComponentHelper!
188cdf0e10cSrcweir 	Any aReturn	( ::cppu::queryInterface(	aType					   					,
189cdf0e10cSrcweir 									   		static_cast< XLayoutConstrains*	> ( this )	,
190cdf0e10cSrcweir 									   		static_cast< XStatusIndicator*	> ( this )
191cdf0e10cSrcweir 										)
192cdf0e10cSrcweir 				);
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 	// If searched interface not supported by this class ...
195cdf0e10cSrcweir 	if ( aReturn.hasValue() == sal_False )
196cdf0e10cSrcweir 	{
197cdf0e10cSrcweir 		// ... ask baseclasses.
198cdf0e10cSrcweir 		aReturn = BaseControl::queryAggregation( aType );
199cdf0e10cSrcweir 	}
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 	return aReturn ;
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir //____________________________________________________________________________________________________________
205cdf0e10cSrcweir //	XStatusIndicator
206cdf0e10cSrcweir //____________________________________________________________________________________________________________
207cdf0e10cSrcweir 
start(const OUString & sText,sal_Int32 nRange)208cdf0e10cSrcweir void SAL_CALL StatusIndicator::start( const OUString& sText, sal_Int32 nRange ) throw( RuntimeException )
209cdf0e10cSrcweir {
210cdf0e10cSrcweir 	// Ready for multithreading
211cdf0e10cSrcweir 	MutexGuard aGuard( m_aMutex );
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 	// Initialize status controls with given values.
214cdf0e10cSrcweir 	m_xText->setText( sText );
215cdf0e10cSrcweir 	m_xProgressBar->setRange( 0, nRange );
216cdf0e10cSrcweir     // force repaint ... fixedtext has changed !
217cdf0e10cSrcweir 	impl_recalcLayout ( WindowEvent(static_cast< OWeakObject* >(this),0,0,impl_getWidth(),impl_getHeight(),0,0,0,0) ) ;
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir //____________________________________________________________________________________________________________
221cdf0e10cSrcweir //	XStatusIndicator
222cdf0e10cSrcweir //____________________________________________________________________________________________________________
223cdf0e10cSrcweir 
end()224cdf0e10cSrcweir void SAL_CALL StatusIndicator::end() throw( RuntimeException )
225cdf0e10cSrcweir {
226cdf0e10cSrcweir 	// Ready for multithreading
227cdf0e10cSrcweir 	MutexGuard aGuard( m_aMutex );
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 	// Clear values of status controls.
230cdf0e10cSrcweir 	m_xText->setText( OUString() );
231cdf0e10cSrcweir 	m_xProgressBar->setValue( 0 );
232cdf0e10cSrcweir 	setVisible( sal_False );
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir //____________________________________________________________________________________________________________
236cdf0e10cSrcweir //	XStatusIndicator
237cdf0e10cSrcweir //____________________________________________________________________________________________________________
238cdf0e10cSrcweir 
setText(const OUString & sText)239cdf0e10cSrcweir void SAL_CALL StatusIndicator::setText( const OUString& sText ) throw( RuntimeException )
240cdf0e10cSrcweir {
241cdf0e10cSrcweir 	// Ready for multithreading
242cdf0e10cSrcweir 	MutexGuard aGuard( m_aMutex );
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 	// Take text on right control
245cdf0e10cSrcweir 	m_xText->setText( sText );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
248cdf0e10cSrcweir //____________________________________________________________________________________________________________
249cdf0e10cSrcweir //	XStatusIndicator
250cdf0e10cSrcweir //____________________________________________________________________________________________________________
251cdf0e10cSrcweir 
setValue(sal_Int32 nValue)252cdf0e10cSrcweir void SAL_CALL StatusIndicator::setValue( sal_Int32 nValue ) throw( RuntimeException )
253cdf0e10cSrcweir {
254cdf0e10cSrcweir 	// Ready for multithreading
255cdf0e10cSrcweir 	MutexGuard aGuard( m_aMutex );
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 	// Take value on right control
258cdf0e10cSrcweir 	m_xProgressBar->setValue( nValue );
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
261cdf0e10cSrcweir //____________________________________________________________________________________________________________
262cdf0e10cSrcweir //	XStatusIndicator
263cdf0e10cSrcweir //____________________________________________________________________________________________________________
264cdf0e10cSrcweir 
reset()265cdf0e10cSrcweir void SAL_CALL StatusIndicator::reset() throw( RuntimeException )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir 	// Ready for multithreading
268cdf0e10cSrcweir 	MutexGuard aGuard( m_aMutex );
269cdf0e10cSrcweir 
270cdf0e10cSrcweir 	// Clear values of status controls.
271cdf0e10cSrcweir 	// (Don't hide the window! User will reset current values ... but he will not finish using of indicator!)
272cdf0e10cSrcweir 	m_xText->setText( OUString() );
273cdf0e10cSrcweir 	m_xProgressBar->setValue( 0 );
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir //____________________________________________________________________________________________________________
277cdf0e10cSrcweir //	XLayoutConstrains
278cdf0e10cSrcweir //____________________________________________________________________________________________________________
279cdf0e10cSrcweir 
getMinimumSize()280cdf0e10cSrcweir Size SAL_CALL StatusIndicator::getMinimumSize () throw( RuntimeException )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir 	return Size (DEFAULT_WIDTH, DEFAULT_HEIGHT) ;
283cdf0e10cSrcweir }
284cdf0e10cSrcweir 
285cdf0e10cSrcweir //____________________________________________________________________________________________________________
286cdf0e10cSrcweir //	XLayoutConstrains
287cdf0e10cSrcweir //____________________________________________________________________________________________________________
288cdf0e10cSrcweir 
getPreferredSize()289cdf0e10cSrcweir Size SAL_CALL StatusIndicator::getPreferredSize () throw( RuntimeException )
290cdf0e10cSrcweir {
291cdf0e10cSrcweir 	// Ready for multithreading
292cdf0e10cSrcweir 	ClearableMutexGuard aGuard ( m_aMutex ) ;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 	// get information about required place of child controls
295cdf0e10cSrcweir 	Reference< XLayoutConstrains >	xTextLayout	( m_xText, UNO_QUERY );
296cdf0e10cSrcweir 	Size							aTextSize	= xTextLayout->getPreferredSize();
297cdf0e10cSrcweir 
298cdf0e10cSrcweir 	aGuard.clear () ;
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 	// calc preferred size of status indicator
301cdf0e10cSrcweir     sal_Int32 nWidth  = impl_getWidth()                 ;
302cdf0e10cSrcweir     sal_Int32 nHeight = (2*FREEBORDER)+aTextSize.Height ;
303cdf0e10cSrcweir 
304cdf0e10cSrcweir     // norm to minimum
305cdf0e10cSrcweir 	if ( nWidth<DEFAULT_WIDTH )
306cdf0e10cSrcweir 	{
307cdf0e10cSrcweir 		nWidth = DEFAULT_WIDTH ;
308cdf0e10cSrcweir 	}
309cdf0e10cSrcweir 	if ( nHeight<DEFAULT_HEIGHT )
310cdf0e10cSrcweir 	{
311cdf0e10cSrcweir 		nHeight = DEFAULT_HEIGHT ;
312cdf0e10cSrcweir 	}
313cdf0e10cSrcweir 
314cdf0e10cSrcweir 	// return to caller
315cdf0e10cSrcweir 	return Size ( nWidth, nHeight ) ;
316cdf0e10cSrcweir }
317cdf0e10cSrcweir 
318cdf0e10cSrcweir //____________________________________________________________________________________________________________
319cdf0e10cSrcweir //	XLayoutConstrains
320cdf0e10cSrcweir //____________________________________________________________________________________________________________
321cdf0e10cSrcweir 
calcAdjustedSize(const Size &)322cdf0e10cSrcweir Size SAL_CALL StatusIndicator::calcAdjustedSize ( const Size& /*rNewSize*/ ) throw( RuntimeException )
323cdf0e10cSrcweir {
324cdf0e10cSrcweir 	return getPreferredSize () ;
325cdf0e10cSrcweir }
326cdf0e10cSrcweir 
327cdf0e10cSrcweir //____________________________________________________________________________________________________________
328cdf0e10cSrcweir //	XControl
329cdf0e10cSrcweir //____________________________________________________________________________________________________________
330cdf0e10cSrcweir 
createPeer(const Reference<XToolkit> & rToolkit,const Reference<XWindowPeer> & rParent)331cdf0e10cSrcweir void SAL_CALL StatusIndicator::createPeer ( const Reference< XToolkit > & rToolkit, const Reference< XWindowPeer > & rParent	) throw( RuntimeException )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir 	if( getPeer().is() == sal_False )
334cdf0e10cSrcweir 	{
335cdf0e10cSrcweir 		BaseContainerControl::createPeer( rToolkit, rParent );
336cdf0e10cSrcweir 
337cdf0e10cSrcweir 		// If user forget to call "setPosSize()", we have still a correct size.
338cdf0e10cSrcweir 		// And a "MinimumSize" IS A "MinimumSize"!
339cdf0e10cSrcweir 		// We change not the position of control at this point.
340cdf0e10cSrcweir 		Size aDefaultSize = getMinimumSize () ;
341cdf0e10cSrcweir 		setPosSize ( 0, 0, aDefaultSize.Width, aDefaultSize.Height, PosSize::SIZE ) ;
342cdf0e10cSrcweir 	}
343cdf0e10cSrcweir }
344cdf0e10cSrcweir 
345cdf0e10cSrcweir //____________________________________________________________________________________________________________
346cdf0e10cSrcweir //	XControl
347cdf0e10cSrcweir //____________________________________________________________________________________________________________
348cdf0e10cSrcweir 
setModel(const Reference<XControlModel> &)349cdf0e10cSrcweir sal_Bool SAL_CALL StatusIndicator::setModel ( const Reference< XControlModel > & /*rModel*/ ) throw( RuntimeException )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir 	// We have no model.
352cdf0e10cSrcweir 	return sal_False ;
353cdf0e10cSrcweir }
354cdf0e10cSrcweir 
355cdf0e10cSrcweir //____________________________________________________________________________________________________________
356cdf0e10cSrcweir //	XControl
357cdf0e10cSrcweir //____________________________________________________________________________________________________________
358cdf0e10cSrcweir 
getModel()359cdf0e10cSrcweir Reference< XControlModel > SAL_CALL StatusIndicator::getModel () throw( RuntimeException )
360cdf0e10cSrcweir {
361cdf0e10cSrcweir 	// We have no model.
362cdf0e10cSrcweir 	// return (XControlModel*)this ;
363cdf0e10cSrcweir 	return Reference< XControlModel >  () ;
364cdf0e10cSrcweir }
365cdf0e10cSrcweir 
366cdf0e10cSrcweir //____________________________________________________________________________________________________________
367cdf0e10cSrcweir //	XComponent
368cdf0e10cSrcweir //____________________________________________________________________________________________________________
369cdf0e10cSrcweir 
dispose()370cdf0e10cSrcweir void SAL_CALL StatusIndicator::dispose () throw( RuntimeException )
371cdf0e10cSrcweir {
372cdf0e10cSrcweir 	// Ready for multithreading
373cdf0e10cSrcweir 	MutexGuard aGuard ( m_aMutex ) ;
374cdf0e10cSrcweir 
375cdf0e10cSrcweir 	// "removeControl()" control the state of a reference
376cdf0e10cSrcweir 	Reference< XControl >  xTextControl		( m_xText		, UNO_QUERY );
377cdf0e10cSrcweir 	Reference< XControl >  xProgressControl	( m_xProgressBar, UNO_QUERY );
378cdf0e10cSrcweir 
379cdf0e10cSrcweir 	removeControl( xTextControl		);
380cdf0e10cSrcweir 	removeControl( xProgressControl	);
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 	// do'nt use "...->clear ()" or "... = XFixedText ()"
383cdf0e10cSrcweir 	// when other hold a reference at this object !!!
384cdf0e10cSrcweir 	xTextControl->dispose();
385cdf0e10cSrcweir 	xProgressControl->dispose();
386cdf0e10cSrcweir 	BaseContainerControl::dispose();
387cdf0e10cSrcweir }
388cdf0e10cSrcweir 
389cdf0e10cSrcweir //____________________________________________________________________________________________________________
390cdf0e10cSrcweir //	XWindow
391cdf0e10cSrcweir //____________________________________________________________________________________________________________
392cdf0e10cSrcweir 
setPosSize(sal_Int32 nX,sal_Int32 nY,sal_Int32 nWidth,sal_Int32 nHeight,sal_Int16 nFlags)393cdf0e10cSrcweir void SAL_CALL StatusIndicator::setPosSize ( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int16 nFlags ) throw( RuntimeException )
394cdf0e10cSrcweir {
395cdf0e10cSrcweir 	Rectangle	aBasePosSize = getPosSize () ;
396cdf0e10cSrcweir 	BaseContainerControl::setPosSize (nX, nY, nWidth, nHeight, nFlags) ;
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 	// if position or size changed
399cdf0e10cSrcweir 	if (
400cdf0e10cSrcweir 		( nWidth  != aBasePosSize.Width	) ||
401cdf0e10cSrcweir 		( nHeight != aBasePosSize.Height)
402cdf0e10cSrcweir 	   )
403cdf0e10cSrcweir 	{
404cdf0e10cSrcweir 		// calc new layout for controls
405cdf0e10cSrcweir 		impl_recalcLayout ( WindowEvent(static_cast< OWeakObject* >(this),0,0,nWidth,nHeight,0,0,0,0) ) ;
406cdf0e10cSrcweir 		// clear background (!)
407*b4abecfeSPedro Giffuni 		// [Childs was repainted in "recalcLayout" by setPosSize() automatically!]
408cdf0e10cSrcweir 		getPeer()->invalidate(2);
409cdf0e10cSrcweir 		// and repaint the control
410cdf0e10cSrcweir 		impl_paint ( 0, 0, impl_getGraphicsPeer() ) ;
411cdf0e10cSrcweir 	}
412cdf0e10cSrcweir }
413cdf0e10cSrcweir 
414cdf0e10cSrcweir //____________________________________________________________________________________________________________
415cdf0e10cSrcweir //	impl but public method to register service
416cdf0e10cSrcweir //____________________________________________________________________________________________________________
417cdf0e10cSrcweir 
impl_getStaticSupportedServiceNames()418cdf0e10cSrcweir const Sequence< OUString > StatusIndicator::impl_getStaticSupportedServiceNames()
419cdf0e10cSrcweir {
420cdf0e10cSrcweir 	MutexGuard aGuard( Mutex::getGlobalMutex() );
421cdf0e10cSrcweir     Sequence< OUString > seqServiceNames( 1 );
422cdf0e10cSrcweir     seqServiceNames.getArray() [0] = OUString::createFromAscii( SERVICENAME_STATUSINDICATOR );
423cdf0e10cSrcweir     return seqServiceNames ;
424cdf0e10cSrcweir }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir //____________________________________________________________________________________________________________
427cdf0e10cSrcweir //	impl but public method to register service
428cdf0e10cSrcweir //____________________________________________________________________________________________________________
429cdf0e10cSrcweir 
impl_getStaticImplementationName()430cdf0e10cSrcweir const OUString StatusIndicator::impl_getStaticImplementationName()
431cdf0e10cSrcweir {
432cdf0e10cSrcweir 	return OUString::createFromAscii( IMPLEMENTATIONNAME_STATUSINDICATOR );
433cdf0e10cSrcweir }
434cdf0e10cSrcweir 
435cdf0e10cSrcweir //____________________________________________________________________________________________________________
436cdf0e10cSrcweir //	protected method
437cdf0e10cSrcweir //____________________________________________________________________________________________________________
438cdf0e10cSrcweir 
impl_getWindowDescriptor(const Reference<XWindowPeer> & xParentPeer)439cdf0e10cSrcweir WindowDescriptor* StatusIndicator::impl_getWindowDescriptor( const Reference< XWindowPeer >& xParentPeer )
440cdf0e10cSrcweir {
441cdf0e10cSrcweir 	// - used from "createPeer()" to set the values of an ::com::sun::star::awt::WindowDescriptor !!!
442cdf0e10cSrcweir 	// - if you will change the descriptor-values, you must override this virtuell function
443cdf0e10cSrcweir 	// - the caller must release the memory for this dynamical descriptor !!!
444cdf0e10cSrcweir 
445cdf0e10cSrcweir 	WindowDescriptor* pDescriptor = new WindowDescriptor ;
446cdf0e10cSrcweir 
447cdf0e10cSrcweir 	pDescriptor->Type				=	WindowClass_SIMPLE								;
448cdf0e10cSrcweir 	pDescriptor->WindowServiceName	=	OUString::createFromAscii( "floatingwindow" )	;
449cdf0e10cSrcweir 	pDescriptor->ParentIndex		=	-1												;
450cdf0e10cSrcweir 	pDescriptor->Parent				=	xParentPeer										;
451cdf0e10cSrcweir 	pDescriptor->Bounds				=	getPosSize ()									;
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 	return pDescriptor ;
454cdf0e10cSrcweir }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir //____________________________________________________________________________________________________________
457cdf0e10cSrcweir //	protected method
458cdf0e10cSrcweir //____________________________________________________________________________________________________________
459cdf0e10cSrcweir 
impl_paint(sal_Int32 nX,sal_Int32 nY,const Reference<XGraphics> & rGraphics)460cdf0e10cSrcweir void StatusIndicator::impl_paint ( sal_Int32 nX, sal_Int32 nY, const Reference< XGraphics > & rGraphics )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir 	// This paint method ist not buffered !!
463cdf0e10cSrcweir 	// Every request paint the completely control. ( but only, if peer exist )
464cdf0e10cSrcweir  	if ( rGraphics.is () )
465cdf0e10cSrcweir 	{
466cdf0e10cSrcweir 		MutexGuard	aGuard (m_aMutex) ;
467cdf0e10cSrcweir 
468cdf0e10cSrcweir         // background = gray
469cdf0e10cSrcweir         Reference< XWindowPeer > xPeer( impl_getPeerWindow(), UNO_QUERY );
470cdf0e10cSrcweir         if( xPeer.is() == sal_True )
471cdf0e10cSrcweir             xPeer->setBackground( BACKGROUNDCOLOR );
472cdf0e10cSrcweir 
473cdf0e10cSrcweir         // FixedText background = gray
474cdf0e10cSrcweir         Reference< XControl > xTextControl( m_xText, UNO_QUERY );
475cdf0e10cSrcweir         xPeer = xTextControl->getPeer();
476cdf0e10cSrcweir         if( xPeer.is() == sal_True )
477cdf0e10cSrcweir             xPeer->setBackground( BACKGROUNDCOLOR );
478cdf0e10cSrcweir 
479cdf0e10cSrcweir         // Progress background = gray
480cdf0e10cSrcweir         xPeer = Reference< XWindowPeer >( m_xProgressBar, UNO_QUERY );
481cdf0e10cSrcweir         if( xPeer.is() == sal_True )
482cdf0e10cSrcweir             xPeer->setBackground( BACKGROUNDCOLOR );
483cdf0e10cSrcweir 
484cdf0e10cSrcweir         // paint shadow border
485cdf0e10cSrcweir         rGraphics->setLineColor ( LINECOLOR_BRIGHT                          );
486cdf0e10cSrcweir         rGraphics->drawLine     ( nX, nY, impl_getWidth(), nY               );
487cdf0e10cSrcweir         rGraphics->drawLine     ( nX, nY, nX             , impl_getHeight() );
488cdf0e10cSrcweir 
489cdf0e10cSrcweir         rGraphics->setLineColor ( LINECOLOR_SHADOW                                                              );
490cdf0e10cSrcweir         rGraphics->drawLine     ( impl_getWidth()-1, impl_getHeight()-1, impl_getWidth()-1, nY                  );
491cdf0e10cSrcweir         rGraphics->drawLine     ( impl_getWidth()-1, impl_getHeight()-1, nX               , impl_getHeight()-1  );
492cdf0e10cSrcweir 	}
493cdf0e10cSrcweir }
494cdf0e10cSrcweir 
495cdf0e10cSrcweir //____________________________________________________________________________________________________________
496cdf0e10cSrcweir //	protected method
497cdf0e10cSrcweir //____________________________________________________________________________________________________________
498cdf0e10cSrcweir 
impl_recalcLayout(const WindowEvent & aEvent)499cdf0e10cSrcweir void StatusIndicator::impl_recalcLayout ( const WindowEvent& aEvent )
500cdf0e10cSrcweir {
501cdf0e10cSrcweir 	sal_Int32	nX_ProgressBar			;
502cdf0e10cSrcweir 	sal_Int32	nY_ProgressBar			;
503cdf0e10cSrcweir 	sal_Int32	nWidth_ProgressBar		;
504cdf0e10cSrcweir 	sal_Int32	nHeight_ProgressBar		;
505cdf0e10cSrcweir 	sal_Int32	nX_Text					;
506cdf0e10cSrcweir 	sal_Int32	nY_Text					;
507cdf0e10cSrcweir 	sal_Int32	nWidth_Text				;
508cdf0e10cSrcweir 	sal_Int32	nHeight_Text			;
509cdf0e10cSrcweir 
510cdf0e10cSrcweir 	// Ready for multithreading
511cdf0e10cSrcweir 	MutexGuard aGuard ( m_aMutex ) ;
512cdf0e10cSrcweir 
513cdf0e10cSrcweir 	// get information about required place of child controls
514cdf0e10cSrcweir 	Size							aWindowSize		( aEvent.Width, aEvent.Height );
515cdf0e10cSrcweir 	Reference< XLayoutConstrains >	xTextLayout		( m_xText, UNO_QUERY );
516cdf0e10cSrcweir 	Size							aTextSize		= xTextLayout->getPreferredSize();
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 	if( aWindowSize.Width < DEFAULT_WIDTH )
519cdf0e10cSrcweir 	{
520cdf0e10cSrcweir 		aWindowSize.Width = DEFAULT_WIDTH;
521cdf0e10cSrcweir 	}
522cdf0e10cSrcweir 	if( aWindowSize.Height < DEFAULT_HEIGHT )
523cdf0e10cSrcweir 	{
524cdf0e10cSrcweir 		aWindowSize.Height = DEFAULT_HEIGHT;
525cdf0e10cSrcweir 	}
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 	// calc position and size of child controls
528cdf0e10cSrcweir     nX_Text             = FREEBORDER                                    ;
529cdf0e10cSrcweir     nY_Text             = FREEBORDER                                    ;
530cdf0e10cSrcweir     nWidth_Text         = aTextSize.Width                               ;
531cdf0e10cSrcweir     nHeight_Text        = aTextSize.Height                              ;
532cdf0e10cSrcweir 
533cdf0e10cSrcweir     nX_ProgressBar      = nX_Text+nWidth_Text+FREEBORDER                ;
534cdf0e10cSrcweir     nY_ProgressBar      = nY_Text                                       ;
535cdf0e10cSrcweir     nWidth_ProgressBar  = aWindowSize.Width-nWidth_Text-(3*FREEBORDER)  ;
536cdf0e10cSrcweir     nHeight_ProgressBar = nHeight_Text                                  ;
537cdf0e10cSrcweir 
538cdf0e10cSrcweir     // Set new position and size on all controls
539cdf0e10cSrcweir 	Reference< XWindow >  xTextWindow		( m_xText		, UNO_QUERY );
540cdf0e10cSrcweir 	Reference< XWindow >  xProgressWindow	( m_xProgressBar, UNO_QUERY );
541cdf0e10cSrcweir 
542cdf0e10cSrcweir 	xTextWindow->setPosSize		( nX_Text		, nY_Text		, nWidth_Text		, nHeight_Text	  		, 15 ) ;
543cdf0e10cSrcweir 	xProgressWindow->setPosSize	( nX_ProgressBar, nY_ProgressBar, nWidth_ProgressBar, nHeight_ProgressBar	, 15 ) ;
544cdf0e10cSrcweir }
545cdf0e10cSrcweir 
546cdf0e10cSrcweir //____________________________________________________________________________________________________________
547cdf0e10cSrcweir //	debug methods
548cdf0e10cSrcweir //____________________________________________________________________________________________________________
549cdf0e10cSrcweir 
550cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
551cdf0e10cSrcweir 
552cdf0e10cSrcweir #endif  // #if OSL_DEBUG_LEVEL > 1
553cdf0e10cSrcweir 
554cdf0e10cSrcweir }	// namespace unocontrols
555