xref: /AOO41X/main/sfx2/source/statbar/stbitem.cxx (revision 47148b3bc50811ceb41802e4cc50a5db21535900)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sfx2.hxx"
26 #include <svl/stritem.hxx>
27 #ifndef GCC
28 #endif
29 #include <com/sun/star/util/URL.hpp>
30 #include <com/sun/star/util/XURLTransformer.hpp>
31 #include <com/sun/star/frame/XController.hpp>
32 #include <com/sun/star/lang/XUnoTunnel.hpp>
33 #include <com/sun/star/frame/status/ItemStatus.hpp>
34 #include <com/sun/star/frame/status/ItemState.hpp>
35 #include <com/sun/star/awt/MouseButton.hpp>
36 
37 #include <vcl/status.hxx>
38 
39 #include <sfx2/app.hxx>
40 #include "sfx2/stbitem.hxx"
41 #include "sfxtypes.hxx"
42 #include <sfx2/msg.hxx>
43 #include "arrdecl.hxx"
44 #include <sfx2/bindings.hxx>
45 #include <sfx2/msgpool.hxx>
46 #include <sfx2/module.hxx>
47 #include <sfx2/dispatch.hxx>
48 #include <sfx2/unoctitm.hxx>
49 #include <sfx2/objsh.hxx>
50 #include <sfx2/sfx.hrc>
51 
52 #include <comphelper/processfactory.hxx>
53 #include <svl/eitem.hxx>
54 #include <svl/stritem.hxx>
55 #include <svl/intitem.hxx>
56 #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
57 #include <toolkit/unohlp.hxx>
58 #endif
59 #include <toolkit/helper/convert.hxx>
60 
61 using namespace ::com::sun::star;
62 
63 //--------------------------------------------------------------------
64 
convertAwtToVCLMouseButtons(sal_Int16 nAwtMouseButtons)65 sal_uInt16 SfxStatusBarControl::convertAwtToVCLMouseButtons( sal_Int16 nAwtMouseButtons )
66 {
67     sal_uInt16 nVCLMouseButtons( 0 );
68 
69     if ( nAwtMouseButtons & awt::MouseButton::LEFT )
70         nVCLMouseButtons |= MOUSE_LEFT;
71     if ( nAwtMouseButtons & awt::MouseButton::RIGHT )
72         nVCLMouseButtons |= MOUSE_RIGHT;
73     if ( nAwtMouseButtons & awt::MouseButton::MIDDLE )
74         nVCLMouseButtons |= MOUSE_MIDDLE;
75 
76     return nVCLMouseButtons;
77 }
78 
79 //--------------------------------------------------------------------
80 
SfxStatusBarControllerFactory(const uno::Reference<frame::XFrame> & rFrame,StatusBar * pStatusBar,unsigned short nID,const::rtl::OUString & aCommandURL)81 svt::StatusbarController* SAL_CALL SfxStatusBarControllerFactory(
82     const uno::Reference< frame::XFrame >& rFrame,
83     StatusBar* pStatusBar,
84     unsigned short nID,
85     const ::rtl::OUString& aCommandURL )
86 {
87     ::vos::OGuard aGuard( Application::GetSolarMutex() );
88 
89     util::URL aTargetURL;
90     aTargetURL.Complete = aCommandURL;
91     uno::Reference < util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
92         rtl::OUString::createFromAscii( "com.sun.star.util.URLTransformer" )), uno::UNO_QUERY );
93     xTrans->parseStrict( aTargetURL );
94 
95     SfxObjectShell* pObjShell = NULL;
96     uno::Reference < frame::XController > xController;
97     uno::Reference < frame::XModel > xModel;
98     if ( rFrame.is() )
99     {
100         xController = rFrame->getController();
101         if ( xController.is() )
102             xModel = xController->getModel();
103     }
104 
105     if ( xModel.is() )
106     {
107         // Get tunnel from model to retrieve the SfxObjectShell pointer from it
108         ::com::sun::star::uno::Reference < ::com::sun::star::lang::XUnoTunnel > xObj( xModel, uno::UNO_QUERY );
109         ::com::sun::star::uno::Sequence < sal_Int8 > aSeq = SvGlobalName( SFX_GLOBAL_CLASSID ).GetByteSequence();
110         if ( xObj.is() )
111         {
112             sal_Int64 nHandle = xObj->getSomething( aSeq );
113             if ( nHandle )
114                         pObjShell = reinterpret_cast< SfxObjectShell* >( sal::static_int_cast< sal_IntPtr >( nHandle ));
115         }
116     }
117 
118     SfxModule*     pModule   = pObjShell ? pObjShell->GetModule() : NULL;
119     SfxSlotPool*   pSlotPool = 0;
120 
121     if ( pModule )
122         pSlotPool = pModule->GetSlotPool();
123     else
124         pSlotPool = &(SfxSlotPool::GetSlotPool( NULL ));
125 
126     const SfxSlot* pSlot = pSlotPool->GetUnoSlot( aTargetURL.Path );
127     if ( pSlot )
128     {
129         sal_uInt16 nSlotId = pSlot->GetSlotId();
130         if ( nSlotId > 0 )
131         {
132             rtl::OString aCmd(".uno:");
133             aCmd += pSlot->GetUnoName();
134             pStatusBar->SetHelpId( nSlotId, aCmd );
135             return SfxStatusBarControl::CreateControl( nSlotId, nID, pStatusBar, pModule );
136         }
137     }
138 
139     return NULL;
140 }
141 
142 //--------------------------------------------------------------------
143 
SfxStatusBarControl(sal_uInt16 nSlotID,sal_uInt16 nCtrlID,StatusBar & rBar)144 SfxStatusBarControl::SfxStatusBarControl
145 (
146     sal_uInt16      nSlotID,            /* Slot-Id, mit der diese Instanz
147                                        verbunden wird. Wurde bei der
148                                        Registrierung eine Slot-Id != 0
149                                        angegeben, ist dies immer die dort
150                                        angegebene. */
151     sal_uInt16      nCtrlID,            /* ID of this controller in the status bar */
152 
153     StatusBar&  rBar                /* Referenz auf die StatusBar, f"ur die
154                                        dieses Control erzeugt wurde. */
155 )
156 
157 /*  [Beschreibung]
158 
159     Konstruktor der Klasse SfxStatusBarControl. Die Subclasses werden
160     bei Bedarf per Factory vom SFx erzeugt.
161 
162     Instanzen dieser Basisklasse werden f"ur alle StatusBar-Felder
163     erzeugt, f"ur die keine speziellen registriert wurden.
164 */
165 
166 :   svt::StatusbarController(),
167     nSlotId( nSlotID ),
168     nId( nCtrlID ),
169     pBar( &rBar )
170 {
171 }
172 
173 //--------------------------------------------------------------------
174 
~SfxStatusBarControl()175 SfxStatusBarControl::~SfxStatusBarControl()
176 
177 /*  [Beschreibung]
178 
179     Destruktor der Klasse SfxStatusBarControl. Die Instanzen dieser
180     Klasse und deren Subklassen werden vom SFx zerst"ort.
181 */
182 
183 {}
184 
185 //--------------------------------------------------------------------
186 // XInterface
queryInterface(const uno::Type & rType)187 uno::Any SAL_CALL SfxStatusBarControl::queryInterface( const uno::Type & rType )
188 throw( uno::RuntimeException)
189 {
190     return svt::StatusbarController::queryInterface( rType );
191 }
192 
acquire()193 void SAL_CALL SfxStatusBarControl::acquire() throw()
194 {
195     OWeakObject::acquire();
196 }
197 
release()198 void SAL_CALL SfxStatusBarControl::release() throw()
199 {
200     OWeakObject::release();
201 }
202 
203 //--------------------------------------------------------------------
204 // XEventListener
disposing(const lang::EventObject & aEvent)205 void SAL_CALL SfxStatusBarControl::disposing( const lang::EventObject& aEvent )
206 throw( uno::RuntimeException )
207 {
208     svt::StatusbarController::disposing( aEvent );
209 }
210 
211 //--------------------------------------------------------------------
212 // XComponent
dispose()213 void SAL_CALL SfxStatusBarControl::dispose()
214 throw (uno::RuntimeException)
215 {
216     svt::StatusbarController::dispose();
217 }
218 
219 //--------------------------------------------------------------------
220 // XStatusListener
statusChanged(const frame::FeatureStateEvent & rEvent)221 void SAL_CALL SfxStatusBarControl::statusChanged( const frame::FeatureStateEvent& rEvent )
222 throw ( ::com::sun::star::uno::RuntimeException )
223 {
224     SfxViewFrame* pViewFrame = NULL;
225     uno::Reference < frame::XController > xController;
226 
227     ::vos::OGuard aGuard( Application::GetSolarMutex() );
228     if ( m_xFrame.is() )
229         xController = m_xFrame->getController();
230 
231     uno::Reference < frame::XDispatchProvider > xProvider( xController, uno::UNO_QUERY );
232     if ( xProvider.is() )
233     {
234         uno::Reference < frame::XDispatch > xDisp = xProvider->queryDispatch( rEvent.FeatureURL, ::rtl::OUString(), 0 );
235         if ( xDisp.is() )
236         {
237             uno::Reference< lang::XUnoTunnel > xTunnel( xDisp, uno::UNO_QUERY );
238             SfxOfficeDispatch* pDisp = NULL;
239             if ( xTunnel.is() )
240             {
241                 sal_Int64 nImplementation = xTunnel->getSomething(SfxOfficeDispatch::impl_getStaticIdentifier());
242                 pDisp = reinterpret_cast< SfxOfficeDispatch* >(sal::static_int_cast< sal_IntPtr >( nImplementation ));
243             }
244 
245             if ( pDisp )
246                 pViewFrame = pDisp->GetDispatcher_Impl()->GetFrame();
247         }
248     }
249 
250     sal_uInt16 nSlotID = 0;
251     SfxSlotPool& rPool = SfxSlotPool::GetSlotPool( pViewFrame );
252     const SfxSlot* pSlot = rPool.GetUnoSlot( rEvent.FeatureURL.Path );
253     if ( pSlot )
254         nSlotID = pSlot->GetSlotId();
255 
256     if ( nSlotID > 0 )
257     {
258         if ( rEvent.Requery )
259             svt::StatusbarController::statusChanged( rEvent );
260         else
261         {
262             SfxItemState eState = SFX_ITEM_DISABLED;
263             SfxPoolItem* pItem = NULL;
264             if ( rEvent.IsEnabled )
265             {
266                 eState = SFX_ITEM_AVAILABLE;
267                 uno::Type pType = rEvent.State.getValueType();
268 
269                 if ( pType == ::getVoidCppuType() )
270                 {
271                     pItem = new SfxVoidItem( nSlotID );
272                     eState = SFX_ITEM_UNKNOWN;
273                 }
274                 else if ( pType == ::getBooleanCppuType() )
275                 {
276                     sal_Bool bTemp = 0;
277                     rEvent.State >>= bTemp ;
278                     pItem = new SfxBoolItem( nSlotID, bTemp );
279                 }
280                 else if ( pType == ::getCppuType((const sal_uInt16*)0) )
281                 {
282                     sal_uInt16 nTemp = 0;
283                     rEvent.State >>= nTemp ;
284                     pItem = new SfxUInt16Item( nSlotID, nTemp );
285                 }
286                 else if ( pType == ::getCppuType((const sal_uInt32*)0) )
287                 {
288                     sal_uInt32 nTemp = 0;
289                     rEvent.State >>= nTemp ;
290                     pItem = new SfxUInt32Item( nSlotID, nTemp );
291                 }
292                 else if ( pType == ::getCppuType((const ::rtl::OUString*)0) )
293                 {
294                     ::rtl::OUString sTemp ;
295                     rEvent.State >>= sTemp ;
296                     pItem = new SfxStringItem( nSlotID, sTemp );
297                 }
298                 else if ( pType == ::getCppuType((const ::com::sun::star::frame::status::ItemStatus*)0) )
299                 {
300                     frame::status::ItemStatus aItemStatus;
301                     rEvent.State >>= aItemStatus;
302                     eState = aItemStatus.State;
303                     pItem = new SfxVoidItem( nSlotID );
304                 }
305                 else
306                 {
307                     if ( pSlot )
308                         pItem = pSlot->GetType()->CreateItem();
309                     if ( pItem )
310                     {
311                         pItem->SetWhich( nSlotID );
312                         pItem->PutValue( rEvent.State );
313                     }
314                     else
315                         pItem = new SfxVoidItem( nSlotID );
316                 }
317             }
318 
319             StateChanged( nSlotID, eState, pItem );
320             delete pItem;
321         }
322     }
323 }
324 
325 //--------------------------------------------------------------------
326 // XStatusbarController
327 
mouseButtonDown(const awt::MouseEvent & rMouseEvent)328 ::sal_Bool SAL_CALL SfxStatusBarControl::mouseButtonDown(
329     const awt::MouseEvent& rMouseEvent )
330 throw ( uno::RuntimeException )
331 {
332     ::vos::OGuard aGuard( Application::GetSolarMutex() );
333     ::Point aPos( rMouseEvent.X, rMouseEvent.Y );
334 
335     ::MouseEvent aMouseEvent( aPos,
336                               (sal_uInt16)rMouseEvent.ClickCount,
337                               0,
338                               convertAwtToVCLMouseButtons( rMouseEvent.Buttons ),
339                               0 );
340 
341     return MouseButtonDown( aMouseEvent );
342 }
343 
344 //--------------------------------------------------------------------
345 
mouseMove(const awt::MouseEvent & rMouseEvent)346 ::sal_Bool SAL_CALL SfxStatusBarControl::mouseMove(
347     const awt::MouseEvent& rMouseEvent )
348 throw (uno::RuntimeException)
349 {
350     ::vos::OGuard aGuard( Application::GetSolarMutex() );
351     ::Point aPos( rMouseEvent.X, rMouseEvent.Y );
352 
353     ::MouseEvent aMouseEvent( aPos,
354                               (sal_uInt16)rMouseEvent.ClickCount,
355                               0,
356                               convertAwtToVCLMouseButtons( rMouseEvent.Buttons ),
357                               0 );
358     return MouseMove( aMouseEvent );
359 }
360 
361 //--------------------------------------------------------------------
362 
mouseButtonUp(const::awt::MouseEvent & rMouseEvent)363 ::sal_Bool SAL_CALL SfxStatusBarControl::mouseButtonUp(
364     const ::awt::MouseEvent& rMouseEvent )
365 throw ( uno::RuntimeException )
366 {
367     ::vos::OGuard aGuard( Application::GetSolarMutex() );
368     ::Point aPos( rMouseEvent.X, rMouseEvent.Y );
369 
370     ::MouseEvent aMouseEvent( aPos,
371                               (sal_uInt16)rMouseEvent.ClickCount,
372                               0,
373                               convertAwtToVCLMouseButtons( rMouseEvent.Buttons ),
374                               0 );
375     return MouseButtonUp( aMouseEvent );
376 }
377 
378 //--------------------------------------------------------------------
379 
command(const awt::Point & rPos,::sal_Int32 nCommand,::sal_Bool,const::com::sun::star::uno::Any &)380 void SAL_CALL SfxStatusBarControl::command(
381     const awt::Point& rPos,
382     ::sal_Int32 nCommand,
383     ::sal_Bool /*bMouseEvent*/,
384     const ::com::sun::star::uno::Any& /*aData*/ )
385 throw (::com::sun::star::uno::RuntimeException)
386 {
387     ::vos::OGuard aGuard( Application::GetSolarMutex() );
388     ::Point aPos( rPos.X, rPos.Y );
389     CommandEvent aCmdEvent( aPos, (sal_uInt16)nCommand, sal_True, NULL );
390 
391     Command( aCmdEvent );
392 }
393 
394 //--------------------------------------------------------------------
395 
paint(const uno::Reference<awt::XGraphics> & xGraphics,const awt::Rectangle & rOutputRectangle,::sal_Int32 nStyle)396 void SAL_CALL SfxStatusBarControl::paint(
397     const uno::Reference< awt::XGraphics >& xGraphics,
398     const awt::Rectangle& rOutputRectangle,
399     ::sal_Int32 nStyle )
400 throw ( ::uno::RuntimeException )
401 {
402     ::vos::OGuard aGuard( Application::GetSolarMutex() );
403 
404     OutputDevice* pOutDev = VCLUnoHelper::GetOutputDevice( xGraphics );;
405     if ( pOutDev )
406     {
407         ::Rectangle aRect = VCLRectangle( rOutputRectangle );
408         UserDrawEvent aUserDrawEvent( pOutDev, aRect, pBar->GetCurItemId(), (sal_uInt16)nStyle );
409         Paint( aUserDrawEvent );
410     }
411 }
412 
413 //--------------------------------------------------------------------
414 
click(const awt::Point &)415 void SAL_CALL SfxStatusBarControl::click( const awt::Point& )
416 throw ( uno::RuntimeException )
417 {
418     ::vos::OGuard aGuard( Application::GetSolarMutex() );
419     Click();
420 }
421 
422 //--------------------------------------------------------------------
423 
doubleClick(const awt::Point &)424 void SAL_CALL SfxStatusBarControl::doubleClick( const awt::Point& )
425 throw ( uno::RuntimeException )
426 {
427     ::vos::OGuard aGuard( Application::GetSolarMutex() );
428     DoubleClick();
429 }
430 
431 //--------------------------------------------------------------------
432 // old sfx2 interface
433 //--------------------------------------------------------------------
434 
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)435 void SfxStatusBarControl::StateChanged
436 (
437     sal_uInt16              nSID,
438     SfxItemState        eState,
439     const SfxPoolItem*  pState  /* Zeiger auf ein SfxPoolItem, welches nur
440                                    innerhalb dieses Methodenaufrufs g"ultig
441                                    ist. Es kann ein 0-Pointer, ein Pointer
442                                    auf ein SfxVoidItem oder auf den Typ, f"ur
443                                    den die Subclass von SfxStatusBarControl
444                                    registriert ist vorkommen. */
445 )
446 
447 /*  [Beschreibung]
448 
449     Die Basisimplementation versteht Items vom Type SfxStringItem, bei
450     denen der Text in das Status-Zeilen-Feld eingetragen wird und
451     SfxVoidItem, bei denen das Feld geleert wird. Die Basisimplementierng
452     sollte in "uberladenen Methoden nicht gerufen werden.
453 */
454 
455 {
456     DBG_MEMTEST();
457     DBG_ASSERT( pBar != 0, "setting state to dangling StatusBar" );
458 
459     const SfxStringItem* pStr = PTR_CAST( SfxStringItem, pState );
460     if ( eState == SFX_ITEM_AVAILABLE && pStr )
461         pBar->SetItemText( nSID, pStr->GetValue() );
462     else
463     {
464         DBG_ASSERT( eState != SFX_ITEM_AVAILABLE || pState->ISA(SfxVoidItem),
465                     "wrong SfxPoolItem subclass in SfxStatusBarControl" );
466         pBar->SetItemText( nSID, String() );
467     }
468 }
469 
470 //--------------------------------------------------------------------
471 
MouseButtonDown(const MouseEvent &)472 sal_Bool SfxStatusBarControl::MouseButtonDown( const MouseEvent & )
473 
474 /*  [Beschreibung]
475 
476     Diese virtuelle Methode ist eine Weiterleitung des Events
477     MouseButtonDown() der StatusBar, falls die Maus-Position innerhalb
478     des Bereichs des betreffenden Items ist, oder die Maus von diesem
479     Control mit <SfxStatusBarControl::CaptureMouse()> gecaptured wurde.
480 
481     Die Defaultimplementierung ist leer und gibt FALSE zur"uck.
482 
483 
484     [Rueckgabewert]
485 
486     sal_Bool                TRUE
487                         das Event wurde bearbeitet und soll nicht an
488                         die StatusBar weitergeleitet werden
489 
490                         FALSE
491                         das Event wurde nicht bearbeitet und soll an
492                         die StatusBar weitergeleitet werden
493 */
494 
495 {
496     return sal_False;
497 }
498 
499 //--------------------------------------------------------------------
500 
MouseMove(const MouseEvent &)501 sal_Bool SfxStatusBarControl::MouseMove( const MouseEvent & )
502 
503 /*  [Beschreibung]
504 
505     Diese virtuelle Methode ist eine Weiterleitung des Events
506     MouseMove() der StatusBar, falls die Maus-Position innerhalb
507     des Bereichs des betreffenden Items ist, oder die Maus von diesem
508     Control mit <SfxStatusBarControl::CaptureMouse()> gecaptured wurde.
509 
510     Die Defaultimplementierung ist leer und gibt FALSE zur"uck.
511 
512 
513     [Rueckgabewert]
514 
515     sal_Bool                TRUE
516                         das Event wurde bearbeitet und soll nicht an
517                         die StatusBar weitergeleitet werden
518 
519                         FALSE
520                         das Event wurde nicht bearbeitet und soll an
521                         die StatusBar weitergeleitet werden
522 */
523 
524 {
525     return sal_False;
526 }
527 
528 //--------------------------------------------------------------------
529 
MouseButtonUp(const MouseEvent &)530 sal_Bool SfxStatusBarControl::MouseButtonUp( const MouseEvent & )
531 
532 /*  [Beschreibung]
533 
534     Diese virtuelle Methode ist eine Weiterleitung des Events
535     MouseButtonUp() der StatusBar, falls die Maus-Position innerhalb
536     des Bereichs des betreffenden Items ist, oder die Maus von diesem
537     Control mit <SfxStatusBarControl::CaptureMouse()> gecaptured wurde.
538 
539     Die Defaultimplementierung ist leer und gibt FALSE zur"uck.
540 
541 
542     [Rueckgabewert]
543 
544     sal_Bool                TRUE
545                         das Event wurde bearbeitet und soll nicht an
546                         die StatusBar weitergeleitet werden
547 
548                         FALSE
549                         das Event wurde nicht bearbeitet und soll an
550                         die StatusBar weitergeleitet werden
551 */
552 
553 {
554     return sal_False;
555 }
556 
557 //--------------------------------------------------------------------
558 
Command(const CommandEvent &)559 void SfxStatusBarControl::Command( const CommandEvent& )
560 
561 /*  [Beschreibung]
562 
563     Diese virtuelle Methode wird gerufen, wenn f"ur dieses SfxStatusBarControl
564     ein CommandEvent f"ur erkannt wurde.
565 
566     Die Defaultimplementierung ist leer.
567 */
568 
569 {
570 }
571 
572 //--------------------------------------------------------------------
573 
Click()574 void SfxStatusBarControl::Click()
575 
576 /*  [Beschreibung]
577 
578     Diese virtuelle Methode wird gerufen, wenn der Anwender mit der Maus
579     in das zu diesem Control geh"orige Feld der Statuszeile klickt.
580 
581     Die Defaultimplementierung ist leer.
582 */
583 
584 {
585 }
586 
587 //--------------------------------------------------------------------
588 
DoubleClick()589 void SfxStatusBarControl::DoubleClick()
590 
591 /*  [Beschreibung]
592 
593     Diese virtuelle Methode wird gerufen, wenn der Anwender mit der Maus
594     in das zu diesem Control geh"orige Feld der Statuszeile doppel-klickt.
595 */
596 
597 {
598     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs;
599     execute( aArgs );
600 }
601 
602 //--------------------------------------------------------------------
603 
Paint(const UserDrawEvent &)604 void SfxStatusBarControl::Paint
605 (
606     const UserDrawEvent& /* Referenz auf einen UserDrawEvent */
607 )
608 
609 /*  [Beschreibung]
610 
611     Diese virtuelle Methode wird gerufen, falls das betreffende Feld
612     mit SIB_USERDRAW gekennzeichnet ist, um den Inhalt zu zeichnen.
613     Die Ausgabe mu"s auf dem in durch rUDEvt.GetDevice() erh"altlichen
614     OutputDevice innerhalb des durch rUDEvt.GetRect() angegebenenen
615     Rechtecks erfolgen.
616 
617     Die Defaultimplementierung ist leer.
618 */
619 
620 {
621 }
622 
623 //--------------------------------------------------------------------
624 
CaptureMouse()625 void SfxStatusBarControl::CaptureMouse()
626 {
627 }
628 
629 //--------------------------------------------------------------------
630 
ReleaseMouse()631 void SfxStatusBarControl::ReleaseMouse()
632 {
633 }
634 
635 //--------------------------------------------------------------------
636 
CreateControl(sal_uInt16 nSlotID,sal_uInt16 nStbId,StatusBar * pBar,SfxModule * pMod)637 SfxStatusBarControl* SfxStatusBarControl::CreateControl
638 (
639     sal_uInt16     nSlotID,
640     sal_uInt16     nStbId,
641     StatusBar* pBar,
642     SfxModule* pMod
643 )
644 {
645     ::vos::OGuard aGuard( Application::GetSolarMutex() );
646     SfxApplication *pApp = SFX_APP();
647 
648     SfxSlotPool *pSlotPool;
649     if ( pMod )
650         pSlotPool = pMod->GetSlotPool();
651     else
652         pSlotPool = &SfxSlotPool::GetSlotPool();
653 
654     TypeId aSlotType = pSlotPool->GetSlotType(nSlotID);
655     if ( aSlotType )
656     {
657         if ( pMod )
658         {
659             SfxStbCtrlFactArr_Impl *pFactories = pMod->GetStbCtrlFactories_Impl();
660             if ( pFactories )
661             {
662                 SfxStbCtrlFactArr_Impl &rFactories = *pFactories;
663                 for ( sal_uInt16 nFactory = 0; nFactory < rFactories.Count(); ++nFactory )
664                 if ( rFactories[nFactory]->nTypeId == aSlotType &&
665                      ( ( rFactories[nFactory]->nSlotId == 0 ) ||
666                      ( rFactories[nFactory]->nSlotId == nSlotID) ) )
667                     return rFactories[nFactory]->pCtor( nSlotID, nStbId, *pBar );
668             }
669         }
670 
671         SfxStbCtrlFactArr_Impl &rFactories = pApp->GetStbCtrlFactories_Impl();
672         for ( sal_uInt16 nFactory = 0; nFactory < rFactories.Count(); ++nFactory )
673         if ( rFactories[nFactory]->nTypeId == aSlotType &&
674              ( ( rFactories[nFactory]->nSlotId == 0 ) ||
675              ( rFactories[nFactory]->nSlotId == nSlotID) ) )
676             return rFactories[nFactory]->pCtor( nSlotID, nStbId, *pBar );
677     }
678 
679     return NULL;
680 }
681 
682 //--------------------------------------------------------------------
RegisterStatusBarControl(SfxModule * pMod,SfxStbCtrlFactory * pFact)683 void SfxStatusBarControl::RegisterStatusBarControl(SfxModule* pMod, SfxStbCtrlFactory* pFact)
684 {
685     SFX_APP()->RegisterStatusBarControl_Impl( pMod, pFact );
686 }
687 //--------------------------------------------------------------------
688