xref: /AOO41X/main/sfx2/inc/sfx2/stbitem.hxx (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 #ifndef _SFXSTBITEM_HXX
24 #define _SFXSTBITEM_HXX
25 
26 #include "sal/config.h"
27 #include "sfx2/dllapi.h"
28 #include <svl/poolitem.hxx>
29 #include <svtools/statusbarcontroller.hxx>
30 
31 //------------------------------------------------------------------
32 
33 class SfxModule;
34 class StatusBar;
35 class SfxStatusBarControl;
36 class SfxBindings;
37 
38 svt::StatusbarController* SAL_CALL SfxStatusBarControllerFactory(
39     const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
40     StatusBar* pStatusBar,
41     unsigned short nID,
42     const ::rtl::OUString& aCommandURL );
43 typedef SfxStatusBarControl* (*SfxStatusBarControlCtor)( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar &rStb );
44 
45 struct SfxStbCtrlFactory
46 {
47     SfxStatusBarControlCtor pCtor;
48     TypeId                  nTypeId;
49     sal_uInt16                  nSlotId;
50 
SfxStbCtrlFactorySfxStbCtrlFactory51     SfxStbCtrlFactory( SfxStatusBarControlCtor pTheCtor,
52             TypeId nTheTypeId, sal_uInt16 nTheSlotId ):
53         pCtor(pTheCtor),
54         nTypeId(nTheTypeId),
55         nSlotId(nTheSlotId)
56     {}
57 };
58 
59 //------------------------------------------------------------------
60 
61 class CommandEvent;
62 class MouseEvent;
63 class UserDrawEvent;
64 
65 class SFX2_DLLPUBLIC SfxStatusBarControl: public svt::StatusbarController
66 {
67     sal_uInt16          nSlotId;
68     sal_uInt16          nId;
69     StatusBar*      pBar;
70 
71 protected:
72     // new controller API
73     // XInterface
74     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
75     virtual void               SAL_CALL acquire() throw();
76     virtual void               SAL_CALL release() throw();
77 
78     // XEventListener
79     virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
80 
81     // XComponent
82     virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException);
83 
84     // XStatusListener
85     virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event )
86         throw ( ::com::sun::star::uno::RuntimeException );
87 
88     // XStatusbarController
89     virtual ::sal_Bool SAL_CALL mouseButtonDown( const ::com::sun::star::awt::MouseEvent& aMouseEvent ) throw (::com::sun::star::uno::RuntimeException);
90     virtual ::sal_Bool SAL_CALL mouseMove( const ::com::sun::star::awt::MouseEvent& aMouseEvent ) throw (::com::sun::star::uno::RuntimeException);
91     virtual ::sal_Bool SAL_CALL mouseButtonUp( const ::com::sun::star::awt::MouseEvent& aMouseEvent ) throw (::com::sun::star::uno::RuntimeException);
92     virtual void SAL_CALL command( const ::com::sun::star::awt::Point& aPos,
93                                     ::sal_Int32 nCommand,
94                                     ::sal_Bool bMouseEvent,
95                                     const ::com::sun::star::uno::Any& aData ) throw (::com::sun::star::uno::RuntimeException);
96     virtual void SAL_CALL paint( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& xGraphics,
97                                  const ::com::sun::star::awt::Rectangle& rOutputRectangle,
98                                  ::sal_Int32 nStyle ) throw (::com::sun::star::uno::RuntimeException);
99     virtual void SAL_CALL click( const ::com::sun::star::awt::Point& aPos ) throw (::com::sun::star::uno::RuntimeException);
100     virtual void SAL_CALL doubleClick( const ::com::sun::star::awt::Point& aPos ) throw (::com::sun::star::uno::RuntimeException);
101 
102     // Old sfx2 interface
103     virtual void    StateChanged( sal_uInt16 nSID, SfxItemState eState,
104                                   const SfxPoolItem* pState );
105     virtual void    Click();
106     virtual void    DoubleClick();
107     virtual void    Command( const CommandEvent& rCEvt );
108     virtual sal_Bool    MouseButtonDown( const MouseEvent & );
109     virtual sal_Bool    MouseMove( const MouseEvent & );
110     virtual sal_Bool    MouseButtonUp( const MouseEvent & );
111     virtual void    Paint( const UserDrawEvent &rUDEvt );
112 
113     static sal_uInt16   convertAwtToVCLMouseButtons( sal_Int16 nAwtMouseButtons );
114 
115 public:
116                     SfxStatusBarControl( sal_uInt16 nSlotID, sal_uInt16 nId, StatusBar& rBar );
117     virtual         ~SfxStatusBarControl();
118 
GetSlotId() const119     sal_uInt16          GetSlotId() const { return nSlotId; }
GetId() const120     sal_uInt16          GetId() const { return nId; }
GetStatusBar() const121     StatusBar&      GetStatusBar() const { return *pBar; }
122     void            CaptureMouse();
123     void            ReleaseMouse();
124 
125     static SfxStatusBarControl* CreateControl( sal_uInt16 nSlotID, sal_uInt16 nId, StatusBar *pBar, SfxModule* );
126     static void RegisterStatusBarControl(SfxModule*, SfxStbCtrlFactory*);
127 
128 };
129 
130 //------------------------------------------------------------------
131 
132 #define SFX_DECL_STATUSBAR_CONTROL() \
133         static SfxStatusBarControl* CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar &rStb ); \
134         static void RegisterControl(sal_uInt16 nSlotId = 0, SfxModule *pMod=NULL)
135 
136 #define SFX_IMPL_STATUSBAR_CONTROL(Class, nItemClass) \
137         SfxStatusBarControl* __EXPORT Class::CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar &rStb ) \
138                { return new Class( nSlotId, nId, rStb ); } \
139         void Class::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) \
140                { SfxStatusBarControl::RegisterStatusBarControl( pMod, new SfxStbCtrlFactory( \
141                     Class::CreateImpl, TYPE(nItemClass), nSlotId ) ); }
142 
143 
144 #endif
145