16d739b60SAndrew Rist /**************************************************************
22503e1a5SAriel Constenla-Haile *
36d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
46d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file
56d739b60SAndrew Rist * distributed with this work for additional information
66d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file
76d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the
86d739b60SAndrew Rist * "License"); you may not use this file except in compliance
96d739b60SAndrew Rist * with the License. You may obtain a copy of the License at
102503e1a5SAriel Constenla-Haile *
116d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
122503e1a5SAriel Constenla-Haile *
136d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing,
146d739b60SAndrew Rist * software distributed under the License is distributed on an
156d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
166d739b60SAndrew Rist * KIND, either express or implied. See the License for the
176d739b60SAndrew Rist * specific language governing permissions and limitations
186d739b60SAndrew Rist * under the License.
192503e1a5SAriel Constenla-Haile *
206d739b60SAndrew Rist *************************************************************/
216d739b60SAndrew Rist
226d739b60SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_framework.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <uielement/statusbarmanager.hxx>
282503e1a5SAriel Constenla-Haile #include <uielement/genericstatusbarcontroller.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include <threadhelp/threadhelpbase.hxx>
31cdf0e10cSrcweir #include <threadhelp/resetableguard.hxx>
32cdf0e10cSrcweir #include <framework/sfxhelperfunctions.hxx>
332503e1a5SAriel Constenla-Haile #include <framework/addonsoptions.hxx>
342503e1a5SAriel Constenla-Haile #include <uielement/statusbarmerger.hxx>
352503e1a5SAriel Constenla-Haile #include <uielement/statusbaritem.hxx>
36cdf0e10cSrcweir #include <macros/generic.hxx>
37cdf0e10cSrcweir #include <macros/xinterface.hxx>
38cdf0e10cSrcweir #include <macros/xtypeprovider.hxx>
39cdf0e10cSrcweir #include <stdtypes.h>
40cdf0e10cSrcweir #include "services.h"
41cdf0e10cSrcweir #include "general.h"
42cdf0e10cSrcweir #include "properties.h"
43cdf0e10cSrcweir #include <helper/mischelper.hxx>
44cdf0e10cSrcweir
45cdf0e10cSrcweir #include <com/sun/star/frame/XFrame.hpp>
46dccf82beSAriel Constenla-Haile #include <com/sun/star/frame/StatusbarControllerFactory.hpp>
47cdf0e10cSrcweir #include <com/sun/star/ui/ItemStyle.hpp>
48cdf0e10cSrcweir #include <com/sun/star/ui/ItemType.hpp>
49cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp>
50cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
51cdf0e10cSrcweir #include <com/sun/star/awt/Command.hpp>
52*d3bacab6SAriel Constenla-Haile #include <com/sun/star/ui/XStatusbarItem.hpp>
53cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp>
54cdf0e10cSrcweir
552503e1a5SAriel Constenla-Haile #include <toolkit/helper/vclunohelper.hxx>
56cdf0e10cSrcweir
57cdf0e10cSrcweir #include <svtools/statusbarcontroller.hxx>
58dccf82beSAriel Constenla-Haile #include <comphelper/processfactory.hxx>
59cdf0e10cSrcweir
60cdf0e10cSrcweir #include <vcl/status.hxx>
61cdf0e10cSrcweir #include <vcl/svapp.hxx>
62cdf0e10cSrcweir #include <rtl/logfile.hxx>
63cdf0e10cSrcweir
642503e1a5SAriel Constenla-Haile #include <functional>
652503e1a5SAriel Constenla-Haile
66cdf0e10cSrcweir using namespace ::com::sun::star;
67cdf0e10cSrcweir #ifndef css
68cdf0e10cSrcweir #define css ::com::sun::star
69cdf0e10cSrcweir #endif
70cdf0e10cSrcweir #ifndef css_ui
71cdf0e10cSrcweir #define css_ui ::com::sun::star::ui
72cdf0e10cSrcweir #endif
73cdf0e10cSrcweir
74cdf0e10cSrcweir const sal_Int32 HELPID_PREFIX_LENGTH = 7;
75cdf0e10cSrcweir static const char* HELPID_PREFIX = "helpid:";
76cdf0e10cSrcweir
77cdf0e10cSrcweir // Property names of a menu/menu item ItemDescriptor
78cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_COMMANDURL[] = "CommandURL";
79cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_HELPURL[] = "HelpURL";
80cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_OFFSET[] = "Offset";
81cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_STYLE[] = "Style";
82cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_WIDTH[] = "Width";
83cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_TYPE[] = "Type";
84cdf0e10cSrcweir
85cdf0e10cSrcweir namespace framework
86cdf0e10cSrcweir {
87cdf0e10cSrcweir
882503e1a5SAriel Constenla-Haile namespace
892503e1a5SAriel Constenla-Haile {
902503e1a5SAriel Constenla-Haile
912503e1a5SAriel Constenla-Haile template< class MAP >
922503e1a5SAriel Constenla-Haile struct lcl_UpdateController : public std::unary_function< typename MAP::value_type, void >
932503e1a5SAriel Constenla-Haile {
operator ()framework::__anon633ae83f0111::lcl_UpdateController942503e1a5SAriel Constenla-Haile void operator()( typename MAP::value_type &rElement ) const
952503e1a5SAriel Constenla-Haile {
962503e1a5SAriel Constenla-Haile try
972503e1a5SAriel Constenla-Haile {
98*d3bacab6SAriel Constenla-Haile if ( rElement.second.is() )
99*d3bacab6SAriel Constenla-Haile rElement.second->update();
1002503e1a5SAriel Constenla-Haile }
1012503e1a5SAriel Constenla-Haile catch ( uno::Exception& )
1022503e1a5SAriel Constenla-Haile {
1032503e1a5SAriel Constenla-Haile }
1042503e1a5SAriel Constenla-Haile }
1052503e1a5SAriel Constenla-Haile };
1062503e1a5SAriel Constenla-Haile
1072503e1a5SAriel Constenla-Haile template< class MAP >
1082503e1a5SAriel Constenla-Haile struct lcl_RemoveController : public std::unary_function< typename MAP::value_type, void >
1092503e1a5SAriel Constenla-Haile {
operator ()framework::__anon633ae83f0111::lcl_RemoveController1102503e1a5SAriel Constenla-Haile void operator()( typename MAP::value_type &rElement ) const
1112503e1a5SAriel Constenla-Haile {
1122503e1a5SAriel Constenla-Haile try
1132503e1a5SAriel Constenla-Haile {
114*d3bacab6SAriel Constenla-Haile if ( rElement.second.is() )
115*d3bacab6SAriel Constenla-Haile rElement.second->dispose();
1162503e1a5SAriel Constenla-Haile }
1172503e1a5SAriel Constenla-Haile catch ( uno::Exception& )
1182503e1a5SAriel Constenla-Haile {
1192503e1a5SAriel Constenla-Haile }
1202503e1a5SAriel Constenla-Haile }
1212503e1a5SAriel Constenla-Haile };
1222503e1a5SAriel Constenla-Haile
impl_convertItemStyleToItemBits(sal_Int16 nStyle)123cdf0e10cSrcweir static sal_uInt16 impl_convertItemStyleToItemBits( sal_Int16 nStyle )
124cdf0e10cSrcweir {
125cdf0e10cSrcweir sal_uInt16 nItemBits( 0 );
126cdf0e10cSrcweir
127cdf0e10cSrcweir if (( nStyle & css_ui::ItemStyle::ALIGN_RIGHT ) == css_ui::ItemStyle::ALIGN_RIGHT )
128cdf0e10cSrcweir nItemBits |= SIB_RIGHT;
129cdf0e10cSrcweir else if ( nStyle & css_ui::ItemStyle::ALIGN_LEFT )
130cdf0e10cSrcweir nItemBits |= SIB_LEFT;
131cdf0e10cSrcweir else
132cdf0e10cSrcweir nItemBits |= SIB_CENTER;
133cdf0e10cSrcweir
134cdf0e10cSrcweir if (( nStyle & css_ui::ItemStyle::DRAW_FLAT ) == css_ui::ItemStyle::DRAW_FLAT )
135cdf0e10cSrcweir nItemBits |= SIB_FLAT;
136cdf0e10cSrcweir else if ( nStyle & css_ui::ItemStyle::DRAW_OUT3D )
137cdf0e10cSrcweir nItemBits |= SIB_OUT;
138cdf0e10cSrcweir else
139cdf0e10cSrcweir nItemBits |= SIB_IN;
140cdf0e10cSrcweir
141cdf0e10cSrcweir if (( nStyle & css_ui::ItemStyle::AUTO_SIZE ) == css_ui::ItemStyle::AUTO_SIZE )
142cdf0e10cSrcweir nItemBits |= SIB_AUTOSIZE;
143cdf0e10cSrcweir if ( nStyle & css_ui::ItemStyle::OWNER_DRAW )
144cdf0e10cSrcweir nItemBits |= SIB_USERDRAW;
145cdf0e10cSrcweir
146cdf0e10cSrcweir return nItemBits;
147cdf0e10cSrcweir }
1482503e1a5SAriel Constenla-Haile
1492503e1a5SAriel Constenla-Haile }
150cdf0e10cSrcweir //*****************************************************************************************************************
151cdf0e10cSrcweir // XInterface, XTypeProvider, XServiceInfo
152cdf0e10cSrcweir //*****************************************************************************************************************
DEFINE_XINTERFACE_5(StatusBarManager,::cppu::OWeakObject,DIRECT_INTERFACE (lang::XTypeProvider),DIRECT_INTERFACE (lang::XComponent),DIRECT_INTERFACE (frame::XFrameActionListener),DIRECT_INTERFACE (css::ui::XUIConfigurationListener),DERIVED_INTERFACE (lang::XEventListener,frame::XFrameActionListener))153cdf0e10cSrcweir DEFINE_XINTERFACE_5 ( StatusBarManager ,
154cdf0e10cSrcweir ::cppu::OWeakObject ,
155cdf0e10cSrcweir DIRECT_INTERFACE( lang::XTypeProvider ),
156cdf0e10cSrcweir DIRECT_INTERFACE( lang::XComponent ),
157cdf0e10cSrcweir DIRECT_INTERFACE( frame::XFrameActionListener ),
158cdf0e10cSrcweir DIRECT_INTERFACE( css::ui::XUIConfigurationListener ),
159cdf0e10cSrcweir DERIVED_INTERFACE( lang::XEventListener, frame::XFrameActionListener )
160cdf0e10cSrcweir )
161cdf0e10cSrcweir
162cdf0e10cSrcweir DEFINE_XTYPEPROVIDER_5 ( StatusBarManager ,
163cdf0e10cSrcweir lang::XTypeProvider ,
164cdf0e10cSrcweir lang::XComponent ,
165cdf0e10cSrcweir css::ui::XUIConfigurationListener ,
166cdf0e10cSrcweir frame::XFrameActionListener ,
167cdf0e10cSrcweir lang::XEventListener
168cdf0e10cSrcweir )
169cdf0e10cSrcweir
170cdf0e10cSrcweir StatusBarManager::StatusBarManager(
171cdf0e10cSrcweir const uno::Reference< lang::XMultiServiceFactory >& rServiceManager,
172cdf0e10cSrcweir const uno::Reference< frame::XFrame >& rFrame,
173cdf0e10cSrcweir const rtl::OUString& rResourceName,
174cdf0e10cSrcweir StatusBar* pStatusBar ) :
175cdf0e10cSrcweir ThreadHelpBase( &Application::GetSolarMutex() ),
176cdf0e10cSrcweir OWeakObject(),
177cdf0e10cSrcweir m_bDisposed( sal_False ),
178cdf0e10cSrcweir m_bFrameActionRegistered( sal_False ),
179cdf0e10cSrcweir m_bUpdateControllers( sal_False ),
180cdf0e10cSrcweir m_bModuleIdentified( sal_False ),
181cdf0e10cSrcweir m_pStatusBar( pStatusBar ),
182cdf0e10cSrcweir m_aResourceName( rResourceName ),
183cdf0e10cSrcweir m_xFrame( rFrame ),
184cdf0e10cSrcweir m_aListenerContainer( m_aLock.getShareableOslMutex() ),
185cdf0e10cSrcweir m_xServiceManager( rServiceManager )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::StatusBarManager" );
188cdf0e10cSrcweir
189dccf82beSAriel Constenla-Haile m_xStatusbarControllerFactory = frame::StatusbarControllerFactory::create(
190dccf82beSAriel Constenla-Haile ::comphelper::getProcessComponentContext());
191cdf0e10cSrcweir
192cdf0e10cSrcweir m_pStatusBar->SetClickHdl( LINK( this, StatusBarManager, Click ) );
193cdf0e10cSrcweir m_pStatusBar->SetDoubleClickHdl( LINK( this, StatusBarManager, DoubleClick ) );
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
~StatusBarManager()196cdf0e10cSrcweir StatusBarManager::~StatusBarManager()
197cdf0e10cSrcweir {
198cdf0e10cSrcweir }
199cdf0e10cSrcweir
GetStatusBar() const200cdf0e10cSrcweir StatusBar* StatusBarManager::GetStatusBar() const
201cdf0e10cSrcweir {
202cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::GetStatusBar" );
203cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
204cdf0e10cSrcweir return m_pStatusBar;
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
frameAction(const frame::FrameActionEvent & Action)207cdf0e10cSrcweir void StatusBarManager::frameAction( const frame::FrameActionEvent& Action )
208cdf0e10cSrcweir throw ( uno::RuntimeException )
209cdf0e10cSrcweir {
210cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::frameAction" );
211cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
212cdf0e10cSrcweir if ( Action.Action == frame::FrameAction_CONTEXT_CHANGED )
213cdf0e10cSrcweir UpdateControllers();
214cdf0e10cSrcweir }
215cdf0e10cSrcweir
disposing(const lang::EventObject & Source)216cdf0e10cSrcweir void SAL_CALL StatusBarManager::disposing( const lang::EventObject& Source ) throw ( uno::RuntimeException )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::disposing" );
219cdf0e10cSrcweir {
220cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
221cdf0e10cSrcweir if ( m_bDisposed )
222cdf0e10cSrcweir return;
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
225cdf0e10cSrcweir RemoveControllers();
226cdf0e10cSrcweir
227cdf0e10cSrcweir {
228cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
229cdf0e10cSrcweir if ( Source.Source == uno::Reference< uno::XInterface >( m_xFrame, uno::UNO_QUERY ))
230cdf0e10cSrcweir m_xFrame.clear();
231cdf0e10cSrcweir
232cdf0e10cSrcweir m_xServiceManager.clear();
233cdf0e10cSrcweir }
234cdf0e10cSrcweir }
235cdf0e10cSrcweir
236cdf0e10cSrcweir // XComponent
dispose()237cdf0e10cSrcweir void SAL_CALL StatusBarManager::dispose() throw( uno::RuntimeException )
238cdf0e10cSrcweir {
239cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::dispose" );
240cdf0e10cSrcweir uno::Reference< lang::XComponent > xThis(
241cdf0e10cSrcweir static_cast< OWeakObject* >(this), uno::UNO_QUERY );
242cdf0e10cSrcweir
243cdf0e10cSrcweir lang::EventObject aEvent( xThis );
244cdf0e10cSrcweir m_aListenerContainer.disposeAndClear( aEvent );
2452503e1a5SAriel Constenla-Haile
246cdf0e10cSrcweir {
247cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
248cdf0e10cSrcweir if ( !m_bDisposed )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir RemoveControllers();
2512503e1a5SAriel Constenla-Haile
2522503e1a5SAriel Constenla-Haile // destroy the item data
2532503e1a5SAriel Constenla-Haile for ( sal_uInt16 n = 0; n < m_pStatusBar->GetItemCount(); n++ )
2542503e1a5SAriel Constenla-Haile {
2552503e1a5SAriel Constenla-Haile AddonStatusbarItemData *pUserData = static_cast< AddonStatusbarItemData *>(
2562503e1a5SAriel Constenla-Haile m_pStatusBar->GetItemData( m_pStatusBar->GetItemId( n ) ) );
2572503e1a5SAriel Constenla-Haile if ( pUserData )
2582503e1a5SAriel Constenla-Haile delete pUserData;
2592503e1a5SAriel Constenla-Haile }
2602503e1a5SAriel Constenla-Haile
261cdf0e10cSrcweir delete m_pStatusBar;
262cdf0e10cSrcweir m_pStatusBar = 0;
263cdf0e10cSrcweir
264cdf0e10cSrcweir if ( m_bFrameActionRegistered && m_xFrame.is() )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir try
267cdf0e10cSrcweir {
268cdf0e10cSrcweir m_xFrame->removeFrameActionListener( uno::Reference< frame::XFrameActionListener >(
269cdf0e10cSrcweir static_cast< ::cppu::OWeakObject *>( this ),
270cdf0e10cSrcweir uno::UNO_QUERY ));
271cdf0e10cSrcweir }
272cdf0e10cSrcweir catch ( uno::Exception& )
273cdf0e10cSrcweir {
274cdf0e10cSrcweir }
275cdf0e10cSrcweir }
276cdf0e10cSrcweir
277cdf0e10cSrcweir m_xFrame.clear();
278cdf0e10cSrcweir m_xServiceManager.clear();
279cdf0e10cSrcweir
280cdf0e10cSrcweir m_bDisposed = sal_True;
281cdf0e10cSrcweir }
282cdf0e10cSrcweir }
283cdf0e10cSrcweir }
284cdf0e10cSrcweir
addEventListener(const uno::Reference<lang::XEventListener> & xListener)285cdf0e10cSrcweir void SAL_CALL StatusBarManager::addEventListener( const uno::Reference< lang::XEventListener >& xListener ) throw( uno::RuntimeException )
286cdf0e10cSrcweir {
287cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::addEventListener" );
288cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
289cdf0e10cSrcweir
290cdf0e10cSrcweir /* SAFE AREA ----------------------------------------------------------------------------------------------- */
291cdf0e10cSrcweir if ( m_bDisposed )
292cdf0e10cSrcweir throw lang::DisposedException();
293cdf0e10cSrcweir
294cdf0e10cSrcweir m_aListenerContainer.addInterface( ::getCppuType(
295cdf0e10cSrcweir ( const uno::Reference< lang::XEventListener >* ) NULL ), xListener );
296cdf0e10cSrcweir }
297cdf0e10cSrcweir
removeEventListener(const uno::Reference<lang::XEventListener> & xListener)298cdf0e10cSrcweir void SAL_CALL StatusBarManager::removeEventListener( const uno::Reference< lang::XEventListener >& xListener ) throw( uno::RuntimeException )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::removeEventListener" );
301cdf0e10cSrcweir m_aListenerContainer.removeInterface( ::getCppuType(
302cdf0e10cSrcweir ( const uno::Reference< lang::XEventListener >* ) NULL ), xListener );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
305cdf0e10cSrcweir // XUIConfigurationListener
elementInserted(const css::ui::ConfigurationEvent &)306cdf0e10cSrcweir void SAL_CALL StatusBarManager::elementInserted( const css::ui::ConfigurationEvent& ) throw ( uno::RuntimeException )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::elementInserted" );
309cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
3102503e1a5SAriel Constenla-Haile
311cdf0e10cSrcweir if ( m_bDisposed )
312cdf0e10cSrcweir return;
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
elementRemoved(const css::ui::ConfigurationEvent &)315cdf0e10cSrcweir void SAL_CALL StatusBarManager::elementRemoved( const css::ui::ConfigurationEvent& ) throw ( uno::RuntimeException )
316cdf0e10cSrcweir {
317cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::elementRemoved" );
318cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
3192503e1a5SAriel Constenla-Haile
320cdf0e10cSrcweir if ( m_bDisposed )
321cdf0e10cSrcweir return;
322cdf0e10cSrcweir }
3232503e1a5SAriel Constenla-Haile
elementReplaced(const css::ui::ConfigurationEvent &)324cdf0e10cSrcweir void SAL_CALL StatusBarManager::elementReplaced( const css::ui::ConfigurationEvent& ) throw ( uno::RuntimeException )
325cdf0e10cSrcweir {
326cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::elementReplaced" );
327cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
3282503e1a5SAriel Constenla-Haile
329cdf0e10cSrcweir if ( m_bDisposed )
330cdf0e10cSrcweir return;
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
UpdateControllers()333cdf0e10cSrcweir void StatusBarManager::UpdateControllers()
334cdf0e10cSrcweir {
335cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::UpdateControllers" );
336cdf0e10cSrcweir if ( !m_bUpdateControllers )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir m_bUpdateControllers = sal_True;
3392503e1a5SAriel Constenla-Haile std::for_each( m_aControllerMap.begin(),
3402503e1a5SAriel Constenla-Haile m_aControllerMap.end(),
3412503e1a5SAriel Constenla-Haile lcl_UpdateController< StatusBarControllerMap >() );
342cdf0e10cSrcweir }
343cdf0e10cSrcweir m_bUpdateControllers = sal_False;
344cdf0e10cSrcweir }
345cdf0e10cSrcweir
RemoveControllers()346cdf0e10cSrcweir void StatusBarManager::RemoveControllers()
347cdf0e10cSrcweir {
348cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::RemoveControllers" );
349cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
350cdf0e10cSrcweir
351cdf0e10cSrcweir if ( m_bDisposed )
352cdf0e10cSrcweir return;
353cdf0e10cSrcweir
3542503e1a5SAriel Constenla-Haile std::for_each( m_aControllerMap.begin(),
3552503e1a5SAriel Constenla-Haile m_aControllerMap.end(),
3562503e1a5SAriel Constenla-Haile lcl_RemoveController< StatusBarControllerMap >() );
3572503e1a5SAriel Constenla-Haile m_aControllerMap.clear();
358cdf0e10cSrcweir }
359cdf0e10cSrcweir
RetrieveLabelFromCommand(const rtl::OUString & aCmdURL)360cdf0e10cSrcweir rtl::OUString StatusBarManager::RetrieveLabelFromCommand( const rtl::OUString& aCmdURL )
361cdf0e10cSrcweir {
362cdf0e10cSrcweir return framework::RetrieveLabelFromCommand(aCmdURL,m_xServiceManager,m_xUICommandLabels,m_xFrame,m_aModuleIdentifier,m_bModuleIdentified,"Name");
363cdf0e10cSrcweir }
364cdf0e10cSrcweir
CreateControllers()365cdf0e10cSrcweir void StatusBarManager::CreateControllers()
366cdf0e10cSrcweir {
367cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::CreateControllers" );
368cdf0e10cSrcweir uno::Reference< uno::XComponentContext > xComponentContext;
369cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xProps( m_xServiceManager, uno::UNO_QUERY );
370cdf0e10cSrcweir uno::Reference< awt::XWindow > xStatusbarWindow = VCLUnoHelper::GetInterface( m_pStatusBar );
3712503e1a5SAriel Constenla-Haile
372cdf0e10cSrcweir if ( xProps.is() )
373cdf0e10cSrcweir xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xComponentContext;
3742503e1a5SAriel Constenla-Haile
375cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < m_pStatusBar->GetItemCount(); i++ )
376cdf0e10cSrcweir {
377cdf0e10cSrcweir sal_uInt16 nId = m_pStatusBar->GetItemId( i );
378cdf0e10cSrcweir if ( nId == 0 )
379cdf0e10cSrcweir continue;
3802503e1a5SAriel Constenla-Haile
381*d3bacab6SAriel Constenla-Haile rtl::OUString aCommandURL( m_pStatusBar->GetItemCommand( nId ));
382*d3bacab6SAriel Constenla-Haile sal_Bool bInit( sal_True );
383*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController;
3842503e1a5SAriel Constenla-Haile AddonStatusbarItemData *pItemData = static_cast< AddonStatusbarItemData *>( m_pStatusBar->GetItemData( nId ) );
3852503e1a5SAriel Constenla-Haile uno::Reference< ui::XStatusbarItem > xStatusbarItem(
3862503e1a5SAriel Constenla-Haile static_cast< cppu::OWeakObject *>( new StatusbarItem( m_pStatusBar, pItemData, nId, aCommandURL ) ),
3872503e1a5SAriel Constenla-Haile uno::UNO_QUERY );
3882503e1a5SAriel Constenla-Haile
389*d3bacab6SAriel Constenla-Haile beans::PropertyValue aPropValue;
390*d3bacab6SAriel Constenla-Haile std::vector< uno::Any > aPropVector;
3912503e1a5SAriel Constenla-Haile
392*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CommandURL" ));
393*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= aCommandURL;
394*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
395dccf82beSAriel Constenla-Haile
396*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModuleIdentifier" ));
397*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= m_aModuleIdentifier;
398*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
399dccf82beSAriel Constenla-Haile
400*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Frame" ));
401*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= m_xFrame;
402*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
403dccf82beSAriel Constenla-Haile
404*d3bacab6SAriel Constenla-Haile // TODO remove this
405*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ServiceManager" ));
406*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= m_xServiceManager;
407*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
408dccf82beSAriel Constenla-Haile
409*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ParentWindow" ));
410*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= xStatusbarWindow;
411*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
412dccf82beSAriel Constenla-Haile
413*d3bacab6SAriel Constenla-Haile // TODO still needing with the css::ui::XStatusbarItem?
414*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Identifier" ));
415*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= nId;
416*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
417dccf82beSAriel Constenla-Haile
418*d3bacab6SAriel Constenla-Haile aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "StatusbarItem" ));
419*d3bacab6SAriel Constenla-Haile aPropValue.Value <<= xStatusbarItem;
420*d3bacab6SAriel Constenla-Haile aPropVector.push_back( uno::makeAny( aPropValue ) );
421dccf82beSAriel Constenla-Haile
422*d3bacab6SAriel Constenla-Haile uno::Sequence< uno::Any > aArgs( comphelper::containerToSequence( aPropVector ) );
423*d3bacab6SAriel Constenla-Haile
424*d3bacab6SAriel Constenla-Haile // 1º) UNO Statusbar controllers, registered in Controllers.xcu
425*d3bacab6SAriel Constenla-Haile if ( m_xStatusbarControllerFactory.is() &&
426*d3bacab6SAriel Constenla-Haile m_xStatusbarControllerFactory->hasController( aCommandURL, m_aModuleIdentifier ))
427*d3bacab6SAriel Constenla-Haile {
428*d3bacab6SAriel Constenla-Haile xController = uno::Reference< frame::XStatusbarController >(
429dccf82beSAriel Constenla-Haile m_xStatusbarControllerFactory->createInstanceWithArgumentsAndContext(
430dccf82beSAriel Constenla-Haile aCommandURL, aArgs, xComponentContext ),
431dccf82beSAriel Constenla-Haile uno::UNO_QUERY );
432dccf82beSAriel Constenla-Haile bInit = sal_False; // Initialization is done through the factory service
433cdf0e10cSrcweir }
434*d3bacab6SAriel Constenla-Haile
435cdf0e10cSrcweir if ( !xController.is() )
436cdf0e10cSrcweir {
437*d3bacab6SAriel Constenla-Haile svt::StatusbarController* pController( 0 );
438*d3bacab6SAriel Constenla-Haile
4392503e1a5SAriel Constenla-Haile // 2º) Old SFX2 Statusbar controllers
440cdf0e10cSrcweir pController = CreateStatusBarController( m_xFrame, m_pStatusBar, nId, aCommandURL );
441cdf0e10cSrcweir if ( !pController )
4422503e1a5SAriel Constenla-Haile {
4432503e1a5SAriel Constenla-Haile // 3º) Is Add-on? Generic statusbar controller
4442503e1a5SAriel Constenla-Haile if ( pItemData )
4452503e1a5SAriel Constenla-Haile {
4462503e1a5SAriel Constenla-Haile pController = new GenericStatusbarController( m_xServiceManager,
4472503e1a5SAriel Constenla-Haile m_xFrame,
4482503e1a5SAriel Constenla-Haile xStatusbarItem,
4492503e1a5SAriel Constenla-Haile pItemData );
4502503e1a5SAriel Constenla-Haile }
4512503e1a5SAriel Constenla-Haile else
4522503e1a5SAriel Constenla-Haile {
4532503e1a5SAriel Constenla-Haile // 4º) Default Statusbar controller
4542503e1a5SAriel Constenla-Haile pController = new svt::StatusbarController( m_xServiceManager, m_xFrame, aCommandURL, nId );
4552503e1a5SAriel Constenla-Haile }
4562503e1a5SAriel Constenla-Haile }
4572503e1a5SAriel Constenla-Haile
458cdf0e10cSrcweir if ( pController )
459*d3bacab6SAriel Constenla-Haile xController = uno::Reference< frame::XStatusbarController >(
460cdf0e10cSrcweir static_cast< ::cppu::OWeakObject *>( pController ),
461cdf0e10cSrcweir uno::UNO_QUERY );
462cdf0e10cSrcweir }
4632503e1a5SAriel Constenla-Haile
4642503e1a5SAriel Constenla-Haile m_aControllerMap[nId] = xController;
465*d3bacab6SAriel Constenla-Haile if ( bInit )
466cdf0e10cSrcweir {
467*d3bacab6SAriel Constenla-Haile xController->initialize( aArgs );
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
471cdf0e10cSrcweir AddFrameActionListener();
472cdf0e10cSrcweir }
473cdf0e10cSrcweir
AddFrameActionListener()474cdf0e10cSrcweir void StatusBarManager::AddFrameActionListener()
475cdf0e10cSrcweir {
476cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::AddFrameActionListener" );
477cdf0e10cSrcweir if ( !m_bFrameActionRegistered && m_xFrame.is() )
478cdf0e10cSrcweir {
479cdf0e10cSrcweir m_bFrameActionRegistered = sal_True;
480cdf0e10cSrcweir m_xFrame->addFrameActionListener( uno::Reference< frame::XFrameActionListener >(
481cdf0e10cSrcweir static_cast< ::cppu::OWeakObject *>( this ), uno::UNO_QUERY ));
482cdf0e10cSrcweir }
483cdf0e10cSrcweir }
484cdf0e10cSrcweir
FillStatusBar(const uno::Reference<container::XIndexAccess> & rItemContainer)485cdf0e10cSrcweir void StatusBarManager::FillStatusBar( const uno::Reference< container::XIndexAccess >& rItemContainer )
486cdf0e10cSrcweir {
487cdf0e10cSrcweir RTL_LOGFILE_CONTEXT( aLog, "framework (cd100003) ::StatusBarManager::FillStatusbar" );
488cdf0e10cSrcweir
489cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
490cdf0e10cSrcweir
491cdf0e10cSrcweir if ( m_bDisposed || !m_pStatusBar )
492cdf0e10cSrcweir return;
493cdf0e10cSrcweir
494cdf0e10cSrcweir sal_uInt16 nId( 1 );
495cdf0e10cSrcweir rtl::OUString aHelpIdPrefix( RTL_CONSTASCII_USTRINGPARAM( HELPID_PREFIX ));
496cdf0e10cSrcweir
497cdf0e10cSrcweir RemoveControllers();
498cdf0e10cSrcweir
499cdf0e10cSrcweir // reset and fill command map
500cdf0e10cSrcweir m_pStatusBar->Clear();
5012503e1a5SAriel Constenla-Haile m_aControllerMap.clear();// TODO already done in RemoveControllers
502cdf0e10cSrcweir
503cdf0e10cSrcweir for ( sal_Int32 n = 0; n < rItemContainer->getCount(); n++ )
504cdf0e10cSrcweir {
505cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::FillStatusBar" );
506cdf0e10cSrcweir uno::Sequence< beans::PropertyValue > aProp;
507cdf0e10cSrcweir rtl::OUString aCommandURL;
508cdf0e10cSrcweir rtl::OUString aHelpURL;
509cdf0e10cSrcweir sal_Int16 nOffset( 0 );
510cdf0e10cSrcweir sal_Int16 nStyle( 0 );
511cdf0e10cSrcweir sal_Int16 nWidth( 0 );
512cdf0e10cSrcweir sal_uInt16 nType( css_ui::ItemType::DEFAULT );
513cdf0e10cSrcweir
514cdf0e10cSrcweir try
515cdf0e10cSrcweir {
516cdf0e10cSrcweir if ( rItemContainer->getByIndex( n ) >>= aProp )
517cdf0e10cSrcweir {
518cdf0e10cSrcweir for ( int i = 0; i < aProp.getLength(); i++ )
519cdf0e10cSrcweir {
520cdf0e10cSrcweir if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_COMMANDURL ))
521cdf0e10cSrcweir {
522cdf0e10cSrcweir aProp[i].Value >>= aCommandURL;
523cdf0e10cSrcweir }
524cdf0e10cSrcweir else if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_HELPURL ))
525cdf0e10cSrcweir {
526cdf0e10cSrcweir aProp[i].Value >>= aHelpURL;
527cdf0e10cSrcweir }
528cdf0e10cSrcweir else if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_STYLE ))
529cdf0e10cSrcweir {
530cdf0e10cSrcweir aProp[i].Value >>= nStyle;
531cdf0e10cSrcweir }
532cdf0e10cSrcweir else if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_TYPE ))
533cdf0e10cSrcweir {
534cdf0e10cSrcweir aProp[i].Value >>= nType;
535cdf0e10cSrcweir }
536cdf0e10cSrcweir else if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_WIDTH ))
537cdf0e10cSrcweir {
538cdf0e10cSrcweir aProp[i].Value >>= nWidth;
539cdf0e10cSrcweir }
540cdf0e10cSrcweir else if ( aProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_OFFSET ))
541cdf0e10cSrcweir {
542cdf0e10cSrcweir aProp[i].Value >>= nOffset;
543cdf0e10cSrcweir }
544cdf0e10cSrcweir }
545cdf0e10cSrcweir
546cdf0e10cSrcweir if (( nType == ::com::sun::star::ui::ItemType::DEFAULT ) && ( aCommandURL.getLength() > 0 ))
547cdf0e10cSrcweir {
548cdf0e10cSrcweir rtl::OUString aString( RetrieveLabelFromCommand( aCommandURL ));
549cdf0e10cSrcweir sal_uInt16 nItemBits( impl_convertItemStyleToItemBits( nStyle ));
5502503e1a5SAriel Constenla-Haile
551cdf0e10cSrcweir m_pStatusBar->InsertItem( nId, nWidth, nItemBits, nOffset );
552cdf0e10cSrcweir m_pStatusBar->SetItemCommand( nId, aCommandURL );
553cdf0e10cSrcweir m_pStatusBar->SetAccessibleName( nId, aString );
554cdf0e10cSrcweir ++nId;
555cdf0e10cSrcweir }
556cdf0e10cSrcweir }
557cdf0e10cSrcweir }
558cdf0e10cSrcweir catch ( ::com::sun::star::lang::IndexOutOfBoundsException& )
559cdf0e10cSrcweir {
560cdf0e10cSrcweir break;
561cdf0e10cSrcweir }
562cdf0e10cSrcweir }
563cdf0e10cSrcweir
5642503e1a5SAriel Constenla-Haile // Statusbar Merging
5652503e1a5SAriel Constenla-Haile const sal_uInt16 STATUSBAR_ITEM_STARTID = 1000;
5662503e1a5SAriel Constenla-Haile MergeStatusbarInstructionContainer aMergeInstructions = AddonsOptions().GetMergeStatusbarInstructions();
5672503e1a5SAriel Constenla-Haile if ( !aMergeInstructions.empty() )
5682503e1a5SAriel Constenla-Haile {
5692503e1a5SAriel Constenla-Haile const sal_uInt32 nCount = aMergeInstructions.size();
5702503e1a5SAriel Constenla-Haile sal_uInt16 nItemId( STATUSBAR_ITEM_STARTID );
5712503e1a5SAriel Constenla-Haile
5722503e1a5SAriel Constenla-Haile for ( sal_uInt32 i = 0; i < nCount; i++ )
5732503e1a5SAriel Constenla-Haile {
5742503e1a5SAriel Constenla-Haile MergeStatusbarInstruction &rInstruction = aMergeInstructions[i];
5752503e1a5SAriel Constenla-Haile if ( !StatusbarMerger::IsCorrectContext( rInstruction.aMergeContext, m_aModuleIdentifier ) )
5762503e1a5SAriel Constenla-Haile continue;
5772503e1a5SAriel Constenla-Haile
5782503e1a5SAriel Constenla-Haile AddonStatusbarItemContainer aItems;
5792503e1a5SAriel Constenla-Haile StatusbarMerger::ConvertSeqSeqToVector( rInstruction.aMergeStatusbarItems, aItems );
5802503e1a5SAriel Constenla-Haile
5812503e1a5SAriel Constenla-Haile sal_uInt16 nRefPos = StatusbarMerger::FindReferencePos( m_pStatusBar, rInstruction.aMergePoint );
5822503e1a5SAriel Constenla-Haile if ( nRefPos != STATUSBAR_ITEM_NOTFOUND )
5832503e1a5SAriel Constenla-Haile {
5842503e1a5SAriel Constenla-Haile StatusbarMerger::ProcessMergeOperation( m_pStatusBar,
5852503e1a5SAriel Constenla-Haile nRefPos,
5862503e1a5SAriel Constenla-Haile nItemId,
5872503e1a5SAriel Constenla-Haile m_aModuleIdentifier,
5882503e1a5SAriel Constenla-Haile rInstruction.aMergeCommand,
5892503e1a5SAriel Constenla-Haile rInstruction.aMergeCommandParameter,
5902503e1a5SAriel Constenla-Haile aItems );
5912503e1a5SAriel Constenla-Haile }
5922503e1a5SAriel Constenla-Haile else
5932503e1a5SAriel Constenla-Haile {
5942503e1a5SAriel Constenla-Haile StatusbarMerger::ProcessMergeFallback( m_pStatusBar,
5952503e1a5SAriel Constenla-Haile nRefPos,
5962503e1a5SAriel Constenla-Haile nItemId,
5972503e1a5SAriel Constenla-Haile m_aModuleIdentifier,
5982503e1a5SAriel Constenla-Haile rInstruction.aMergeCommand,
5992503e1a5SAriel Constenla-Haile rInstruction.aMergeCommandParameter,
6002503e1a5SAriel Constenla-Haile aItems );
6012503e1a5SAriel Constenla-Haile }
6022503e1a5SAriel Constenla-Haile }
6032503e1a5SAriel Constenla-Haile }
6042503e1a5SAriel Constenla-Haile
605cdf0e10cSrcweir // Create controllers
606cdf0e10cSrcweir CreateControllers();
607cdf0e10cSrcweir
608cdf0e10cSrcweir // Notify controllers that they are now correctly initialized and can start listening
609cdf0e10cSrcweir UpdateControllers();
610cdf0e10cSrcweir }
611cdf0e10cSrcweir
StateChanged(StateChangedType)612cdf0e10cSrcweir void StatusBarManager::StateChanged( StateChangedType )
613cdf0e10cSrcweir {
614cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::StateChanged" );
615cdf0e10cSrcweir }
616cdf0e10cSrcweir
DataChanged(const DataChangedEvent & rDCEvt)617cdf0e10cSrcweir void StatusBarManager::DataChanged( const DataChangedEvent& rDCEvt )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::DataChanged" );
620cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
621cdf0e10cSrcweir
622cdf0e10cSrcweir if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) ||
623cdf0e10cSrcweir ( rDCEvt.GetType() == DATACHANGED_FONTS ) ||
624cdf0e10cSrcweir ( rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION ) ||
625cdf0e10cSrcweir ( rDCEvt.GetType() == DATACHANGED_DISPLAY )) &&
626cdf0e10cSrcweir ( rDCEvt.GetFlags() & SETTINGS_STYLE ))
627cdf0e10cSrcweir {
628cdf0e10cSrcweir css::uno::Reference< css::frame::XLayoutManager > xLayoutManager;
629cdf0e10cSrcweir css::uno::Reference< css::beans::XPropertySet > xPropSet( m_xFrame, css::uno::UNO_QUERY );
630cdf0e10cSrcweir if ( xPropSet.is() )
631cdf0e10cSrcweir xPropSet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ))) >>= xLayoutManager;
632cdf0e10cSrcweir if ( xLayoutManager.is() )
633cdf0e10cSrcweir {
634cdf0e10cSrcweir aGuard.unlock();
635cdf0e10cSrcweir xLayoutManager->doLayout();
636cdf0e10cSrcweir }
637cdf0e10cSrcweir }
638cdf0e10cSrcweir }
639cdf0e10cSrcweir
UserDraw(const UserDrawEvent & rUDEvt)640cdf0e10cSrcweir void StatusBarManager::UserDraw( const UserDrawEvent& rUDEvt )
641cdf0e10cSrcweir {
642cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::UserDraw" );
643cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
6442503e1a5SAriel Constenla-Haile
645cdf0e10cSrcweir if ( m_bDisposed )
646cdf0e10cSrcweir return;
6472503e1a5SAriel Constenla-Haile
648cdf0e10cSrcweir sal_uInt16 nId( rUDEvt.GetItemId() );
6492503e1a5SAriel Constenla-Haile StatusBarControllerMap::const_iterator it = m_aControllerMap.find( nId );
6502503e1a5SAriel Constenla-Haile if (( nId > 0 ) && ( it != m_aControllerMap.end() ))
651cdf0e10cSrcweir {
652*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController( it->second );
653cdf0e10cSrcweir if ( xController.is() && rUDEvt.GetDevice() )
654cdf0e10cSrcweir {
6552503e1a5SAriel Constenla-Haile uno::Reference< awt::XGraphics > xGraphics =
656cdf0e10cSrcweir rUDEvt.GetDevice()->CreateUnoGraphics();
657cdf0e10cSrcweir
6582503e1a5SAriel Constenla-Haile awt::Rectangle aRect( rUDEvt.GetRect().Left(),
659cdf0e10cSrcweir rUDEvt.GetRect().Top(),
6602503e1a5SAriel Constenla-Haile rUDEvt.GetRect().GetWidth(),
661cdf0e10cSrcweir rUDEvt.GetRect().GetHeight() );
662cdf0e10cSrcweir aGuard.unlock();
6632503e1a5SAriel Constenla-Haile xController->paint( xGraphics, aRect, rUDEvt.GetStyle() );
664cdf0e10cSrcweir }
665cdf0e10cSrcweir }
666cdf0e10cSrcweir }
667cdf0e10cSrcweir
Command(const CommandEvent & rEvt)668cdf0e10cSrcweir void StatusBarManager::Command( const CommandEvent& rEvt )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::Command" );
671cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
6722503e1a5SAriel Constenla-Haile
673cdf0e10cSrcweir if ( m_bDisposed )
674cdf0e10cSrcweir return;
6752503e1a5SAriel Constenla-Haile
676cdf0e10cSrcweir if ( rEvt.GetCommand() == COMMAND_CONTEXTMENU )
677cdf0e10cSrcweir {
678cdf0e10cSrcweir sal_uInt16 nId = m_pStatusBar->GetItemId( rEvt.GetMousePosPixel() );
6792503e1a5SAriel Constenla-Haile StatusBarControllerMap::const_iterator it = m_aControllerMap.find( nId );
6802503e1a5SAriel Constenla-Haile if (( nId > 0 ) && ( it != m_aControllerMap.end() ))
681cdf0e10cSrcweir {
682*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController( it->second );
683cdf0e10cSrcweir if ( xController.is() )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir awt::Point aPos;
686cdf0e10cSrcweir aPos.X = rEvt.GetMousePosPixel().X();
687cdf0e10cSrcweir aPos.Y = rEvt.GetMousePosPixel().Y();
688cdf0e10cSrcweir xController->command( aPos, awt::Command::CONTEXTMENU, sal_True, uno::Any() );
689cdf0e10cSrcweir }
690cdf0e10cSrcweir }
691cdf0e10cSrcweir }
692cdf0e10cSrcweir }
693cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)694cdf0e10cSrcweir void StatusBarManager::MouseMove( const MouseEvent& rMEvt )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::MouseMove" );
697cdf0e10cSrcweir MouseButton(rMEvt,&frame::XStatusbarController::mouseMove);
698cdf0e10cSrcweir }
6992503e1a5SAriel Constenla-Haile
MouseButton(const MouseEvent & rMEvt,sal_Bool (SAL_CALL frame::XStatusbarController::* _pMethod)(const::com::sun::star::awt::MouseEvent &))700cdf0e10cSrcweir void StatusBarManager::MouseButton( const MouseEvent& rMEvt ,sal_Bool ( SAL_CALL frame::XStatusbarController::*_pMethod )(const ::com::sun::star::awt::MouseEvent&))
701cdf0e10cSrcweir {
702cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::MouseButton" );
703cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
7042503e1a5SAriel Constenla-Haile
705cdf0e10cSrcweir if ( !m_bDisposed )
706cdf0e10cSrcweir {
707cdf0e10cSrcweir sal_uInt16 nId = m_pStatusBar->GetItemId( rMEvt.GetPosPixel() );
7082503e1a5SAriel Constenla-Haile StatusBarControllerMap::const_iterator it = m_aControllerMap.find( nId );
7092503e1a5SAriel Constenla-Haile if (( nId > 0 ) && ( it != m_aControllerMap.end() ))
710cdf0e10cSrcweir {
711*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController( it->second );
712cdf0e10cSrcweir if ( xController.is() )
713cdf0e10cSrcweir {
714cdf0e10cSrcweir ::com::sun::star::awt::MouseEvent aMouseEvent;
715cdf0e10cSrcweir aMouseEvent.Buttons = rMEvt.GetButtons();
716cdf0e10cSrcweir aMouseEvent.X = rMEvt.GetPosPixel().X();
717cdf0e10cSrcweir aMouseEvent.Y = rMEvt.GetPosPixel().Y();
718cdf0e10cSrcweir aMouseEvent.ClickCount = rMEvt.GetClicks();
719cdf0e10cSrcweir (xController.get()->*_pMethod)( aMouseEvent);
720cdf0e10cSrcweir }
7212503e1a5SAriel Constenla-Haile }
722cdf0e10cSrcweir }
723cdf0e10cSrcweir }
7242503e1a5SAriel Constenla-Haile
MouseButtonDown(const MouseEvent & rMEvt)725cdf0e10cSrcweir void StatusBarManager::MouseButtonDown( const MouseEvent& rMEvt )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::MouseButtonDown" );
728cdf0e10cSrcweir MouseButton(rMEvt,&frame::XStatusbarController::mouseButtonDown);
729cdf0e10cSrcweir }
730cdf0e10cSrcweir
MouseButtonUp(const MouseEvent & rMEvt)731cdf0e10cSrcweir void StatusBarManager::MouseButtonUp( const MouseEvent& rMEvt )
732cdf0e10cSrcweir {
733cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "StatusBarManager::MouseButtonUp" );
734cdf0e10cSrcweir MouseButton(rMEvt,&frame::XStatusbarController::mouseButtonUp);
735cdf0e10cSrcweir }
736cdf0e10cSrcweir
IMPL_LINK(StatusBarManager,Click,StatusBar *,EMPTYARG)737cdf0e10cSrcweir IMPL_LINK( StatusBarManager, Click, StatusBar*, EMPTYARG )
738cdf0e10cSrcweir {
739cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
7402503e1a5SAriel Constenla-Haile
741cdf0e10cSrcweir if ( m_bDisposed )
742cdf0e10cSrcweir return 1;
7432503e1a5SAriel Constenla-Haile
744cdf0e10cSrcweir sal_uInt16 nId = m_pStatusBar->GetCurItemId();
7452503e1a5SAriel Constenla-Haile StatusBarControllerMap::const_iterator it = m_aControllerMap.find( nId );
7462503e1a5SAriel Constenla-Haile if (( nId > 0 ) && ( it != m_aControllerMap.end() ))
747cdf0e10cSrcweir {
748*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController( it->second );
749cdf0e10cSrcweir if ( xController.is() )
7502503e1a5SAriel Constenla-Haile {
7512503e1a5SAriel Constenla-Haile const Point aVCLPos = m_pStatusBar->GetPointerPosPixel();
7522503e1a5SAriel Constenla-Haile const awt::Point aAWTPoint( aVCLPos.X(), aVCLPos.Y() );
7532503e1a5SAriel Constenla-Haile xController->click( aAWTPoint );
7542503e1a5SAriel Constenla-Haile }
755cdf0e10cSrcweir }
7562503e1a5SAriel Constenla-Haile
757cdf0e10cSrcweir return 1;
758cdf0e10cSrcweir }
759cdf0e10cSrcweir
IMPL_LINK(StatusBarManager,DoubleClick,StatusBar *,EMPTYARG)760cdf0e10cSrcweir IMPL_LINK( StatusBarManager, DoubleClick, StatusBar*, EMPTYARG )
761cdf0e10cSrcweir {
762cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
7632503e1a5SAriel Constenla-Haile
764cdf0e10cSrcweir if ( m_bDisposed )
765cdf0e10cSrcweir return 1;
7662503e1a5SAriel Constenla-Haile
767cdf0e10cSrcweir sal_uInt16 nId = m_pStatusBar->GetCurItemId();
7682503e1a5SAriel Constenla-Haile StatusBarControllerMap::const_iterator it = m_aControllerMap.find( nId );
7692503e1a5SAriel Constenla-Haile if (( nId > 0 ) && ( it != m_aControllerMap.end() ))
770cdf0e10cSrcweir {
771*d3bacab6SAriel Constenla-Haile uno::Reference< frame::XStatusbarController > xController( it->second );
772cdf0e10cSrcweir if ( xController.is() )
7732503e1a5SAriel Constenla-Haile {
7742503e1a5SAriel Constenla-Haile const Point aVCLPos = m_pStatusBar->GetPointerPosPixel();
7752503e1a5SAriel Constenla-Haile const awt::Point aAWTPoint( aVCLPos.X(), aVCLPos.Y() );
7762503e1a5SAriel Constenla-Haile xController->doubleClick( aAWTPoint );
7772503e1a5SAriel Constenla-Haile }
778cdf0e10cSrcweir }
7792503e1a5SAriel Constenla-Haile
780cdf0e10cSrcweir return 1;
781cdf0e10cSrcweir }
782cdf0e10cSrcweir
783cdf0e10cSrcweir }
784