diff options
Diffstat (limited to 'reportdesign/source/ui/misc/toolboxcontroller.cxx')
-rw-r--r-- | reportdesign/source/ui/misc/toolboxcontroller.cxx | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/reportdesign/source/ui/misc/toolboxcontroller.cxx b/reportdesign/source/ui/misc/toolboxcontroller.cxx new file mode 100644 index 000000000000..cf5561ba4758 --- /dev/null +++ b/reportdesign/source/ui/misc/toolboxcontroller.cxx @@ -0,0 +1,360 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "precompiled_reportdesign.hxx" +#include "toolboxcontroller.hxx" +#include <com/sun/star/ui/ImageType.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/menu.hxx> +#include <com/sun/star/ui/XUIConfigurationManager.hpp> +#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp> +#include <com/sun/star/ui/XImageManager.hpp> +#include <com/sun/star/ui/ImageType.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> +#include <com/sun/star/util/Color.hpp> +#include <vcl/svapp.hxx> +#include <vcl/toolbox.hxx> +#include <svtools/miscopt.hxx> +#include <unotools/moduleoptions.hxx> +#include <svtools/menuoptions.hxx> +#include <vos/mutex.hxx> +#include <svx/svxids.hrc> +#define ITEMID_COLOR 1 +#define ITEMID_BRUSH 2 +#define ITEMID_FONT 3 +#define ITEMID_FONTHEIGHT 4 +#include <editeng/fontitem.hxx> +#include <editeng/fhgtitem.hxx> +#include <svx/tbcontrl.hxx> +#include <editeng/colritem.hxx> +#include <svx/tbxcustomshapes.hxx> + +#include <comphelper/sequence.hxx> + +#include <memory> + +namespace rptui +{ + using namespace svt; + using namespace com::sun::star; + using namespace com::sun::star::uno; + using namespace com::sun::star::beans; + using namespace com::sun::star::lang; + using namespace frame; + using namespace util; + using namespace ui; + +::rtl::OUString SAL_CALL OToolboxController::getImplementationName() throw( RuntimeException ) +{ + return getImplementationName_Static(); +} + +//------------------------------------------------------------------------------ +::rtl::OUString OToolboxController::getImplementationName_Static() throw( RuntimeException ) +{ + return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.report.comp.ReportToolboxController")); +} +//------------------------------------------------------------------------------ +Sequence< ::rtl::OUString> OToolboxController::getSupportedServiceNames_Static(void) throw( RuntimeException ) +{ + Sequence< ::rtl::OUString> aSupported(1); + aSupported.getArray()[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.report.ReportToolboxController")); + return aSupported; +} +// ----------------------------------------------------------------------------- +::sal_Bool SAL_CALL OToolboxController::supportsService( const ::rtl::OUString& ServiceName ) throw (uno::RuntimeException) +{ + return ::comphelper::existsValue(ServiceName,getSupportedServiceNames_Static()); +} +//------------------------------------------------------------------------- +Sequence< ::rtl::OUString> SAL_CALL OToolboxController::getSupportedServiceNames() throw(RuntimeException) +{ + return getSupportedServiceNames_Static(); +} +// ------------------------------------------------------------------------- +Reference< XInterface > OToolboxController::create(Reference< XComponentContext > const & xContext) +{ + return *(new OToolboxController(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY))); +} +// ----------------------------------------------------------------------------- +DBG_NAME(rpt_OToolboxController) +OToolboxController::OToolboxController(const Reference< XMultiServiceFactory >& _rxORB) + : m_pToolbarController(NULL) + ,m_nToolBoxId(1) + ,m_nSlotId(0) +{ + DBG_CTOR(rpt_OToolboxController,NULL); + osl_incrementInterlockedCount(&m_refCount); + m_xServiceManager = _rxORB; + osl_decrementInterlockedCount(&m_refCount); + +} +// ----------------------------------------------------------------------------- +OToolboxController::~OToolboxController() +{ + DBG_DTOR(rpt_OToolboxController,NULL); +} +// ----------------------------------------------------------------------------- +// XInterface +Any SAL_CALL OToolboxController::queryInterface( const Type& _rType ) throw (RuntimeException) +{ + Any aReturn = ToolboxController::queryInterface(_rType); + if (!aReturn.hasValue()) + aReturn = TToolboxController_BASE::queryInterface(_rType); + return aReturn; +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::acquire() throw () +{ + ToolboxController::acquire(); +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::release() throw () +{ + ToolboxController::release(); +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException) +{ + ToolboxController::initialize(_rArguments); + vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); + ::osl::MutexGuard aGuard(m_aMutex); + + ToolBox* pToolBox = static_cast<ToolBox*>(VCLUnoHelper::GetWindow(getParent())); + if ( pToolBox ) + { + const USHORT nCount = pToolBox->GetItemCount(); + for (USHORT nPos = 0; nPos < nCount; ++nPos) + { + const USHORT nItemId = pToolBox->GetItemId(nPos); + if ( pToolBox->GetItemCommand(nItemId) == String(m_aCommandURL) ) + { + m_nToolBoxId = nItemId; + break; + } + } + if ( m_aCommandURL.equalsAscii(".uno:BasicShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:BasicShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_BASIC,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:SymbolShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:SymbolShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_SYMBOL,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:ArrowShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:ArrowShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_ARROW,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:FlowChartShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:FlowChartShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_FLOWCHART,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:CalloutShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:CalloutShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_CALLOUT,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:StarShapes") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:StarShapes")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxTbxCtlCustomShapes(m_nSlotId = SID_DRAWTBX_CS_STAR,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:CharFontName") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:CharFontName")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxFontNameToolBoxControl/*SvxStyleToolBoxControl*/(m_nSlotId = SID_ATTR_CHAR_FONT,m_nToolBoxId,*pToolBox)); + } + else if ( m_aCommandURL.equalsAscii(".uno:FontColor") || m_aCommandURL.equalsAscii(".uno:Color") ) + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:FontColor")),sal_True)); + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Color")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxFontColorExtToolBoxControl/*SvxFontColorToolBoxControl*/(m_nSlotId = SID_ATTR_CHAR_COLOR2,m_nToolBoxId,*pToolBox)); + } + else + { + m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:BackgroundColor")),sal_True)); + m_pToolbarController = TToolbarHelper::createFromQuery(new SvxColorToolBoxControl(m_nSlotId = SID_BACKGROUND_COLOR,m_nToolBoxId,*pToolBox)); + } + + TCommandState::iterator aIter = m_aStates.begin(); + for (; aIter != m_aStates.end(); ++aIter) + addStatusListener(aIter->first); + + if ( m_pToolbarController.is() ) + m_pToolbarController->initialize(_rArguments); + // check if paste special is allowed, when not don't add DROPDOWN + pToolBox->SetItemBits(m_nToolBoxId,pToolBox->GetItemBits(m_nToolBoxId) | TIB_DROPDOWN); + } +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::statusChanged( const FeatureStateEvent& Event ) throw ( RuntimeException ) +{ + ::osl::MutexGuard aGuard(m_aMutex); + TCommandState::iterator aFind = m_aStates.find( Event.FeatureURL.Complete ); + if ( aFind != m_aStates.end() ) + { + aFind->second = Event.IsEnabled; + if ( m_pToolbarController.is() ) + { + // All other status events will be processed here + sal_Bool bSetCheckmark = sal_False; + sal_Bool bCheckmark = sal_False; + //m_pToolbarController->GetToolBox().Enable(Event.IsEnabled); + ToolBox& rTb = m_pToolbarController->GetToolBox(); + for ( USHORT i = 0; i < rTb.GetItemCount(); i++ ) + { + USHORT nId = rTb.GetItemId( i ); + if ( nId == 0 ) + continue; + + rtl::OUString aCmd = rTb.GetItemCommand( nId ); + if ( aCmd == Event.FeatureURL.Complete ) + { + // Enable/disable item + rTb.EnableItem( nId, Event.IsEnabled ); + + // Checkmark + if ( Event.State >>= bCheckmark ) + bSetCheckmark = sal_True; + + if ( bSetCheckmark ) + rTb.CheckItem( nId, bCheckmark ); + else + { + rtl::OUString aItemText; + + if ( Event.State >>= aItemText ) + rTb.SetItemText( nId, aItemText ); + } + } + } + + switch(m_nSlotId) + { + case SID_ATTR_CHAR_COLOR2: + case SID_BACKGROUND_COLOR: + { + util::Color nColor(COL_TRANSPARENT); + Event.State >>= nColor; + ::Color aGcc3WorkaroundTemporary( nColor); + SvxColorItem aColorItem(aGcc3WorkaroundTemporary,1); + if ( SID_ATTR_CHAR_COLOR2 == m_nSlotId ) + static_cast<SvxFontColorExtToolBoxControl*>(m_pToolbarController.get())->StateChanged(m_nSlotId,Event.IsEnabled ? SFX_ITEM_SET : SFX_ITEM_DISABLED,&aColorItem); + else + static_cast<SvxColorToolBoxControl*>(m_pToolbarController.get())->StateChanged(m_nSlotId,Event.IsEnabled ? SFX_ITEM_SET : SFX_ITEM_DISABLED,&aColorItem); + } + break; + case SID_ATTR_CHAR_FONT: + { + SvxFontItem aItem(ITEMID_FONT); + aItem.PutValue(Event.State); + static_cast<SvxFontNameToolBoxControl*>(m_pToolbarController.get())->StateChanged(m_nSlotId,Event.IsEnabled ? SFX_ITEM_AVAILABLE : SFX_ITEM_DISABLED,&aItem); + } + break; + } + } + } +} +// ----------------------------------------------------------------------------- +Reference< awt::XWindow > SAL_CALL OToolboxController::createPopupWindow() throw (RuntimeException) +{ + // execute the menu + vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); + ::osl::MutexGuard aGuard(m_aMutex); + + Reference< awt::XWindow > xRet; + if ( m_pToolbarController.is() ) + xRet = m_pToolbarController.getRef()->createPopupWindow(); + + return xRet; +} +// ----------------------------------------------------------------------------- +::sal_Bool SAL_CALL OToolboxController::opensSubToolbar() throw (uno::RuntimeException) +{ + return m_nSlotId == SID_DRAWTBX_CS_BASIC; +} +// ----------------------------------------------------------------------------- +::rtl::OUString SAL_CALL OToolboxController::getSubToolbarName() throw (uno::RuntimeException) +{ + vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); + ::osl::MutexGuard aGuard(m_aMutex); + uno::Reference< frame::XSubToolbarController> xSub(m_pToolbarController.getRef(),uno::UNO_QUERY); + if ( xSub.is() ) + return xSub->getSubToolbarName(); + return ::rtl::OUString(); +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::functionSelected( const ::rtl::OUString& rCommand ) throw (uno::RuntimeException) +{ + vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); + ::osl::MutexGuard aGuard(m_aMutex); + + uno::Reference< frame::XSubToolbarController> xSub(m_pToolbarController.getRef(),uno::UNO_QUERY); + if ( xSub.is() ) + { + xSub->functionSelected(m_aCommandURL = rCommand); + } +} +// ----------------------------------------------------------------------------- +void SAL_CALL OToolboxController::updateImage( ) throw (uno::RuntimeException) +{ + vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() ); + ::osl::MutexGuard aGuard(m_aMutex); + + uno::Reference< frame::XSubToolbarController> xSub(m_pToolbarController.getRef(),uno::UNO_QUERY); + if ( xSub.is() ) + xSub->updateImage(); +} +// ----------------------------------------------------------------------------- +uno::Reference< awt::XWindow > SAL_CALL OToolboxController::createItemWindow( const uno::Reference< awt::XWindow >& _xParent) +throw (uno::RuntimeException) +{ + uno::Reference< awt::XWindow > xWindow; + if ( m_pToolbarController.is() ) + { + switch(m_nSlotId) + { + case SID_ATTR_CHAR_FONT: + xWindow = VCLUnoHelper::GetInterface(static_cast<SvxFontNameToolBoxControl*>(m_pToolbarController.get())->CreateItemWindow(VCLUnoHelper::GetWindow(_xParent))); + break; + default: + ; + } + } + return xWindow; +} +// ----------------------------------------------------------------------------- +//.......................................................................... +} // rptui +//.......................................................................... + + |