xref: /AOO41X/main/UnoControls/source/controls/progressmonitor.cxx (revision 0b4ced1d4e3a9bc987eae61b8e131e5e85d0fb11)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 //____________________________________________________________________________________________________________
25 //  my own includes
26 //____________________________________________________________________________________________________________
27 
28 #include "progressmonitor.hxx"
29 
30 //____________________________________________________________________________________________________________
31 //  includes of other projects
32 //____________________________________________________________________________________________________________
33 #include <com/sun/star/awt/GradientStyle.hpp>
34 #include <com/sun/star/awt/RasterOperation.hpp>
35 #include <com/sun/star/awt/Gradient.hpp>
36 #include <com/sun/star/awt/XGraphics.hpp>
37 #include <com/sun/star/awt/PosSize.hpp>
38 #include <cppuhelper/typeprovider.hxx>
39 #include <tools/debug.hxx>
40 #include <tools/solar.h>
41 
42 //____________________________________________________________________________________________________________
43 //  includes of my project
44 //____________________________________________________________________________________________________________
45 #include "progressbar.hxx"
46 
47 //____________________________________________________________________________________________________________
48 //  namespace
49 //____________________________________________________________________________________________________________
50 
51 using namespace ::cppu                  ;
52 using namespace ::osl                   ;
53 using namespace ::rtl                   ;
54 using namespace ::com::sun::star::uno   ;
55 using namespace ::com::sun::star::lang  ;
56 using namespace ::com::sun::star::awt   ;
57 
58 namespace unocontrols{
59 
60 //____________________________________________________________________________________________________________
61 //  construct/destruct
62 //____________________________________________________________________________________________________________
63 
ProgressMonitor(const Reference<XMultiServiceFactory> & xFactory)64 ProgressMonitor::ProgressMonitor( const Reference< XMultiServiceFactory >& xFactory )
65     : BaseContainerControl  ( xFactory  )
66 {
67     // Its not allowed to work with member in this method (refcounter !!!)
68     // But with a HACK (++refcount) its "OK" :-(
69     ++m_refCount ;
70 
71     // Create instances for fixedtext, button and progress ...
72     m_xTopic_Top    = Reference< XFixedText >       ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_SERVICENAME   ) ), UNO_QUERY ) ;
73     m_xText_Top     = Reference< XFixedText >       ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_SERVICENAME   ) ), UNO_QUERY ) ;
74     m_xTopic_Bottom = Reference< XFixedText >       ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_SERVICENAME   ) ), UNO_QUERY ) ;
75     m_xText_Bottom  = Reference< XFixedText >       ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_SERVICENAME   ) ), UNO_QUERY ) ;
76     m_xButton       = Reference< XButton >          ( xFactory->createInstance ( OUString::createFromAscii( BUTTON_SERVICENAME      ) ), UNO_QUERY ) ;
77     m_xProgressBar  = Reference< XProgressBar >     ( xFactory->createInstance ( OUString::createFromAscii( SERVICENAME_PROGRESSBAR ) ), UNO_QUERY ) ;
78 
79     // ... cast controls to Reference< XControl >  (for "setModel"!) ...
80     Reference< XControl >   xRef_Topic_Top      ( m_xTopic_Top    , UNO_QUERY ) ;
81     Reference< XControl >   xRef_Text_Top       ( m_xText_Top     , UNO_QUERY ) ;
82     Reference< XControl >   xRef_Topic_Bottom   ( m_xTopic_Bottom , UNO_QUERY ) ;
83     Reference< XControl >   xRef_Text_Bottom    ( m_xText_Bottom  , UNO_QUERY ) ;
84     Reference< XControl >   xRef_Button         ( m_xButton       , UNO_QUERY ) ;
85     Reference< XControl >   xRef_ProgressBar    ( m_xProgressBar  , UNO_QUERY ) ;
86 
87     // ... set models ...
88     xRef_Topic_Top->setModel        ( Reference< XControlModel >  ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_MODELNAME   ) ), UNO_QUERY ) ) ;
89     xRef_Text_Top->setModel         ( Reference< XControlModel >  ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_MODELNAME   ) ), UNO_QUERY ) ) ;
90     xRef_Topic_Bottom->setModel     ( Reference< XControlModel >  ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_MODELNAME   ) ), UNO_QUERY ) ) ;
91     xRef_Text_Bottom->setModel      ( Reference< XControlModel >  ( xFactory->createInstance ( OUString::createFromAscii( FIXEDTEXT_MODELNAME   ) ), UNO_QUERY ) ) ;
92     xRef_Button->setModel           ( Reference< XControlModel >  ( xFactory->createInstance ( OUString::createFromAscii( BUTTON_MODELNAME      ) ), UNO_QUERY ) ) ;
93     // ProgressBar has no model !!!
94 
95     // ... and add controls to basecontainercontrol!
96     addControl ( OUString::createFromAscii( CONTROLNAME_TEXT        ) , xRef_Topic_Top      ) ;
97     addControl ( OUString::createFromAscii( CONTROLNAME_TEXT        ) , xRef_Text_Top       ) ;
98     addControl ( OUString::createFromAscii( CONTROLNAME_TEXT        ) , xRef_Topic_Bottom   ) ;
99     addControl ( OUString::createFromAscii( CONTROLNAME_TEXT        ) , xRef_Text_Bottom    ) ;
100     addControl ( OUString::createFromAscii( CONTROLNAME_BUTTON      ) , xRef_Button         ) ;
101     addControl ( OUString::createFromAscii( CONTROLNAME_PROGRESSBAR ) , xRef_ProgressBar    ) ;
102 
103     // FixedText make it automaticly visible by himself ... but not the progressbar !!!
104     // it must be set explicitly
105     Reference< XWindow > xWindowRef_ProgressBar( m_xProgressBar, UNO_QUERY );
106     xWindowRef_ProgressBar->setVisible( sal_True );
107 
108     // Reset to defaults !!!
109     // (progressbar take automaticly its own defaults)
110     m_xButton->setLabel         ( OUString::createFromAscii( DEFAULT_BUTTONLABEL    ) ) ;
111     m_xTopic_Top->setText       ( OUString::createFromAscii( DEFAULT_TOPIC          ) ) ;
112     m_xText_Top->setText        ( OUString::createFromAscii( DEFAULT_TEXT           ) ) ;
113     m_xTopic_Bottom->setText    ( OUString::createFromAscii( DEFAULT_TOPIC          ) ) ;
114     m_xText_Bottom->setText     ( OUString::createFromAscii( DEFAULT_TEXT           ) ) ;
115 
116     --m_refCount ;
117 
118     // Initialize info lists for fixedtext's
119     m_pTextlist_Top     = new IMPL_Textlist ;
120     m_pTextlist_Bottom  = new IMPL_Textlist ;
121 }
122 
~ProgressMonitor()123 ProgressMonitor::~ProgressMonitor()
124 {
125     impl_cleanMemory () ;
126 }
127 
128 //____________________________________________________________________________________________________________
129 //  XInterface
130 //____________________________________________________________________________________________________________
131 
queryInterface(const Type & rType)132 Any SAL_CALL ProgressMonitor::queryInterface( const Type& rType ) throw( RuntimeException )
133 {
134     // Attention:
135     //  Don't use mutex or guard in this method!!! Is a method of XInterface.
136     Any aReturn ;
137     Reference< XInterface > xDel = BaseContainerControl::impl_getDelegator();
138     if ( xDel.is() )
139     {
140         // If an delegator exist, forward question to his queryInterface.
141         // Delegator will ask his own queryAggregation!
142         aReturn = xDel->queryInterface( rType );
143     }
144     else
145     {
146         // If an delegator unknown, forward question to own queryAggregation.
147         aReturn = queryAggregation( rType );
148     }
149 
150     return aReturn ;
151 }
152 
153 //____________________________________________________________________________________________________________
154 //  XInterface
155 //____________________________________________________________________________________________________________
156 
acquire()157 void SAL_CALL ProgressMonitor::acquire() throw()
158 {
159     // Attention:
160     //  Don't use mutex or guard in this method!!! Is a method of XInterface.
161 
162     // Forward to baseclass
163     BaseControl::acquire();
164 }
165 
166 //____________________________________________________________________________________________________________
167 //  XInterface
168 //____________________________________________________________________________________________________________
169 
release()170 void SAL_CALL ProgressMonitor::release() throw()
171 {
172     // Attention:
173     //  Don't use mutex or guard in this method!!! Is a method of XInterface.
174 
175     // Forward to baseclass
176     BaseControl::release();
177 }
178 
179 //____________________________________________________________________________________________________________
180 //  XTypeProvider
181 //____________________________________________________________________________________________________________
182 
getTypes()183 Sequence< Type > SAL_CALL ProgressMonitor::getTypes() throw( RuntimeException )
184 {
185     // Optimize this method !
186     // We initialize a static variable only one time. And we don't must use a mutex at every call!
187     // For the first call; pTypeCollection is NULL - for the second call pTypeCollection is different from NULL!
188     static OTypeCollection* pTypeCollection = NULL ;
189 
190     if ( pTypeCollection == NULL )
191     {
192         // Ready for multithreading; get global mutex for first call of this method only! see before
193         MutexGuard aGuard( Mutex::getGlobalMutex() );
194 
195         // Control these pointer again ... it can be, that another instance will be faster then these!
196         if ( pTypeCollection == NULL )
197         {
198             // Create a static typecollection ...
199             static OTypeCollection aTypeCollection  (   ::getCppuType(( const Reference< XLayoutConstrains  >*)NULL )   ,
200                                                         ::getCppuType(( const Reference< XButton            >*)NULL )   ,
201                                                         ::getCppuType(( const Reference< XProgressMonitor   >*)NULL )   ,
202                                                         BaseContainerControl::getTypes()
203                                                     );
204             // ... and set his address to static pointer!
205             pTypeCollection = &aTypeCollection ;
206         }
207     }
208 
209     return pTypeCollection->getTypes();
210 }
211 
212 //____________________________________________________________________________________________________________
213 //  XAggregation
214 //____________________________________________________________________________________________________________
215 
queryAggregation(const Type & aType)216 Any SAL_CALL ProgressMonitor::queryAggregation( const Type& aType ) throw( RuntimeException )
217 {
218     // Ask for my own supported interfaces ...
219     // Attention: XTypeProvider and XInterface are supported by OComponentHelper!
220     Any aReturn ( ::cppu::queryInterface(   aType                                       ,
221                                             static_cast< XLayoutConstrains* > ( this )  ,
222                                             static_cast< XButton*           > ( this )  ,
223                                             static_cast< XProgressMonitor*  > ( this )
224                                         )
225                 );
226 
227     // If searched interface not supported by this class ...
228     if ( aReturn.hasValue() == sal_False )
229     {
230         // ... ask baseclasses.
231         aReturn = BaseControl::queryAggregation( aType );
232     }
233 
234     return aReturn ;
235 }
236 
237 //____________________________________________________________________________________________________________
238 //  XProgressMonitor
239 //____________________________________________________________________________________________________________
240 
addText(const OUString & rTopic,const OUString & rText,sal_Bool bbeforeProgress)241 void SAL_CALL ProgressMonitor::addText( const OUString& rTopic, const OUString& rText, sal_Bool bbeforeProgress ) throw( RuntimeException )
242 {
243     // Safe impossible cases
244     // Check valid call of this method.
245     DBG_ASSERT ( impl_debug_checkParameter ( rTopic, rText, bbeforeProgress )   , "ProgressMonitor::addText()\nCall without valid parameters!\n") ;
246     DBG_ASSERT ( !(impl_searchTopic ( rTopic, bbeforeProgress ) != NULL )       , "ProgresMonitor::addText()\nThe text already exist.\n"        ) ;
247 
248     // Do nothing (in Release), if topic already exist.
249     if ( impl_searchTopic ( rTopic, bbeforeProgress ) != NULL )
250     {
251         return ;
252     }
253 
254     // Else ... take memory for new item ...
255     IMPL_TextlistItem*  pTextItem = new IMPL_TextlistItem ;
256 
257     if ( pTextItem != NULL )
258     {
259         // Set values ...
260         pTextItem->sTopic   = rTopic ;
261         pTextItem->sText    = rText ;
262 
263         // Ready for multithreading
264         MutexGuard aGuard ( m_aMutex ) ;
265 
266         // ... and insert it in right list.
267         if ( bbeforeProgress == sal_True )
268         {
269             m_pTextlist_Top->Insert    ( pTextItem, LIST_APPEND ) ;
270         }
271         else
272         {
273             m_pTextlist_Bottom->Insert ( pTextItem, LIST_APPEND ) ;
274         }
275     }
276 
277     // ... update window
278     impl_rebuildFixedText   () ;
279     impl_recalcLayout       () ;
280 }
281 
282 //____________________________________________________________________________________________________________
283 //  XProgressMonitor
284 //____________________________________________________________________________________________________________
285 
removeText(const OUString & rTopic,sal_Bool bbeforeProgress)286 void SAL_CALL ProgressMonitor::removeText ( const OUString& rTopic, sal_Bool bbeforeProgress ) throw( RuntimeException )
287 {
288     // Safe impossible cases
289     // Check valid call of this method.
290     DBG_ASSERT ( impl_debug_checkParameter ( rTopic, bbeforeProgress ), "ProgressMonitor::removeText()\nCall without valid parameters!\n" ) ;
291 
292     // Search the topic ...
293     IMPL_TextlistItem* pSearchItem = impl_searchTopic ( rTopic, bbeforeProgress ) ;
294 
295     if ( pSearchItem != NULL )
296     {
297         // Ready for multithreading
298         MutexGuard aGuard ( m_aMutex ) ;
299 
300         // ... delete item from right list ...
301         if ( bbeforeProgress == sal_True )
302         {
303             m_pTextlist_Top->Remove    ( pSearchItem ) ;
304         }
305         else
306         {
307             m_pTextlist_Bottom->Remove ( pSearchItem ) ;
308         }
309 
310         delete pSearchItem ;
311 
312         // ... and update window.
313         impl_rebuildFixedText   () ;
314         impl_recalcLayout       () ;
315     }
316 }
317 
318 //____________________________________________________________________________________________________________
319 //  XProgressMonitor
320 //____________________________________________________________________________________________________________
321 
updateText(const OUString & rTopic,const OUString & rText,sal_Bool bbeforeProgress)322 void SAL_CALL ProgressMonitor::updateText ( const OUString& rTopic, const OUString& rText, sal_Bool bbeforeProgress ) throw( RuntimeException )
323 {
324     // Safe impossible cases
325     // Check valid call of this method.
326     DBG_ASSERT ( impl_debug_checkParameter ( rTopic, rText, bbeforeProgress ), "ProgressMonitor::updateText()\nCall without valid parameters!\n" ) ;
327 
328     // Search topic ...
329     IMPL_TextlistItem* pSearchItem = impl_searchTopic ( rTopic, bbeforeProgress ) ;
330 
331     if ( pSearchItem != NULL )
332     {
333         // Ready for multithreading
334         MutexGuard aGuard ( m_aMutex ) ;
335 
336         // ... update text ...
337         pSearchItem->sText = rText ;
338 
339         // ... and update window.
340         impl_rebuildFixedText   () ;
341         impl_recalcLayout       () ;
342     }
343 }
344 
345 //____________________________________________________________________________________________________________
346 //  XProgressBar
347 //____________________________________________________________________________________________________________
348 
setForegroundColor(sal_Int32 nColor)349 void SAL_CALL ProgressMonitor::setForegroundColor ( sal_Int32 nColor ) throw( RuntimeException )
350 {
351     // Ready for multithreading
352     MutexGuard aGuard ( m_aMutex ) ;
353 
354     if ( m_xProgressBar.is () )
355     {
356         m_xProgressBar->setForegroundColor ( nColor ) ;
357     }
358 }
359 
360 //____________________________________________________________________________________________________________
361 //  XProgressBar
362 //____________________________________________________________________________________________________________
363 
setBackgroundColor(sal_Int32 nColor)364 void SAL_CALL ProgressMonitor::setBackgroundColor ( sal_Int32 nColor ) throw( RuntimeException )
365 {
366     // Ready for multithreading
367     MutexGuard aGuard ( m_aMutex ) ;
368 
369     if ( m_xProgressBar.is () )
370     {
371         m_xProgressBar->setBackgroundColor ( nColor ) ;
372     }
373 }
374 
375 //____________________________________________________________________________________________________________
376 //  XProgressBar
377 //____________________________________________________________________________________________________________
378 
setValue(sal_Int32 nValue)379 void SAL_CALL ProgressMonitor::setValue ( sal_Int32 nValue ) throw( RuntimeException )
380 {
381     // Ready for multithreading
382     MutexGuard aGuard ( m_aMutex ) ;
383 
384     if ( m_xProgressBar.is () )
385     {
386         m_xProgressBar->setValue ( nValue ) ;
387     }
388 }
389 
390 //____________________________________________________________________________________________________________
391 //  XProgressBar
392 //____________________________________________________________________________________________________________
393 
setRange(sal_Int32 nMin,sal_Int32 nMax)394 void SAL_CALL ProgressMonitor::setRange ( sal_Int32 nMin, sal_Int32 nMax ) throw( RuntimeException )
395 {
396     // Ready for multithreading
397     MutexGuard aGuard ( m_aMutex ) ;
398 
399     if ( m_xProgressBar.is () )
400     {
401         m_xProgressBar->setRange ( nMin, nMax ) ;
402     }
403 }
404 
405 //____________________________________________________________________________________________________________
406 //  XProgressBar
407 //____________________________________________________________________________________________________________
408 
getValue()409 sal_Int32 SAL_CALL ProgressMonitor::getValue () throw( RuntimeException )
410 {
411     // Ready for multithreading
412     MutexGuard aGuard ( m_aMutex ) ;
413 
414     if (m_xProgressBar.is())
415     {
416         return m_xProgressBar->getValue () ;
417     }
418 
419     return 0 ;
420 }
421 
422 //____________________________________________________________________________________________________________
423 //  XButton
424 //____________________________________________________________________________________________________________
425 
addActionListener(const Reference<XActionListener> & rListener)426 void SAL_CALL ProgressMonitor::addActionListener ( const Reference< XActionListener > & rListener ) throw( RuntimeException )
427 {
428     // Ready for multithreading
429     MutexGuard aGuard ( m_aMutex ) ;
430 
431     if ( m_xButton.is () )
432     {
433         m_xButton->addActionListener ( rListener ) ;
434     }
435 }
436 
437 //____________________________________________________________________________________________________________
438 //  XButton
439 //____________________________________________________________________________________________________________
440 
removeActionListener(const Reference<XActionListener> & rListener)441 void SAL_CALL ProgressMonitor::removeActionListener ( const Reference< XActionListener > & rListener ) throw( RuntimeException )
442 {
443     // Ready for multithreading
444     MutexGuard aGuard ( m_aMutex ) ;
445 
446     if ( m_xButton.is () )
447     {
448         m_xButton->removeActionListener ( rListener ) ;
449     }
450 }
451 
452 //____________________________________________________________________________________________________________
453 //  XButton
454 //____________________________________________________________________________________________________________
455 
setLabel(const OUString & rLabel)456 void SAL_CALL ProgressMonitor::setLabel ( const OUString& rLabel ) throw( RuntimeException )
457 {
458     // Ready for multithreading
459     MutexGuard aGuard ( m_aMutex ) ;
460 
461     if ( m_xButton.is () )
462     {
463         m_xButton->setLabel ( rLabel ) ;
464     }
465 }
466 
467 //____________________________________________________________________________________________________________
468 //  XButton
469 //____________________________________________________________________________________________________________
470 
setActionCommand(const OUString & rCommand)471 void SAL_CALL ProgressMonitor::setActionCommand ( const OUString& rCommand ) throw( RuntimeException )
472 {
473     // Ready for multithreading
474     MutexGuard aGuard ( m_aMutex ) ;
475 
476     if ( m_xButton.is () )
477     {
478         m_xButton->setActionCommand ( rCommand ) ;
479     }
480 }
481 
482 //____________________________________________________________________________________________________________
483 //  XLayoutConstrains
484 //____________________________________________________________________________________________________________
485 
getMinimumSize()486 Size SAL_CALL ProgressMonitor::getMinimumSize () throw( RuntimeException )
487 {
488     return Size (DEFAULT_WIDTH, DEFAULT_HEIGHT) ;
489 }
490 
491 //____________________________________________________________________________________________________________
492 //  XLayoutConstrains
493 //____________________________________________________________________________________________________________
494 
getPreferredSize()495 Size SAL_CALL ProgressMonitor::getPreferredSize () throw( RuntimeException )
496 {
497     // Ready for multithreading
498     ClearableMutexGuard aGuard ( m_aMutex ) ;
499 
500     // get information about required place of child controls
501     Reference< XLayoutConstrains >  xTopicLayout_Top        ( m_xTopic_Top      , UNO_QUERY ) ;
502     Reference< XLayoutConstrains >  xTopicLayout_Bottom     ( m_xTopic_Bottom   , UNO_QUERY ) ;
503     Reference< XLayoutConstrains >  xButtonLayout           ( m_xButton         , UNO_QUERY ) ;
504     Reference< XWindow >            xProgressBarWindow      ( m_xProgressBar    , UNO_QUERY ) ;
505 
506     Size        aTopicSize_Top      =   xTopicLayout_Top->getPreferredSize          ();
507     Size        aTopicSize_Bottom   =   xTopicLayout_Bottom->getPreferredSize       ();
508     Size        aButtonSize         =   xButtonLayout->getPreferredSize             ();
509     Rectangle   aTempRectangle      =   xProgressBarWindow->getPosSize              ();
510     Size        aProgressBarSize    =   Size( aTempRectangle.Width, aTempRectangle.Height );
511 
512     aGuard.clear () ;
513 
514     // calc preferred size of progressmonitor
515     sal_Int32   nWidth  =   0 ;
516     sal_Int32   nHeight =   0 ;
517 
518     nWidth   =  3 * FREEBORDER          ;
519     nWidth  +=  aProgressBarSize.Width  ;
520 
521     nHeight  =  6 * FREEBORDER          ;
522     nHeight +=  aTopicSize_Top.Height   ;
523     nHeight +=  aProgressBarSize.Height ;
524     nHeight +=  aTopicSize_Bottom.Height;
525     nHeight +=  2                       ;   // 1 for black line, 1 for white line = 3D-Line!
526     nHeight +=  aButtonSize.Height      ;
527 
528     // norm to minimum
529     if ( nWidth<DEFAULT_WIDTH )
530     {
531         nWidth = DEFAULT_WIDTH ;
532     }
533     if ( nHeight<DEFAULT_HEIGHT )
534     {
535         nHeight = DEFAULT_HEIGHT ;
536     }
537 
538     // return to caller
539     return Size ( nWidth, nHeight ) ;
540 }
541 
542 //____________________________________________________________________________________________________________
543 //  XLayoutConstrains
544 //____________________________________________________________________________________________________________
545 
calcAdjustedSize(const Size &)546 Size SAL_CALL ProgressMonitor::calcAdjustedSize ( const Size& /*rNewSize*/ ) throw( RuntimeException )
547 {
548     return getPreferredSize () ;
549 }
550 
551 //____________________________________________________________________________________________________________
552 //  XControl
553 //____________________________________________________________________________________________________________
554 
createPeer(const Reference<XToolkit> & rToolkit,const Reference<XWindowPeer> & rParent)555 void SAL_CALL ProgressMonitor::createPeer ( const Reference< XToolkit > & rToolkit, const Reference< XWindowPeer > & rParent    ) throw( RuntimeException )
556 {
557     if (!getPeer().is())
558     {
559         BaseContainerControl::createPeer ( rToolkit, rParent ) ;
560 
561         // If user forget to call "setPosSize()", we have still a correct size.
562         // And a "MinimumSize" IS A "MinimumSize"!
563         // We change not the position of control at this point.
564         Size aDefaultSize = getMinimumSize () ;
565         setPosSize ( 0, 0, aDefaultSize.Width, aDefaultSize.Height, PosSize::SIZE ) ;
566     }
567 }
568 
569 //____________________________________________________________________________________________________________
570 //  XControl
571 //____________________________________________________________________________________________________________
572 
setModel(const Reference<XControlModel> &)573 sal_Bool SAL_CALL ProgressMonitor::setModel ( const Reference< XControlModel > & /*rModel*/ ) throw( RuntimeException )
574 {
575     // We have no model.
576     return sal_False ;
577 }
578 
579 //____________________________________________________________________________________________________________
580 //  XControl
581 //____________________________________________________________________________________________________________
582 
getModel()583 Reference< XControlModel > SAL_CALL ProgressMonitor::getModel () throw( RuntimeException )
584 {
585     // We have no model.
586     // return (XControlModel*)this ;
587     return Reference< XControlModel >  () ;
588 }
589 
590 //____________________________________________________________________________________________________________
591 //  XComponent
592 //____________________________________________________________________________________________________________
593 
dispose()594 void SAL_CALL ProgressMonitor::dispose () throw( RuntimeException )
595 {
596     // Ready for multithreading
597     MutexGuard aGuard ( m_aMutex ) ;
598 
599     // "removeControl()" control the state of a reference
600     Reference< XControl >  xRef_Topic_Top       ( m_xTopic_Top      , UNO_QUERY ) ;
601     Reference< XControl >  xRef_Text_Top        ( m_xText_Top       , UNO_QUERY ) ;
602     Reference< XControl >  xRef_Topic_Bottom    ( m_xTopic_Bottom   , UNO_QUERY ) ;
603     Reference< XControl >  xRef_Text_Bottom     ( m_xText_Bottom    , UNO_QUERY ) ;
604     Reference< XControl >  xRef_Button          ( m_xButton         , UNO_QUERY ) ;
605     Reference< XControl >  xRef_ProgressBar     ( m_xProgressBar    , UNO_QUERY ) ;
606 
607     removeControl ( xRef_Topic_Top      ) ;
608     removeControl ( xRef_Text_Top       ) ;
609     removeControl ( xRef_Topic_Bottom   ) ;
610     removeControl ( xRef_Text_Bottom    ) ;
611     removeControl ( xRef_Button         ) ;
612     removeControl ( xRef_ProgressBar    ) ;
613 
614     // do'nt use "...->clear ()" or "... = XFixedText ()"
615     // when other hold a reference at this object !!!
616     xRef_Topic_Top->dispose     () ;
617     xRef_Text_Top->dispose      () ;
618     xRef_Topic_Bottom->dispose  () ;
619     xRef_Text_Bottom->dispose   () ;
620     xRef_Button->dispose        () ;
621     xRef_ProgressBar->dispose   () ;
622 
623     BaseContainerControl::dispose () ;
624 }
625 
626 //____________________________________________________________________________________________________________
627 //  XWindow
628 //____________________________________________________________________________________________________________
629 
setPosSize(sal_Int32 nX,sal_Int32 nY,sal_Int32 nWidth,sal_Int32 nHeight,sal_Int16 nFlags)630 void SAL_CALL ProgressMonitor::setPosSize ( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int16 nFlags ) throw( RuntimeException )
631 {
632     Rectangle   aBasePosSize = getPosSize () ;
633     BaseContainerControl::setPosSize (nX, nY, nWidth, nHeight, nFlags) ;
634 
635     // if position or size changed
636     if (
637         ( nWidth  != aBasePosSize.Width ) ||
638         ( nHeight != aBasePosSize.Height)
639        )
640     {
641         // calc new layout for controls
642         impl_recalcLayout () ;
643         // clear background (!)
644         // [Childs was repainted in "recalcLayout" by setPosSize() automaticly!]
645         getPeer()->invalidate(2);
646         // and repaint the control
647         impl_paint ( 0, 0, impl_getGraphicsPeer() ) ;
648     }
649 }
650 
651 //____________________________________________________________________________________________________________
652 //  impl but public method to register service
653 //____________________________________________________________________________________________________________
654 
impl_getStaticSupportedServiceNames()655 const Sequence< OUString > ProgressMonitor::impl_getStaticSupportedServiceNames()
656 {
657     MutexGuard aGuard( Mutex::getGlobalMutex() );
658     Sequence< OUString > seqServiceNames( 1 );
659     seqServiceNames.getArray() [0] = OUString::createFromAscii( SERVICENAME_PROGRESSMONITOR );
660     return seqServiceNames ;
661 }
662 
663 //____________________________________________________________________________________________________________
664 //  impl but public method to register service
665 //____________________________________________________________________________________________________________
666 
impl_getStaticImplementationName()667 const OUString ProgressMonitor::impl_getStaticImplementationName()
668 {
669     return OUString::createFromAscii( IMPLEMENTATIONNAME_PROGRESSMONITOR );
670 }
671 
672 //____________________________________________________________________________________________________________
673 //  protected method
674 //____________________________________________________________________________________________________________
675 
impl_paint(sal_Int32 nX,sal_Int32 nY,const Reference<XGraphics> & rGraphics)676 void ProgressMonitor::impl_paint ( sal_Int32 nX, sal_Int32 nY, const Reference< XGraphics > & rGraphics )
677 {
678     if (rGraphics.is())
679     {
680         // Ready for multithreading
681         MutexGuard aGuard ( m_aMutex ) ;
682 
683         // paint shadowed border around the progressmonitor
684         rGraphics->setLineColor ( LINECOLOR_SHADOW                                                              ) ;
685         rGraphics->drawLine     ( impl_getWidth()-1, impl_getHeight()-1, impl_getWidth()-1, nY                  ) ;
686         rGraphics->drawLine     ( impl_getWidth()-1, impl_getHeight()-1, nX               , impl_getHeight()-1  ) ;
687 
688         rGraphics->setLineColor ( LINECOLOR_BRIGHT                          ) ;
689         rGraphics->drawLine     ( nX, nY, impl_getWidth(), nY               ) ;
690         rGraphics->drawLine     ( nX, nY, nX             , impl_getHeight() ) ;
691 
692         // Paint 3D-line
693         rGraphics->setLineColor ( LINECOLOR_SHADOW  ) ;
694         rGraphics->drawLine     ( m_a3DLine.X, m_a3DLine.Y, m_a3DLine.X+m_a3DLine.Width, m_a3DLine.Y ) ;
695 
696         rGraphics->setLineColor ( LINECOLOR_BRIGHT  ) ;
697         rGraphics->drawLine     ( m_a3DLine.X, m_a3DLine.Y+1, m_a3DLine.X+m_a3DLine.Width, m_a3DLine.Y+1 ) ;
698     }
699 }
700 
701 //____________________________________________________________________________________________________________
702 //  private method
703 //____________________________________________________________________________________________________________
704 
impl_recalcLayout()705 void ProgressMonitor::impl_recalcLayout ()
706 {
707     sal_Int32   nX_Button               ;
708     sal_Int32   nY_Button               ;
709     sal_Int32   nWidth_Button           ;
710     sal_Int32   nHeight_Button          ;
711 
712     sal_Int32   nX_ProgressBar          ;
713     sal_Int32   nY_ProgressBar          ;
714     sal_Int32   nWidth_ProgressBar      ;
715     sal_Int32   nHeight_ProgressBar     ;
716 
717     sal_Int32   nX_3DLine               ;
718     sal_Int32   nY_3DLine               ;
719     sal_Int32   nWidth_3DLine           ;
720     sal_Int32   nHeight_3DLine          ;
721 
722     sal_Int32   nX_Text_Top             ;
723     sal_Int32   nY_Text_Top             ;
724     sal_Int32   nWidth_Text_Top         ;
725     sal_Int32   nHeight_Text_Top        ;
726 
727     sal_Int32   nX_Topic_Top            ;
728     sal_Int32   nY_Topic_Top            ;
729     sal_Int32   nWidth_Topic_Top        ;
730     sal_Int32   nHeight_Topic_Top       ;
731 
732     sal_Int32   nX_Text_Bottom          ;
733     sal_Int32   nY_Text_Bottom          ;
734     sal_Int32   nWidth_Text_Bottom      ;
735     sal_Int32   nHeight_Text_Bottom     ;
736 
737     sal_Int32   nX_Topic_Bottom         ;
738     sal_Int32   nY_Topic_Bottom         ;
739     sal_Int32   nWidth_Topic_Bottom     ;
740     sal_Int32   nHeight_Topic_Bottom    ;
741 
742     // Ready for multithreading
743     MutexGuard aGuard ( m_aMutex ) ;
744 
745     // get information about required place of child controls
746     Reference< XLayoutConstrains >  xTopicLayout_Top    ( m_xTopic_Top      , UNO_QUERY ) ;
747     Reference< XLayoutConstrains >  xTextLayout_Top     ( m_xText_Top       , UNO_QUERY ) ;
748     Reference< XLayoutConstrains >  xTopicLayout_Bottom ( m_xTopic_Bottom   , UNO_QUERY ) ;
749     Reference< XLayoutConstrains >  xTextLayout_Bottom  ( m_xText_Bottom    , UNO_QUERY ) ;
750     Reference< XLayoutConstrains >  xButtonLayout       ( m_xButton         , UNO_QUERY ) ;
751 
752     Size    aTopicSize_Top      =   xTopicLayout_Top->getPreferredSize      () ;
753     Size    aTextSize_Top       =   xTextLayout_Top->getPreferredSize       () ;
754     Size    aTopicSize_Bottom   =   xTopicLayout_Bottom->getPreferredSize   () ;
755     Size    aTextSize_Bottom    =   xTextLayout_Bottom->getPreferredSize    () ;
756     Size    aButtonSize         =   xButtonLayout->getPreferredSize         () ;
757 
758     // calc position and size of child controls
759     // Button has preferred size!
760     nWidth_Button           =   aButtonSize.Width                                               ;
761     nHeight_Button          =   aButtonSize.Height                                              ;
762 
763     // Left column before progressbar has preferred size and fixed position.
764     // But "Width" is oriented on left column below progressbar to!!! "max(...)"
765     nX_Topic_Top            =   FREEBORDER                                                      ;
766     nY_Topic_Top            =   FREEBORDER                                                      ;
767     nWidth_Topic_Top        =   Max ( aTopicSize_Top.Width, aTopicSize_Bottom.Width )           ;
768     nHeight_Topic_Top       =   aTopicSize_Top.Height                                           ;
769 
770     // Right column before progressbar has relativ position to left column ...
771     // ... and a size as rest of dialog size!
772     nX_Text_Top             =   nX_Topic_Top+nWidth_Topic_Top+FREEBORDER                        ;
773     nY_Text_Top             =   nY_Topic_Top                                                    ;
774     nWidth_Text_Top         =   Max ( aTextSize_Top.Width, aTextSize_Bottom.Width )             ;
775     // Fix size of this column to minimum!
776     sal_Int32 nSummaryWidth = nWidth_Text_Top+nWidth_Topic_Top+(3*FREEBORDER) ;
777     if ( nSummaryWidth < DEFAULT_WIDTH )
778         nWidth_Text_Top     =   DEFAULT_WIDTH-nWidth_Topic_Top-(3*FREEBORDER);
779     // Fix size of column to maximum!
780     if ( nSummaryWidth > impl_getWidth() )
781         nWidth_Text_Top     =   impl_getWidth()-nWidth_Topic_Top-(3*FREEBORDER)                 ;
782     nHeight_Text_Top        =   nHeight_Topic_Top                                               ;
783 
784     // Position of progressbar is relativ to columns before.
785     // Progressbar.Width  = Dialog.Width !!!
786     // Progressbar.Height = Button.Height
787     nX_ProgressBar          =   nX_Topic_Top                                                    ;
788     nY_ProgressBar          =   nY_Topic_Top+nHeight_Topic_Top+FREEBORDER                       ;
789     nWidth_ProgressBar      =   FREEBORDER+nWidth_Topic_Top+nWidth_Text_Top                     ;
790     nHeight_ProgressBar     =   nHeight_Button                                                  ;
791 
792     // Oriented by left column before progressbar.
793     nX_Topic_Bottom         =   nX_Topic_Top                                                    ;
794     nY_Topic_Bottom         =   nY_ProgressBar+nHeight_ProgressBar+FREEBORDER                   ;
795     nWidth_Topic_Bottom     =   nWidth_Topic_Top                                                ;
796     nHeight_Topic_Bottom    =   aTopicSize_Bottom.Height                                        ;
797 
798     // Oriented by right column before progressbar.
799     nX_Text_Bottom          =   nX_Topic_Bottom+nWidth_Topic_Bottom+FREEBORDER                  ;
800     nY_Text_Bottom          =   nY_Topic_Bottom                                                 ;
801     nWidth_Text_Bottom      =   nWidth_Text_Top                                                 ;
802     nHeight_Text_Bottom     =   nHeight_Topic_Bottom                                            ;
803 
804     // Oriented by progressbar.
805     nX_3DLine               =   nX_Topic_Top                                                    ;
806     nY_3DLine               =   nY_Topic_Bottom+nHeight_Topic_Bottom+(FREEBORDER/2)             ;
807     nWidth_3DLine           =   nWidth_ProgressBar                                              ;
808     nHeight_3DLine          =   1                                                               ;   // Height for ONE line ! (But we paint two lines!)
809 
810     // Oriented by progressbar.
811     nX_Button               =   nX_ProgressBar+nWidth_ProgressBar-nWidth_Button                 ;
812     nY_Button               =   nY_Topic_Bottom+nHeight_Topic_Bottom+FREEBORDER                 ;
813 
814     // Calc offsets to center controls
815     sal_Int32   nDx ;
816     sal_Int32   nDy ;
817 
818     nDx =   ( (2*FREEBORDER)+nWidth_ProgressBar                                                             ) ;
819     nDy =   ( (6*FREEBORDER)+nHeight_Topic_Top+nHeight_ProgressBar+nHeight_Topic_Bottom+2+nHeight_Button    ) ;
820 
821     // At this point use original dialog size to center controls!
822     nDx =   (impl_getWidth ()/2)-(nDx/2)    ;
823     nDy =   (impl_getHeight()/2)-(nDy/2)    ;
824 
825     if ( nDx<0 )
826     {
827         nDx=0 ;
828     }
829     if ( nDy<0 )
830     {
831         nDy=0 ;
832     }
833 
834     // Set new position and size on all controls
835     Reference< XWindow >  xRef_Topic_Top        ( m_xTopic_Top      , UNO_QUERY ) ;
836     Reference< XWindow >  xRef_Text_Top         ( m_xText_Top       , UNO_QUERY ) ;
837     Reference< XWindow >  xRef_Topic_Bottom     ( m_xTopic_Bottom   , UNO_QUERY ) ;
838     Reference< XWindow >  xRef_Text_Bottom      ( m_xText_Bottom    , UNO_QUERY ) ;
839     Reference< XWindow >  xRef_Button           ( m_xButton         , UNO_QUERY ) ;
840     Reference< XWindow >  xRef_ProgressBar      ( m_xProgressBar    , UNO_QUERY ) ;
841 
842     xRef_Topic_Top->setPosSize      ( nDx+nX_Topic_Top      , nDy+nY_Topic_Top      , nWidth_Topic_Top      , nHeight_Topic_Top     , 15 ) ;
843     xRef_Text_Top->setPosSize       ( nDx+nX_Text_Top       , nDy+nY_Text_Top       , nWidth_Text_Top       , nHeight_Text_Top      , 15 ) ;
844     xRef_Topic_Bottom->setPosSize   ( nDx+nX_Topic_Bottom   , nDy+nY_Topic_Bottom   , nWidth_Topic_Bottom   , nHeight_Topic_Bottom  , 15 ) ;
845     xRef_Text_Bottom->setPosSize    ( nDx+nX_Text_Bottom    , nDy+nY_Text_Bottom    , nWidth_Text_Bottom    , nHeight_Text_Bottom   , 15 ) ;
846     xRef_Button->setPosSize         ( nDx+nX_Button         , nDy+nY_Button         , nWidth_Button         , nHeight_Button        , 15 ) ;
847     xRef_ProgressBar->setPosSize    ( nDx+nX_ProgressBar    , nDy+nY_ProgressBar    , nWidth_ProgressBar    , nHeight_ProgressBar   , 15 ) ;
848 
849     m_a3DLine.X         = nDx+nX_Topic_Top                                          ;
850     m_a3DLine.Y         = nDy+nY_Topic_Bottom+nHeight_Topic_Bottom+(FREEBORDER/2)   ;
851     m_a3DLine.Width     = nWidth_ProgressBar                                        ;
852     m_a3DLine.Height    = nHeight_ProgressBar                                       ;
853 
854     // All childcontrols make an implicit repaint in setPosSize()!
855     // Make it also for this 3D-line ...
856     Reference< XGraphics >  xGraphics = impl_getGraphicsPeer () ;
857 
858     xGraphics->setLineColor ( LINECOLOR_SHADOW  ) ;
859     xGraphics->drawLine     ( m_a3DLine.X, m_a3DLine.Y, m_a3DLine.X+m_a3DLine.Width, m_a3DLine.Y ) ;
860 
861     xGraphics->setLineColor ( LINECOLOR_BRIGHT  ) ;
862     xGraphics->drawLine     ( m_a3DLine.X, m_a3DLine.Y+1, m_a3DLine.X+m_a3DLine.Width, m_a3DLine.Y+1 ) ;
863 }
864 
865 //____________________________________________________________________________________________________________
866 //  private method
867 //____________________________________________________________________________________________________________
868 
impl_rebuildFixedText()869 void ProgressMonitor::impl_rebuildFixedText ()
870 {
871     // Ready for multithreading
872     MutexGuard aGuard ( m_aMutex ) ;
873 
874     // Rebuild fixedtext before progress
875 
876     // Rebuild left site of text
877     if (m_xTopic_Top.is())
878     {
879         OUString        aCollectString  ;
880 
881         // Collect all topics from list and format text.
882         // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!!
883         for ( sal_uInt32 n=0; n<m_pTextlist_Top->Count(); ++n )
884         {
885             IMPL_TextlistItem* pSearchItem = m_pTextlist_Top->GetObject (n) ;
886             aCollectString  +=  pSearchItem->sTopic ;
887             aCollectString  +=  OUString::createFromAscii("\n")             ;
888         }
889         aCollectString  +=  OUString::createFromAscii("\0") ;   // It's better :-)
890 
891         m_xTopic_Top->setText ( aCollectString ) ;
892     }
893 
894     // Rebuild right site of text
895     if (m_xText_Top.is())
896     {
897         OUString        aCollectString  ;
898 
899         // Collect all topics from list and format text.
900         // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!!
901         for ( sal_uInt32 n=0; n<m_pTextlist_Top->Count(); ++n )
902         {
903             IMPL_TextlistItem* pSearchItem = m_pTextlist_Top->GetObject (n) ;
904             aCollectString  +=  pSearchItem->sText ;
905             aCollectString  +=  OUString::createFromAscii("\n")            ;
906         }
907         aCollectString  +=  OUString::createFromAscii("\0") ;   // It's better :-)
908 
909         m_xText_Top->setText ( aCollectString ) ;
910     }
911 
912     // Rebuild fixedtext below progress
913 
914     // Rebuild left site of text
915     if (m_xTopic_Bottom.is())
916     {
917         OUString        aCollectString  ;
918 
919         // Collect all topics from list and format text.
920         // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!!
921         for ( sal_uInt32 n=0; n<m_pTextlist_Bottom->Count(); ++n )
922         {
923             IMPL_TextlistItem* pSearchItem = m_pTextlist_Bottom->GetObject (n) ;
924             aCollectString  +=  pSearchItem->sTopic ;
925             aCollectString  +=  OUString::createFromAscii("\n")             ;
926         }
927         aCollectString  +=  OUString::createFromAscii("\0") ;   // It's better :-)
928 
929         m_xTopic_Bottom->setText ( aCollectString ) ;
930     }
931 
932     // Rebuild right site of text
933     if (m_xText_Bottom.is())
934     {
935         OUString        aCollectString  ;
936 
937         // Collect all topics from list and format text.
938         // "\n" MUST BE at the end of line!!! => Else ... topic and his text are not in the same line!!!
939         for ( sal_uInt32 n=0; n<m_pTextlist_Bottom->Count(); ++n )
940         {
941             IMPL_TextlistItem* pSearchItem = m_pTextlist_Bottom->GetObject (n) ;
942             aCollectString  +=  pSearchItem->sText ;
943             aCollectString  +=  OUString::createFromAscii("\n")            ;
944         }
945         aCollectString  +=  OUString::createFromAscii("\0") ;   // It's better :-)
946 
947         m_xText_Bottom->setText ( aCollectString ) ;
948     }
949 }
950 
951 //____________________________________________________________________________________________________________
952 //  private method
953 //____________________________________________________________________________________________________________
954 
impl_cleanMemory()955 void ProgressMonitor::impl_cleanMemory ()
956 {
957     // Ready for multithreading
958     MutexGuard aGuard ( m_aMutex ) ;
959 
960     // Delete all of lists.
961 
962     sal_uInt32 nPosition ;
963 
964     for ( nPosition = 0; nPosition < m_pTextlist_Top->Count () ; ++nPosition )
965     {
966         IMPL_TextlistItem* pSearchItem = m_pTextlist_Top->GetObject ( nPosition ) ;
967         delete pSearchItem ;
968     }
969     m_pTextlist_Top->Clear () ;
970     delete m_pTextlist_Top ;
971 
972     for ( nPosition = 0; nPosition < m_pTextlist_Bottom->Count () ; ++nPosition )
973     {
974         IMPL_TextlistItem* pSearchItem = m_pTextlist_Bottom->GetObject ( nPosition ) ;
975         delete pSearchItem ;
976     }
977     m_pTextlist_Bottom->Clear () ;
978     delete m_pTextlist_Bottom ;
979 }
980 
981 //____________________________________________________________________________________________________________
982 //  private method
983 //____________________________________________________________________________________________________________
984 
impl_searchTopic(const OUString & rTopic,sal_Bool bbeforeProgress)985 IMPL_TextlistItem* ProgressMonitor::impl_searchTopic ( const OUString& rTopic, sal_Bool bbeforeProgress )
986 {
987     // Get right textlist for following operations.
988     IMPL_Textlist* pTextList ;
989 
990     // Ready for multithreading
991     ClearableMutexGuard aGuard ( m_aMutex ) ;
992 
993     if ( bbeforeProgress == sal_True )
994     {
995         pTextList = m_pTextlist_Top    ;
996     }
997     else
998     {
999         pTextList = m_pTextlist_Bottom ;
1000     }
1001 
1002     // Switch off guard.
1003     aGuard.clear () ;
1004 
1005     // Search the topic in textlist.
1006     sal_uInt32  nPosition   =   0                   ;
1007     sal_uInt32  nCount      =   pTextList->Count () ;
1008 
1009     for ( nPosition = 0; nPosition < nCount ; ++nPosition )
1010     {
1011         IMPL_TextlistItem* pSearchItem = pTextList->GetObject ( nPosition ) ;
1012 
1013         if ( pSearchItem->sTopic == rTopic )
1014         {
1015             // We have found this topic ... return a valid pointer.
1016             return pSearchItem ;
1017         }
1018     }
1019 
1020     // We have'nt found this topic ... return a nonvalid pointer.
1021     return NULL ;
1022 }
1023 
1024 //____________________________________________________________________________________________________________
1025 //  debug methods
1026 //____________________________________________________________________________________________________________
1027 
1028 #ifdef DBG_UTIL
1029 
1030 // addText, updateText
impl_debug_checkParameter(const OUString & rTopic,const OUString & rText,sal_Bool)1031 sal_Bool ProgressMonitor::impl_debug_checkParameter ( const OUString& rTopic, const OUString& rText, sal_Bool /*bbeforeProgress*/ )
1032 {
1033     // Check "rTopic"
1034     if ( &rTopic        ==  NULL    ) return sal_False ;    // NULL-pointer for reference ???!!!
1035     if ( rTopic.getLength ()    <   1       ) return sal_False ;    // ""
1036 
1037     // Check "rText"
1038     if ( &rText         ==  NULL    ) return sal_False ;    // NULL-pointer for reference ???!!!
1039     if ( rText.getLength () <   1       ) return sal_False ;    // ""
1040 
1041     // "bbeforeProgress" is valid in everyway!
1042 
1043     // Parameter OK ... return sal_True.
1044     return sal_True ;
1045 }
1046 
1047 // removeText
impl_debug_checkParameter(const OUString & rTopic,sal_Bool)1048 sal_Bool ProgressMonitor::impl_debug_checkParameter ( const OUString& rTopic, sal_Bool /*bbeforeProgress*/ )
1049 {
1050     // Check "rTopic"
1051     if ( &rTopic        ==  NULL    ) return sal_False ;    // NULL-pointer for reference ???!!!
1052     if ( rTopic.getLength ()    <   1       ) return sal_False ;    // ""
1053 
1054     // "bbeforeProgress" is valid in everyway!
1055 
1056     // Parameter OK ... return sal_True.
1057     return sal_True ;
1058 }
1059 
1060 #endif  // #ifdef DBG_UTIL
1061 
1062 }   // namespace unocontrols
1063