21#include <com/sun/star/beans/PropertyValue.hpp>
22#include <com/sun/star/frame/XDispatchProvider.hpp>
23#include <com/sun/star/frame/XFrame.hpp>
24#include <com/sun/star/lang/DisposedException.hpp>
25#include <com/sun/star/lang/XMultiServiceFactory.hpp>
26#include <com/sun/star/util/URLTransformer.hpp>
27#include <com/sun/star/ui/XStatusbarItem.hpp>
36using namespace ::
cppu;
37using namespace css::awt;
38using namespace css::uno;
39using namespace css::util;
40using namespace css::beans;
41using namespace css::lang;
42using namespace css::frame;
48 const Reference< XComponentContext >& rxContext,
49 const Reference< XFrame >& xFrame,
51 unsigned short nID ) :
53 , m_bInitialized( false )
58 , m_aCommandURL(
std::move( aCommandURL ))
63StatusbarController::StatusbarController() :
65 , m_bInitialized( false )
96 Any a = ::cppu::queryInterface(
98 static_cast< XStatusbarController*
>(
this ),
99 static_cast< XStatusListener*
>(
this ),
100 static_cast< XEventListener*
>(
this ),
101 static_cast< XInitialization*
>(
this ),
102 static_cast< XComponent*
>(
this ),
103 static_cast< XUpdatable*
>(
this ));
108 return OWeakObject::queryInterface( rType );
113 OWeakObject::acquire();
118 OWeakObject::release();
126 throw DisposedException();
133 PropertyValue aPropValue;
136 if ( rArgument >>= aPropValue )
138 if ( aPropValue.Name ==
"Frame" )
140 else if ( aPropValue.Name ==
"CommandURL" )
142 else if ( aPropValue.Name ==
"ServiceManager" )
145 aPropValue.Value >>= xMSF;
149 else if ( aPropValue.Name ==
"ParentWindow" )
151 else if ( aPropValue.Name ==
"Identifier" )
152 aPropValue.Value >>=
m_nID;
153 else if ( aPropValue.Name ==
"StatusbarItem" )
167 throw DisposedException();
185 css::lang::EventObject
aEvent( xThis );
200 if (
xDispatch.is() && xStatusListener.is() )
255 listener.second.clear();
268 if ( pWindow && pWindow->GetType() == WindowType::STATUSBAR &&
m_nID != 0 )
273 if ( Event.State >>= aStrValue )
275 else if ( !Event.State.hasValue() )
282 const css::awt::MouseEvent& )
288 const css::awt::MouseEvent& )
294 const css::awt::MouseEvent& )
300 const css::awt::Point&,
303 const css::uno::Any& )
308 const css::uno::Reference< css::awt::XGraphics >&,
309 const css::awt::Rectangle&,
337 URLToDispatchMap::iterator pIter =
m_aListenerMap.find( aCommandURL );
355 if (
m_xContext.is() && xDispatchProvider.is() )
362 xStatusListener =
this;
363 URLToDispatchMap::iterator aIter =
m_aListenerMap.find( aCommandURL );
371 if ( xOldDispatch.is() )
372 xOldDispatch->removeStatusListener( xStatusListener,
aTargetURL );
397 std::vector< Listener > aDispatchVector;
408 if (
m_xContext.is() && xDispatchProvider.is() )
410 xStatusListener =
this;
432 listener.second.clear();
451 if ( !xStatusListener.is() )
454 for (
Listener & rListener : aDispatchVector)
458 if ( rListener.xDispatch.is() )
459 rListener.xDispatch->addStatusListener( xStatusListener, rListener.aURL );
465 FeatureStateEvent aFeatureStateEvent;
466 aFeatureStateEvent.IsEnabled =
false;
467 aFeatureStateEvent.FeatureURL = rListener.aURL;
468 aFeatureStateEvent.State =
Any();
469 xStatusListener->statusChanged( aFeatureStateEvent );
484 throw DisposedException();
489 if ( pStatusBar && pStatusBar->GetType() == WindowType::STATUSBAR )
490 aRect = pStatusBar->GetItemRect(
m_nID );
501 OUString aCommandURL;
507 throw DisposedException();
522 if ( !(
xDispatch.is() && xURLTransformer.is()) )
533 catch ( DisposedException& )
539 const OUString& aCommandURL,
549 throw DisposedException();
558 xURLTransformer->parseStrict( aTargetURL );
560 URLToDispatchMap::iterator pIter =
m_aListenerMap.find( aCommandURL );
566 m_xFrame->getController(), UNO_QUERY );
567 if ( xDispatchProvider.is() )
568 xDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 );
577 xDispatch->dispatch( aTargetURL, aArgs );
579 catch ( DisposedException& )
Reference< XComponentContext > m_xContext
css::uno::Reference< css::lang::XComponent > m_xFrame
void SetItemText(sal_uInt16 nItemId, const OUString &rText, int nCharsWidth=-1)
static vcl::Window * GetWindow(const css::uno::Reference< css::awt::XWindow > &rxWindow)
reference_type * get() const
sal_Int32 removeInterface(const css::uno::Type &rKey, const css::uno::Reference< css::uno::XInterface > &rxIFace)
sal_Int32 addInterface(const css::uno::Type &rKey, const css::uno::Reference< css::uno::XInterface > &r)
void disposeAndClear(const css::lang::EventObject &rEvt)
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &aListener) override
::tools::Rectangle getControlRect() const
virtual void SAL_CALL command(const css::awt::Point &aPos, ::sal_Int32 nCommand, sal_Bool bMouseEvent, const css::uno::Any &aData) override
virtual void SAL_CALL release() noexcept override
css::uno::Reference< css::awt::XWindow > m_xParentWindow
virtual ~StatusbarController() override
css::uno::Reference< css::frame::XFrame > m_xFrame
virtual void SAL_CALL paint(const css::uno::Reference< css::awt::XGraphics > &xGraphics, const css::awt::Rectangle &rOutputRectangle, ::sal_Int32 nStyle) override
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent &Event) override
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &aType) override
void addStatusListener(const OUString &aCommandURL)
css::uno::Reference< css::uno::XComponentContext > m_xContext
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
css::uno::Reference< css::util::XURLTransformer > m_xURLTransformer
container for ALL Listener
css::uno::Reference< css::ui::XStatusbarItem > m_xStatusbarItem
virtual void SAL_CALL click(const css::awt::Point &aPos) override
css::uno::Reference< css::util::XURLTransformer > getURLTransformer() const
URLToDispatchMap m_aListenerMap
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &aArguments) override
comphelper::OMultiTypeInterfaceContainerHelper2 m_aListenerContainer
virtual sal_Bool SAL_CALL mouseButtonUp(const css::awt::MouseEvent &aMouseEvent) override
virtual sal_Bool SAL_CALL mouseButtonDown(const css::awt::MouseEvent &aMouseEvent) override
virtual void SAL_CALL update() override
virtual void SAL_CALL doubleClick(const css::awt::Point &aPos) override
virtual void SAL_CALL acquire() noexcept override
void execute(const css::uno::Sequence< css::beans::PropertyValue > &aArgs)
virtual sal_Bool SAL_CALL mouseMove(const css::awt::MouseEvent &aMouseEvent) override
css::uno::Reference< css::frame::XFrame > getFrameInterface() const
virtual void SAL_CALL dispose() override
Reference< XDispatch > xDispatch
Sequence< PropertyValue > aArguments
Reference< XComponentContext > getComponentContext(Reference< XMultiServiceFactory > const &factory)
Reference< XFrame > xFrame