/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_rptui.hxx" #include "statusbarcontroller.hxx" #include #include #include #include #include #include #include #include #include namespace rptui { using namespace svt; using namespace com::sun::star::uno; using namespace com::sun::star::beans; using namespace com::sun::star::lang; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::util; ::rtl::OUString SAL_CALL OStatusbarController::getImplementationName() throw( RuntimeException ) { return getImplementationName_Static(); } //------------------------------------------------------------------------------ ::rtl::OUString OStatusbarController::getImplementationName_Static() throw( RuntimeException ) { return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.report.comp.StatusbarController")); } //------------------------------------------------------------------------------ Sequence< ::rtl::OUString> OStatusbarController::getSupportedServiceNames_Static(void) throw( RuntimeException ) { Sequence< ::rtl::OUString> aSupported(1); aSupported.getArray()[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.StatusbarController")); return aSupported; } // ----------------------------------------------------------------------------- ::sal_Bool SAL_CALL OStatusbarController::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException) { return ::comphelper::existsValue(ServiceName,getSupportedServiceNames_Static()); } //------------------------------------------------------------------------- Sequence< ::rtl::OUString> SAL_CALL OStatusbarController::getSupportedServiceNames() throw(RuntimeException) { return getSupportedServiceNames_Static(); } // ------------------------------------------------------------------------- Reference< XInterface > OStatusbarController::create(Reference< XComponentContext > const & xContext) { return *(new OStatusbarController(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY))); } IMPLEMENT_FORWARD_XINTERFACE2(OStatusbarController, ::svt::StatusbarController,OStatusbarController_BASE) OStatusbarController::OStatusbarController(const Reference< XMultiServiceFactory >& _rxORB) : m_nSlotId(0) ,m_nId(1) { m_xServiceManager = _rxORB; } // ----------------------------------------------------------------------------- void SAL_CALL OStatusbarController::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException) { StatusbarController::initialize(_rArguments); vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); ::osl::MutexGuard aGuard(m_aMutex); StatusBar* pStatusBar = static_cast(VCLUnoHelper::GetWindow(m_xParentWindow)); if ( pStatusBar ) { const sal_uInt16 nCount = pStatusBar->GetItemCount(); for (sal_uInt16 nPos = 0; nPos < nCount; ++nPos) { const sal_uInt16 nItemId = pStatusBar->GetItemId(nPos); if ( pStatusBar->GetItemCommand(nItemId) == String(m_aCommandURL) ) { m_nId = nItemId; break; } } SfxStatusBarControl *pController = 0; if ( m_aCommandURL.equalsAscii(".uno:ZoomSlider") ) { pController = new SvxZoomSliderControl(m_nSlotId = SID_ATTR_ZOOMSLIDER,m_nId,*pStatusBar); } // if ( m_aCommandURL.equalsAscii(".uno:ZoomSlider") ) else if ( m_aCommandURL.equalsAscii(".uno:Zoom") ) { pController = new SvxZoomStatusBarControl(m_nSlotId = SID_ATTR_ZOOM,m_nId,*pStatusBar); } if ( pController ) { m_rController.set( pController ); if ( m_rController.is() ) { m_rController->initialize(_rArguments); m_rController->update(); } } addStatusListener(m_aCommandURL); update(); } } // XStatusListener void SAL_CALL OStatusbarController::statusChanged( const FeatureStateEvent& _aEvent)throw ( RuntimeException ) { ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); ::osl::MutexGuard aGuard(m_aMutex); if ( m_rController.is() ) { if ( m_aCommandURL.equalsAscii(".uno:ZoomSlider") ) { Sequence< PropertyValue > aSeq; if ( (_aEvent.State >>= aSeq) && aSeq.getLength() == 2 ) { SvxZoomSliderItem aZoomSlider(100,20,400); aZoomSlider.PutValue(_aEvent.State); static_cast(m_rController.get())->StateChanged(m_nSlotId,SFX_ITEM_AVAILABLE,&aZoomSlider); } } // if ( m_aCommandURL.equalsAscii(".uno:ZoomSlider") ) else if ( m_aCommandURL.equalsAscii(".uno:Zoom") ) { Sequence< PropertyValue > aSeq; if ( (_aEvent.State >>= aSeq) && aSeq.getLength() == 3 ) { SvxZoomItem aZoom; aZoom.PutValue(_aEvent.State); static_cast(m_rController.get())->StateChanged(m_nSlotId,SFX_ITEM_AVAILABLE,&aZoom); } } } } // XStatusbarController ::sal_Bool SAL_CALL OStatusbarController::mouseButtonDown(const ::com::sun::star::awt::MouseEvent& _aEvent)throw (::com::sun::star::uno::RuntimeException) { return m_rController.is() && m_rController->mouseButtonDown(_aEvent); } ::sal_Bool SAL_CALL OStatusbarController::mouseMove( const ::com::sun::star::awt::MouseEvent& _aEvent)throw (::com::sun::star::uno::RuntimeException) { return m_rController.is() && m_rController->mouseMove(_aEvent); } ::sal_Bool SAL_CALL OStatusbarController::mouseButtonUp( const ::com::sun::star::awt::MouseEvent& _aEvent)throw (::com::sun::star::uno::RuntimeException) { return m_rController.is() && m_rController->mouseButtonUp(_aEvent); } void SAL_CALL OStatusbarController::command( const ::com::sun::star::awt::Point& aPos, ::sal_Int32 nCommand, ::sal_Bool bMouseEvent, const ::com::sun::star::uno::Any& aData ) throw (::com::sun::star::uno::RuntimeException) { if ( m_rController.is() ) m_rController->command( aPos, nCommand, bMouseEvent, aData ); } void SAL_CALL OStatusbarController::paint( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& xGraphics, const ::com::sun::star::awt::Rectangle& rOutputRectangle, ::sal_Int32 nStyle ) throw (::com::sun::star::uno::RuntimeException) { if ( m_rController.is() ) m_rController->paint( xGraphics, rOutputRectangle, nStyle ); } void SAL_CALL OStatusbarController::click( const ::com::sun::star::awt::Point& aPos ) throw (::com::sun::star::uno::RuntimeException) { if ( m_rController.is() ) m_rController->click( aPos ); } void SAL_CALL OStatusbarController::doubleClick( const ::com::sun::star::awt::Point& aPos ) throw (::com::sun::star::uno::RuntimeException) { if ( m_rController.is() ) m_rController->doubleClick( aPos ); } // ----------------------------------------------------------------------------- void SAL_CALL OStatusbarController::update() throw ( RuntimeException ) { ::svt::StatusbarController::update(); if ( m_rController.is() ) m_rController->update(); } // ----------------------------------------------------------------------------- // XComponent void SAL_CALL OStatusbarController::dispose() throw (::com::sun::star::uno::RuntimeException) { if ( m_rController.is() ) ::comphelper::disposeComponent( m_rController ); svt::StatusbarController::dispose(); } // ============================================================================= } // rptui // =============================================================================