diff options
Diffstat (limited to 'chart2/source/controller')
246 files changed, 4968 insertions, 4755 deletions
diff --git a/chart2/source/controller/accessibility/AccessibleBase.cxx b/chart2/source/controller/accessibility/AccessibleBase.cxx index f419ba7f7942..e1f583a578ee 100644 --- a/chart2/source/controller/accessibility/AccessibleBase.cxx +++ b/chart2/source/controller/accessibility/AccessibleBase.cxx @@ -21,7 +21,8 @@ #include "AccessibleChartShape.hxx" #include <ObjectHierarchy.hxx> #include <ObjectIdentifier.hxx> -#include <chartview/ExplicitValueProvider.hxx> +#include <ChartView.hxx> +#include <ChartController.hxx> #include <com/sun/star/accessibility/AccessibleEventId.hpp> #include <com/sun/star/accessibility/AccessibleEventObject.hpp> @@ -30,22 +31,17 @@ #include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <sal/log.hxx> +#include <utility> #include <vcl/svapp.hxx> -#include <comphelper/servicehelper.hxx> #include <cppuhelper/supportsservice.hxx> #include <i18nlangtag/languagetag.hxx> -#include <vcl/unohelp.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/window.hxx> #include <vcl/settings.hxx> #include <o3tl/functional.hxx> #include <o3tl/safeint.hxx> -#include <tools/diagnose_ex.h> -#include <unotools/accessiblestatesethelper.hxx> -#include <ChartModel.hxx> +#include <comphelper/diagnose_ex.hxx> #include <algorithm> #include <iterator> @@ -67,7 +63,7 @@ namespace chart /** @param bMayHaveChildren is false per default */ AccessibleBase::AccessibleBase( - const AccessibleElementInfo & rAccInfo, + AccessibleElementInfo aAccInfo, bool bMayHaveChildren, bool bAlwaysTransparent /* default: false */ ) : impl::AccessibleBase_Base( m_aMutex ), @@ -75,18 +71,17 @@ AccessibleBase::AccessibleBase( m_bMayHaveChildren( bMayHaveChildren ), m_bChildrenInitialized( false ), m_nEventNotifierId(0), - m_xStateSetHelper( new ::utl::AccessibleStateSetHelper() ), - m_aAccInfo( rAccInfo ), + m_nStateSet( 0 ), + m_aAccInfo(std::move( aAccInfo )), m_bAlwaysTransparent( bAlwaysTransparent ), m_bStateSetInitialized( false ) { // initialize some states - OSL_ASSERT( m_xStateSetHelper.is() ); - m_xStateSetHelper->AddState( AccessibleStateType::ENABLED ); - m_xStateSetHelper->AddState( AccessibleStateType::SHOWING ); - m_xStateSetHelper->AddState( AccessibleStateType::VISIBLE ); - m_xStateSetHelper->AddState( AccessibleStateType::SELECTABLE ); - m_xStateSetHelper->AddState( AccessibleStateType::FOCUSABLE ); + m_nStateSet |= AccessibleStateType::ENABLED; + m_nStateSet |= AccessibleStateType::SHOWING; + m_nStateSet |= AccessibleStateType::VISIBLE; + m_nStateSet |= AccessibleStateType::SELECTABLE; + m_nStateSet |= AccessibleStateType::FOCUSABLE; } AccessibleBase::~AccessibleBase() @@ -123,7 +118,7 @@ bool AccessibleBase::NotifyEvent( EventType eEventType, const AccessibleUniqueId AddState( AccessibleStateType::FOCUSED ); aSelected <<= AccessibleStateType::FOCUSED; - BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, aSelected, aEmpty, true ); + BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, aSelected, aEmpty ); SAL_INFO("chart2.accessibility", "Selection acquired by: " << getAccessibleName()); } @@ -136,7 +131,7 @@ bool AccessibleBase::NotifyEvent( EventType eEventType, const AccessibleUniqueId AddState( AccessibleStateType::FOCUSED ); aSelected <<= AccessibleStateType::FOCUSED; - BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, aEmpty, aSelected, true ); + BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, aEmpty, aSelected ); SAL_INFO("chart2.accessibility", "Selection lost by: " << getAccessibleName()); } break; @@ -167,18 +162,16 @@ bool AccessibleBase::NotifyEvent( EventType eEventType, const AccessibleUniqueId return false; } -void AccessibleBase::AddState( sal_Int16 aState ) +void AccessibleBase::AddState( sal_Int64 aState ) { CheckDisposeState(); - OSL_ASSERT( m_xStateSetHelper.is() ); - m_xStateSetHelper->AddState( aState ); + m_nStateSet |= aState; } -void AccessibleBase::RemoveState( sal_Int16 aState ) +void AccessibleBase::RemoveState( sal_Int64 aState ) { CheckDisposeState(); - OSL_ASSERT( m_xStateSetHelper.is() ); - m_xStateSetHelper->RemoveState( aState ); + m_nStateSet &= ~aState; } bool AccessibleBase::UpdateChildren() @@ -343,32 +336,24 @@ awt::Point AccessibleBase::GetUpperLeftOnScreen() const void AccessibleBase::BroadcastAccEvent( sal_Int16 nId, const Any & rNew, - const Any & rOld, - bool bSendGlobally ) const + const Any & rOld ) const { ClearableMutexGuard aGuard( m_aMutex ); - if ( !m_nEventNotifierId && !bSendGlobally ) + if ( !m_nEventNotifierId ) return; // if we don't have a client id for the notifier, then we don't have listeners, then // we don't need to notify anything - //except SendGlobally for focus handling? // the const cast is needed, because UNO parameters are never const const AccessibleEventObject aEvent( const_cast< uno::XWeak * >( static_cast< const uno::XWeak * >( this )), - nId, rNew, rOld ); + nId, rNew, rOld, -1 ); - if ( m_nEventNotifierId ) // let the notifier handle this event - ::comphelper::AccessibleEventNotifier::addEvent( m_nEventNotifierId, aEvent ); + // let the notifier handle this event + ::comphelper::AccessibleEventNotifier::addEvent( m_nEventNotifierId, aEvent ); aGuard.clear(); - - // send event to global message queue - if( bSendGlobally ) - { - vcl::unohelper::NotifyAccessibleStateEventGlobally( aEvent ); - } } void AccessibleBase::KillAllChildren() @@ -405,8 +390,7 @@ void AccessibleBase::SetInfo( const AccessibleElementInfo & rNewInfo ) { KillAllChildren(); } - BroadcastAccEvent( AccessibleEventId::INVALIDATE_ALL_CHILDREN, uno::Any(), uno::Any(), - true /* global notification */ ); + BroadcastAccEvent( AccessibleEventId::INVALIDATE_ALL_CHILDREN, uno::Any(), uno::Any()); } // ________ (XComponent::dispose) ________ @@ -427,11 +411,7 @@ void SAL_CALL AccessibleBase::disposing() // reset pointers m_aAccInfo.m_pParent = nullptr; - // attach new empty state set helper to member reference - rtl::Reference<::utl::AccessibleStateSetHelper> pHelper = new ::utl::AccessibleStateSetHelper(); - pHelper->AddState(AccessibleStateType::DEFUNC); - // release old helper and attach new one - m_xStateSetHelper = pHelper; + m_nStateSet = AccessibleStateType::DEFUNC; m_bIsDisposed = true; @@ -453,7 +433,7 @@ Reference< XAccessibleContext > SAL_CALL AccessibleBase::getAccessibleContext() } // ________ AccessibleBase::XAccessibleContext ________ -sal_Int32 SAL_CALL AccessibleBase::getAccessibleChildCount() +sal_Int64 SAL_CALL AccessibleBase::getAccessibleChildCount() { ClearableMutexGuard aGuard( m_aMutex ); if( ! m_bMayHaveChildren || @@ -472,12 +452,12 @@ sal_Int32 SAL_CALL AccessibleBase::getAccessibleChildCount() return ImplGetAccessibleChildCount(); } -sal_Int32 AccessibleBase::ImplGetAccessibleChildCount() const +sal_Int64 AccessibleBase::ImplGetAccessibleChildCount() const { return m_aChildList.size(); } -Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleChild( sal_Int32 i ) +Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleChild( sal_Int64 i ) { CheckDisposeState(); Reference< XAccessible > xResult; @@ -496,7 +476,7 @@ Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleChild( sal_Int32 return xResult; } -Reference< XAccessible > AccessibleBase::ImplGetAccessibleChildById( sal_Int32 i ) const +Reference< XAccessible > AccessibleBase::ImplGetAccessibleChildById( sal_Int64 i ) const { Reference< XAccessible > xResult; @@ -529,7 +509,7 @@ Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleParent() return aResult; } -sal_Int32 SAL_CALL AccessibleBase::getAccessibleIndexInParent() +sal_Int64 SAL_CALL AccessibleBase::getAccessibleIndexInParent() { CheckDisposeState(); @@ -549,11 +529,11 @@ Reference< XAccessibleRelationSet > SAL_CALL AccessibleBase::getAccessibleRelati return aResult; } -Reference< XAccessibleStateSet > SAL_CALL AccessibleBase::getAccessibleStateSet() +sal_Int64 SAL_CALL AccessibleBase::getAccessibleStateSet() { if( ! m_bStateSetInitialized ) { - Reference< view::XSelectionSupplier > xSelSupp( GetInfo().m_xSelectionSupplier ); + rtl::Reference< ::chart::ChartController > xSelSupp( GetInfo().m_xChartController ); if ( xSelSupp.is() ) { ObjectIdentifier aOID( xSelSupp->getSelection() ); @@ -566,7 +546,7 @@ Reference< XAccessibleStateSet > SAL_CALL AccessibleBase::getAccessibleStateSet( m_bStateSetInitialized = true; } - return m_xStateSetHelper; + return m_nStateSet; } lang::Locale SAL_CALL AccessibleBase::getLocale() @@ -631,12 +611,11 @@ Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleAtPoint( const aw awt::Rectangle SAL_CALL AccessibleBase::getBounds() { - ExplicitValueProvider *pExplicitValueProvider( - comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_aAccInfo.m_xView )); - if( pExplicitValueProvider ) + rtl::Reference<ChartView> pChartView = m_aAccInfo.m_xView.get(); + if( pChartView ) { VclPtr<vcl::Window> pWindow( VCLUnoHelper::GetWindow( m_aAccInfo.m_xWindow )); - awt::Rectangle aLogicRect( pExplicitValueProvider->getRectangleOfObject( m_aAccInfo.m_aOID.getObjectCID() )); + awt::Rectangle aLogicRect( pChartView->getRectangleOfObject( m_aAccInfo.m_aOID.getObjectCID() )); if( pWindow ) { tools::Rectangle aRect( aLogicRect.X, aLogicRect.Y, @@ -657,7 +636,7 @@ awt::Rectangle SAL_CALL AccessibleBase::getBounds() aParentLocOnScreen.Y - aULOnScreen.Y ); return awt::Rectangle( aRect.Left() - aOffset.X, aRect.Top() - aOffset.Y, - aRect.getWidth(), aRect.getHeight()); + aRect.getOpenWidth(), aRect.getOpenHeight()); } } @@ -698,7 +677,7 @@ void SAL_CALL AccessibleBase::grabFocus() { CheckDisposeState(); - Reference< view::XSelectionSupplier > xSelSupp( GetInfo().m_xSelectionSupplier ); + rtl::Reference< ::chart::ChartController > xSelSupp( GetInfo().m_xChartController ); if ( xSelSupp.is() ) { xSelSupp->select( GetId().getAny() ); @@ -728,7 +707,7 @@ Color AccessibleBase::getColor( eColorType eColType ) if( eType == OBJECTTYPE_LEGEND_ENTRY ) { // for colors get the data series/point properties - OUString aParentParticle( ObjectIdentifier::getFullParentParticle( aObjectCID )); + std::u16string_view aParentParticle( ObjectIdentifier::getFullParentParticle( aObjectCID )); aObjectCID = ObjectIdentifier::createClassifiedIdentifierForParticle( aParentParticle ); } diff --git a/chart2/source/controller/accessibility/AccessibleChartElement.cxx b/chart2/source/controller/accessibility/AccessibleChartElement.cxx index 2afd4129e171..d3b98c102f76 100644 --- a/chart2/source/controller/accessibility/AccessibleChartElement.cxx +++ b/chart2/source/controller/accessibility/AccessibleChartElement.cxx @@ -18,23 +18,17 @@ */ #include "AccessibleChartElement.hxx" +#include <AccessibleTextHelper.hxx> #include <CharacterProperties.hxx> #include <ChartModel.hxx> +#include <ChartController.hxx> #include <ObjectIdentifier.hxx> #include <ObjectNameProvider.hxx> -#include <servicenames.hxx> -#include <ChartModel.hxx> #include <com/sun/star/awt/XDevice.hpp> #include <com/sun/star/chart2/XTitle.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/accessibility/AccessibleStateType.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/view/XSelectionSupplier.hpp> - -#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::accessibility; @@ -87,37 +81,21 @@ void AccessibleChartElement::InitTextEdit() if( ! m_xTextHelper.is()) { // get hard reference - Reference< view::XSelectionSupplier > xSelSupp( GetInfo().m_xSelectionSupplier ); - // get factory from selection supplier (controller) - Reference< lang::XMultiServiceFactory > xFact( xSelSupp, uno::UNO_QUERY ); - if( xFact.is()) - { - m_xTextHelper.set( - xFact->createInstance( CHART_ACCESSIBLE_TEXT_SERVICE_NAME ), uno::UNO_QUERY ); - } + rtl::Reference< ::chart::ChartController > xChartController( GetInfo().m_xChartController ); + if( xChartController.is()) + m_xTextHelper = xChartController->createAccessibleTextContext(); } if( !m_xTextHelper.is()) return; - try - { - Reference< lang::XInitialization > xInit( m_xTextHelper, uno::UNO_QUERY_THROW ); - Sequence< uno::Any > aArgs{ uno::Any(GetInfo().m_aOID.getObjectCID()), - uno::Any(Reference< XAccessible >( this )), - uno::Any(Reference< awt::XWindow >( GetInfo().m_xWindow )) }; - xInit->initialize( aArgs ); - } - catch( const uno::Exception & ) - { - DBG_UNHANDLED_EXCEPTION("chart2"); - } + m_xTextHelper->initialize( GetInfo().m_aOID.getObjectCID(), this, GetInfo().m_xWindow ); } // Interfaces // ________ AccessibleBase::XAccessibleContext ________ -Reference< XAccessible > AccessibleChartElement::ImplGetAccessibleChildById( sal_Int32 i ) const +Reference< XAccessible > AccessibleChartElement::ImplGetAccessibleChildById( sal_Int64 i ) const { Reference< XAccessible > xResult; @@ -129,7 +107,7 @@ Reference< XAccessible > AccessibleChartElement::ImplGetAccessibleChildById( sal return xResult; } -sal_Int32 AccessibleChartElement::ImplGetAccessibleChildCount() const +sal_Int64 AccessibleChartElement::ImplGetAccessibleChildCount() const { if( m_bHasText ) { diff --git a/chart2/source/controller/accessibility/AccessibleChartElement.hxx b/chart2/source/controller/accessibility/AccessibleChartElement.hxx index 12982db8faa1..283efed69d80 100644 --- a/chart2/source/controller/accessibility/AccessibleChartElement.hxx +++ b/chart2/source/controller/accessibility/AccessibleChartElement.hxx @@ -27,6 +27,7 @@ namespace com::sun::star::awt { class XFont; } namespace chart { +class AccessibleTextHelper; /** Base class for all Chart Accessibility objects except the root node (see AccessibleChartView) @@ -61,8 +62,8 @@ public: // ________ AccessibleBase ________ virtual bool ImplUpdateChildren() override; virtual css::uno::Reference< css::accessibility::XAccessible > - ImplGetAccessibleChildById( sal_Int32 i ) const override; - virtual sal_Int32 ImplGetAccessibleChildCount() const override; + ImplGetAccessibleChildById( sal_Int64 i ) const override; + virtual sal_Int64 ImplGetAccessibleChildCount() const override; // ________ XAccessibleContext ________ virtual OUString SAL_CALL getAccessibleName() override; @@ -93,7 +94,7 @@ public: private: bool m_bHasText; - css::uno::Reference< css::accessibility::XAccessibleContext > + rtl::Reference< ::chart::AccessibleTextHelper > m_xTextHelper; void InitTextEdit(); diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.cxx b/chart2/source/controller/accessibility/AccessibleChartShape.cxx index 73ff2e9c0ca8..771698a84010 100644 --- a/chart2/source/controller/accessibility/AccessibleChartShape.cxx +++ b/chart2/source/controller/accessibility/AccessibleChartShape.cxx @@ -78,9 +78,9 @@ OUString AccessibleChartShape::getImplementationName() } // ________ XAccessibleContext ________ -sal_Int32 AccessibleChartShape::getAccessibleChildCount() +sal_Int64 AccessibleChartShape::getAccessibleChildCount() { - sal_Int32 nCount(0); + sal_Int64 nCount(0); if ( m_pAccShape.is() ) { nCount = m_pAccShape->getAccessibleChildCount(); @@ -88,7 +88,7 @@ sal_Int32 AccessibleChartShape::getAccessibleChildCount() return nCount; } -Reference< XAccessible > AccessibleChartShape::getAccessibleChild( sal_Int32 i ) +Reference< XAccessible > AccessibleChartShape::getAccessibleChild( sal_Int64 i ) { Reference< XAccessible > xChild; if ( m_pAccShape.is() ) diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.hxx b/chart2/source/controller/accessibility/AccessibleChartShape.hxx index 4377929fa41d..c31204ed3c8a 100644 --- a/chart2/source/controller/accessibility/AccessibleChartShape.hxx +++ b/chart2/source/controller/accessibility/AccessibleChartShape.hxx @@ -50,9 +50,9 @@ public: virtual OUString SAL_CALL getImplementationName() override; // ________ XAccessibleContext ________ - virtual sal_Int32 SAL_CALL getAccessibleChildCount() override; + virtual sal_Int64 SAL_CALL getAccessibleChildCount() override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL - getAccessibleChild( sal_Int32 i ) override; + getAccessibleChild( sal_Int64 i ) override; virtual sal_Int16 SAL_CALL getAccessibleRole() override; virtual OUString SAL_CALL getAccessibleDescription() override; virtual OUString SAL_CALL getAccessibleName() override; diff --git a/chart2/source/controller/accessibility/AccessibleChartView.cxx b/chart2/source/controller/accessibility/AccessibleChartView.cxx index c0dac3c22657..8f01816a6504 100644 --- a/chart2/source/controller/accessibility/AccessibleChartView.cxx +++ b/chart2/source/controller/accessibility/AccessibleChartView.cxx @@ -18,20 +18,18 @@ */ #include <AccessibleChartView.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <ObjectHierarchy.hxx> #include <ObjectIdentifier.hxx> #include <ResId.hxx> #include <strings.hrc> #include "AccessibleViewForwarder.hxx" #include <ChartModel.hxx> +#include <ChartView.hxx> +#include <ChartController.hxx> #include <com/sun/star/accessibility/AccessibleStateType.hpp> #include <com/sun/star/accessibility/AccessibleRole.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> - -#include <comphelper/servicehelper.hxx> #include <rtl/ustring.hxx> #include <vcl/window.hxx> @@ -113,7 +111,7 @@ Reference< XAccessible > SAL_CALL AccessibleChartView::getAccessibleParent() return Reference< XAccessible >( m_xParent ); } -sal_Int32 SAL_CALL AccessibleChartView::getAccessibleIndexInParent() +sal_Int64 SAL_CALL AccessibleChartView::getAccessibleIndexInParent() { // the document is always the only child of the window return 0; @@ -158,9 +156,11 @@ awt::Point SAL_CALL AccessibleChartView::getLocationOnScreen() return aResult; } -// lang::XInitialization - -void SAL_CALL AccessibleChartView::initialize( const Sequence< Any >& rArguments ) +void AccessibleChartView::initialize( ChartController& rNewChartController, + const rtl::Reference<::chart::ChartModel>& xNewChartModel, + const rtl::Reference<::chart::ChartView>& xNewChartView, + const uno::Reference< XAccessible >& xNewParent, + const css::uno::Reference<css::awt::XWindow>& xNewWindow ) { //0: view::XSelectionSupplier offers notifications for selection changes and access to the selection itself //1: frame::XModel representing the chart model - offers access to object data @@ -171,125 +171,178 @@ void SAL_CALL AccessibleChartView::initialize( const Sequence< Any >& rArguments bool bOldInvalid = false; bool bNewInvalid = false; - Reference< view::XSelectionSupplier > xSelectionSupplier; + rtl::Reference< ::chart::ChartController > xChartController; rtl::Reference<::chart::ChartModel> xChartModel; - Reference< uno::XInterface > xChartView; + rtl::Reference<::chart::ChartView> xChartView; Reference< XAccessible > xParent; Reference< awt::XWindow > xWindow; { MutexGuard aGuard( m_aMutex); - xSelectionSupplier.set( m_xSelectionSupplier ); + xChartController = m_xChartController; xChartModel = m_xChartModel; - xChartView.set( m_xChartView ); + xChartView = m_xChartView; xParent.set( m_xParent ); xWindow.set( m_xWindow ); } - if( !xSelectionSupplier.is() || !xChartModel.is() || !xChartView.is() ) + if( !xChartController.is() || !xChartModel.is() || !xChartView.is() ) { bOldInvalid = true; } - if( rArguments.getLength() > 1 ) + if( xNewChartModel.get() != xChartModel.get() ) { - Reference< frame::XModel > xNewChartModel; - rArguments[1] >>= xNewChartModel; - assert(!xNewChartModel || dynamic_cast<::chart::ChartModel*>(xNewChartModel.get())); - ::chart::ChartModel* pNewChartModel = dynamic_cast<::chart::ChartModel*>(xNewChartModel.get()); - if( pNewChartModel != xChartModel.get() ) - { - xChartModel = pNewChartModel; - bChanged = true; - } + xChartModel = xNewChartModel; + bChanged = true; } - else if( xChartModel.is() ) + + if( xNewChartView != xChartView ) { + xChartView = xNewChartView; bChanged = true; - xChartModel = nullptr; } - if( rArguments.getLength() > 2 ) + if( xNewParent != xParent ) { - Reference< uno::XInterface > xNewChartView; - rArguments[2] >>= xNewChartView; - if( xNewChartView != xChartView ) - { - xChartView = xNewChartView; - bChanged = true; - } + xParent = xNewParent; + bChanged = true; } - else if( xChartView.is() ) + + if( xNewWindow != xWindow ) { + xWindow = xNewWindow; bChanged = true; - xChartView = nullptr; } - if( rArguments.getLength() > 3 ) + if(xChartController != &rNewChartController) { - Reference< XAccessible > xNewParent; - rArguments[3] >>= xNewParent; - if( xNewParent != xParent ) - { - xParent = xNewParent; - bChanged = true; - } + if (xChartController) + xChartController->removeSelectionChangeListener(this); + rNewChartController.addSelectionChangeListener(this); + xChartController = &rNewChartController; + bChanged = true; } - if( rArguments.getLength() > 4 ) + if( !xChartController.is() || !xChartModel.is() || !xChartView.is() ) { - Reference< awt::XWindow > xNewWindow; - rArguments[4] >>= xNewWindow; - if( xNewWindow != xWindow ) + if(xChartController.is()) { - xWindow.set( xNewWindow ); - bChanged = true; + xChartController->removeSelectionChangeListener(this); + xChartController.clear(); } + xChartModel.clear(); + xChartView.clear(); + xParent.clear(); + xWindow.clear(); + + bNewInvalid = true; } - if( rArguments.hasElements() && xChartModel.is() && xChartView.is() ) { - Reference< view::XSelectionSupplier > xNewSelectionSupplier; - rArguments[0] >>= xNewSelectionSupplier; - if(xSelectionSupplier!=xNewSelectionSupplier) - { - bChanged = true; - if(xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(this); - if(xNewSelectionSupplier.is()) - xNewSelectionSupplier->addSelectionChangeListener(this); - xSelectionSupplier = xNewSelectionSupplier; - } + MutexGuard aGuard( m_aMutex); + m_xChartController = xChartController.get(); + m_xChartModel = xChartModel.get(); + m_xChartView = xChartView.get(); + m_xParent = xParent; + m_xWindow = xWindow; + } + + if( bOldInvalid && bNewInvalid ) + bChanged = false; + + if( !bChanged ) + return; + + { + //before notification we prepare for creation of new context + //the old context will be deleted after notification than + MutexGuard aGuard( m_aMutex); + if( xChartModel.is()) + m_spObjectHierarchy = + std::make_shared<ObjectHierarchy>( xChartModel, m_xChartView.get().get() ); + else + m_spObjectHierarchy.reset(); } - else if( xSelectionSupplier.is() ) + + { + AccessibleElementInfo aAccInfo; + aAccInfo.m_aOID = ObjectIdentifier("ROOT"); + aAccInfo.m_xChartDocument = m_xChartModel; + aAccInfo.m_xChartController = m_xChartController; + aAccInfo.m_xView = m_xChartView; + aAccInfo.m_xWindow = m_xWindow; + aAccInfo.m_pParent = nullptr; + aAccInfo.m_spObjectHierarchy = m_spObjectHierarchy; + aAccInfo.m_pSdrView = m_pSdrView; + VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow( m_xWindow ); + m_pViewForwarder.reset( new AccessibleViewForwarder( this, pWindow ) ); + aAccInfo.m_pViewForwarder = m_pViewForwarder.get(); + // broadcasts an INVALIDATE_ALL_CHILDREN event globally + SetInfo( aAccInfo ); + } +} + +void AccessibleChartView::initialize() +{ + //0: view::XSelectionSupplier offers notifications for selection changes and access to the selection itself + //1: frame::XModel representing the chart model - offers access to object data + //2: lang::XInterface representing the normal chart view - offers access to some extra object data + + //all arguments are only valid until next initialization + bool bChanged = false; + bool bOldInvalid = false; + + rtl::Reference< ::chart::ChartController > xChartController; + rtl::Reference<::chart::ChartModel> xChartModel; + rtl::Reference<::chart::ChartView> xChartView; + Reference< XAccessible > xParent; + Reference< awt::XWindow > xWindow; + { + MutexGuard aGuard( m_aMutex); + xChartController = m_xChartController; + xChartModel = m_xChartModel; + xChartView = m_xChartView; + xParent.set( m_xParent ); + xWindow.set( m_xWindow ); + } + + if( !xChartController.is() || !xChartModel.is() || !xChartView.is() ) + { + bOldInvalid = true; + } + + if( xChartModel.is() ) { bChanged = true; - xSelectionSupplier->removeSelectionChangeListener(this); - xSelectionSupplier = nullptr; + xChartModel = nullptr; } - if( !xSelectionSupplier.is() || !xChartModel.is() || !xChartView.is() ) + if( xChartView.is() ) { - if(xSelectionSupplier.is()) - xSelectionSupplier->removeSelectionChangeListener(this); - xSelectionSupplier = nullptr; - xChartModel.clear(); - xChartView.clear(); - xParent.clear(); - xWindow.clear(); + bChanged = true; + xChartView = nullptr; + } - bNewInvalid = true; + if( xChartController.is() ) + { + bChanged = true; + xChartController->removeSelectionChangeListener(this); + xChartController = nullptr; } + xParent.clear(); + xWindow.clear(); + { MutexGuard aGuard( m_aMutex); - m_xSelectionSupplier = WeakReference< view::XSelectionSupplier >(xSelectionSupplier); + m_xChartController = xChartController.get(); m_xChartModel = xChartModel.get(); - m_xChartView = WeakReference< uno::XInterface >(xChartView); + m_xChartView = xChartView.get(); m_xParent = WeakReference< XAccessible >(xParent); m_xWindow = WeakReference< awt::XWindow >(xWindow); } - if( bOldInvalid && bNewInvalid ) + if( bOldInvalid ) bChanged = false; if( !bChanged ) @@ -301,7 +354,7 @@ void SAL_CALL AccessibleChartView::initialize( const Sequence< Any >& rArguments MutexGuard aGuard( m_aMutex); if( xChartModel.is()) m_spObjectHierarchy = - std::make_shared<ObjectHierarchy>( xChartModel, comphelper::getFromUnoTunnel<ExplicitValueProvider>(m_xChartView) ); + std::make_shared<ObjectHierarchy>( xChartModel, m_xChartView.get().get() ); else m_spObjectHierarchy.reset(); } @@ -310,7 +363,7 @@ void SAL_CALL AccessibleChartView::initialize( const Sequence< Any >& rArguments AccessibleElementInfo aAccInfo; aAccInfo.m_aOID = ObjectIdentifier("ROOT"); aAccInfo.m_xChartDocument = m_xChartModel; - aAccInfo.m_xSelectionSupplier = m_xSelectionSupplier; + aAccInfo.m_xChartController = m_xChartController; aAccInfo.m_xView = m_xChartView; aAccInfo.m_xWindow = m_xWindow; aAccInfo.m_pParent = nullptr; @@ -328,16 +381,16 @@ void SAL_CALL AccessibleChartView::initialize( const Sequence< Any >& rArguments void SAL_CALL AccessibleChartView::selectionChanged( const lang::EventObject& /*rEvent*/ ) { - Reference< view::XSelectionSupplier > xSelectionSupplier; + rtl::Reference< ::chart::ChartController > xChartController; { MutexGuard aGuard( m_aMutex); - xSelectionSupplier.set(m_xSelectionSupplier); + xChartController = m_xChartController.get(); } - if( !xSelectionSupplier.is() ) + if( !xChartController.is() ) return; - ObjectIdentifier aSelectedOID( xSelectionSupplier->getSelection() ); + ObjectIdentifier aSelectedOID( xChartController->getSelection() ); if ( m_aCurrentSelectionOID.isValid() ) { NotifyEvent( EventType::LOST_SELECTION, m_aCurrentSelectionOID ); diff --git a/chart2/source/controller/accessibility/AccessibleTextHelper.cxx b/chart2/source/controller/accessibility/AccessibleTextHelper.cxx index 2a58d9484f17..6fc26b1c82ad 100644 --- a/chart2/source/controller/accessibility/AccessibleTextHelper.cxx +++ b/chart2/source/controller/accessibility/AccessibleTextHelper.cxx @@ -53,19 +53,10 @@ AccessibleTextHelper::~AccessibleTextHelper() { } -// ____ XInitialization ____ -void SAL_CALL AccessibleTextHelper::initialize( const Sequence< uno::Any >& aArguments ) +void AccessibleTextHelper::initialize( const OUString& aCID, + const Reference< XAccessible >& xEventSource, + const Reference< awt::XWindow >& xWindow ) { - OUString aCID; - Reference< XAccessible > xEventSource; - Reference< awt::XWindow > xWindow; - - if( aArguments.getLength() >= 3 ) - { - aArguments[0] >>= aCID; - aArguments[1] >>= xEventSource; - aArguments[2] >>= xWindow; - } OSL_ENSURE( !aCID.isEmpty(), "Empty CID" ); OSL_ENSURE( xEventSource.is(), "Empty Event Source" ); OSL_ENSURE( xWindow.is(), "Empty Window" ); @@ -74,7 +65,7 @@ void SAL_CALL AccessibleTextHelper::initialize( const Sequence< uno::Any >& aArg SolarMutexGuard aSolarGuard; - m_pTextHelper.reset(); + m_oTextHelper.reset(); VclPtr<vcl::Window> pWindow( VCLUnoHelper::GetWindow( xWindow )); if( pWindow ) @@ -85,32 +76,32 @@ void SAL_CALL AccessibleTextHelper::initialize( const Sequence< uno::Any >& aArg SdrObject * pTextObj = m_pDrawViewWrapper->getNamedSdrObject( aCID ); if( pTextObj ) { - m_pTextHelper.reset( new ::accessibility::AccessibleTextHelper(std::make_unique<SvxTextEditSource>(*pTextObj, nullptr, *pView, *pWindow->GetOutDev())) ); - m_pTextHelper->SetEventSource( xEventSource ); + m_oTextHelper.emplace( std::make_unique<SvxTextEditSource>(*pTextObj, nullptr, *pView, *pWindow->GetOutDev()) ); + m_oTextHelper->SetEventSource( xEventSource ); } } } - OSL_ENSURE( m_pTextHelper, "Couldn't create text helper" ); + OSL_ENSURE( m_oTextHelper, "Couldn't create text helper" ); } // ____ XAccessibleContext ____ -::sal_Int32 SAL_CALL AccessibleTextHelper::getAccessibleChildCount() +sal_Int64 SAL_CALL AccessibleTextHelper::getAccessibleChildCount() { - if( m_pTextHelper ) + if( m_oTextHelper ) { SolarMutexGuard aSolarGuard; - return m_pTextHelper->GetChildCount(); + return m_oTextHelper->GetChildCount(); } return 0; } -Reference< XAccessible > SAL_CALL AccessibleTextHelper::getAccessibleChild( ::sal_Int32 i ) +Reference< XAccessible > SAL_CALL AccessibleTextHelper::getAccessibleChild( sal_Int64 i ) { - if( m_pTextHelper ) + if( m_oTextHelper ) { SolarMutexGuard aSolarGuard; - return m_pTextHelper->GetChild( i ); + return m_oTextHelper->GetChild( i ); } return Reference< XAccessible >(); } @@ -121,7 +112,7 @@ Reference< XAccessible > SAL_CALL AccessibleTextHelper::getAccessibleParent() return Reference< XAccessible >(); } -::sal_Int32 SAL_CALL AccessibleTextHelper::getAccessibleIndexInParent() +sal_Int64 SAL_CALL AccessibleTextHelper::getAccessibleIndexInParent() { OSL_FAIL( "Not implemented in this helper" ); return -1; @@ -151,10 +142,10 @@ Reference< XAccessibleRelationSet > SAL_CALL AccessibleTextHelper::getAccessible return Reference< XAccessibleRelationSet >(); } -Reference< XAccessibleStateSet > SAL_CALL AccessibleTextHelper::getAccessibleStateSet() +sal_Int64 SAL_CALL AccessibleTextHelper::getAccessibleStateSet() { OSL_FAIL( "Not implemented in this helper" ); - return Reference< XAccessibleStateSet >(); + return 0; } lang::Locale SAL_CALL AccessibleTextHelper::getLocale() diff --git a/chart2/source/controller/accessibility/AccessibleViewForwarder.cxx b/chart2/source/controller/accessibility/AccessibleViewForwarder.cxx index 31395f1181dc..dbd8ac0d51f2 100644 --- a/chart2/source/controller/accessibility/AccessibleViewForwarder.cxx +++ b/chart2/source/controller/accessibility/AccessibleViewForwarder.cxx @@ -45,9 +45,9 @@ tools::Rectangle AccessibleViewForwarder::GetVisibleArea() const tools::Rectangle aVisibleArea; if ( m_pWindow ) { - aVisibleArea.SetPos( Point( 0, 0 ) ); - aVisibleArea.SetSize( m_pWindow->GetOutputSizePixel() ); - aVisibleArea = m_pWindow->PixelToLogic( aVisibleArea, m_aMapMode ); + aVisibleArea = m_pWindow->PixelToLogic( + tools::Rectangle( Point( 0, 0 ), m_pWindow->GetOutputSizePixel() ), + m_aMapMode ); } return aVisibleArea; } diff --git a/chart2/source/controller/chartapiwrapper/AreaWrapper.cxx b/chart2/source/controller/chartapiwrapper/AreaWrapper.cxx index 7cbef7d67e2c..995a0f92cf4d 100644 --- a/chart2/source/controller/chartapiwrapper/AreaWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/AreaWrapper.cxx @@ -20,7 +20,6 @@ #include "AreaWrapper.hxx" #include "Chart2ModelContact.hxx" #include <WrappedDirectStateProperty.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <comphelper/sequence.hxx> #include <cppuhelper/supportsservice.hxx> @@ -29,51 +28,18 @@ #include <UserDefinedProperties.hxx> #include <algorithm> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::beans::Property; -using ::osl::MutexGuard; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; -namespace -{ - -struct StaticAreaWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticAreaWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticAreaWrapperPropertyArray_Initializer > -{ -}; - -} // anonymous namespace - namespace chart::wrapper { -AreaWrapper::AreaWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact(spChart2ModelContact) - , m_aEventListenerContainer(m_aMutex) +AreaWrapper::AreaWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move(spChart2ModelContact)) { } @@ -110,23 +76,25 @@ OUString SAL_CALL AreaWrapper::getShapeType() // ____ XComponent ____ void SAL_CALL AreaWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); - MutexGuard aGuard( m_aMutex); clearWrappedPropertySet(); } void SAL_CALL AreaWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL AreaWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } // WrappedPropertySet @@ -141,7 +109,19 @@ Reference< beans::XPropertySet > AreaWrapper::getInnerPropertySet() const Sequence< beans::Property >& AreaWrapper::getPropertySequence() { - return *StaticAreaWrapperPropertyArray::get(); + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; } std::vector< std::unique_ptr<WrappedProperty> > AreaWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/AreaWrapper.hxx b/chart2/source/controller/chartapiwrapper/AreaWrapper.hxx index 3de57f421313..c150d5bbfcef 100644 --- a/chart2/source/controller/chartapiwrapper/AreaWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/AreaWrapper.hxx @@ -20,7 +20,7 @@ #include <WrappedPropertySet.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -40,7 +40,7 @@ class AreaWrapper : public ::cppu::ImplInheritanceHelper< > { public: - explicit AreaWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit AreaWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~AreaWrapper() override; /// XServiceInfo declarations @@ -72,7 +72,7 @@ protected: private: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; }; } // namespace chart::wrapper diff --git a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx index db3e413ba919..ea50320e506e 100644 --- a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx @@ -18,6 +18,7 @@ */ #include "AxisWrapper.hxx" +#include <Axis.hxx> #include <AxisHelper.hxx> #include <TitleHelper.hxx> #include "Chart2ModelContact.hxx" @@ -35,8 +36,6 @@ #include <com/sun/star/chart/ChartAxisLabelPosition.hpp> #include <com/sun/star/chart/ChartAxisMarkPosition.hpp> #include <com/sun/star/chart2/XAxis.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <CharacterProperties.hxx> #include <LinePropertiesHelper.hxx> @@ -49,7 +48,8 @@ #include "WrappedScaleTextProperties.hxx" #include <algorithm> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -335,33 +335,23 @@ void lcl_AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID ); } -struct StaticAxisWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticAxisWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticAxisWrapperPropertyArray_Initializer > +const Sequence< Property >& StaticAxisWrapperPropertyArray() { + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); + ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; } // anonymous namespace @@ -370,9 +360,8 @@ namespace chart::wrapper { AxisWrapper::AxisWrapper( - tAxisType eType, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) : - m_spChart2ModelContact( spChart2ModelContact ), - m_aEventListenerContainer( m_aMutex ), + tAxisType eType, std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : + m_spChart2ModelContact(std::move( spChart2ModelContact )), m_eType( eType ) { } @@ -526,8 +515,9 @@ void AxisWrapper::getDimensionAndMainAxisBool( tAxisType eType, sal_Int32& rnDim // ____ XComponent ____ void SAL_CALL AxisWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); DisposeHelper::DisposeAndClear( m_xAxisTitle ); DisposeHelper::DisposeAndClear( m_xMajorGrid ); @@ -539,13 +529,15 @@ void SAL_CALL AxisWrapper::dispose() void SAL_CALL AxisWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL AxisWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } //ReferenceSizePropertyProvider @@ -574,7 +566,7 @@ awt::Size AxisWrapper::getCurrentSizeForReference() Reference< chart2::XAxis > AxisWrapper::getAxis() { - Reference< chart2::XAxis > xAxis; + rtl::Reference< Axis > xAxis; try { sal_Int32 nDimensionIndex = 0; @@ -586,9 +578,8 @@ Reference< chart2::XAxis > AxisWrapper::getAxis() if( !xAxis.is() ) { xAxis = AxisHelper::createAxis( nDimensionIndex, bMainAxis, xDiagram, m_spChart2ModelContact->m_xContext ); - Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY ); - if( xProp.is() ) - xProp->setPropertyValue("Show", uno::Any( false ) ); + if( xAxis.is() ) + xAxis->setPropertyValue("Show", uno::Any( false ) ); } } catch( const uno::Exception & ) @@ -606,7 +597,7 @@ Reference< beans::XPropertySet > AxisWrapper::getInnerPropertySet() const Sequence< beans::Property >& AxisWrapper::getPropertySequence() { - return *StaticAxisWrapperPropertyArray::get(); + return StaticAxisWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > AxisWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/AxisWrapper.hxx b/chart2/source/controller/chartapiwrapper/AxisWrapper.hxx index b421ab331ab6..e70c85b23ff8 100644 --- a/chart2/source/controller/chartapiwrapper/AxisWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/AxisWrapper.hxx @@ -21,7 +21,7 @@ #include <WrappedPropertySet.hxx> #include "ReferenceSizePropertyProvider.hxx" #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/chart/XAxis.hpp> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/lang/XComponent.hpp> @@ -56,7 +56,7 @@ public: SECOND_Y_AXIS }; - AxisWrapper(tAxisType eType, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + AxisWrapper(tAxisType eType, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~AxisWrapper() override; static void getDimensionAndMainAxisBool( tAxisType eType, sal_Int32& rnDimensionIndex, bool& rbMainAxis ); @@ -109,7 +109,7 @@ private: //methods private: //member std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; tAxisType m_eType; diff --git a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx index aefdc29b1dce..ba286cc62623 100644 --- a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx +++ b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx @@ -19,12 +19,14 @@ #include "Chart2ModelContact.hxx" #include <ChartModelHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <CommonConverters.hxx> #include <servicenames.hxx> #include <ObjectIdentifier.hxx> #include <chartview/ExplicitValueProvider.hxx> #include <chartview/DrawModelWrapper.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <ChartView.hxx> #include <DiagramHelper.hxx> @@ -32,8 +34,8 @@ #include <ChartModel.hxx> -#include <comphelper/servicehelper.hxx> -#include <tools/diagnose_ex.h> +#include <com/sun/star/chart2/XDataSeries.hpp> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -62,16 +64,11 @@ void Chart2ModelContact::setDocumentModel( ChartModel* pChartModel ) if( !pChartModel ) return; - uno::Reference< container::XNameContainer > xDashTable( pChartModel->createInstance("com.sun.star.drawing.DashTable"), uno::UNO_QUERY ); - uno::Reference< container::XNameContainer > xGradientTable( pChartModel->createInstance("com.sun.star.drawing.GradientTable"), uno::UNO_QUERY ); - uno::Reference< container::XNameContainer > xHatchTable( pChartModel->createInstance("com.sun.star.drawing.HatchTable"), uno::UNO_QUERY ); - uno::Reference< container::XNameContainer > xBitmapTable( pChartModel->createInstance("com.sun.star.drawing.BitmapTable"), uno::UNO_QUERY ); - uno::Reference< container::XNameContainer > xTransparencyGradientTable( pChartModel->createInstance("com.sun.star.drawing.TransparencyGradientTable"), uno::UNO_QUERY ); - m_aTableMap["LineDashName"] = xDashTable; - m_aTableMap["FillGradientName"] = xGradientTable; - m_aTableMap["FillHatchName"] = xHatchTable; - m_aTableMap["FillBitmapName"] = xBitmapTable; - m_aTableMap["FillTransparenceGradientName"] = xTransparencyGradientTable; + m_aTableMap["LineDashName"].set(pChartModel->createInstance("com.sun.star.drawing.DashTable"), uno::UNO_QUERY); + m_aTableMap["FillGradientName"].set(pChartModel->createInstance("com.sun.star.drawing.GradientTable"), uno::UNO_QUERY); + m_aTableMap["FillHatchName"].set(pChartModel->createInstance("com.sun.star.drawing.HatchTable"), uno::UNO_QUERY); + m_aTableMap["FillBitmapName"].set(pChartModel->createInstance("com.sun.star.drawing.BitmapTable"), uno::UNO_QUERY); + m_aTableMap["FillTransparenceGradientName"].set(pChartModel->createInstance("com.sun.star.drawing.TransparencyGradientTable"), uno::UNO_QUERY); } void Chart2ModelContact::clear() @@ -137,7 +134,7 @@ rtl::Reference<SvxDrawPage> Chart2ModelContact::getDrawPage() const } void Chart2ModelContact::getExplicitValuesForAxis( - const Reference< XAxis > & xAxis, + const rtl::Reference< Axis > & xAxis, ExplicitScaleData & rOutExplicitScale, ExplicitIncrementData & rOutExplicitIncrement ) { @@ -150,11 +147,11 @@ void Chart2ModelContact::getExplicitValuesForAxis( } sal_Int32 Chart2ModelContact::getExplicitNumberFormatKeyForAxis( - const Reference< chart2::XAxis >& xAxis ) + const rtl::Reference< ::chart::Axis >& xAxis ) { - Reference< chart2::XCoordinateSystem > xCooSys( + rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( - xAxis, ChartModelHelper::findDiagram( m_xChartModel ) ) ); + xAxis, m_xChartModel.get()->getFirstChartDiagram() ) ); return ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( xAxis, xCooSys , m_xChartModel.get() ); @@ -193,9 +190,9 @@ awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingTitle() const awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingAxes() const { awt::Rectangle aRect(0,0,0,0); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( m_xChartModel ); + rtl::Reference< Diagram > xDiagram = m_xChartModel.get()->getFirstChartDiagram(); - if( DiagramHelper::getDiagramPositioningMode( xDiagram ) == DiagramPositioningMode_INCLUDING ) + if( xDiagram && xDiagram->getDiagramPositioningMode() == DiagramPositioningMode::Including ) aRect = DiagramHelper::getDiagramRectangleFromModel(m_xChartModel.get()); else { @@ -209,9 +206,9 @@ awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingAxes() const awt::Rectangle Chart2ModelContact::GetDiagramRectangleExcludingAxes() const { awt::Rectangle aRect(0,0,0,0); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( m_xChartModel ); + rtl::Reference< Diagram > xDiagram = m_xChartModel.get()->getFirstChartDiagram(); - if( DiagramHelper::getDiagramPositioningMode( xDiagram ) == DiagramPositioningMode_EXCLUDING ) + if( xDiagram && xDiagram->getDiagramPositioningMode() == DiagramPositioningMode::Excluding ) aRect = DiagramHelper::getDiagramRectangleFromModel(m_xChartModel.get()); else { @@ -228,8 +225,8 @@ awt::Size Chart2ModelContact::GetLegendSize() const ExplicitValueProvider* pProvider( getExplicitValueProvider() ); if( pProvider ) { - uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_xChartModel.get() ) ); - OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel.get() ) ); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_xChartModel.get() ); + OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); } return aSize; @@ -241,8 +238,8 @@ awt::Point Chart2ModelContact::GetLegendPosition() const ExplicitValueProvider* pProvider( getExplicitValueProvider() ); if( pProvider ) { - uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_xChartModel.get() ) ); - OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel.get() ) ); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_xChartModel.get() ); + OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); aPoint = ToPoint( pProvider->getRectangleOfObject( aCID ) ); } return aPoint; @@ -254,7 +251,7 @@ awt::Size Chart2ModelContact::GetTitleSize( const uno::Reference< css::chart2::X ExplicitValueProvider* pProvider( getExplicitValueProvider() ); if( pProvider && xTitle.is() ) { - OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, m_xChartModel.get() ) ); + OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, m_xChartModel ) ); aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); } return aSize; diff --git a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.hxx b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.hxx index 837c09341fd3..261f2686240a 100644 --- a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.hxx +++ b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.hxx @@ -18,7 +18,6 @@ */ #pragma once -#include <cppuhelper/weakref.hxx> #include <com/sun/star/awt/Size.hpp> #include <com/sun/star/awt/Point.hpp> #include <com/sun/star/awt/Rectangle.hpp> @@ -71,12 +70,12 @@ public: case properties are 'auto'. */ void getExplicitValuesForAxis( - const css::uno::Reference< css::chart2::XAxis > & xAxis, + const rtl::Reference< ::chart::Axis > & xAxis, ExplicitScaleData & rOutExplicitScale, ExplicitIncrementData & rOutExplicitIncrement ); sal_Int32 getExplicitNumberFormatKeyForAxis( - const css::uno::Reference< css::chart2::XAxis >& xAxis ); + const rtl::Reference< ::chart::Axis >& xAxis ); static sal_Int32 getExplicitNumberFormatKeyForSeries( const css::uno::Reference< css::chart2::XDataSeries >& xSeries ); diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx index 3b0a56818e77..7988ef90df94 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx @@ -25,12 +25,12 @@ #include <ControllerLockGuard.hxx> #include "Chart2ModelContact.hxx" #include <cppuhelper/supportsservice.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart/XChartDocument.hpp> #include <float.h> #include <cmath> #include <limits> +#include <utility> #include <osl/diagnose.h> using namespace ::com::sun::star; @@ -121,6 +121,11 @@ struct lcl_AllOperator : public lcl_Operator virtual bool setsCategories( bool /*bDataInColumns*/ ) override { + // Do not force creation of categories, when original has no categories + if (auto pDataWrapper = dynamic_cast<const ChartDataWrapper*>(m_xDataToApply.get())) + if (auto xChartModel = pDataWrapper->getChartModel()) + if (auto xDiagram = xChartModel->getFirstChartDiagram()) + return xDiagram->getCategories().is(); return true; } @@ -177,9 +182,9 @@ struct lcl_DataOperator : public lcl_Operator struct lcl_RowDescriptionsOperator : public lcl_Operator { lcl_RowDescriptionsOperator( const Sequence< OUString >& rRowDescriptions - , const rtl::Reference<::chart::ChartModel>& xChartDoc ) + , rtl::Reference<::chart::ChartModel> xChartDoc ) : m_rRowDescriptions( rRowDescriptions ) - , m_xChartDoc(xChartDoc) + , m_xChartDoc(std::move(xChartDoc)) , m_bDataInColumns(true) { } @@ -208,9 +213,9 @@ struct lcl_RowDescriptionsOperator : public lcl_Operator struct lcl_ComplexRowDescriptionsOperator : public lcl_Operator { lcl_ComplexRowDescriptionsOperator( const Sequence< Sequence< OUString > >& rComplexRowDescriptions - , const rtl::Reference<::chart::ChartModel>& xChartDoc ) + , rtl::Reference<::chart::ChartModel> xChartDoc ) : m_rComplexRowDescriptions( rComplexRowDescriptions ) - , m_xChartDoc(xChartDoc) + , m_xChartDoc(std::move(xChartDoc)) , m_bDataInColumns(true) { } @@ -260,9 +265,9 @@ struct lcl_AnyRowDescriptionsOperator : public lcl_Operator struct lcl_ColumnDescriptionsOperator : public lcl_Operator { lcl_ColumnDescriptionsOperator( const Sequence< OUString >& rColumnDescriptions - , const rtl::Reference<::chart::ChartModel>& xChartDoc ) + , rtl::Reference<::chart::ChartModel> xChartDoc ) : m_rColumnDescriptions( rColumnDescriptions ) - , m_xChartDoc(xChartDoc) + , m_xChartDoc(std::move(xChartDoc)) , m_bDataInColumns(true) { } @@ -291,9 +296,9 @@ struct lcl_ColumnDescriptionsOperator : public lcl_Operator struct lcl_ComplexColumnDescriptionsOperator : public lcl_Operator { lcl_ComplexColumnDescriptionsOperator( const Sequence< Sequence< OUString > >& rComplexColumnDescriptions - , const rtl::Reference<::chart::ChartModel>& xChartDoc ) + , rtl::Reference<::chart::ChartModel> xChartDoc ) : m_rComplexColumnDescriptions( rComplexColumnDescriptions ) - , m_xChartDoc(xChartDoc) + , m_xChartDoc(std::move(xChartDoc)) , m_bDataInColumns(true) { } @@ -364,19 +369,17 @@ struct lcl_DateCategoriesOperator : public lcl_Operator } -ChartDataWrapper::ChartDataWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact(spChart2ModelContact) - , m_aEventListenerContainer(m_aMutex) +ChartDataWrapper::ChartDataWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move(spChart2ModelContact)) { osl_atomic_increment( &m_refCount ); initDataAccess(); osl_atomic_decrement( &m_refCount ); } -ChartDataWrapper::ChartDataWrapper( const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact, +ChartDataWrapper::ChartDataWrapper( std::shared_ptr<Chart2ModelContact> spChart2ModelContact, const Reference< XChartData >& xNewData ) : - m_spChart2ModelContact( spChart2ModelContact ), - m_aEventListenerContainer( m_aMutex ) + m_spChart2ModelContact(std::move( spChart2ModelContact )) { osl_atomic_increment( &m_refCount ); lcl_AllOperator aOperator( xNewData ); @@ -513,13 +516,15 @@ void SAL_CALL ChartDataWrapper::setDateCategories( const Sequence< double >& rDa void SAL_CALL ChartDataWrapper::addChartDataChangeEventListener( const uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) { - m_aEventListenerContainer.addInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, aListener ); } void SAL_CALL ChartDataWrapper::removeChartDataChangeEventListener( const uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } double SAL_CALL ChartDataWrapper::getNotANumber() @@ -537,20 +542,23 @@ sal_Bool SAL_CALL ChartDataWrapper::isNotANumber( double nNumber ) // ____ XComponent ____ void SAL_CALL ChartDataWrapper::dispose() { - m_aEventListenerContainer.disposeAndClear( lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); m_xDataAccess=nullptr; } void SAL_CALL ChartDataWrapper::addEventListener( const uno::Reference< lang::XEventListener > & xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL ChartDataWrapper::removeEventListener( const uno::Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } // ____ XEventListener ____ @@ -560,7 +568,8 @@ void SAL_CALL ChartDataWrapper::disposing( const lang::EventObject& /* Source */ void ChartDataWrapper::fireChartDataChangeEvent( css::chart::ChartDataChangeEvent& aEvent ) { - if( ! m_aEventListenerContainer.getLength() ) + std::unique_lock g(m_aMutex); + if( ! m_aEventListenerContainer.getLength(g) ) return; uno::Reference< uno::XInterface > xSrc( static_cast< cppu::OWeakObject* >( this )); @@ -568,7 +577,13 @@ void ChartDataWrapper::fireChartDataChangeEvent( css::chart::ChartDataChangeEven if( xSrc.is() ) aEvent.Source = xSrc; - m_aEventListenerContainer.notifyEach( &css::chart::XChartDataChangeEventListener::chartDataChanged, aEvent ); + m_aEventListenerContainer.forEach( g, + [&aEvent](const uno::Reference<css::lang::XEventListener>& l) + { + uno::Reference<css::chart::XChartDataChangeEventListener> cl(l, uno::UNO_QUERY); + if (cl) + cl->chartDataChanged(aEvent); + }); } void ChartDataWrapper::switchToInternalDataProvider() @@ -647,7 +662,7 @@ void ChartDataWrapper::applyData( lcl_Operator& rDataOperator ) return; uno::Reference< chart2::data::XDataSource > xSource( xDataProvider->createDataSource( aArguments ) ); - uno::Reference< chart2::XDiagram > xDia( xChartDoc->getFirstDiagram() ); + rtl::Reference< Diagram > xDia( xChartDoc->getFirstChartDiagram() ); if( xDia.is() ) xDia->setDiagramData( xSource, aArguments ); @@ -659,7 +674,7 @@ void ChartDataWrapper::applyData( lcl_Operator& rDataOperator ) eStackMode = StackMode::ZStacked; else if( bPercent ) eStackMode = StackMode::YStackedPercent; - DiagramHelper::setStackMode( xDia, eStackMode ); + xDia->setStackMode( eStackMode ); } // notify listeners @@ -688,6 +703,11 @@ css::uno::Sequence< OUString > SAL_CALL ChartDataWrapper::getSupportedServiceNam }; } +rtl::Reference<ChartModel> ChartDataWrapper::getChartModel() const +{ + return m_spChart2ModelContact->getDocumentModel(); +} + } // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx index dcf7c50ade36..9a44e53b8b12 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx @@ -18,9 +18,10 @@ */ #pragma once -#include <cppuhelper/basemutex.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer2.hxx> +#include <comphelper/interfacecontainer4.hxx> +#include <rtl/ref.hxx> + #include <com/sun/star/chart2/XAnyDescriptionAccess.hpp> #include <com/sun/star/chart/XDateCategories.hpp> #include <com/sun/star/lang/XComponent.hpp> @@ -29,13 +30,17 @@ #include <memory> -namespace chart::wrapper +namespace chart +{ +class ChartModel; + +namespace wrapper { class Chart2ModelContact; struct lcl_Operator; -class ChartDataWrapper final : public cppu::BaseMutex, public +class ChartDataWrapper final : public ::cppu::WeakImplHelper< css::chart2::XAnyDescriptionAccess, css::chart::XDateCategories, @@ -44,8 +49,8 @@ class ChartDataWrapper final : public cppu::BaseMutex, public css::lang::XComponent > { public: - explicit ChartDataWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); - ChartDataWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact + explicit ChartDataWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); + ChartDataWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact , const css::uno::Reference< css::chart::XChartData >& xNewData ); virtual ~ChartDataWrapper() override; @@ -54,6 +59,8 @@ public: virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + rtl::Reference<ChartModel> getChartModel() const; + private: // ____ XDateCategories ____ virtual css::uno::Sequence< double > SAL_CALL getDateCategories() override; @@ -107,12 +114,13 @@ private: void initDataAccess(); void applyData( lcl_Operator& rDataOperator ); + std::mutex m_aMutex; css::uno::Reference< css::chart2::XAnyDescriptionAccess > m_xDataAccess; - std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper2 m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; }; } // namespace chart::wrapper +} // namespace chart /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx index e75bd16e8e24..51c803a1db0c 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx @@ -19,11 +19,13 @@ #include <ChartDocumentWrapper.hxx> #include <ChartView.hxx> +#include <ChartViewHelper.hxx> #include <ChartTypeManager.hxx> #include <ChartTypeTemplate.hxx> #include <servicenames.hxx> #include <PropertyHelper.hxx> #include <TitleHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <ControllerLockGuard.hxx> #include <DisposeHelper.hxx> @@ -35,9 +37,7 @@ #include <ChartModel.hxx> -#include <DiagramHelper.hxx> #include <DataSourceHelper.hxx> -#include <ChartModelHelper.hxx> #include <AxisHelper.hxx> #include <ThreeDHelper.hxx> @@ -51,7 +51,7 @@ #include <cppuhelper/supportsservice.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> -#include <comphelper/servicehelper.hxx> +#include <utility> #include <vcl/settings.hxx> #include <com/sun/star/drawing/ShapeCollection.hpp> @@ -59,9 +59,8 @@ #include <com/sun/star/lang/DisposedException.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/util/XRefreshable.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> -#include <vector> #include <algorithm> #include <map> @@ -220,30 +219,20 @@ void lcl_AddPropertiesToVector( beans::PropertyAttribute::MAYBEDEFAULT ); } -struct StaticChartDocumentWrapperPropertyArray_Initializer +const Sequence< Property > & StaticChartDocumentWrapperPropertyArray() { - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static uno::Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); - return comphelper::containerToSequence( aProperties ); - } -}; + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); -struct StaticChartDocumentWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticChartDocumentWrapperPropertyArray_Initializer > -{ -}; + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; +} } // anonymous namespace @@ -256,7 +245,7 @@ namespace { class WrappedDataSourceLabelsInFirstRowProperty : public WrappedProperty { public: - explicit WrappedDataSourceLabelsInFirstRowProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedDataSourceLabelsInFirstRowProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -271,9 +260,9 @@ private: //member } -WrappedDataSourceLabelsInFirstRowProperty::WrappedDataSourceLabelsInFirstRowProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedDataSourceLabelsInFirstRowProperty::WrappedDataSourceLabelsInFirstRowProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("DataSourceLabelsInFirstRow",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedDataSourceLabelsInFirstRowProperty::getPropertyDefault( nullptr ); } @@ -346,7 +335,7 @@ namespace { class WrappedDataSourceLabelsInFirstColumnProperty : public WrappedProperty { public: - explicit WrappedDataSourceLabelsInFirstColumnProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedDataSourceLabelsInFirstColumnProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -361,9 +350,9 @@ private: //member } -WrappedDataSourceLabelsInFirstColumnProperty::WrappedDataSourceLabelsInFirstColumnProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedDataSourceLabelsInFirstColumnProperty::WrappedDataSourceLabelsInFirstColumnProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("DataSourceLabelsInFirstColumn",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedDataSourceLabelsInFirstColumnProperty::getPropertyDefault( nullptr ); } @@ -436,7 +425,7 @@ namespace { class WrappedHasLegendProperty : public WrappedProperty { public: - explicit WrappedHasLegendProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedHasLegendProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -450,9 +439,9 @@ private: //member } -WrappedHasLegendProperty::WrappedHasLegendProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedHasLegendProperty::WrappedHasLegendProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("HasLegend",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } @@ -464,15 +453,14 @@ void WrappedHasLegendProperty::setPropertyValue( const Any& rOuterValue, const R try { - Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel(), m_spChart2ModelContact->m_xContext,bNewValue )); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel(), m_spChart2ModelContact->m_xContext,bNewValue ); if(xLegend.is()) { - Reference< beans::XPropertySet > xLegendProp( xLegend, uno::UNO_QUERY_THROW ); bool bOldValue = true; - Any aAOld = xLegendProp->getPropertyValue("Show"); + Any aAOld = xLegend->getPropertyValue("Show"); aAOld >>= bOldValue; if( bOldValue != bNewValue ) - xLegendProp->setPropertyValue("Show", uno::Any( bNewValue )); + xLegend->setPropertyValue("Show", uno::Any( bNewValue )); } } catch (const uno::Exception&) @@ -486,10 +474,10 @@ Any WrappedHasLegendProperty::getPropertyValue( const Reference< beans::XPropert Any aRet; try { - Reference< beans::XPropertySet > xLegendProp( - LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel() ), uno::UNO_QUERY ); - if( xLegendProp.is()) - aRet = xLegendProp->getPropertyValue("Show"); + rtl::Reference< Legend > xLegend = + LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel() ); + if( xLegend.is()) + aRet = xLegend->getPropertyValue("Show"); else aRet <<= false; } @@ -513,7 +501,7 @@ namespace { class WrappedHasMainTitleProperty : public WrappedProperty { public: - explicit WrappedHasMainTitleProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedHasMainTitleProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -527,9 +515,9 @@ private: //member } -WrappedHasMainTitleProperty::WrappedHasMainTitleProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedHasMainTitleProperty::WrappedHasMainTitleProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("HasMainTitle",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } @@ -579,7 +567,7 @@ namespace { class WrappedHasSubTitleProperty : public WrappedProperty { public: - explicit WrappedHasSubTitleProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedHasSubTitleProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -593,9 +581,9 @@ private: //member } -WrappedHasSubTitleProperty::WrappedHasSubTitleProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedHasSubTitleProperty::WrappedHasSubTitleProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("HasSubTitle",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } @@ -653,6 +641,7 @@ ChartDocumentWrapper::~ChartDocumentWrapper() } // ____ XInterface (for new interfaces) ____ +// [-loplugin:unoaggregation] uno::Any SAL_CALL ChartDocumentWrapper::queryInterface( const uno::Type& aType ) { if( m_xDelegator.is()) @@ -864,8 +853,7 @@ Reference< uno::XInterface > SAL_CALL ChartDocumentWrapper::getCurrentSelection( void SAL_CALL ChartDocumentWrapper::dispose() { if( m_bIsDisposed ) - throw lang::DisposedException("ChartDocumentWrapper is disposed", - static_cast< ::cppu::OWeakObject* >( this )); + return; m_bIsDisposed = true; @@ -878,9 +866,9 @@ void SAL_CALL ChartDocumentWrapper::dispose() DisposeHelper::DisposeAndClear( m_xChartData ); DisposeHelper::DisposeAndClear( m_xDiagram ); DisposeHelper::DisposeAndClear( m_xArea ); - m_xChartView.set( nullptr ); - m_xShapeFactory.set( nullptr ); - m_xDelegator.set( nullptr ); + m_xChartView.clear(); + m_xShapeFactory.clear(); + m_xDelegator.clear(); clearWrappedPropertySet(); m_spChart2ModelContact->clear(); @@ -907,7 +895,7 @@ void SAL_CALL ChartDocumentWrapper::dispose() void ChartDocumentWrapper::impl_resetAddIn() { Reference< util::XRefreshable > xAddIn( m_xAddIn ); - m_xAddIn.set( nullptr ); + m_xAddIn.clear(); if( !xAddIn.is() ) return; @@ -1045,11 +1033,10 @@ rtl::Reference<SvxDrawPage> ChartDocumentWrapper::impl_getDrawPage() const namespace { -uno::Reference< lang::XMultiServiceFactory > getShapeFactory(const uno::Reference<uno::XInterface>& xChartView) +uno::Reference< lang::XMultiServiceFactory > getShapeFactory(const rtl::Reference<ChartView>& xChartView) { - auto pProvider = comphelper::getFromUnoTunnel<ExplicitValueProvider>(xChartView); - if( pProvider ) - return pProvider->getDrawModelWrapper()->getShapeFactory(); + if( xChartView ) + return xChartView->getDrawModelWrapper()->getShapeFactory(); return uno::Reference< lang::XMultiServiceFactory >(); } @@ -1189,17 +1176,17 @@ uno::Reference< uno::XInterface > SAL_CALL ChartDocumentWrapper::createInstance( { // locked controllers ControllerLockGuardUNO aCtrlLockGuard( xChartDoc ); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartDoc ); - ThreeDLookScheme e3DScheme = ThreeDHelper::detectScheme( xDiagram ); + rtl::Reference< Diagram > xDiagram = xChartDoc->getFirstChartDiagram(); + ThreeDLookScheme e3DScheme = xDiagram->detectScheme(); rtl::Reference< ::chart::ChartTypeManager > xTemplateManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateWithService( - DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager )); + Diagram::tTemplateWithServiceName aTemplateWithService( + xDiagram->getTemplate( xTemplateManager )); if( aTemplateWithService.xChartTypeTemplate.is()) - aTemplateWithService.xChartTypeTemplate->resetStyles( xDiagram );//#i109371# + aTemplateWithService.xChartTypeTemplate->resetStyles2( xDiagram );//#i109371# xTemplate->changeDiagram( xDiagram ); if( AllSettings::GetMathLayoutRTL() ) AxisHelper::setRTLAxisLayout( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 ) ); - ThreeDHelper::setScheme( xDiagram, e3DScheme ); + xDiagram->setScheme( e3DScheme ); } else { @@ -1257,7 +1244,7 @@ uno::Reference< uno::XInterface > SAL_CALL ChartDocumentWrapper::createInstance( { if( !m_xShapeFactory.is() && m_xChartView.is() ) { - m_xShapeFactory = getShapeFactory( static_cast<cppu::OWeakObject*>(m_xChartView.get()) ); + m_xShapeFactory = getShapeFactory( m_xChartView ); } else { @@ -1265,7 +1252,7 @@ uno::Reference< uno::XInterface > SAL_CALL ChartDocumentWrapper::createInstance( if(pModel) { m_xChartView = pModel->getChartView(); - m_xShapeFactory = getShapeFactory( static_cast<cppu::OWeakObject*>(m_xChartView.get()) ); + m_xShapeFactory = getShapeFactory( m_xChartView ); } } @@ -1360,21 +1347,35 @@ uno::Any SAL_CALL ChartDocumentWrapper::queryAggregation( const uno::Type& rType void ChartDocumentWrapper::_disposing( const lang::EventObject& rSource ) { if( rSource.Source == m_xTitle ) - m_xTitle.set( nullptr ); + m_xTitle.clear(); else if( rSource.Source == m_xSubTitle ) - m_xSubTitle.set( nullptr ); + m_xSubTitle.clear(); else if( rSource.Source == m_xLegend ) - m_xLegend.set( nullptr ); + m_xLegend.clear(); else if( rSource.Source == m_xChartData ) - m_xChartData.set( nullptr ); + m_xChartData.clear(); else if( rSource.Source == m_xDiagram ) - m_xDiagram.set( nullptr ); + m_xDiagram.clear(); else if( rSource.Source == m_xArea ) - m_xArea.set( nullptr ); + m_xArea.clear(); else if( rSource.Source == m_xAddIn ) - m_xAddIn.set( nullptr ); + m_xAddIn.clear(); else if( rSource.Source == static_cast<cppu::OWeakObject*>(m_xChartView.get()) ) - m_xChartView.set( nullptr ); + m_xChartView.clear(); +} + +// ____ XPropertySet ____ +void SAL_CALL ChartDocumentWrapper::setPropertyValue(const OUString& rPropertyName, const css::uno::Any& rValue) +{ + if (rPropertyName == u"ODFImport_UpdateView") + { + // A hack used at load time to notify the view that it needs an update + // See SchXMLImport::~SchXMLImport + if (auto xChartModel = rValue.query<css::chart2::XChartDocument>()) + ChartViewHelper::setViewToDirtyState_UNO(xChartModel); + return; + } + ChartDocumentWrapper_Base::setPropertyValue(rPropertyName, rValue); } // WrappedPropertySet @@ -1384,7 +1385,7 @@ Reference< beans::XPropertySet > ChartDocumentWrapper::getInnerPropertySet() } const Sequence< beans::Property >& ChartDocumentWrapper::getPropertySequence() { - return *StaticChartDocumentWrapperPropertyArray::get(); + return StaticChartDocumentWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > ChartDocumentWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx index e49239935c6d..ac9a53ce331f 100644 --- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx @@ -19,8 +19,11 @@ #include "DataSeriesPointWrapper.hxx" #include "Chart2ModelContact.hxx" +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <DiagramHelper.hxx> +#include <DataSeries.hxx> +#include <DataSeriesProperties.hxx> #include <LinePropertiesHelper.hxx> #include <FillProperties.hxx> #include <CharacterProperties.hxx> @@ -37,6 +40,7 @@ #include "WrappedTextRotationProperty.hxx" #include <unonames.hxx> +#include <o3tl/safeint.hxx> #include <rtl/math.hxx> #include <algorithm> @@ -45,6 +49,7 @@ #include <com/sun/star/chart/ChartAxisAssign.hpp> #include <com/sun/star/chart/ChartErrorCategory.hpp> #include <com/sun/star/chart/ChartSymbolType.hpp> +#include <com/sun/star/chart2/XDataSeries.hpp> #include <com/sun/star/drawing/LineJoint.hpp> #include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/drawing/FillStyle.hpp> @@ -55,6 +60,7 @@ using namespace ::com::sun::star; using namespace ::chart::wrapper; +using namespace ::chart::DataSeriesProperties; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; @@ -243,30 +249,16 @@ uno::Sequence< Property > lcl_GetPropertySequence( DataSeriesPointWrapper::eType return comphelper::containerToSequence( aProperties ); } -struct StaticSeriesWrapperPropertyArray_Initializer +const Sequence< Property >& StaticSeriesWrapperPropertyArray() { - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence( DataSeriesPointWrapper::DATA_SERIES ) ); - return &aPropSeq; - } -}; - -struct StaticSeriesWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticSeriesWrapperPropertyArray_Initializer > -{ -}; - -struct StaticPointWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence( DataSeriesPointWrapper::DATA_POINT ) ); - return &aPropSeq; - } + static Sequence< Property > aPropSeq( lcl_GetPropertySequence( DataSeriesPointWrapper::DATA_SERIES ) ); + return aPropSeq; }; -struct StaticPointWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticPointWrapperPropertyArray_Initializer > +const Sequence< Property >& StaticPointWrapperPropertyArray() { + static Sequence< Property > aPropSeq( lcl_GetPropertySequence( DataSeriesPointWrapper::DATA_POINT ) ); + return aPropSeq; }; //PROP_SERIES_ATTACHED_AXIS @@ -303,7 +295,7 @@ Any WrappedAttachedAxisProperty::getPropertyValue( const Reference< beans::XProp { Any aRet; - uno::Reference< chart2::XDataSeries > xDataSeries( xInnerPropertySet, uno::UNO_QUERY ); + rtl::Reference< ::chart::DataSeries > xDataSeries( dynamic_cast<::chart::DataSeries*>(xInnerPropertySet.get()) ); bool bAttachedToMainAxis = ::chart::DiagramHelper::isSeriesAttachedToMainAxis( xDataSeries ); if( bAttachedToMainAxis ) aRet <<= css::chart::ChartAxisAssign::PRIMARY_Y; @@ -314,7 +306,7 @@ Any WrappedAttachedAxisProperty::getPropertyValue( const Reference< beans::XProp void WrappedAttachedAxisProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const { - uno::Reference< chart2::XDataSeries > xDataSeries( xInnerPropertySet, uno::UNO_QUERY ); + rtl::Reference< ::chart::DataSeries > xDataSeries( dynamic_cast<::chart::DataSeries*>(xInnerPropertySet.get()) ); sal_Int32 nChartAxisAssign = css::chart::ChartAxisAssign::PRIMARY_Y; if( ! (rOuterValue >>= nChartAxisAssign) ) @@ -327,7 +319,7 @@ void WrappedAttachedAxisProperty::setPropertyValue( const Any& rOuterValue, cons { rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); if( xDiagram.is() ) - ::chart::DiagramHelper::attachSeriesToAxis( bNewAttachedToMainAxis, xDataSeries, xDiagram, m_spChart2ModelContact->m_xContext, false ); + xDiagram->attachSeriesToAxis( bNewAttachedToMainAxis, xDataSeries, m_spChart2ModelContact->m_xContext, false ); } } @@ -454,9 +446,8 @@ void WrappedLineStyleProperty::setPropertyToDefault( const Reference< beans::XPr namespace chart::wrapper { -DataSeriesPointWrapper::DataSeriesPointWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact( spChart2ModelContact ) - , m_aEventListenerContainer( m_aMutex ) +DataSeriesPointWrapper::DataSeriesPointWrapper( std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact( std::move(spChart2ModelContact) ) , m_eType( DATA_SERIES ) , m_nSeriesIndexInNewAPI( -1 ) , m_nPointIndex( -1 ) @@ -473,7 +464,11 @@ void SAL_CALL DataSeriesPointWrapper::initialize( const uno::Sequence< uno::Any m_nPointIndex = -1; if( aArguments.hasElements() ) { - aArguments[0] >>= m_xDataSeries; + uno::Reference<chart2::XDataSeries> xTmp; + aArguments[0] >>= xTmp; + auto p = dynamic_cast<DataSeries*>(xTmp.get()); + assert(p); + m_xDataSeries = p; if( aArguments.getLength() >= 2 ) aArguments[1] >>= m_nPointIndex; } @@ -493,9 +488,8 @@ void SAL_CALL DataSeriesPointWrapper::initialize( const uno::Sequence< uno::Any DataSeriesPointWrapper::DataSeriesPointWrapper(eType _eType, sal_Int32 nSeriesIndexInNewAPI , sal_Int32 nPointIndex, //ignored for series - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact( spChart2ModelContact ) - , m_aEventListenerContainer( m_aMutex ) + std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact( std::move(spChart2ModelContact) ) , m_eType( _eType ) , m_nSeriesIndexInNewAPI( nSeriesIndexInNewAPI ) , m_nPointIndex( (_eType == DATA_POINT) ? nPointIndex : -1 ) @@ -510,8 +504,9 @@ DataSeriesPointWrapper::~DataSeriesPointWrapper() // ____ XComponent ____ void SAL_CALL DataSeriesPointWrapper::dispose() { + std::unique_lock g(m_aMutex); uno::Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); m_xDataSeries.clear(); clearWrappedPropertySet(); @@ -520,13 +515,15 @@ void SAL_CALL DataSeriesPointWrapper::dispose() void SAL_CALL DataSeriesPointWrapper::addEventListener( const uno::Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL DataSeriesPointWrapper::removeEventListener( const uno::Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } // ____ XEventListener ____ @@ -536,24 +533,24 @@ void SAL_CALL DataSeriesPointWrapper::disposing( const lang::EventObject& /*Sour bool DataSeriesPointWrapper::isSupportingAreaProperties() { - Reference< chart2::XDataSeries > xSeries( getDataSeries() ); + rtl::Reference< DataSeries > xSeries( getDataSeries() ); rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) ); - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + rtl::Reference< ::chart::ChartType > xChartType( xDiagram->getChartTypeOfSeries( xSeries ) ); + sal_Int32 nDimensionCount = xDiagram->getDimension(); return ChartTypeHelper::isSupportingAreaProperties( xChartType, nDimensionCount ); } -Reference< chart2::XDataSeries > DataSeriesPointWrapper::getDataSeries() +rtl::Reference< DataSeries > DataSeriesPointWrapper::getDataSeries() { - Reference< chart2::XDataSeries > xSeries( m_xDataSeries ); + rtl::Reference< DataSeries > xSeries = m_xDataSeries; if( !xSeries.is() ) { rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( - ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesList = + xDiagram->getDataSeries(); - if( m_nSeriesIndexInNewAPI >= 0 && m_nSeriesIndexInNewAPI < static_cast<sal_Int32>(aSeriesList.size()) ) + if( m_nSeriesIndexInNewAPI >= 0 && o3tl::make_unsigned(m_nSeriesIndexInNewAPI) < aSeriesList.size() ) xSeries = aSeriesList[m_nSeriesIndexInNewAPI]; } @@ -564,7 +561,7 @@ Reference< beans::XPropertySet > DataSeriesPointWrapper::getDataPointProperties( { Reference< beans::XPropertySet > xPointProp; - Reference< chart2::XDataSeries > xSeries( getDataSeries() ); + rtl::Reference< DataSeries > xSeries( getDataSeries() ); // may throw an IllegalArgumentException if( xSeries.is() ) @@ -622,9 +619,10 @@ beans::PropertyState SAL_CALL DataSeriesPointWrapper::getPropertyState( const OU { if( rPropertyName == "FillColor") { - Reference< beans::XPropertySet > xSeriesProp( getDataSeries(), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries = getDataSeries(); bool bVaryColorsByPoint = false; - if( xSeriesProp.is() && (xSeriesProp->getPropertyValue("VaryColorsByPoint") >>= bVaryColorsByPoint) + // "VaryColorsByPoint" + if( xSeries.is() && (xSeries->getFastPropertyValue(PROP_DATASERIES_VARY_COLORS_BY_POINT) >>= bVaryColorsByPoint) && bVaryColorsByPoint ) return beans::PropertyState_DIRECT_VALUE; } @@ -683,7 +681,7 @@ Any SAL_CALL DataSeriesPointWrapper::getPropertyDefault( const OUString& rProper if( nHandle > 0 ) { //always take the series current value as default for points - Reference< beans::XPropertySet > xInnerPropertySet( getDataSeries(), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xInnerPropertySet = getDataSeries(); if( xInnerPropertySet.is() ) { const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName ); @@ -704,16 +702,16 @@ Any SAL_CALL DataSeriesPointWrapper::getPropertyDefault( const OUString& rProper Reference< beans::XPropertySet > DataSeriesPointWrapper::getInnerPropertySet() { if( m_eType == DATA_SERIES ) - return Reference< beans::XPropertySet >( getDataSeries(), uno::UNO_QUERY ); + return getDataSeries(); return getDataPointProperties(); } const Sequence< beans::Property >& DataSeriesPointWrapper::getPropertySequence() { if( m_eType == DATA_SERIES ) - return *StaticSeriesWrapperPropertyArray::get(); + return StaticSeriesWrapperPropertyArray(); else - return *StaticPointWrapperPropertyArray::get(); + return StaticPointWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > DataSeriesPointWrapper::createWrappedProperties() @@ -841,9 +839,10 @@ Any SAL_CALL DataSeriesPointWrapper::getPropertyValue( const OUString& rProperty { if( rPropertyName == "FillColor" ) { - Reference< beans::XPropertySet > xSeriesProp( getDataSeries(), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries = getDataSeries(); bool bVaryColorsByPoint = false; - if( xSeriesProp.is() && (xSeriesProp->getPropertyValue("VaryColorsByPoint") >>= bVaryColorsByPoint) + // "VaryColorsByPoint" + if( xSeries.is() && (xSeries->getFastPropertyValue(PROP_DATASERIES_VARY_COLORS_BY_POINT) >>= bVaryColorsByPoint) && bVaryColorsByPoint ) { uno::Reference< beans::XPropertyState > xPointState( DataSeriesPointWrapper::getDataPointProperties(), uno::UNO_QUERY ); diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.hxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.hxx index f5fbab3f332b..4c79bb25e9bb 100644 --- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.hxx @@ -21,15 +21,16 @@ #include <WrappedPropertySet.hxx> #include "ReferenceSizePropertyProvider.hxx" #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XEventListener.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> - +#include <rtl/ref.hxx> #include <memory> namespace com::sun::star::chart2 { class XDataSeries; } +namespace chart { class DataSeries; } namespace chart::wrapper { @@ -54,12 +55,12 @@ public: }; //this constructor needs an initialize call afterwards - explicit DataSeriesPointWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit DataSeriesPointWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); DataSeriesPointWrapper(eType eType , sal_Int32 nSeriesIndexInNewAPI , sal_Int32 nPointIndex //ignored for series - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~DataSeriesPointWrapper() override; @@ -100,11 +101,11 @@ private: virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) override; //own methods - css::uno::Reference< css::chart2::XDataSeries > getDataSeries(); + rtl::Reference< ::chart::DataSeries > getDataSeries(); css::uno::Reference< css::beans::XPropertySet > getDataPointProperties(); std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; eType m_eType; sal_Int32 m_nSeriesIndexInNewAPI; @@ -115,7 +116,7 @@ private: //this should only be used, if the DataSeriesPointWrapper is initialized via the XInitialize interface //because a big change in the chartmodel may lead to a dataseriespointer that is not connected to the model anymore //with the indices instead we can always get the new dataseries - css::uno::Reference< css::chart2::XDataSeries > m_xDataSeries; + rtl::Reference< ::chart::DataSeries > m_xDataSeries; }; } // namespace chart::wrapper diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx index d9deba9857d4..2917b989f040 100644 --- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx @@ -20,14 +20,18 @@ #include "DiagramWrapper.hxx" #include <servicenames_charttypes.hxx> #include "DataSeriesPointWrapper.hxx" +#include <DataSeriesProperties.hxx> #include "AxisWrapper.hxx" #include "Chart2ModelContact.hxx" #include "WallFloorWrapper.hxx" #include "MinMaxLineWrapper.hxx" #include "UpDownBarWrapper.hxx" +#include <Diagram.hxx> #include <DiagramHelper.hxx> #include <DataSourceHelper.hxx> #include <ChartModelHelper.hxx> +#include <ChartType.hxx> +#include <DataSeries.hxx> #include <WrappedIgnoreProperty.hxx> #include "WrappedAxisAndGridExistenceProperties.hxx" #include "WrappedStatisticProperties.hxx" @@ -50,10 +54,9 @@ #include <com/sun/star/chart/ChartDataRowSource.hpp> #include <com/sun/star/chart2/RelativeSize.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> +#include <com/sun/star/chart2/PieChartSubType.hpp> #include <com/sun/star/chart/ChartSolidType.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <LinePropertiesHelper.hxx> #include <FillProperties.hxx> @@ -64,17 +67,19 @@ #include <map> #include <com/sun/star/lang/XServiceName.hpp> #include <com/sun/star/util/XRefreshable.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <o3tl/string_view.hxx> +#include <utility> using namespace ::com::sun::star; using namespace ::chart::wrapper; +using namespace ::chart::DataSeriesProperties; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Sequence; using ::com::sun::star::beans::Property; using ::com::sun::star::chart::XAxis; -using ::osl::MutexGuard; namespace { @@ -98,6 +103,7 @@ enum PROP_DIAGRAM_SORT_BY_X_VALUES, PROP_DIAGRAM_STARTING_ANGLE, + PROP_DIAGRAM_OF_PIE_TYPE, PROP_DIAGRAM_RIGHT_ANGLED_AXES, PROP_DIAGRAM_PERSPECTIVE, @@ -134,9 +140,6 @@ enum PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, PROP_DIAGRAM_AUTOMATIC_SIZE, - PROP_DIAGRAM_DATATABLEHBORDER, - PROP_DIAGRAM_DATATABLEVBORDER, - PROP_DIAGRAM_DATATABLEOUTLINE, PROP_DIAGRAM_EXTERNALDATA }; @@ -227,6 +230,11 @@ void lcl_AddPropertiesToVector( cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "SubPieType", + PROP_DIAGRAM_OF_PIE_TYPE, + cppu::UnoType<chart2::PieChartSubType>::get(), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::MAYBEDEFAULT ); //new for 3D charts rOutProperties.emplace_back( "RightAngledAxes", @@ -378,21 +386,7 @@ void lcl_AddPropertiesToVector( cppu::UnoType<bool>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableHBorder", - PROP_DIAGRAM_DATATABLEHBORDER, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableVBorder", - PROP_DIAGRAM_DATATABLEVBORDER, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableOutline", - PROP_DIAGRAM_DATATABLEOUTLINE, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "ExternalData", PROP_DIAGRAM_EXTERNALDATA, cppu::UnoType<OUString>::get(), @@ -400,45 +394,35 @@ void lcl_AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID ); } -struct StaticDiagramWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static uno::Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - ::chart::SceneProperties::AddPropertiesToVector( aProperties ); - WrappedStatisticProperties::addProperties( aProperties ); - WrappedSymbolProperties::addProperties( aProperties ); - WrappedDataCaptionProperties::addProperties( aProperties ); - WrappedSplineProperties::addProperties( aProperties ); - WrappedStockProperties::addProperties( aProperties ); - WrappedAutomaticPositionProperties::addProperties( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticDiagramWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticDiagramWrapperPropertyArray_Initializer > +const Sequence< Property >& StaticDiagramWrapperPropertyArray() { + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + ::chart::SceneProperties::AddPropertiesToVector( aProperties ); + WrappedStatisticProperties::addProperties( aProperties ); + WrappedSymbolProperties::addProperties( aProperties ); + WrappedDataCaptionProperties::addProperties( aProperties ); + WrappedSplineProperties::addProperties( aProperties ); + WrappedStockProperties::addProperties( aProperties ); + WrappedAutomaticPositionProperties::addProperties( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; -bool lcl_isXYChart( const Reference< chart2::XDiagram >& rDiagram ) +bool lcl_isXYChart( const rtl::Reference< ::chart::Diagram >& xDiagram ) { bool bRet = false; - Reference< chart2::XChartType > xChartType( ::chart::DiagramHelper::getChartTypeByIndex( rDiagram, 0 ) ); + rtl::Reference< ::chart::ChartType > xChartType( xDiagram->getChartTypeByIndex( 0 ) ); if( xChartType.is() ) { OUString aChartType( xChartType->getChartType() ); @@ -450,7 +434,7 @@ bool lcl_isXYChart( const Reference< chart2::XDiagram >& rDiagram ) sal_Int32 lcl_getNewAPIIndexForOldAPIIndex( sal_Int32 nOldAPIIndex - , const Reference< chart2::XDiagram >& xDiagram ) + , const rtl::Reference< ::chart::Diagram >& xDiagram ) { sal_Int32 nNewAPIIndex = nOldAPIIndex; @@ -460,29 +444,38 @@ sal_Int32 lcl_getNewAPIIndexForOldAPIIndex( nNewAPIIndex -= 1; } - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( - ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< ::chart::DataSeries > > aSeriesList = + xDiagram->getDataSeries(); if( nNewAPIIndex >= static_cast<sal_Int32>(aSeriesList.size()) ) nNewAPIIndex = -1; return nNewAPIIndex; } -OUString lcl_getDiagramType( const OUString & rTemplateServiceName ) +OUString lcl_getDiagramType( std::u16string_view rTemplateServiceName ) { - static const OUStringLiteral aPrefix(u"com.sun.star.chart2.template."); + static constexpr OUString aPrefix(u"com.sun.star.chart2.template."_ustr); - if( rTemplateServiceName.match( aPrefix )) + if( o3tl::starts_with(rTemplateServiceName, aPrefix) ) { - const OUString aName( rTemplateServiceName.copy( aPrefix.getLength())); + const std::u16string_view aName( rTemplateServiceName.substr( aPrefix.getLength())); // "Area" "StackedArea" "PercentStackedArea" "ThreeDArea" // "StackedThreeDArea" "PercentStackedThreeDArea" - if( aName.indexOf( "Area" ) != -1 ) + if( aName.find( u"Area" ) != std::u16string_view::npos ) return "com.sun.star.chart.AreaDiagram"; + // Handle bar-of-pie and pie-of-pie before simple pie + // "BarOfPie" + if( aName.find( u"BarOfPie" ) != std::u16string_view::npos ) + return "com.sun.star.chart.BarOfPieDiagram"; + + // "PieOfPie" + if( aName.find( u"PieOfPie" ) != std::u16string_view::npos ) + return "com.sun.star.chart.PieOfPieDiagram"; + // "Pie" "PieAllExploded" "ThreeDPie" "ThreeDPieAllExploded" - if( aName.indexOf( "Pie" ) != -1 ) + if( aName.find( u"Pie" ) != std::u16string_view::npos ) return "com.sun.star.chart.PieDiagram"; // "Column" "StackedColumn" "PercentStackedColumn" "ThreeDColumnDeep" @@ -491,33 +484,33 @@ OUString lcl_getDiagramType( const OUString & rTemplateServiceName ) // "PercentStackedBar" "ThreeDBarDeep" "ThreeDBarFlat" // "StackedThreeDBarFlat" "PercentStackedThreeDBarFlat" "ColumnWithLine" // "StackedColumnWithLine" - if( aName.indexOf( "Column" ) != -1 || aName.indexOf( "Bar" ) != -1 ) + if( aName.find( u"Column" ) != std::u16string_view::npos || aName.find( u"Bar" ) != std::u16string_view::npos ) return "com.sun.star.chart.BarDiagram"; // "Donut" "DonutAllExploded" "ThreeDDonut" "ThreeDDonutAllExploded" - if( aName.indexOf( "Donut" ) != -1 ) + if( aName.find( u"Donut" ) != std::u16string_view::npos ) return "com.sun.star.chart.DonutDiagram"; // "ScatterLineSymbol" "ScatterLine" "ScatterSymbol" "ThreeDScatter" - if( aName.indexOf( "Scatter" ) != -1 ) + if( aName.find( u"Scatter" ) != std::u16string_view::npos ) return "com.sun.star.chart.XYDiagram"; // "FilledNet" "StackedFilledNet" "PercentStackedFilledNet" - if( aName.indexOf( "FilledNet" ) != -1 ) + if( aName.find( u"FilledNet" ) != std::u16string_view::npos ) return "com.sun.star.chart.FilledNetDiagram"; // "Net" "NetSymbol" "NetLine" "StackedNet" "StackedNetSymbol" // "StackedNetLine" "PercentStackedNet" "PercentStackedNetSymbol" // "PercentStackedNetLine" - if( aName.indexOf( "Net" ) != -1 ) + if( aName.find( u"Net" ) != std::u16string_view::npos ) return "com.sun.star.chart.NetDiagram"; // "StockLowHighClose" "StockOpenLowHighClose" "StockVolumeLowHighClose" // "StockVolumeOpenLowHighClose" - if( aName.indexOf( "Stock" ) != -1 ) + if( aName.find( u"Stock" ) != std::u16string_view::npos ) return "com.sun.star.chart.StockDiagram"; - if( aName.indexOf( "Bubble" ) != -1 ) + if( aName.find( u"Bubble" ) != std::u16string_view::npos ) return "com.sun.star.chart.BubbleDiagram"; // Note: this must be checked after Bar, Net and Scatter @@ -526,7 +519,7 @@ OUString lcl_getDiagramType( const OUString & rTemplateServiceName ) // "PercentStackedLine" "LineSymbol" "StackedLineSymbol" // "PercentStackedLineSymbol" "ThreeDLine" "StackedThreeDLine" // "PercentStackedThreeDLine" "ThreeDLineDeep" - if( aName.indexOf( "Line" ) != -1 || aName.indexOf( "Symbol" ) != -1 ) + if( aName.find( u"Line" ) != std::u16string_view::npos || aName.find( u"Symbol" ) != std::u16string_view::npos ) return "com.sun.star.chart.LineDiagram"; OSL_FAIL( "unknown template" ); @@ -572,9 +565,8 @@ OUString lcl_getOldChartTypeName( const OUString & rNewChartTypeName ) namespace chart::wrapper { -DiagramWrapper::DiagramWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact(spChart2ModelContact) - , m_aEventListenerContainer(m_aMutex) +DiagramWrapper::DiagramWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move(spChart2ModelContact)) { } @@ -603,26 +595,29 @@ OUString SAL_CALL DiagramWrapper::getDiagramType() } rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); aRet = lcl_getDiagramType( aTemplateAndService.sServiceName ); } - if( aRet.isEmpty()) + if( !aRet.isEmpty()) + return aRet; + + // none of the standard templates matched + // use first chart type + if (xDiagram) { - // none of the standard templates matched - // use first chart type - Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeByIndex( 0 ) ); if( xChartType.is() ) { aRet = xChartType->getChartType(); if( !aRet.isEmpty() ) aRet = lcl_getOldChartTypeName( aRet ); } - if( aRet.isEmpty()) - aRet = "com.sun.star.chart.BarDiagram"; } + if( aRet.isEmpty()) + aRet = "com.sun.star.chart.BarDiagram"; return aRet; } @@ -1066,9 +1061,8 @@ void SAL_CALL DiagramWrapper::setDefaultIllumination() // ____ XComponent ____ void SAL_CALL DiagramWrapper::dispose() { - m_aEventListenerContainer.disposeAndClear( lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); - - MutexGuard aGuard( m_aMutex); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); DisposeHelper::DisposeAndClear( m_xXAxis ); DisposeHelper::DisposeAndClear( m_xYAxis ); @@ -1087,13 +1081,15 @@ void SAL_CALL DiagramWrapper::dispose() void SAL_CALL DiagramWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL DiagramWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } namespace { @@ -1102,7 +1098,7 @@ namespace { class WrappedDataRowSourceProperty : public WrappedProperty { public: - explicit WrappedDataRowSourceProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedDataRowSourceProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1117,9 +1113,9 @@ private: //member } -WrappedDataRowSourceProperty::WrappedDataRowSourceProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedDataRowSourceProperty::WrappedDataRowSourceProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("DataRowSource",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedDataRowSourceProperty::getPropertyDefault( nullptr ); } @@ -1195,7 +1191,7 @@ namespace { class WrappedStackingProperty : public WrappedProperty { public: - WrappedStackingProperty(StackMode eStackMode, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + WrappedStackingProperty(StackMode eStackMode, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1214,9 +1210,9 @@ std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; } -WrappedStackingProperty::WrappedStackingProperty(StackMode eStackMode, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedStackingProperty::WrappedStackingProperty(StackMode eStackMode, std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty(OUString(),OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_eStackMode( eStackMode ) { switch( m_eStackMode ) @@ -1240,8 +1236,8 @@ bool WrappedStackingProperty::detectInnerValue( StackMode& eStackMode ) const { bool bHasDetectableInnerValue = false; bool bIsAmbiguous = false; - eStackMode = DiagramHelper::getStackMode( m_spChart2ModelContact->getDiagram() - , bHasDetectableInnerValue, bIsAmbiguous ); + rtl::Reference<Diagram> xDiagram = m_spChart2ModelContact->getDiagram(); + eStackMode = xDiagram ? xDiagram->getStackMode( bHasDetectableInnerValue, bIsAmbiguous ) : StackMode::NONE; return bHasDetectableInnerValue; } @@ -1269,7 +1265,7 @@ void WrappedStackingProperty::setPropertyValue( const Any& rOuterValue, const Re if( xDiagram.is() ) { StackMode eNewStackMode = bNewValue ? m_eStackMode : StackMode::NONE; - DiagramHelper::setStackMode( xDiagram, eNewStackMode ); + xDiagram->setStackMode( eNewStackMode ); } } @@ -1297,7 +1293,7 @@ namespace { class WrappedDim3DProperty : public WrappedProperty { public: - explicit WrappedDim3DProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedDim3DProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1312,9 +1308,9 @@ private: //member } -WrappedDim3DProperty::WrappedDim3DProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedDim3DProperty::WrappedDim3DProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("Dim3D",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedDim3DProperty::getPropertyDefault( nullptr ); } @@ -1331,9 +1327,9 @@ void WrappedDim3DProperty::setPropertyValue( const Any& rOuterValue, const Refer if( !xDiagram.is() ) return; - bool bOld3D = DiagramHelper::getDimension( xDiagram ) == 3; + bool bOld3D = xDiagram->getDimension() == 3; if( bOld3D != bNew3D ) - DiagramHelper::setDimension( xDiagram, bNew3D ? 3 : 2 ); + xDiagram->setDimension( bNew3D ? 3 : 2 ); } Any WrappedDim3DProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const @@ -1341,7 +1337,7 @@ Any WrappedDim3DProperty::getPropertyValue( const Reference< beans::XPropertySet rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); if( xDiagram.is() ) { - bool b3D = DiagramHelper::getDimension( xDiagram ) == 3; + bool b3D = xDiagram->getDimension() == 3; m_aOuterValue <<= b3D; } return m_aOuterValue; @@ -1360,7 +1356,7 @@ namespace { class WrappedVerticalProperty : public WrappedProperty { public: - explicit WrappedVerticalProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedVerticalProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1375,9 +1371,9 @@ private: //member } -WrappedVerticalProperty::WrappedVerticalProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedVerticalProperty::WrappedVerticalProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("Vertical",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedVerticalProperty::getPropertyDefault( nullptr ); } @@ -1396,9 +1392,9 @@ void WrappedVerticalProperty::setPropertyValue( const Any& rOuterValue, const Re bool bFound = false; bool bAmbiguous = false; - bool bOldVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); + bool bOldVertical = xDiagram->getVertical( bFound, bAmbiguous ); if( bFound && ( bOldVertical != bNewVertical || bAmbiguous ) ) - DiagramHelper::setVertical( xDiagram, bNewVertical ); + xDiagram->setVertical( bNewVertical ); } Any WrappedVerticalProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const @@ -1408,7 +1404,7 @@ Any WrappedVerticalProperty::getPropertyValue( const Reference< beans::XProperty { bool bFound = false; bool bAmbiguous = false; - bool bVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); + bool bVertical = xDiagram->getVertical( bFound, bAmbiguous ); if( bFound ) m_aOuterValue <<= bVertical; } @@ -1428,7 +1424,7 @@ namespace { class WrappedNumberOfLinesProperty : public WrappedProperty { public: - explicit WrappedNumberOfLinesProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedNumberOfLinesProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1446,9 +1442,9 @@ private: //member } -WrappedNumberOfLinesProperty::WrappedNumberOfLinesProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedNumberOfLinesProperty::WrappedNumberOfLinesProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("NumberOfLines",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_aOuterValue( getPropertyDefault(nullptr) ) { } @@ -1461,13 +1457,13 @@ bool WrappedNumberOfLinesProperty::detectInnerValue( uno::Any& rInnerValue ) con rtl::Reference< ChartModel > xChartDoc( m_spChart2ModelContact->getDocumentModel() ); if( xDiagram.is() && xChartDoc.is() ) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesVector( - DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); if( !aSeriesVector.empty() ) { rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); if( aTemplateAndService.sServiceName == "com.sun.star.chart2.template.ColumnWithLine" ) { try @@ -1498,13 +1494,15 @@ void WrappedNumberOfLinesProperty::setPropertyValue( const Any& rOuterValue, con rtl::Reference< ChartModel > xChartDoc( m_spChart2ModelContact->getDocumentModel() ); rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - sal_Int32 nDimension = ::chart::DiagramHelper::getDimension( xDiagram ); - if( !(xChartDoc.is() && xDiagram.is() && nDimension == 2) ) + if( !xChartDoc || !xDiagram ) + return; + sal_Int32 nDimension = xDiagram->getDimension(); + if( nDimension != 2 ) return; rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); rtl::Reference< ChartTypeTemplate > xTemplate; if( aTemplateAndService.sServiceName == "com.sun.star.chart2.template.ColumnWithLine" ) @@ -1575,7 +1573,7 @@ namespace { class WrappedAttributedDataPointsProperty : public WrappedProperty { public: - explicit WrappedAttributedDataPointsProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedAttributedDataPointsProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1590,9 +1588,9 @@ private: //member } -WrappedAttributedDataPointsProperty::WrappedAttributedDataPointsProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedAttributedDataPointsProperty::WrappedAttributedDataPointsProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("AttributedDataPoints",OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedAttributedDataPointsProperty::getPropertyDefault( nullptr ); } @@ -1610,25 +1608,21 @@ void WrappedAttributedDataPointsProperty::setPropertyValue( const Any& rOuterVal if( !xDiagram ) return; - std::vector< Reference< chart2::XDataSeries > > aSeriesVector( - ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); sal_Int32 i = 0; for (auto const& series : aSeriesVector) { - Reference< beans::XPropertySet > xProp(series, uno::UNO_QUERY); - if( xProp.is()) + uno::Any aVal; + if( i < aNewValue.getLength() ) + aVal <<= aNewValue[i]; + else { - uno::Any aVal; - if( i < aNewValue.getLength() ) - aVal <<= aNewValue[i]; - else - { - //set empty sequence - uno::Sequence< sal_Int32 > aSeq; - aVal <<= aSeq; - } - xProp->setPropertyValue( "AttributedDataPoints", aVal ); + //set empty sequence + uno::Sequence< sal_Int32 > aSeq; + aVal <<= aSeq; } + series->setFastPropertyValue( PROP_DATASERIES_ATTRIBUTED_DATA_POINTS, aVal ); // "AttributedDataPoints" ++i; } } @@ -1639,23 +1633,19 @@ Any WrappedAttributedDataPointsProperty::getPropertyValue( const Reference< bean if( xDiagram ) { - std::vector< Reference< chart2::XDataSeries > > aSeriesVector( - ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); uno::Sequence< uno::Sequence< sal_Int32 > > aResult( aSeriesVector.size() ); auto aResultRange = asNonConstRange(aResult); sal_Int32 i = 0; for (auto const& series : aSeriesVector) { - Reference< beans::XPropertySet > xProp(series, uno::UNO_QUERY); - if( xProp.is()) - { - uno::Any aVal( - xProp->getPropertyValue("AttributedDataPoints")); - uno::Sequence< sal_Int32 > aSeq; - if( aVal >>= aSeq ) - aResultRange[ i ] = aSeq; - } + uno::Any aVal( + series->getFastPropertyValue(PROP_DATASERIES_ATTRIBUTED_DATA_POINTS)); // "AttributedDataPoints" + uno::Sequence< sal_Int32 > aSeq; + if( aVal >>= aSeq ) + aResultRange[ i ] = aSeq; ++i; } m_aOuterValue <<= aResult; @@ -1677,7 +1667,7 @@ namespace { class WrappedSolidTypeProperty : public WrappedProperty { public: - explicit WrappedSolidTypeProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedSolidTypeProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -1692,9 +1682,9 @@ private: //member } -WrappedSolidTypeProperty::WrappedSolidTypeProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedSolidTypeProperty::WrappedSolidTypeProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty( "SolidType", OUString() ) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { m_aOuterValue = WrappedSolidTypeProperty::getPropertyDefault( nullptr ); } @@ -1713,9 +1703,9 @@ void WrappedSolidTypeProperty::setPropertyValue( const Any& rOuterValue, const R bool bFound = false; bool bAmbiguous = false; - sal_Int32 nOldSolidType = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); + sal_Int32 nOldSolidType = xDiagram->getGeometry3D( bFound, bAmbiguous ); if( bFound && ( nOldSolidType != nNewSolidType || bAmbiguous ) ) - DiagramHelper::setGeometry3D( xDiagram, nNewSolidType ); + xDiagram->setGeometry3D( nNewSolidType ); } Any WrappedSolidTypeProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const @@ -1725,7 +1715,7 @@ Any WrappedSolidTypeProperty::getPropertyValue( const Reference< beans::XPropert { bool bFound = false; bool bAmbiguous = false; - sal_Int32 nGeometry = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); + sal_Int32 nGeometry = xDiagram->getGeometry3D( bFound, bAmbiguous ); if( bFound ) m_aOuterValue <<= nGeometry; } @@ -1807,7 +1797,7 @@ namespace { class WrappedIncludeHiddenCellsProperty : public WrappedProperty { public: - explicit WrappedIncludeHiddenCellsProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedIncludeHiddenCellsProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; virtual Any getPropertyValue(const Reference<beans::XPropertySet>& xInnerPropertySet) const override; @@ -1818,9 +1808,9 @@ private: //member } -WrappedIncludeHiddenCellsProperty::WrappedIncludeHiddenCellsProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedIncludeHiddenCellsProperty::WrappedIncludeHiddenCellsProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty("IncludeHiddenCells","IncludeHiddenCells") - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } @@ -1859,7 +1849,7 @@ Reference< beans::XPropertySet > DiagramWrapper::getInnerPropertySet() const Sequence< beans::Property >& DiagramWrapper::getPropertySequence() { - return *StaticDiagramWrapperPropertyArray::get(); + return StaticDiagramWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > DiagramWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.hxx b/chart2/source/controller/chartapiwrapper/DiagramWrapper.hxx index bef53a739386..3a3a8383de05 100644 --- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.hxx @@ -20,7 +20,7 @@ #include <WrappedPropertySet.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/chart/XDiagramPositioning.hpp> #include <com/sun/star/chart2/XDiagramProvider.hpp> #include <com/sun/star/chart/XDiagram.hpp> @@ -63,7 +63,7 @@ class DiagramWrapper : public cppu::ImplInheritanceHelper< > { public: - explicit DiagramWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit DiagramWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~DiagramWrapper() override; /// XServiceInfo declarations @@ -186,7 +186,7 @@ protected: private: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; css::uno::Reference< css::chart::XAxis > m_xXAxis; diff --git a/chart2/source/controller/chartapiwrapper/GridWrapper.cxx b/chart2/source/controller/chartapiwrapper/GridWrapper.cxx index 0cf33baa5848..5f75aa686a69 100644 --- a/chart2/source/controller/chartapiwrapper/GridWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/GridWrapper.cxx @@ -30,51 +30,20 @@ #include <comphelper/sequence.hxx> #include <cppuhelper/supportsservice.hxx> #include <algorithm> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; using ::com::sun::star::beans::Property; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; -namespace -{ - -struct StaticGridWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticGridWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticGridWrapperPropertyArray_Initializer > -{ -}; - -} // anonymous namespace - namespace chart::wrapper { -GridWrapper::GridWrapper(tGridType eType, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact(spChart2ModelContact) - , m_aEventListenerContainer(m_aMutex) +GridWrapper::GridWrapper(tGridType eType, std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move(spChart2ModelContact)) , m_eType(eType) { } @@ -107,8 +76,9 @@ void GridWrapper::getDimensionAndSubGridBool( tGridType eType, sal_Int32& rnDime // ____ XComponent ____ void SAL_CALL GridWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); clearWrappedPropertySet(); } @@ -116,13 +86,15 @@ void SAL_CALL GridWrapper::dispose() void SAL_CALL GridWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL GridWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } // WrappedPropertySet @@ -133,14 +105,14 @@ Reference< beans::XPropertySet > GridWrapper::getInnerPropertySet() try { rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - uno::Reference< XCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 /*nCooSysIndex*/ ) ); + rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 /*nCooSysIndex*/ ) ); sal_Int32 nDimensionIndex = 1; bool bSubGrid = false; getDimensionAndSubGridBool( m_eType, nDimensionIndex, bSubGrid ); sal_Int32 nSubGridIndex = bSubGrid ? 0 : -1; - xRet.set( AxisHelper::getGridProperties( xCooSys , nDimensionIndex, MAIN_AXIS_INDEX, nSubGridIndex ) ); + xRet = AxisHelper::getGridProperties( xCooSys , nDimensionIndex, MAIN_AXIS_INDEX, nSubGridIndex ); } catch( const uno::Exception & ) { @@ -151,7 +123,18 @@ Reference< beans::XPropertySet > GridWrapper::getInnerPropertySet() const Sequence< beans::Property >& GridWrapper::getPropertySequence() { - return *StaticGridWrapperPropertyArray::get(); + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; } std::vector< std::unique_ptr<WrappedProperty> > GridWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/GridWrapper.hxx b/chart2/source/controller/chartapiwrapper/GridWrapper.hxx index 0a16368e9ccf..c978f3bb8d83 100644 --- a/chart2/source/controller/chartapiwrapper/GridWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/GridWrapper.hxx @@ -20,7 +20,7 @@ #include <WrappedPropertySet.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -48,7 +48,7 @@ public: Z_MINOR_GRID }; - GridWrapper(tGridType eType, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + GridWrapper(tGridType eType, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~GridWrapper() override; static void getDimensionAndSubGridBool( tGridType eType, sal_Int32& rnDimensionIndex, bool& rbSubGrid ); @@ -71,7 +71,7 @@ protected: private: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; tGridType m_eType; }; diff --git a/chart2/source/controller/chartapiwrapper/LegendWrapper.cxx b/chart2/source/controller/chartapiwrapper/LegendWrapper.cxx index ca5a25005152..9ec8f02819ef 100644 --- a/chart2/source/controller/chartapiwrapper/LegendWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/LegendWrapper.cxx @@ -26,7 +26,6 @@ #include <com/sun/star/chart2/LegendPosition.hpp> #include <com/sun/star/chart/ChartLegendExpansion.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> #include <CharacterProperties.hxx> #include <LinePropertiesHelper.hxx> @@ -39,10 +38,10 @@ #include "WrappedScaleTextProperties.hxx" #include <algorithm> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::beans::Property; -using ::osl::MutexGuard; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; @@ -225,35 +224,25 @@ void lcl_AddPropertiesToVector( beans::PropertyAttribute::MAYBEDEFAULT ); } -struct StaticLegendWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties ); - ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticLegendWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticLegendWrapperPropertyArray_Initializer > +const Sequence< Property >& StaticLegendWrapperPropertyArray() { + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); + ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties ); + ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; } // anonymous namespace @@ -261,9 +250,8 @@ struct StaticLegendWrapperPropertyArray : public rtl::StaticAggregate< Sequence< namespace chart::wrapper { -LegendWrapper::LegendWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact(spChart2ModelContact) - , m_aEventListenerContainer(m_aMutex) +LegendWrapper::LegendWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move(spChart2ModelContact)) { } @@ -322,23 +310,25 @@ OUString SAL_CALL LegendWrapper::getShapeType() // ____ XComponent ____ void SAL_CALL LegendWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); - MutexGuard aGuard( m_aMutex); clearWrappedPropertySet(); } void SAL_CALL LegendWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL LegendWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } //ReferenceSizePropertyProvider @@ -379,7 +369,7 @@ Reference< beans::XPropertySet > LegendWrapper::getInnerPropertySet() const Sequence< beans::Property >& LegendWrapper::getPropertySequence() { - return *StaticLegendWrapperPropertyArray::get(); + return StaticLegendWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > LegendWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/LegendWrapper.hxx b/chart2/source/controller/chartapiwrapper/LegendWrapper.hxx index 128c5fbcf970..5b4deac2a1f9 100644 --- a/chart2/source/controller/chartapiwrapper/LegendWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/LegendWrapper.hxx @@ -21,7 +21,7 @@ #include <WrappedPropertySet.hxx> #include "ReferenceSizePropertyProvider.hxx" #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -42,7 +42,7 @@ class LegendWrapper : public ::cppu::ImplInheritanceHelper< , public ReferenceSizePropertyProvider { public: - explicit LegendWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit LegendWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~LegendWrapper() override; /// XServiceInfo declarations @@ -79,7 +79,7 @@ protected: private: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; }; } // namespace chart::wrapper diff --git a/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.cxx b/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.cxx index 516a96b2a042..d0cb5eab6552 100644 --- a/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.cxx @@ -19,21 +19,19 @@ #include "MinMaxLineWrapper.hxx" #include "Chart2ModelContact.hxx" -#include <DiagramHelper.hxx> +#include <ChartType.hxx> #include <servicenames_charttypes.hxx> #include <cppuhelper/propshlp.hxx> #include <cppuhelper/supportsservice.hxx> -#include <com/sun/star/chart2/XChartType.hpp> -#include <com/sun/star/chart2/XDataSeriesContainer.hpp> #include <com/sun/star/drawing/LineJoint.hpp> #include <comphelper/sequence.hxx> - +#include <DataSeries.hxx> #include <LinePropertiesHelper.hxx> #include <UserDefinedProperties.hxx> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; using ::com::sun::star::beans::Property; using ::com::sun::star::uno::Reference; @@ -43,72 +41,34 @@ using ::com::sun::star::uno::Any; namespace { -struct StaticMinMaxLineWrapperDefaults_Initializer -{ - ::chart::tPropertyValueMap* operator()() - { - static ::chart::tPropertyValueMap aStaticDefaults; - ::chart::LinePropertiesHelper::AddDefaultsToMap( aStaticDefaults ); - return &aStaticDefaults; - } -}; - -struct StaticMinMaxLineWrapperDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticMinMaxLineWrapperDefaults_Initializer > -{ -}; - -struct StaticMinMaxLineWrapperPropertyArray_Initializer +Sequence< Property >& StaticMinMaxLineWrapperPropertyArray() { - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; -struct StaticMinMaxLineWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticMinMaxLineWrapperPropertyArray_Initializer > -{ -}; + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); -struct StaticMinMaxLineWrapperInfoHelper_Initializer -{ - ::cppu::OPropertyArrayHelper* operator()() - { - static ::cppu::OPropertyArrayHelper aPropHelper( *StaticMinMaxLineWrapperPropertyArray::get() ); - return &aPropHelper; - } -}; + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); -struct StaticMinMaxLineWrapperInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticMinMaxLineWrapperInfoHelper_Initializer > -{ + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; -struct StaticMinMaxLineWrapperInfo_Initializer +::cppu::OPropertyArrayHelper& StaticMinMaxLineWrapperInfoHelper() { - uno::Reference< beans::XPropertySetInfo >* operator()() - { - static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( - ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticMinMaxLineWrapperInfoHelper::get() ) ); - return &xPropertySetInfo; - } + static ::cppu::OPropertyArrayHelper aPropHelper( StaticMinMaxLineWrapperPropertyArray() ); + return aPropHelper; }; -struct StaticMinMaxLineWrapperInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticMinMaxLineWrapperInfo_Initializer > +uno::Reference< beans::XPropertySetInfo >& StaticMinMaxLineWrapperInfo() { + static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( + ::cppu::OPropertySetHelper::createPropertySetInfo( StaticMinMaxLineWrapperInfoHelper() ) ); + return xPropertySetInfo; }; } // anonymous namespace @@ -116,9 +76,8 @@ struct StaticMinMaxLineWrapperInfo : public rtl::StaticAggregate< uno::Reference namespace chart::wrapper { -MinMaxLineWrapper::MinMaxLineWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact( spChart2ModelContact ) - , m_aEventListenerContainer( m_aMutex ) +MinMaxLineWrapper::MinMaxLineWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_aWrappedLineJointProperty( "LineJoint", uno::Any( drawing::LineJoint_NONE )) { } @@ -130,58 +89,53 @@ MinMaxLineWrapper::~MinMaxLineWrapper() // ____ XComponent ____ void SAL_CALL MinMaxLineWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); } void SAL_CALL MinMaxLineWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL MinMaxLineWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } //XPropertySet uno::Reference< beans::XPropertySetInfo > SAL_CALL MinMaxLineWrapper::getPropertySetInfo() { - return *StaticMinMaxLineWrapperInfo::get(); + return StaticMinMaxLineWrapperInfo(); } void SAL_CALL MinMaxLineWrapper::setPropertyValue( const OUString& rPropertyName, const uno::Any& rValue ) { - Reference< beans::XPropertySet > xPropSet; - rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - const Sequence< Reference< chart2::XChartType > > aTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( xDiagram ) ); - for( Reference< chart2::XChartType > const & xType : aTypes ) + const std::vector< rtl::Reference< ChartType > > & aTypes = xDiagram->getChartTypes(); + for( rtl::Reference< ChartType > const & xType : aTypes ) { if( xType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) { - Reference< chart2::XDataSeriesContainer > xSeriesContainer(xType,uno::UNO_QUERY); - if( xSeriesContainer.is() ) + const std::vector< rtl::Reference< DataSeries > > & aSeriesSeq( xType->getDataSeries2() ); + if(!aSeriesSeq.empty()) { - Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xSeriesContainer->getDataSeries() ); - if(aSeriesSeq.hasElements()) + if(aSeriesSeq[0].is()) { - xPropSet.set(aSeriesSeq[0],uno::UNO_QUERY); - if(xPropSet.is()) - { - if( rPropertyName == "LineColor" ) - xPropSet->setPropertyValue( "Color", rValue ); - else if( rPropertyName == "LineTransparence" ) - xPropSet->setPropertyValue( "Transparency", rValue ); - else if( rPropertyName == m_aWrappedLineJointProperty.getOuterName() ) - m_aWrappedLineJointProperty.setPropertyValue( rValue, xPropSet ); - else - xPropSet->setPropertyValue( rPropertyName, rValue ); - return; - } + if( rPropertyName == "LineColor" ) + aSeriesSeq[0]->setPropertyValue( "Color", rValue ); + else if( rPropertyName == "LineTransparence" ) + aSeriesSeq[0]->setPropertyValue( "Transparency", rValue ); + else if( rPropertyName == m_aWrappedLineJointProperty.getOuterName() ) + m_aWrappedLineJointProperty.setPropertyValue( rValue, aSeriesSeq[0] ); + else + aSeriesSeq[0]->setPropertyValue( rPropertyName, rValue ); + return; } } } @@ -191,24 +145,19 @@ uno::Any SAL_CALL MinMaxLineWrapper::getPropertyValue( const OUString& rProperty { Any aRet; - Reference< beans::XPropertySet > xPropSet; + rtl::Reference< DataSeries > xPropSet; rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - const Sequence< Reference< chart2::XChartType > > aTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( xDiagram ) ); - for( Reference< chart2::XChartType > const & xType : aTypes ) + const std::vector< rtl::Reference< ChartType > > aTypes = xDiagram->getChartTypes(); + for( rtl::Reference< ChartType > const & xType : aTypes ) { if( xType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) { - Reference< chart2::XDataSeriesContainer > xSeriesContainer(xType,uno::UNO_QUERY); - if( xSeriesContainer.is() ) + const std::vector< rtl::Reference< DataSeries > > & aSeriesSeq( xType->getDataSeries2() ); + if(!aSeriesSeq.empty()) { - Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xSeriesContainer->getDataSeries() ); - if(aSeriesSeq.hasElements()) - { - xPropSet.set(aSeriesSeq[0],uno::UNO_QUERY); - break; - } + xPropSet = aSeriesSeq[0]; + break; } } } @@ -332,9 +281,14 @@ void SAL_CALL MinMaxLineWrapper::setPropertyToDefault( const OUString& rProperty uno::Any SAL_CALL MinMaxLineWrapper::getPropertyDefault( const OUString& rPropertyName ) { - const tPropertyValueMap& rStaticDefaults = *StaticMinMaxLineWrapperDefaults::get(); - tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( StaticMinMaxLineWrapperInfoHelper::get()->getHandleByName( rPropertyName ) ) ); - if( aFound == rStaticDefaults.end() ) + static const ::chart::tPropertyValueMap aStaticDefaults = [] + { + ::chart::tPropertyValueMap aTmp; + ::chart::LinePropertiesHelper::AddDefaultsToMap( aTmp ); + return aTmp; + }(); + tPropertyValueMap::const_iterator aFound( aStaticDefaults.find( StaticMinMaxLineWrapperInfoHelper().getHandleByName( rPropertyName ) ) ); + if( aFound == aStaticDefaults.end() ) return uno::Any(); return (*aFound).second; } @@ -343,7 +297,7 @@ uno::Any SAL_CALL MinMaxLineWrapper::getPropertyDefault( const OUString& rProper //getPropertyStates() already declared in XPropertyState void SAL_CALL MinMaxLineWrapper::setAllPropertiesToDefault( ) { - const Sequence< beans::Property >& rPropSeq = *StaticMinMaxLineWrapperPropertyArray::get(); + const Sequence< beans::Property >& rPropSeq = StaticMinMaxLineWrapperPropertyArray(); for(beans::Property const & prop : rPropSeq) { setPropertyToDefault( prop.Name ); diff --git a/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.hxx b/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.hxx index 33cabe1743e2..337ca8bdebd7 100644 --- a/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/MinMaxLineWrapper.hxx @@ -19,9 +19,8 @@ #pragma once #include <WrappedIgnoreProperty.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> -#include <cppuhelper/basemutex.hxx> #include <cppuhelper/implbase.hxx> #include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/beans/XMultiPropertyStates.hpp> @@ -37,8 +36,7 @@ namespace chart::wrapper class Chart2ModelContact; -class MinMaxLineWrapper : public cppu::BaseMutex - , public ::cppu::WeakImplHelper +class MinMaxLineWrapper : public ::cppu::WeakImplHelper < css::lang::XComponent , css::lang::XServiceInfo , css::beans::XPropertySet @@ -48,7 +46,7 @@ class MinMaxLineWrapper : public cppu::BaseMutex > { public: - explicit MinMaxLineWrapper(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit MinMaxLineWrapper(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~MinMaxLineWrapper() override; /// XServiceInfo declarations @@ -93,8 +91,9 @@ public: virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override; private: //member + std::mutex m_aMutex; std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; WrappedIgnoreProperty m_aWrappedLineJointProperty; }; diff --git a/chart2/source/controller/chartapiwrapper/TitleWrapper.cxx b/chart2/source/controller/chartapiwrapper/TitleWrapper.cxx index 074a37778e65..129798d3706f 100644 --- a/chart2/source/controller/chartapiwrapper/TitleWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/TitleWrapper.cxx @@ -26,7 +26,6 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> #include <com/sun/star/chart2/XTitle.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <CharacterProperties.hxx> #include <LinePropertiesHelper.hxx> @@ -40,10 +39,10 @@ #include <algorithm> #include <rtl/ustrbuf.hxx> #include <cppuhelper/propshlp.hxx> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::beans::Property; -using ::osl::MutexGuard; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; @@ -75,12 +74,12 @@ WrappedTitleStringProperty::WrappedTitleStringProperty( const Reference< uno::XC void WrappedTitleStringProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const { - Reference< chart2::XTitle > xTitle(xInnerPropertySet,uno::UNO_QUERY); - if(xTitle.is()) + Title* pTitle = dynamic_cast<Title*>(xInnerPropertySet.get()); + if(pTitle) { OUString aString; rOuterValue >>= aString; - TitleHelper::setCompleteString( aString, xTitle, m_xContext ); + TitleHelper::setCompleteString( aString, pTitle, m_xContext ); } } Any WrappedTitleStringProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const @@ -107,6 +106,51 @@ Any WrappedTitleStringProperty::getPropertyDefault( const Reference< beans::XPro namespace { + class WrappedTitleFormStringsProperty : public WrappedProperty + { + public: + explicit WrappedTitleFormStringsProperty(); + + virtual void setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const override; + virtual Any getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const override; + virtual Any getPropertyDefault( const Reference< beans::XPropertyState >& xInnerPropertyState ) const override; + }; + +} + +WrappedTitleFormStringsProperty::WrappedTitleFormStringsProperty() + : ::chart::WrappedProperty( "FormattedStrings", OUString() ) +{ +} + +void WrappedTitleFormStringsProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const +{ + Title* pTitle = dynamic_cast<Title*>(xInnerPropertySet.get()); + if (pTitle) + { + Sequence< Reference< chart2::XFormattedString >> xFormattedStrings; + rOuterValue >>= xFormattedStrings; + TitleHelper::setFormattedString(pTitle, xFormattedStrings); + } +} +Any WrappedTitleFormStringsProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const +{ + Any aRet(getPropertyDefault(Reference< beans::XPropertyState >(xInnerPropertySet, uno::UNO_QUERY))); + Reference< chart2::XTitle > xTitle(xInnerPropertySet, uno::UNO_QUERY); + if (xTitle.is()) + { + const Sequence< Reference< chart2::XFormattedString > > aStrings(xTitle->getText()); + aRet <<= aStrings; + } + return aRet; +} +Any WrappedTitleFormStringsProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const +{ + return uno::Any(Sequence< Reference< chart2::XFormattedString > >()); //default title is an empty Sequence of XFormattedStrings +} + +namespace { + class WrappedStackedTextProperty : public WrappedProperty { public: @@ -128,6 +172,8 @@ namespace enum { PROP_TITLE_STRING, + PROP_TITLE_FORMATTED_STRINGS, + PROP_TITLE_VISIBLE, PROP_TITLE_TEXT_ROTATION, PROP_TITLE_TEXT_STACKED }; @@ -141,6 +187,18 @@ void lcl_AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID ); + rOutProperties.emplace_back( "FormattedStrings", + PROP_TITLE_FORMATTED_STRINGS, + cppu::UnoType< Sequence< Reference< chart2::XFormattedString >>>::get(), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::MAYBEVOID ); + + rOutProperties.emplace_back( "Visible", + PROP_TITLE_VISIBLE, + cppu::UnoType<OUString>::get(), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::MAYBEVOID ); + rOutProperties.emplace_back( "TextRotation", PROP_TITLE_TEXT_ROTATION, cppu::UnoType<sal_Int32>::get(), @@ -153,36 +211,27 @@ void lcl_AddPropertiesToVector( | beans::PropertyAttribute::MAYBEDEFAULT ); } -struct StaticTitleWrapperPropertyArray_Initializer +const Sequence< Property > & StaticTitleWrapperPropertyArray() { - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties ); - ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } + static Sequence< Property > aPropSeq = []() + { + std::vector< beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); + ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties ); + ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; -struct StaticTitleWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticTitleWrapperPropertyArray_Initializer > -{ -}; } // anonymous namespace @@ -190,9 +239,8 @@ namespace chart::wrapper { TitleWrapper::TitleWrapper( ::chart::TitleHelper::eTitleType eTitleType, - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) : - m_spChart2ModelContact( spChart2ModelContact ), - m_aEventListenerContainer( m_aMutex ), + std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : + m_spChart2ModelContact(std::move( spChart2ModelContact )), m_eTitleType(eTitleType) { ControllerLockGuardUNO aCtrlLockGuard( m_spChart2ModelContact->getDocumentModel() ); @@ -244,38 +292,25 @@ OUString SAL_CALL TitleWrapper::getShapeType() // ____ XComponent ____ void SAL_CALL TitleWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); - MutexGuard aGuard( m_aMutex); clearWrappedPropertySet(); } void SAL_CALL TitleWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL TitleWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); -} - -Reference< beans::XPropertySet > TitleWrapper::getFirstCharacterPropertySet() -{ - Reference< beans::XPropertySet > xProp; - - Reference< chart2::XTitle > xTitle( getTitleObject() ); - if( xTitle.is()) - { - Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText()); - if( aStrings.hasElements() ) - xProp.set( aStrings[0], uno::UNO_QUERY ); - } - - return xProp; + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } void TitleWrapper::getFastCharacterPropertyValue( sal_Int32 nHandle, Any& rValue ) @@ -283,7 +318,7 @@ void TitleWrapper::getFastCharacterPropertyValue( sal_Int32 nHandle, Any& rValue OSL_ASSERT( FAST_PROPERTY_ID_START_CHAR_PROP <= nHandle && nHandle < CharacterProperties::FAST_PROPERTY_ID_END_CHAR_PROP ); - Reference< beans::XPropertySet > xProp = getFirstCharacterPropertySet(); + Reference< beans::XPropertySet > xProp = getInnerPropertySet(); Reference< beans::XFastPropertySet > xFastProp( xProp, uno::UNO_QUERY ); if(xProp.is()) { @@ -323,6 +358,16 @@ void TitleWrapper::setFastCharacterPropertyValue( else if( xFastPropertySet.is() ) xFastPropertySet->setFastPropertyValue( nHandle, rValue ); } + + Reference< beans::XPropertySet > xInnerProp = getInnerPropertySet(); + Reference< beans::XFastPropertySet > xFastInnerProp( xInnerProp, uno::UNO_QUERY ); + if (xInnerProp.is()) + { + if (pWrappedProperty) + pWrappedProperty->setPropertyValue(rValue, xInnerProp); + else if (xFastInnerProp.is()) + xFastInnerProp->setFastPropertyValue(nHandle, rValue); + } } // WrappedPropertySet @@ -356,7 +401,7 @@ beans::PropertyState SAL_CALL TitleWrapper::getPropertyState( const OUString& rP sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) { - Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY ); + Reference< beans::XPropertyState > xPropState( getInnerPropertySet(), uno::UNO_QUERY); if( xPropState.is() ) { const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName ); @@ -389,7 +434,7 @@ Any SAL_CALL TitleWrapper::getPropertyDefault( const OUString& rPropertyName ) sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) { - Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY ); + Reference< beans::XPropertyState > xPropState( getInnerPropertySet(), uno::UNO_QUERY ); if( xPropState.is() ) { const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName ); @@ -410,7 +455,7 @@ void SAL_CALL TitleWrapper::addPropertyChangeListener( const OUString& rProperty sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) { - Reference< beans::XPropertySet > xPropSet = getFirstCharacterPropertySet(); + Reference< beans::XPropertySet > xPropSet = getInnerPropertySet(); if( xPropSet.is() ) xPropSet->addPropertyChangeListener( rPropertyName, xListener ); } @@ -422,7 +467,7 @@ void SAL_CALL TitleWrapper::removePropertyChangeListener( const OUString& rPrope sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) { - Reference< beans::XPropertySet > xPropSet = getFirstCharacterPropertySet(); + Reference< beans::XPropertySet > xPropSet = getInnerPropertySet(); if( xPropSet.is() ) xPropSet->removePropertyChangeListener( rPropertyName, xListener ); } @@ -469,7 +514,7 @@ Reference< beans::XPropertySet > TitleWrapper::getInnerPropertySet() const Sequence< beans::Property >& TitleWrapper::getPropertySequence() { - return *StaticTitleWrapperPropertyArray::get(); + return StaticTitleWrapperPropertyArray(); } std::vector< std::unique_ptr<WrappedProperty> > TitleWrapper::createWrappedProperties() @@ -477,6 +522,7 @@ std::vector< std::unique_ptr<WrappedProperty> > TitleWrapper::createWrappedPrope std::vector< std::unique_ptr<WrappedProperty> > aWrappedProperties; aWrappedProperties.emplace_back( new WrappedTitleStringProperty( m_spChart2ModelContact->m_xContext ) ); + aWrappedProperties.emplace_back( new WrappedTitleFormStringsProperty() ); aWrappedProperties.emplace_back( new WrappedTextRotationProperty( true ) ); aWrappedProperties.emplace_back( new WrappedStackedTextProperty() ); WrappedCharacterHeightProperty::addWrappedProperties( aWrappedProperties, this ); diff --git a/chart2/source/controller/chartapiwrapper/TitleWrapper.hxx b/chart2/source/controller/chartapiwrapper/TitleWrapper.hxx index 5cc3ed477d01..aecf5f304231 100644 --- a/chart2/source/controller/chartapiwrapper/TitleWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/TitleWrapper.hxx @@ -22,7 +22,7 @@ #include "ReferenceSizePropertyProvider.hxx" #include <TitleHelper.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -45,7 +45,7 @@ class TitleWrapper final : public ::cppu::ImplInheritanceHelper< { public: TitleWrapper( ::chart::TitleHelper::eTitleType eTitleType, - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); virtual ~TitleWrapper() override; /// XServiceInfo declarations @@ -100,7 +100,7 @@ private: css::uno::Reference< css::chart2::XTitle > getTitleObject(); std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; ::chart::TitleHelper::eTitleType m_eTitleType; }; diff --git a/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.cxx b/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.cxx index 2922f91c466b..c63090d81ac8 100644 --- a/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.cxx @@ -19,20 +19,19 @@ #include "UpDownBarWrapper.hxx" #include "Chart2ModelContact.hxx" -#include <DiagramHelper.hxx> +#include <ChartType.hxx> #include <servicenames_charttypes.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/propshlp.hxx> -#include <com/sun/star/chart2/XChartType.hpp> #include <comphelper/sequence.hxx> #include <LinePropertiesHelper.hxx> #include <FillProperties.hxx> #include <UserDefinedProperties.hxx> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; using ::com::sun::star::beans::Property; using ::com::sun::star::uno::Reference; @@ -42,79 +41,28 @@ using ::com::sun::star::uno::Any; namespace { -struct StaticUpDownBarWrapperPropertyArray_Initializer +const Sequence< Property > & StaticUpDownBarWrapperPropertyArray() { - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticUpDownBarWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticUpDownBarWrapperPropertyArray_Initializer > -{ -}; - -struct StaticUpDownBarWrapperInfoHelper_Initializer -{ - ::cppu::OPropertyArrayHelper* operator()() - { - static ::cppu::OPropertyArrayHelper aPropHelper( *StaticUpDownBarWrapperPropertyArray::get() ); - return &aPropHelper; - } -}; + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; -struct StaticUpDownBarWrapperInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticUpDownBarWrapperInfoHelper_Initializer > -{ -}; + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); -struct StaticUpDownBarWrapperInfo_Initializer -{ - uno::Reference< beans::XPropertySetInfo >* operator()() - { - static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( - ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticUpDownBarWrapperInfoHelper::get() ) ); - return &xPropertySetInfo; - } -}; + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); -struct StaticUpDownBarWrapperInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticUpDownBarWrapperInfo_Initializer > -{ + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; }; -struct StaticUpDownBarWrapperDefaults_Initializer -{ - ::chart::tPropertyValueMap* operator()() - { - static ::chart::tPropertyValueMap aStaticDefaults; - lcl_AddDefaultsToMap( aStaticDefaults ); - return &aStaticDefaults; - } -private: - static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) - { - ::chart::LinePropertiesHelper::AddDefaultsToMap( rOutMap ); - ::chart::FillProperties::AddDefaultsToMap( rOutMap ); - } -}; - -struct StaticUpDownBarWrapperDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticUpDownBarWrapperDefaults_Initializer > +::cppu::OPropertyArrayHelper& StaticUpDownBarWrapperInfoHelper() { + static ::cppu::OPropertyArrayHelper aPropHelper( StaticUpDownBarWrapperPropertyArray() ); + return aPropHelper; }; } // anonymous namespace @@ -123,9 +71,8 @@ namespace chart::wrapper { UpDownBarWrapper::UpDownBarWrapper( - bool bUp, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) - : m_spChart2ModelContact( spChart2ModelContact ) - , m_aEventListenerContainer( m_aMutex ) + bool bUp, std::shared_ptr<Chart2ModelContact> spChart2ModelContact) + : m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_aPropertySetName( bUp ? OUString( "WhiteDay" ) : OUString( "BlackDay" )) { } @@ -137,42 +84,44 @@ UpDownBarWrapper::~UpDownBarWrapper() // ____ XComponent ____ void SAL_CALL UpDownBarWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); } void SAL_CALL UpDownBarWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL UpDownBarWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } //XPropertySet uno::Reference< beans::XPropertySetInfo > SAL_CALL UpDownBarWrapper::getPropertySetInfo() { - return *StaticUpDownBarWrapperInfo::get(); + static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( + ::cppu::OPropertySetHelper::createPropertySetInfo(StaticUpDownBarWrapperInfoHelper() ) ); + return xPropertySetInfo; } + void SAL_CALL UpDownBarWrapper::setPropertyValue( const OUString& rPropertyName, const uno::Any& rValue ) { Reference< beans::XPropertySet > xPropSet; - const Sequence< Reference< chart2::XChartType > > aTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); - for( Reference< chart2::XChartType > const & xType : aTypes ) + const std::vector< rtl::Reference< ChartType > > aTypes = + m_spChart2ModelContact->getDiagram()->getChartTypes(); + for( rtl::Reference< ChartType > const & xType : aTypes ) { if( xType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) { - Reference< beans::XPropertySet > xTypeProps( xType, uno::UNO_QUERY ); - if(xTypeProps.is()) - { - xTypeProps->getPropertyValue( m_aPropertySetName ) >>= xPropSet; - } + xType->getPropertyValue( m_aPropertySetName ) >>= xPropSet; } } if(xPropSet.is()) @@ -184,17 +133,13 @@ uno::Any SAL_CALL UpDownBarWrapper::getPropertyValue( const OUString& rPropertyN Reference< beans::XPropertySet > xPropSet; - const Sequence< Reference< chart2::XChartType > > aTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); - for( Reference< chart2::XChartType > const & xType : aTypes ) + const std::vector< rtl::Reference< ChartType > > aTypes = + m_spChart2ModelContact->getDiagram()->getChartTypes(); + for( rtl::Reference<ChartType > const & xType : aTypes ) { if( xType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) { - Reference< beans::XPropertySet > xTypeProps( xType, uno::UNO_QUERY ); - if(xTypeProps.is()) - { - xTypeProps->getPropertyValue( m_aPropertySetName ) >>= xPropSet; - } + xType->getPropertyValue( m_aPropertySetName ) >>= xPropSet; } } if(xPropSet.is()) @@ -299,9 +244,15 @@ void SAL_CALL UpDownBarWrapper::setPropertyToDefault( const OUString& rPropertyN uno::Any SAL_CALL UpDownBarWrapper::getPropertyDefault( const OUString& rPropertyName ) { - const tPropertyValueMap& rStaticDefaults = *StaticUpDownBarWrapperDefaults::get(); - tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( StaticUpDownBarWrapperInfoHelper::get()->getHandleByName( rPropertyName ) ) ); - if( aFound == rStaticDefaults.end() ) + static const ::chart::tPropertyValueMap aStaticDefaults = []() + { + ::chart::tPropertyValueMap aTmp; + ::chart::LinePropertiesHelper::AddDefaultsToMap( aTmp ); + ::chart::FillProperties::AddDefaultsToMap( aTmp ); + return aTmp; + }(); + tPropertyValueMap::const_iterator aFound( aStaticDefaults.find( StaticUpDownBarWrapperInfoHelper().getHandleByName( rPropertyName ) ) ); + if( aFound == aStaticDefaults.end() ) return uno::Any(); return (*aFound).second; } @@ -310,7 +261,7 @@ uno::Any SAL_CALL UpDownBarWrapper::getPropertyDefault( const OUString& rPropert //getPropertyStates() already declared in XPropertyState void SAL_CALL UpDownBarWrapper::setAllPropertiesToDefault( ) { - const Sequence< beans::Property >& rPropSeq = *StaticUpDownBarWrapperPropertyArray::get(); + const Sequence< beans::Property >& rPropSeq = StaticUpDownBarWrapperPropertyArray(); for(beans::Property const & prop : rPropSeq) { setPropertyToDefault( prop.Name ); diff --git a/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.hxx b/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.hxx index 63e1c44db4d8..517a2406fe2c 100644 --- a/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/UpDownBarWrapper.hxx @@ -18,9 +18,8 @@ */ #pragma once -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> -#include <cppuhelper/basemutex.hxx> #include <cppuhelper/implbase.hxx> #include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/beans/XMultiPropertyStates.hpp> @@ -36,8 +35,7 @@ namespace chart::wrapper class Chart2ModelContact; -class UpDownBarWrapper : public cppu::BaseMutex - , public ::cppu::WeakImplHelper +class UpDownBarWrapper : public ::cppu::WeakImplHelper < css::lang::XComponent , css::lang::XServiceInfo , css::beans::XPropertySet @@ -47,7 +45,7 @@ class UpDownBarWrapper : public cppu::BaseMutex > { public: - UpDownBarWrapper(bool bUp, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + UpDownBarWrapper(bool bUp, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~UpDownBarWrapper() override; /// XServiceInfo declarations @@ -94,8 +92,9 @@ public: virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override; private: //member + std::mutex m_aMutex; std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; OUString m_aPropertySetName; }; diff --git a/chart2/source/controller/chartapiwrapper/WallFloorWrapper.cxx b/chart2/source/controller/chartapiwrapper/WallFloorWrapper.cxx index 711f68201727..9c8a6f61afb0 100644 --- a/chart2/source/controller/chartapiwrapper/WallFloorWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/WallFloorWrapper.cxx @@ -21,7 +21,6 @@ #include "Chart2ModelContact.hxx" #include <comphelper/sequence.hxx> #include <cppuhelper/supportsservice.hxx> -#include <com/sun/star/chart2/XDiagram.hpp> #include <FillProperties.hxx> #include <LinePropertiesHelper.hxx> @@ -29,54 +28,20 @@ #include <WrappedDirectStateProperty.hxx> #include <algorithm> +#include <utility> using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; using ::com::sun::star::beans::Property; -using ::osl::MutexGuard; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; -namespace -{ - -struct StaticWallFloorWrapperPropertyArray_Initializer -{ - Sequence< Property >* operator()() - { - static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); - return &aPropSeq; - } - -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticWallFloorWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticWallFloorWrapperPropertyArray_Initializer > -{ -}; - -} // anonymous namespace - namespace chart::wrapper { WallFloorWrapper::WallFloorWrapper( bool bWall, - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) : - m_spChart2ModelContact( spChart2ModelContact ), - m_aEventListenerContainer( m_aMutex ), + std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : + m_spChart2ModelContact(std::move( spChart2ModelContact )), m_bWall( bWall ) { @@ -89,23 +54,25 @@ WallFloorWrapper::~WallFloorWrapper() // ____ XComponent ____ void SAL_CALL WallFloorWrapper::dispose() { + std::unique_lock g(m_aMutex); Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); - m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); + m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( xSource ) ); - MutexGuard aGuard( m_aMutex); clearWrappedPropertySet(); } void SAL_CALL WallFloorWrapper::addEventListener( const Reference< lang::XEventListener >& xListener ) { - m_aEventListenerContainer.addInterface( xListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.addInterface( g, xListener ); } void SAL_CALL WallFloorWrapper::removeEventListener( const Reference< lang::XEventListener >& aListener ) { - m_aEventListenerContainer.removeInterface( aListener ); + std::unique_lock g(m_aMutex); + m_aEventListenerContainer.removeInterface( g, aListener ); } // WrappedPropertySet @@ -127,7 +94,19 @@ Reference< beans::XPropertySet > WallFloorWrapper::getInnerPropertySet() const Sequence< beans::Property >& WallFloorWrapper::getPropertySequence() { - return *StaticWallFloorWrapperPropertyArray::get(); + static Sequence< Property > aPropSeq = []() + { + std::vector< css::beans::Property > aProperties; + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropSeq; } std::vector< std::unique_ptr<WrappedProperty> > WallFloorWrapper::createWrappedProperties() diff --git a/chart2/source/controller/chartapiwrapper/WallFloorWrapper.hxx b/chart2/source/controller/chartapiwrapper/WallFloorWrapper.hxx index 3df4a9f1af0b..4a85bd8d5b37 100644 --- a/chart2/source/controller/chartapiwrapper/WallFloorWrapper.hxx +++ b/chart2/source/controller/chartapiwrapper/WallFloorWrapper.hxx @@ -20,7 +20,7 @@ #include <WrappedPropertySet.hxx> #include <cppuhelper/implbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -38,7 +38,7 @@ class WallFloorWrapper : public ::cppu::ImplInheritanceHelper< > { public: - WallFloorWrapper(bool bWall, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + WallFloorWrapper(bool bWall, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~WallFloorWrapper() override; /// XServiceInfo declarations @@ -59,7 +59,7 @@ protected: private: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; - ::comphelper::OInterfaceContainerHelper3<css::lang::XEventListener> m_aEventListenerContainer; + ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListenerContainer; bool m_bWall; }; diff --git a/chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.cxx index 2bfb5ed42211..b88468c9941e 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedAutomaticPositionProperties.cxx @@ -23,7 +23,7 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/beans/XPropertySet.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using ::com::sun::star::uno::Any; diff --git a/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx index 4895e1c40b9d..2b047ebfaf82 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx @@ -23,13 +23,12 @@ #include "WrappedAxisAndGridExistenceProperties.hxx" #include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XAxis.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <WrappedProperty.hxx> #include "Chart2ModelContact.hxx" #include <TitleHelper.hxx> -#include <ChartView.hxx> +#include <utility> #include <osl/diagnose.h> using namespace ::com::sun::star; @@ -45,7 +44,7 @@ class WrappedAxisAndGridExistenceProperty : public WrappedProperty { public: WrappedAxisAndGridExistenceProperty( bool bAxis, bool bMain, sal_Int32 nDimensionIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -81,9 +80,9 @@ void WrappedAxisAndGridExistenceProperties::addWrappedProperties( std::vector< s } WrappedAxisAndGridExistenceProperty::WrappedAxisAndGridExistenceProperty( bool bAxis, bool bMain, sal_Int32 nDimensionIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : WrappedProperty(OUString(),OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_bAxis( bAxis ) , m_bMain( bMain ) , m_nDimensionIndex( nDimensionIndex ) @@ -205,7 +204,7 @@ class WrappedAxisTitleExistenceProperty : public WrappedProperty { public: WrappedAxisTitleExistenceProperty( sal_Int32 nTitleIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -231,9 +230,9 @@ void WrappedAxisTitleExistenceProperties::addWrappedProperties( std::vector< std } WrappedAxisTitleExistenceProperty::WrappedAxisTitleExistenceProperty(sal_Int32 nTitleIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty(OUString(),OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_eTitleType( TitleHelper::Y_AXIS_TITLE ) { switch( nTitleIndex ) @@ -288,7 +287,7 @@ Any WrappedAxisTitleExistenceProperty::getPropertyValue( const Reference< beans: { bool bHasTitle = false; - Reference< chart2::XTitle > xTitle( TitleHelper::getTitle( m_eTitleType, m_spChart2ModelContact->getDocumentModel() ) ); + rtl::Reference< Title > xTitle( TitleHelper::getTitle( m_eTitleType, m_spChart2ModelContact->getDocumentModel() ) ); if( xTitle.is() && !TitleHelper::getCompleteString( xTitle ).isEmpty() ) bHasTitle = true; @@ -311,7 +310,7 @@ class WrappedAxisLabelExistenceProperty : public WrappedProperty { public: WrappedAxisLabelExistenceProperty( bool bMain, sal_Int32 nDimensionIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -338,9 +337,9 @@ void WrappedAxisLabelExistenceProperties::addWrappedProperties( std::vector< std } WrappedAxisLabelExistenceProperty::WrappedAxisLabelExistenceProperty(bool bMain, sal_Int32 nDimensionIndex - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty(OUString(),OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_bMain( bMain ) , m_nDimensionIndex( nDimensionIndex ) { @@ -372,11 +371,11 @@ void WrappedAxisLabelExistenceProperty::setPropertyValue( const Any& rOuterValue return; rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY ); + rtl::Reference< Axis > xProp = AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ); if( !xProp.is() && bNewValue ) { //create axis if needed - xProp.set( AxisHelper::createAxis( m_nDimensionIndex, m_bMain, xDiagram, m_spChart2ModelContact->m_xContext ), uno::UNO_QUERY ); + xProp = AxisHelper::createAxis( m_nDimensionIndex, m_bMain, xDiagram, m_spChart2ModelContact->m_xContext ); if( xProp.is() ) xProp->setPropertyValue( "Show", uno::Any( false ) ); } @@ -388,7 +387,7 @@ Any WrappedAxisLabelExistenceProperty::getPropertyValue( const Reference< beans: { Any aRet; rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY ); + rtl::Reference< Axis > xProp = AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ); if( xProp.is() ) aRet = xProp->getPropertyValue( "DisplayLabels" ); else diff --git a/chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.hxx index 7eee90a2c209..be9457d0ffd7 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedCharacterHeightProperty.hxx @@ -45,7 +45,7 @@ protected: virtual css::uno::Any convertInnerToOuterValue( const css::uno::Any& rInnerValue ) const override; virtual css::uno::Any convertOuterToInnerValue( const css::uno::Any& rOuterValue ) const override; -protected: +private: ReferenceSizePropertyProvider* m_pRefSizePropProvider; }; diff --git a/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.cxx index c0f100d335a7..079d25f63bb4 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.cxx @@ -17,10 +17,15 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <cstddef> + #include "WrappedGapwidthProperty.hxx" #include "Chart2ModelContact.hxx" -#include <DiagramHelper.hxx> +#include <ChartType.hxx> #include <tools/long.hxx> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; @@ -35,15 +40,15 @@ const sal_Int32 DEFAULT_OVERLAP = 0; WrappedBarPositionProperty_Base::WrappedBarPositionProperty_Base( const OUString& rOuterName - , const OUString& rInnerSequencePropertyName + , OUString aInnerSequencePropertyName , sal_Int32 nDefaultValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : WrappedDefaultProperty( rOuterName, OUString(), uno::Any( nDefaultValue ) ) , m_nDimensionIndex(0) , m_nAxisIndex(0) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_nDefaultValue( nDefaultValue ) - , m_InnerSequencePropertyName( rInnerSequencePropertyName ) + , m_InnerSequencePropertyName(std::move( aInnerSequencePropertyName )) { } @@ -72,29 +77,25 @@ void WrappedBarPositionProperty_Base::setPropertyValue( const Any& rOuterValue, if( m_nDimensionIndex!=1 ) return; - const Sequence< Reference< chart2::XChartType > > aChartTypeList( DiagramHelper::getChartTypesFromDiagram( xDiagram ) ); - for( Reference< chart2::XChartType > const & chartType : aChartTypeList ) + const std::vector< rtl::Reference< ChartType > > aChartTypeList( xDiagram->getChartTypes() ); + for( rtl::Reference< ChartType > const & chartType : aChartTypeList ) { try { - Reference< beans::XPropertySet > xProp( chartType, uno::UNO_QUERY ); - if( xProp.is() ) + Sequence< sal_Int32 > aBarPositionSequence; + chartType->getPropertyValue( m_InnerSequencePropertyName ) >>= aBarPositionSequence; + + tools::Long nOldLength = aBarPositionSequence.getLength(); + if( nOldLength <= m_nAxisIndex ) + aBarPositionSequence.realloc( m_nAxisIndex+1 ); + auto pBarPositionSequence = aBarPositionSequence.getArray(); + for( sal_Int32 i=nOldLength; i<m_nAxisIndex; i++ ) { - Sequence< sal_Int32 > aBarPositionSequence; - xProp->getPropertyValue( m_InnerSequencePropertyName ) >>= aBarPositionSequence; - - tools::Long nOldLength = aBarPositionSequence.getLength(); - if( nOldLength <= m_nAxisIndex ) - aBarPositionSequence.realloc( m_nAxisIndex+1 ); - auto pBarPositionSequence = aBarPositionSequence.getArray(); - for( sal_Int32 i=nOldLength; i<m_nAxisIndex; i++ ) - { - pBarPositionSequence[i] = m_nDefaultValue; - } - pBarPositionSequence[m_nAxisIndex] = nNewValue; - - xProp->setPropertyValue( m_InnerSequencePropertyName, uno::Any( aBarPositionSequence ) ); + pBarPositionSequence[i] = m_nDefaultValue; } + pBarPositionSequence[m_nAxisIndex] = nNewValue; + + chartType->setPropertyValue( m_InnerSequencePropertyName, uno::Any( aBarPositionSequence ) ); } catch( uno::Exception& e ) { @@ -115,21 +116,17 @@ Any WrappedBarPositionProperty_Base::getPropertyValue( const Reference< beans::X if( m_nDimensionIndex==1 ) { - Sequence< Reference< chart2::XChartType > > aChartTypeList( DiagramHelper::getChartTypesFromDiagram( xDiagram ) ); - for( sal_Int32 nN = 0; nN < aChartTypeList.getLength() && !bInnerValueDetected; nN++ ) + std::vector< rtl::Reference< ChartType > > aChartTypeList = xDiagram->getChartTypes(); + for( std::size_t nN = 0; nN < aChartTypeList.size() && !bInnerValueDetected; nN++ ) { try { - Reference< beans::XPropertySet > xProp( aChartTypeList[nN], uno::UNO_QUERY ); - if( xProp.is() ) + Sequence< sal_Int32 > aBarPositionSequence; + aChartTypeList[nN]->getPropertyValue( m_InnerSequencePropertyName ) >>= aBarPositionSequence; + if( m_nAxisIndex < aBarPositionSequence.getLength() ) { - Sequence< sal_Int32 > aBarPositionSequence; - xProp->getPropertyValue( m_InnerSequencePropertyName ) >>= aBarPositionSequence; - if( m_nAxisIndex < aBarPositionSequence.getLength() ) - { - nInnerValue = aBarPositionSequence[m_nAxisIndex]; - bInnerValueDetected = true; - } + nInnerValue = aBarPositionSequence[m_nAxisIndex]; + bInnerValueDetected = true; } } catch( uno::Exception& e ) diff --git a/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.hxx index 550b0ce6ad9d..6ac43e9f7635 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedGapwidthProperty.hxx @@ -32,9 +32,9 @@ class WrappedBarPositionProperty_Base : public WrappedDefaultProperty public: WrappedBarPositionProperty_Base( const OUString& rOuterName - , const OUString& rInnerSequencePropertyName + , OUString aInnerSequencePropertyName , sal_Int32 nDefaultValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); virtual ~WrappedBarPositionProperty_Base() override; virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; @@ -43,7 +43,7 @@ public: void setDimensionAndAxisIndex( sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ); -protected: +private: sal_Int32 m_nDimensionIndex; sal_Int32 m_nAxisIndex; std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; diff --git a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx index 1ce277c321ba..0598b4fd377f 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx @@ -19,9 +19,10 @@ #include "WrappedNumberFormatProperty.hxx" #include "Chart2ModelContact.hxx" -#include <com/sun/star/chart2/XAxis.hpp> +#include <Axis.hxx> #include <com/sun/star/chart2/XDataSeries.hpp> #include <unonames.hxx> +#include <utility> #include <osl/diagnose.h> using namespace ::com::sun::star; @@ -31,9 +32,9 @@ using ::com::sun::star::uno::Any; namespace chart::wrapper { -WrappedNumberFormatProperty::WrappedNumberFormatProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedNumberFormatProperty::WrappedNumberFormatProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedDirectStateProperty( CHART_UNONAME_NUMFMT, CHART_UNONAME_NUMFMT ) - , m_spChart2ModelContact(spChart2ModelContact) + , m_spChart2ModelContact(std::move(spChart2ModelContact)) { } @@ -67,7 +68,8 @@ Any WrappedNumberFormatProperty::getPropertyValue( const Reference< beans::XProp nKey = Chart2ModelContact::getExplicitNumberFormatKeyForSeries( xSeries ); else { - Reference< chart2::XAxis > xAxis( xInnerPropertySet, uno::UNO_QUERY ); + rtl::Reference< Axis > xAxis = dynamic_cast<Axis*>(xInnerPropertySet.get()); + assert(xAxis || !xInnerPropertySet); nKey = m_spChart2ModelContact->getExplicitNumberFormatKeyForAxis( xAxis ); } aRet <<= nKey; diff --git a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx index fa4042ceaedf..cf2f706c61c7 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx @@ -31,7 +31,7 @@ namespace chart::wrapper class WrappedNumberFormatProperty : public WrappedDirectStateProperty { public: - explicit WrappedNumberFormatProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedNumberFormatProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~WrappedNumberFormatProperty() override; virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; diff --git a/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.cxx index 27e07256e51d..0edbf16bc9fb 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.cxx @@ -20,11 +20,13 @@ #include "WrappedScaleProperty.hxx" #include "Chart2ModelContact.hxx" #include <CommonConverters.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <com/sun/star/chart2/AxisType.hpp> #include <com/sun/star/chart2/XAxis.hpp> #include <com/sun/star/chart/ChartAxisType.hpp> #include <chartview/ExplicitScaleValues.hxx> +#include <utility> #include <osl/diagnose.h> using namespace ::com::sun::star; @@ -38,9 +40,9 @@ namespace chart::wrapper { WrappedScaleProperty::WrappedScaleProperty(tScaleProperty eScaleProperty - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : WrappedProperty(OUString(),OUString()) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) , m_eScaleProperty( eScaleProperty ) { switch( m_eScaleProperty ) @@ -348,7 +350,7 @@ Any WrappedScaleProperty::getPropertyValue( tScaleProperty eScaleProperty, const { Any aRet( m_aOuterValue ); - Reference< chart2::XAxis > xAxis( xInnerPropertySet, uno::UNO_QUERY ); + rtl::Reference< Axis > xAxis = dynamic_cast<Axis*>(xInnerPropertySet.get()); OSL_ENSURE(xAxis.is(),"need an XAxis"); if(!xAxis.is()) return aRet; diff --git a/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.hxx index 64e8071b5345..eca52953552d 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedScaleProperty.hxx @@ -51,7 +51,7 @@ public: , SCALE_PROP_REVERSEDIRECTION }; - WrappedScaleProperty(tScaleProperty eScaleProperty, const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + WrappedScaleProperty(tScaleProperty eScaleProperty, std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~WrappedScaleProperty() override; static void addWrappedProperties( std::vector< std::unique_ptr<WrappedProperty> >& rList, const std::shared_ptr< Chart2ModelContact >& spChart2ModelContact ); diff --git a/chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.cxx index 8551915d9c88..6e11fbe021a2 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedScaleTextProperties.cxx @@ -25,7 +25,8 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/beans/XPropertySet.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using ::com::sun::star::uno::Any; @@ -40,7 +41,7 @@ namespace { class WrappedScaleTextProperty : public WrappedProperty { public: - explicit WrappedScaleTextProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + explicit WrappedScaleTextProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual void setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const override; virtual Any getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const override; @@ -52,15 +53,15 @@ private: } -WrappedScaleTextProperty::WrappedScaleTextProperty(const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact) +WrappedScaleTextProperty::WrappedScaleTextProperty(std::shared_ptr<Chart2ModelContact> spChart2ModelContact) : ::chart::WrappedProperty( "ScaleText" , OUString() ) - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } void WrappedScaleTextProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const { - static constexpr OUStringLiteral aRefSizeName = u"ReferencePageSize"; + static constexpr OUString aRefSizeName = u"ReferencePageSize"_ustr; if( !xInnerPropertySet.is() ) return; diff --git a/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.cxx index 2430dcba7ac6..5c22750dc17b 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.cxx @@ -19,8 +19,8 @@ #include "WrappedSceneProperty.hxx" #include "Chart2ModelContact.hxx" -#include <DiagramHelper.hxx> #include <BaseGFXHelper.hxx> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::uno::Any; @@ -36,9 +36,9 @@ void WrappedSceneProperty::addWrappedProperties( std::vector< std::unique_ptr<Wr } WrappedD3DTransformMatrixProperty::WrappedD3DTransformMatrixProperty( - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) + std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : WrappedProperty("D3DTransformMatrix","D3DTransformMatrix") - , m_spChart2ModelContact( spChart2ModelContact ) + , m_spChart2ModelContact(std::move( spChart2ModelContact )) { } @@ -48,7 +48,7 @@ WrappedD3DTransformMatrixProperty::~WrappedD3DTransformMatrixProperty() void WrappedD3DTransformMatrixProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const { - if( DiagramHelper::isPieOrDonutChart( m_spChart2ModelContact->getDiagram() ) ) + if( m_spChart2ModelContact->getDiagram()->isPieOrDonutChart() ) { drawing::HomogenMatrix aHM; if( rOuterValue >>= aHM ) @@ -73,7 +73,7 @@ void WrappedD3DTransformMatrixProperty::setPropertyValue( const Any& rOuterValue Any WrappedD3DTransformMatrixProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const { - if( DiagramHelper::isPieOrDonutChart( m_spChart2ModelContact->getDiagram() ) ) + if( m_spChart2ModelContact->getDiagram()->isPieOrDonutChart() ) { uno::Any aAMatrix( WrappedProperty::getPropertyValue( xInnerPropertySet ) ); drawing::HomogenMatrix aHM; diff --git a/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.hxx index 7e6679016537..31ef35abc566 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSceneProperty.hxx @@ -39,7 +39,7 @@ class WrappedD3DTransformMatrixProperty : public WrappedProperty { public: explicit WrappedD3DTransformMatrixProperty( - const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact); + std::shared_ptr<Chart2ModelContact> spChart2ModelContact); virtual ~WrappedD3DTransformMatrixProperty() override; virtual void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; diff --git a/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.cxx index 88fa72696c03..5b073ca80152 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <utility> + #include "WrappedSeriesAreaOrLineProperty.hxx" #include "DataSeriesPointWrapper.hxx" @@ -25,13 +27,13 @@ namespace chart::wrapper WrappedSeriesAreaOrLineProperty::WrappedSeriesAreaOrLineProperty( const OUString& rOuterName - , const OUString& rInnerAreaTypeName - , const OUString& rInnerLineTypeName + , OUString aInnerAreaTypeName + , OUString aInnerLineTypeName , DataSeriesPointWrapper* pDataSeriesPointWrapper ) : WrappedProperty( rOuterName, OUString() ) , m_pDataSeriesPointWrapper( pDataSeriesPointWrapper ) - , m_aInnerAreaTypeName( rInnerAreaTypeName ) - , m_aInnerLineTypeName( rInnerLineTypeName ) + , m_aInnerAreaTypeName(std::move( aInnerAreaTypeName )) + , m_aInnerLineTypeName(std::move( aInnerLineTypeName )) { } WrappedSeriesAreaOrLineProperty::~WrappedSeriesAreaOrLineProperty() diff --git a/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.hxx index ba77b6939f34..f3561e7361d4 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSeriesAreaOrLineProperty.hxx @@ -28,7 +28,7 @@ class WrappedSeriesAreaOrLineProperty : public WrappedProperty { public: WrappedSeriesAreaOrLineProperty( const OUString& rOuterName - , const OUString& rInnerAreaTypeName, const OUString& rInnerLineTypeName + , OUString aInnerAreaTypeName, OUString aInnerLineTypeName , DataSeriesPointWrapper* pDataSeriesPointWrapper ); virtual ~WrappedSeriesAreaOrLineProperty() override; diff --git a/chart2/source/controller/chartapiwrapper/WrappedSeriesOrDiagramProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedSeriesOrDiagramProperty.hxx index 88dc862ea2d9..8b0b54db3d7a 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSeriesOrDiagramProperty.hxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSeriesOrDiagramProperty.hxx @@ -20,9 +20,10 @@ #include <WrappedProperty.hxx> #include "Chart2ModelContact.hxx" -#include <DiagramHelper.hxx> +#include <DataSeries.hxx> #include <memory> +#include <utility> #include <vector> namespace com::sun::star::chart2 { class XDataSeries; } @@ -46,10 +47,10 @@ public: virtual void setValueToSeries( const css::uno::Reference< css::beans::XPropertySet >& xSeriesPropertySet, const PROPERTYTYPE & aNewValue ) const =0; explicit WrappedSeriesOrDiagramProperty( const OUString& rName, const css::uno::Any& rDefaulValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact , tSeriesOrDiagramPropertyType ePropertyType ) : WrappedProperty(rName,OUString()) - , m_spChart2ModelContact(spChart2ModelContact) + , m_spChart2ModelContact(std::move(spChart2ModelContact)) , m_aOuterValue(rDefaulValue) , m_aDefaultValue(rDefaulValue) , m_ePropertyType( ePropertyType ) @@ -58,30 +59,31 @@ public: bool detectInnerValue( PROPERTYTYPE& rValue, bool& rHasAmbiguousValue ) const { - bool bHasDetectableInnerValue = false; rHasAmbiguousValue = false; - if( m_ePropertyType == DIAGRAM && - m_spChart2ModelContact ) + if( m_ePropertyType != DIAGRAM || !m_spChart2ModelContact ) + return false; + bool bHasDetectableInnerValue = false; + rtl::Reference<Diagram> xDiagram = m_spChart2ModelContact->getDiagram(); + if (!xDiagram) + return false; + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); + for (auto const& series : aSeriesVector) { - std::vector< css::uno::Reference< css::chart2::XDataSeries > > aSeriesVector( - ::chart::DiagramHelper::getDataSeriesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); - for (auto const& series : aSeriesVector) + PROPERTYTYPE aCurValue = getValueFromSeries( series ); + if( !bHasDetectableInnerValue ) + rValue = aCurValue; + else { - PROPERTYTYPE aCurValue = getValueFromSeries( css::uno::Reference< css::beans::XPropertySet >::query(series) ); - if( !bHasDetectableInnerValue ) - rValue = aCurValue; - else + if( rValue != aCurValue ) { - if( rValue != aCurValue ) - { - rHasAmbiguousValue = true; - break; - } - else - rValue = aCurValue; + rHasAmbiguousValue = true; + break; } - bHasDetectableInnerValue = true; + else + rValue = aCurValue; } + bHasDetectableInnerValue = true; } return bHasDetectableInnerValue; } @@ -90,15 +92,11 @@ public: if( m_ePropertyType == DIAGRAM && m_spChart2ModelContact ) { - std::vector< css::uno::Reference< css::chart2::XDataSeries > > aSeriesVector( - ::chart::DiagramHelper::getDataSeriesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + m_spChart2ModelContact->getDiagram()->getDataSeries(); for (auto const& series : aSeriesVector) { - css::uno::Reference< css::beans::XPropertySet > xSeriesPropertySet(series, css::uno::UNO_QUERY); - if( xSeriesPropertySet.is() ) - { - setValueToSeries( xSeriesPropertySet, aNewValue ); - } + setValueToSeries( series, aNewValue ); } } } diff --git a/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx index 6d088a50bd81..53ce90fa24f9 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx @@ -20,7 +20,7 @@ #include "WrappedSplineProperties.hxx" #include "Chart2ModelContact.hxx" #include <FastPropertyIdRanges.hxx> -#include <DiagramHelper.hxx> +#include <ChartType.hxx> #include <WrappedProperty.hxx> #include <unonames.hxx> @@ -29,10 +29,10 @@ #include <com/sun/star/chart2/CurveStyle.hpp> #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/beans/XPropertySet.hpp> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::Sequence; using ::com::sun::star::beans::Property; namespace chart::wrapper @@ -47,32 +47,30 @@ template< typename PROPERTYTYPE > class WrappedSplineProperty : public WrappedProperty { public: - explicit WrappedSplineProperty( const OUString& rOuterName, const OUString& rInnerName + explicit WrappedSplineProperty( const OUString& rOuterName, OUString aInnerName , const css::uno::Any& rDefaulValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : WrappedProperty(rOuterName,OUString()) - , m_spChart2ModelContact(spChart2ModelContact) + , m_spChart2ModelContact(std::move(spChart2ModelContact)) , m_aOuterValue(rDefaulValue) , m_aDefaultValue(rDefaulValue) - , m_aOwnInnerName(rInnerName) + , m_aOwnInnerName(std::move(aInnerName)) { } bool detectInnerValue( PROPERTYTYPE& rValue, bool& rHasAmbiguousValue ) const { - bool bHasDetectableInnerValue = false; rHasAmbiguousValue = false; - Sequence< css::uno::Reference< css::chart2::XChartType > > aChartTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); - for( sal_Int32 nN = aChartTypes.getLength(); nN--; ) + rtl::Reference<Diagram> xDiagram = m_spChart2ModelContact->getDiagram(); + if (!xDiagram) + return false; + bool bHasDetectableInnerValue = false; + std::vector< rtl::Reference< ChartType > > aChartTypes = xDiagram->getChartTypes(); + for( sal_Int32 nN = aChartTypes.size(); nN--; ) { try { - uno::Reference<beans::XPropertySet> xChartTypePropertySet(aChartTypes[nN], uno::UNO_QUERY); - if (!xChartTypePropertySet.is()) - continue; - - Any aSingleValue = convertInnerToOuterValue( xChartTypePropertySet->getPropertyValue(m_aOwnInnerName) ); + Any aSingleValue = convertInnerToOuterValue( aChartTypes[nN]->getPropertyValue(m_aOwnInnerName) ); PROPERTYTYPE aCurValue = PROPERTYTYPE(); aSingleValue >>= aCurValue; if( !bHasDetectableInnerValue ) @@ -114,17 +112,13 @@ public: if( !(bHasAmbiguousValue || aNewValue != aOldValue) ) return; - Sequence< css::uno::Reference< css::chart2::XChartType > > aChartTypes( - ::chart::DiagramHelper::getChartTypesFromDiagram( m_spChart2ModelContact->getDiagram() ) ); - for( sal_Int32 nN = aChartTypes.getLength(); nN--; ) + std::vector< rtl::Reference< ChartType > > aChartTypes = + m_spChart2ModelContact->getDiagram()->getChartTypes(); + for( sal_Int32 nN = aChartTypes.size(); nN--; ) { try { - css::uno::Reference< css::beans::XPropertySet > xChartTypePropertySet( aChartTypes[nN], css::uno::UNO_QUERY ); - if( xChartTypePropertySet.is() ) - { - xChartTypePropertySet->setPropertyValue(m_aOwnInnerName,convertOuterToInnerValue(uno::Any(aNewValue))); - } + aChartTypes[nN]->setPropertyValue(m_aOwnInnerName,convertOuterToInnerValue(uno::Any(aNewValue))); } catch( uno::Exception & ex ) { diff --git a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx index bc83ba60df87..e5278bb5da49 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx @@ -21,6 +21,7 @@ #include "WrappedSeriesOrDiagramProperty.hxx" #include <FastPropertyIdRanges.hxx> #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> #include <ErrorBar.hxx> #include <StatisticsHelper.hxx> #include <unonames.hxx> @@ -31,7 +32,6 @@ #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <com/sun/star/chart/ChartErrorIndicatorType.hpp> #include <com/sun/star/chart/ChartRegressionCurveType.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/data/XRangeXMLConversion.hpp> #include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <utility> @@ -144,8 +144,7 @@ void lcl_ConvertRangeFromXML( lcl_getDataProviderFromContact( spChart2ModelContact ), uno::UNO_QUERY ); if( xConverter.is()) { - OUString aResult = xConverter->convertRangeFromXML( rInOutRange ); - rInOutRange = aResult; + rInOutRange = xConverter->convertRangeFromXML( rInOutRange ); } } } @@ -160,8 +159,7 @@ void lcl_ConvertRangeToXML( lcl_getDataProviderFromContact( spChart2ModelContact ), uno::UNO_QUERY ); if( xConverter.is()) { - OUString aResult = xConverter->convertRangeToXML( rInOutRange ); - rInOutRange = aResult; + rInOutRange = xConverter->convertRangeToXML( rInOutRange ); } } } @@ -840,9 +838,10 @@ css::chart::ChartRegressionCurveType WrappedRegressionCurvesProperty::getValueFr void WrappedRegressionCurvesProperty::setValueToSeries( const Reference< beans::XPropertySet >& xSeriesPropertySet, const css::chart::ChartRegressionCurveType& aNewValue ) const { uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( xSeriesPropertySet, uno::UNO_QUERY ); - uno::Reference< chart2::XRegressionCurve > xRegressionCurve( xSeriesPropertySet, uno::UNO_QUERY ); - - if( xRegressionCurveContainer.is() && xRegressionCurve.is() ) + if (!xRegressionCurveContainer) + return; + rtl::Reference< ::chart::RegressionCurveModel> xRegressionCurve = RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegressionCurveContainer ); + if( xRegressionCurve.is() ) { SvxChartRegress eNewRegressionType = lcl_getRegressionType( aNewValue ); @@ -906,7 +905,7 @@ Reference< beans::XPropertySet > WrappedStatisticPropertySetProperty::getValueFr { case PROPERTY_SET_TYPE_REGRESSION: if( xRegCnt.is() ) - xResult.set( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt ), uno::UNO_QUERY ); + xResult = RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt ); break; case PROPERTY_SET_TYPE_ERROR_BAR: if( xSeriesPropertySet.is()) @@ -914,7 +913,7 @@ Reference< beans::XPropertySet > WrappedStatisticPropertySetProperty::getValueFr break; case PROPERTY_SET_TYPE_MEAN_VALUE: if( xRegCnt.is() ) - xResult.set( RegressionCurveHelper::getMeanValueLine( xRegCnt ), uno::UNO_QUERY ); + xResult = RegressionCurveHelper::getMeanValueLine( xRegCnt ); break; } diff --git a/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx index 3a8068ec984a..093321843018 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx @@ -20,15 +20,14 @@ #include "WrappedStockProperties.hxx" #include "Chart2ModelContact.hxx" #include <FastPropertyIdRanges.hxx> -#include <DiagramHelper.hxx> +#include <DataSeries.hxx> #include <ControllerLockGuard.hxx> #include <WrappedProperty.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/beans/PropertyAttribute.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <ChartTypeManager.hxx> #include <ChartTypeTemplate.hxx> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; @@ -43,14 +42,14 @@ class WrappedStockProperty : public WrappedProperty { public: explicit WrappedStockProperty( const OUString& rOuterName - , const css::uno::Any& rDefaulValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ); + , css::uno::Any aDefaultValue + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ); void setPropertyValue( const css::uno::Any& rOuterValue, const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; css::uno::Any getPropertyDefault( const css::uno::Reference< css::beans::XPropertyState >& xInnerPropertyState ) const override; - virtual uno::Reference< chart2::XChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const Reference< lang::XMultiServiceFactory >& xFactory ) const = 0; + virtual rtl::Reference< ::chart::ChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const rtl::Reference< ::chart::ChartTypeManager >& xFactory ) const = 0; protected: std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; @@ -61,11 +60,11 @@ protected: } WrappedStockProperty::WrappedStockProperty( const OUString& rOuterName - , const css::uno::Any& rDefaulValue - , const std::shared_ptr<Chart2ModelContact>& spChart2ModelContact ) + , css::uno::Any aDefaultValue + , std::shared_ptr<Chart2ModelContact> spChart2ModelContact ) : WrappedProperty(rOuterName,OUString()) - , m_spChart2ModelContact(spChart2ModelContact) - , m_aDefaultValue(rDefaulValue) + , m_spChart2ModelContact(std::move(spChart2ModelContact)) + , m_aDefaultValue(std::move(aDefaultValue)) { } @@ -79,15 +78,17 @@ void WrappedStockProperty::setPropertyValue( const css::uno::Any& rOuterValue, c rtl::Reference< ChartModel > xChartDoc( m_spChart2ModelContact->getDocumentModel() ); rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - sal_Int32 nDimension = ::chart::DiagramHelper::getDimension( xDiagram ); - if( !(xChartDoc.is() && xDiagram.is() && nDimension==2) ) + if( !xChartDoc || !xDiagram ) + return; + sal_Int32 nDimension = xDiagram->getDimension(); + if( nDimension != 2 ) return; rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); - uno::Reference< chart2::XChartTypeTemplate > xTemplate = + rtl::Reference< ::chart::ChartTypeTemplate > xTemplate = getNewTemplate( bNewValue, aTemplateAndService.sServiceName, xChartTypeManager ); if(!xTemplate.is()) @@ -119,7 +120,7 @@ public: css::uno::Any getPropertyValue( const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; - uno::Reference< chart2::XChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const Reference< lang::XMultiServiceFactory >& xFactory ) const override; + rtl::Reference< ::chart::ChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const rtl::Reference< ::chart::ChartTypeManager >& xFactory ) const override; }; } @@ -135,13 +136,13 @@ css::uno::Any WrappedVolumeProperty::getPropertyValue( const css::uno::Reference rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); if( xDiagram.is() && xChartDoc.is() ) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesVector( - DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); if( !aSeriesVector.empty() ) { rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); if( aTemplateAndService.sServiceName == "com.sun.star.chart2.template.StockVolumeLowHighClose" || aTemplateAndService.sServiceName == "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ) @@ -155,9 +156,9 @@ css::uno::Any WrappedVolumeProperty::getPropertyValue( const css::uno::Reference return m_aOuterValue; } -uno::Reference< chart2::XChartTypeTemplate > WrappedVolumeProperty::getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const Reference< lang::XMultiServiceFactory >& xFactory ) const +rtl::Reference< ::chart::ChartTypeTemplate > WrappedVolumeProperty::getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const rtl::Reference< ::chart::ChartTypeManager >& xFactory ) const { - uno::Reference< chart2::XChartTypeTemplate > xTemplate; + rtl::Reference< ::chart::ChartTypeTemplate > xTemplate; if(!xFactory.is()) return xTemplate; @@ -165,16 +166,16 @@ uno::Reference< chart2::XChartTypeTemplate > WrappedVolumeProperty::getNewTempla if( bNewValue ) //add volume { if( rCurrentTemplate == "com.sun.star.chart2.template.StockLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockVolumeLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockVolumeLowHighClose" ); else if( rCurrentTemplate == "com.sun.star.chart2.template.StockOpenLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ); } else //remove volume { if( rCurrentTemplate == "com.sun.star.chart2.template.StockVolumeLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockLowHighClose" ); else if( rCurrentTemplate == "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockOpenLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockOpenLowHighClose" ); } return xTemplate; } @@ -188,7 +189,7 @@ public: css::uno::Any getPropertyValue( const css::uno::Reference< css::beans::XPropertySet >& xInnerPropertySet ) const override; - uno::Reference< chart2::XChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const Reference< lang::XMultiServiceFactory >& xFactory ) const override; + rtl::Reference< ::chart::ChartTypeTemplate > getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const rtl::Reference< ChartTypeManager >& xFactory ) const override; }; } @@ -204,13 +205,13 @@ css::uno::Any WrappedUpDownProperty::getPropertyValue( const css::uno::Reference rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); if( xDiagram.is() && xChartDoc.is() ) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesVector( - DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); if( !aSeriesVector.empty() ) { rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = xChartDoc->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); if( aTemplateAndService.sServiceName == "com.sun.star.chart2.template.StockOpenLowHighClose" || aTemplateAndService.sServiceName == "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ) @@ -223,22 +224,22 @@ css::uno::Any WrappedUpDownProperty::getPropertyValue( const css::uno::Reference } return m_aOuterValue; } -uno::Reference< chart2::XChartTypeTemplate > WrappedUpDownProperty::getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const Reference< lang::XMultiServiceFactory >& xFactory ) const +rtl::Reference< ::chart::ChartTypeTemplate > WrappedUpDownProperty::getNewTemplate( bool bNewValue, const OUString& rCurrentTemplate, const rtl::Reference< ChartTypeManager >& xFactory ) const { - uno::Reference< chart2::XChartTypeTemplate > xTemplate; + rtl::Reference< ::chart::ChartTypeTemplate > xTemplate; if( bNewValue ) //add open series { if( rCurrentTemplate == "com.sun.star.chart2.template.StockLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockOpenLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockOpenLowHighClose" ); else if( rCurrentTemplate == "com.sun.star.chart2.template.StockVolumeLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ); } else //remove open series { if( rCurrentTemplate == "com.sun.star.chart2.template.StockOpenLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockLowHighClose" ); else if( rCurrentTemplate == "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ) - xTemplate.set( xFactory->createInstance( "com.sun.star.chart2.template.StockVolumeLowHighClose" ), uno::UNO_QUERY ); + xTemplate = xFactory->createTemplate( "com.sun.star.chart2.template.StockVolumeLowHighClose" ); } return xTemplate; } diff --git a/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx index 484861b68338..79c45ea1d888 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx @@ -20,6 +20,7 @@ #include "WrappedSymbolProperties.hxx" #include "WrappedSeriesOrDiagramProperty.hxx" #include <FastPropertyIdRanges.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <com/sun/star/chart2/Symbol.hpp> #include <com/sun/star/chart2/SymbolStyle.hpp> @@ -31,7 +32,7 @@ #include <vcl/GraphicLoader.hxx> #include <vcl/graph.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using ::com::sun::star::uno::Any; @@ -285,8 +286,8 @@ beans::PropertyState WrappedSymbolTypeProperty::getPropertyState( const Referenc m_spChart2ModelContact) { rtl::Reference< ::chart::Diagram > xDiagram( m_spChart2ModelContact->getDiagram() ); - Reference< chart2::XDataSeries > xSeries( xInnerPropertyState, uno::UNO_QUERY ); - Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) ); + rtl::Reference< ::chart::DataSeries > xSeries( dynamic_cast<DataSeries*>(xInnerPropertyState.get()) ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xSeries ) ); if( ChartTypeHelper::isSupportingSymbolProperties( xChartType, 2 ) ) return beans::PropertyState_DIRECT_VALUE; } diff --git a/chart2/source/controller/chartcontroller.component b/chart2/source/controller/chartcontroller.component index 01201cbb2494..ef8e748242e8 100644 --- a/chart2/source/controller/chartcontroller.component +++ b/chart2/source/controller/chartcontroller.component @@ -23,11 +23,6 @@ constructor="com_sun_star_comp_chart_ElementSelectorToolbarController_get_implementation"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> - <implementation name="com.sun.star.comp.chart2.ChartController" - constructor="com_sun_star_comp_chart2_ChartController_get_implementation"> - <service name="com.sun.star.chart2.ChartController"/> - <service name="com.sun.star.frame.Controller"/> - </implementation> <implementation name="com.sun.star.comp.chart2.ChartDocumentWrapper" constructor="com_sun_star_comp_chart2_ChartDocumentWrapper_get_implementation"> <service name="com.sun.star.beans.PropertySet"/> diff --git a/chart2/source/controller/dialogs/ChartResourceGroups.cxx b/chart2/source/controller/dialogs/ChartResourceGroups.cxx index 19534aa1e0b0..e1550d2766c7 100644 --- a/chart2/source/controller/dialogs/ChartResourceGroups.cxx +++ b/chart2/source/controller/dialogs/ChartResourceGroups.cxx @@ -205,22 +205,22 @@ SplineResourceGroup::SplineResourceGroup(weld::Builder* pBuilder, weld::Window* m_xLB_LineType->connect_changed(LINK(this, SplineResourceGroup, LineTypeChangeHdl)); } -SplinePropertiesDialog& SplineResourceGroup::getSplinePropertiesDialog() +std::shared_ptr<SplinePropertiesDialog> SplineResourceGroup::getSplinePropertiesDialog() { if (!m_xSplinePropertiesDialog) { m_xSplinePropertiesDialog.reset(new SplinePropertiesDialog(m_pParent)); } - return *m_xSplinePropertiesDialog; + return m_xSplinePropertiesDialog; } -SteppedPropertiesDialog& SplineResourceGroup::getSteppedPropertiesDialog() +std::shared_ptr<SteppedPropertiesDialog> SplineResourceGroup::getSteppedPropertiesDialog() { if (!m_xSteppedPropertiesDialog) { m_xSteppedPropertiesDialog.reset(new SteppedPropertiesDialog(m_pParent)); } - return *m_xSteppedPropertiesDialog; + return m_xSteppedPropertiesDialog; } void SplineResourceGroup::showControls(bool bShow) @@ -245,7 +245,7 @@ void SplineResourceGroup::fillControls(const ChartTypeParameter& rParameter) m_xPB_DetailsDialog->connect_clicked( LINK(this, SplineResourceGroup, SplineDetailsDialogHdl)); m_xPB_DetailsDialog->set_tooltip_text(SchResId(STR_DLG_SMOOTH_LINE_PROPERTIES)); - getSplinePropertiesDialog().fillControls(rParameter); + getSplinePropertiesDialog()->fillControls(rParameter); break; case CurveStyle_STEP_START: case CurveStyle_STEP_END: @@ -256,7 +256,7 @@ void SplineResourceGroup::fillControls(const ChartTypeParameter& rParameter) m_xPB_DetailsDialog->connect_clicked( LINK(this, SplineResourceGroup, SteppedDetailsDialogHdl)); m_xPB_DetailsDialog->set_tooltip_text(SchResId(STR_DLG_STEPPED_LINE_PROPERTIES)); - getSteppedPropertiesDialog().fillControls(rParameter); + getSteppedPropertiesDialog()->fillControls(rParameter); break; default: m_xLB_LineType->set_active(-1); @@ -268,10 +268,10 @@ void SplineResourceGroup::fillParameter(ChartTypeParameter& rParameter) switch (m_xLB_LineType->get_active()) { case POS_LINETYPE_SMOOTH: - getSplinePropertiesDialog().fillParameter(rParameter, true); + getSplinePropertiesDialog()->fillParameter(rParameter, true); break; case POS_LINETYPE_STEPPED: - getSteppedPropertiesDialog().fillParameter(rParameter, true); + getSteppedPropertiesDialog()->fillParameter(rParameter, true); break; default: // includes POS_LINETYPE_STRAIGHT rParameter.eCurveStyle = CurveStyle_LINES; @@ -288,43 +288,65 @@ IMPL_LINK_NOARG(SplineResourceGroup, LineTypeChangeHdl, weld::ComboBox&, void) IMPL_LINK_NOARG(SplineResourceGroup, SplineDetailsDialogHdl, weld::Button&, void) { ChartTypeParameter aOldParameter; - getSplinePropertiesDialog().fillParameter(aOldParameter, - m_xLB_LineType->get_active() == POS_LINETYPE_SMOOTH); + std::shared_ptr<SplinePropertiesDialog> xDlg = getSplinePropertiesDialog(); + xDlg->fillParameter(aOldParameter, m_xLB_LineType->get_active() == POS_LINETYPE_SMOOTH); const sal_Int32 iOldLineTypePos = m_xLB_LineType->get_active(); m_xLB_LineType->set_active(POS_LINETYPE_SMOOTH); - if (getSplinePropertiesDialog().run() == RET_OK) - { - if (m_pChangeListener) - m_pChangeListener->stateChanged(); - } - else - { - //restore old state: - m_xLB_LineType->set_active(iOldLineTypePos); - getSplinePropertiesDialog().fillControls(aOldParameter); - } + weld::GenericDialogController::runAsync(xDlg, [this, xDlg, aOldParameter, + iOldLineTypePos](sal_Int32 nResult) { + m_xSplinePropertiesDialog = nullptr; + auto xNewDlg = getSplinePropertiesDialog(); + + if (nResult == RET_OK) + { + ChartTypeParameter aNewParameter; + xDlg->fillParameter(aNewParameter, m_xLB_LineType->get_active() == POS_LINETYPE_SMOOTH); + xNewDlg->fillControls(aNewParameter); + + if (m_pChangeListener) + m_pChangeListener->stateChanged(); + } + else + { + //restore old state: + m_xLB_LineType->set_active(iOldLineTypePos); + xNewDlg->fillControls(aOldParameter); + } + }); } IMPL_LINK_NOARG(SplineResourceGroup, SteppedDetailsDialogHdl, weld::Button&, void) { ChartTypeParameter aOldParameter; - getSteppedPropertiesDialog().fillParameter(aOldParameter, m_xLB_LineType->get_active() - == POS_LINETYPE_STEPPED); + std::shared_ptr<SteppedPropertiesDialog> xDlg = getSteppedPropertiesDialog(); + xDlg->fillParameter(aOldParameter, m_xLB_LineType->get_active() == POS_LINETYPE_STEPPED); const sal_Int32 iOldLineTypePos = m_xLB_LineType->get_active(); m_xLB_LineType->set_active(POS_LINETYPE_STEPPED); - if (getSteppedPropertiesDialog().run() == RET_OK) - { - if (m_pChangeListener) - m_pChangeListener->stateChanged(); - } - else - { - //restore old state: - m_xLB_LineType->set_active(iOldLineTypePos); - getSteppedPropertiesDialog().fillControls(aOldParameter); - } + + weld::GenericDialogController::runAsync( + xDlg, [this, xDlg, aOldParameter, iOldLineTypePos](sal_Int32 nResult) { + m_xSteppedPropertiesDialog = nullptr; + auto xNewDlg = getSteppedPropertiesDialog(); + + if (nResult == RET_OK) + { + ChartTypeParameter aNewParameter; + xDlg->fillParameter(aNewParameter, + m_xLB_LineType->get_active() == POS_LINETYPE_STEPPED); + xNewDlg->fillControls(aNewParameter); + + if (m_pChangeListener) + m_pChangeListener->stateChanged(); + } + else + { + //restore old state: + m_xLB_LineType->set_active(iOldLineTypePos); + xDlg->fillControls(aOldParameter); + } + }); } GeometryResourceGroup::GeometryResourceGroup(weld::Builder* pBuilder) diff --git a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx index 06d2dd952892..35284fbb6bfc 100644 --- a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx +++ b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx @@ -24,7 +24,7 @@ #include <strings.hrc> #include <bitmaps.hlst> #include <ChartModelHelper.hxx> -#include <DiagramHelper.hxx> +#include <DataSeries.hxx> #include <Diagram.hxx> #include <ControllerLockGuard.hxx> #include <AxisHelper.hxx> @@ -33,14 +33,12 @@ #include <ChartModel.hxx> #include <com/sun/star/chart2/DataPointGeometry3D.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <svtools/valueset.hxx> #include <vcl/image.hxx> #include <vcl/settings.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { @@ -309,22 +307,23 @@ void ChartTypeDialogController::commitToModel( const ChartTypeParameter& rParame , const rtl::Reference<::chart::ChartModel>& xChartModel ) { rtl::Reference< ::chart::ChartTypeManager > xTemplateManager = xChartModel->getTypeManager(); - uno::Reference< XChartTypeTemplate > xTemplate( getCurrentTemplate( rParameter, xTemplateManager ) ); + rtl::Reference< ::chart::ChartTypeTemplate > xTemplate( getCurrentTemplate( rParameter, xTemplateManager ) ); if(!xTemplate.is()) return; // locked controllers ControllerLockGuardUNO aCtrlLockGuard( xChartModel ); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); - DiagramHelper::tTemplateWithServiceName aTemplateWithService( - DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager )); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); + Diagram::tTemplateWithServiceName aTemplateWithService; + if (xDiagram) + aTemplateWithService = xDiagram->getTemplate( xTemplateManager ); if( aTemplateWithService.xChartTypeTemplate.is()) - aTemplateWithService.xChartTypeTemplate->resetStyles( xDiagram ); + aTemplateWithService.xChartTypeTemplate->resetStyles2( xDiagram ); xTemplate->changeDiagram( xDiagram ); if( AllSettings::GetMathLayoutRTL() ) AxisHelper::setRTLAxisLayout( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 ) ); if( rParameter.b3DLook ) - ThreeDHelper::setScheme( xDiagram, rParameter.eThreeDLookScheme ); + xDiagram->setScheme( rParameter.eThreeDLookScheme ); if (xDiagram.is()) { @@ -567,6 +566,8 @@ const tTemplateServiceChartTypeParameterMap& PieChartDialogController::getTempla {"com.sun.star.chart2.template.PieAllExploded" , ChartTypeParameter(2,false,false)}, {"com.sun.star.chart2.template.Donut" , ChartTypeParameter(3,false,false)}, {"com.sun.star.chart2.template.DonutAllExploded" , ChartTypeParameter(4,false,false)}, + {"com.sun.star.chart2.template.BarOfPie" , ChartTypeParameter(5,false,false)}, + {"com.sun.star.chart2.template.PieOfPie" , ChartTypeParameter(6,false,false)}, {"com.sun.star.chart2.template.ThreeDPie" , ChartTypeParameter(1,false,true)}, {"com.sun.star.chart2.template.ThreeDPieAllExploded" , ChartTypeParameter(2,false,true)}, {"com.sun.star.chart2.template.ThreeDDonut" , ChartTypeParameter(3,false,true)}, @@ -590,11 +591,15 @@ void PieChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const Ch rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_CIRCLES_2D_EXPLODED)); rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_DONUT_2D)); rSubTypeList.InsertItem(4, Image(StockImage::Yes, BMP_DONUT_2D_EXPLODED)); + rSubTypeList.InsertItem(5, Image(StockImage::Yes, BMP_BAR_OF_PIE)); + rSubTypeList.InsertItem(6, Image(StockImage::Yes, BMP_PIE_OF_PIE)); } rSubTypeList.SetItemText( 1, SchResId( STR_NORMAL ) ); rSubTypeList.SetItemText( 2, SchResId( STR_PIE_EXPLODED ) ); rSubTypeList.SetItemText( 3, SchResId( STR_DONUT ) ); rSubTypeList.SetItemText( 4, SchResId( STR_DONUT_EXPLODED ) ); + rSubTypeList.SetItemText( 5, SchResId( STR_BAR_OF_PIE ) ); + rSubTypeList.SetItemText( 6, SchResId( STR_PIE_OF_PIE ) ); } bool PieChartDialogController::shouldShow_3DLookControl() const @@ -1156,7 +1161,7 @@ void CombiColumnLineChartDialogController::fillExtraControls( if (!m_xMF_NumberOfLines) return; - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); if(!xDiagram.is()) return; diff --git a/chart2/source/controller/dialogs/DataBrowser.cxx b/chart2/source/controller/dialogs/DataBrowser.cxx index ebe1941010ad..30182b95eeb8 100644 --- a/chart2/source/controller/dialogs/DataBrowser.cxx +++ b/chart2/source/controller/dialogs/DataBrowser.cxx @@ -22,6 +22,7 @@ #include "DataBrowser.hxx" #include "DataBrowserModel.hxx" #include <strings.hrc> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <DiagramHelper.hxx> #include <CommonConverters.hxx> @@ -31,6 +32,7 @@ #include <bitmaps.hlst> #include <helpids.h> #include <ChartModel.hxx> +#include <ChartType.hxx> #include <vcl/weld.hxx> #include <vcl/settings.hxx> @@ -41,8 +43,6 @@ #include <svl/numformat.hxx> #include <toolkit/helper/vclunohelper.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XChartType.hpp> #include <com/sun/star/container/XIndexReplace.hpp> #include <algorithm> @@ -170,7 +170,7 @@ public: void SetColor( const Color & rCol ); void SetPos(); void SetWidth( sal_Int32 nWidth ); - void SetChartType( const Reference< chart2::XChartType > & xChartType, + void SetChartType( const rtl::Reference< ::chart::ChartType > & xChartType, bool bSwapXAndYAxis ); void SetSeriesName( const OUString & rName ); void SetRange( sal_Int32 nStartCol, sal_Int32 nEndCol ); @@ -222,7 +222,7 @@ private: DECL_LINK( SeriesNameEdited, SeriesHeaderEdit&, void ); static OUString GetChartTypeImage( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bSwapXAndYAxis ); @@ -291,20 +291,15 @@ void SeriesHeader::SetPos() // series name edit field m_spSeriesName->set_margin_start(2); - aSize.setWidth(nSymbolHeight); - aSize.setHeight(12); - aSize = m_xDevice->LogicToPixel(aSize, MapMode(MapUnit::MapAppFont)); - aSize.setWidth(m_nWidth - aSize.Width() - 2); - m_spSeriesName->set_size_request(aSize.Width(), aSize.Height()); + sal_Int32 nHeightPx = m_xDevice->LogicToPixel(Size(0, 12), MapMode(MapUnit::MapAppFont)).Height(); + m_spSeriesName->set_size_request(m_nWidth - aSize.Width() - 2, nHeightPx); // color bar - aSize.setHeight(3); - aSize = m_xDevice->LogicToPixel(aSize, MapMode(MapUnit::MapAppFont)); - aSize.setWidth(m_nWidth); - m_spColorBar->set_size_request(aSize.Width(), aSize.Height()); + nHeightPx = m_xDevice->LogicToPixel(Size(0, 3), MapMode(MapUnit::MapAppFont)).Height(); + m_spColorBar->set_size_request(m_nWidth, nHeightPx); ScopedVclPtr<VirtualDevice> xVirDev(m_spColorBar->create_virtual_device()); - xVirDev->SetOutputSizePixel(aSize); + xVirDev->SetOutputSizePixel(Size(m_nWidth, nHeightPx)); xVirDev->SetFillColor(m_aColor); xVirDev->SetLineColor(m_aColor); xVirDev->DrawRect(tools::Rectangle(Point(0, 0), aSize)); @@ -323,7 +318,7 @@ void SeriesHeader::SetPixelWidth( sal_Int32 nWidth ) } void SeriesHeader::SetChartType( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ChartType > & xChartType, bool bSwapXAndYAxis ) { @@ -381,7 +376,7 @@ bool SeriesHeader::HasFocus() const } OUString SeriesHeader::GetChartTypeImage( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ChartType > & xChartType, bool bSwapXAndYAxis ) { @@ -620,7 +615,7 @@ void DataBrowser::RenewTable() GetDataWindow().LogicToPixel( Size( 42, 0 )).getWidth() )); OUString aDefaultSeriesName(SchResId(STR_COLUMN_LABEL)); - replaceParamterInString( aDefaultSeriesName, "%COLUMNNUMBER", OUString::number( 24 ) ); + replaceParamterInString( aDefaultSeriesName, u"%COLUMNNUMBER", OUString::number( 24 ) ); sal_Int32 nColumnWidth = GetDataWindow().GetTextWidth( aDefaultSeriesName ) + GetDataWindow().LogicToPixel(Point(8 + impl::SeriesHeader::GetRelativeAppFontXPosForNameField(), 0), MapMode(MapUnit::MapAppFont)).X(); sal_Int32 nColumnCount = m_apDataBrowserModel->getColumnCount(); @@ -644,19 +639,17 @@ void DataBrowser::RenewTable() for (auto const& elemHeader : aHeaders) { auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin ); - Reference< beans::XPropertySet > xSeriesProp( elemHeader.m_xDataSeries, uno::UNO_QUERY ); Color nColor; // @todo: Set "DraftColor", i.e. interpolated colors for gradients, bitmaps, etc. - if( xSeriesProp.is() && - ( xSeriesProp->getPropertyValue( "Color" ) >>= nColor )) + if( elemHeader.m_xDataSeries.is() && + ( elemHeader.m_xDataSeries->getPropertyValue( "Color" ) >>= nColor )) spHeader->SetColor( nColor ); spHeader->SetChartType( elemHeader.m_xChartType, elemHeader.m_bSwapXAndYAxis ); spHeader->SetSeriesName( - DataSeriesHelper::getDataSeriesLabel( - elemHeader.m_xDataSeries, - (elemHeader.m_xChartType.is() ? + elemHeader.m_xDataSeries->getLabelForRole( + elemHeader.m_xChartType.is() ? elemHeader.m_xChartType->getRoleOfSequenceForSeriesLabel() : - OUString("values-y")))); + OUString("values-y"))); // index is 1-based, as 0 is for the column that contains the row-numbers spHeader->SetRange( elemHeader.m_nStartColumn + 1, elemHeader.m_nEndColumn + 1 ); spHeader->SetGetFocusHdl( aFocusLink ); @@ -832,12 +825,11 @@ void DataBrowser::CellModified() } void DataBrowser::SetDataFromModel( - const rtl::Reference<::chart::ChartModel> & xChartDoc, - const Reference< uno::XComponentContext > & xContext ) + const rtl::Reference<::chart::ChartModel> & xChartDoc ) { m_xChartDoc = xChartDoc; - m_apDataBrowserModel.reset( new DataBrowserModel( m_xChartDoc, xContext )); + m_apDataBrowserModel.reset( new DataBrowserModel( m_xChartDoc )); m_spNumberFormatterWrapper = std::make_shared<NumberFormatterWrapper>(m_xChartDoc); @@ -1272,18 +1264,16 @@ void DataBrowser::RenewSeriesHeaders() for (auto const& elemHeader : aHeaders) { auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin ); - Reference< beans::XPropertySet > xSeriesProp(elemHeader.m_xDataSeries, uno::UNO_QUERY); Color nColor; - if( xSeriesProp.is() && - ( xSeriesProp->getPropertyValue( "Color" ) >>= nColor )) + if( elemHeader.m_xDataSeries.is() && + ( elemHeader.m_xDataSeries->getPropertyValue( "Color" ) >>= nColor )) spHeader->SetColor( nColor ); spHeader->SetChartType( elemHeader.m_xChartType, elemHeader.m_bSwapXAndYAxis ); spHeader->SetSeriesName( - DataSeriesHelper::getDataSeriesLabel( - elemHeader.m_xDataSeries, - (elemHeader.m_xChartType.is() ? + elemHeader.m_xDataSeries->getLabelForRole( + elemHeader.m_xChartType.is() ? elemHeader.m_xChartType->getRoleOfSequenceForSeriesLabel() : - OUString( "values-y")))); + OUString( "values-y"))); spHeader->SetRange( elemHeader.m_nStartColumn + 1, elemHeader.m_nEndColumn + 1 ); spHeader->SetGetFocusHdl( aFocusLink ); spHeader->SetEditChangedHdl( aSeriesHeaderChangedLink ); @@ -1360,18 +1350,17 @@ IMPL_LINK( DataBrowser, SeriesHeaderGotFocus, impl::SeriesHeaderEdit&, rEdit, vo IMPL_LINK( DataBrowser, SeriesHeaderChanged, impl::SeriesHeaderEdit&, rEdit, void ) { - Reference< chart2::XDataSeries > xSeries( - m_apDataBrowserModel->getDataSeriesByColumn( rEdit.getStartColumn() - 1 )); - Reference< chart2::data::XDataSource > xSource( xSeries, uno::UNO_QUERY ); - if( !xSource.is()) + rtl::Reference< DataSeries > xSeries = + m_apDataBrowserModel->getDataSeriesByColumn( rEdit.getStartColumn() - 1 ); + if( !xSeries.is()) return; - Reference< chart2::XChartType > xChartType( + rtl::Reference< ChartType > xChartType( m_apDataBrowserModel->getHeaderForSeries( xSeries ).m_xChartType ); if( xChartType.is()) { - Reference< chart2::data::XLabeledDataSequence > xLabeledSeq( - DataSeriesHelper::getDataSequenceByRole( xSource, xChartType->getRoleOfSequenceForSeriesLabel())); + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSeq = + DataSeriesHelper::getDataSequenceByRole( xSeries, xChartType->getRoleOfSequenceForSeriesLabel()); if( xLabeledSeq.is()) { Reference< container::XIndexReplace > xIndexReplace( xLabeledSeq->getLabel(), uno::UNO_QUERY ); diff --git a/chart2/source/controller/dialogs/DataBrowser.hxx b/chart2/source/controller/dialogs/DataBrowser.hxx index ec85160e4437..c1d6a72e6cf8 100644 --- a/chart2/source/controller/dialogs/DataBrowser.hxx +++ b/chart2/source/controller/dialogs/DataBrowser.hxx @@ -98,8 +98,7 @@ public: void SetReadOnly( bool bNewState ); bool IsReadOnly() const { return m_bIsReadOnly;} - void SetDataFromModel( const rtl::Reference<::chart::ChartModel> & xChartDoc, - const css::uno::Reference< css::uno::XComponentContext > & xContext ); + void SetDataFromModel( const rtl::Reference<::chart::ChartModel> & xChartDoc ); // predicates to determine what actions are possible at the current cursor // position. This depends on the implementation of the according mutators diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx b/chart2/source/controller/dialogs/DataBrowserModel.cxx index c73781770549..938da978dd07 100644 --- a/chart2/source/controller/dialogs/DataBrowserModel.cxx +++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx @@ -20,37 +20,34 @@ #include "DataBrowserModel.hxx" #include "DialogModel.hxx" #include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <ChartTypeManager.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <ControllerLockGuard.hxx> #include <StatisticsHelper.hxx> #include <ChartTypeHelper.hxx> -#include <ChartTypeTemplate.hxx> #include <chartview/ExplicitValueProvider.hxx> #include <ExplicitCategoriesProvider.hxx> #include <BaseCoordinateSystem.hxx> - #include <ChartModel.hxx> #include <unonames.hxx> #include <com/sun/star/container/XIndexReplace.hpp> -#include <com/sun/star/chart2/XDataSeriesContainer.hpp> #include <com/sun/star/chart2/XInternalDataProvider.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> #include <com/sun/star/chart2/data/XDataSource.hpp> #include <com/sun/star/chart2/data/XLabeledDataSequence.hpp> #include <com/sun/star/chart2/data/XNumericalDataSequence.hpp> #include <com/sun/star/chart2/data/XTextualDataSequence.hpp> -#include <com/sun/star/util/XModifiable.hpp> #include <o3tl/safeint.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <comphelper/property.hxx> #include <algorithm> +#include <cstddef> #include <limits> +#include <utility> using namespace ::com::sun::star; @@ -99,7 +96,7 @@ void lcl_copyDataSequenceProperties( } bool lcl_SequenceOfSeriesIsShared( - const Reference< chart2::XDataSeries > & xSeries, + const rtl::Reference< ::chart::DataSeries > & xSeries, const Reference< chart2::data::XDataSequence > & xValues ) { bool bResult = false; @@ -109,9 +106,8 @@ bool lcl_SequenceOfSeriesIsShared( { OUString aValuesRole( lcl_getRole( xValues )); OUString aValuesRep( xValues->getSourceRangeRepresentation()); - Reference< chart2::data::XDataSource > xSource( xSeries, uno::UNO_QUERY_THROW ); - const Sequence< Reference< chart2::data::XLabeledDataSequence > > aLSeq( xSource->getDataSequences()); - for( Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : aLSeq ) + const std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > & aLSeq( xSeries->getDataSequences2()); + for( uno::Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : aLSeq ) if (labeledDataSeq.is() && DataSeriesHelper::getRole(labeledDataSeq) == aValuesRole) { // getValues().is(), because lcl_getRole checked that already @@ -127,24 +123,22 @@ bool lcl_SequenceOfSeriesIsShared( return bResult; } -typedef std::vector< Reference< chart2::data::XLabeledDataSequence > > lcl_tSharedSeqVec; +typedef std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > lcl_tSharedSeqVec; -lcl_tSharedSeqVec lcl_getSharedSequences( const Sequence< Reference< chart2::XDataSeries > > & rSeries ) +lcl_tSharedSeqVec lcl_getSharedSequences( const std::vector< rtl::Reference< DataSeries > > & rSeries ) { // @todo: if only some series share a sequence, those have to be duplicated // and made unshared for all series lcl_tSharedSeqVec aResult; // if we have only one series, we don't want any shared sequences - if( rSeries.getLength() <= 1 ) + if( rSeries.size() <= 1 ) return aResult; - Reference< chart2::data::XDataSource > xSource( rSeries[0], uno::UNO_QUERY ); - const Sequence< Reference< chart2::data::XLabeledDataSequence > > aLSeq( xSource->getDataSequences()); - for( Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : aLSeq ) + for( uno::Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : rSeries[0]->getDataSequences2() ) { Reference< chart2::data::XDataSequence > xValues( labeledDataSeq->getValues()); bool bShared = true; - for( sal_Int32 nSeriesIdx=1; nSeriesIdx<rSeries.getLength(); ++nSeriesIdx ) + for( std::size_t nSeriesIdx=1; nSeriesIdx<rSeries.size(); ++nSeriesIdx ) { bShared = lcl_SequenceOfSeriesIsShared( rSeries[nSeriesIdx], xValues ); if( !bShared ) @@ -193,10 +187,10 @@ private: struct lcl_RolesOfLSeqMatch { - explicit lcl_RolesOfLSeqMatch( const Reference< chart2::data::XLabeledDataSequence > & xLSeq ) : + explicit lcl_RolesOfLSeqMatch( const uno::Reference< chart2::data::XLabeledDataSequence > & xLSeq ) : m_aRole(DataSeriesHelper::getRole(xLSeq)) {} - bool operator() ( const Reference< chart2::data::XLabeledDataSequence > & xLSeq ) + bool operator() ( const uno::Reference< chart2::data::XLabeledDataSequence > & xLSeq ) { return DataSeriesHelper::getRole(xLSeq) == m_aRole; } @@ -204,16 +198,16 @@ private: OUString m_aRole; }; -bool lcl_ShowCategoriesAsDataLabel( const Reference< chart2::XDiagram > & xDiagram ) +bool lcl_ShowCategoriesAsDataLabel( const rtl::Reference< ::chart::Diagram > & xDiagram ) { - return !DiagramHelper::isCategoryDiagram(xDiagram); + return !xDiagram->isCategory(); } } // anonymous namespace struct DataBrowserModel::tDataColumn { - uno::Reference<chart2::XDataSeries> m_xDataSeries; + rtl::Reference<DataSeries> m_xDataSeries; OUString m_aUIRoleName; uno::Reference<chart2::data::XLabeledDataSequence> m_xLabeledDataSequence; eCellType m_eCellType; @@ -223,14 +217,14 @@ struct DataBrowserModel::tDataColumn tDataColumn() : m_eCellType( TEXT ), m_nNumberFormatKey( 0 ) {} // "full" CTOR tDataColumn( - const uno::Reference<chart2::XDataSeries> & xDataSeries, - const OUString& aUIRoleName, - const uno::Reference<chart2::data::XLabeledDataSequence>& xLabeledDataSequence, + rtl::Reference<DataSeries> xDataSeries, + OUString aUIRoleName, + uno::Reference<chart2::data::XLabeledDataSequence> xLabeledDataSequence, eCellType aCellType, sal_Int32 nNumberFormatKey ) : - m_xDataSeries( xDataSeries ), - m_aUIRoleName( aUIRoleName ), - m_xLabeledDataSequence( xLabeledDataSequence ), + m_xDataSeries(std::move( xDataSeries )), + m_aUIRoleName(std::move( aUIRoleName )), + m_xLabeledDataSequence(std::move( xLabeledDataSequence )), m_eCellType( aCellType ), m_nNumberFormatKey( nNumberFormatKey ) {} @@ -250,10 +244,9 @@ struct DataBrowserModel::implColumnLess }; DataBrowserModel::DataBrowserModel( - const rtl::Reference<::chart::ChartModel> & xChartDoc, - const Reference< uno::XComponentContext > & xContext ) : + const rtl::Reference<::chart::ChartModel> & xChartDoc ) : m_xChartDocument( xChartDoc ), - m_apDialogModel( new DialogModel( xChartDoc, xContext )) + m_apDialogModel( new DialogModel( xChartDoc )) { updateFromModel(); } @@ -266,15 +259,15 @@ namespace struct lcl_DataSeriesOfHeaderMatches { explicit lcl_DataSeriesOfHeaderMatches( - const Reference< chart2::XDataSeries > & xSeriesToCompareWith ) : - m_xSeries( xSeriesToCompareWith ) + rtl::Reference< ::chart::DataSeries > xSeriesToCompareWith ) : + m_xSeries(std::move( xSeriesToCompareWith )) {} bool operator() ( const ::chart::DataBrowserModel::tDataHeader & rHeader ) { return (m_xSeries == rHeader.m_xDataSeries); } private: - Reference< chart2::XDataSeries > m_xSeries; + rtl::Reference< ::chart::DataSeries > m_xSeries; }; } @@ -292,18 +285,18 @@ void DataBrowserModel::insertDataSeries( sal_Int32 nAfterColumnIndex ) nAfterColumnIndex = getCategoryColumnCount()-1; sal_Int32 nStartCol = 0; - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram(m_xChartDocument); - Reference<chart2::XChartType> xChartType; - Reference<chart2::XDataSeries> xSeries; + rtl::Reference< Diagram > xDiagram = m_xChartDocument->getFirstChartDiagram(); + rtl::Reference<ChartType> xChartType; + rtl::Reference<DataSeries> xSeries; if (o3tl::make_unsigned(nAfterColumnIndex) < m_aColumns.size()) // Get the data series at specific column position (if available). - xSeries.set( m_aColumns[nAfterColumnIndex].m_xDataSeries ); + xSeries = m_aColumns[nAfterColumnIndex].m_xDataSeries; sal_Int32 nSeriesNumberFormat = 0; if( xSeries.is()) { // Use the chart type of the currently selected data series. - xChartType.set( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries )); + xChartType = xDiagram->getChartTypeOfSeries( xSeries ); // Find the corresponding header and determine the last column of this // data series. @@ -314,14 +307,13 @@ void DataBrowserModel::insertDataSeries( sal_Int32 nAfterColumnIndex ) nStartCol = aIt->m_nEndColumn; // Get the number format too. - Reference< beans::XPropertySet > xSeriesProps( xSeries, uno::UNO_QUERY ); - if( xSeriesProps.is() ) - xSeriesProps->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nSeriesNumberFormat; + if( xSeries.is() ) + xSeries->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nSeriesNumberFormat; } else { // No data series at specified column position. Use the first chart type. - xChartType.set( DiagramHelper::getChartTypeByIndex( xDiagram, 0 )); + xChartType = xDiagram->getChartTypeByIndex( 0 ); nStartCol = nAfterColumnIndex; } @@ -330,68 +322,59 @@ void DataBrowserModel::insertDataSeries( sal_Int32 nAfterColumnIndex ) // Get shared sequences of current series. Normally multiple data series // only share "values-x" sequences. (TODO: simplify this logic). - Reference< chart2::XDataSeriesContainer > xSeriesCnt( xChartType, uno::UNO_QUERY ); - lcl_tSharedSeqVec aSharedSequences; - if( xSeriesCnt.is()) - aSharedSequences = lcl_getSharedSequences( xSeriesCnt->getDataSeries()); + lcl_tSharedSeqVec aSharedSequences = lcl_getSharedSequences( xChartType->getDataSeries2()); - Reference<chart2::XDataSeries> xNewSeries = + rtl::Reference<::chart::DataSeries> xNewSeries = m_apDialogModel->insertSeriesAfter(xSeries, xChartType, true); if (!xNewSeries.is()) // Failed to insert new data series to the model. Bail out. return; - Reference< chart2::data::XDataSource > xSource( xNewSeries, uno::UNO_QUERY ); - if (xSource.is()) + const std::vector<uno::Reference<chart2::data::XLabeledDataSequence> > & aLSequences = xNewSeries->getDataSequences2(); + sal_Int32 nSeqIdx = 0; + sal_Int32 nSeqSize = aLSequences.size(); + for (sal_Int32 nIndex = nStartCol; nSeqIdx < nSeqSize; ++nSeqIdx) { - Sequence<Reference<chart2::data::XLabeledDataSequence> > aLSequences = xSource->getDataSequences(); - sal_Int32 nSeqIdx = 0; - sal_Int32 nSeqSize = aLSequences.getLength(); - for (sal_Int32 nIndex = nStartCol; nSeqIdx < nSeqSize; ++nSeqIdx) - { - lcl_tSharedSeqVec::const_iterator aSharedIt( - std::find_if( aSharedSequences.begin(), aSharedSequences.end(), - lcl_RolesOfLSeqMatch( aLSequences[nSeqIdx] ))); + lcl_tSharedSeqVec::const_iterator aSharedIt( + std::find_if( aSharedSequences.begin(), aSharedSequences.end(), + lcl_RolesOfLSeqMatch( aLSequences[nSeqIdx] ))); - if( aSharedIt != aSharedSequences.end()) - { - // Shared sequence. Most likely "values-x" sequence. Copy it from existing sequence. - aLSequences[nSeqIdx]->setValues( (*aSharedIt)->getValues()); - aLSequences[nSeqIdx]->setLabel( (*aSharedIt)->getLabel()); - } - else - { - // Insert a new column in the internal data for the new sequence. - xDataProvider->insertSequence( nIndex - 1 ); - - // values - Reference< chart2::data::XDataSequence > xNewSeq( - xDataProvider->createDataSequenceByRangeRepresentation( - OUString::number( nIndex ))); - lcl_copyDataSequenceProperties( - aLSequences[nSeqIdx]->getValues(), xNewSeq ); - aLSequences[nSeqIdx]->setValues( xNewSeq ); - - // labels - Reference< chart2::data::XDataSequence > xNewLabelSeq( - xDataProvider->createDataSequenceByRangeRepresentation( - "label " + - OUString::number( nIndex ))); - lcl_copyDataSequenceProperties( - aLSequences[nSeqIdx]->getLabel(), xNewLabelSeq ); - aLSequences[nSeqIdx]->setLabel( xNewLabelSeq ); - ++nIndex; - } + if( aSharedIt != aSharedSequences.end()) + { + // Shared sequence. Most likely "values-x" sequence. Copy it from existing sequence. + aLSequences[nSeqIdx]->setValues( (*aSharedIt)->getValues()); + aLSequences[nSeqIdx]->setLabel( (*aSharedIt)->getLabel()); + } + else + { + // Insert a new column in the internal data for the new sequence. + xDataProvider->insertSequence( nIndex - 1 ); + + // values + Reference< chart2::data::XDataSequence > xNewSeq( + xDataProvider->createDataSequenceByRangeRepresentation( + OUString::number( nIndex ))); + lcl_copyDataSequenceProperties( + aLSequences[nSeqIdx]->getValues(), xNewSeq ); + aLSequences[nSeqIdx]->setValues( xNewSeq ); + + // labels + Reference< chart2::data::XDataSequence > xNewLabelSeq( + xDataProvider->createDataSequenceByRangeRepresentation( + "label " + + OUString::number( nIndex ))); + lcl_copyDataSequenceProperties( + aLSequences[nSeqIdx]->getLabel(), xNewLabelSeq ); + aLSequences[nSeqIdx]->setLabel( xNewLabelSeq ); + ++nIndex; } } if( nSeriesNumberFormat != 0 ) { //give the new series the same number format as the former series especially for bubble charts thus the bubble size values can be edited with same format immediately - Reference< beans::XPropertySet > xNewSeriesProps( xNewSeries, uno::UNO_QUERY ); - if( xNewSeriesProps.is() ) - xNewSeriesProps->setPropertyValue(CHART_UNONAME_NUMFMT , uno::Any(nSeriesNumberFormat)); + xNewSeries->setPropertyValue(CHART_UNONAME_NUMFMT , uno::Any(nSeriesNumberFormat)); } updateFromModel(); @@ -450,7 +433,7 @@ void DataBrowserModel::removeDataSeriesOrComplexCategoryLevel( sal_Int32 nAtColu return; } - const Reference<chart2::XDataSeries>& xSeries = m_aColumns[nAtColumnIndex].m_xDataSeries; + const rtl::Reference<DataSeries>& xSeries = m_aColumns[nAtColumnIndex].m_xDataSeries; m_apDialogModel->deleteSeries(xSeries, getHeaderForSeries(xSeries).m_xChartType); @@ -458,16 +441,14 @@ void DataBrowserModel::removeDataSeriesOrComplexCategoryLevel( sal_Int32 nAtColu //but do not delete sequences that are still in use by the remaining series Reference< chart2::XInternalDataProvider > xDataProvider( m_apDialogModel->getDataProvider(), uno::UNO_QUERY ); - Reference< chart2::data::XDataSource > xSourceOfDeleted( xSeries, uno::UNO_QUERY ); - if (!xDataProvider.is() || !xSourceOfDeleted.is()) + if (!xDataProvider.is() || !xSeries.is()) { // Something went wrong. Bail out. updateFromModel(); return; } - Reference<chart2::XDataSeriesContainer> xSeriesCnt( - getHeaderForSeries(xSeries).m_xChartType, uno::UNO_QUERY); + rtl::Reference<ChartType> xSeriesCnt(getHeaderForSeries(xSeries).m_xChartType); if (!xSeriesCnt.is()) { // Unexpected happened. Bail out. @@ -477,13 +458,13 @@ void DataBrowserModel::removeDataSeriesOrComplexCategoryLevel( sal_Int32 nAtColu // Collect all the remaining data sequences in the same chart type. The // deleted data series is already gone by this point. - std::vector<Reference<chart2::data::XLabeledDataSequence> > aAllDataSeqs = - DataSeriesHelper::getAllDataSequences(xSeriesCnt->getDataSeries()); + std::vector<uno::Reference<chart2::data::XLabeledDataSequence> > aAllDataSeqs = + DataSeriesHelper::getAllDataSequences(xSeriesCnt->getDataSeries2()); // Check if the sequences to be deleted are still referenced by any of // the other data series. If not, mark them for deletion. std::vector<sal_Int32> aSequenceIndexesToDelete; - const Sequence<Reference<chart2::data::XLabeledDataSequence> > aSequencesOfDeleted = xSourceOfDeleted->getDataSequences(); + const std::vector<uno::Reference<chart2::data::XLabeledDataSequence> > & aSequencesOfDeleted = xSeries->getDataSequences2(); for (auto const & labeledDataSeq : aSequencesOfDeleted) { // if not used by the remaining series this sequence can be deleted @@ -511,7 +492,7 @@ void DataBrowserModel::swapDataSeries( sal_Int32 nFirstColumnIndex ) OSL_ASSERT(m_apDialogModel); if( o3tl::make_unsigned( nFirstColumnIndex ) < m_aColumns.size() - 1 ) { - Reference< chart2::XDataSeries > xSeries( m_aColumns[nFirstColumnIndex].m_xDataSeries ); + rtl::Reference< DataSeries > xSeries( m_aColumns[nFirstColumnIndex].m_xDataSeries ); if( xSeries.is()) { m_apDialogModel->moveSeries( xSeries, DialogModel::MoveDirection::Down ); @@ -557,15 +538,17 @@ void DataBrowserModel::removeDataPointForAllSeries( sal_Int32 nAtIndex ) DataBrowserModel::tDataHeader DataBrowserModel::getHeaderForSeries( const Reference< chart2::XDataSeries > & xSeries ) const { + rtl::Reference<DataSeries> pSeries = dynamic_cast<DataSeries*>(xSeries.get()); + assert(!xSeries || pSeries); for (auto const& elemHeader : m_aHeaders) { - if( elemHeader.m_xDataSeries == xSeries ) + if( elemHeader.m_xDataSeries == pSeries ) return elemHeader; } return tDataHeader(); } -Reference< chart2::XDataSeries > +rtl::Reference< DataSeries > DataBrowserModel::getDataSeriesByColumn( sal_Int32 nColumn ) const { tDataColumnVector::size_type nIndex( nColumn ); @@ -765,14 +748,14 @@ void DataBrowserModel::updateFromModel() m_aColumns.clear(); m_aHeaders.clear(); - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( m_xChartDocument )); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram()); if( !xDiagram.is()) return; // set template at DialogModel rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = m_xChartDocument->getTypeManager(); - DiagramHelper::tTemplateWithServiceName aTemplateAndService = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + Diagram::tTemplateWithServiceName aTemplateAndService = + xDiagram->getTemplate( xChartTypeManager ); if( aTemplateAndService.xChartTypeTemplate.is()) m_apDialogModel->setTemplate( aTemplateAndService.xChartTypeTemplate ); @@ -781,8 +764,8 @@ void DataBrowserModel::updateFromModel() { ExplicitCategoriesProvider aExplicitCategoriesProvider( ChartModelHelper::getFirstCoordinateSystem(m_xChartDocument), *m_xChartDocument ); - const Sequence< Reference< chart2::data::XLabeledDataSequence> >& rSplitCategoriesList( aExplicitCategoriesProvider.getSplitCategoriesList() ); - sal_Int32 nLevelCount = rSplitCategoriesList.getLength(); + const std::vector< Reference< chart2::data::XLabeledDataSequence> >& rSplitCategoriesList = aExplicitCategoriesProvider.getSplitCategoriesList(); + sal_Int32 nLevelCount = rSplitCategoriesList.size(); for( sal_Int32 nL = 0; nL<nLevelCount; nL++ ) { Reference< chart2::data::XLabeledDataSequence > xCategories( rSplitCategoriesList[nL] ); @@ -790,7 +773,7 @@ void DataBrowserModel::updateFromModel() continue; tDataColumn aCategories; - aCategories.m_xLabeledDataSequence.set( xCategories ); + aCategories.m_xLabeledDataSequence = xCategories; if( lcl_ShowCategoriesAsDataLabel( xDiagram )) aCategories.m_aUIRoleName = DialogModel::GetRoleDataLabel(); else @@ -806,101 +789,97 @@ void DataBrowserModel::updateFromModel() const std::vector< rtl::Reference< BaseCoordinateSystem > > aCooSysSeq( xDiagram->getBaseCoordinateSystems()); for( rtl::Reference< BaseCoordinateSystem > const & coords : aCooSysSeq ) { - const Sequence< Reference< chart2::XChartType > > aChartTypes( coords->getChartTypes()); + const std::vector< rtl::Reference< ChartType > > aChartTypes( coords->getChartTypes2()); sal_Int32 nXAxisNumberFormat = DataSeriesHelper::getNumberFormatKeyFromAxis( nullptr, coords, 0, 0 ); - for( sal_Int32 nCTIdx=0; nCTIdx<aChartTypes.getLength(); ++nCTIdx ) + for( auto const & CT: aChartTypes ) { - Reference< chart2::XDataSeriesContainer > xSeriesCnt( aChartTypes[nCTIdx], uno::UNO_QUERY ); - if( xSeriesCnt.is()) - { - OUString aRoleForDataLabelNumberFormat = ChartTypeHelper::getRoleOfSequenceForDataLabelNumberFormatDetection( aChartTypes[nCTIdx] ); + rtl::Reference< ChartType > xSeriesCnt( CT ); + OUString aRoleForDataLabelNumberFormat = ChartTypeHelper::getRoleOfSequenceForDataLabelNumberFormatDetection( CT ); - const Sequence< Reference< chart2::XDataSeries > > aSeries( xSeriesCnt->getDataSeries()); - lcl_tSharedSeqVec aSharedSequences( lcl_getSharedSequences( aSeries )); - for (auto const& sharedSequence : aSharedSequences) - { - tDataColumn aSharedSequence; - aSharedSequence.m_xLabeledDataSequence = sharedSequence; - aSharedSequence.m_aUIRoleName = lcl_getUIRoleName(sharedSequence); - aSharedSequence.m_eCellType = NUMBER; - // as the sequences are shared it should be ok to take the first series - // @todo: dimension index 0 for x-values used here. This is just a guess. - // Also, the axis index is 0, as there is usually only one x-axis - aSharedSequence.m_nNumberFormatKey = nXAxisNumberFormat; - m_aColumns.push_back( aSharedSequence ); - ++nHeaderStart; - } - for( Reference< chart2::XDataSeries > const & dataSeries : aSeries ) + const std::vector< rtl::Reference< DataSeries > > & aSeries( xSeriesCnt->getDataSeries2()); + lcl_tSharedSeqVec aSharedSequences( lcl_getSharedSequences( aSeries )); + for (auto const& sharedSequence : aSharedSequences) + { + tDataColumn aSharedSequence; + aSharedSequence.m_xLabeledDataSequence = sharedSequence; + aSharedSequence.m_aUIRoleName = lcl_getUIRoleName(sharedSequence); + aSharedSequence.m_eCellType = NUMBER; + // as the sequences are shared it should be ok to take the first series + // @todo: dimension index 0 for x-values used here. This is just a guess. + // Also, the axis index is 0, as there is usually only one x-axis + aSharedSequence.m_nNumberFormatKey = nXAxisNumberFormat; + m_aColumns.push_back( aSharedSequence ); + ++nHeaderStart; + } + for( rtl::Reference< DataSeries > const & dataSeries : aSeries ) + { + tDataColumnVector::size_type nStartColIndex = m_aColumns.size(); + rtl::Reference< DataSeries > xSeries( dataSeries ); + if( xSeries.is()) { - tDataColumnVector::size_type nStartColIndex = m_aColumns.size(); - Reference< chart2::XDataSeries > xSeries( dataSeries ); - Reference< chart2::data::XDataSource > xSource( xSeries, uno::UNO_QUERY ); - if( xSource.is()) + const std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > & aLSeqs( xSeries->getDataSequences2()); + if( aLSeqs.empty() ) + continue; + nHeaderEnd = nHeaderStart; + + // @todo: dimension index 1 for y-values used here. This is just a guess + sal_Int32 nYAxisNumberFormatKey = + DataSeriesHelper::getNumberFormatKeyFromAxis( + dataSeries, coords, 1 ); + + sal_Int32 nSeqIdx=0; + for( ; nSeqIdx<static_cast<sal_Int32>(aLSeqs.size()); ++nSeqIdx ) { - Sequence< Reference< chart2::data::XLabeledDataSequence > > aLSeqs( xSource->getDataSequences()); - if( !aLSeqs.hasElements() ) - continue; - nHeaderEnd = nHeaderStart; - - // @todo: dimension index 1 for y-values used here. This is just a guess - sal_Int32 nYAxisNumberFormatKey = - DataSeriesHelper::getNumberFormatKeyFromAxis( - dataSeries, coords, 1 ); - - sal_Int32 nSeqIdx=0; - for( ; nSeqIdx<aLSeqs.getLength(); ++nSeqIdx ) + sal_Int32 nSequenceNumberFormatKey = nYAxisNumberFormatKey; + OUString aRole = DataSeriesHelper::getRole(aLSeqs[nSeqIdx]); + + if( aRole == aRoleForDataLabelNumberFormat ) { - sal_Int32 nSequenceNumberFormatKey = nYAxisNumberFormatKey; - OUString aRole = DataSeriesHelper::getRole(aLSeqs[nSeqIdx]); - - if( aRole == aRoleForDataLabelNumberFormat ) - { - nSequenceNumberFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( - Reference< beans::XPropertySet >( xSeries, uno::UNO_QUERY )); - } - else if( aRole == "values-x" ) - nSequenceNumberFormatKey = nXAxisNumberFormat; - - if( std::none_of( aSharedSequences.begin(), aSharedSequences.end(), - lcl_RepresentationsOfLSeqMatch( aLSeqs[nSeqIdx] )) ) - { - // no shared sequence - m_aColumns.emplace_back( - dataSeries, - lcl_getUIRoleName( aLSeqs[nSeqIdx] ), - aLSeqs[nSeqIdx], - NUMBER, - nSequenceNumberFormatKey ); - ++nHeaderEnd; - } - // else skip + nSequenceNumberFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( + xSeries); } - bool bSwapXAndYAxis = false; - try + else if( aRole == "values-x" ) + nSequenceNumberFormatKey = nXAxisNumberFormat; + + if( std::none_of( aSharedSequences.begin(), aSharedSequences.end(), + lcl_RepresentationsOfLSeqMatch( aLSeqs[nSeqIdx] )) ) { - coords->getPropertyValue( "SwapXAndYAxis" ) >>= bSwapXAndYAxis; + // no shared sequence + m_aColumns.emplace_back( + dataSeries, + lcl_getUIRoleName( aLSeqs[nSeqIdx] ), + aLSeqs[nSeqIdx], + NUMBER, + nSequenceNumberFormatKey ); + ++nHeaderEnd; } - catch( const beans::UnknownPropertyException & ) {} + // else skip + } + bool bSwapXAndYAxis = false; + try + { + coords->getPropertyValue( "SwapXAndYAxis" ) >>= bSwapXAndYAxis; + } + catch( const beans::UnknownPropertyException & ) {} - // add ranges for error bars if present for a series - if( StatisticsHelper::usesErrorBarRanges( dataSeries )) - addErrorBarRanges( dataSeries, nYAxisNumberFormatKey, nSeqIdx, nHeaderEnd, true ); + // add ranges for error bars if present for a series + if( StatisticsHelper::usesErrorBarRanges( dataSeries )) + addErrorBarRanges( dataSeries, nYAxisNumberFormatKey, nSeqIdx, nHeaderEnd, true ); - if( StatisticsHelper::usesErrorBarRanges( dataSeries, /* bYError = */ false )) - addErrorBarRanges( dataSeries, nYAxisNumberFormatKey, nSeqIdx, nHeaderEnd, false ); + if( StatisticsHelper::usesErrorBarRanges( dataSeries, /* bYError = */ false )) + addErrorBarRanges( dataSeries, nYAxisNumberFormatKey, nSeqIdx, nHeaderEnd, false ); - m_aHeaders.emplace_back( - dataSeries, - aChartTypes[nCTIdx], - bSwapXAndYAxis, - nHeaderStart, - nHeaderEnd - 1 ); + m_aHeaders.emplace_back( + dataSeries, + CT, + bSwapXAndYAxis, + nHeaderStart, + nHeaderEnd - 1 ); - nHeaderStart = nHeaderEnd; + nHeaderStart = nHeaderEnd; - std::sort( m_aColumns.begin() + nStartColIndex, m_aColumns.end(), implColumnLess() ); - } + std::sort( m_aColumns.begin() + nStartColIndex, m_aColumns.end(), implColumnLess() ); } } } @@ -908,35 +887,35 @@ void DataBrowserModel::updateFromModel() } void DataBrowserModel::addErrorBarRanges( - const Reference< chart2::XDataSeries > & xDataSeries, + const rtl::Reference< DataSeries > & xDataSeries, sal_Int32 nNumberFormatKey, sal_Int32 & rInOutSequenceIndex, sal_Int32 & rInOutHeaderEnd, bool bYError ) { try { - std::vector< Reference< chart2::data::XLabeledDataSequence > > aSequences; + std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > aSequences; Reference< chart2::data::XDataSource > xErrorSource( StatisticsHelper::getErrorBars( xDataSeries, bYError ), uno::UNO_QUERY ); - Reference< chart2::data::XLabeledDataSequence > xErrorLSequence( + uno::Reference< chart2::data::XLabeledDataSequence > xErrorLSequence = StatisticsHelper::getErrorLabeledDataSequenceFromDataSource( xErrorSource, /* bPositiveValue = */ true, - bYError )); + bYError ); if( xErrorLSequence.is()) aSequences.push_back( xErrorLSequence ); - xErrorLSequence.set( + xErrorLSequence = StatisticsHelper::getErrorLabeledDataSequenceFromDataSource( xErrorSource, /* bPositiveValue = */ false, - bYError )); + bYError ); if( xErrorLSequence.is()) aSequences.push_back( xErrorLSequence ); - for (Reference<chart2::data::XLabeledDataSequence> const & rDataSequence : aSequences) + for (uno::Reference<chart2::data::XLabeledDataSequence> const & rDataSequence : aSequences) { m_aColumns.emplace_back(xDataSeries, lcl_getUIRoleName(rDataSequence), rDataSequence, NUMBER, nNumberFormatKey); diff --git a/chart2/source/controller/dialogs/DataBrowserModel.hxx b/chart2/source/controller/dialogs/DataBrowserModel.hxx index d7c7be071f66..e3254851d002 100644 --- a/chart2/source/controller/dialogs/DataBrowserModel.hxx +++ b/chart2/source/controller/dialogs/DataBrowserModel.hxx @@ -18,10 +18,14 @@ */ #pragma once +#include <DataSeries.hxx> +#include <ChartType.hxx> + #include <com/sun/star/uno/Reference.hxx> #include <rtl/ref.hxx> #include <memory> +#include <utility> #include <vector> namespace com::sun::star::chart2 { class XChartDocument; } @@ -37,13 +41,14 @@ namespace chart class DialogModel; class ChartModel; +class ChartType; +class DataSeries; class DataBrowserModel final { public: explicit DataBrowserModel( - const rtl::Reference<::chart::ChartModel> & xChartDoc, - const css::uno::Reference< css::uno::XComponentContext > & xContext ); + const rtl::Reference<::chart::ChartModel> & xChartDoc ); ~DataBrowserModel(); /** Inserts a new data series after the data series to which the data column @@ -98,8 +103,8 @@ public: struct tDataHeader { - css::uno::Reference< css::chart2::XDataSeries > m_xDataSeries; - css::uno::Reference< css::chart2::XChartType > m_xChartType; + rtl::Reference< ::chart::DataSeries > m_xDataSeries; + rtl::Reference< ::chart::ChartType > m_xChartType; bool m_bSwapXAndYAxis; sal_Int32 m_nStartColumn; sal_Int32 m_nEndColumn; @@ -112,13 +117,13 @@ public: {} // "full" CTOR tDataHeader( - css::uno::Reference< css::chart2::XDataSeries > const & xDataSeries, - css::uno::Reference< css::chart2::XChartType > const &xChartType, + rtl::Reference< ::chart::DataSeries > xDataSeries, + rtl::Reference< ::chart::ChartType > xChartType, bool bSwapXAndYAxis, sal_Int32 nStartColumn, sal_Int32 nEndColumn ) : - m_xDataSeries( xDataSeries ), - m_xChartType( xChartType ), + m_xDataSeries(std::move( xDataSeries )), + m_xChartType(std::move( xChartType )), m_bSwapXAndYAxis( bSwapXAndYAxis ), m_nStartColumn( nStartColumn ), m_nEndColumn( nEndColumn ) @@ -132,7 +137,7 @@ public: tDataHeader getHeaderForSeries( const css::uno::Reference< css::chart2::XDataSeries > &xSeries ) const; - css::uno::Reference< css::chart2::XDataSeries > + rtl::Reference< ::chart::DataSeries > getDataSeriesByColumn( sal_Int32 nColumn ) const; private: @@ -141,7 +146,7 @@ private: void removeComplexCategoryLevel( sal_Int32 nAtColumnIndex ); void addErrorBarRanges( - const css::uno::Reference<css::chart2::XDataSeries > & xDataSeries, + const rtl::Reference<::chart::DataSeries > & xDataSeries, sal_Int32 nNumberFormatKey, sal_Int32 & rInOutSequenceIndex, sal_Int32 & rInOutHeaderEnd, bool bYError ); diff --git a/chart2/source/controller/dialogs/DialogModel.cxx b/chart2/source/controller/dialogs/DialogModel.cxx index 73b438acef92..4c888e8ed5b6 100644 --- a/chart2/source/controller/dialogs/DialogModel.cxx +++ b/chart2/source/controller/dialogs/DialogModel.cxx @@ -19,33 +19,31 @@ #include "DialogModel.hxx" #include <RangeSelectionHelper.hxx> +#include <DataInterpreter.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <DataSourceHelper.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> #include <strings.hrc> #include <ResId.hxx> #include <ControllerLockGuard.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartTypeTemplate.hxx> #include <ThreeDHelper.hxx> #include <ChartModel.hxx> #include <BaseCoordinateSystem.hxx> +#include <LabeledDataSequence.hxx> -#include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/chart2/AxisType.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> #include <com/sun/star/chart2/XDataSeriesContainer.hpp> -#include <com/sun/star/chart2/data/XDataSink.hpp> -#include <comphelper/sequence.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <rtl/ustring.hxx> #include <utility> #include <algorithm> +#include <cstddef> #include <iterator> #include <numeric> @@ -57,16 +55,8 @@ using ::com::sun::star::uno::Sequence; namespace { -constexpr OUStringLiteral lcl_aLabelRole( u"label" ); +constexpr OUString lcl_aLabelRole( u"label"_ustr ); -struct lcl_ChartTypeToSeriesCnt -{ - Reference< XDataSeriesContainer > operator() ( - const Reference< XChartType > & xChartType ) - { - return Reference< XDataSeriesContainer >::query( xChartType ); - } -}; OUString lcl_ConvertRole( const OUString & rRoleString ) { @@ -128,53 +118,6 @@ lcl_tRoleIndexMap lcl_createRoleIndexMap() return aMap; } -struct lcl_DataSeriesContainerAppend -{ - typedef Reference< XDataSeriesContainer > value_type; - typedef std::vector< ::chart::DialogModel::tSeriesWithChartTypeByName > tContainerType; - - explicit lcl_DataSeriesContainerAppend( tContainerType * rCnt ) - : m_rDestCnt( rCnt ) - {} - - lcl_DataSeriesContainerAppend & operator= ( const value_type & xVal ) - { - try - { - if( xVal.is()) - { - const Sequence< Reference< XDataSeries > > aSeq( xVal->getDataSeries()); - OUString aRole( "values-y" ); - Reference< XChartType > xCT( xVal, uno::UNO_QUERY ); - if( xCT.is()) - aRole = xCT->getRoleOfSequenceForSeriesLabel(); - for( Reference< XDataSeries > const & dataSeries : aSeq ) - { - m_rDestCnt->push_back( - ::chart::DialogModel::tSeriesWithChartTypeByName( - ::chart::DataSeriesHelper::getDataSeriesLabel( dataSeries, aRole ), - std::make_pair( dataSeries, xCT ))); - } - } - } - catch( const uno::Exception & ) - { - DBG_UNHANDLED_EXCEPTION("chart2"); - } - return *this; - } - - // Implement output operator requirements as required by std::copy (and - // implement prefix increment in terms of postfix increment to avoid unused - // member function warnings for the latter in the common case where - // std::copy would not actually need it): - lcl_DataSeriesContainerAppend & operator* () { return *this; } - lcl_DataSeriesContainerAppend & operator++ () { return operator++(0); } - lcl_DataSeriesContainerAppend & operator++ (int) { return *this; } - -private: - tContainerType * m_rDestCnt; -}; struct lcl_RolesWithRangeAppend { @@ -182,9 +125,9 @@ struct lcl_RolesWithRangeAppend typedef ::chart::DialogModel::tRolesWithRanges tContainerType; explicit lcl_RolesWithRangeAppend( tContainerType * rCnt, - const OUString & aLabelRole ) + OUString aLabelRole ) : m_rDestCnt( rCnt ), - m_aRoleForLabelSeq( aLabelRole ) + m_aRoleForLabelSeq(std::move( aLabelRole )) {} lcl_RolesWithRangeAppend & operator= ( const value_type & xVal ) @@ -240,13 +183,6 @@ private: namespace std { - template<> struct iterator_traits<lcl_DataSeriesContainerAppend> - { - typedef std::output_iterator_tag iterator_category; - typedef Reference< XDataSeriesContainer > value_type; - typedef value_type& reference; - }; - template<> struct iterator_traits<lcl_RolesWithRangeAppend> { typedef std::output_iterator_tag iterator_category; @@ -288,52 +224,43 @@ Sequence< OUString > lcl_CopyExcludingValuesFirst( return aOutput; } -Reference< XDataSeries > lcl_CreateNewSeries( - const Reference< uno::XComponentContext > & xContext, - const Reference< XChartType > & xChartType, +rtl::Reference< ::chart::DataSeries > lcl_CreateNewSeries( + const rtl::Reference< ::chart::ChartType > & xChartType, sal_Int32 nNewSeriesIndex, sal_Int32 nTotalNumberOfSeriesInCTGroup, - const Reference< XDiagram > & xDiagram, - const Reference< XChartTypeTemplate > & xTemplate, + const rtl::Reference< ::chart::Diagram > & xDiagram, + const rtl::Reference< ::chart::ChartTypeTemplate > & xTemplate, bool bCreateDataCachedSequences ) { // create plain series - Reference< XDataSeries > xResult( - xContext->getServiceManager()->createInstanceWithContext( - "com.sun.star.chart2.DataSeries" , - xContext ), uno::UNO_QUERY ); + rtl::Reference< ::chart::DataSeries > xResult = new ::chart::DataSeries(); if( xTemplate.is()) { - Reference< beans::XPropertySet > xResultProp( xResult, uno::UNO_QUERY ); - if( xResultProp.is()) - { - // @deprecated: correct default color should be found by view - // without setting it as hard attribute - Reference< XColorScheme > xColorScheme( xDiagram->getDefaultColorScheme()); - if( xColorScheme.is()) - xResultProp->setPropertyValue( "Color" , uno::Any( xColorScheme->getColorByIndex( nNewSeriesIndex ))); - } - sal_Int32 nGroupIndex=0; + // @deprecated: correct default color should be found by view + // without setting it as hard attribute + Reference< XColorScheme > xColorScheme( xDiagram->getDefaultColorScheme()); + if( xColorScheme.is()) + xResult->setPropertyValue( "Color" , uno::Any( xColorScheme->getColorByIndex( nNewSeriesIndex ))); + std::size_t nGroupIndex=0; if( xChartType.is()) { - Sequence< Reference< XChartType > > aCTs( - ::chart::DiagramHelper::getChartTypesFromDiagram( xDiagram )); - for( ; nGroupIndex<aCTs.getLength(); ++nGroupIndex) + std::vector< rtl::Reference< ::chart::ChartType > > aCTs = + xDiagram->getChartTypes(); + for( ; nGroupIndex < aCTs.size(); ++nGroupIndex) if( aCTs[nGroupIndex] == xChartType ) break; - if( nGroupIndex == aCTs.getLength()) + if( nGroupIndex == aCTs.size()) nGroupIndex = 0; } - xTemplate->applyStyle( xResult, nGroupIndex, nNewSeriesIndex, nTotalNumberOfSeriesInCTGroup ); + xTemplate->applyStyle2( xResult, nGroupIndex, nNewSeriesIndex, nTotalNumberOfSeriesInCTGroup ); } if( bCreateDataCachedSequences ) { // set chart type specific roles - Reference< data::XDataSink > xSink( xResult, uno::UNO_QUERY ); - if( xChartType.is() && xSink.is()) + if( xChartType.is() ) { - std::vector< Reference< data::XLabeledDataSequence > > aNewSequences; + std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > aNewSequences; const OUString aRoleOfSeqForSeriesLabel = xChartType->getRoleOfSequenceForSeriesLabel(); const OUString aLabel(::chart::SchResId(STR_DATA_UNNAMED_SERIES)); Sequence< OUString > aPossibleRoles( xChartType->getSupportedMandatoryRoles()); @@ -342,7 +269,7 @@ Reference< XDataSeries > lcl_CreateNewSeries( //special handling for candlestick type if( xTemplate.is()) { - Reference< XDataInterpreter > xInterpreter( xTemplate->getDataInterpreter()); + rtl::Reference< ::chart::DataInterpreter > xInterpreter( xTemplate->getDataInterpreter2()); if( xInterpreter.is()) { sal_Int32 nStockVariant; @@ -386,7 +313,7 @@ Reference< XDataSeries > lcl_CreateNewSeries( aNewSequences.push_back( ::chart::DataSourceHelper::createLabeledDataSequence( xSeq )); } - xSink->setData( comphelper::containerToSequence( aNewSequences )); + xResult->setData( aNewSequences ); } } @@ -416,10 +343,8 @@ DialogModelTimeBasedInfo::DialogModelTimeBasedInfo(): } DialogModel::DialogModel( - const rtl::Reference<::chart::ChartModel> & xChartDocument, - const Reference< uno::XComponentContext > & xContext ) : - m_xChartDocument( xChartDocument ), - m_xContext( xContext ), + rtl::Reference<::chart::ChartModel> xChartDocument ) : + m_xChartDocument(std::move( xChartDocument )), m_aTimerTriggeredControllerLock( m_xChartDocument ) { } @@ -461,10 +386,10 @@ Reference< data::XDataProvider > DialogModel::getDataProvider() const return xResult; } -std::vector< Reference< XDataSeriesContainer > > +std::vector< rtl::Reference< ChartType > > DialogModel::getAllDataSeriesContainers() const { - std::vector< Reference< XDataSeriesContainer > > aResult; + std::vector< rtl::Reference< ChartType > > aResult; try { @@ -477,11 +402,9 @@ std::vector< Reference< XDataSeriesContainer > > xDiagram->getBaseCoordinateSystems()); for( rtl::Reference< BaseCoordinateSystem > const & coords : aCooSysSeq ) { - const Sequence< Reference< XChartType > > aChartTypeSeq( coords->getChartTypes()); - std::transform( - aChartTypeSeq.begin(), aChartTypeSeq.end(), - std::back_inserter( aResult ), - lcl_ChartTypeToSeriesCnt() ); + + for (const auto & rxChartType : coords->getChartTypes2()) + aResult.push_back(rxChartType); } } } @@ -497,11 +420,29 @@ std::vector< DialogModel::tSeriesWithChartTypeByName > DialogModel::getAllDataSeriesWithLabel() const { std::vector< tSeriesWithChartTypeByName > aResult; - std::vector< Reference< XDataSeriesContainer > > aContainers( + std::vector< rtl::Reference< ChartType > > aContainers( getAllDataSeriesContainers()); - std::copy( aContainers.begin(), aContainers.end(), - lcl_DataSeriesContainerAppend( &aResult )); + for (const auto & rxChartType : aContainers ) + { + try + { + const std::vector< rtl::Reference< DataSeries > > & aSeq = rxChartType->getDataSeries2(); + OUString aRole = rxChartType->getRoleOfSequenceForSeriesLabel(); + for( rtl::Reference< DataSeries > const & dataSeries : aSeq ) + { + aResult.push_back( + ::chart::DialogModel::tSeriesWithChartTypeByName( + dataSeries->getLabelForRole( aRole ), + std::make_pair( dataSeries, rxChartType ))); + } + } + catch( const uno::Exception & ) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + } + } + return aResult; } @@ -526,15 +467,13 @@ void addMissingRoles(DialogModel::tRolesWithRanges& rResult, const uno::Sequence * @param xNewSeries new data series to insert. */ void addNewSeriesToContainer( - const Reference<XChartType>& xChartType, - const Reference<XDataSeries>& xSeries, - const Reference<XDataSeries>& xNewSeries ) + const rtl::Reference<ChartType>& xChartType, + const rtl::Reference<DataSeries>& xSeries, + const rtl::Reference<DataSeries>& xNewSeries ) { - Reference<XDataSeriesContainer> xSeriesCnt(xChartType, uno::UNO_QUERY_THROW); - auto aSeries = comphelper::sequenceToContainer<std::vector<Reference<XDataSeries> >>(xSeriesCnt->getDataSeries()); + auto aSeries = xChartType->getDataSeries2(); - std::vector<Reference<XDataSeries> >::iterator aIt = - std::find( aSeries.begin(), aSeries.end(), xSeries); + auto aIt = std::find( aSeries.begin(), aSeries.end(), xSeries); if( aIt == aSeries.end()) // if we have no series we insert at the first position. @@ -544,7 +483,7 @@ void addNewSeriesToContainer( ++aIt; aSeries.insert(aIt, xNewSeries); - xSeriesCnt->setDataSeries(comphelper::containerToSequence(aSeries)); + xChartType->setDataSeries(aSeries); } } @@ -552,7 +491,7 @@ void addNewSeriesToContainer( DialogModel::tRolesWithRanges DialogModel::getRolesWithRanges( const Reference< XDataSeries > & xSeries, const OUString & aRoleOfSequenceForLabel, - const Reference< chart2::XChartType > & xChartType ) + const rtl::Reference< ::chart::ChartType > & xChartType ) { DialogModel::tRolesWithRanges aResult; try @@ -584,54 +523,54 @@ DialogModel::tRolesWithRanges DialogModel::getRolesWithRanges( } void DialogModel::moveSeries( - const Reference< XDataSeries > & xSeries, + const rtl::Reference< DataSeries > & xSeries, MoveDirection eDirection ) { m_aTimerTriggeredControllerLock.startTimer(); ControllerLockGuardUNO aLockedControllers( m_xChartDocument ); - Reference< XDiagram > xDiagram( m_xChartDocument->getFirstDiagram()); - DiagramHelper::moveSeries( xDiagram, xSeries, eDirection==MoveDirection::Down ); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram()); + xDiagram->moveSeries( xSeries, eDirection==MoveDirection::Down ); } -Reference< chart2::XDataSeries > DialogModel::insertSeriesAfter( - const Reference< XDataSeries > & xSeries, - const Reference< XChartType > & xChartType, +rtl::Reference< ::chart::DataSeries > DialogModel::insertSeriesAfter( + const Reference< XDataSeries > & xUnoSeries, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bCreateDataCachedSequences /* = false */ ) { m_aTimerTriggeredControllerLock.startTimer(); ControllerLockGuardUNO aLockedControllers( m_xChartDocument ); - Reference< XDataSeries > xNewSeries; + rtl::Reference< ::chart::DataSeries > xNewSeries; + rtl::Reference<DataSeries> xSeries = dynamic_cast<DataSeries*>(xUnoSeries.get()); + assert(xSeries || !xUnoSeries); try { - Reference< chart2::XDiagram > xDiagram( m_xChartDocument->getFirstDiagram() ); - ThreeDLookScheme e3DScheme = ThreeDHelper::detectScheme( xDiagram ); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram() ); + ThreeDLookScheme e3DScheme = xDiagram->detectScheme(); sal_Int32 nSeriesInChartType = 0; const sal_Int32 nTotalSeries = countSeries(); if( xChartType.is()) { - Reference< XDataSeriesContainer > xCnt( xChartType, uno::UNO_QUERY_THROW ); - nSeriesInChartType = xCnt->getDataSeries().getLength(); + nSeriesInChartType = xChartType->getDataSeries().getLength(); } // create new series - xNewSeries.set( + xNewSeries = lcl_CreateNewSeries( - m_xContext, xChartType, nTotalSeries, // new series' index nSeriesInChartType, xDiagram, m_xTemplate, - bCreateDataCachedSequences )); + bCreateDataCachedSequences ); // add new series to container if( xNewSeries.is()) addNewSeriesToContainer(xChartType, xSeries, xNewSeries); - ThreeDHelper::setScheme( xDiagram, e3DScheme ); + xDiagram->setScheme( e3DScheme ); } catch( const uno::Exception & ) { @@ -641,8 +580,8 @@ Reference< chart2::XDataSeries > DialogModel::insertSeriesAfter( } void DialogModel::deleteSeries( - const Reference< XDataSeries > & xSeries, - const Reference< XChartType > & xChartType ) + const rtl::Reference< DataSeries > & xSeries, + const rtl::Reference< ChartType > & xChartType ) { m_aTimerTriggeredControllerLock.startTimer(); ControllerLockGuardUNO aLockedControllers( m_xChartDocument ); @@ -650,15 +589,16 @@ void DialogModel::deleteSeries( DataSeriesHelper::deleteSeries( xSeries, xChartType ); } -Reference< data::XLabeledDataSequence > DialogModel::getCategories() const +uno::Reference< chart2::data::XLabeledDataSequence > DialogModel::getCategories() const { - Reference< data::XLabeledDataSequence > xResult; + uno::Reference< chart2::data::XLabeledDataSequence > xResult; try { if( m_xChartDocument.is()) { - Reference< chart2::XDiagram > xDiagram( m_xChartDocument->getFirstDiagram()); - xResult.set( DiagramHelper::getCategoriesFromDiagram( xDiagram )); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram()); + if (xDiagram.is()) + xResult = xDiagram->getCategories(); } } catch( const uno::Exception & ) @@ -673,31 +613,38 @@ void DialogModel::setCategories( const Reference< chart2::data::XLabeledDataSequ if( !m_xChartDocument.is()) return; - Reference< chart2::XDiagram > xDiagram( m_xChartDocument->getFirstDiagram()); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram()); if( !xDiagram.is()) return; // categories bool bSupportsCategories = true; - Reference< XChartType > xFirstChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); + rtl::Reference< ChartType > xFirstChartType( xDiagram->getChartTypeByIndex( 0 ) ); if( xFirstChartType.is() ) { sal_Int32 nAxisType = ChartTypeHelper::getAxisType( xFirstChartType, 0 ); // x-axis bSupportsCategories = (nAxisType == AxisType::CATEGORY); } - DiagramHelper::setCategoriesToDiagram( xCategories, xDiagram, true, bSupportsCategories ); + xDiagram->setCategories( xCategories, true, bSupportsCategories ); } OUString DialogModel::getCategoriesRange() const { - Reference< data::XLabeledDataSequence > xLSeq( getCategories()); OUString aRange; - if( xLSeq.is()) + try { - Reference< data::XDataSequence > xSeq( xLSeq->getValues()); - if( xSeq.is()) - aRange = xSeq->getSourceRangeRepresentation(); + uno::Reference< chart2::data::XLabeledDataSequence > xLSeq( getCategories()); + if( xLSeq.is()) + { + Reference< data::XDataSequence > xSeq( xLSeq->getValues()); + if( xSeq.is()) + aRange = xSeq->getSourceRangeRepresentation(); + } + } + catch (const lang::DisposedException&) + { + TOOLS_WARN_EXCEPTION( "chart2", "unexpected exception caught" ); } return aRange; } @@ -705,8 +652,8 @@ OUString DialogModel::getCategoriesRange() const bool DialogModel::isCategoryDiagram() const { bool bRet = false; - if( m_xChartDocument.is()) - bRet = DiagramHelper::isCategoryDiagram( m_xChartDocument->getFirstDiagram() ); + if( m_xChartDocument.is() && m_xChartDocument->getFirstChartDiagram()) + bRet = m_xChartDocument->getFirstChartDiagram()->isCategory(); return bRet; } @@ -763,22 +710,22 @@ void DialogModel::setData( Reference< chart2::data::XDataSource > xDataSource( xDataProvider->createDataSource( rArguments ) ); - Reference< chart2::XDataInterpreter > xInterpreter( - m_xTemplate->getDataInterpreter()); + rtl::Reference< ::chart::DataInterpreter > xInterpreter( + m_xTemplate->getDataInterpreter2()); if( xInterpreter.is()) { - Reference< chart2::XDiagram > xDiagram( m_xChartDocument->getFirstDiagram() ); - ThreeDLookScheme e3DScheme = ThreeDHelper::detectScheme( xDiagram ); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram() ); + ThreeDLookScheme e3DScheme = xDiagram->detectScheme(); - std::vector< Reference< XDataSeries > > aSeriesToReUse( - DiagramHelper::getDataSeriesFromDiagram( xDiagram )); + std::vector< rtl::Reference< DataSeries > > aSeriesToReUse = + xDiagram->getDataSeries(); applyInterpretedData( xInterpreter->interpretDataSource( xDataSource, rArguments, - comphelper::containerToSequence( aSeriesToReUse )), + aSeriesToReUse ), aSeriesToReUse); - ThreeDHelper::setScheme( xDiagram, e3DScheme ); + xDiagram->setScheme( e3DScheme ); } } catch( const uno::Exception & ) @@ -819,13 +766,13 @@ sal_Int32 DialogModel::GetRoleIndexForSorting( const OUString & rInternalRoleStr void DialogModel::applyInterpretedData( const InterpretedData & rNewData, - const std::vector< Reference< XDataSeries > > & rSeriesToReUse ) + const std::vector< rtl::Reference< DataSeries > > & rSeriesToReUse ) { if( ! m_xChartDocument.is()) return; m_aTimerTriggeredControllerLock.startTimer(); - Reference< XDiagram > xDiagram( m_xChartDocument->getFirstDiagram()); + rtl::Reference< Diagram > xDiagram( m_xChartDocument->getFirstChartDiagram()); if( !xDiagram.is()) return; @@ -835,43 +782,40 @@ void DialogModel::applyInterpretedData( sal_Int32 nGroup = 0; sal_Int32 nSeriesCounter = 0; sal_Int32 nNewSeriesIndex = static_cast< sal_Int32 >( rSeriesToReUse.size()); - const sal_Int32 nOuterSize=rNewData.Series.getLength(); + const sal_Int32 nOuterSize=rNewData.Series.size(); for(; nGroup < nOuterSize; ++nGroup) { - Sequence< Reference< XDataSeries > > aSeries( rNewData.Series[ nGroup ] ); - const sal_Int32 nSeriesInGroup = aSeries.getLength(); + const std::vector< rtl::Reference< DataSeries > > & aSeries( rNewData.Series[ nGroup ] ); + const sal_Int32 nSeriesInGroup = aSeries.size(); for( sal_Int32 nSeries=0; nSeries<nSeriesInGroup; ++nSeries, ++nSeriesCounter ) { if( std::find( rSeriesToReUse.begin(), rSeriesToReUse.end(), aSeries[nSeries] ) == rSeriesToReUse.end()) { - Reference< beans::XPropertySet > xSeriesProp( aSeries[nSeries], uno::UNO_QUERY ); - if( xSeriesProp.is()) + if( aSeries[nSeries].is()) { // @deprecated: correct default color should be found by view // without setting it as hard attribute Reference< XColorScheme > xColorScheme( xDiagram->getDefaultColorScheme()); if( xColorScheme.is()) - xSeriesProp->setPropertyValue( "Color" , + aSeries[nSeries]->setPropertyValue( "Color" , uno::Any( xColorScheme->getColorByIndex( nSeriesCounter ))); } - m_xTemplate->applyStyle( aSeries[nSeries], nGroup, nNewSeriesIndex++, nSeriesInGroup ); + m_xTemplate->applyStyle2( aSeries[nSeries], nGroup, nNewSeriesIndex++, nSeriesInGroup ); } } } } // data series - std::vector< Reference< XDataSeriesContainer > > aSeriesCnt( getAllDataSeriesContainers()); - auto aNewSeries( - comphelper::sequenceToContainer<std::vector< Sequence< Reference< XDataSeries > > >>( rNewData.Series )); + std::vector< rtl::Reference< ChartType > > aSeriesCnt = getAllDataSeriesContainers(); - OSL_ASSERT( aSeriesCnt.size() == aNewSeries.size()); + OSL_ASSERT( aSeriesCnt.size() == rNewData.Series.size()); - std::vector< Sequence< Reference< XDataSeries > > >::const_iterator aSrcIt( aNewSeries.begin()); - std::vector< Reference< XDataSeriesContainer > >::iterator aDestIt( aSeriesCnt.begin()); - for(; aSrcIt != aNewSeries.end() && aDestIt != aSeriesCnt.end(); + auto aSrcIt = rNewData.Series.begin(); + auto aDestIt = aSeriesCnt.begin(); + for(; aSrcIt != rNewData.Series.end() && aDestIt != aSeriesCnt.end(); ++aSrcIt, ++aDestIt ) { try @@ -890,16 +834,13 @@ void DialogModel::applyInterpretedData( sal_Int32 DialogModel::countSeries() const { - std::vector< Reference< XDataSeriesContainer > > aCnt( getAllDataSeriesContainers()); + std::vector< rtl::Reference< ChartType > > aCnt( getAllDataSeriesContainers()); return std::accumulate( aCnt.begin(), aCnt.end(), 0, lcl_addSeriesNumber()); } ChartModel& DialogModel::getModel() const { - uno::Reference< frame::XModel > xModel = getChartModel(); - ChartModel* pModel = dynamic_cast<ChartModel*>(xModel.get()); - assert(pModel); - return *pModel; + return *m_xChartDocument; } } // namespace chart diff --git a/chart2/source/controller/dialogs/DialogModel.hxx b/chart2/source/controller/dialogs/DialogModel.hxx index 2bd8d55faf00..24b74d6fab3a 100644 --- a/chart2/source/controller/dialogs/DialogModel.hxx +++ b/chart2/source/controller/dialogs/DialogModel.hxx @@ -21,6 +21,7 @@ #include <TimerTriggeredControllerLock.hxx> #include <rtl/ustring.hxx> #include <rtl/ref.hxx> +#include <ChartTypeTemplate.hxx> #include <map> #include <memory> @@ -37,8 +38,6 @@ namespace com::sun::star::chart2 { class XDataSeriesContainer; class XDataSeries; class XChartType; - class XChartTypeTemplate; - struct InterpretedData; namespace data { class XDataProvider; class XLabeledDataSequence; @@ -47,9 +46,11 @@ namespace com::sun::star::chart2 { namespace chart { - +class ChartType; +class DataSeries; +struct InterpretedData; +class LabeledDataSequence; class RangeSelectionHelper; -class ChartTypeTemplate; struct DialogModelTimeBasedInfo { @@ -63,15 +64,13 @@ struct DialogModelTimeBasedInfo class DialogModel { public: - explicit DialogModel( - const rtl::Reference<::chart::ChartModel> & xChartDocument, - const css::uno::Reference< css::uno::XComponentContext > & xContext ); + explicit DialogModel( rtl::Reference<::chart::ChartModel> xChartDocument ); ~DialogModel(); typedef std::pair< OUString, - std::pair< css::uno::Reference< css::chart2::XDataSeries >, - css::uno::Reference< css::chart2::XChartType > > > + std::pair< rtl::Reference< ::chart::DataSeries >, + rtl::Reference< ::chart::ChartType > > > tSeriesWithChartTypeByName; typedef std::map< OUString, OUString > @@ -89,7 +88,7 @@ public: css::uno::Reference< css::chart2::data::XDataProvider > getDataProvider() const; - std::vector< css::uno::Reference< css::chart2::XDataSeriesContainer > > + std::vector< rtl::Reference< ::chart::ChartType > > getAllDataSeriesContainers() const; std::vector< tSeriesWithChartTypeByName > @@ -98,26 +97,26 @@ public: static tRolesWithRanges getRolesWithRanges( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, const OUString & aRoleOfSequenceForLabel, - const css::uno::Reference< css::chart2::XChartType > & xChartType ); + const rtl::Reference< ::chart::ChartType > & xChartType ); enum class MoveDirection { Down, Up }; - void moveSeries( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, + void moveSeries( const rtl::Reference< DataSeries > & xSeries, MoveDirection eDirection ); /// @return the newly inserted series - css::uno::Reference< - css::chart2::XDataSeries > insertSeriesAfter( + rtl::Reference< + ::chart::DataSeries > insertSeriesAfter( const css::uno::Reference< css::chart2::XDataSeries > & xSeries, - const css::uno::Reference< css::chart2::XChartType > & xChartType, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bCreateDataCachedSequences = false ); void deleteSeries( - const css::uno::Reference< css::chart2::XDataSeries > & xSeries, - const css::uno::Reference< css::chart2::XChartType > & xChartType ); + const rtl::Reference< ::chart::DataSeries > & xSeries, + const rtl::Reference< ::chart::ChartType > & xChartType ); css::uno::Reference< css::chart2::data::XLabeledDataSequence > getCategories() const; @@ -155,11 +154,7 @@ private: rtl::Reference<::chart::ChartModel> m_xChartDocument; - css::uno::Reference< css::chart2::XChartTypeTemplate > - m_xTemplate; - - css::uno::Reference< css::uno::XComponentContext > - m_xContext; + rtl::Reference< ::chart::ChartTypeTemplate > m_xTemplate; mutable std::shared_ptr< RangeSelectionHelper > m_spRangeSelectionHelper; @@ -168,8 +163,8 @@ private: private: void applyInterpretedData( - const css::chart2::InterpretedData & rNewData, - const std::vector< css::uno::Reference< css::chart2::XDataSeries > > & rSeriesToReUse ); + const InterpretedData & rNewData, + const std::vector< rtl::Reference< ::chart::DataSeries > > & rSeriesToReUse ); sal_Int32 countSeries() const; diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx b/chart2/source/controller/dialogs/ObjectNameProvider.cxx index 201671e87bcf..f06c7af5e777 100644 --- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx +++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx @@ -24,11 +24,12 @@ #include <ObjectNameProvider.hxx> #include <ResId.hxx> #include <strings.hrc> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <ChartModel.hxx> -#include <ChartModelHelper.hxx> -#include <DiagramHelper.hxx> +#include <ChartType.hxx> #include <Diagram.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <TitleHelper.hxx> #include <ExplicitCategoriesProvider.hxx> @@ -36,16 +37,16 @@ #include <NumberFormatterWrapper.hxx> #include <RegressionCurveHelper.hxx> #include <BaseCoordinateSystem.hxx> +#include <RegressionCurveModel.hxx> #include <rtl/math.hxx> #include <rtl/ustring.hxx> #include <vcl/settings.hxx> #include <vcl/svapp.hxx> #include <unotools/localedatawrapper.hxx> -#include <com/sun/star/chart2/XTitle.hpp> #include <com/sun/star/chart2/MovingAverageType.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <o3tl/string_view.hxx> namespace chart { @@ -58,26 +59,26 @@ using ::com::sun::star::uno::Any; namespace { -OUString lcl_getDataSeriesName( const OUString& rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel ) +OUString lcl_getDataSeriesName( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel ) { OUString aRet; - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); - Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ); + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ); if( xDiagram.is() && xSeries.is() ) { - Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xSeries ) ); if( xChartType.is() ) { - aRet = ::chart::DataSeriesHelper::getDataSeriesLabel( - xSeries, xChartType->getRoleOfSequenceForSeriesLabel() ) ; + aRet = xSeries->getLabelForRole( + xChartType->getRoleOfSequenceForSeriesLabel() ) ; } } return aRet; } -OUString lcl_getFullSeriesName( const OUString& rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel ) +OUString lcl_getFullSeriesName( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel ) { OUString aRet(SchResId(STR_TIP_DATASERIES)); OUString aWildcard( "%SERIESNAME" ); @@ -95,19 +96,17 @@ void lcl_addText( OUString& rOut, std::u16string_view rSeparator, std::u16string rOut+=rNext; } -OUString lcl_getDataPointValueText( const Reference< XDataSeries >& xSeries, sal_Int32 nPointIndex, - const Reference< XCoordinateSystem >& xCooSys, +OUString lcl_getDataPointValueText( const rtl::Reference< DataSeries >& xSeries, sal_Int32 nPointIndex, + const rtl::Reference< BaseCoordinateSystem >& xCooSys, const Reference< frame::XModel >& xChartModel ) { OUString aRet; - Reference<data::XDataSource> xDataSource( - uno::Reference<data::XDataSource>( xSeries, uno::UNO_QUERY ) ); - if(!xDataSource.is()) + if(!xSeries.is()) return aRet; - Sequence< Reference< data::XLabeledDataSequence > > aDataSequences( xDataSource->getDataSequences() ); + const std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > & aDataSequences = xSeries->getDataSequences2(); OUString aX, aY, aY_Min, aY_Max, aY_First, aY_Last, a_Size; double fValue = 0; @@ -117,18 +116,20 @@ OUString lcl_getDataPointValueText( const Reference< XDataSeries >& xSeries, sal Color nLabelColor;//dummy bool bColorChanged;//dummy - for(sal_Int32 nN = aDataSequences.getLength();nN--;) + for(sal_Int32 nN = aDataSequences.size();nN--;) { uno::Reference<data::XDataSequence> xDataSequence( aDataSequences[nN]->getValues()); if( !xDataSequence.is() ) continue; - Sequence< Any > aData( xDataSequence->getData() ); - if( nPointIndex >= aData.getLength() ) - continue; - uno::Reference<beans::XPropertySet> xProp(xDataSequence, uno::UNO_QUERY ); - if( xProp.is()) + + try { - try + Sequence< Any > aData( xDataSequence->getData() ); + + if( nPointIndex >= aData.getLength() ) + continue; + uno::Reference<beans::XPropertySet> xProp(xDataSequence, uno::UNO_QUERY ); + if( xProp.is()) { uno::Any aARole = xProp->getPropertyValue( "Role" ); OUString aRole; @@ -177,10 +178,14 @@ OUString lcl_getDataPointValueText( const Reference< XDataSeries >& xSeries, sal a_Size = aNumberFormatterWrapper.getFormattedString( nNumberFormatKey, fValue, nLabelColor, bColorChanged ); } } - catch( const uno::Exception& ) - { - TOOLS_WARN_EXCEPTION("chart2", "" ); - } + } + catch (const lang::DisposedException&) + { + TOOLS_WARN_EXCEPTION( "chart2", "unexpected exception caught" ); + } + catch( const uno::Exception& ) + { + TOOLS_WARN_EXCEPTION("chart2", "" ); } } @@ -312,24 +317,27 @@ OUString ObjectNameProvider::getName( ObjectType eObjectType, bool bPlural ) case OBJECTTYPE_DATA_CURVE_EQUATION: aRet=SchResId(STR_OBJECT_CURVE_EQUATION); break; + case OBJECTTYPE_DATA_TABLE: + aRet=SchResId(STR_DATA_TABLE); + break; default: //OBJECTTYPE_UNKNOWN ; } return aRet; } -OUString ObjectNameProvider::getAxisName( const OUString& rObjectCID +OUString ObjectNameProvider::getAxisName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ) { OUString aRet; - Reference< XAxis > xAxis( - ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = + dynamic_cast<::chart::Axis*>(ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ).get()); sal_Int32 nCooSysIndex = 0; sal_Int32 nDimensionIndex = 0; sal_Int32 nAxisIndex = 0; - AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel ), nCooSysIndex, nDimensionIndex, nAxisIndex ); + AxisHelper::getIndicesForAxis( xAxis, xChartModel->getFirstChartDiagram(), nCooSysIndex, nDimensionIndex, nAxisIndex ); switch(nDimensionIndex) { @@ -394,14 +402,14 @@ OUString ObjectNameProvider::getTitleNameByType( TitleHelper::eTitleType eType ) return aRet; } -OUString ObjectNameProvider::getTitleName( const OUString& rObjectCID +OUString ObjectNameProvider::getTitleName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ) { OUString aRet; - Reference< XTitle > xTitle( - ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ), uno::UNO_QUERY ); - if( xTitle.is() ) + rtl::Reference<Title> xTitle = + dynamic_cast<Title*>(ObjectIdentifier::getObjectPropertySet( rObjectCID , xChartModel ).get()); + if( xTitle ) { TitleHelper::eTitleType eType; if( TitleHelper::getTitleType( eType, xTitle, xChartModel ) ) @@ -413,7 +421,7 @@ OUString ObjectNameProvider::getTitleName( const OUString& rObjectCID return aRet; } -OUString ObjectNameProvider::getGridName( const OUString& rObjectCID +OUString ObjectNameProvider::getGridName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ) { OUString aRet; @@ -421,8 +429,8 @@ OUString ObjectNameProvider::getGridName( const OUString& rObjectCID sal_Int32 nCooSysIndex = -1; sal_Int32 nDimensionIndex = -1; sal_Int32 nAxisIndex = -1; - Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( rObjectCID , xChartModel ) ); - AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( xChartModel ) + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( rObjectCID , xChartModel ); + AxisHelper::getIndicesForAxis( xAxis, xChartModel->getFirstChartDiagram() , nCooSysIndex , nDimensionIndex, nAxisIndex ); bool bMainGrid = (ObjectIdentifier::getObjectType( rObjectCID ) == OBJECTTYPE_GRID); @@ -466,7 +474,7 @@ OUString ObjectNameProvider::getGridName( const OUString& rObjectCID return aRet; } -OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, bool bVerbose ) +OUString ObjectNameProvider::getHelpText( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, bool bVerbose ) { OUString aRet; ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) ); @@ -498,11 +506,11 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: else aRet=SchResId(STR_TIP_DATAPOINT); - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); - Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ); + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel ); if( xDiagram.is() && xSeries.is() ) { - sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() ); + sal_Int32 nPointIndex = o3tl::toInt32(ObjectIdentifier::getParticleID(rObjectCID)); //replace data point index OUString aWildcard( "%POINTNUMBER" ); @@ -517,8 +525,8 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: nIndex = aRet.indexOf( aWildcard ); if( nIndex != -1 ) { - std::vector< Reference< chart2::XDataSeries > > aSeriesVector( - DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector = + xDiagram->getDataSeries(); sal_Int32 nSeriesIndex = -1; for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;) { @@ -551,13 +559,12 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: if( bVerbose ) { aRet = SchResId( STR_OBJECT_CURVE_WITH_PARAMETERS ); - Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel )); - Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel )); - if( xCurveCnt.is()) + if( xSeries.is()) { sal_Int32 nCurveIndex = ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID ); - Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getRegressionCurveAtIndex(xCurveCnt, nCurveIndex) ); + rtl::Reference< RegressionCurveModel > xCurve = RegressionCurveHelper::getRegressionCurveAtIndex(xSeries, nCurveIndex); if( xCurve.is()) { try @@ -573,60 +580,55 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: const OUString& aNumDecimalSep = rLocaleDataWrapper.getNumDecimalSep(); sal_Unicode cDecSeparator = aNumDecimalSep[0]; - uno::Reference< beans::XPropertySet > xProperties( xCurve, uno::UNO_QUERY ); - if ( xProperties.is()) + xCurve->getPropertyValue( "PolynomialDegree") >>= aDegree; + xCurve->getPropertyValue( "MovingAveragePeriod") >>= aPeriod; + xCurve->getPropertyValue( "MovingAverageType") >>= aMovingType; + xCurve->getPropertyValue( "ForceIntercept") >>= bForceIntercept; + if (bForceIntercept) + xCurve->getPropertyValue( "InterceptValue") >>= aInterceptValue; + uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties()); + if( xEqProp.is()) { - xProperties->getPropertyValue( "PolynomialDegree") >>= aDegree; - xProperties->getPropertyValue( "MovingAveragePeriod") >>= aPeriod; - xProperties->getPropertyValue( "MovingAverageType") >>= aMovingType; - xProperties->getPropertyValue( "ForceIntercept") >>= bForceIntercept; - if (bForceIntercept) - xProperties->getPropertyValue( "InterceptValue") >>= aInterceptValue; - uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties()); - if( xEqProp.is()) - { - if ( !(xEqProp->getPropertyValue( "XName") >>= aXName) ) - aXName = "x"; - if ( !(xEqProp->getPropertyValue( "YName") >>= aYName) ) - aYName = "f(x)"; - } + if ( !(xEqProp->getPropertyValue( "XName") >>= aXName) ) + aXName = "x"; + if ( !(xEqProp->getPropertyValue( "YName") >>= aYName) ) + aYName = "f(x)"; } - xCalculator->setRegressionProperties(aDegree, bForceIntercept, aInterceptValue, 2, aMovingType); + xCalculator->setRegressionProperties(aDegree, bForceIntercept, aInterceptValue, aPeriod, aMovingType); xCalculator->setXYNames ( aXName, aYName ); RegressionCurveHelper::initializeCurveCalculator( xCalculator, xSeries, xChartModel ); // change text for Moving Average - OUString aWildcard( "%PERIOD" ); - sal_Int32 nIndex = xCalculator->getRepresentation().indexOf( aWildcard ); - if( nIndex != -1 ) - { // replace period - aRet = xCalculator->getRepresentation(); - aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), OUString::number(aPeriod) ); + if ( RegressionCurveHelper::getRegressionType( xCurve ) == SvxChartRegress::MovingAverage ) + { + aRet = xCalculator->getRepresentation(); } - - // replace formula - aWildcard = "%FORMULA"; - nIndex = aRet.indexOf( aWildcard ); - if( nIndex != -1 ) + else { - OUString aFormula ( xCalculator->getRepresentation() ); - if ( cDecSeparator != '.' ) + // replace formula + OUString aWildcard = "%FORMULA"; + sal_Int32 nIndex = aRet.indexOf( aWildcard ); + if( nIndex != -1 ) { - aFormula = aFormula.replace( '.', cDecSeparator ); + OUString aFormula ( xCalculator->getRepresentation() ); + if ( cDecSeparator != '.' ) + { + aFormula = aFormula.replace( '.', cDecSeparator ); + } + aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), aFormula ); } - aRet = aRet.replaceAt( nIndex, aWildcard.getLength(), aFormula ); - } - // replace r^2 - aWildcard = "%RSQUARED"; - nIndex = aRet.indexOf( aWildcard ); - if( nIndex != -1 ) - { - double fR( xCalculator->getCorrelationCoefficient()); - aRet = aRet.replaceAt( - nIndex, aWildcard.getLength(), - ::rtl::math::doubleToUString( - fR*fR, rtl_math_StringFormat_G, 4, cDecSeparator, true )); + // replace r^2 + aWildcard = "%RSQUARED"; + nIndex = aRet.indexOf( aWildcard ); + if( nIndex != -1 ) + { + double fR( xCalculator->getCorrelationCoefficient()); + aRet = aRet.replaceAt( + nIndex, aWildcard.getLength(), + ::rtl::math::doubleToUString( + fR*fR, rtl_math_StringFormat_G, 4, cDecSeparator, true )); + } } } catch( const uno::Exception & ) @@ -638,14 +640,13 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: } else { - Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID(rObjectCID , xChartModel)); - Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID(rObjectCID , xChartModel)); aRet += getName(eObjectType); - if( xCurveCnt.is()) + if( xSeries.is()) { sal_Int32 nCurveIndex = ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID ); - Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getRegressionCurveAtIndex(xCurveCnt, nCurveIndex) ); + rtl::Reference< RegressionCurveModel > xCurve( RegressionCurveHelper::getRegressionCurveAtIndex(xSeries, nCurveIndex) ); if( xCurve.is()) { aRet += " (" + RegressionCurveHelper::getRegressionCurveName(xCurve) + " )"; @@ -658,11 +659,10 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: if( bVerbose ) { aRet = SchResId(STR_OBJECT_AVERAGE_LINE_WITH_PARAMETERS); - Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel )); - Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); - if( xCurveCnt.is()) + rtl::Reference< DataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel )); + if( xSeries.is()) { - Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getMeanValueLine( xCurveCnt )); + rtl::Reference< RegressionCurveModel > xCurve( RegressionCurveHelper::getMeanValueLine( xSeries )); if( xCurve.is()) { try @@ -718,7 +718,7 @@ OUString ObjectNameProvider::getHelpText( const OUString& rObjectCID, const rtl: return aRet; } -OUString ObjectNameProvider::getSelectedObjectText( const OUString & rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ) +OUString ObjectNameProvider::getSelectedObjectText( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ) { OUString aRet; ObjectType eObjectType( ObjectIdentifier::getObjectType(rObjectCID) ); @@ -727,30 +727,30 @@ OUString ObjectNameProvider::getSelectedObjectText( const OUString & rObjectCID, { aRet = SchResId( STR_STATUS_DATAPOINT_MARKED ); - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartDocument ) ); - Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartDocument ); + rtl::Reference< Diagram > xDiagram( xChartDocument->getFirstChartDiagram() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartDocument ); if( xDiagram.is() && xSeries.is() ) { - sal_Int32 nPointIndex( ObjectIdentifier::getParticleID(rObjectCID).toInt32() ); + sal_Int32 nPointIndex = o3tl::toInt32( ObjectIdentifier::getParticleID(rObjectCID) ); // replace data point index - replaceParamterInString( aRet, "%POINTNUMBER", OUString::number( nPointIndex + 1 )); + replaceParamterInString( aRet, u"%POINTNUMBER", OUString::number( nPointIndex + 1 )); // replace data series index { - std::vector< Reference< chart2::XDataSeries > > aSeriesVector( - DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); + std::vector< rtl::Reference< DataSeries > > aSeriesVector( + xDiagram->getDataSeries() ); sal_Int32 nSeriesIndex = -1; for( nSeriesIndex=aSeriesVector.size();nSeriesIndex--;) { if( aSeriesVector[nSeriesIndex] == xSeries ) break; } - replaceParamterInString( aRet, "%SERIESNUMBER", OUString::number( nSeriesIndex + 1 ) ); + replaceParamterInString( aRet, u"%SERIESNUMBER", OUString::number( nSeriesIndex + 1 ) ); } // replace point value - replaceParamterInString( aRet, "%POINTVALUES", lcl_getDataPointValueText( + replaceParamterInString( aRet, u"%POINTVALUES", lcl_getDataPointValueText( xSeries, nPointIndex, DataSeriesHelper::getCoordinateSystemOfSeries(xSeries, xDiagram), xChartDocument ) ); } } @@ -762,7 +762,7 @@ OUString ObjectNameProvider::getSelectedObjectText( const OUString & rObjectCID, if( !aHelpText.isEmpty()) { aRet = SchResId( STR_STATUS_OBJECT_MARKED ); - replaceParamterInString( aRet, "%OBJECTNAME", aHelpText ); + replaceParamterInString( aRet, u"%OBJECTNAME", aHelpText ); } } @@ -770,7 +770,7 @@ OUString ObjectNameProvider::getSelectedObjectText( const OUString & rObjectCID, } OUString ObjectNameProvider::getNameForCID( - const OUString& rObjectCID, + std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ) { ObjectType eType( ObjectIdentifier::getObjectType( rObjectCID )); @@ -809,15 +809,14 @@ OUString ObjectNameProvider::getNameForCID( } else if (eType == OBJECTTYPE_DATA_CURVE || eType == OBJECTTYPE_DATA_CURVE_EQUATION) { - Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartDocument )); - Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartDocument )); aRet += " " + getName(eType); - if( xCurveCnt.is()) + if( xSeries.is()) { sal_Int32 nCurveIndex = ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID ); - Reference< chart2::XRegressionCurve > xCurve( RegressionCurveHelper::getRegressionCurveAtIndex(xCurveCnt, nCurveIndex) ); + rtl::Reference< RegressionCurveModel > xCurve( RegressionCurveHelper::getRegressionCurveAtIndex(xSeries, nCurveIndex) ); if( xCurve.is()) { aRet += " (" + RegressionCurveHelper::getRegressionCurveName(xCurve) + ")"; @@ -839,15 +838,15 @@ OUString ObjectNameProvider::getNameForCID( OUString ObjectNameProvider::getName_ObjectForSeries( ObjectType eObjectType, - const OUString& rSeriesCID, + std::u16string_view rSeriesCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ) { - Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSeriesCID , xChartDocument ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSeriesCID , xChartDocument ); if( xSeries.is() ) { OUString aRet = SchResId(STR_OBJECT_FOR_SERIES); - replaceParamterInString( aRet, "%OBJECTNAME", getName( eObjectType ) ); - replaceParamterInString( aRet, "%SERIESNAME", lcl_getDataSeriesName( rSeriesCID, xChartDocument ) ); + replaceParamterInString( aRet, u"%OBJECTNAME", getName( eObjectType ) ); + replaceParamterInString( aRet, u"%SERIESNAME", lcl_getDataSeriesName( rSeriesCID, xChartDocument ) ); return aRet; } else @@ -857,7 +856,7 @@ OUString ObjectNameProvider::getName_ObjectForSeries( OUString ObjectNameProvider::getName_ObjectForAllSeries( ObjectType eObjectType ) { OUString aRet = SchResId(STR_OBJECT_FOR_ALL_SERIES); - replaceParamterInString( aRet, "%OBJECTNAME", getName( eObjectType, true /*bPlural*/ ) ); + replaceParamterInString( aRet, u"%OBJECTNAME", getName( eObjectType, true /*bPlural*/ ) ); return aRet; } diff --git a/chart2/source/controller/dialogs/RangeSelectionHelper.cxx b/chart2/source/controller/dialogs/RangeSelectionHelper.cxx index 5cbc07f76078..00e9a3cc8a8c 100644 --- a/chart2/source/controller/dialogs/RangeSelectionHelper.cxx +++ b/chart2/source/controller/dialogs/RangeSelectionHelper.cxx @@ -20,10 +20,10 @@ #include <RangeSelectionHelper.hxx> #include <RangeSelectionListener.hxx> #include <com/sun/star/awt/XTopWindow.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/data/XDataProvider.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <ChartModel.hxx> +#include <utility> using namespace ::com::sun::star; @@ -34,8 +34,8 @@ namespace chart { RangeSelectionHelper::RangeSelectionHelper( - const rtl::Reference<::chart::ChartModel> & xChartDocument ) : - m_xChartDocument( xChartDocument ) + rtl::Reference<::chart::ChartModel> xChartDocument ) : + m_xChartDocument(std::move( xChartDocument )) {} RangeSelectionHelper::~RangeSelectionHelper() diff --git a/chart2/source/controller/dialogs/RangeSelectionListener.cxx b/chart2/source/controller/dialogs/RangeSelectionListener.cxx index 473ad909f8f5..e4974ab30de0 100644 --- a/chart2/source/controller/dialogs/RangeSelectionListener.cxx +++ b/chart2/source/controller/dialogs/RangeSelectionListener.cxx @@ -19,20 +19,19 @@ #include <RangeSelectionListener.hxx> #include <ChartModel.hxx> +#include <utility> using namespace ::com::sun::star; -using ::com::sun::star::uno::Reference; - namespace chart { RangeSelectionListener::RangeSelectionListener( RangeSelectionListenerParent & rParent, - const OUString & rInitialRange, + OUString aInitialRange, const rtl::Reference<::chart::ChartModel>& xModelToLockController ) : m_rParent( rParent ), - m_aRange( rInitialRange ), + m_aRange(std::move( aInitialRange )), m_aControllerLockGuard( xModelToLockController ) {} diff --git a/chart2/source/controller/dialogs/TimerTriggeredControllerLock.cxx b/chart2/source/controller/dialogs/TimerTriggeredControllerLock.cxx index 33fe0ff6955f..cee4af1fb013 100644 --- a/chart2/source/controller/dialogs/TimerTriggeredControllerLock.cxx +++ b/chart2/source/controller/dialogs/TimerTriggeredControllerLock.cxx @@ -17,18 +17,18 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <com/sun/star/frame/XModel.hpp> #include <TimerTriggeredControllerLock.hxx> #include <ControllerLockGuard.hxx> #include <ChartModel.hxx> +#include <utility> namespace chart { using namespace ::com::sun::star; TimerTriggeredControllerLock::TimerTriggeredControllerLock( - const rtl::Reference<::chart::ChartModel>& xModel) - : m_xModel(xModel) + rtl::Reference<::chart::ChartModel> xModel) + : m_xModel(std::move(xModel)) , m_aTimer("chart2 TimerTriggeredControllerLock") { m_aTimer.SetTimeout(4 * EDIT_UPDATEDATA_TIMEOUT); diff --git a/chart2/source/controller/dialogs/TitleDialogData.cxx b/chart2/source/controller/dialogs/TitleDialogData.cxx index 7f48d90a0b24..75d59bbb43b4 100644 --- a/chart2/source/controller/dialogs/TitleDialogData.cxx +++ b/chart2/source/controller/dialogs/TitleDialogData.cxx @@ -19,11 +19,8 @@ #include <sal/config.h> -#include <com/sun/star/frame/XModel.hpp> - #include <TitleDialogData.hxx> #include <TitleHelper.hxx> -#include <ChartModelHelper.hxx> #include <Diagram.hxx> #include <AxisHelper.hxx> #include <ChartModel.hxx> @@ -31,9 +28,8 @@ namespace chart { using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; -TitleDialogData::TitleDialogData( std::unique_ptr<ReferenceSizeProvider> pRefSizeProvider ) +TitleDialogData::TitleDialogData( std::optional<ReferenceSizeProvider> pRefSizeProvider ) : aPossibilityList{ true, true, true, true, true, true, true } , aExistenceList{ false, false, false, false, false, false, false } , aTextList(7) @@ -43,7 +39,7 @@ TitleDialogData::TitleDialogData( std::unique_ptr<ReferenceSizeProvider> pRefSiz void TitleDialogData::readFromModel( const rtl::Reference<::chart::ChartModel>& xChartModel ) { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram(xChartModel); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); //get possibilities uno::Sequence< sal_Bool > aAxisPossibilityList; @@ -59,11 +55,11 @@ void TitleDialogData::readFromModel( const rtl::Reference<::chart::ChartModel>& auto pTextList = aTextList.getArray(); //find out which title exists and get their text //main title: - for( sal_Int32 nTitleIndex = static_cast< sal_Int32 >( TitleHelper::TITLE_BEGIN); - nTitleIndex < static_cast< sal_Int32 >( TitleHelper::NORMAL_TITLE_END ); + for( auto nTitleIndex = +TitleHelper::TITLE_BEGIN; + nTitleIndex < +TitleHelper::NORMAL_TITLE_END; nTitleIndex++) { - uno::Reference< XTitle > xTitle = TitleHelper::getTitle( + rtl::Reference< Title > xTitle = TitleHelper::getTitle( static_cast< TitleHelper::eTitleType >( nTitleIndex ), xChartModel ); pExistenceList[nTitleIndex] = xTitle.is(); pTextList[nTitleIndex]=TitleHelper::getCompleteString( xTitle ); @@ -73,11 +69,11 @@ void TitleDialogData::readFromModel( const rtl::Reference<::chart::ChartModel>& bool TitleDialogData::writeDifferenceToModel( const rtl::Reference<::chart::ChartModel>& xChartModel , const uno::Reference< uno::XComponentContext >& xContext - , TitleDialogData* pOldState ) + , const TitleDialogData* pOldState ) { bool bChanged = false; - for( sal_Int32 nN = static_cast< sal_Int32 >( TitleHelper::TITLE_BEGIN ); - nN < static_cast< sal_Int32 >( TitleHelper::NORMAL_TITLE_END ); + for( auto nN = +TitleHelper::TITLE_BEGIN; + nN < +TitleHelper::NORMAL_TITLE_END; nN++) { if( !pOldState || ( pOldState->aExistenceList[nN] != aExistenceList[nN] ) ) @@ -86,7 +82,7 @@ bool TitleDialogData::writeDifferenceToModel( { TitleHelper::createTitle( static_cast< TitleHelper::eTitleType >( nN ), aTextList[nN], xChartModel, xContext, - apReferenceSizeProvider.get() ); + apReferenceSizeProvider.has_value() ? &*apReferenceSizeProvider : nullptr ); bChanged = true; } else @@ -98,11 +94,11 @@ bool TitleDialogData::writeDifferenceToModel( else if( !pOldState || ( pOldState->aTextList[nN] != aTextList[nN] ) ) { //change content - uno::Reference< XTitle > xTitle( + rtl::Reference< Title > xTitle( TitleHelper::getTitle( static_cast< TitleHelper::eTitleType >( nN ), xChartModel ) ); if(xTitle.is()) { - TitleHelper::setCompleteString( aTextList[nN], xTitle, xContext ); + TitleHelper::setCompleteString( aTextList[nN], xTitle, xContext, nullptr, true ); bChanged = true; } } diff --git a/chart2/source/controller/dialogs/dlg_ChartType.cxx b/chart2/source/controller/dialogs/dlg_ChartType.cxx index 59ca6be0c99a..a1f52f5169a5 100644 --- a/chart2/source/controller/dialogs/dlg_ChartType.cxx +++ b/chart2/source/controller/dialogs/dlg_ChartType.cxx @@ -19,19 +19,18 @@ #include <dlg_ChartType.hxx> #include "tp_ChartType.hxx" -#include <com/sun/star/chart2/XChartDocument.hpp> #include <ChartModel.hxx> +#include <utility> namespace chart { using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; ChartTypeDialog::ChartTypeDialog(weld::Window* pParent, - const rtl::Reference<::chart::ChartModel>& xChartModel) + rtl::Reference<::chart::ChartModel> xChartModel) : GenericDialogController(pParent, "modules/schart/ui/charttypedialog.ui", "ChartTypeDialog") - , m_xChartModel(xChartModel) - , m_xContentArea(m_xDialog->weld_content_area()) + , m_xChartModel(std::move(xChartModel)) + , m_xContentArea(m_xBuilder->weld_container("content")) { m_xChartTypeTabPage = std::make_unique<ChartTypeTabPage>( m_xContentArea.get(), this, m_xChartModel, false /*don't show title description*/); diff --git a/chart2/source/controller/dialogs/dlg_ChartType_UNO.cxx b/chart2/source/controller/dialogs/dlg_ChartType_UNO.cxx index 873edbc48ada..0e95cd75c48e 100644 --- a/chart2/source/controller/dialogs/dlg_ChartType_UNO.cxx +++ b/chart2/source/controller/dialogs/dlg_ChartType_UNO.cxx @@ -23,7 +23,6 @@ #include <servicenames.hxx> #include <osl/mutex.hxx> #include <vcl/svapp.hxx> -#include <com/sun/star/frame/XModel.hpp> namespace com::sun::star::awt { class XWindow; } diff --git a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx index e186633c869f..12d22805790f 100644 --- a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx +++ b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx @@ -29,6 +29,7 @@ #include "tp_DataSource.hxx" #include <ChartTypeTemplateProvider.hxx> #include <ChartTypeTemplate.hxx> +#include <utility> #include "DialogModel.hxx" using namespace css; @@ -46,15 +47,15 @@ namespace chart #define STATE_LAST STATE_OBJECTS CreationWizard::CreationWizard(weld::Window* pParent, const rtl::Reference<::chart::ChartModel>& xChartModel, - const uno::Reference<uno::XComponentContext>& xContext) + uno::Reference<uno::XComponentContext> xContext) : vcl::RoadmapWizardMachine(pParent) , m_xChartModel(xChartModel,uno::UNO_QUERY) - , m_xComponentContext(xContext) + , m_xComponentContext(std::move(xContext)) , m_pTemplateProvider(nullptr) , m_aTimerTriggeredControllerLock(xChartModel) , m_bCanTravel(true) { - m_pDialogModel.reset(new DialogModel(m_xChartModel, m_xComponentContext)); + m_pDialogModel.reset(new DialogModel(m_xChartModel)); defaultButton(WizardButtonFlags::FINISH); setTitleBase(SchResId(STR_DLG_CHART_WIZARD)); @@ -94,7 +95,7 @@ std::unique_ptr<BuilderPage> CreationWizard::createPage(WizardState nState) { std::unique_ptr<vcl::OWizardPage> xRet; - OString sIdent(OString::number(nState)); + OUString sIdent(OUString::number(nState)); weld::Container* pPageContainer = m_xAssistant->append_page(sIdent); switch( nState ) diff --git a/chart2/source/controller/dialogs/dlg_CreationWizard_UNO.cxx b/chart2/source/controller/dialogs/dlg_CreationWizard_UNO.cxx index 973b8fa74027..3a1fa1386f7a 100644 --- a/chart2/source/controller/dialogs/dlg_CreationWizard_UNO.cxx +++ b/chart2/source/controller/dialogs/dlg_CreationWizard_UNO.cxx @@ -22,22 +22,25 @@ #include <ChartModel.hxx> #include <servicenames.hxx> #include <TimerTriggeredControllerLock.hxx> +#include <utility> #include <vcl/svapp.hxx> +#include <vcl/weldutils.hxx> #include <cppuhelper/supportsservice.hxx> #include <com/sun/star/awt/Point.hpp> #include <com/sun/star/awt/Size.hpp> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/frame/Desktop.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <sfx2/viewsh.hxx> + namespace chart { using namespace ::com::sun::star; -CreationWizardUnoDlg::CreationWizardUnoDlg(const uno::Reference<uno::XComponentContext>& xContext) +CreationWizardUnoDlg::CreationWizardUnoDlg(uno::Reference<uno::XComponentContext> xContext) : OComponentHelper(m_aMutex) - , m_xCC(xContext) + , m_xCC(std::move(xContext)) , m_bUnlockControllersOnExecute(false) { uno::Reference< frame::XDesktop2 > xDesktop = frame::Desktop::create(m_xCC); @@ -166,10 +169,18 @@ void CreationWizardUnoDlg::createDialogOnDemand() m_xParentWindow = xFrame->getContainerWindow(); } } + + weld::Window* pParent(Application::GetFrameWeld(m_xParentWindow)); + if (!pParent) + { + if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(m_xParentWindow.get())) + pParent = dynamic_cast<weld::Window*>(pTunnel->getWidget()); + } + uno::Reference< XComponent > xKeepAlive( this ); if( m_xChartModel.is() ) { - m_xDialog = std::make_shared<CreationWizard>(Application::GetFrameWeld(m_xParentWindow), m_xChartModel, m_xCC); + m_xDialog = std::make_shared<CreationWizard>(pParent, m_xChartModel, m_xCC); } } diff --git a/chart2/source/controller/dialogs/dlg_DataEditor.cxx b/chart2/source/controller/dialogs/dlg_DataEditor.cxx index 1e442a102f09..ee120df76fe7 100644 --- a/chart2/source/controller/dialogs/dlg_DataEditor.cxx +++ b/chart2/source/controller/dialogs/dlg_DataEditor.cxx @@ -20,11 +20,9 @@ #include <dlg_DataEditor.hxx> #include "DataBrowser.hxx" #include <ChartModel.hxx> -#include <comphelper/stl_types.hxx> #include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/frame/XStorable.hpp> +#include <utility> using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; @@ -33,11 +31,11 @@ namespace chart { DataEditor::DataEditor(weld::Window* pParent, - const rtl::Reference<::chart::ChartModel> & xChartDoc, + rtl::Reference<::chart::ChartModel> xChartDoc, const Reference< uno::XComponentContext > & xContext) : GenericDialogController(pParent, "modules/schart/ui/chartdatadialog.ui", "ChartDataDialog") , m_bReadOnly(false) - , m_xChartDoc(xChartDoc) + , m_xChartDoc(std::move(xChartDoc)) , m_xContext(xContext) , m_xTbxData(m_xBuilder->weld_toolbar("toolbar")) , m_xCloseBtn(m_xBuilder->weld_button("close")) @@ -58,7 +56,7 @@ DataEditor::DataEditor(weld::Window* pParent, m_xBrwData->SetCursorMovedHdl( LINK( this, DataEditor, BrowserCursorMovedHdl )); - m_xBrwData->SetDataFromModel( m_xChartDoc, m_xContext ); + m_xBrwData->SetDataFromModel( m_xChartDoc ); m_xBrwData->GrabFocus(); bool bReadOnly = true; @@ -75,7 +73,7 @@ DataEditor::~DataEditor() } // react on click (or keypress) on toolbar icon -IMPL_LINK(DataEditor, ToolboxHdl, const OString&, rId, void) +IMPL_LINK(DataEditor, ToolboxHdl, const OUString&, rId, void) { if (rId == "InsertRow") m_xBrwData->InsertRow(); @@ -113,8 +111,8 @@ IMPL_LINK_NOARG(DataEditor, BrowserCursorMovedHdl, DataBrowser*, void) m_xTbxData->set_item_sensitive("MoveLeftColumn", bIsDataValid && m_xBrwData->MayMoveLeftColumns() ); m_xTbxData->set_item_sensitive("MoveRightColumn", bIsDataValid && m_xBrwData->MayMoveRightColumns() ); - m_xTbxData->set_item_sensitive("MoveUpRow", bIsDataValid && m_xBrwData->MayMoveDownRows() ); - m_xTbxData->set_item_sensitive("MoveDownRow", bIsDataValid && m_xBrwData->MayMoveUpRows() ); + m_xTbxData->set_item_sensitive("MoveDownRow", bIsDataValid && m_xBrwData->MayMoveDownRows() ); + m_xTbxData->set_item_sensitive("MoveUpRow", bIsDataValid && m_xBrwData->MayMoveUpRows() ); } // disable all modifying controls diff --git a/chart2/source/controller/dialogs/dlg_DataSource.cxx b/chart2/source/controller/dialogs/dlg_DataSource.cxx index 7c804ba8a235..25b0367f8885 100644 --- a/chart2/source/controller/dialogs/dlg_DataSource.cxx +++ b/chart2/source/controller/dialogs/dlg_DataSource.cxx @@ -18,13 +18,11 @@ */ #include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <dlg_DataSource.hxx> #include <ChartTypeTemplateProvider.hxx> -#include <ChartTypeManager.hxx> #include <ChartTypeTemplate.hxx> -#include <DiagramHelper.hxx> +#include <Diagram.hxx> #include "DialogModel.hxx" #include <ChartModel.hxx> @@ -32,11 +30,8 @@ #include "tp_DataSource.hxx" using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; using namespace ::chart; -using ::com::sun::star::uno::Reference; - namespace chart { @@ -63,13 +58,11 @@ DocumentChartTypeTemplateProvider::DocumentChartTypeTemplateProvider( if( !xDoc.is()) return; - Reference< chart2::XDiagram > xDia( xDoc->getFirstDiagram()); + rtl::Reference< Diagram > xDia( xDoc->getFirstChartDiagram()); if( xDia.is()) { - DiagramHelper::tTemplateWithServiceName aResult( - DiagramHelper::getTemplateForDiagram( - xDia, - xDoc->getTypeManager() )); + Diagram::tTemplateWithServiceName aResult( + xDia->getTemplate( xDoc->getTypeManager() )); m_xTemplate = aResult.xChartTypeTemplate; } } @@ -82,12 +75,11 @@ rtl::Reference< ::chart::ChartTypeTemplate > DocumentChartTypeTemplateProvider:: sal_uInt16 DataSourceDialog::m_nLastPageId = 0; DataSourceDialog::DataSourceDialog(weld::Window * pParent, - const rtl::Reference<::chart::ChartModel> & xChartDocument, - const Reference< uno::XComponentContext > & xContext) + const rtl::Reference<::chart::ChartModel> & xChartDocument) : GenericDialogController(pParent, "modules/schart/ui/datarangedialog.ui", "DataRangeDialog") , m_apDocTemplateProvider(new DocumentChartTypeTemplateProvider(xChartDocument)) - , m_apDialogModel(new DialogModel(xChartDocument, xContext)) + , m_apDialogModel(new DialogModel(xChartDocument)) , m_bRangeChooserTabIsValid(true) , m_bDataSourceTabIsValid(true) , m_bTogglingEnabled(true) @@ -130,7 +122,7 @@ short DataSourceDialog::run() return nResult; } -IMPL_LINK(DataSourceDialog, ActivatePageHdl, const OString&, rPage, void) +IMPL_LINK(DataSourceDialog, ActivatePageHdl, const OUString&, rPage, void) { if (rPage == "range") m_xRangeChooserTabPage->Activate(); @@ -139,7 +131,7 @@ IMPL_LINK(DataSourceDialog, ActivatePageHdl, const OString&, rPage, void) } // allow/disallow user to leave page -IMPL_LINK_NOARG(DataSourceDialog, DeactivatePageHdl, const OString&, bool) +IMPL_LINK_NOARG(DataSourceDialog, DeactivatePageHdl, const OUString&, bool) { return m_bTogglingEnabled; } diff --git a/chart2/source/controller/dialogs/dlg_InsertAxis_Grid.cxx b/chart2/source/controller/dialogs/dlg_InsertAxis_Grid.cxx index f20571e22f55..6a79bac4a414 100644 --- a/chart2/source/controller/dialogs/dlg_InsertAxis_Grid.cxx +++ b/chart2/source/controller/dialogs/dlg_InsertAxis_Grid.cxx @@ -37,8 +37,8 @@ SchAxisDlg::SchAxisDlg(weld::Window* pWindow, OUString("modules/schart/ui/insertaxisdlg.ui") : OUString("modules/schart/ui/insertgriddlg.ui"), bAxisDlg ? - OString("InsertAxisDialog") : - OString("InsertGridDialog")) + OUString("InsertAxisDialog") : + OUString("InsertGridDialog")) , m_xCbPrimaryX(m_xBuilder->weld_check_button("primaryX")) , m_xCbPrimaryY(m_xBuilder->weld_check_button("primaryY")) , m_xCbPrimaryZ(m_xBuilder->weld_check_button("primaryZ")) diff --git a/chart2/source/controller/dialogs/dlg_InsertDataTable.cxx b/chart2/source/controller/dialogs/dlg_InsertDataTable.cxx new file mode 100644 index 000000000000..4b5e928db057 --- /dev/null +++ b/chart2/source/controller/dialogs/dlg_InsertDataTable.cxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <dlg_InsertDataTable.hxx> + +namespace chart +{ +InsertDataTableDialog::InsertDataTableDialog(weld::Window* pWindow) + : GenericDialogController(pWindow, "modules/schart/ui/dlg_InsertDataTable.ui", + "InsertDataTableDialog") + , m_aDataTablePropertiesResources(*m_xBuilder) + , m_xCbShowDataTable(m_xBuilder->weld_check_button("showDataTable")) +{ + m_xCbShowDataTable->connect_toggled(LINK(this, InsertDataTableDialog, ShowDataTableToggle)); + init(m_aData); +} + +IMPL_LINK_NOARG(InsertDataTableDialog, ShowDataTableToggle, weld::Toggleable&, void) +{ + changeEnabled(); +} + +void InsertDataTableDialog::changeEnabled() +{ + bool bEnable = m_xCbShowDataTable->get_active(); + m_aDataTablePropertiesResources.setChecksSensitive(bEnable); + m_aData.mbShow = bEnable; +} + +void InsertDataTableDialog::init(DataTableDialogData const& rData) +{ + m_aData = rData; + m_aDataTablePropertiesResources.setHorizontalBorder(m_aData.mbHorizontalBorders); + m_aDataTablePropertiesResources.setVerticalBorder(m_aData.mbVerticalBorders); + m_aDataTablePropertiesResources.setOutline(m_aData.mbOutline); + m_aDataTablePropertiesResources.setKeys(m_aData.mbKeys); + m_xCbShowDataTable->set_active(m_aData.mbShow); + changeEnabled(); +} + +DataTableDialogData& InsertDataTableDialog::getDataTableDialogData() +{ + m_aData.mbShow = m_xCbShowDataTable->get_active(); + + m_aData.mbHorizontalBorders = m_aDataTablePropertiesResources.getHorizontalBorder(); + m_aData.mbVerticalBorders = m_aDataTablePropertiesResources.getVerticalBorder(); + m_aData.mbOutline = m_aDataTablePropertiesResources.getOutline(); + m_aData.mbKeys = m_aDataTablePropertiesResources.getKeys(); + + return m_aData; +} + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx index ceec42d736e8..8ed2c1d7d650 100644 --- a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx +++ b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx @@ -21,18 +21,15 @@ #include <res_ErrorBar.hxx> #include <chartview/ExplicitScaleValues.hxx> #include <chartview/ExplicitValueProvider.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> +#include <ChartView.hxx> #include <ObjectIdentifier.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <ObjectNameProvider.hxx> +#include <DataSeries.hxx> -#include <com/sun/star/frame/XModel.hpp> -#include <comphelper/servicehelper.hxx> - -using ::com::sun::star::uno::Reference; using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -67,18 +64,17 @@ void InsertErrorBarsDialog::SetAxisMinorStepWidthForErrorBarDecimals( double fMi double InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( const rtl::Reference<::chart::ChartModel>& xChartModel, - const Reference< uno::XInterface >& xChartView, - const OUString& rSelectedObjectCID ) + const rtl::Reference<::chart::ChartView>& xChartView, + std::u16string_view rSelectedObjectCID ) { double fStepWidth = 0.001; - ExplicitValueProvider* pExplicitValueProvider( comphelper::getFromUnoTunnel<ExplicitValueProvider>(xChartView) ); + ExplicitValueProvider* pExplicitValueProvider( xChartView.get() ); if( pExplicitValueProvider ) { - Reference< XAxis > xAxis; - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); - Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSelectedObjectCID, xChartModel ); - xAxis = DiagramHelper::getAttachedAxis( xSeries, xDiagram ); + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSelectedObjectCID, xChartModel ); + rtl::Reference< Axis > xAxis = xDiagram->getAttachedAxis( xSeries ); if(!xAxis.is()) xAxis = AxisHelper::getAxis( 1/*nDimensionIndex*/, true/*bMainAxis*/, xDiagram ); if(xAxis.is()) diff --git a/chart2/source/controller/dialogs/dlg_NumberFormat.cxx b/chart2/source/controller/dialogs/dlg_NumberFormat.cxx index 7750588ccaa7..f5cfe8e3bda4 100644 --- a/chart2/source/controller/dialogs/dlg_NumberFormat.cxx +++ b/chart2/source/controller/dialogs/dlg_NumberFormat.cxx @@ -31,12 +31,13 @@ using namespace ::com::sun::star; NumberFormatDialog::NumberFormatDialog(weld::Window* pParent, const SfxItemSet& rSet) : SfxSingleTabDialogController(pParent, &rSet, "cui/ui/formatnumberdialog.ui", "FormatNumberDialog") + , m_xContent( m_xBuilder->weld_container("content") ) { SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); ::CreateTabPage fnCreatePage = pFact->GetTabPageCreatorFunc( RID_SVXPAGE_NUMBERFORMAT ); if (fnCreatePage) { - std::unique_ptr<SfxTabPage> xTabPage = (*fnCreatePage)(get_content_area(), this, &rSet); + std::unique_ptr<SfxTabPage> xTabPage = (*fnCreatePage)(m_xContent.get(), this, &rSet); xTabPage->PageCreated(rSet); SetTabPage(std::move(xTabPage)); } diff --git a/chart2/source/controller/dialogs/dlg_NumberFormat.hxx b/chart2/source/controller/dialogs/dlg_NumberFormat.hxx index 56d5acd20867..be02edeb6257 100644 --- a/chart2/source/controller/dialogs/dlg_NumberFormat.hxx +++ b/chart2/source/controller/dialogs/dlg_NumberFormat.hxx @@ -23,6 +23,7 @@ namespace weld { class Window; +class Container; } class SfxItemSet; class SfxItemPool; @@ -31,6 +32,8 @@ namespace chart { class NumberFormatDialog : public SfxSingleTabDialogController { + std::unique_ptr<weld::Container> m_xContent; + public: NumberFormatDialog(weld::Window* pParent, const SfxItemSet& rSet); diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx index 84740d9bf708..e885fdaef32e 100644 --- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx +++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx @@ -17,6 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <cstddef> + #include <dlg_ObjectProperties.hxx> #include <strings.hrc> #include "tp_AxisLabel.hxx" @@ -31,14 +35,18 @@ #include "tp_TitleRotation.hxx" #include "tp_PolarOptions.hxx" #include "tp_DataPointOption.hxx" +#include "tp_DataTable.hxx" #include <ResId.hxx> #include <ViewElementListProvider.hxx> #include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ObjectNameProvider.hxx> +#include <DataSeries.hxx> #include <DiagramHelper.hxx> #include <Diagram.hxx> #include <NumberFormatterWrapper.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <ExplicitCategoriesProvider.hxx> #include <ChartModel.hxx> @@ -64,7 +72,8 @@ #include <svx/numinf.hxx> #include <svl/cjkoptions.hxx> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> namespace com::sun::star::chart2 { class XChartType; } namespace com::sun::star::chart2 { class XDataSeries; } @@ -79,8 +88,8 @@ using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Exception; using ::com::sun::star::beans::XPropertySet; -ObjectPropertiesDialogParameter::ObjectPropertiesDialogParameter( const OUString& rObjectCID ) - : m_aObjectCID( rObjectCID ) +ObjectPropertiesDialogParameter::ObjectPropertiesDialogParameter( OUString aObjectCID ) + : m_aObjectCID(std::move( aObjectCID )) , m_eObjectType( ObjectIdentifier::getObjectType( m_aObjectCID ) ) , m_bAffectsMultipleObjects(false) , m_bHasGeometryProperties(false) @@ -103,8 +112,8 @@ ObjectPropertiesDialogParameter::ObjectPropertiesDialogParameter( const OUString , m_bComplexCategoriesAxis( false ) , m_nNbPoints( 0 ) { - OUString aParticleID = ObjectIdentifier::getParticleID( m_aObjectCID ); - m_bAffectsMultipleObjects = (aParticleID == "ALLELEMENTS"); + std::u16string_view aParticleID = ObjectIdentifier::getParticleID( m_aObjectCID ); + m_bAffectsMultipleObjects = (aParticleID == u"ALLELEMENTS"); } ObjectPropertiesDialogParameter::~ObjectPropertiesDialogParameter() { @@ -113,10 +122,12 @@ ObjectPropertiesDialogParameter::~ObjectPropertiesDialogParameter() void ObjectPropertiesDialogParameter::init( const rtl::Reference<::chart::ChartModel>& xChartModel ) { m_xChartDocument = xChartModel; - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); - uno::Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aObjectCID, xChartModel ); - uno::Reference< XChartType > xChartType = ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries ); - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aObjectCID, xChartModel ); + rtl::Reference< ChartType > xChartType = ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries ); + sal_Int32 nDimensionCount = 0; + if (xDiagram) + nDimensionCount = xDiagram->getDimension(); bool bHasSeriesProperties = (m_eObjectType==OBJECTTYPE_DATA_SERIES); bool bHasDataPointproperties = (m_eObjectType==OBJECTTYPE_DATA_POINT); @@ -153,7 +164,7 @@ void ObjectPropertiesDialogParameter::init( const rtl::Reference<::chart::ChartM if( m_bHasScaleProperties ) { - uno::Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( m_aObjectCID, xChartModel ) ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aObjectCID, xChartModel ); if( xAxis.is() ) { //no scale page for series axis @@ -211,14 +222,12 @@ void ObjectPropertiesDialogParameter::init( const rtl::Reference<::chart::ChartM if( m_eObjectType == OBJECTTYPE_DATA_CURVE ) { - uno::Reference< data::XDataSource > xSource( xSeries, uno::UNO_QUERY ); - Sequence< Reference< data::XLabeledDataSequence > > aDataSeqs( xSource->getDataSequences()); + const std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > & aDataSeqs( xSeries->getDataSequences2()); Sequence< double > aXValues, aYValues; bool bXValuesFound = false, bYValuesFound = false; m_nNbPoints = 0; - sal_Int32 i = 0; - for( i=0; - ! (bXValuesFound && bYValuesFound) && i<aDataSeqs.getLength(); + for( std::size_t i=0; + ! (bXValuesFound && bYValuesFound) && i<aDataSeqs.size(); ++i ) { try @@ -251,7 +260,7 @@ void ObjectPropertiesDialogParameter::init( const rtl::Reference<::chart::ChartM //first category (index 0) matches with real number 1.0 aXValues.realloc( aYValues.getLength() ); auto pXValues = aXValues.getArray(); - for( i=0; i<aXValues.getLength(); ++i ) + for( sal_Int32 i=0; i<aXValues.getLength(); ++i ) pXValues[i] = i+1; bXValuesFound = true; } @@ -309,10 +318,10 @@ void ObjectPropertiesDialogParameter::init( const rtl::Reference<::chart::ChartM const sal_uInt16 nNoArrowNoShadowDlg = 1101; void SchAttribTabDlg::setSymbolInformation( SfxItemSet&& rSymbolShapeProperties, - std::unique_ptr<Graphic> pAutoSymbolGraphic ) + std::optional<Graphic> oAutoSymbolGraphic ) { m_oSymbolShapeProperties.emplace(std::move(rSymbolShapeProperties)); - m_pAutoSymbolGraphic = std::move(pAutoSymbolGraphic); + m_oAutoSymbolGraphic = std::move(oAutoSymbolGraphic); } void SchAttribTabDlg::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ) @@ -452,6 +461,13 @@ SchAttribTabDlg::SchAttribTabDlg(weld::Window* pParent, case OBJECTTYPE_UNKNOWN: // nothing break; + case OBJECTTYPE_DATA_TABLE: + AddTabPage("datatable", SchResId(STR_DATA_TABLE), DataTableTabPage::Create); + AddTabPage("border", SchResId(STR_PAGE_LINE), RID_SVXPAGE_LINE); + AddTabPage("area", SchResId(STR_PAGE_AREA), RID_SVXPAGE_AREA); + AddTabPage("fontname", SchResId(STR_PAGE_FONT), RID_SVXPAGE_CHAR_NAME); + AddTabPage("effects", SchResId(STR_PAGE_FONT_EFFECTS), RID_SVXPAGE_CHAR_EFFECTS); + break; case OBJECTTYPE_DATA_CURVE_EQUATION: AddTabPage("border", SchResId(STR_PAGE_BORDER), RID_SVXPAGE_LINE); AddTabPage("area", SchResId(STR_PAGE_AREA), RID_SVXPAGE_AREA); @@ -459,7 +475,7 @@ SchAttribTabDlg::SchAttribTabDlg(weld::Window* pParent, AddTabPage("fontname", SchResId(STR_PAGE_FONT), RID_SVXPAGE_CHAR_NAME); AddTabPage("effects", SchResId(STR_PAGE_FONT_EFFECTS), RID_SVXPAGE_CHAR_EFFECTS); AddTabPage("numberformat", SchResId(STR_PAGE_NUMBERS), RID_SVXPAGE_NUMBERFORMAT); - if (SvtCTLOptions().IsCTLFontEnabled()) + if (SvtCTLOptions::IsCTLFontEnabled()) { /* When rotation is supported for equation text boxes, use SchAlignmentTabPage::Create here. The special @@ -481,7 +497,7 @@ SchAttribTabDlg::~SchAttribTabDlg() { } -void SchAttribTabDlg::PageCreated(const OString& rId, SfxTabPage &rPage) +void SchAttribTabDlg::PageCreated(const OUString& rId, SfxTabPage &rPage) { SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); if (rId == "border") @@ -497,8 +513,8 @@ void SchAttribTabDlg::PageCreated(const OString& rId, SfxTabPage &rPage) aSet.Put(OfaPtrItem(SID_OBJECT_LIST,m_pViewElementListProvider->GetSymbolList())); if( m_oSymbolShapeProperties ) aSet.Put(SfxTabDialogItem(SID_ATTR_SET, *m_oSymbolShapeProperties)); - if( m_pAutoSymbolGraphic ) - aSet.Put(SvxGraphicItem(*m_pAutoSymbolGraphic)); + if( m_oAutoSymbolGraphic ) + aSet.Put(SvxGraphicItem(*m_oAutoSymbolGraphic)); } rPage.PageCreated(aSet); } @@ -568,7 +584,7 @@ void SchAttribTabDlg::PageCreated(const OString& rId, SfxTabPage &rPage) } else if (rId == "numberformat") { - aSet.Put (SvxNumberInfoItem( m_pNumberFormatter, static_cast<sal_uInt16>(SID_ATTR_NUMBERFORMAT_INFO))); + aSet.Put (SvxNumberInfoItem( m_pNumberFormatter, SID_ATTR_NUMBERFORMAT_INFO)); rPage.PageCreated(aSet); } else if (rId == "xerrorbar") diff --git a/chart2/source/controller/dialogs/dlg_ShapeFont.cxx b/chart2/source/controller/dialogs/dlg_ShapeFont.cxx index f5fc702a2a76..b742e8a22eda 100644 --- a/chart2/source/controller/dialogs/dlg_ShapeFont.cxx +++ b/chart2/source/controller/dialogs/dlg_ShapeFont.cxx @@ -41,7 +41,7 @@ ShapeFontDialog::ShapeFontDialog(weld::Window* pParent, const SfxItemSet* pAttr, AddTabPage("position", RID_SVXPAGE_CHAR_POSITION ); } -void ShapeFontDialog::PageCreated(const OString& rId, SfxTabPage& rPage) +void ShapeFontDialog::PageCreated(const OUString& rId, SfxTabPage& rPage) { SfxAllItemSet aSet( *( GetInputSetImpl()->GetPool() ) ); if (rId == "font") diff --git a/chart2/source/controller/dialogs/dlg_ShapeParagraph.cxx b/chart2/source/controller/dialogs/dlg_ShapeParagraph.cxx index e5b422ceaf16..4c72d4d8126b 100644 --- a/chart2/source/controller/dialogs/dlg_ShapeParagraph.cxx +++ b/chart2/source/controller/dialogs/dlg_ShapeParagraph.cxx @@ -47,7 +47,7 @@ ShapeParagraphDialog::ShapeParagraphDialog(weld::Window* pParent, AddTabPage("labelTP_TABULATOR", RID_SVXPAGE_TABULATOR); } -void ShapeParagraphDialog::PageCreated(const OString& rId, SfxTabPage& rPage) +void ShapeParagraphDialog::PageCreated(const OUString& rId, SfxTabPage& rPage) { if (rId == "labelTP_TABULATOR") { diff --git a/chart2/source/controller/dialogs/dlg_View3D.cxx b/chart2/source/controller/dialogs/dlg_View3D.cxx index 09fc4923bdd9..08a783df5e45 100644 --- a/chart2/source/controller/dialogs/dlg_View3D.cxx +++ b/chart2/source/controller/dialogs/dlg_View3D.cxx @@ -26,15 +26,11 @@ #include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> -#include <com/sun/star/frame/XModel.hpp> namespace chart { using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; sal_uInt16 View3DDialog::m_nLastPageId = 0; @@ -43,7 +39,7 @@ View3DDialog::View3DDialog(weld::Window* pParent, const rtl::Reference<::chart:: , m_aControllerLocker(xChartModel) , m_xTabControl(m_xBuilder->weld_notebook("tabcontrol")) { - rtl::Reference< Diagram > xSceneProperties = ChartModelHelper::findDiagram( xChartModel ); + rtl::Reference< Diagram > xSceneProperties = xChartModel->getFirstChartDiagram(); m_xTabControl->append_page("geometry", SchResId(STR_PAGE_PERSPECTIVE)); m_xGeometry.reset(new ThreeD_SceneGeometry_TabPage(m_xTabControl->get_page("geometry"), xSceneProperties, m_aControllerLocker)); @@ -60,7 +56,7 @@ View3DDialog::View3DDialog(weld::Window* pParent, const rtl::Reference<::chart:: m_xTabControl->set_current_page(m_nLastPageId); } -IMPL_LINK(View3DDialog, ActivatePageHdl, const OString&, rPage, void) +IMPL_LINK(View3DDialog, ActivatePageHdl, const OUString&, rPage, void) { if (rPage == "appearance") m_xAppearance->ActivatePage(); diff --git a/chart2/source/controller/dialogs/res_BarGeometry.cxx b/chart2/source/controller/dialogs/res_BarGeometry.cxx index 182d391aac33..81d933b208bc 100644 --- a/chart2/source/controller/dialogs/res_BarGeometry.cxx +++ b/chart2/source/controller/dialogs/res_BarGeometry.cxx @@ -27,10 +27,9 @@ BarGeometryResources::BarGeometryResources(weld::Builder* pBuilder) : m_xFT_Geometry(pBuilder->weld_label("shapeft")) , m_xLB_Geometry(pBuilder->weld_tree_view("shape")) { - for (size_t i = 0; i < SAL_N_ELEMENTS(CHART_TYPE); ++i) + for (size_t i = 0; i < std::size(CHART_TYPE); ++i) m_xLB_Geometry->append_text(SchResId(CHART_TYPE[i])); - m_xLB_Geometry->set_size_request(-1, - m_xLB_Geometry->get_height_rows(SAL_N_ELEMENTS(CHART_TYPE))); + m_xLB_Geometry->set_size_request(-1, m_xLB_Geometry->get_height_rows(std::size(CHART_TYPE))); } void BarGeometryResources::connect_changed(const Link<weld::TreeView&, void>& rLink) diff --git a/chart2/source/controller/dialogs/res_DataLabel.cxx b/chart2/source/controller/dialogs/res_DataLabel.cxx index 6bba918d6937..c3d755cf92d6 100644 --- a/chart2/source/controller/dialogs/res_DataLabel.cxx +++ b/chart2/source/controller/dialogs/res_DataLabel.cxx @@ -46,41 +46,36 @@ namespace const std::u16string_view our_aLBEntryMap[] = {u" ", u", ", u"; ", u"\n", u". "}; -bool lcl_ReadNumberFormatFromItemSet( const SfxItemSet& rSet, sal_uInt16 nValueWhich, sal_uInt16 nSourceFormatWhich, sal_uInt32& rnFormatKeyOut, bool& rbSourceFormatOut, bool& rbSourceFormatMixedStateOut ) +bool lcl_ReadNumberFormatFromItemSet( const SfxItemSet& rSet, TypedWhichId<SfxUInt32Item> nValueWhich, TypedWhichId<SfxBoolItem> nSourceFormatWhich, sal_uInt32& rnFormatKeyOut, bool& rbSourceFormatOut, bool& rbSourceFormatMixedStateOut ) { bool bSet = false; - const SfxPoolItem *pItem1 = nullptr; - if( rSet.GetItemState( nValueWhich, true, &pItem1 ) == SfxItemState::SET ) + if( const SfxUInt32Item* pNumItem = rSet.GetItemIfSet( nValueWhich ) ) { - const SfxUInt32Item * pNumItem = dynamic_cast< const SfxUInt32Item * >( pItem1 ); - if( pNumItem ) - { - rnFormatKeyOut = pNumItem->GetValue(); - bSet = true; - } + rnFormatKeyOut = pNumItem->GetValue(); + bSet = true; } rbSourceFormatMixedStateOut=true; - const SfxPoolItem *pItem2 = nullptr; - if( rSet.GetItemState( nSourceFormatWhich, true, &pItem2 ) == SfxItemState::SET ) + if( const SfxBoolItem * pBoolItem = rSet.GetItemIfSet( nSourceFormatWhich ) ) { - const SfxBoolItem * pBoolItem = dynamic_cast< const SfxBoolItem * >( pItem2 ); - if( pBoolItem ) - { - rbSourceFormatOut = pBoolItem->GetValue(); - rbSourceFormatMixedStateOut=false; - } + rbSourceFormatOut = pBoolItem->GetValue(); + rbSourceFormatMixedStateOut=false; } return bSet; } -void lcl_setBoolItemToCheckBox(const SfxItemSet& rInAttrs, sal_uInt16 nWhichId, weld::CheckButton& rCheckbox) +void lcl_setBoolItemToCheckBox(const SfxItemSet& rInAttrs, TypedWhichId<SfxBoolItem> nWhichId, weld::CheckButton& rCheckbox, weld::TriStateEnabled& rTriState) { - const SfxPoolItem *pPoolItem = nullptr; - if( rInAttrs.GetItemState(nWhichId, true, &pPoolItem) == SfxItemState::SET ) - rCheckbox.set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + if( const SfxBoolItem* pPoolItem = rInAttrs.GetItemIfSet(nWhichId) ) + { + rCheckbox.set_active(pPoolItem->GetValue()); + rTriState.bTriStateEnabled = false; + } else + { rCheckbox.set_state(TRISTATE_INDET); + rTriState.bTriStateEnabled = true; + } } }//end anonymous namespace @@ -112,7 +107,7 @@ DataLabelResources::DataLabelResources(weld::Builder* pBuilder, weld::Window* pP , m_xFT_Dial(pBuilder->weld_label("CT_LABEL_DIAL")) , m_xNF_Degrees(pBuilder->weld_metric_spin_button("NF_LABEL_DEGREES", FieldUnit::DEGREE)) , m_xBxTextDirection(pBuilder->weld_widget("boxTXT_DIRECTION")) - , m_xLB_TextDirection(new TextDirectionListBox(pBuilder->weld_combo_box("LB_LABEL_TEXTDIR"))) + , m_aLB_TextDirection(pBuilder->weld_combo_box("LB_LABEL_TEXTDIR")) , m_xDC_Dial(new svx::DialControl) , m_xDC_DialWin(new weld::CustomWeld(*pBuilder, "CT_DIAL", *m_xDC_Dial)) , m_xCBCustomLeaderLines(pBuilder->weld_check_button("CB_CUSTOM_LEADER_LINES")) @@ -126,9 +121,8 @@ DataLabelResources::DataLabelResources(weld::Builder* pBuilder, weld::Window* pP std::vector< sal_Int32 > aAvailablePlacementList; - const SfxPoolItem *pPoolItem = nullptr; - if( rInAttrs.GetItemState(SCHATTR_DATADESCR_AVAILABLE_PLACEMENTS, true, &pPoolItem) == SfxItemState::SET ) - aAvailablePlacementList = static_cast<const SfxIntegerListItem*>(pPoolItem)->GetList(); + if( const SfxIntegerListItem* pPlacementsItem = rInAttrs.GetItemIfSet(SCHATTR_DATADESCR_AVAILABLE_PLACEMENTS) ) + aAvailablePlacementList = pPlacementsItem->GetList(); m_xLB_LabelPlacement->clear(); for( size_t nN=0; nN<aAvailablePlacementList.size(); ++nN ) @@ -154,9 +148,9 @@ DataLabelResources::DataLabelResources(weld::Builder* pBuilder, weld::Window* pP m_bNumberFormatMixedState = !lcl_ReadNumberFormatFromItemSet( rInAttrs, SID_ATTR_NUMBERFORMAT_VALUE, SID_ATTR_NUMBERFORMAT_SOURCE, m_nNumberFormatForValue, m_bSourceFormatForValue, m_bSourceFormatMixedState ); m_bPercentFormatMixedState = !lcl_ReadNumberFormatFromItemSet( rInAttrs, SCHATTR_PERCENT_NUMBERFORMAT_VALUE, SCHATTR_PERCENT_NUMBERFORMAT_SOURCE, m_nNumberFormatForPercent, m_bSourceFormatForPercent , m_bPercentSourceMixedState); - if( rInAttrs.GetItemState(SCHATTR_DATADESCR_NO_PERCENTVALUE, true, &pPoolItem) == SfxItemState::SET ) + if( const SfxBoolItem* pNoPercentValueItem = rInAttrs.GetItemIfSet(SCHATTR_DATADESCR_NO_PERCENTVALUE) ) { - bool bForbidPercentValue = rInAttrs.Get( SCHATTR_DATADESCR_NO_PERCENTVALUE ).GetValue(); + bool bForbidPercentValue = pNoPercentValueItem->GetValue(); if( bForbidPercentValue ) m_xCBPercent->set_sensitive(false); } @@ -182,12 +176,18 @@ IMPL_LINK(DataLabelResources, NumberFormatDialogHdl, weld::Button&, rButton, voi } if (&rButton == m_xPB_NumberFormatForValue.get() && !m_xCBNumber->get_active()) + { m_xCBNumber->set_active(true); + m_aNumberState.bTriStateEnabled = false; + } else if (&rButton == m_xPB_NumberFormatForPercent.get() && !m_xCBPercent->get_active()) + { m_xCBPercent->set_active(true); + m_aPercentState.bTriStateEnabled = false; + } SfxItemSet aNumberSet = NumberFormatDialog::CreateEmptyItemSetForNumberFormatDialog( *m_pPool ); - aNumberSet.Put (SvxNumberInfoItem( m_pNumberFormatter, static_cast<sal_uInt16>(SID_ATTR_NUMBERFORMAT_INFO))); + aNumberSet.Put (SvxNumberInfoItem( m_pNumberFormatter, SID_ATTR_NUMBERFORMAT_INFO)); bool bPercent = (&rButton == m_xPB_NumberFormatForPercent.get()); @@ -221,8 +221,22 @@ IMPL_LINK(DataLabelResources, NumberFormatDialogHdl, weld::Button&, rButton, voi } } -IMPL_LINK_NOARG(DataLabelResources, CheckHdl, weld::Toggleable&, void) +IMPL_LINK(DataLabelResources, CheckHdl, weld::Toggleable&, rToggle, void) { + if (&rToggle == m_xCBNumber.get()) + m_aNumberState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBPercent.get()) + m_aPercentState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBCategory.get()) + m_aCategoryState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBSymbol.get()) + m_aSymbolState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBDataSeries.get()) + m_aDataSeriesState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBWrapText.get()) + m_aWrapTextState.ButtonToggled(rToggle); + else if (&rToggle == m_xCBCustomLeaderLines.get()) + m_aCustomLeaderLinesState.ButtonToggled(rToggle); EnableControls(); } @@ -305,8 +319,8 @@ void DataLabelResources::FillItemSet( SfxItemSet* rOutAttrs ) const rOutAttrs->Put( SfxInt32Item( SCHATTR_DATADESCR_PLACEMENT, nValue ) ); } - if (m_xLB_TextDirection->get_active() != -1) - rOutAttrs->Put( SvxFrameDirectionItem( m_xLB_TextDirection->get_active_id(), EE_PARA_WRITINGDIR ) ); + if (m_aLB_TextDirection.get_active() != -1) + rOutAttrs->Put( SvxFrameDirectionItem( m_aLB_TextDirection.get_active_id(), EE_PARA_WRITINGDIR ) ); if( m_xDC_Dial->IsVisible() ) { @@ -320,30 +334,29 @@ void DataLabelResources::Reset(const SfxItemSet& rInAttrs) // default state m_xCBSymbol->set_sensitive( false ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_NUMBER, *m_xCBNumber ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_PERCENTAGE, *m_xCBPercent ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_CATEGORY, *m_xCBCategory ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_SYMBOL, *m_xCBSymbol ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_DATA_SERIES_NAME, *m_xCBDataSeries ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_WRAP_TEXT, *m_xCBWrapText ); - lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_CUSTOM_LEADER_LINES, *m_xCBCustomLeaderLines ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_NUMBER, *m_xCBNumber, m_aNumberState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_PERCENTAGE, *m_xCBPercent, m_aPercentState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_CATEGORY, *m_xCBCategory, m_aCategoryState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_SYMBOL, *m_xCBSymbol, m_aSymbolState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_SHOW_DATA_SERIES_NAME, *m_xCBDataSeries, m_aDataSeriesState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_WRAP_TEXT, *m_xCBWrapText, m_aWrapTextState ); + lcl_setBoolItemToCheckBox( rInAttrs, SCHATTR_DATADESCR_CUSTOM_LEADER_LINES, *m_xCBCustomLeaderLines, m_aCustomLeaderLinesState ); m_bNumberFormatMixedState = !lcl_ReadNumberFormatFromItemSet( rInAttrs, SID_ATTR_NUMBERFORMAT_VALUE, SID_ATTR_NUMBERFORMAT_SOURCE, m_nNumberFormatForValue, m_bSourceFormatForValue, m_bSourceFormatMixedState ); m_bPercentFormatMixedState = !lcl_ReadNumberFormatFromItemSet( rInAttrs, SCHATTR_PERCENT_NUMBERFORMAT_VALUE, SCHATTR_PERCENT_NUMBERFORMAT_SOURCE, m_nNumberFormatForPercent, m_bSourceFormatForPercent , m_bPercentSourceMixedState); - const SfxPoolItem *pPoolItem = nullptr; - if( rInAttrs.GetItemState(SCHATTR_DATADESCR_SEPARATOR, true, &pPoolItem) == SfxItemState::SET ) - for(size_t i=0; i < SAL_N_ELEMENTS(our_aLBEntryMap); ++i ) + if( const SfxStringItem* pSeparatorItem = rInAttrs.GetItemIfSet(SCHATTR_DATADESCR_SEPARATOR) ) + for(size_t i=0; i < std::size(our_aLBEntryMap); ++i ) { - if( our_aLBEntryMap[i] == static_cast<const SfxStringItem*>(pPoolItem)->GetValue()) + if( our_aLBEntryMap[i] == pSeparatorItem->GetValue()) m_xLB_Separator->set_active( i ); } else m_xLB_Separator->set_active( 0 ); - if( rInAttrs.GetItemState(SCHATTR_DATADESCR_PLACEMENT, true, &pPoolItem) == SfxItemState::SET ) + if( const SfxInt32Item* pPlacementItem = rInAttrs.GetItemIfSet(SCHATTR_DATADESCR_PLACEMENT) ) { - sal_Int32 nPlacement = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + sal_Int32 nPlacement = pPlacementItem->GetValue(); std::map< sal_Int32, sal_uInt16 >::const_iterator aIt( m_aPlacementToListBoxMap.find(nPlacement) ); if(aIt!=m_aPlacementToListBoxMap.end()) { @@ -356,12 +369,12 @@ void DataLabelResources::Reset(const SfxItemSet& rInAttrs) else m_xLB_LabelPlacement->set_active(-1); - if( rInAttrs.GetItemState(EE_PARA_WRITINGDIR, true, &pPoolItem ) == SfxItemState::SET ) - m_xLB_TextDirection->set_active_id( static_cast<const SvxFrameDirectionItem*>(pPoolItem)->GetValue() ); + if( const SvxFrameDirectionItem* pDirectionItem = rInAttrs.GetItemIfSet(EE_PARA_WRITINGDIR) ) + m_aLB_TextDirection.set_active_id( pDirectionItem->GetValue() ); - if( rInAttrs.GetItemState( SCHATTR_TEXT_DEGREES, true, &pPoolItem ) == SfxItemState::SET ) + if( const SdrAngleItem* pAngleItem = rInAttrs.GetItemIfSet( SCHATTR_TEXT_DEGREES ) ) { - Degree100 nDegrees = static_cast< const SdrAngleItem * >( pPoolItem )->GetValue(); + Degree100 nDegrees = pAngleItem->GetValue(); m_xDC_Dial->SetRotation( nDegrees ); } else diff --git a/chart2/source/controller/dialogs/res_DataLabel.hxx b/chart2/source/controller/dialogs/res_DataLabel.hxx index 56115b2a779c..66a062d2ca24 100644 --- a/chart2/source/controller/dialogs/res_DataLabel.hxx +++ b/chart2/source/controller/dialogs/res_DataLabel.hxx @@ -20,11 +20,11 @@ #include <svl/itemset.hxx> #include <svx/dialcontrol.hxx> +#include <TextDirectionListBox.hxx> #include <map> class SvNumberFormatter; -namespace chart { class TextDirectionListBox; } namespace chart { @@ -58,6 +58,14 @@ private: weld::Window* m_pWindow; SfxItemPool* m_pPool; + weld::TriStateEnabled m_aNumberState; + weld::TriStateEnabled m_aPercentState; + weld::TriStateEnabled m_aCategoryState; + weld::TriStateEnabled m_aSymbolState; + weld::TriStateEnabled m_aDataSeriesState; + weld::TriStateEnabled m_aWrapTextState; + weld::TriStateEnabled m_aCustomLeaderLinesState; + std::unique_ptr<weld::CheckButton> m_xCBNumber; std::unique_ptr<weld::Button> m_xPB_NumberFormatForValue; std::unique_ptr<weld::CheckButton> m_xCBPercent; @@ -77,7 +85,7 @@ private: std::unique_ptr<weld::Widget> m_xBxTextDirection; - std::unique_ptr<TextDirectionListBox> m_xLB_TextDirection; + TextDirectionListBox m_aLB_TextDirection; std::unique_ptr<svx::DialControl> m_xDC_Dial; std::unique_ptr<weld::CustomWeld> m_xDC_DialWin; diff --git a/chart2/source/controller/dialogs/res_DataTableProperties.cxx b/chart2/source/controller/dialogs/res_DataTableProperties.cxx new file mode 100644 index 000000000000..327298e312d9 --- /dev/null +++ b/chart2/source/controller/dialogs/res_DataTableProperties.cxx @@ -0,0 +1,111 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <res_DataTableProperties.hxx> + +#include <chartview/ChartSfxItemIds.hxx> +#include <svl/eitem.hxx> + +using namespace css; + +namespace chart +{ +DataTablePropertiesResources::DataTablePropertiesResources(weld::Builder& rBuilder) + : m_xCbHorizontalBorder(rBuilder.weld_check_button("horizontalBorderCB")) + , m_xCbVerticalBorder(rBuilder.weld_check_button("verticalBorderCB")) + , m_xCbOutilne(rBuilder.weld_check_button("outlineCB")) + , m_xCbKeys(rBuilder.weld_check_button("keysCB")) +{ +} + +void DataTablePropertiesResources::setChecksSensitive(bool bSensitive) +{ + m_xCbHorizontalBorder->set_sensitive(bSensitive); + m_xCbVerticalBorder->set_sensitive(bSensitive); + m_xCbOutilne->set_sensitive(bSensitive); + m_xCbKeys->set_sensitive(bSensitive); +} + +void DataTablePropertiesResources::initFromItemSet(const SfxItemSet& rInAttrs) +{ + const SfxPoolItem* pPoolItem = nullptr; + SfxItemState aState; + + aState = rInAttrs.GetItemState(SCHATTR_DATA_TABLE_HORIZONTAL_BORDER, false, &pPoolItem); + if (aState == SfxItemState::INVALID) + { + m_xCbHorizontalBorder->set_state(TRISTATE_INDET); + } + else + { + if (aState == SfxItemState::SET) + m_xCbHorizontalBorder->set_active( + static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + } + + aState = rInAttrs.GetItemState(SCHATTR_DATA_TABLE_VERTICAL_BORDER, false, &pPoolItem); + if (aState == SfxItemState::INVALID) + { + m_xCbVerticalBorder->set_state(TRISTATE_INDET); + } + else + { + if (aState == SfxItemState::SET) + m_xCbVerticalBorder->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + } + + aState = rInAttrs.GetItemState(SCHATTR_DATA_TABLE_OUTLINE, false, &pPoolItem); + if (aState == SfxItemState::INVALID) + { + m_xCbOutilne->set_state(TRISTATE_INDET); + } + else + { + if (aState == SfxItemState::SET) + m_xCbOutilne->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + } + + aState = rInAttrs.GetItemState(SCHATTR_DATA_TABLE_KEYS, false, &pPoolItem); + if (aState == SfxItemState::INVALID) + { + m_xCbKeys->set_state(TRISTATE_INDET); + } + else + { + if (aState == SfxItemState::SET) + m_xCbKeys->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + } +} + +bool DataTablePropertiesResources::writeToItemSet(SfxItemSet& rOutAttrs) const +{ + if (m_xCbHorizontalBorder->get_state() != TRISTATE_INDET) + { + rOutAttrs.Put( + SfxBoolItem(SCHATTR_DATA_TABLE_HORIZONTAL_BORDER, m_xCbHorizontalBorder->get_active())); + } + if (m_xCbVerticalBorder->get_state() != TRISTATE_INDET) + { + rOutAttrs.Put( + SfxBoolItem(SCHATTR_DATA_TABLE_VERTICAL_BORDER, m_xCbVerticalBorder->get_active())); + } + if (m_xCbOutilne->get_state() != TRISTATE_INDET) + { + rOutAttrs.Put(SfxBoolItem(SCHATTR_DATA_TABLE_OUTLINE, m_xCbOutilne->get_active())); + } + if (m_xCbKeys->get_state() != TRISTATE_INDET) + { + rOutAttrs.Put(SfxBoolItem(SCHATTR_DATA_TABLE_KEYS, m_xCbKeys->get_active())); + } + return true; +} + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/dialogs/res_ErrorBar.cxx b/chart2/source/controller/dialogs/res_ErrorBar.cxx index 1e5078a301fc..ae8e7cd28e2e 100644 --- a/chart2/source/controller/dialogs/res_ErrorBar.cxx +++ b/chart2/source/controller/dialogs/res_ErrorBar.cxx @@ -22,12 +22,11 @@ #include <RangeSelectionHelper.hxx> #include <helpids.h> #include <chartview/ChartSfxItemIds.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <vcl/weld.hxx> #include <ChartModel.hxx> #include <rtl/math.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <osl/diagnose.h> #include <svl/stritem.hxx> @@ -476,7 +475,7 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) // category m_eErrorKind = SvxChartKindError::NONE; SfxItemState aState = rInAttrs.GetItemState( SCHATTR_STAT_KIND_ERROR, true, &pPoolItem ); - m_bErrorKindUnique = ( aState != SfxItemState::DONTCARE ); + m_bErrorKindUnique = ( aState != SfxItemState::INVALID ); if( aState == SfxItemState::SET ) m_eErrorKind = static_cast<const SvxChartKindErrorItem*>(pPoolItem)->GetValue(); @@ -516,16 +515,14 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) } // parameters - aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTPLUS, true, &pPoolItem ); - if( aState == SfxItemState::SET ) + if( const SvxDoubleItem* pDoubleItem = rInAttrs.GetItemIfSet( SCHATTR_STAT_CONSTPLUS ) ) { - m_fPlusValue = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + m_fPlusValue = pDoubleItem->GetValue(); } - aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTMINUS, true, &pPoolItem ); - if( aState == SfxItemState::SET ) + if( const SvxDoubleItem* pStatItem = rInAttrs.GetItemIfSet( SCHATTR_STAT_CONSTMINUS ) ) { - m_fMinusValue = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + m_fMinusValue = pStatItem->GetValue(); if( m_eErrorKind != SvxChartKindError::Range && m_fPlusValue == m_fMinusValue ) @@ -534,7 +531,7 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) // indicator aState = rInAttrs.GetItemState( SCHATTR_STAT_INDICATE, true, &pPoolItem ); - m_bIndicatorUnique = ( aState != SfxItemState::DONTCARE ); + m_bIndicatorUnique = ( aState != SfxItemState::INVALID ); if( aState == SfxItemState::SET) m_eIndicate = static_cast<const SvxChartIndicateItem *>(pPoolItem)->GetValue(); @@ -563,7 +560,7 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) // ranges aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_POS, true, &pPoolItem ); - m_bRangePosUnique = ( aState != SfxItemState::DONTCARE ); + m_bRangePosUnique = ( aState != SfxItemState::INVALID ); if( aState == SfxItemState::SET ) { OUString sRangePositive = static_cast< const SfxStringItem * >( pPoolItem )->GetValue(); @@ -571,7 +568,7 @@ void ErrorBarResources::Reset(const SfxItemSet& rInAttrs) } aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_NEG, true, &pPoolItem ); - m_bRangeNegUnique = ( aState != SfxItemState::DONTCARE ); + m_bRangeNegUnique = ( aState != SfxItemState::INVALID ); if( aState == SfxItemState::SET ) { OUString sRangeNegative = static_cast< const SfxStringItem * >( pPoolItem )->GetValue(); diff --git a/chart2/source/controller/dialogs/res_LegendPosition.cxx b/chart2/source/controller/dialogs/res_LegendPosition.cxx index aac0a11368a1..92cb4399e563 100644 --- a/chart2/source/controller/dialogs/res_LegendPosition.cxx +++ b/chart2/source/controller/dialogs/res_LegendPosition.cxx @@ -18,7 +18,7 @@ */ #include <res_LegendPosition.hxx> -#include <ChartModelHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> @@ -30,7 +30,8 @@ #include <chartview/ChartSfxItemIds.hxx> #include <svl/intitem.hxx> #include <svl/eitem.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <utility> #include <vcl/weld.hxx> namespace chart @@ -49,8 +50,8 @@ LegendPositionResources::LegendPositionResources(weld::Builder& rBuilder) } LegendPositionResources::LegendPositionResources(weld::Builder& rBuilder, - const uno::Reference< uno::XComponentContext >& xCC) - : m_xCC(xCC) + uno::Reference< uno::XComponentContext > xCC) + : m_xCC(std::move(xCC)) , m_xCbxShow(rBuilder.weld_check_button("show")) , m_xRbtLeft(rBuilder.weld_radio_button("left")) , m_xRbtRight(rBuilder.weld_radio_button("right")) @@ -77,20 +78,20 @@ void LegendPositionResources::writeToResources( const rtl::Reference<::chart::Ch { try { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); - uno::Reference< beans::XPropertySet > xProp( xDiagram->getLegend(), uno::UNO_QUERY ); - if( xProp.is() ) + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); + rtl::Reference< Legend > xLegend = xDiagram->getLegend2(); + if( xLegend.is() ) { //show bool bShowLegend = false; - xProp->getPropertyValue( "Show" ) >>= bShowLegend; + xLegend->getPropertyValue( "Show" ) >>= bShowLegend; if (m_xCbxShow) m_xCbxShow->set_active( bShowLegend ); - PositionEnableHdl(*m_xCbxShow); + PositionEnable(); //position chart2::LegendPosition ePos; - xProp->getPropertyValue( "AnchorPosition" ) >>= ePos; + xLegend->getPropertyValue( "AnchorPosition" ) >>= ePos; switch( ePos ) { case chart2::LegendPosition_LINE_START: @@ -121,7 +122,7 @@ void LegendPositionResources::writeToModel( const rtl::Reference<::chart::ChartM { bool bShowLegend = m_xCbxShow && m_xCbxShow->get_active(); ChartModel& rModel = *xChartModel; - uno::Reference< beans::XPropertySet > xProp(LegendHelper::getLegend(rModel, m_xCC, bShowLegend), uno::UNO_QUERY); + rtl::Reference< Legend > xProp = LegendHelper::getLegend(rModel, m_xCC, bShowLegend); if( xProp.is() ) { //show @@ -161,6 +162,11 @@ void LegendPositionResources::writeToModel( const rtl::Reference<::chart::ChartM IMPL_LINK_NOARG(LegendPositionResources, PositionEnableHdl, weld::Toggleable&, void) { + PositionEnable(); +} + +void LegendPositionResources::PositionEnable() +{ bool bEnable = !m_xCbxShow || m_xCbxShow->get_active(); m_xRbtLeft->set_sensitive( bEnable ); @@ -173,10 +179,9 @@ IMPL_LINK_NOARG(LegendPositionResources, PositionEnableHdl, weld::Toggleable&, v void LegendPositionResources::initFromItemSet( const SfxItemSet& rInAttrs ) { - const SfxPoolItem* pPoolItem = nullptr; - if( rInAttrs.GetItemState( SCHATTR_LEGEND_POS, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pPosItem = rInAttrs.GetItemIfSet( SCHATTR_LEGEND_POS ) ) { - chart2::LegendPosition nLegendPosition = static_cast<chart2::LegendPosition>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()); + chart2::LegendPosition nLegendPosition = static_cast<chart2::LegendPosition>(pPosItem->GetValue()); switch( nLegendPosition ) { case chart2::LegendPosition_LINE_START: @@ -196,10 +201,10 @@ void LegendPositionResources::initFromItemSet( const SfxItemSet& rInAttrs ) } } - if( m_xCbxShow && rInAttrs.GetItemState( SCHATTR_LEGEND_SHOW, true, &pPoolItem ) == SfxItemState::SET ) + const SfxBoolItem* pShowItem; + if( m_xCbxShow && (pShowItem = rInAttrs.GetItemIfSet( SCHATTR_LEGEND_SHOW )) ) { - bool bShow = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); - m_xCbxShow->set_active(bShow); + m_xCbxShow->set_active(pShowItem->GetValue()); } } diff --git a/chart2/source/controller/dialogs/res_Trendline.cxx b/chart2/source/controller/dialogs/res_Trendline.cxx index ca1fe7bcfb83..3cbba1e59a28 100644 --- a/chart2/source/controller/dialogs/res_Trendline.cxx +++ b/chart2/source/controller/dialogs/res_Trendline.cxx @@ -126,29 +126,27 @@ IMPL_LINK_NOARG(TrendlineResources, SelectTrendLine, weld::Toggleable&, void) void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) { - const SfxPoolItem *pPoolItem = nullptr; - - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_CURVE_NAME, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxStringItem* pCurveNameItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_CURVE_NAME ) ) { - OUString aName = static_cast< const SfxStringItem* >(pPoolItem)->GetValue(); + OUString aName = pCurveNameItem->GetValue(); m_xEE_Name->set_text(aName); } else { m_xEE_Name->set_text(""); } - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_XNAME, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxStringItem* pRegressionXNameItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_XNAME ) ) { - OUString aName = static_cast< const SfxStringItem* >(pPoolItem)->GetValue(); + OUString aName = pRegressionXNameItem->GetValue(); m_xEE_XName->set_text(aName); } else { m_xEE_XName->set_text("x"); } - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_YNAME, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxStringItem* pRegressionYNameItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_YNAME ) ) { - OUString aName = static_cast< const SfxStringItem* >(pPoolItem)->GetValue(); + OUString aName = pRegressionYNameItem->GetValue(); m_xEE_YName->set_text(aName); } else @@ -156,8 +154,9 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) m_xEE_YName->set_text("f(x)"); } + const SfxPoolItem* pPoolItem = nullptr; SfxItemState aState = rInAttrs.GetItemState( SCHATTR_REGRESSION_TYPE, true, &pPoolItem ); - m_bTrendLineUnique = ( aState != SfxItemState::DONTCARE ); + m_bTrendLineUnique = ( aState != SfxItemState::INVALID ); if( aState == SfxItemState::SET ) { const SvxChartRegressItem * pItem = dynamic_cast< const SvxChartRegressItem * >( pPoolItem ); @@ -167,9 +166,9 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) } } - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_DEGREE, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pDegreeItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_DEGREE ) ) { - sal_Int32 nDegree = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nDegree = pDegreeItem->GetValue(); m_xNF_Degree->set_value( nDegree ); } else @@ -179,9 +178,9 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) m_xNF_Degree->save_value(); - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_PERIOD, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pPeriodItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_PERIOD ) ) { - sal_Int32 nPeriod = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nPeriod = pPeriodItem->GetValue(); m_xNF_Period->set_value( nPeriod ); } else @@ -192,28 +191,28 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) m_xNF_Period->save_value(); double nValue = 0.0; - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD, true, &pPoolItem ) == SfxItemState::SET ) + if( const SvxDoubleItem* pForwardItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD ) ) { - nValue = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue() ; + nValue = pForwardItem->GetValue() ; } lcl_setValue(*m_xFmtFld_ExtrapolateForward, nValue); nValue = 0.0; - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD, true, &pPoolItem ) == SfxItemState::SET ) + if( const SvxDoubleItem* pBackwardItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD ) ) { - nValue = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue() ; + nValue = pBackwardItem->GetValue() ; } lcl_setValue(*m_xFmtFld_ExtrapolateBackward, nValue); nValue = 0.0; - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_INTERCEPT_VALUE, true, &pPoolItem ) == SfxItemState::SET ) + if( const SvxDoubleItem* pValueItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_INTERCEPT_VALUE ) ) { - nValue = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue() ; + nValue = pValueItem->GetValue() ; } lcl_setValue(*m_xFmtFld_InterceptValue, nValue); aState = rInAttrs.GetItemState( SCHATTR_REGRESSION_SET_INTERCEPT, true, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCB_SetIntercept->set_state(TRISTATE_INDET); } @@ -224,7 +223,7 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) } aState = rInAttrs.GetItemState( SCHATTR_REGRESSION_SHOW_EQUATION, true, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCB_ShowEquation->set_state(TRISTATE_INDET); } @@ -235,7 +234,7 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) } aState = rInAttrs.GetItemState( SCHATTR_REGRESSION_SHOW_COEFF, true, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCB_ShowCorrelationCoeff->set_state(TRISTATE_INDET); } @@ -245,9 +244,9 @@ void TrendlineResources::Reset( const SfxItemSet& rInAttrs ) m_xCB_ShowCorrelationCoeff->set_active( static_cast< const SfxBoolItem * >( pPoolItem )->GetValue()); } - if( rInAttrs.GetItemState( SCHATTR_REGRESSION_MOVING_TYPE, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pMovingTypeItem = rInAttrs.GetItemIfSet( SCHATTR_REGRESSION_MOVING_TYPE ) ) { - sal_Int32 nMovingType = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nMovingType = pMovingTypeItem->GetValue(); if (nMovingType == MovingAverageType::Prior) m_xCB_RegressionMovingType->set_active(0); else if (nMovingType == MovingAverageType::Central) @@ -373,10 +372,8 @@ void TrendlineResources::UpdateControlStates() m_xFmtFld_InterceptValue->set_sensitive( bInterceptAvailable ); if( bMovingAverage ) { - m_xCB_ShowEquation->set_state(TRISTATE_FALSE); m_xCB_ShowCorrelationCoeff->set_state(TRISTATE_FALSE); } - m_xCB_ShowEquation->set_sensitive( !bMovingAverage ); m_xCB_ShowCorrelationCoeff->set_sensitive( !bMovingAverage ); m_xCB_RegressionMovingType->set_sensitive(bMovingAverage); m_xNF_Period->set_sensitive(bMovingAverage); @@ -429,8 +426,6 @@ void TrendlineResources::SetNbPoints( sal_Int32 nNbPoints ) IMPL_LINK_NOARG(TrendlineResources, ShowEquation, weld::Toggleable&, void) { - m_xEE_XName->set_sensitive(m_xCB_ShowEquation->get_active()); - m_xEE_YName->set_sensitive(m_xCB_ShowEquation->get_active()); UpdateControlStates(); } diff --git a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx index 40dd7b9cd493..adeb27a02501 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx @@ -18,16 +18,13 @@ */ #include "tp_3D_SceneAppearance.hxx" -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <ThreeDHelper.hxx> #include <ControllerLockGuard.hxx> #include <Diagram.hxx> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> #include <com/sun/star/drawing/ShadeMode.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <utility> #include <vcl/svapp.hxx> using namespace ::com::sun::star; @@ -55,10 +52,10 @@ lcl_ModelProperties lcl_getPropertiesFromModel( rtl::Reference<::chart::ChartMod lcl_ModelProperties aProps; try { - rtl::Reference< ::chart::Diagram > xDiagram( ::chart::ChartModelHelper::findDiagram( xModel ) ); + rtl::Reference< ::chart::Diagram > xDiagram( xModel->getFirstChartDiagram() ); xDiagram->getPropertyValue( "D3DSceneShadeMode" ) >>= aProps.m_aShadeMode; ::chart::ThreeDHelper::getRoundedEdgesAndObjectLines( xDiagram, aProps.m_nRoundedEdges, aProps.m_nObjectLines ); - aProps.m_eScheme = ::chart::ThreeDHelper::detectScheme( xDiagram ); + aProps.m_eScheme = xDiagram->detectScheme(); } catch( const uno::Exception & ) { @@ -71,7 +68,7 @@ void lcl_setShadeModeAtModel( rtl::Reference<::chart::ChartModel> const & xModel { try { - rtl::Reference< ::chart::Diagram > xDiaProp = ::chart::ChartModelHelper::findDiagram( xModel ); + rtl::Reference< ::chart::Diagram > xDiaProp = xModel->getFirstChartDiagram(); xDiaProp->setPropertyValue( "D3DSceneShadeMode" , uno::Any( aShadeMode )); } catch( const uno::Exception & ) @@ -90,9 +87,9 @@ namespace chart #define POS_3DSCHEME_CUSTOM 2 ThreeD_SceneAppearance_TabPage::ThreeD_SceneAppearance_TabPage(weld::Container* pParent, - const rtl::Reference<::chart::ChartModel>& xChartModel, + rtl::Reference<::chart::ChartModel> xChartModel, ControllerLockHelper& rControllerLockHelper) - : m_xChartModel(xChartModel) + : m_xChartModel(std::move(xChartModel)) , m_bUpdateOtherControls(true) , m_bCommitToModel(true) , m_rControllerLockHelper(rControllerLockHelper) @@ -161,7 +158,7 @@ void ThreeD_SceneAppearance_TabPage::applyRoundedEdgeAndObjectLinesToModel() // locked controllers ControllerLockHelperGuard aGuard( m_rControllerLockHelper ); ThreeDHelper::setRoundedEdgesAndObjectLines( - ::chart::ChartModelHelper::findDiagram( m_xChartModel ), nCurrentRoundedEdges, nObjectLines ); + m_xChartModel->getFirstChartDiagram(), nCurrentRoundedEdges, nObjectLines ); } void ThreeD_SceneAppearance_TabPage::applyShadeModeToModel() @@ -272,12 +269,12 @@ IMPL_LINK_NOARG(ThreeD_SceneAppearance_TabPage, SelectSchemeHdl, weld::ComboBox& // locked controllers ControllerLockHelperGuard aGuard( m_rControllerLockHelper ); - rtl::Reference< Diagram > xDiagram = ::chart::ChartModelHelper::findDiagram( m_xChartModel ); + rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram(); if( m_xLB_Scheme->get_active() == POS_3DSCHEME_REALISTIC ) - ThreeDHelper::setScheme( xDiagram, ThreeDLookScheme::ThreeDLookScheme_Realistic ); + xDiagram->setScheme( ThreeDLookScheme::ThreeDLookScheme_Realistic ); else if( m_xLB_Scheme->get_active() == POS_3DSCHEME_SIMPLE ) - ThreeDHelper::setScheme( xDiagram, ThreeDLookScheme::ThreeDLookScheme_Simple ); + xDiagram->setScheme( ThreeDLookScheme::ThreeDLookScheme_Simple ); else { OSL_FAIL( "Invalid Entry selected" ); diff --git a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.hxx b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.hxx index 9d255c076e28..41366251729f 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.hxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.hxx @@ -32,7 +32,7 @@ class ThreeD_SceneAppearance_TabPage public: ThreeD_SceneAppearance_TabPage( weld::Container* pParent, - const rtl::Reference<::chart::ChartModel> & xChartModel, + rtl::Reference<::chart::ChartModel> xChartModel, ControllerLockHelper & rControllerLockHelper ); void ActivatePage(); ~ThreeD_SceneAppearance_TabPage(); diff --git a/chart2/source/controller/dialogs/tp_3D_SceneGeometry.cxx b/chart2/source/controller/dialogs/tp_3D_SceneGeometry.cxx index 3a76aa57f6dd..f368a8193a58 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneGeometry.cxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneGeometry.cxx @@ -19,13 +19,15 @@ #include "tp_3D_SceneGeometry.hxx" -#include <DiagramHelper.hxx> +#include <Diagram.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ThreeDHelper.hxx> #include <ControllerLockGuard.hxx> #include <com/sun/star/drawing/ProjectionMode.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <tools/helpers.hxx> +#include <utility> #include <vcl/svapp.hxx> namespace chart @@ -44,9 +46,9 @@ void lcl_SetMetricFieldLimits(weld::MetricSpinButton& rField, sal_Int64 nLimit) } ThreeD_SceneGeometry_TabPage::ThreeD_SceneGeometry_TabPage(weld::Container* pParent, - const uno::Reference< beans::XPropertySet > & xSceneProperties, + rtl::Reference< ::chart::Diagram > xDiagram, ControllerLockHelper & rControllerLockHelper) - : m_xSceneProperties( xSceneProperties ) + : m_xDiagram(std::move( xDiagram )) , m_aAngleTimer("chart2 ThreeD_SceneGeometry_TabPage m_aAngleTimer") , m_aPerspectiveTimer("chart2 ThreeD_SceneGeometry_TabPage m_aPerspectiveTimer") , m_nXRotation(0) @@ -66,7 +68,7 @@ ThreeD_SceneGeometry_TabPage::ThreeD_SceneGeometry_TabPage(weld::Container* pPar , m_xMFPerspective(m_xBuilder->weld_metric_spin_button("MTR_FLD_PERSPECTIVE", FieldUnit::PERCENT)) { double fXAngle, fYAngle, fZAngle; - ThreeDHelper::getRotationAngleFromDiagram( m_xSceneProperties, fXAngle, fYAngle, fZAngle ); + m_xDiagram->getRotationAngle( fXAngle, fYAngle, fZAngle ); fXAngle = basegfx::rad2deg(fXAngle); fYAngle = basegfx::rad2deg(fYAngle); @@ -97,12 +99,12 @@ ThreeD_SceneGeometry_TabPage::ThreeD_SceneGeometry_TabPage(weld::Container* pPar m_xMFZRotation->connect_value_changed( aAngleEditedLink ); drawing::ProjectionMode aProjectionMode = drawing::ProjectionMode_PERSPECTIVE; - m_xSceneProperties->getPropertyValue( "D3DScenePerspective" ) >>= aProjectionMode; + m_xDiagram->getPropertyValue( "D3DScenePerspective" ) >>= aProjectionMode; m_xCbxPerspective->set_active( aProjectionMode == drawing::ProjectionMode_PERSPECTIVE ); m_xCbxPerspective->connect_toggled( LINK( this, ThreeD_SceneGeometry_TabPage, PerspectiveToggled )); sal_Int32 nPerspectivePercentage = 20; - m_xSceneProperties->getPropertyValue( "Perspective" ) >>= nPerspectivePercentage; + m_xDiagram->getPropertyValue( "Perspective" ) >>= nPerspectivePercentage; m_xMFPerspective->set_value(nPerspectivePercentage, FieldUnit::PERCENT); m_aPerspectiveTimer.SetTimeout(nTimeout); @@ -111,11 +113,10 @@ ThreeD_SceneGeometry_TabPage::ThreeD_SceneGeometry_TabPage(weld::Container* pPar m_xMFPerspective->set_sensitive( m_xCbxPerspective->get_active() ); //RightAngledAxes - uno::Reference< chart2::XDiagram > xDiagram( m_xSceneProperties, uno::UNO_QUERY ); - if (ChartTypeHelper::isSupportingRightAngledAxes(DiagramHelper::getChartTypeByIndex(xDiagram, 0))) + if (ChartTypeHelper::isSupportingRightAngledAxes(m_xDiagram->getChartTypeByIndex(0))) { bool bRightAngledAxes = false; - m_xSceneProperties->getPropertyValue( "RightAngledAxes" ) >>= bRightAngledAxes; + m_xDiagram->getPropertyValue( "RightAngledAxes" ) >>= bRightAngledAxes; m_xCbxRightAngledAxes->connect_toggled( LINK( this, ThreeD_SceneGeometry_TabPage, RightAngledAxesToggled )); m_xCbxRightAngledAxes->set_active( bRightAngledAxes ); RightAngledAxesToggled(*m_xCbxRightAngledAxes); @@ -157,7 +158,7 @@ void ThreeD_SceneGeometry_TabPage::applyAnglesToModel() fYAngle = basegfx::deg2rad(fYAngle); fZAngle = basegfx::deg2rad(fZAngle); - ThreeDHelper::setRotationAngleToDiagram( m_xSceneProperties, fXAngle, fYAngle, fZAngle ); + m_xDiagram->setRotationAngle( fXAngle, fYAngle, fZAngle ); m_bAngleChangePending = false; m_aAngleTimer.Stop(); @@ -188,8 +189,8 @@ void ThreeD_SceneGeometry_TabPage::applyPerspectiveToModel() try { - m_xSceneProperties->setPropertyValue( "D3DScenePerspective" , uno::Any( aMode )); - m_xSceneProperties->setPropertyValue( "Perspective" , uno::Any( static_cast<sal_Int32>(m_xMFPerspective->get_value(FieldUnit::PERCENT)) )); + m_xDiagram->setPropertyValue( "D3DScenePerspective" , uno::Any( aMode )); + m_xDiagram->setPropertyValue( "Perspective" , uno::Any( static_cast<sal_Int32>(m_xMFPerspective->get_value(FieldUnit::PERCENT)) )); } catch( const uno::Exception & ) { @@ -247,7 +248,8 @@ IMPL_LINK_NOARG(ThreeD_SceneGeometry_TabPage, RightAngledAxesToggled, weld::Togg m_xMFZRotation->set_value(m_nZRotation, FieldUnit::DEGREE); } - ThreeDHelper::switchRightAngledAxes( m_xSceneProperties, m_xCbxRightAngledAxes->get_active() ); + if (m_xDiagram) + m_xDiagram->switchRightAngledAxes( m_xCbxRightAngledAxes->get_active() ); } } //namespace chart diff --git a/chart2/source/controller/dialogs/tp_3D_SceneGeometry.hxx b/chart2/source/controller/dialogs/tp_3D_SceneGeometry.hxx index ca7f75ebea0d..d0fc8a69d667 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneGeometry.hxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneGeometry.hxx @@ -20,18 +20,20 @@ #include <vcl/timer.hxx> #include <vcl/weld.hxx> +#include <rtl/ref.hxx> namespace com::sun::star::beans { class XPropertySet; } namespace chart { class ControllerLockHelper; } namespace chart { +class Diagram; class ThreeD_SceneGeometry_TabPage { public: ThreeD_SceneGeometry_TabPage(weld::Container* pWindow, - const css::uno::Reference< css::beans::XPropertySet > & xSceneProperties, + rtl::Reference< ::chart::Diagram > xDiagram, ControllerLockHelper & rControllerLockHelper); ~ThreeD_SceneGeometry_TabPage(); @@ -54,7 +56,7 @@ private: void applyAnglesToModel(); void applyPerspectiveToModel(); - css::uno::Reference< css::beans::XPropertySet > m_xSceneProperties; + rtl::Reference< ::chart::Diagram > m_xDiagram; Timer m_aAngleTimer; Timer m_aPerspectiveTimer; diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx index 56d2d44f9ce6..2650e56fe8a4 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx @@ -29,8 +29,9 @@ #include <svtools/colrdlg.hxx> #include <svx/svx3ditems.hxx> #include <svx/svddef.hxx> +#include <utility> #include <vcl/svapp.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <com/sun/star/beans/XPropertySet.hpp> @@ -99,7 +100,7 @@ namespace void lcl_selectColor(ColorListBox& rListBox, const Color& rColor) { rListBox.SetNoSelection(); - rListBox.SelectEntry(std::make_pair(rColor, lcl_makeColorName(rColor))); + rListBox.SelectEntry({rColor, lcl_makeColorName(rColor)}); } ::chart::LightSource lcl_getLightSourceFromProperties( @@ -138,7 +139,7 @@ namespace try { xSceneProperties->setPropertyValue( "D3DSceneLightColor" + aIndex, - uno::makeAny( rLightSource.nDiffuseColor )); + uno::Any( rLightSource.nDiffuseColor )); xSceneProperties->setPropertyValue( "D3DSceneLightDirection" + aIndex, uno::Any( rLightSource.aDirection )); xSceneProperties->setPropertyValue( "D3DSceneLightOn" + aIndex, @@ -172,7 +173,7 @@ namespace try { xSceneProperties->setPropertyValue("D3DSceneAmbientColor", - uno::makeAny( rColor )); + uno::Any( rColor )); } catch( const uno::Exception & ) { @@ -183,9 +184,9 @@ namespace ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Container* pParent, weld::Window* pTopLevel, - const uno::Reference< beans::XPropertySet > & xSceneProperties, + uno::Reference< beans::XPropertySet > xSceneProperties, const rtl::Reference<::chart::ChartModel>& xChartModel) - : m_xSceneProperties( xSceneProperties ) + : m_xSceneProperties(std::move( xSceneProperties )) , m_aTimerTriggeredControllerLock( xChartModel ) , m_bInCommitToModel( false ) , m_aModelChangeListener( LINK( this, ThreeD_SceneIllumination_TabPage, fillControlsFromModel ) ) @@ -193,14 +194,14 @@ ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Contain , m_pTopLevel(pTopLevel) , m_xBuilder(Application::CreateBuilder(pParent, "modules/schart/ui/tp_3D_SceneIllumination.ui")) , m_xContainer(m_xBuilder->weld_container("tp_3D_SceneIllumination")) - , m_xBtn_Light1(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_1"))) - , m_xBtn_Light2(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_2"))) - , m_xBtn_Light3(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_3"))) - , m_xBtn_Light4(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_4"))) - , m_xBtn_Light5(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_5"))) - , m_xBtn_Light6(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_6"))) - , m_xBtn_Light7(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_7"))) - , m_xBtn_Light8(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_8"))) + , m_aBtn_Light1(m_xBuilder->weld_toggle_button("BTN_LIGHT_1")) + , m_aBtn_Light2(m_xBuilder->weld_toggle_button("BTN_LIGHT_2")) + , m_aBtn_Light3(m_xBuilder->weld_toggle_button("BTN_LIGHT_3")) + , m_aBtn_Light4(m_xBuilder->weld_toggle_button("BTN_LIGHT_4")) + , m_aBtn_Light5(m_xBuilder->weld_toggle_button("BTN_LIGHT_5")) + , m_aBtn_Light6(m_xBuilder->weld_toggle_button("BTN_LIGHT_6")) + , m_aBtn_Light7(m_xBuilder->weld_toggle_button("BTN_LIGHT_7")) + , m_aBtn_Light8(m_xBuilder->weld_toggle_button("BTN_LIGHT_8")) , m_xLB_LightSource(new ColorListBox(m_xBuilder->weld_menu_button("LB_LIGHTSOURCE"), [this]{ return m_pTopLevel; })) , m_xBtn_LightSource_Color(m_xBuilder->weld_button("BTN_LIGHTSOURCE_COLOR")) , m_xLB_AmbientLight(new ColorListBox(m_xBuilder->weld_menu_button("LB_AMBIENTLIGHT"), [this]{ return m_pTopLevel; })) @@ -213,25 +214,25 @@ ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Contain , m_xCtl_Preview(new SvxLightCtl3D(*m_xPreview, *m_xHoriScale, *m_xVertScale, *m_xBtn_Corner)) { m_pLightSourceInfoList.reset(new LightSourceInfo[8]); - m_pLightSourceInfoList[0].pButton = m_xBtn_Light1.get(); - m_pLightSourceInfoList[1].pButton = m_xBtn_Light2.get(); - m_pLightSourceInfoList[2].pButton = m_xBtn_Light3.get(); - m_pLightSourceInfoList[3].pButton = m_xBtn_Light4.get(); - m_pLightSourceInfoList[4].pButton = m_xBtn_Light5.get(); - m_pLightSourceInfoList[5].pButton = m_xBtn_Light6.get(); - m_pLightSourceInfoList[6].pButton = m_xBtn_Light7.get(); - m_pLightSourceInfoList[7].pButton = m_xBtn_Light8.get(); + m_pLightSourceInfoList[0].pButton = &m_aBtn_Light1; + m_pLightSourceInfoList[1].pButton = &m_aBtn_Light2; + m_pLightSourceInfoList[2].pButton = &m_aBtn_Light3; + m_pLightSourceInfoList[3].pButton = &m_aBtn_Light4; + m_pLightSourceInfoList[4].pButton = &m_aBtn_Light5; + m_pLightSourceInfoList[5].pButton = &m_aBtn_Light6; + m_pLightSourceInfoList[6].pButton = &m_aBtn_Light7; + m_pLightSourceInfoList[7].pButton = &m_aBtn_Light8; fillControlsFromModel(nullptr); - m_xBtn_Light1->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light2->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light3->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light4->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light5->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light6->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light7->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); - m_xBtn_Light8->connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light1.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light2.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light3.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light4.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light5.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light6.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light7.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); + m_aBtn_Light8.connect_clicked( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_xLB_AmbientLight->SetSelectHdl( LINK( this, ThreeD_SceneIllumination_TabPage, SelectColorHdl ) ); m_xLB_LightSource->SetSelectHdl( LINK( this, ThreeD_SceneIllumination_TabPage, SelectColorHdl ) ); @@ -242,13 +243,15 @@ ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Contain m_xCtl_Preview->SetUserInteractiveChangeCallback( LINK( this, ThreeD_SceneIllumination_TabPage, PreviewChangeHdl ) ); m_xCtl_Preview->SetUserSelectionChangeCallback( LINK( this, ThreeD_SceneIllumination_TabPage, PreviewSelectHdl ) ); - ClickLightSourceButtonHdl(*m_xBtn_Light2->get_widget()); + ClickLightSourceButtonHdl(*m_aBtn_Light2.get_widget()); m_aModelChangeListener.startListening( uno::Reference< util::XModifyBroadcaster >(m_xSceneProperties, uno::UNO_QUERY) ); } ThreeD_SceneIllumination_TabPage::~ThreeD_SceneIllumination_TabPage() { + // drop page view before the widget it paints to is destroyed + m_xPreview->ClearPageView(); } IMPL_LINK_NOARG(ThreeD_SceneIllumination_TabPage, fillControlsFromModel, void*, void) diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx index 7ad91e225d37..98a1f3273620 100644 --- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx +++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx @@ -22,6 +22,7 @@ #include <TimerTriggeredControllerLock.hxx> #include <vcl/weld.hxx> #include <svx/dlgctl3d.hxx> +#include <svx/float3d.hxx> namespace com::sun::star::beans { @@ -29,7 +30,6 @@ class XPropertySet; } class ColorListBox; -class LightButton; namespace chart { @@ -39,10 +39,9 @@ class ChartModel; class ThreeD_SceneIllumination_TabPage { public: - ThreeD_SceneIllumination_TabPage( - weld::Container* pParent, weld::Window* pTopLevel, - const css::uno::Reference<css::beans::XPropertySet>& xSceneProperties, - const rtl::Reference<::chart::ChartModel>& xChartModel); + ThreeD_SceneIllumination_TabPage(weld::Container* pParent, weld::Window* pTopLevel, + css::uno::Reference<css::beans::XPropertySet> xSceneProperties, + const rtl::Reference<::chart::ChartModel>& xChartModel); ~ThreeD_SceneIllumination_TabPage(); private: @@ -74,14 +73,14 @@ private: weld::Window* m_pTopLevel; std::unique_ptr<weld::Builder> m_xBuilder; std::unique_ptr<weld::Container> m_xContainer; - std::unique_ptr<LightButton> m_xBtn_Light1; - std::unique_ptr<LightButton> m_xBtn_Light2; - std::unique_ptr<LightButton> m_xBtn_Light3; - std::unique_ptr<LightButton> m_xBtn_Light4; - std::unique_ptr<LightButton> m_xBtn_Light5; - std::unique_ptr<LightButton> m_xBtn_Light6; - std::unique_ptr<LightButton> m_xBtn_Light7; - std::unique_ptr<LightButton> m_xBtn_Light8; + LightButton m_aBtn_Light1; + LightButton m_aBtn_Light2; + LightButton m_aBtn_Light3; + LightButton m_aBtn_Light4; + LightButton m_aBtn_Light5; + LightButton m_aBtn_Light6; + LightButton m_aBtn_Light7; + LightButton m_aBtn_Light8; std::unique_ptr<ColorListBox> m_xLB_LightSource; std::unique_ptr<weld::Button> m_xBtn_LightSource_Color; std::unique_ptr<ColorListBox> m_xLB_AmbientLight; diff --git a/chart2/source/controller/dialogs/tp_AxisLabel.cxx b/chart2/source/controller/dialogs/tp_AxisLabel.cxx index 1ee392238141..79976618341c 100644 --- a/chart2/source/controller/dialogs/tp_AxisLabel.cxx +++ b/chart2/source/controller/dialogs/tp_AxisLabel.cxx @@ -48,12 +48,11 @@ SchAxisLabelTabPage::SchAxisLabelTabPage(weld::Container* pPage, weld::DialogCon , m_xCbTextOverlap(m_xBuilder->weld_check_button("overlapCB")) , m_xCbTextBreak(m_xBuilder->weld_check_button("breakCB")) , m_xFtABCD(m_xBuilder->weld_label("labelABCD")) - , m_xFlOrient(m_xBuilder->weld_label("labelTextOrient")) , m_xFtRotate(m_xBuilder->weld_label("degreeL")) , m_xNfRotate(m_xBuilder->weld_metric_spin_button("OrientDegree", FieldUnit::DEGREE)) , m_xCbStacked(m_xBuilder->weld_check_button("stackedCB")) , m_xFtTextDirection(m_xBuilder->weld_label("textdirL")) - , m_xLbTextDirection(new TextDirectionListBox(m_xBuilder->weld_combo_box("textdirLB"))) + , m_aLbTextDirection(m_xBuilder->weld_combo_box("textdirLB")) , m_xCtrlDial(new svx::DialControl) , m_xCtrlDialWin(new weld::CustomWeld(*m_xBuilder, "dialCtrl", *m_xCtrlDial)) { @@ -72,7 +71,6 @@ SchAxisLabelTabPage::~SchAxisLabelTabPage() { m_xCtrlDialWin.reset(); m_xCtrlDial.reset(); - m_xLbTextDirection.reset(); } std::unique_ptr<SfxTabPage> SchAxisLabelTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrs) @@ -124,8 +122,8 @@ bool SchAxisLabelTabPage::FillItemSet( SfxItemSet* rOutAttrs ) if( m_xCbShowDescription->get_state() != TRISTATE_INDET ) rOutAttrs->Put( SfxBoolItem( SCHATTR_AXIS_SHOWDESCR, m_xCbShowDescription->get_active() ) ); - if (m_xLbTextDirection->get_active() != -1) - rOutAttrs->Put( SvxFrameDirectionItem( m_xLbTextDirection->get_active_id(), EE_PARA_WRITINGDIR ) ); + if (m_aLbTextDirection.get_active() != -1) + rOutAttrs->Put( SvxFrameDirectionItem( m_aLbTextDirection.get_active_id(), EE_PARA_WRITINGDIR ) ); return true; } @@ -136,7 +134,7 @@ void SchAxisLabelTabPage::Reset( const SfxItemSet* rInAttrs ) // show description SfxItemState aState = rInAttrs->GetItemState( SCHATTR_AXIS_SHOWDESCR, false, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCbShowDescription->set_state( TRISTATE_INDET ); } @@ -159,7 +157,7 @@ void SchAxisLabelTabPage::Reset( const SfxItemSet* rInAttrs ) if( aState == SfxItemState::SET ) m_nInitialDegrees = static_cast< const SdrAngleItem * >( pPoolItem )->GetValue(); - m_bHasInitialDegrees = aState != SfxItemState::DONTCARE; + m_bHasInitialDegrees = aState != SfxItemState::INVALID; if( m_bHasInitialDegrees ) m_xCtrlDial->SetRotation( m_nInitialDegrees ); else @@ -171,19 +169,19 @@ void SchAxisLabelTabPage::Reset( const SfxItemSet* rInAttrs ) if( aState == SfxItemState::SET ) m_bInitialStacking = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); - m_bHasInitialStacking = aState != SfxItemState::DONTCARE; + m_bHasInitialStacking = aState != SfxItemState::INVALID; if( m_bHasInitialDegrees ) m_xCbStacked->set_state(m_bInitialStacking ? TRISTATE_TRUE : TRISTATE_FALSE); else m_xCbStacked->set_state(TRISTATE_INDET); StackedToggleHdl(*m_xCbStacked); - if( rInAttrs->GetItemState( EE_PARA_WRITINGDIR, true, &pPoolItem ) == SfxItemState::SET ) - m_xLbTextDirection->set_active_id( static_cast<const SvxFrameDirectionItem*>(pPoolItem)->GetValue() ); + if( const SvxFrameDirectionItem* pDirectionItem = rInAttrs->GetItemIfSet( EE_PARA_WRITINGDIR ) ) + m_aLbTextDirection.set_active_id( pDirectionItem->GetValue() ); // Text overlap ---------- aState = rInAttrs->GetItemState( SCHATTR_AXIS_LABEL_OVERLAP, false, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCbTextOverlap->set_state( TRISTATE_INDET ); } @@ -200,7 +198,7 @@ void SchAxisLabelTabPage::Reset( const SfxItemSet* rInAttrs ) // text break ---------- aState = rInAttrs->GetItemState( SCHATTR_AXIS_LABEL_BREAK, false, &pPoolItem ); - if( aState == SfxItemState::DONTCARE ) + if( aState == SfxItemState::INVALID ) { m_xCbTextBreak->set_state( TRISTATE_INDET ); } @@ -222,10 +220,9 @@ void SchAxisLabelTabPage::Reset( const SfxItemSet* rInAttrs ) // text order ---------- if( m_bShowStaggeringControls ) { - aState = rInAttrs->GetItemState( SCHATTR_AXIS_LABEL_ORDER, false, &pPoolItem ); - if( aState == SfxItemState::SET ) + if( const SvxChartTextOrderItem* pOrderItem = rInAttrs->GetItemIfSet( SCHATTR_AXIS_LABEL_ORDER, false ) ) { - SvxChartTextOrder eOrder = static_cast< const SvxChartTextOrderItem * >( pPoolItem )->GetValue(); + SvxChartTextOrder eOrder = pOrderItem->GetValue(); switch( eOrder ) { @@ -296,7 +293,7 @@ IMPL_LINK_NOARG(SchAxisLabelTabPage, ToggleShowLabel, weld::Toggleable&, void) m_xCbTextBreak->set_sensitive( bEnable ); m_xFtTextDirection->set_sensitive( bEnable ); - m_xLbTextDirection->set_sensitive( bEnable ); + m_aLbTextDirection.set_sensitive( bEnable ); } } //namespace chart diff --git a/chart2/source/controller/dialogs/tp_AxisLabel.hxx b/chart2/source/controller/dialogs/tp_AxisLabel.hxx index a94a030fe9a1..75704ec4e4d5 100644 --- a/chart2/source/controller/dialogs/tp_AxisLabel.hxx +++ b/chart2/source/controller/dialogs/tp_AxisLabel.hxx @@ -21,8 +21,8 @@ #include <sfx2/tabdlg.hxx> #include <svx/dialcontrol.hxx> #include <tools/degree.hxx> +#include <TextDirectionListBox.hxx> -namespace chart { class TextDirectionListBox; } namespace weld { class CheckButton; class CustomWeld; @@ -56,12 +56,11 @@ private: std::unique_ptr<weld::CheckButton> m_xCbTextOverlap; std::unique_ptr<weld::CheckButton> m_xCbTextBreak; std::unique_ptr<weld::Label> m_xFtABCD; - std::unique_ptr<weld::Label> m_xFlOrient; std::unique_ptr<weld::Label> m_xFtRotate; std::unique_ptr<weld::MetricSpinButton> m_xNfRotate; std::unique_ptr<weld::CheckButton> m_xCbStacked; std::unique_ptr<weld::Label> m_xFtTextDirection; - std::unique_ptr<TextDirectionListBox> m_xLbTextDirection; + TextDirectionListBox m_aLbTextDirection; std::unique_ptr<svx::DialControl> m_xCtrlDial; std::unique_ptr<weld::CustomWeld> m_xCtrlDialWin; diff --git a/chart2/source/controller/dialogs/tp_AxisPositions.cxx b/chart2/source/controller/dialogs/tp_AxisPositions.cxx index 6812e9f94818..2e3988267c77 100644 --- a/chart2/source/controller/dialogs/tp_AxisPositions.cxx +++ b/chart2/source/controller/dialogs/tp_AxisPositions.cxx @@ -42,13 +42,11 @@ AxisPositionsTabPage::AxisPositionsTabPage(weld::Container* pPage, weld::DialogC , m_xLB_CrossesAt(m_xBuilder->weld_combo_box("LB_CROSSES_OTHER_AXIS_AT")) , m_xED_CrossesAt(m_xBuilder->weld_formatted_spin_button("EDT_CROSSES_OTHER_AXIS_AT")) , m_xED_CrossesAtCategory(m_xBuilder->weld_combo_box( "EDT_CROSSES_OTHER_AXIS_AT_CATEGORY")) - , m_xCB_AxisBetweenCategories(m_xBuilder->weld_check_button("CB_AXIS_BETWEEN_CATEGORIES")) , m_xFL_Position(m_xBuilder->weld_frame("FL_POSITION")) , m_xRB_On(m_xBuilder->weld_radio_button("RB_ON")) , m_xRB_Between(m_xBuilder->weld_radio_button("RB_BETWEEN")) , m_xFL_Labels(m_xBuilder->weld_frame("FL_LABELS")) , m_xLB_PlaceLabels(m_xBuilder->weld_combo_box("LB_PLACE_LABELS")) - , m_xED_LabelDistance(m_xBuilder->weld_formatted_spin_button("EDT_AXIS_LABEL_DISTANCE")) , m_xCB_TicksInner(m_xBuilder->weld_check_button("CB_TICKS_INNER")) , m_xCB_TicksOuter(m_xBuilder->weld_check_button("CB_TICKS_OUTER")) , m_xCB_MinorInner(m_xBuilder->weld_check_button("CB_MINOR_INNER")) @@ -100,8 +98,8 @@ bool AxisPositionsTabPage::FillItemSet(SfxItemSet* rOutAttrs) rOutAttrs->Put( SfxInt32Item( SCHATTR_AXIS_LABEL_POSITION, nLabelPos )); // tick marks - tools::Long nTicks=0; - tools::Long nMinorTicks=0; + sal_Int32 nTicks=0; + sal_Int32 nMinorTicks=0; if(m_xCB_MinorInner->get_active()) nMinorTicks|=CHAXIS_MARK_INNER; @@ -129,7 +127,7 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) m_xED_CrossesAtCategory->set_visible( m_bCrossingAxisIsCategoryAxis ); if (m_bCrossingAxisIsCategoryAxis) { - for( auto const & cat : std::as_const(m_aCategories) ) + for (auto const& cat : m_aCategories) m_xED_CrossesAtCategory->append_text(cat); } @@ -142,13 +140,12 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) } //fill controls - const SfxPoolItem *pPoolItem = nullptr; //axis line - if(rInAttrs->GetItemState(SCHATTR_AXIS_POSITION,true, &pPoolItem)== SfxItemState::SET) + if(SfxInt32Item const * pPositionItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_POSITION)) { bool bZero = false; - sal_Int32 nPos = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nPos = pPositionItem->GetValue(); if(nPos==0) { //switch to value @@ -162,11 +159,12 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) m_xLB_CrossesAt->set_active( nPos ); CrossesAtSelectHdl( *m_xLB_CrossesAt ); - if( rInAttrs->GetItemState(SCHATTR_AXIS_POSITION_VALUE,true, &pPoolItem)== SfxItemState::SET || bZero ) + const SvxDoubleItem* pPosValueItem; + if( (pPosValueItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_POSITION_VALUE)) || bZero ) { double fCrossover = 0.0; if( !bZero ) - fCrossover = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + fCrossover = pPosValueItem->GetValue(); if( m_bCrossingAxisIsCategoryAxis ) m_xED_CrossesAtCategory->set_active( static_cast<sal_uInt16>(::rtl::math::round(fCrossover-1.0)) ); else @@ -188,9 +186,10 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) } // shifted category position - if (m_bSupportCategoryPositioning && rInAttrs->GetItemState(SCHATTR_AXIS_SHIFTED_CATEGORY_POSITION, true, &pPoolItem) == SfxItemState::SET) + const SfxBoolItem* pCatPosItem; + if (m_bSupportCategoryPositioning && (pCatPosItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_SHIFTED_CATEGORY_POSITION))) { - if (static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()) + if (pCatPosItem->GetValue()) m_xRB_Between->set_active(true); else m_xRB_On->set_active(true); @@ -199,9 +198,9 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) m_xFL_Position->hide(); // Labels - if( rInAttrs->GetItemState( SCHATTR_AXIS_LABEL_POSITION, false, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pLabelPosItem = rInAttrs->GetItemIfSet( SCHATTR_AXIS_LABEL_POSITION, false) ) { - sal_Int32 nPos = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nPos = pLabelPosItem->GetValue(); if( nPos < m_xLB_PlaceLabels->get_count() ) m_xLB_PlaceLabels->set_active( nPos ); } @@ -211,10 +210,10 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) // Tick marks tools::Long nTicks = 0, nMinorTicks = 0; - if (rInAttrs->GetItemState(SCHATTR_AXIS_TICKS,true, &pPoolItem)== SfxItemState::SET) - nTicks = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); - if (rInAttrs->GetItemState(SCHATTR_AXIS_HELPTICKS,true, &pPoolItem)== SfxItemState::SET) - nMinorTicks = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + if (const SfxInt32Item* pTicksItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_TICKS)) + nTicks = pTicksItem->GetValue(); + if (const SfxInt32Item* pHelpTicksItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_HELPTICKS)) + nMinorTicks = pHelpTicksItem->GetValue(); m_xCB_TicksInner->set_active(bool(nTicks&CHAXIS_MARK_INNER)); m_xCB_TicksOuter->set_active(bool(nTicks&CHAXIS_MARK_OUTER)); @@ -222,9 +221,9 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs) m_xCB_MinorOuter->set_active(bool(nMinorTicks&CHAXIS_MARK_OUTER)); // Tick position - if( rInAttrs->GetItemState( SCHATTR_AXIS_MARK_POSITION, false, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pMarkPosItem = rInAttrs->GetItemIfSet( SCHATTR_AXIS_MARK_POSITION, false) ) { - sal_Int32 nPos = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + sal_Int32 nPos = pMarkPosItem->GetValue(); if( nPos < m_xLB_PlaceTicks->get_count() ) m_xLB_PlaceTicks->set_active( nPos ); } @@ -261,10 +260,9 @@ void AxisPositionsTabPage::SetNumFormatter( SvNumberFormatter* pFormatter ) rCrossFormatter.SetFormatter(m_pNumFormatter); rCrossFormatter.UseInputStringForFormatting(); - const SfxPoolItem *pPoolItem = nullptr; - if( GetItemSet().GetItemState( SCHATTR_AXIS_CROSSING_MAIN_AXIS_NUMBERFORMAT, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxUInt32Item* pNumFormatItem = GetItemSet().GetItemIfSet(SCHATTR_AXIS_CROSSING_MAIN_AXIS_NUMBERFORMAT) ) { - sal_uLong nFmt = static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue(); + sal_uInt32 nFmt = pNumFormatItem->GetValue(); rCrossFormatter.SetFormatKey(nFmt); } } @@ -297,7 +295,7 @@ IMPL_LINK_NOARG(AxisPositionsTabPage, CrossesAtSelectHdl, weld::ComboBox&, void) if (m_xED_CrossesAt->get_text().isEmpty()) m_xED_CrossesAt->GetFormatter().SetValue(0.0); - if (m_xED_CrossesAtCategory->get_active() == -1) + if (m_xED_CrossesAtCategory->get_active() == -1 && m_xED_CrossesAtCategory->get_count()) m_xED_CrossesAtCategory->set_active(0); PlaceLabelsSelectHdl(*m_xLB_PlaceLabels); diff --git a/chart2/source/controller/dialogs/tp_AxisPositions.hxx b/chart2/source/controller/dialogs/tp_AxisPositions.hxx index d7f18242dd42..86f749a26850 100644 --- a/chart2/source/controller/dialogs/tp_AxisPositions.hxx +++ b/chart2/source/controller/dialogs/tp_AxisPositions.hxx @@ -60,7 +60,6 @@ private: //member: std::unique_ptr<weld::ComboBox> m_xLB_CrossesAt; std::unique_ptr<weld::FormattedSpinButton> m_xED_CrossesAt; std::unique_ptr<weld::ComboBox> m_xED_CrossesAtCategory; - std::unique_ptr<weld::CheckButton> m_xCB_AxisBetweenCategories; std::unique_ptr<weld::Frame> m_xFL_Position; std::unique_ptr<weld::RadioButton> m_xRB_On; @@ -68,7 +67,6 @@ private: //member: std::unique_ptr<weld::Frame> m_xFL_Labels; std::unique_ptr<weld::ComboBox> m_xLB_PlaceLabels; - std::unique_ptr<weld::FormattedSpinButton> m_xED_LabelDistance; std::unique_ptr<weld::CheckButton> m_xCB_TicksInner; std::unique_ptr<weld::CheckButton> m_xCB_TicksOuter; diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx index f5eec8625bc7..b301a9794d5d 100644 --- a/chart2/source/controller/dialogs/tp_ChartType.cxx +++ b/chart2/source/controller/dialogs/tp_ChartType.cxx @@ -22,27 +22,24 @@ #include <ChartTypeManager.hxx> #include <strings.hrc> #include <ResId.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <ChartTypeTemplate.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> #include <unonames.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <svtools/valueset.hxx> +#include <utility> #include <vcl/weld.hxx> #include <vcl/outdev.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; -ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, weld::DialogController* pController, const rtl::Reference<::chart::ChartModel>& xChartModel, +ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, weld::DialogController* pController, rtl::Reference<::chart::ChartModel> xChartModel, bool bShowDescription) : OWizardPage(pPage, pController, "modules/schart/ui/tp_ChartType.ui", "tp_ChartType") , m_pDim3DLookResourceGroup( new Dim3DLookResourceGroup(m_xBuilder.get()) ) @@ -50,7 +47,7 @@ ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, weld::DialogControlle , m_pSplineResourceGroup( new SplineResourceGroup(m_xBuilder.get(), pController->getDialog()) ) , m_pGeometryResourceGroup( new GeometryResourceGroup(m_xBuilder.get()) ) , m_pSortByXValuesResourceGroup( new SortByXValuesResourceGroup(m_xBuilder.get()) ) - , m_xChartModel( xChartModel ) + , m_xChartModel(std::move( xChartModel )) , m_aChartTypeDialogControllerList(0) , m_pCurrentMainType(nullptr) , m_nChangingCalls(0) @@ -79,7 +76,7 @@ ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, weld::DialogControlle m_xSubTypeList->SetStyle(m_xSubTypeList->GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK ); - m_xSubTypeList->SetColCount(4); + m_xSubTypeList->SetColCount(6); m_xSubTypeList->SetLineCount(1); bool bEnableComplexChartTypes = true; @@ -181,9 +178,9 @@ void ChartTypeTabPage::stateChanged() commitToModel( aParameter ); //detect the new ThreeDLookScheme - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram(m_xChartModel); + rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram(); // tdf#124295 - select always a 3D scheme - if (ThreeDLookScheme aThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram); + if (ThreeDLookScheme aThreeDLookScheme = xDiagram->detectScheme(); aThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Unknown) aParameter.eThreeDLookScheme = aThreeDLookScheme; @@ -246,15 +243,18 @@ void ChartTypeTabPage::selectMainType() m_pCurrentMainType->adjustParameterToMainType( aParameter ); commitToModel( aParameter ); //detect the new ThreeDLookScheme - aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) ); + aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Unknown; + rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram(); + if (xDiagram) + aParameter.eThreeDLookScheme = m_xChartModel->getFirstChartDiagram()->detectScheme(); if (!aParameter.b3DLook && aParameter.eThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Realistic) aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Realistic; - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram(m_xChartModel); try { - xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues; + if (xDiagram) + xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues; } catch ( const uno::Exception& ) { @@ -305,9 +305,10 @@ void ChartTypeTabPage::initializePage() if( !m_xChartModel.is() ) return; rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = m_xChartModel->getTypeManager(); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( m_xChartModel ); - DiagramHelper::tTemplateWithServiceName aTemplate = - DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); + rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram(); + Diagram::tTemplateWithServiceName aTemplate; + if (xDiagram) + aTemplate = xDiagram->getTemplate( xChartTypeManager ); OUString aServiceName( aTemplate.sServiceName ); bool bFound = false; @@ -326,7 +327,7 @@ void ChartTypeTabPage::initializePage() m_pCurrentMainType = getSelectedMainType(); //set ThreeDLookScheme - aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( xDiagram ); + aParameter.eThreeDLookScheme = xDiagram->detectScheme(); if (!aParameter.b3DLook && aParameter.eThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Realistic) aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Realistic; diff --git a/chart2/source/controller/dialogs/tp_ChartType.hxx b/chart2/source/controller/dialogs/tp_ChartType.hxx index 34ed8abf2327..c01b599f58d5 100644 --- a/chart2/source/controller/dialogs/tp_ChartType.hxx +++ b/chart2/source/controller/dialogs/tp_ChartType.hxx @@ -45,7 +45,7 @@ class ChartTypeTabPage final : public ResourceChangeListener, public vcl::OWizar { public: ChartTypeTabPage( weld::Container* pPage, weld::DialogController* pController - , const rtl::Reference<::chart::ChartModel>& xChartModel + , rtl::Reference<::chart::ChartModel> xChartModel , bool bShowDescription = true ); virtual ~ChartTypeTabPage() override; diff --git a/chart2/source/controller/dialogs/tp_DataPointOption.cxx b/chart2/source/controller/dialogs/tp_DataPointOption.cxx index 7fb9f230ed7e..4c824287206c 100644 --- a/chart2/source/controller/dialogs/tp_DataPointOption.cxx +++ b/chart2/source/controller/dialogs/tp_DataPointOption.cxx @@ -53,12 +53,10 @@ bool DataPointOptionTabPage::FillItemSet(SfxItemSet* rOutAttrs) void DataPointOptionTabPage::Reset(const SfxItemSet* rInAttrs) { - const SfxPoolItem* pPoolItem = nullptr; - - if (rInAttrs->GetItemState(SCHATTR_HIDE_DATA_POINT_LEGEND_ENTRY, true, &pPoolItem) - == SfxItemState::SET) + if (const SfxBoolItem* pEntryItem + = rInAttrs->GetItemIfSet(SCHATTR_HIDE_DATA_POINT_LEGEND_ENTRY)) { - bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + bool bVal = pEntryItem->GetValue(); m_xCBHideLegendEntry->set_active(bVal); } } diff --git a/chart2/source/controller/dialogs/tp_DataSource.cxx b/chart2/source/controller/dialogs/tp_DataSource.cxx index 45c00bfefb4c..fe4ba0981599 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.cxx +++ b/chart2/source/controller/dialogs/tp_DataSource.cxx @@ -20,36 +20,32 @@ #include "tp_DataSource.hxx" #include <strings.hrc> #include <ResId.hxx> +#include <ChartType.hxx> #include <ChartTypeTemplateProvider.hxx> #include <ChartTypeTemplate.hxx> #include <ChartModel.hxx> #include <RangeSelectionHelper.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <ControllerLockGuard.hxx> #include <DataSourceHelper.hxx> +#include <LabeledDataSequence.hxx> #include "DialogModel.hxx" #include <o3tl/safeint.hxx> #include <TabPageNotifiable.hxx> -#include <com/sun/star/chart2/XChartType.hpp> -#include <com/sun/star/chart2/XDataSeries.hpp> -#include <com/sun/star/chart2/XDataSeriesContainer.hpp> #include <com/sun/star/chart2/data/XDataProvider.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/util/XModifiable.hpp> -#include <com/sun/star/chart2/data/XDataSink.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::Sequence; namespace { -constexpr OUStringLiteral lcl_aLabelRole( u"label" ); +constexpr OUString lcl_aLabelRole( u"label"_ustr ); void lcl_UpdateCurrentRange(weld::TreeView& rOutListBox, const OUString & rRole, const OUString& rRange) @@ -59,7 +55,7 @@ void lcl_UpdateCurrentRange(weld::TreeView& rOutListBox, const OUString & rRole, { rOutListBox.set_text(nEntry, ::chart::DialogModel::ConvertRoleFromInternalToUI(rRole), 0); rOutListBox.set_text(nEntry, rRange, 1); - ::chart::SeriesEntry* pEntry = reinterpret_cast<::chart::SeriesEntry*>(rOutListBox.get_id(nEntry).toInt64()); + ::chart::SeriesEntry* pEntry = weld::fromId<::chart::SeriesEntry*>(rOutListBox.get_id(nEntry)); pEntry->m_sRole = rRole; } } @@ -71,11 +67,10 @@ bool lcl_UpdateCurrentSeriesName(weld::TreeView& rOutListBox) return false; bool bResult = false; - ::chart::SeriesEntry * pEntry = reinterpret_cast<::chart::SeriesEntry*>(rOutListBox.get_id(nEntry).toInt64()); + ::chart::SeriesEntry * pEntry = weld::fromId<::chart::SeriesEntry*>(rOutListBox.get_id(nEntry)); if (pEntry->m_xDataSeries.is() && pEntry->m_xChartType.is()) { - OUString aLabel(::chart::DataSeriesHelper::getDataSeriesLabel( - pEntry->m_xDataSeries, + OUString aLabel(pEntry->m_xDataSeries->getLabelForRole( pEntry->m_xChartType->getRoleOfSequenceForSeriesLabel())); if (!aLabel.isEmpty()) { @@ -93,7 +88,7 @@ OUString lcl_GetSelectedRole(const weld::TreeView& rRoleListBox, bool bUITransla { if (bUITranslated) return rRoleListBox.get_text(nEntry); - ::chart::SeriesEntry* pEntry = reinterpret_cast<::chart::SeriesEntry*>(rRoleListBox.get_id(nEntry).toInt64()); + ::chart::SeriesEntry* pEntry = weld::fromId<::chart::SeriesEntry*>(rRoleListBox.get_id(nEntry)); return pEntry->m_sRole; } return OUString(); @@ -126,32 +121,29 @@ void lcl_enableRangeChoosing(bool bEnable, weld::DialogController* pDialog) } void lcl_addLSequenceToDataSource( - const Reference< chart2::data::XLabeledDataSequence > & xLSequence, - const Reference< chart2::data::XDataSource > & xSource ) + const uno::Reference< chart2::data::XLabeledDataSequence > & xLSequence, + const Reference< ::chart::DataSeries > & xSource ) { - Reference< data::XDataSink > xSink( xSource, uno::UNO_QUERY ); - if( xSink.is()) + if( xSource.is()) { - Sequence< Reference< chart2::data::XLabeledDataSequence > > aData( xSource->getDataSequences()); - aData.realloc( aData.getLength() + 1 ); - aData.getArray()[ aData.getLength() - 1 ] = xLSequence; - xSink->setData( aData ); + std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > aData = xSource->getDataSequences2(); + aData.push_back( xLSequence ); + xSource->setData( aData ); } } -Reference< chart2::data::XLabeledDataSequence > lcl_findLSequenceWithOnlyLabel( - const Reference< chart2::data::XDataSource > & xDataSource ) +uno::Reference< chart2::data::XLabeledDataSequence > lcl_findLSequenceWithOnlyLabel( + const rtl::Reference< ::chart::DataSeries > & xDataSource ) { - Reference< chart2::data::XLabeledDataSequence > xResult; - const Sequence< Reference< chart2::data::XLabeledDataSequence > > aSequences( xDataSource->getDataSequences()); + uno::Reference< chart2::data::XLabeledDataSequence > xResult; - for( Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : aSequences ) + for( uno::Reference< chart2::data::XLabeledDataSequence > const & labeledDataSeq : xDataSource->getDataSequences2() ) { // no values are set but a label exists if( ! labeledDataSeq->getValues().is() && labeledDataSeq->getLabel().is()) { - xResult.set( labeledDataSeq ); + xResult = labeledDataSeq; break; } } @@ -233,7 +225,7 @@ void DataSourceTabPage::InsertRoleLBEntry(const OUString& rRole, const OUString& m_aEntries.emplace_back(new SeriesEntry); SeriesEntry* pEntry = m_aEntries.back().get(); pEntry->m_sRole = rRole; - m_xLB_ROLE->append(OUString::number(reinterpret_cast<sal_Int64>(pEntry)), + m_xLB_ROLE->append(weld::toId(pEntry), ::chart::DialogModel::ConvertRoleFromInternalToUI(rRole)); m_xLB_ROLE->set_text(m_xLB_ROLE->n_children() - 1, rRange, 1); } @@ -327,13 +319,13 @@ void DataSourceTabPage::updateControlsFromDialogModel() void DataSourceTabPage::fillSeriesListBox() { - Reference< XDataSeries > xSelected; + rtl::Reference< DataSeries > xSelected; SeriesEntry* pEntry = nullptr; int nEntry = m_xLB_SERIES->get_selected_index(); if (nEntry != -1) { - pEntry = reinterpret_cast<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); - xSelected.set(pEntry->m_xDataSeries); + pEntry = weld::fromId<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry)); + xSelected = pEntry->m_xDataSeries; } bool bHasSelectedEntry = (pEntry != nullptr); @@ -357,7 +349,7 @@ void DataSourceTabPage::fillSeriesListBox() OUString aResString(::chart::SchResId( STR_DATA_UNNAMED_SERIES_WITH_INDEX )); // replace index of unnamed series - static const OUStringLiteral aReplacementStr( u"%NUMBER" ); + static constexpr OUString aReplacementStr( u"%NUMBER"_ustr ); sal_Int32 nIndex = aResString.indexOf( aReplacementStr ); if( nIndex != -1 ) aLabel = aResString.replaceAt( @@ -372,9 +364,9 @@ void DataSourceTabPage::fillSeriesListBox() m_aEntries.emplace_back(new SeriesEntry); pEntry = m_aEntries.back().get(); - pEntry->m_xDataSeries.set(series.second.first); - pEntry->m_xChartType.set(series.second.second); - m_xLB_SERIES->append(OUString::number(reinterpret_cast<sal_Int64>(pEntry)), aLabel); + pEntry->m_xDataSeries = series.second.first; + pEntry->m_xChartType = series.second.second; + m_xLB_SERIES->append(weld::toId(pEntry), aLabel); if (bHasSelectedEntry && series.second.first == xSelected) nSelectedEntry = nEntry; ++nEntry; @@ -391,7 +383,7 @@ void DataSourceTabPage::fillRoleListBox() int nSeriesEntry = m_xLB_SERIES->get_selected_index(); SeriesEntry* pSeriesEntry = nullptr; if (nSeriesEntry != -1) - pSeriesEntry = reinterpret_cast<SeriesEntry*>(m_xLB_SERIES->get_id(nSeriesEntry).toInt64()); + pSeriesEntry = weld::fromId<SeriesEntry*>(m_xLB_SERIES->get_id(nSeriesEntry)); bool bHasSelectedEntry = (pSeriesEntry != nullptr); int nRoleIndex = m_xLB_ROLE->get_selected_index(); @@ -487,7 +479,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, RoleSelectionChangedHdl, weld::TreeView&, voi OUString aSelectedRange = lcl_GetSelectedRolesRange( *m_xLB_ROLE ); // replace role in fixed text label - static const OUStringLiteral aReplacementStr( u"%VALUETYPE" ); + static constexpr OUString aReplacementStr( u"%VALUETYPE"_ustr ); sal_Int32 nIndex = m_aFixedTextRange.indexOf( aReplacementStr ); if( nIndex != -1 ) { @@ -559,23 +551,23 @@ IMPL_LINK_NOARG(DataSourceTabPage, AddButtonClickedHdl, weld::Button&, void) { m_rDialogModel.startControllerLockTimer(); int nEntry = m_xLB_SERIES->get_selected_index(); - Reference< XDataSeries > xSeriesToInsertAfter; - Reference< XChartType > xChartTypeForNewSeries; + rtl::Reference< DataSeries > xSeriesToInsertAfter; + rtl::Reference< ChartType > xChartTypeForNewSeries; if( m_pTemplateProvider ) m_rDialogModel.setTemplate( m_pTemplateProvider->getCurrentTemplate()); if (nEntry != -1) { - ::chart::SeriesEntry* pEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); - xSeriesToInsertAfter.set(pEntry->m_xDataSeries); - xChartTypeForNewSeries.set(pEntry->m_xChartType); + ::chart::SeriesEntry* pEntry = weld::fromId<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry)); + xSeriesToInsertAfter = pEntry->m_xDataSeries; + xChartTypeForNewSeries = pEntry->m_xChartType; } else { - std::vector< Reference< XDataSeriesContainer > > aCntVec( + std::vector< rtl::Reference< ChartType > > aCntVec( m_rDialogModel.getAllDataSeriesContainers()); if( ! aCntVec.empty()) - xChartTypeForNewSeries.set( aCntVec.front(), uno::UNO_QUERY ); + xChartTypeForNewSeries = aCntVec.front(); } OSL_ENSURE( xChartTypeForNewSeries.is(), "Cannot insert new series" ); @@ -602,15 +594,15 @@ IMPL_LINK_NOARG(DataSourceTabPage, RemoveButtonClickedHdl, weld::Button&, void) if (nEntry == -1) return; - SeriesEntry* pEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); - Reference< XDataSeries > xNewSelSeries; + SeriesEntry* pEntry = weld::fromId<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry)); + rtl::Reference< DataSeries > xNewSelSeries; SeriesEntry * pNewSelEntry = nullptr; if (nEntry + 1 < m_xLB_SERIES->n_children()) - pNewSelEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry + 1).toInt64()); + pNewSelEntry = weld::fromId<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry + 1)); else if (nEntry > 0) - pNewSelEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry - 1).toInt64()); + pNewSelEntry = weld::fromId<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(nEntry - 1)); if (pNewSelEntry) - xNewSelSeries.set(pNewSelEntry->m_xDataSeries); + xNewSelSeries = pNewSelEntry->m_xDataSeries; m_rDialogModel.deleteSeries( pEntry->m_xDataSeries, pEntry->m_xChartType ); setDirty(); @@ -623,7 +615,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, RemoveButtonClickedHdl, weld::Button&, void) { for (int i = 0; i < m_xLB_SERIES->n_children(); ++i) { - pEntry = reinterpret_cast<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(i).toInt64()); + pEntry = weld::fromId<::chart::SeriesEntry*>(m_xLB_SERIES->get_id(i)); if (pEntry->m_xDataSeries == xNewSelSeries) { m_xLB_SERIES->select(i); @@ -641,7 +633,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, UpButtonClickedHdl, weld::Button&, void) int nEntry = m_xLB_SERIES->get_selected_index(); SeriesEntry* pEntry = nullptr; if (nEntry != -1) - pEntry = reinterpret_cast<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); + pEntry = weld::fromId<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry)); bool bHasSelectedEntry = (pEntry != nullptr); @@ -661,7 +653,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, DownButtonClickedHdl, weld::Button&, void) int nEntry = m_xLB_SERIES->get_selected_index(); SeriesEntry* pEntry = nullptr; if (nEntry != -1) - pEntry = reinterpret_cast<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry).toInt64()); + pEntry = weld::fromId<SeriesEntry*>(m_xLB_SERIES->get_id(nEntry)); bool bHasSelectedEntry = (pEntry != nullptr); @@ -750,7 +742,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) if (bAll || (pField == m_xEDT_CATEGORIES.get())) { - Reference< data::XLabeledDataSequence > xLabeledSeq( m_rDialogModel.getCategories() ); + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSeq( m_rDialogModel.getCategories() ); if( xDataProvider.is()) { OUString aRange(m_xEDT_CATEGORIES->get_text()); @@ -759,7 +751,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) // create or change categories if( !xLabeledSeq.is()) { - xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence() ); + xLabeledSeq = DataSourceHelper::createLabeledDataSequence(); m_rDialogModel.setCategories( xLabeledSeq ); } try @@ -775,7 +767,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) else if( xLabeledSeq.is()) { // clear existing categories - xLabeledSeq.set(nullptr); + xLabeledSeq.clear(); m_rDialogModel.setCategories( xLabeledSeq ); } } @@ -784,7 +776,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) int nSeriesEntry = m_xLB_SERIES->get_selected_index(); SeriesEntry* pSeriesEntry = nullptr; if (nSeriesEntry != -1) - pSeriesEntry = reinterpret_cast<SeriesEntry*>(m_xLB_SERIES->get_id(nSeriesEntry).toInt64()); + pSeriesEntry = weld::fromId<SeriesEntry*>(m_xLB_SERIES->get_id(nSeriesEntry)); bool bHasSelectedEntry = (pSeriesEntry != nullptr); if( bHasSelectedEntry ) @@ -802,9 +794,8 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) if( bIsLabel ) aSequenceRole = aSequenceNameForLabel; - Reference< data::XDataSource > xSource( pSeriesEntry->m_xDataSeries, uno::UNO_QUERY_THROW ); - Reference< data::XLabeledDataSequence > xLabeledSeq( - DataSeriesHelper::getDataSequenceByRole( xSource, aSequenceRole )); + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSeq = + DataSeriesHelper::getDataSequenceByRole( pSeriesEntry->m_xDataSeries, aSequenceRole ); if( xDataProvider.is()) { @@ -813,12 +804,12 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) if( ! xLabeledSeq.is()) { // check if there is already an "orphan" label sequence - xLabeledSeq.set( lcl_findLSequenceWithOnlyLabel( xSource )); + xLabeledSeq = lcl_findLSequenceWithOnlyLabel( pSeriesEntry->m_xDataSeries ); if( ! xLabeledSeq.is()) { // no corresponding labeled data sequence for label found - xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence() ); - lcl_addLSequenceToDataSource( xLabeledSeq, xSource ); + xLabeledSeq = DataSourceHelper::createLabeledDataSequence(); + lcl_addLSequenceToDataSource( xLabeledSeq, pSeriesEntry->m_xDataSeries ); } } if( xLabeledSeq.is()) @@ -842,7 +833,7 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) // "$Sheet1.$A$1" aRange = xNewSeq->getSourceRangeRepresentation(); Reference< beans::XPropertySet > xProp( xNewSeq, uno::UNO_QUERY_THROW ); - xProp->setPropertyValue( "Role" , uno::Any( OUString(lcl_aLabelRole) )); + xProp->setPropertyValue( "Role" , uno::Any( lcl_aLabelRole )); //Labels should always include hidden cells, regardless of the setting chosen xProp->setPropertyValue( "IncludeHiddenCells", uno::Any(true)); @@ -881,11 +872,11 @@ bool DataSourceTabPage::updateModelFromControl(const weld::Entry* pField) if( !xLabeledSeq.is()) { if( aSelectedRole == aSequenceNameForLabel ) - xLabeledSeq.set( lcl_findLSequenceWithOnlyLabel( xSource )); + xLabeledSeq = lcl_findLSequenceWithOnlyLabel( pSeriesEntry->m_xDataSeries ); if( ! xLabeledSeq.is()) { - xLabeledSeq.set( DataSourceHelper::createLabeledDataSequence() ); - lcl_addLSequenceToDataSource( xLabeledSeq, xSource ); + xLabeledSeq = DataSourceHelper::createLabeledDataSequence(); + lcl_addLSequenceToDataSource( xLabeledSeq, pSeriesEntry->m_xDataSeries ); } } xLabeledSeq->setValues( xNewSeq ); diff --git a/chart2/source/controller/dialogs/tp_DataSource.hxx b/chart2/source/controller/dialogs/tp_DataSource.hxx index 1b6ba9862168..40219d917f9c 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.hxx +++ b/chart2/source/controller/dialogs/tp_DataSource.hxx @@ -18,6 +18,9 @@ */ #pragma once +#include <DataSeries.hxx> +#include <ChartType.hxx> + #include <vcl/wizardmachine.hxx> #include <RangeSelectionListener.hxx> @@ -29,8 +32,9 @@ namespace chart { class TabPageNotifiable; } namespace chart { - +class ChartType; class ChartTypeTemplateProvider; +class DataSeries; class DialogModel; class SeriesEntry @@ -39,10 +43,10 @@ public: OUString m_sRole; /// the corresponding data series - css::uno::Reference< css::chart2::XDataSeries > m_xDataSeries; + rtl::Reference< ::chart::DataSeries > m_xDataSeries; /// the chart type that contains the series (via XDataSeriesContainer) - css::uno::Reference< css::chart2::XChartType > m_xChartType; + rtl::Reference< ::chart::ChartType > m_xChartType; }; class DataSourceTabPage final : diff --git a/chart2/source/controller/dialogs/tp_DataTable.cxx b/chart2/source/controller/dialogs/tp_DataTable.cxx new file mode 100644 index 000000000000..e6982b4a5067 --- /dev/null +++ b/chart2/source/controller/dialogs/tp_DataTable.cxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "tp_DataTable.hxx" + +namespace chart +{ +DataTableTabPage::DataTableTabPage(weld::Container* pPage, weld::DialogController* pController, + const SfxItemSet& rInAttrs) + : SfxTabPage(pPage, pController, "modules/schart/ui/tp_DataTable.ui", "DataTableTabPage", + &rInAttrs) + , m_aDataTablePropertiesResources(*m_xBuilder) +{ +} + +DataTableTabPage::~DataTableTabPage() = default; + +std::unique_ptr<SfxTabPage> DataTableTabPage::Create(weld::Container* pPage, + weld::DialogController* pController, + const SfxItemSet* rAttrs) +{ + return std::make_unique<DataTableTabPage>(pPage, pController, *rAttrs); +} + +bool DataTableTabPage::FillItemSet(SfxItemSet* pOutAttrs) +{ + return m_aDataTablePropertiesResources.writeToItemSet(*pOutAttrs); +} + +void DataTableTabPage::Reset(const SfxItemSet* pInAttrs) +{ + m_aDataTablePropertiesResources.initFromItemSet(*pInAttrs); +} + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/dialogs/tp_DataTable.hxx b/chart2/source/controller/dialogs/tp_DataTable.hxx new file mode 100644 index 000000000000..00ab64cf89ce --- /dev/null +++ b/chart2/source/controller/dialogs/tp_DataTable.hxx @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <sfx2/tabdlg.hxx> +#include <res_DataTableProperties.hxx> + +namespace chart +{ +/** Tab page for the data table properties */ +class DataTableTabPage : public SfxTabPage +{ +private: + DataTablePropertiesResources m_aDataTablePropertiesResources; + +public: + DataTableTabPage(weld::Container* pPage, weld::DialogController* pController, + const SfxItemSet& rInAttrs); + virtual ~DataTableTabPage() override; + + static std::unique_ptr<SfxTabPage> + Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rInAttrs); + + virtual bool FillItemSet(SfxItemSet* rOutAttrs) override; + virtual void Reset(const SfxItemSet* rInAttrs) override; +}; + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/dialogs/tp_LegendPosition.cxx b/chart2/source/controller/dialogs/tp_LegendPosition.cxx index 04697e75efc9..21a889bf854f 100644 --- a/chart2/source/controller/dialogs/tp_LegendPosition.cxx +++ b/chart2/source/controller/dialogs/tp_LegendPosition.cxx @@ -30,14 +30,13 @@ namespace chart SchLegendPosTabPage::SchLegendPosTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs) : SfxTabPage(pPage, pController, "modules/schart/ui/tp_LegendPosition.ui", "tp_LegendPosition", &rInAttrs) , m_aLegendPositionResources(*m_xBuilder) - , m_xLbTextDirection(new TextDirectionListBox(m_xBuilder->weld_combo_box("LB_LEGEND_TEXTDIR"))) + , m_aLbTextDirection(m_xBuilder->weld_combo_box("LB_LEGEND_TEXTDIR")) , m_xCBLegendNoOverlay(m_xBuilder->weld_check_button("CB_NO_OVERLAY")) { } SchLegendPosTabPage::~SchLegendPosTabPage() { - m_xLbTextDirection.reset(); } std::unique_ptr<SfxTabPage> SchLegendPosTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rOutAttrs) @@ -49,8 +48,8 @@ bool SchLegendPosTabPage::FillItemSet(SfxItemSet* rOutAttrs) { m_aLegendPositionResources.writeToItemSet(*rOutAttrs); - if (m_xLbTextDirection->get_active() != -1) - rOutAttrs->Put(SvxFrameDirectionItem(m_xLbTextDirection->get_active_id(), EE_PARA_WRITINGDIR)); + if (m_aLbTextDirection.get_active() != -1) + rOutAttrs->Put(SvxFrameDirectionItem(m_aLbTextDirection.get_active_id(), EE_PARA_WRITINGDIR)); if (m_xCBLegendNoOverlay->get_visible()) rOutAttrs->Put(SfxBoolItem(SCHATTR_LEGEND_NO_OVERLAY, m_xCBLegendNoOverlay->get_active())); @@ -62,13 +61,12 @@ void SchLegendPosTabPage::Reset(const SfxItemSet* rInAttrs) { m_aLegendPositionResources.initFromItemSet(*rInAttrs); - const SfxPoolItem* pPoolItem = nullptr; - if( rInAttrs->GetItemState( EE_PARA_WRITINGDIR, true, &pPoolItem ) == SfxItemState::SET ) - m_xLbTextDirection->set_active_id( static_cast<const SvxFrameDirectionItem*>(pPoolItem)->GetValue() ); + if( const SvxFrameDirectionItem* pDirectionItem = rInAttrs->GetItemIfSet( EE_PARA_WRITINGDIR ) ) + m_aLbTextDirection.set_active_id( pDirectionItem->GetValue() ); - if (rInAttrs->GetItemState(SCHATTR_LEGEND_NO_OVERLAY, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pNoOverlayItem = rInAttrs->GetItemIfSet(SCHATTR_LEGEND_NO_OVERLAY)) { - bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + bool bVal = pNoOverlayItem->GetValue(); m_xCBLegendNoOverlay->set_active(bVal); } } diff --git a/chart2/source/controller/dialogs/tp_LegendPosition.hxx b/chart2/source/controller/dialogs/tp_LegendPosition.hxx index 9e5f32d281a7..4534501b5209 100644 --- a/chart2/source/controller/dialogs/tp_LegendPosition.hxx +++ b/chart2/source/controller/dialogs/tp_LegendPosition.hxx @@ -21,8 +21,7 @@ #include <sfx2/tabdlg.hxx> #include <res_LegendPosition.hxx> - -namespace chart { class TextDirectionListBox; } +#include <TextDirectionListBox.hxx> namespace chart { @@ -32,7 +31,7 @@ class SchLegendPosTabPage : public SfxTabPage private: LegendPositionResources m_aLegendPositionResources; - std::unique_ptr<TextDirectionListBox> m_xLbTextDirection; + TextDirectionListBox m_aLbTextDirection; std::unique_ptr<weld::CheckButton> m_xCBLegendNoOverlay; public: diff --git a/chart2/source/controller/dialogs/tp_PointGeometry.cxx b/chart2/source/controller/dialogs/tp_PointGeometry.cxx index 88116ee890e1..7c2c4d942e66 100644 --- a/chart2/source/controller/dialogs/tp_PointGeometry.cxx +++ b/chart2/source/controller/dialogs/tp_PointGeometry.cxx @@ -62,11 +62,9 @@ bool SchLayoutTabPage::FillItemSet(SfxItemSet* rOutAttrs) void SchLayoutTabPage::Reset(const SfxItemSet* rInAttrs) { - const SfxPoolItem *pPoolItem = nullptr; - - if (rInAttrs->GetItemState(SCHATTR_STYLE_SHAPE,true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pShapeItem = rInAttrs->GetItemIfSet(SCHATTR_STYLE_SHAPE)) { - tools::Long nVal = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + tools::Long nVal = pShapeItem->GetValue(); if(m_pGeometryResources) { m_pGeometryResources->select(static_cast<sal_uInt16>(nVal)); diff --git a/chart2/source/controller/dialogs/tp_PolarOptions.cxx b/chart2/source/controller/dialogs/tp_PolarOptions.cxx index ed4172d68110..ad7b2b6f0f3e 100644 --- a/chart2/source/controller/dialogs/tp_PolarOptions.cxx +++ b/chart2/source/controller/dialogs/tp_PolarOptions.cxx @@ -69,11 +69,9 @@ bool PolarOptionsTabPage::FillItemSet( SfxItemSet* rOutAttrs ) void PolarOptionsTabPage::Reset(const SfxItemSet* rInAttrs) { - const SfxPoolItem *pPoolItem = nullptr; - - if (rInAttrs->GetItemState(SCHATTR_STARTING_ANGLE, true, &pPoolItem) == SfxItemState::SET) + if (const SdrAngleItem* pAngleItem = rInAttrs->GetItemIfSet(SCHATTR_STARTING_ANGLE)) { - Degree100 nTmp = static_cast<const SdrAngleItem*>(pPoolItem)->GetValue(); + Degree100 nTmp = pAngleItem->GetValue(); m_xAngleDial->SetRotation( nTmp ); } else @@ -81,18 +79,20 @@ void PolarOptionsTabPage::Reset(const SfxItemSet* rInAttrs) m_xFL_StartingAngle->hide(); } // tdf#108059 Hide clockwise orientation checkbox in OOXML-heavy environments it would be useless anyways - if (!officecfg::Office::Compatibility::View::ClockwisePieChartDirection::get() && rInAttrs->GetItemState(SCHATTR_CLOCKWISE, true, &pPoolItem) == SfxItemState::SET) + const SfxBoolItem* pClockWiseItem = nullptr; + if (!officecfg::Office::Compatibility::View::ClockwisePieChartDirection::get() && + (pClockWiseItem = rInAttrs->GetItemIfSet(SCHATTR_CLOCKWISE))) { - bool bCheck = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); + bool bCheck = pClockWiseItem->GetValue(); m_xCB_Clockwise->set_active(bCheck); } else { m_xCB_Clockwise->hide(); } - if (rInAttrs->GetItemState(SCHATTR_INCLUDE_HIDDEN_CELLS, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pHiddenCellsItem = rInAttrs->GetItemIfSet(SCHATTR_INCLUDE_HIDDEN_CELLS)) { - bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + bool bVal = pHiddenCellsItem->GetValue(); m_xCB_IncludeHiddenCells->set_active(bVal); } else diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.cxx b/chart2/source/controller/dialogs/tp_RangeChooser.cxx index 05f137f5a7be..a88f6a826e0b 100644 --- a/chart2/source/controller/dialogs/tp_RangeChooser.cxx +++ b/chart2/source/controller/dialogs/tp_RangeChooser.cxx @@ -69,7 +69,6 @@ RangeChooserTabPage::RangeChooserTabPage(weld::Container* pPage, weld::DialogCon , m_rDialogModel( rDialogModel ) , m_pTabPageNotifiable(dynamic_cast<TabPageNotifiable*>(pController)) , m_xFT_Caption(m_xBuilder->weld_label("FT_CAPTION_FOR_WIZARD")) - , m_xFT_Range(m_xBuilder->weld_label("FT_RANGE")) , m_xED_Range(m_xBuilder->weld_entry("ED_RANGE")) , m_xIB_Range(m_xBuilder->weld_button("IB_RANGE")) , m_xRB_Rows(m_xBuilder->weld_radio_button("RB_DATAROWS")) diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.hxx b/chart2/source/controller/dialogs/tp_RangeChooser.hxx index e372b3f159b1..428e8a127dd9 100644 --- a/chart2/source/controller/dialogs/tp_RangeChooser.hxx +++ b/chart2/source/controller/dialogs/tp_RangeChooser.hxx @@ -24,7 +24,6 @@ #include <vcl/wizardmachine.hxx> namespace chart { class TabPageNotifiable; } -namespace com::sun::star::chart2 { class XChartTypeTemplate; } namespace chart { @@ -79,7 +78,6 @@ private: TabPageNotifiable * m_pTabPageNotifiable; std::unique_ptr<weld::Label> m_xFT_Caption; - std::unique_ptr<weld::Label> m_xFT_Range; std::unique_ptr<weld::Entry> m_xED_Range; std::unique_ptr<weld::Button> m_xIB_Range; std::unique_ptr<weld::RadioButton> m_xRB_Rows; diff --git a/chart2/source/controller/dialogs/tp_Scale.cxx b/chart2/source/controller/dialogs/tp_Scale.cxx index 6c7effde6707..b8c9f0598357 100644 --- a/chart2/source/controller/dialogs/tp_Scale.cxx +++ b/chart2/source/controller/dialogs/tp_Scale.cxx @@ -26,6 +26,7 @@ #include <svx/svxids.hrc> #include <osl/diagnose.h> +#include <sfx2/dialoghelper.hxx> #include <svx/chrtitem.hxx> #include <svl/eitem.hxx> #include <svl/intitem.hxx> @@ -271,19 +272,18 @@ void ScaleTabPage::Reset(const SfxItemSet* rInAttrs) if(!pNumFormatter) return; - const SfxPoolItem *pPoolItem = nullptr; - if (rInAttrs->GetItemState(SCHATTR_AXIS_ALLOW_DATEAXIS, true, &pPoolItem) == SfxItemState::SET) - m_bAllowDateAxis = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + if (const SfxBoolItem* pDateAxisItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_ALLOW_DATEAXIS)) + m_bAllowDateAxis = pDateAxisItem->GetValue(); m_nAxisType=chart2::AxisType::REALNUMBER; - if (rInAttrs->GetItemState(SCHATTR_AXISTYPE, true, &pPoolItem) == SfxItemState::SET) - m_nAxisType = static_cast<int>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()); + if (const SfxInt32Item* pAxisTypeItem = rInAttrs->GetItemIfSet(SCHATTR_AXISTYPE)) + m_nAxisType = static_cast<int>(pAxisTypeItem->GetValue()); if( m_nAxisType==chart2::AxisType::DATE && !m_bAllowDateAxis ) m_nAxisType=chart2::AxisType::CATEGORY; if( m_bAllowDateAxis ) { bool bAutoDateAxis = false; - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_DATEAXIS, true, &pPoolItem) == SfxItemState::SET) - bAutoDateAxis = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + if (const SfxBoolItem* pDateAxisItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_DATEAXIS)) + bAutoDateAxis = pDateAxisItem->GetValue(); sal_uInt16 nPos = 0; if( m_nAxisType==chart2::AxisType::DATE ) @@ -302,74 +302,74 @@ void ScaleTabPage::Reset(const SfxItemSet* rInAttrs) m_xCbxAutoOrigin->set_active(true); m_xCbx_AutoTimeResolution->set_active(true); - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_MIN,true,&pPoolItem) == SfxItemState::SET) - m_xCbxAutoMin->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + if (const SfxBoolItem* pAutoMinItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_MIN)) + m_xCbxAutoMin->set_active(pAutoMinItem->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_MIN,true, &pPoolItem) == SfxItemState::SET) + if (const SvxDoubleItem* pAxisMinItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_MIN)) { - fMin = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + fMin = pAxisMinItem->GetValue(); lcl_setValue( *m_xFmtFldMin, fMin ); m_xFmtFldMin->save_value(); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_MAX,true, &pPoolItem) == SfxItemState::SET) - m_xCbxAutoMax->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + if (const SfxBoolItem* pAutoMaxItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_MAX)) + m_xCbxAutoMax->set_active(pAutoMaxItem->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_MAX,true, &pPoolItem) == SfxItemState::SET) + if (const SvxDoubleItem* pAxisMaxItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_MAX)) { - fMax = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + fMax = pAxisMaxItem->GetValue(); lcl_setValue( *m_xFmtFldMax, fMax ); m_xFmtFldMax->save_value(); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_STEP_MAIN,true, &pPoolItem) == SfxItemState::SET) - m_xCbxAutoStepMain->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); + if (const SfxBoolItem* pAutoStepMainItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_STEP_MAIN)) + m_xCbxAutoStepMain->set_active(pAutoStepMainItem->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_STEP_MAIN,true, &pPoolItem) == SfxItemState::SET) + if (const SvxDoubleItem* pStepMainItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_STEP_MAIN)) { - fStepMain = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + fStepMain = pStepMainItem->GetValue(); lcl_setValue( *m_xFmtFldStepMain, fStepMain ); m_xFmtFldStepMain->save_value(); m_xMt_MainDateStep->set_value( static_cast<sal_Int32>(fStepMain) ); m_xMt_MainDateStep->save_value(); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_STEP_HELP,true, &pPoolItem) == SfxItemState::SET) - m_xCbxAutoStepHelp->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_LOGARITHM,true, &pPoolItem) == SfxItemState::SET) - m_xCbxLogarithm->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_REVERSE,true, &pPoolItem) == SfxItemState::SET) - m_xCbxReverse->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_STEP_HELP,true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pAutoStepHelpItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_STEP_HELP)) + m_xCbxAutoStepHelp->set_active(pAutoStepHelpItem->GetValue()); + if (const SfxBoolItem* pLogItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_LOGARITHM)) + m_xCbxLogarithm->set_active(pLogItem->GetValue()); + if (const SfxBoolItem* pReverseItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_REVERSE)) + m_xCbxReverse->set_active(pReverseItem->GetValue()); + if (const SfxInt32Item* pStepHelpItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_STEP_HELP)) { - nStepHelp = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + nStepHelp = pStepHelpItem->GetValue(); m_xMtStepHelp->set_value( nStepHelp ); m_xMtStepHelp->save_value(); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_ORIGIN,true, &pPoolItem) == SfxItemState::SET) - m_xCbxAutoOrigin->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_ORIGIN,true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pOriginItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_ORIGIN)) + m_xCbxAutoOrigin->set_active(pOriginItem->GetValue()); + if (const SvxDoubleItem* pOriginItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_ORIGIN)) { - fOrigin = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue(); + fOrigin = pOriginItem->GetValue(); lcl_setValue( *m_xFmtFldOrigin, fOrigin ); m_xFmtFldOrigin->save_value(); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,true, &pPoolItem) == SfxItemState::SET) - m_xCbx_AutoTimeResolution->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue()); - if (rInAttrs->GetItemState(SCHATTR_AXIS_TIME_RESOLUTION,true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pAutoTimeResItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_AUTO_TIME_RESOLUTION)) + m_xCbx_AutoTimeResolution->set_active(pAutoTimeResItem->GetValue()); + if (const SfxInt32Item* pTimeResItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_TIME_RESOLUTION)) { - m_nTimeResolution = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + m_nTimeResolution = pTimeResItem->GetValue(); m_xLB_TimeResolution->set_active( m_nTimeResolution ); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_MAIN_TIME_UNIT,true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pMainTimeUnitItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_MAIN_TIME_UNIT)) { - m_nMainTimeUnit = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + m_nMainTimeUnit = pMainTimeUnitItem->GetValue(); m_xLB_MainTimeUnit->set_active( m_nMainTimeUnit ); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_HELP_TIME_UNIT,true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pHelpTimeUnitItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_HELP_TIME_UNIT)) { - m_nHelpTimeUnit = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + m_nHelpTimeUnit = pHelpTimeUnitItem->GetValue(); m_xLB_HelpTimeUnit->set_active( m_nHelpTimeUnit ); } @@ -524,12 +524,12 @@ void ScaleTabPage::SetNumFormatter( SvNumberFormatter* pFormatter ) void ScaleTabPage::SetNumFormat() { - const SfxPoolItem *pPoolItem = nullptr; + const SfxUInt32Item *pNumFormatItem = GetItemSet().GetItemIfSet( SID_ATTR_NUMBERFORMAT_VALUE ); - if( GetItemSet().GetItemState( SID_ATTR_NUMBERFORMAT_VALUE, true, &pPoolItem ) != SfxItemState::SET ) + if( !pNumFormatItem ) return; - sal_uLong nFmt = static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue(); + sal_uInt32 nFmt = pNumFormatItem->GetValue(); Formatter& rFmtFldMax = m_xFmtFldMax->GetFormatter(); rFmtFldMax.SetFormatKey(nFmt); @@ -558,6 +558,12 @@ void ScaleTabPage::SetNumFormat() nFmt = pNumFormatter->GetStandardFormat( SvNumFormatType::TIME, pFormat->GetLanguage() ); else nFmt = pNumFormatter->GetStandardFormat( SvNumFormatType::TIME ); + + // tdf#141625 give enough space to see full date+time + int nWidestTime(m_xFmtFldMin->get_pixel_size(getWidestDateTime(Application::GetSettings().GetLocaleDataWrapper(), true)).Width()); + int nWidthChars = std::ceil(nWidestTime / m_xFmtFldMin->get_approximate_digit_width()) + 1; + m_xFmtFldMin->set_width_chars(nWidthChars); + m_xFmtFldMax->set_width_chars(nWidthChars); } if( m_nAxisType == chart2::AxisType::DATE && ( eType != SvNumFormatType::DATE && eType != SvNumFormatType::DATETIME) ) diff --git a/chart2/source/controller/dialogs/tp_SeriesToAxis.cxx b/chart2/source/controller/dialogs/tp_SeriesToAxis.cxx index 15976e89fea8..3ffbc3642e9c 100644 --- a/chart2/source/controller/dialogs/tp_SeriesToAxis.cxx +++ b/chart2/source/controller/dialogs/tp_SeriesToAxis.cxx @@ -113,13 +113,11 @@ bool SchOptionTabPage::FillItemSet(SfxItemSet* rOutAttrs) void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) { - const SfxPoolItem *pPoolItem = nullptr; - m_xRbtAxis1->set_active(true); m_xRbtAxis2->set_active(false); - if (rInAttrs->GetItemState(SCHATTR_AXIS,true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pAxisItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS)) { - tools::Long nVal=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + tools::Long nVal = pAxisItem->GetValue(); if(nVal==CHART_AXIS_SECONDARY_Y) { m_xRbtAxis2->set_active(true); @@ -128,34 +126,34 @@ void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) } tools::Long nTmp; - if (rInAttrs->GetItemState(SCHATTR_BAR_GAPWIDTH, true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pGapWidthItem = rInAttrs->GetItemIfSet(SCHATTR_BAR_GAPWIDTH)) { - nTmp = static_cast<tools::Long>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()); + nTmp = static_cast<tools::Long>(pGapWidthItem->GetValue()); m_xMTGap->set_value(nTmp, FieldUnit::PERCENT); } - if (rInAttrs->GetItemState(SCHATTR_BAR_OVERLAP, true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pOverlapItem = rInAttrs->GetItemIfSet(SCHATTR_BAR_OVERLAP)) { - nTmp = static_cast<tools::Long>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()); + nTmp = static_cast<tools::Long>(pOverlapItem->GetValue()); m_xMTOverlap->set_value(nTmp, FieldUnit::PERCENT); } - if (rInAttrs->GetItemState(SCHATTR_BAR_CONNECT, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pConnectItem = rInAttrs->GetItemIfSet(SCHATTR_BAR_CONNECT)) { - bool bCheck = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); + bool bCheck = pConnectItem->GetValue(); m_xCBConnect->set_active(bCheck); } - if (rInAttrs->GetItemState(SCHATTR_AXIS_FOR_ALL_SERIES, true, &pPoolItem) == SfxItemState::SET) + if (const SfxInt32Item* pAllSeriesItem = rInAttrs->GetItemIfSet(SCHATTR_AXIS_FOR_ALL_SERIES)) { - m_nAllSeriesAxisIndex = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue(); + m_nAllSeriesAxisIndex = pAllSeriesItem->GetValue(); m_xCBAxisSideBySide->set_sensitive(false); } - if (rInAttrs->GetItemState(SCHATTR_GROUP_BARS_PER_AXIS, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pPerAxisItem = rInAttrs->GetItemIfSet(SCHATTR_GROUP_BARS_PER_AXIS)) { // model property is "group bars per axis", UI feature is the other way // round: "show bars side by side" - bool bCheck = ! static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); + bool bCheck = ! pPerAxisItem->GetValue(); m_xCBAxisSideBySide->set_active( bCheck ); } else @@ -166,10 +164,12 @@ void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) //missing value treatment { std::vector< sal_Int32 > aMissingValueTreatments; - if( rInAttrs->GetItemState(SCHATTR_AVAILABLE_MISSING_VALUE_TREATMENTS, true, &pPoolItem) == SfxItemState::SET ) - aMissingValueTreatments = static_cast<const SfxIntegerListItem*>(pPoolItem)->GetList(); + if (const SfxIntegerListItem* pValueTreatmentsItem = rInAttrs->GetItemIfSet(SCHATTR_AVAILABLE_MISSING_VALUE_TREATMENTS)) + aMissingValueTreatments = pValueTreatmentsItem->GetList(); - if ( aMissingValueTreatments.size()>1 && rInAttrs->GetItemState(SCHATTR_MISSING_VALUE_TREATMENT,true, &pPoolItem) == SfxItemState::SET) + const SfxInt32Item* pMissingValueTreatmentItem; + if ( aMissingValueTreatments.size()>1 && + (pMissingValueTreatmentItem = rInAttrs->GetItemIfSet(SCHATTR_MISSING_VALUE_TREATMENT)) ) { m_xRB_DontPaint->set_sensitive(false); m_xRB_AssumeZero->set_sensitive(false); @@ -185,7 +185,7 @@ void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) m_xRB_ContinueLine->set_sensitive(true); } - tools::Long nVal=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + tools::Long nVal=pMissingValueTreatmentItem->GetValue(); if(nVal==css::chart::MissingValueTreatment::LEAVE_GAP) m_xRB_DontPaint->set_active(true); else if(nVal==css::chart::MissingValueTreatment::USE_ZERO) @@ -200,9 +200,9 @@ void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) } // Include hidden cells - if (rInAttrs->GetItemState(SCHATTR_INCLUDE_HIDDEN_CELLS, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pHiddenCellsItem = rInAttrs->GetItemIfSet(SCHATTR_INCLUDE_HIDDEN_CELLS)) { - bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + bool bVal = pHiddenCellsItem->GetValue(); m_xCBIncludeHiddenCells->set_active(bVal); } else @@ -215,9 +215,9 @@ void SchOptionTabPage::Reset(const SfxItemSet* rInAttrs) m_xGrpPlotOptions->hide(); } - if (rInAttrs->GetItemState(SCHATTR_HIDE_LEGEND_ENTRY, true, &pPoolItem) == SfxItemState::SET) + if (const SfxBoolItem* pEntryItem = rInAttrs->GetItemIfSet(SCHATTR_HIDE_LEGEND_ENTRY)) { - bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue(); + bool bVal = pEntryItem->GetValue(); m_xCBHideLegendEntry->set_active(bVal); } diff --git a/chart2/source/controller/dialogs/tp_TitleRotation.cxx b/chart2/source/controller/dialogs/tp_TitleRotation.cxx index ed99a9a39501..f3380042eb13 100644 --- a/chart2/source/controller/dialogs/tp_TitleRotation.cxx +++ b/chart2/source/controller/dialogs/tp_TitleRotation.cxx @@ -35,9 +35,8 @@ SchAlignmentTabPage::SchAlignmentTabPage(weld::Container* pPage, weld::DialogCon , m_xFtRotate(m_xBuilder->weld_label("degreeL")) , m_xNfRotate(m_xBuilder->weld_metric_spin_button("OrientDegree", FieldUnit::DEGREE)) , m_xCbStacked(m_xBuilder->weld_check_button("stackedCB")) - , m_xFtTextDirection(m_xBuilder->weld_label("textdirL")) , m_xFtABCD(m_xBuilder->weld_label("labelABCD")) - , m_xLbTextDirection(new TextDirectionListBox(m_xBuilder->weld_combo_box("textdirLB"))) + , m_aLbTextDirection(m_xBuilder->weld_combo_box("textdirLB")) , m_xCtrlDial(new svx::DialControl) , m_xCtrlDialWin(new weld::CustomWeld(*m_xBuilder, "dialCtrl", *m_xCtrlDial)) { @@ -72,7 +71,6 @@ SchAlignmentTabPage::~SchAlignmentTabPage() { m_xCtrlDialWin.reset(); m_xCtrlDial.reset(); - m_xLbTextDirection.reset(); } std::unique_ptr<SfxTabPage> SchAlignmentTabPage::Create(weld::Container* pPage, weld::DialogController* pController, @@ -96,7 +94,7 @@ bool SchAlignmentTabPage::FillItemSet(SfxItemSet* rOutAttrs) Degree100 nDegrees = bStacked ? 0_deg100 : m_xCtrlDial->GetRotation(); rOutAttrs->Put( SdrAngleItem( SCHATTR_TEXT_DEGREES, nDegrees ) ); - SvxFrameDirection aDirection( m_xLbTextDirection->get_active_id() ); + SvxFrameDirection aDirection( m_aLbTextDirection.get_active_id() ); rOutAttrs->Put( SvxFrameDirectionItem( aDirection, EE_PARA_WRITINGDIR ) ); return true; @@ -114,8 +112,8 @@ void SchAlignmentTabPage::Reset(const SfxItemSet* rInAttrs) m_xCbStacked->set_active(bStacked); StackedToggleHdl(*m_xCbStacked); - if( rInAttrs->GetItemState(EE_PARA_WRITINGDIR, true, &pItem) == SfxItemState::SET) - m_xLbTextDirection->set_active_id(static_cast<const SvxFrameDirectionItem*>(pItem)->GetValue()); + if( const SvxFrameDirectionItem* pDirectionItem = rInAttrs->GetItemIfSet(EE_PARA_WRITINGDIR) ) + m_aLbTextDirection.set_active_id(pDirectionItem->GetValue()); } } //namespace chart diff --git a/chart2/source/controller/dialogs/tp_TitleRotation.hxx b/chart2/source/controller/dialogs/tp_TitleRotation.hxx index b303e4d3596c..9d59b693f9a8 100644 --- a/chart2/source/controller/dialogs/tp_TitleRotation.hxx +++ b/chart2/source/controller/dialogs/tp_TitleRotation.hxx @@ -20,8 +20,8 @@ #include <sfx2/tabdlg.hxx> #include <svx/dialcontrol.hxx> +#include <TextDirectionListBox.hxx> -namespace chart { class TextDirectionListBox; } namespace weld { class CheckButton; class CustomWeld; @@ -39,9 +39,8 @@ private: std::unique_ptr<weld::Label> m_xFtRotate; std::unique_ptr<weld::MetricSpinButton> m_xNfRotate; std::unique_ptr<weld::CheckButton> m_xCbStacked; - std::unique_ptr<weld::Label> m_xFtTextDirection; std::unique_ptr<weld::Label> m_xFtABCD; - std::unique_ptr<TextDirectionListBox> m_xLbTextDirection; + TextDirectionListBox m_aLbTextDirection; std::unique_ptr<svx::DialControl> m_xCtrlDial; std::unique_ptr<weld::CustomWeld> m_xCtrlDialWin; diff --git a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx index 2719874fd66a..4e813b4593fa 100644 --- a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx +++ b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx @@ -20,13 +20,11 @@ #include "tp_Wizard_TitlesAndObjects.hxx" #include <res_Titles.hxx> #include <res_LegendPosition.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> #include <AxisHelper.hxx> #include <ControllerLockGuard.hxx> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> +#include <utility> namespace chart { @@ -34,12 +32,12 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; TitlesAndObjectsTabPage::TitlesAndObjectsTabPage(weld::Container* pPage, weld::DialogController* pController, - const rtl::Reference<::chart::ChartModel>& xChartModel, + rtl::Reference<::chart::ChartModel> xChartModel, const uno::Reference< uno::XComponentContext >& xContext ) : OWizardPage(pPage, pController, "modules/schart/ui/wizelementspage.ui", "WizElementsPage") , m_xTitleResources(new TitleResources(*m_xBuilder, false)) , m_xLegendPositionResources(new LegendPositionResources(*m_xBuilder, xContext)) - , m_xChartModel(xChartModel) + , m_xChartModel(std::move(xChartModel)) , m_xCC(xContext) , m_bCommitToModel(true) , m_aTimerTriggeredControllerLock( m_xChartModel ) @@ -77,7 +75,7 @@ void TitlesAndObjectsTabPage::initializePage() //init grid checkboxes { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( m_xChartModel ); + rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram(); uno::Sequence< sal_Bool > aPossibilityList; uno::Sequence< sal_Bool > aExistenceList; AxisHelper::getAxisOrGridPossibilities( aPossibilityList, xDiagram, false ); @@ -122,7 +120,7 @@ void TitlesAndObjectsTabPage::commitToModel() //commit grid changes to model { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel ); + rtl::Reference< Diagram > xDiagram = xModel->getFirstChartDiagram(); uno::Sequence< sal_Bool > aOldExistenceList; AxisHelper::getAxisOrGridExistence( aOldExistenceList, xDiagram, false ); uno::Sequence< sal_Bool > aNewExistenceList(aOldExistenceList); diff --git a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hxx b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hxx index f06a3e7ec589..d2c30d8b4363 100644 --- a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hxx +++ b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.hxx @@ -39,7 +39,7 @@ class TitlesAndObjectsTabPage final : public vcl::OWizardPage { public: TitlesAndObjectsTabPage(weld::Container* pPage, weld::DialogController* pController, - const rtl::Reference<::chart::ChartModel>& xChartModel, + rtl::Reference<::chart::ChartModel> xChartModel, const css::uno::Reference< css::uno::XComponentContext >& xContext); virtual ~TitlesAndObjectsTabPage() override; diff --git a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx index 3918a296e638..74be51a5ee11 100644 --- a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx +++ b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx @@ -19,9 +19,10 @@ #include <DrawViewWrapper.hxx> #include <chartview/DrawModelWrapper.hxx> -#include <ConfigurationAccess.hxx> #include <unotools/lingucfg.hxx> +#include <unotools/syslocale.hxx> +#include <unotools/localedatawrapper.hxx> #include <editeng/eeitem.hxx> #include <editeng/langitem.hxx> #include <svl/intitem.hxx> @@ -35,11 +36,12 @@ #include <editeng/fhgtitem.hxx> #include <osl/diagnose.h> -#include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/drawing/XShape.hpp> #include <sfx2/objsh.hxx> +#include <sfx2/viewsh.hxx> #include <svx/helperhittest3d.hxx> +#include <officecfg/Office/Calc.hxx> using namespace ::com::sun::star; @@ -79,7 +81,6 @@ DrawViewWrapper::DrawViewWrapper( { SetBufferedOutputAllowed(true); SetBufferedOverlayAllowed(true); - SetPagePaintingAllowed(true); // #i12587# support for shapes in chart SdrOutliner* pOutliner = getOutliner(); @@ -89,12 +90,12 @@ DrawViewWrapper::DrawViewWrapper( SvtLinguConfig aLinguConfig; SvtLinguOptions aLinguOptions; aLinguConfig.GetOptions( aLinguOptions ); - pOutlinerPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage, EE_CHAR_LANGUAGE ) ); - pOutlinerPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage_CJK, EE_CHAR_LANGUAGE_CJK ) ); - pOutlinerPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage_CTL, EE_CHAR_LANGUAGE_CTL ) ); + pOutlinerPool->SetUserDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage, EE_CHAR_LANGUAGE ) ); + pOutlinerPool->SetUserDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage_CJK, EE_CHAR_LANGUAGE_CJK ) ); + pOutlinerPool->SetUserDefaultItem( SvxLanguageItem( aLinguOptions.nDefaultLanguage_CTL, EE_CHAR_LANGUAGE_CTL ) ); // set font height without changing SdrEngineDefaults - pOutlinerPool->SetPoolDefaultItem( SvxFontHeightItem( 423, 100, EE_CHAR_FONTHEIGHT ) ); // 12pt + pOutlinerPool->SetUserDefaultItem( SvxFontHeightItem( 423, 100, EE_CHAR_FONTHEIGHT ) ); // 12pt } // #i121463# Use big handles by default @@ -122,7 +123,7 @@ void DrawViewWrapper::ReInit() tools::Rectangle aRect(Point(0,0), aOutputSize); SetWorkArea(aRect); - ShowSdrPage(GetModel()->GetPage(0)); + ShowSdrPage(GetModel().GetPage(0)); } DrawViewWrapper::~DrawViewWrapper() @@ -168,7 +169,7 @@ SdrObject* DrawViewWrapper::getHitObject( const Point& rPnt ) const //3d objects need a special treatment //because the simple PickObj method is not accurate in this case for performance reasons - E3dObject* pE3d = dynamic_cast< E3dObject* >(pRet); + E3dObject* pE3d = DynCastE3dObject(pRet); if( pE3d ) { E3dScene* pScene(pE3d->getRootE3dSceneFromE3dObject()); @@ -211,10 +212,23 @@ void DrawViewWrapper::setMarkHandleProvider( MarkHandleProvider* pMarkHandleProv void DrawViewWrapper::CompleteRedraw(OutputDevice* pOut, const vcl::Region& rReg, sdr::contact::ViewObjectContactRedirector* /* pRedirector */) { - svtools::ColorConfig aColorConfig; - Color aFillColor( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor ); + Color aFillColor; + if (const SfxViewShell* pViewShell = SfxViewShell::Current()) + aFillColor = pViewShell->GetColorConfigColor(svtools::DOCCOLOR); + else + { + svtools::ColorConfig aColorConfig; + aFillColor = aColorConfig.GetColorValue(svtools::DOCCOLOR).nColor; + } SetApplicationBackgroundColor(aFillColor); + + SdrOutliner& rOutliner = GetModel().GetDrawOutliner(); + Color aOldBackColor = rOutliner.GetBackgroundColor(); + rOutliner.SetBackgroundColor(aFillColor); + E3dView::CompleteRedraw( pOut, rReg ); + + rOutliner.SetBackgroundColor(aOldBackColor); } SdrObject* DrawViewWrapper::getSelectedObject() const @@ -255,8 +269,16 @@ SdrOutliner* DrawViewWrapper::getOutliner() const SfxItemSet DrawViewWrapper::getPositionAndSizeItemSetFromMarkedObject() const { + SvtSysLocale aSysLocale; + MeasurementSystem eSys = aSysLocale.GetLocaleData().getMeasurementSystemEnum(); + sal_uInt16 nAttrMetric; + if( eSys == MeasurementSystem::Metric ) + nAttrMetric = officecfg::Office::Calc::Layout::Other::MeasureUnit::Metric::get(); + else + nAttrMetric = officecfg::Office::Calc::Layout::Other::MeasureUnit::NonMetric::get(); + SfxItemSet aFullSet( - GetModel()->GetItemPool(), + GetModel().GetItemPool(), svl::Items< SDRATTR_CORNER_RADIUS, SDRATTR_CORNER_RADIUS, SID_ATTR_TRANSFORM_POS_X, SID_ATTR_TRANSFORM_ANGLE, @@ -264,7 +286,7 @@ SfxItemSet DrawViewWrapper::getPositionAndSizeItemSetFromMarkedObject() const SID_ATTR_METRIC, SID_ATTR_METRIC>); SfxItemSet aGeoSet( E3dView::GetGeoAttrFromMarked() ); aFullSet.Put( aGeoSet ); - aFullSet.Put( SfxUInt16Item(SID_ATTR_METRIC,static_cast< sal_uInt16 >( ConfigurationAccess::getFieldUnit()))); + aFullSet.Put( SfxUInt16Item(SID_ATTR_METRIC, nAttrMetric) ); return aFullSet; } @@ -293,8 +315,8 @@ bool DrawViewWrapper::IsObjectHit( SdrObject const * pObj, const Point& rPnt ) void DrawViewWrapper::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) { //prevent wrong reselection of objects - SdrModel* pSdrModel( GetModel() ); - if( pSdrModel && pSdrModel->isLocked() ) + SdrModel& rSdrModel = GetModel(); + if (rSdrModel.isLocked()) return; const SdrHint* pSdrHint = ( rHint.GetId() == SfxHintId::ThisIsAnSdrHint ? static_cast<const SdrHint*>(&rHint) : nullptr ); diff --git a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx index 77099c9444fe..51b163d1fccd 100644 --- a/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx +++ b/chart2/source/controller/drawinglayer/ViewElementListProvider.cxx @@ -26,14 +26,13 @@ #include <com/sun/star/drawing/Direction3D.hpp> #include <o3tl/safeint.hxx> #include <svx/xtable.hxx> -#include <svl/itempool.hxx> #include <svtools/ctrltool.hxx> #include <vcl/svapp.hxx> #include <svx/svdobj.hxx> #include <vcl/virdev.hxx> #include <svx/svdview.hxx> #include <svx/svdpage.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { @@ -110,10 +109,6 @@ SdrObjList* ViewElementListProvider::GetSymbolList() const { //@todo use mutex - //get shape factory - uno::Reference<lang::XMultiServiceFactory> xShapeFactory( - m_pDrawModelWrapper->getShapeFactory()); - //get hidden draw page (target): rtl::Reference<SvxDrawPage> xTarget = m_pDrawModelWrapper->getHiddenDrawPage(); @@ -143,7 +138,7 @@ Graphic ViewElementListProvider::GetSymbolGraphic( sal_Int32 nStandardSymbol, co nStandardSymbol*=-1; if( o3tl::make_unsigned(nStandardSymbol) >= pSymbolList->GetObjCount() ) nStandardSymbol %= pSymbolList->GetObjCount(); - SdrObject* pObj = pSymbolList->GetObj(nStandardSymbol); + rtl::Reference<SdrObject> pObj = pSymbolList->GetObj(nStandardSymbol); ScopedVclPtrInstance< VirtualDevice > pVDev; pVDev->SetMapMode(MapMode(MapUnit::Map100thMM)); @@ -151,7 +146,6 @@ Graphic ViewElementListProvider::GetSymbolGraphic( sal_Int32 nStandardSymbol, co std::unique_ptr<SdrModel> pModel( new SdrModel()); - pModel->GetItemPool().FreezeIdRanges(); rtl::Reference<SdrPage> pPage = new SdrPage( *pModel, false ); pPage->SetSize(Size(1000,1000)); pModel->InsertPage( pPage.get(), 0 ); @@ -162,8 +156,8 @@ Graphic ViewElementListProvider::GetSymbolGraphic( sal_Int32 nStandardSymbol, co // directly clone to target SdrModel pObj = pObj->CloneSdrObject(*pModel); - pPage->NbcInsertObject(pObj); - aView.MarkObj(pObj,pPageView); + pPage->NbcInsertObject(pObj.get()); + aView.MarkObj(pObj.get(),pPageView); if( pSymbolShapeProperties ) pObj->SetMergedItemSet(*pSymbolShapeProperties); @@ -176,7 +170,9 @@ Graphic ViewElementListProvider::GetSymbolGraphic( sal_Int32 nStandardSymbol, co aView.UnmarkAll(); pObj=pPage->RemoveObject(0); - SdrObject::Free( pObj ); + // these need to die before the associated SdrModel + pObj.clear(); + pPage.clear(); return aGraph; } diff --git a/chart2/source/controller/inc/AccessibleBase.hxx b/chart2/source/controller/inc/AccessibleBase.hxx index 4bd51c342678..b7ccbac900da 100644 --- a/chart2/source/controller/inc/AccessibleBase.hxx +++ b/chart2/source/controller/inc/AccessibleBase.hxx @@ -29,7 +29,6 @@ #include <comphelper/accessibleeventnotifier.hxx> #include <cppuhelper/basemutex.hxx> #include <cppuhelper/compbase.hxx> -#include <rtl/ref.hxx> #include <tools/color.hxx> #include <unotools/weakref.hxx> @@ -40,7 +39,6 @@ namespace com::sun::star::awt { class XWindow; } namespace com::sun::star::chart2 { class XChartDocument; } namespace com::sun::star::view { class XSelectionSupplier; } -namespace utl { class AccessibleStateSetHelper; } class SdrView; @@ -54,7 +52,9 @@ namespace chart { class AccessibleBase; +class ChartView; class ObjectHierarchy; +class ChartController; typedef ObjectIdentifier AccessibleUniqueId; @@ -63,8 +63,8 @@ struct AccessibleElementInfo AccessibleUniqueId m_aOID; unotools::WeakReference< ::chart::ChartModel > m_xChartDocument; - css::uno::WeakReference< css::view::XSelectionSupplier > m_xSelectionSupplier; - css::uno::WeakReference< css::uno::XInterface > m_xView; + unotools::WeakReference< ::chart::ChartController > m_xChartController; + unotools::WeakReference< ::chart::ChartView > m_xView; css::uno::WeakReference< css::awt::XWindow > m_xWindow; std::shared_ptr< ObjectHierarchy > m_spObjectHierarchy; @@ -99,7 +99,7 @@ public: LOST_SELECTION }; - AccessibleBase( const AccessibleElementInfo & rAccInfo, + AccessibleBase( AccessibleElementInfo aAccInfo, bool bMayHaveChildren, bool bAlwaysTransparent ); virtual ~AccessibleBase() override; @@ -135,14 +135,14 @@ protected: @throws css::uno::RuntimeException */ - void AddState( sal_Int16 aState ); + void AddState( sal_Int64 aState ); /** Removes a state from the set if the set contains the state, otherwise nothing is done. @throws css::uno::RuntimeException */ - void RemoveState( sal_Int16 aState ); + void RemoveState( sal_Int64 aState ); /** has to be overridden by derived classes that support child elements. With this method a rescan is initiated that should result in a correct @@ -185,14 +185,10 @@ protected: /** This method creates an AccessibleEventObject and sends it to all listeners that are currently listening to this object - - If bSendGlobally is true, the event is also broadcast via - vcl::unohelper::NotifyAccessibleStateEventGlobally() */ void BroadcastAccEvent( sal_Int16 nId, const css::uno::Any & rNew, - const css::uno::Any & rOld, - bool bSendGlobally = false ) const; + const css::uno::Any & rOld ) const; /** Removes all children from the internal lists and broadcasts child remove events. @@ -209,14 +205,14 @@ protected: @throws css::uno::RuntimeException */ virtual css::uno::Reference< css::accessibility::XAccessible > - ImplGetAccessibleChildById( sal_Int32 i ) const; + ImplGetAccessibleChildById( sal_Int64 i ) const; /** Is called from getAccessibleChildCount(). Before this method is called, an update of children is done if necessary. @throws css::uno::RuntimeException */ - virtual sal_Int32 ImplGetAccessibleChildCount() const; + virtual sal_Int64 ImplGetAccessibleChildCount() const; const AccessibleElementInfo& GetInfo() const { return m_aAccInfo;} void SetInfo( const AccessibleElementInfo & rNewInfo ); @@ -229,12 +225,12 @@ protected: virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override; // ________ XAccessibleContext ________ - virtual sal_Int32 SAL_CALL getAccessibleChildCount() override; + virtual sal_Int64 SAL_CALL getAccessibleChildCount() override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL - getAccessibleChild( sal_Int32 i ) override; + getAccessibleChild( sal_Int64 i ) override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override; - virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override; + virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override; /// @return AccessibleRole.SHAPE virtual sal_Int16 SAL_CALL getAccessibleRole() override; // has to be implemented by derived classes @@ -242,8 +238,7 @@ protected: // throw (css::uno::RuntimeException); virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override; - virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL - getAccessibleStateSet() override; + virtual sal_Int64 SAL_CALL getAccessibleStateSet() override; virtual css::lang::Locale SAL_CALL getLocale() override; // has to be implemented by derived classes // virtual OUString SAL_CALL getAccessibleDescription() @@ -305,11 +300,9 @@ private: ::comphelper::AccessibleEventNotifier::TClientId m_nEventNotifierId; - /** Implementation helper for getAccessibleStateSet() - - Note: This member must come before m_aStateSet! + /** for getAccessibleStateSet() */ - rtl::Reference<::utl::AccessibleStateSetHelper> m_xStateSetHelper; + sal_Int64 m_nStateSet; AccessibleElementInfo m_aAccInfo; const bool m_bAlwaysTransparent; diff --git a/chart2/source/controller/inc/AccessibleChartView.hxx b/chart2/source/controller/inc/AccessibleChartView.hxx index eb3367b205d6..793cdd69ab77 100644 --- a/chart2/source/controller/inc/AccessibleChartView.hxx +++ b/chart2/source/controller/inc/AccessibleChartView.hxx @@ -38,12 +38,12 @@ class IAccessibleViewForwarder; namespace chart { +class ChartView; namespace impl { typedef ::cppu::ImplInheritanceHelper< ::chart::AccessibleBase, - css::lang::XInitialization, css::view::XSelectionChangeListener > AccessibleChartView_Base; } @@ -52,7 +52,7 @@ class AccessibleChartView final : public impl::AccessibleChartView_Base { public: - AccessibleChartView(SdrView* pView ); + AccessibleChartView( SdrView* pView ); virtual ~AccessibleChartView() override; AccessibleChartView() = delete; @@ -60,15 +60,19 @@ public: // ____ WeakComponentHelper (called from XComponent::dispose()) ____ using AccessibleBase::disposing; - // ____ lang::XInitialization ____ // 0: view::XSelectionSupplier offers notifications for selection changes and access to the selection itself // 1: frame::XModel representing the chart model - offers access to object data // 2: lang::XInterface representing the normal chart view - offers access to some extra object data // 3: accessibility::XAccessible representing the parent accessible // 4: awt::XWindow representing the view's window (is a vcl Window) // all arguments are only valid until next initialization - don't keep them longer - virtual void SAL_CALL initialize( - const css::uno::Sequence< css::uno::Any >& aArguments ) override; + void initialize( ChartController& rChartController, + const rtl::Reference<::chart::ChartModel>& xChartModel, + const rtl::Reference<::chart::ChartView>& xChartView, + const css::uno::Reference< css::accessibility::XAccessible >& xParent, + const css::uno::Reference<css::awt::XWindow>& xViewWindow ); + // used to disconnect from view + void initialize(); // ____ view::XSelectionChangeListener ____ virtual void SAL_CALL selectionChanged( const css::lang::EventObject& aEvent ) override; @@ -79,7 +83,7 @@ public: // ________ XAccessibleContext ________ virtual OUString SAL_CALL getAccessibleDescription() override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override; - virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override; + virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override; virtual OUString SAL_CALL getAccessibleName() override; virtual sal_Int16 SAL_CALL getAccessibleRole() override; @@ -101,9 +105,9 @@ private: // methods css::awt::Rectangle GetWindowPosSize() const; private: // members - css::uno::WeakReference< css::view::XSelectionSupplier > m_xSelectionSupplier; - unotools::WeakReference<::chart::ChartModel> m_xChartModel; - css::uno::WeakReference< css::uno::XInterface > m_xChartView; + unotools::WeakReference< ::chart::ChartController > m_xChartController; + unotools::WeakReference< ::chart::ChartModel > m_xChartModel; + unotools::WeakReference< ChartView > m_xChartView; css::uno::WeakReference< css::awt::XWindow > m_xWindow; css::uno::WeakReference< css::accessibility::XAccessible > m_xParent; diff --git a/chart2/source/controller/inc/AccessibleTextHelper.hxx b/chart2/source/controller/inc/AccessibleTextHelper.hxx index 075fbf0f9709..85fcb83dc3e4 100644 --- a/chart2/source/controller/inc/AccessibleTextHelper.hxx +++ b/chart2/source/controller/inc/AccessibleTextHelper.hxx @@ -18,16 +18,11 @@ */ #pragma once -#include <memory> #include <comphelper/compbase.hxx> -#include <com/sun/star/lang/XInitialization.hpp> +#include <svx/AccessibleTextHelper.hxx> #include <com/sun/star/accessibility/XAccessibleContext.hpp> +#include <com/sun/star/awt/XWindow.hpp> -// forward declaration of helper class from svx -namespace accessibility -{ -class AccessibleTextHelper; -} namespace chart { @@ -37,7 +32,6 @@ class DrawViewWrapper; namespace impl { typedef comphelper::WeakComponentImplHelper< - css::lang::XInitialization, css::accessibility::XAccessibleContext > AccessibleTextHelper_Base; } @@ -49,7 +43,6 @@ public: explicit AccessibleTextHelper( DrawViewWrapper * pDrawViewWrapper ); virtual ~AccessibleTextHelper() override; - // ____ XInitialization ____ /** Must be called at least once for this helper class to work. mandatory parameter 0: type string. This is the CID that is used to find @@ -62,24 +55,25 @@ public: mandatory parameter 2: type awt::XWindow. The Window that shows the text currently. */ - virtual void SAL_CALL initialize( - const css::uno::Sequence< css::uno::Any >& aArguments ) override; + void initialize(const OUString& aCID, + const css::uno::Reference< css::accessibility::XAccessible >& xEventSource, + const css::uno::Reference< css::awt::XWindow >& xWindow ); // ____ XAccessibleContext ____ - virtual ::sal_Int32 SAL_CALL getAccessibleChildCount() override; + virtual sal_Int64 SAL_CALL getAccessibleChildCount() override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( - ::sal_Int32 i ) override; + sal_Int64 i ) override; virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override; - virtual ::sal_Int32 SAL_CALL getAccessibleIndexInParent() override; + virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override; virtual ::sal_Int16 SAL_CALL getAccessibleRole() override; virtual OUString SAL_CALL getAccessibleDescription() override; virtual OUString SAL_CALL getAccessibleName() override; virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override; - virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override; + virtual sal_Int64 SAL_CALL getAccessibleStateSet() override; virtual css::lang::Locale SAL_CALL getLocale() override; private: - std::unique_ptr<::accessibility::AccessibleTextHelper> m_pTextHelper; + std::optional<::accessibility::AccessibleTextHelper> m_oTextHelper; DrawViewWrapper * m_pDrawViewWrapper; }; diff --git a/chart2/source/controller/inc/AxisItemConverter.hxx b/chart2/source/controller/inc/AxisItemConverter.hxx index cbb75d2a1db6..c14ef82bd595 100644 --- a/chart2/source/controller/inc/AxisItemConverter.hxx +++ b/chart2/source/controller/inc/AxisItemConverter.hxx @@ -19,14 +19,16 @@ #pragma once #include "ItemConverter.hxx" +#include <com/sun/star/awt/Size.hpp> #include <rtl/ref.hxx> +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::beans { class XPropertySet; } namespace com::sun::star::chart2 { class XAxis; } namespace com::sun::star::chart2 { class XChartDocument; } +namespace chart { class Axis; } namespace chart { struct ExplicitIncrementData; } namespace chart { struct ExplicitScaleData; } namespace chart { class ChartModel; } @@ -44,7 +46,7 @@ public: const rtl::Reference<::chart::ChartModel> & xChartDoc, ExplicitScaleData const * pScale, ExplicitIncrementData const * pIncrement, - const css::awt::Size* pRefSize ); + const std::optional<css::awt::Size>& pRefSize ); virtual ~AxisItemConverter() override; @@ -60,8 +62,7 @@ protected: private: std::vector< std::unique_ptr<ItemConverter> > m_aConverters; - css::uno::Reference< - css::chart2::XAxis > m_xAxis; + rtl::Reference<::chart::Axis> m_xAxis; rtl::Reference<::chart::ChartModel>m_xChartDoc; diff --git a/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx b/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx index 96138e237230..65ff58ea45ab 100644 --- a/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx +++ b/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx @@ -35,8 +35,8 @@ public: CharacterPropertyItemConverter( const css::uno::Reference<css::beans::XPropertySet>& rPropertySet, SfxItemPool& rItemPool, - const css::awt::Size* pRefSize, - const OUString & rRefSizePropertyName, + const std::optional<css::awt::Size>& pRefSize, + OUString aRefSizePropertyName, const css::uno::Reference<css::beans::XPropertySet>& rRefSizePropSet = css::uno::Reference<css::beans::XPropertySet>() ); virtual ~CharacterPropertyItemConverter() override; diff --git a/chart2/source/controller/inc/ChartController.hxx b/chart2/source/controller/inc/ChartController.hxx index d50800fd67ad..737d0cf3768f 100644 --- a/chart2/source/controller/inc/ChartController.hxx +++ b/chart2/source/controller/inc/ChartController.hxx @@ -19,6 +19,7 @@ #pragma once #include <LifeTime.hxx> +#include <ReferenceSizeProvider.hxx> #include "CommandDispatchContainer.hxx" #include "SelectionHelper.hxx" @@ -34,10 +35,9 @@ #include <com/sun/star/util/XModeChangeListener.hpp> #include <com/sun/star/util/XCloseListener.hpp> #include <com/sun/star/util/XModifyListener.hpp> -#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/frame/XController2.hpp> #include <com/sun/star/frame/XLayoutManagerListener.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <memory> #include <string_view> @@ -61,7 +61,6 @@ namespace com::sun::star::uno { class XComponentContext; } namespace com::sun::star::util { class XCloseable; } namespace com::sun::star::view { class XSelectionSupplier; } - class SdrModel; namespace svt @@ -83,26 +82,27 @@ namespace chart { class UndoGuard; +class ChartView; class ChartWindow; class DrawModelWrapper; class DrawViewWrapper; -class ReferenceSizeProvider; +class ViewElementListProvider; class ViewElementListProvider; class Diagram; +class AccessibleChartView; +class AccessibleTextHelper; enum ChartDrawMode { CHARTDRAW_INSERT, CHARTDRAW_SELECT }; class ChartController final : public ::cppu::WeakImplHelper < - css::frame::XController //comprehends XComponent (required interface) + css::frame::XController2 //comprehends XComponent (css::frame::XController is required interface) ,css::frame::XDispatchProvider //(required interface) ,css::view::XSelectionSupplier //(optional interface) ,css::ui::XContextMenuInterception //(optional interface) ,css::util::XCloseListener //(needed for communication with XModel) - ,css::lang::XServiceInfo ,css::frame::XDispatch ,css::awt::XWindow //this is the Window Controller part of this Controller, that will be given to a Frame via setComponent - ,css::lang::XMultiServiceFactory ,css::util::XModifyListener ,css::util::XModeChangeListener ,css::frame::XLayoutManagerListener @@ -110,16 +110,11 @@ class ChartController final : public ::cppu::WeakImplHelper < { public: ChartController() = delete; - explicit ChartController(css::uno::Reference< css::uno::XComponentContext > const & xContext); + explicit ChartController(css::uno::Reference< css::uno::XComponentContext > xContext); virtual ~ChartController() override; OUString GetContextName(); - // css::lang::XServiceInfo - virtual OUString SAL_CALL getImplementationName() override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; - // css::frame::XController (required interface) virtual void SAL_CALL attachFrame( const css::uno::Reference< css::frame::XFrame > & xFrame ) override; @@ -142,6 +137,12 @@ public: virtual sal_Bool SAL_CALL suspend( sal_Bool bSuspend ) override; + // css::frame::XController2 + virtual css::uno::Reference<css::awt::XWindow> SAL_CALL getComponentWindow() override; + virtual OUString SAL_CALL getViewControllerName() override; + virtual css::uno::Sequence<css::beans::PropertyValue> SAL_CALL getCreationArguments() override; + virtual css::uno::Reference<css::ui::XSidebarProvider> SAL_CALL getSidebar() override; + // css::lang::XComponent (base of XController) virtual void SAL_CALL dispose() override; @@ -262,16 +263,6 @@ public: virtual void SAL_CALL removePaintListener( const css::uno::Reference< css::awt::XPaintListener >& xListener ) override; - // css::lang XMultiServiceFactory - virtual css::uno::Reference< css::uno::XInterface > SAL_CALL - createInstance( const OUString& aServiceSpecifier ) override; - virtual css::uno::Reference< css::uno::XInterface > SAL_CALL - createInstanceWithArguments( const OUString& ServiceSpecifier, - const css::uno::Sequence< - css::uno::Any >& Arguments ) override; - virtual css::uno::Sequence< OUString > SAL_CALL - getAvailableServiceNames() override; - // css::util::XModifyListener virtual void SAL_CALL modified( const css::lang::EventObject& aEvent ) override; @@ -318,11 +309,21 @@ public: css::uno::Reference< css::accessibility::XAccessible > CreateAccessible(); + /** Creates a helper accessibility class that must be initialized via initialize(). For + parameters see + + The returned object should not be used directly. Instead a proxy object + should use this helper to retrieve its children and add them to its own + children. + */ + rtl::Reference< ::chart::AccessibleTextHelper > createAccessibleTextContext(); + static bool isObjectDeleteable( const css::uno::Any& rSelection ); void setDrawMode( ChartDrawMode eMode ) { m_eDrawMode = eMode; } bool isShapeContext() const; + bool IsTextEdit() const; ViewElementListProvider getViewElementListProvider(); DrawModelWrapper* GetDrawModelWrapper(); @@ -335,7 +336,7 @@ public: void NotifyUndoActionHdl( std::unique_ptr<SdrUndoAction> ); - css::uno::Reference<css::uno::XInterface> const & getChartView() const; + rtl::Reference<::chart::ChartView> const & getChartView() const { return m_xChartView; } rtl::Reference<::chart::ChartModel> getChartModel(); rtl::Reference<::chart::Diagram> getFirstDiagram(); @@ -344,7 +345,7 @@ private: class TheModel : public salhelper::SimpleReferenceObject { public: - explicit TheModel( const rtl::Reference<::chart::ChartModel> & xModel ); + explicit TheModel( rtl::Reference<::chart::ChartModel> xModel ); virtual ~TheModel() override; @@ -389,7 +390,7 @@ private: //view css::uno::Reference<css::awt::XWindow> m_xViewWindow; - css::uno::Reference<css::uno::XInterface> m_xChartView; + rtl::Reference<::chart::ChartView> m_xChartView; std::shared_ptr< DrawModelWrapper > m_pDrawModelWrapper; std::unique_ptr<DrawViewWrapper> m_pDrawViewWrapper; @@ -420,7 +421,7 @@ private: rtl::Reference<svx::sidebar::SelectionChangeHandler> mpSelectionChangeHandler; bool impl_isDisposedOrSuspended() const; - std::unique_ptr<ReferenceSizeProvider> impl_createReferenceSizeProvider(); + ReferenceSizeProvider impl_createReferenceSizeProvider(); void impl_adaptDataSeriesAutoResize(); void impl_createDrawViewController(); @@ -430,7 +431,7 @@ private: void executeDispatch_ObjectProperties(); void executeDispatch_FormatObject( std::u16string_view rDispatchCommand ); void executeDlg_ObjectProperties( const OUString& rObjectCID ); - bool executeDlg_ObjectProperties_withoutUndoGuard( const OUString& rObjectCID, bool bSuccessOnUnchanged ); + void executeDlg_ObjectProperties_withUndoGuard( std::shared_ptr<UndoGuard> aUndoGuard, const OUString& rObjectCID, bool bSuccessOnUnchanged ); void executeDispatch_ChartType(); @@ -441,6 +442,10 @@ private: void executeDispatch_InsertAxes(); void executeDispatch_InsertGrid(); + void executeDispatch_InsertDataTable(); + void executeDispatch_DeleteDataTable(); + void executeDispatch_OpenInsertDataTableDialog(); + void executeDispatch_InsertMenu_DataLabels(); void executeDispatch_InsertMenu_Trendlines(); void executeDispatch_InsertMenu_MeanValues(); @@ -480,6 +485,8 @@ private: void executeDispatch_MoveSeries( bool bForward ); bool EndTextEdit(); + css::uno::Sequence< css::uno::Reference<css::chart2::XFormattedString >> GetFormattedTitle( + const EditTextObject& aEdit, const css::uno::Reference< css::drawing::XShape >& xShape ); void executeDispatch_View3D(); void executeDispatch_PositionAndSize( const ::css::uno::Sequence< ::css::beans::PropertyValue >* pArgs = nullptr ); @@ -500,17 +507,17 @@ private: void executeDispatch_LOKSetTextSelection(int nType, int nX, int nY); void executeDispatch_LOKPieSegmentDragging(int nOffset); void executeDispatch_FillColor(sal_uInt32 nColor); - void executeDispatch_FillGradient(OUString sJSONGradient); + void executeDispatch_FillGradient(std::u16string_view sJSONGradient); void executeDispatch_LineColor(sal_uInt32 nColor); void executeDispatch_LineWidth(sal_uInt32 nWidth); - void sendPopupRequest(OUString const & rCID, tools::Rectangle aRectangle); + void sendPopupRequest(std::u16string_view rCID, tools::Rectangle aRectangle); void impl_ShapeControllerDispatch( const css::util::URL& rURL, const css::uno::Sequence< css::beans::PropertyValue >& rArgs ); DECL_LINK( DoubleClickWaitingHdl, Timer*, void ); - void execute_DoubleClick( const Point* pMousePixel ); + void execute_DoubleClick( const Point* pMousePixel, bool &bEditText ); void startDoubleClickWaiting(); void stopDoubleClickWaiting(); @@ -518,7 +525,7 @@ private: void impl_notifySelectionChangeListeners(); void impl_invalidateAccessible(); void impl_initializeAccessible(); - void impl_initializeAccessible( const css::uno::Reference< css::lang::XInitialization >& xInit ); + void impl_initializeAccessible( AccessibleChartView& xInit ); //sets the model member to null if it equals the parameter //returns true if successful @@ -532,20 +539,10 @@ private: /// @return </sal_True>, if resize/move was successful bool impl_moveOrResizeObject( const OUString & rCID, eMoveOrResizeType eType, double fAmountLogicX, double fAmountLogicY ); - bool impl_DragDataPoint( const OUString & rCID, double fOffset ); + bool impl_DragDataPoint( std::u16string_view rCID, double fOffset ); static const o3tl::sorted_vector< OUString >& impl_getAvailableCommands(); - /** Creates a helper accessibility class that must be initialized via XInitialization. For - parameters see - - The returned object should not be used directly. Instead a proxy object - should use this helper to retrieve its children and add them to its own - children. - */ - css::uno::Reference< css::accessibility::XAccessibleContext > - impl_createAccessibleTextContext(); - void impl_PasteGraphic( css::uno::Reference< css::graphic::XGraphic > const & xGraphic, const ::Point & aPosition ); void impl_PasteShapes( SdrModel* pModel ); diff --git a/chart2/source/controller/inc/ChartDocumentWrapper.hxx b/chart2/source/controller/inc/ChartDocumentWrapper.hxx index 04f76d705b6b..a5bded3c8fb7 100644 --- a/chart2/source/controller/inc/ChartDocumentWrapper.hxx +++ b/chart2/source/controller/inc/ChartDocumentWrapper.hxx @@ -139,6 +139,10 @@ protected: virtual std::vector< std::unique_ptr<WrappedProperty> > createWrappedProperties() override; virtual css::uno::Reference< css::beans::XPropertySet > getInnerPropertySet() override; + // ____ XPropertySet ____ + virtual void SAL_CALL setPropertyValue(const OUString& rPropertyName, + const css::uno::Any& rValue) override; + private: //methods void impl_resetAddIn(); diff --git a/chart2/source/controller/inc/ChartWindow.hxx b/chart2/source/controller/inc/ChartWindow.hxx index 4ab65ddd959e..918805cb3a8a 100644 --- a/chart2/source/controller/inc/ChartWindow.hxx +++ b/chart2/source/controller/inc/ChartWindow.hxx @@ -53,15 +53,8 @@ public: virtual void DataChanged( const DataChangedEvent& rDCEvt ) override; virtual void RequestHelp( const HelpEvent& rHEvt ) override; - /// For LibreOfficeKit, we need to route these to the mouse events. - virtual void LogicMouseButtonDown(const MouseEvent&) override; - virtual void LogicMouseButtonUp(const MouseEvent&) override; - virtual void LogicMouseMove(const MouseEvent&) override; - void ForceInvalidate(); - virtual void Invalidate( InvalidateFlags nFlags = InvalidateFlags::NONE ) override; - virtual void Invalidate( const tools::Rectangle& rRect, InvalidateFlags nFlags = InvalidateFlags::NONE ) override; - virtual void Invalidate( const vcl::Region& rRegion, InvalidateFlags nFlags = InvalidateFlags::NONE ) override; + virtual void ImplInvalidate( const vcl::Region* rRegion, InvalidateFlags nFlags ) override; /// Notify the LOK client about an invalidated area. virtual void LogicInvalidate( const tools::Rectangle* pRectangle ) override; diff --git a/chart2/source/controller/inc/ConfigurationAccess.hxx b/chart2/source/controller/inc/ConfigurationAccess.hxx deleted file mode 100644 index 2fb4636d2217..000000000000 --- a/chart2/source/controller/inc/ConfigurationAccess.hxx +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#pragma once - -#include <tools/fldunit.hxx> - -namespace chart::ConfigurationAccess -{ -/** @descr Retrieve the FieldUnit to be used for the UI. This unit is retrieved - from the registry settings of the Calc application. - - If this setting can not be found there is a fallback to cm which is the most - common setting worldwide (or not?) - - @return the FieldUnit enum. See <vcl/fldunit.hxx> for definition - */ -FieldUnit getFieldUnit(); - -} //namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/DataPointItemConverter.hxx b/chart2/source/controller/inc/DataPointItemConverter.hxx index 1cba4854d890..720cc0fef2e7 100644 --- a/chart2/source/controller/inc/DataPointItemConverter.hxx +++ b/chart2/source/controller/inc/DataPointItemConverter.hxx @@ -20,18 +20,19 @@ #include "ItemConverter.hxx" #include "GraphicPropertyItemConverter.hxx" +#include <com/sun/star/awt/Size.hpp> #include <com/sun/star/uno/Sequence.h> #include <tools/color.hxx> #include <rtl/ref.hxx> - +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::chart2 { class XDataSeries; } namespace com::sun::star::frame { class XModel; } namespace com::sun::star::uno { class XComponentContext; } namespace chart { class ChartModel; } +namespace chart { class DataSeries; } class SdrModel; namespace chart::wrapper { @@ -43,12 +44,12 @@ public: const rtl::Reference<::chart::ChartModel>& xChartModel, const css::uno::Reference<css::uno::XComponentContext>& xContext, const css::uno::Reference<css::beans::XPropertySet>& rPropertySet, - const css::uno::Reference<css::chart2::XDataSeries>& xSeries, + const rtl::Reference<::chart::DataSeries>& xSeries, SfxItemPool& rItemPool, SdrModel& rDrawModel, const css::uno::Reference<css::lang::XMultiServiceFactory>& xNamedPropertyContainerFactory, GraphicObjectType eMapTo, - const css::awt::Size* pRefSize = nullptr, + const std::optional<css::awt::Size>& pRefSize = std::nullopt, bool bDataSeries = false, bool bUseSpecialFillColor = false, sal_Int32 nSpecialFillColor = 0, @@ -81,7 +82,7 @@ private: bool m_bForbidPercentValue; bool m_bHideLegendEntry; sal_Int32 m_nPointIndex; - css::uno::Reference<css::chart2::XDataSeries> m_xSeries; + rtl::Reference<::chart::DataSeries> m_xSeries; }; } diff --git a/chart2/source/controller/inc/DataTableItemConverter.hxx b/chart2/source/controller/inc/DataTableItemConverter.hxx new file mode 100644 index 000000000000..f3809632f8a5 --- /dev/null +++ b/chart2/source/controller/inc/DataTableItemConverter.hxx @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "ItemConverter.hxx" +#include <rtl/ref.hxx> +#include <vector> + +namespace com::sun::star::awt +{ +struct Size; +} +namespace com::sun::star::beans +{ +class XPropertySet; +} +namespace chart +{ +class ChartModel; +} + +class SdrModel; + +namespace chart::wrapper +{ +/** Convert data table properties to and from ItemSet and UNO PropertySet */ +class DataTableItemConverter final : public ItemConverter +{ +public: + DataTableItemConverter(const css::uno::Reference<css::beans::XPropertySet>& rPropertySet, + SfxItemPool& rItemPool, SdrModel& rDrawModel, + const rtl::Reference<::chart::ChartModel>& xChartDoc); + + virtual ~DataTableItemConverter() override; + + virtual void FillItemSet(SfxItemSet& rOutItemSet) const override; + virtual bool ApplyItemSet(const SfxItemSet& rItemSet) override; + +protected: + virtual const WhichRangesContainer& GetWhichPairs() const override; + virtual bool GetItemProperty(tWhichIdType nWhichId, + tPropertyNameWithMemberId& rOutProperty) const override; + +private: + std::vector<std::unique_ptr<ItemConverter>> m_aConverters; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/ErrorBarItemConverter.hxx b/chart2/source/controller/inc/ErrorBarItemConverter.hxx index 997bda7d269e..a53fbe18ef60 100644 --- a/chart2/source/controller/inc/ErrorBarItemConverter.hxx +++ b/chart2/source/controller/inc/ErrorBarItemConverter.hxx @@ -33,7 +33,7 @@ class ErrorBarItemConverter final : public ItemConverter { public: ErrorBarItemConverter( - const css::uno::Reference< css::frame::XModel > & xChartModel, + css::uno::Reference< css::frame::XModel > xChartModel, const css::uno::Reference< css::beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool, SdrModel& rDrawModel, diff --git a/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx b/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx index 234e50751ab6..9d119d53ca3a 100644 --- a/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx +++ b/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx @@ -42,7 +42,7 @@ public: const css::uno::Reference< css::beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool, SdrModel& rDrawModel, - const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, + css::uno::Reference< css::lang::XMultiServiceFactory > xNamedPropertyContainerFactory, GraphicObjectType eObjectType ); virtual ~GraphicPropertyItemConverter() override; diff --git a/chart2/source/controller/inc/ItemConverter.hxx b/chart2/source/controller/inc/ItemConverter.hxx index 865268a3abf9..031a633c22d8 100644 --- a/chart2/source/controller/inc/ItemConverter.hxx +++ b/chart2/source/controller/inc/ItemConverter.hxx @@ -73,7 +73,7 @@ public: reading/writing converted items */ ItemConverter( - const css::uno::Reference< css::beans::XPropertySet > & rPropertySet , + css::uno::Reference< css::beans::XPropertySet > xPropertySet , SfxItemPool& rItemPool ); virtual ~ItemConverter() override; diff --git a/chart2/source/controller/inc/LegendItemConverter.hxx b/chart2/source/controller/inc/LegendItemConverter.hxx index 3e9315acc20d..cbb657edf0d3 100644 --- a/chart2/source/controller/inc/LegendItemConverter.hxx +++ b/chart2/source/controller/inc/LegendItemConverter.hxx @@ -19,10 +19,10 @@ #pragma once #include "ItemConverter.hxx" - +#include <com/sun/star/awt/Size.hpp> +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::lang { class XMultiServiceFactory; } class SdrModel; @@ -38,7 +38,7 @@ public: SfxItemPool& rItemPool, SdrModel& rDrawModel, const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, - const css::awt::Size* pRefSize ); + const std::optional<css::awt::Size>& pRefSize ); virtual ~LegendItemConverter() override; diff --git a/chart2/source/controller/inc/MultipleChartConverters.hxx b/chart2/source/controller/inc/MultipleChartConverters.hxx index 4fe1bb1de066..8fc9f33b4367 100644 --- a/chart2/source/controller/inc/MultipleChartConverters.hxx +++ b/chart2/source/controller/inc/MultipleChartConverters.hxx @@ -19,9 +19,10 @@ #pragma once #include "MultipleItemConverter.hxx" +#include <com/sun/star/awt/Size.hpp> #include <rtl/ref.hxx> +#include <optional> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::frame { class XModel; } namespace com::sun::star::lang { class XMultiServiceFactory; } namespace chart { class ChartModel; } @@ -36,7 +37,7 @@ public: const rtl::Reference<::chart::ChartModel> & xChartModel, SfxItemPool& rItemPool, SdrModel& rDrawModel, - const css::awt::Size* pRefSize ); + const std::optional<css::awt::Size>& pRefSize ); virtual ~AllAxisItemConverter() override; diff --git a/chart2/source/controller/inc/ObjectHierarchy.hxx b/chart2/source/controller/inc/ObjectHierarchy.hxx index d8f7747e8bc6..1531866aaf2b 100644 --- a/chart2/source/controller/inc/ObjectHierarchy.hxx +++ b/chart2/source/controller/inc/ObjectHierarchy.hxx @@ -18,6 +18,7 @@ */ #pragma once +#include <ChartModel.hxx> #include <ObjectIdentifier.hxx> #include <map> #include <vector> @@ -51,11 +52,10 @@ public: static bool isRootNode( const ObjectIdentifier& rOID ); /// equal to getChildren( getRootNodeOID()) - const tChildContainer & getTopLevelChildren() const; - bool hasChildren( const ObjectIdentifier& rParent ) const; - const tChildContainer & getChildren( const ObjectIdentifier& rParent ) const; - - const tChildContainer & getSiblings( const ObjectIdentifier& rNode ) const; + const tChildContainer& getTopLevelChildren() const; + bool hasChildren(const ObjectIdentifier& rParent) const; + const tChildContainer& getChildren(const ObjectIdentifier& rParent) const; + const tChildContainer& getSiblings(const ObjectIdentifier& rNode) const; /// The result is empty, if the node cannot be found in the tree ObjectIdentifier getParent( const ObjectIdentifier& rNode ) const; @@ -65,30 +65,29 @@ public: private: void createTree( const rtl::Reference<::chart::ChartModel> & xChartDocument ); void createAxesTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, - const css::uno::Reference< css::chart2::XDiagram > & xDiagram ); + const rtl::Reference< ::chart::Diagram > & xDiagram ); void createDiagramTree( - ObjectHierarchy::tChildContainer& rContainer, + tChildContainer& rContainer, const rtl::Reference<::chart::ChartModel>& xChartDoc, - const css::uno::Reference< css::chart2::XDiagram >& xDiagram ); + const rtl::Reference< ::chart::Diagram >& xDiagram ); void createDataSeriesTree( - ObjectHierarchy::tChildContainer & rOutDiagramSubContainer, - const css::uno::Reference< css::chart2::XDiagram > & xDiagram ); + tChildContainer & rOutDiagramSubContainer, + const rtl::Reference< ::chart::Diagram > & xDiagram ); static void createWallAndFloor( - ObjectHierarchy::tChildContainer & rContainer, - const css::uno::Reference< css::chart2::XDiagram > & xDiagram ); + tChildContainer & rContainer, + const rtl::Reference< ::chart::Diagram > & xDiagram ); void createLegendTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, - const css::uno::Reference< css::chart2::XDiagram > & xDiagram ); - void createAdditionalShapesTree( ObjectHierarchy::tChildContainer& rContainer ); + const rtl::Reference< ::chart::Diagram > & xDiagram ); + void createAdditionalShapesTree(tChildContainer& rContainer); ObjectIdentifier getParentImpl( const ObjectIdentifier& rParentOID, const ObjectIdentifier& rOID ) const; - typedef std::map< ObjectIdentifier, ObjectHierarchy::tChildContainer > - tChildMap; + typedef std::map<ObjectIdentifier, tChildContainer> tChildMap; tChildMap m_aChildMap; ExplicitValueProvider* m_pExplicitValueProvider; bool m_bFlattenDiagram; @@ -98,8 +97,8 @@ private: class ObjectKeyNavigation { public: - explicit ObjectKeyNavigation( const ObjectIdentifier & rCurrentOID, - const rtl::Reference<::chart::ChartModel> & xChartDocument, + explicit ObjectKeyNavigation( ObjectIdentifier aCurrentOID, + rtl::Reference<::chart::ChartModel> xChartDocument, ExplicitValueProvider * pExplicitValueProvider ); bool handleKeyEvent( const css::awt::KeyEvent & rEvent ); diff --git a/chart2/source/controller/inc/ObjectNameProvider.hxx b/chart2/source/controller/inc/ObjectNameProvider.hxx index 276e58977d35..c613dd5ce855 100644 --- a/chart2/source/controller/inc/ObjectNameProvider.hxx +++ b/chart2/source/controller/inc/ObjectNameProvider.hxx @@ -35,33 +35,33 @@ class ObjectNameProvider { public: static OUString getName( ObjectType eObjectType, bool bPlural=false ); - static OUString getAxisName( const OUString& rObjectCID + static OUString getAxisName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ); - static OUString getGridName( const OUString& rObjectCID + static OUString getGridName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ); - static OUString getTitleName( const OUString& rObjectCID + static OUString getTitleName( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel ); static OUString getTitleNameByType( TitleHelper::eTitleType eType ); static OUString getNameForCID( - const OUString& rObjectCID, + std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ); static OUString getName_ObjectForSeries( ObjectType eObjectType, - const OUString& rSeriesCID, + std::u16string_view rSeriesCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ); static OUString getName_ObjectForAllSeries( ObjectType eObjectType ); /** Provides help texts for the various chart elements. The parameter rObjectCID has to be a ClassifiedIdentifier - see class ObjectIdentifier. */ - static OUString getHelpText( const OUString& rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, bool bVerbose=false ); + static OUString getHelpText( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, bool bVerbose=false ); /** This is used for showing the currently selected object in the status bar (command "Context") */ - static OUString getSelectedObjectText( const OUString & rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ); + static OUString getSelectedObjectText( std::u16string_view rObjectCID, const rtl::Reference<::chart::ChartModel>& xChartDocument ); }; } //namespace chart diff --git a/chart2/source/controller/inc/PositionAndSizeHelper.hxx b/chart2/source/controller/inc/PositionAndSizeHelper.hxx index f70ccf302f6d..0f79373d52f9 100644 --- a/chart2/source/controller/inc/PositionAndSizeHelper.hxx +++ b/chart2/source/controller/inc/PositionAndSizeHelper.hxx @@ -36,7 +36,7 @@ public: , const css::awt::Rectangle& rOldPositionAndSize , const css::awt::Rectangle& rPageRectangle ); - static bool moveObject( const OUString& rObjectCID + static bool moveObject( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel , const css::awt::Rectangle& rNewPositionAndSize , const css::awt::Rectangle& rOldPositionAndSize diff --git a/chart2/source/controller/inc/RangeSelectionHelper.hxx b/chart2/source/controller/inc/RangeSelectionHelper.hxx index 02db335a1fc0..36fe0db99cce 100644 --- a/chart2/source/controller/inc/RangeSelectionHelper.hxx +++ b/chart2/source/controller/inc/RangeSelectionHelper.hxx @@ -42,7 +42,7 @@ class RangeSelectionHelper { public: explicit RangeSelectionHelper( - const rtl::Reference<::chart::ChartModel> & xChartDocument ); + rtl::Reference<::chart::ChartModel> xChartDocument ); ~RangeSelectionHelper(); bool hasRangeSelection(); diff --git a/chart2/source/controller/inc/RangeSelectionListener.hxx b/chart2/source/controller/inc/RangeSelectionListener.hxx index 29bea261c820..9117b4d9b2fc 100644 --- a/chart2/source/controller/inc/RangeSelectionListener.hxx +++ b/chart2/source/controller/inc/RangeSelectionListener.hxx @@ -47,7 +47,7 @@ class RangeSelectionListener final { public: explicit RangeSelectionListener( - RangeSelectionListenerParent& rParent, const OUString& rInitialRange, + RangeSelectionListenerParent& rParent, OUString aInitialRange, const rtl::Reference<::chart::ChartModel>& xModelToLockController); virtual ~RangeSelectionListener() override; diff --git a/chart2/source/controller/inc/RegressionCurveItemConverter.hxx b/chart2/source/controller/inc/RegressionCurveItemConverter.hxx index 63c296a3e3b1..8c4262b55ec5 100644 --- a/chart2/source/controller/inc/RegressionCurveItemConverter.hxx +++ b/chart2/source/controller/inc/RegressionCurveItemConverter.hxx @@ -19,10 +19,11 @@ #pragma once #include "ItemConverter.hxx" +#include <rtl/ref.hxx> namespace com::sun::star::chart2 { class XRegressionCurveContainer; } namespace com::sun::star::lang { class XMultiServiceFactory; } - +namespace chart { class DataSeries; } class SdrModel; namespace chart::wrapper @@ -33,7 +34,7 @@ class RegressionCurveItemConverter final : public ItemConverter public: RegressionCurveItemConverter( const css::uno::Reference< css::beans::XPropertySet > & rPropertySet, - const css::uno::Reference< css::chart2::XRegressionCurveContainer > & xRegCurveCnt, + rtl::Reference< ::chart::DataSeries > xRegCurveCnt, SfxItemPool& rItemPool, SdrModel& rDrawModel, const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory ); @@ -51,7 +52,7 @@ protected: private: std::shared_ptr< ItemConverter > m_spGraphicConverter; - css::uno::Reference< css::chart2::XRegressionCurveContainer > m_xCurveContainer; + rtl::Reference< ::chart::DataSeries > m_xCurveContainer; }; } // namespace chart::wrapper diff --git a/chart2/source/controller/inc/RegressionEquationItemConverter.hxx b/chart2/source/controller/inc/RegressionEquationItemConverter.hxx index 0b32e4b9ed7c..83394b1ea45d 100644 --- a/chart2/source/controller/inc/RegressionEquationItemConverter.hxx +++ b/chart2/source/controller/inc/RegressionEquationItemConverter.hxx @@ -19,10 +19,10 @@ #pragma once #include "ItemConverter.hxx" - +#include <com/sun/star/awt/Size.hpp> +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::beans { class XPropertySet; } namespace com::sun::star::lang { class XMultiServiceFactory; } @@ -38,7 +38,7 @@ public: SfxItemPool& rItemPool, SdrModel& rDrawModel, const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, - const css::awt::Size* pRefSize ); + const std::optional<css::awt::Size>& pRefSize ); virtual ~RegressionEquationItemConverter() override; diff --git a/chart2/source/controller/inc/SelectionHelper.hxx b/chart2/source/controller/inc/SelectionHelper.hxx index ae241d61ab42..119640bd4300 100644 --- a/chart2/source/controller/inc/SelectionHelper.hxx +++ b/chart2/source/controller/inc/SelectionHelper.hxx @@ -39,6 +39,7 @@ public: //methods bool isResizeableObjectSelected() const; bool isRotateableObjectSelected( const rtl::Reference<::chart::ChartModel>& xChartModel ) const; + bool isTitleObjectSelected() const; bool isDragableObjectSelected() const; bool isAdditionalShapeSelected() const; @@ -92,7 +93,7 @@ public: DrawViewWrapper const & rDrawViewWrapper, bool bGetDiagramInsteadOf_Wall=false ); - static bool isRotateableObject( const OUString& rCID + static bool isRotateableObject( std::u16string_view rCID , const rtl::Reference<::chart::ChartModel>& xChartModel ); explicit SelectionHelper( SdrObject* pSelectedObj ); diff --git a/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx b/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx index c658b08fa7dc..b55457ac5b30 100644 --- a/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx +++ b/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx @@ -26,6 +26,8 @@ namespace com::sun::star::chart2 { class XCoordinateSystem; } namespace com::sun::star::frame { class XModel; } namespace com::sun::star::uno { class XComponentContext; } namespace chart { class ChartModel; } +namespace chart { class BaseCoordinateSystem; } +namespace chart { class DataSeries; } namespace chart::wrapper { @@ -35,8 +37,8 @@ class SeriesOptionsItemConverter final : public ItemConverter public: SeriesOptionsItemConverter( const rtl::Reference<::chart::ChartModel> & xChartModel, - const css::uno::Reference< css::uno::XComponentContext > & xContext, - const css::uno::Reference< css::beans::XPropertySet > & rPropertySet, + css::uno::Reference< css::uno::XComponentContext > xContext, + const rtl::Reference<::chart::DataSeries> & rPropertySet, SfxItemPool& rItemPool ); virtual ~SeriesOptionsItemConverter() override; @@ -66,7 +68,7 @@ private: sal_Int32 m_nStartingAngle; bool m_bClockwise; - css::uno::Reference< css::chart2::XCoordinateSystem > m_xCooSys; + rtl::Reference< ::chart::BaseCoordinateSystem > m_xCooSys; css::uno::Sequence< sal_Int32 > m_aSupportedMissingValueTreatments; sal_Int32 m_nMissingValueTreatment; diff --git a/chart2/source/controller/inc/ShapeController.h b/chart2/source/controller/inc/ShapeController.h deleted file mode 100644 index 392c28d2fe4c..000000000000 --- a/chart2/source/controller/inc/ShapeController.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ -#ifndef CHART_SHAPECONTROLLER_H -#define CHART_SHAPECONTROLLER_H - -//Command Ids: -#define COMMAND_ID_FORMAT_LINE 1 -#define COMMAND_ID_FORMAT_AREA 2 -#define COMMAND_ID_TEXT_ATTRIBUTES 3 -#define COMMAND_ID_TRANSFORM_DIALOG 4 -#define COMMAND_ID_OBJECT_TITLE_DESCRIPTION 5 -#define COMMAND_ID_RENAME_OBJECT 6 -#define COMMAND_ID_BRING_TO_FRONT 8 -#define COMMAND_ID_FORWARD 9 -#define COMMAND_ID_BACKWARD 10 -#define COMMAND_ID_SEND_TO_BACK 11 -#define COMMAND_ID_FONT_DIALOG 15 -#define COMMAND_ID_PARAGRAPH_DIALOG 16 - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/StatisticsItemConverter.hxx b/chart2/source/controller/inc/StatisticsItemConverter.hxx index b82c1c230ae8..a6c56a2691e7 100644 --- a/chart2/source/controller/inc/StatisticsItemConverter.hxx +++ b/chart2/source/controller/inc/StatisticsItemConverter.hxx @@ -31,7 +31,7 @@ class StatisticsItemConverter final : public ItemConverter { public: StatisticsItemConverter( - const rtl::Reference<::chart::ChartModel> & xChartModel, + rtl::Reference<::chart::ChartModel> xChartModel, const css::uno::Reference< css::beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool ); virtual ~StatisticsItemConverter() override; diff --git a/chart2/source/controller/inc/TabPageNotifiable.hxx b/chart2/source/controller/inc/TabPageNotifiable.hxx index 440cda2de9aa..c0b53972e546 100644 --- a/chart2/source/controller/inc/TabPageNotifiable.hxx +++ b/chart2/source/controller/inc/TabPageNotifiable.hxx @@ -18,6 +18,8 @@ */ #pragma once +#include <sal/types.h> + // color to use as foreground for an invalid range #define RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR COL_WHITE // color to use as background for an invalid range @@ -27,7 +29,7 @@ class BuilderPage; namespace chart { -class TabPageNotifiable +class SAL_LOPLUGIN_ANNOTATE("crosscast") TabPageNotifiable { public: virtual void setInvalidPage(BuilderPage* pTabPage) = 0; diff --git a/chart2/source/controller/inc/TextLabelItemConverter.hxx b/chart2/source/controller/inc/TextLabelItemConverter.hxx index d44138332798..cb5406cf6a01 100644 --- a/chart2/source/controller/inc/TextLabelItemConverter.hxx +++ b/chart2/source/controller/inc/TextLabelItemConverter.hxx @@ -20,14 +20,16 @@ #include "ItemConverter.hxx" +#include <com/sun/star/awt/Size.hpp> #include <com/sun/star/uno/Sequence.h> #include <rtl/ref.hxx> +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::chart2 { class XDataSeries; } namespace com::sun::star::frame { class XModel; } namespace chart { class ChartModel; } +namespace chart { class DataSeries; } namespace chart::wrapper { @@ -37,9 +39,9 @@ public: TextLabelItemConverter( const rtl::Reference<::chart::ChartModel>& xChartModel, const css::uno::Reference<css::beans::XPropertySet>& rPropertySet, - const css::uno::Reference<css::chart2::XDataSeries>& xSeries, + const rtl::Reference<::chart::DataSeries>& xSeries, SfxItemPool& rItemPool, - const css::awt::Size* pRefSize, + const std::optional<css::awt::Size>& pRefSize, bool bDataSeries, sal_Int32 nNumberFormat, sal_Int32 nPercentNumberFormat ); @@ -65,7 +67,7 @@ private: bool mbDataSeries:1; bool mbForbidPercentValue:1; - css::uno::Reference<css::chart2::XDataSeries> m_xSeries; + rtl::Reference<::chart::DataSeries> m_xSeries; }; } diff --git a/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx b/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx index 4952e112db88..49541b1552d4 100644 --- a/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx +++ b/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx @@ -19,7 +19,6 @@ #pragma once -#include <com/sun/star/uno/Reference.h> #include <vcl/timer.hxx> #include <rtl/ref.hxx> @@ -41,7 +40,7 @@ class ChartModel; class TimerTriggeredControllerLock final { public: - TimerTriggeredControllerLock(const rtl::Reference<::chart::ChartModel>& xModel); + TimerTriggeredControllerLock(rtl::Reference<::chart::ChartModel> xModel); ~TimerTriggeredControllerLock(); void startTimer(); diff --git a/chart2/source/controller/inc/TitleDialogData.hxx b/chart2/source/controller/inc/TitleDialogData.hxx index 5f398f34a1f0..123ae9d6d65f 100644 --- a/chart2/source/controller/inc/TitleDialogData.hxx +++ b/chart2/source/controller/inc/TitleDialogData.hxx @@ -19,7 +19,6 @@ #pragma once #include <ReferenceSizeProvider.hxx> -#include <memory> #include <com/sun/star/uno/Sequence.hxx> #include <rtl/ref.hxx> @@ -35,9 +34,9 @@ struct TitleDialogData css::uno::Sequence< sal_Bool > aPossibilityList; css::uno::Sequence< sal_Bool > aExistenceList; css::uno::Sequence< OUString > aTextList; - std::unique_ptr< ReferenceSizeProvider > apReferenceSizeProvider; + std::optional< ReferenceSizeProvider > apReferenceSizeProvider; - TitleDialogData(std::unique_ptr<ReferenceSizeProvider> pReferenzeSizeProvider = nullptr); + TitleDialogData(std::optional<ReferenceSizeProvider> pReferenzeSizeProvider = std::nullopt); void readFromModel( const rtl::Reference<::chart::ChartModel>& xChartModel ); /* return true if anything has changed; @@ -45,7 +44,7 @@ struct TitleDialogData */ bool writeDifferenceToModel( const rtl::Reference<::chart::ChartModel>& xChartModel , const css::uno::Reference< css::uno::XComponentContext >& xContext - , TitleDialogData* pOldState=nullptr ); + , const TitleDialogData* pOldState=nullptr ); }; } //namespace chart diff --git a/chart2/source/controller/inc/TitleItemConverter.hxx b/chart2/source/controller/inc/TitleItemConverter.hxx index 5a2686d62814..4a306b690363 100644 --- a/chart2/source/controller/inc/TitleItemConverter.hxx +++ b/chart2/source/controller/inc/TitleItemConverter.hxx @@ -20,9 +20,10 @@ #include "ItemConverter.hxx" +#include <com/sun/star/awt/Size.hpp> +#include <optional> #include <vector> -namespace com::sun::star::awt { struct Size; } namespace com::sun::star::lang { class XMultiServiceFactory; } class SdrModel; @@ -36,7 +37,7 @@ public: const css::uno::Reference<css::beans::XPropertySet>& rPropertySet, SfxItemPool& rItemPool, SdrModel& rDrawModel, const css::uno::Reference<css::lang::XMultiServiceFactory>& xNamedPropertyContainerFactory, - const css::awt::Size* pRefSize ); + const std::optional<css::awt::Size>& pRefSize ); virtual ~TitleItemConverter() override; diff --git a/chart2/source/controller/inc/dlg_ChartType.hxx b/chart2/source/controller/inc/dlg_ChartType.hxx index 7520869e86c4..02e6ac998bbc 100644 --- a/chart2/source/controller/inc/dlg_ChartType.hxx +++ b/chart2/source/controller/inc/dlg_ChartType.hxx @@ -34,7 +34,7 @@ class ChartTypeTabPage; class ChartTypeDialog final : public weld::GenericDialogController { public: - ChartTypeDialog(weld::Window* pWindow, const rtl::Reference<::chart::ChartModel>& xChartModel); + ChartTypeDialog(weld::Window* pWindow, rtl::Reference<::chart::ChartModel> xChartModel); virtual ~ChartTypeDialog() override; private: diff --git a/chart2/source/controller/inc/dlg_CreationWizard.hxx b/chart2/source/controller/inc/dlg_CreationWizard.hxx index a0fcc9dae6f9..1b782632f4d3 100644 --- a/chart2/source/controller/inc/dlg_CreationWizard.hxx +++ b/chart2/source/controller/inc/dlg_CreationWizard.hxx @@ -37,7 +37,6 @@ class XComponentContext; } using vcl::WizardTypes::WizardState; -using vcl::WizardTypes::CommitPageReason; namespace chart { @@ -49,7 +48,7 @@ class CreationWizard final : public vcl::RoadmapWizardMachine, public TabPageNot { public: CreationWizard(weld::Window* pParent, const rtl::Reference<::chart::ChartModel>& xChartModel, - const css::uno::Reference<css::uno::XComponentContext>& xContext); + css::uno::Reference<css::uno::XComponentContext> xContext); CreationWizard() = delete; virtual ~CreationWizard() override; diff --git a/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx b/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx index 7e1792f087f1..89b8cb5a08f2 100644 --- a/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx +++ b/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx @@ -53,7 +53,7 @@ class CreationWizardUnoDlg final : public cppu::BaseMutex public: CreationWizardUnoDlg() = delete; - CreationWizardUnoDlg( const css::uno::Reference< css::uno::XComponentContext >& xContext ); + CreationWizardUnoDlg( css::uno::Reference< css::uno::XComponentContext > xContext ); virtual ~CreationWizardUnoDlg() override; // XInterface diff --git a/chart2/source/controller/inc/dlg_DataEditor.hxx b/chart2/source/controller/inc/dlg_DataEditor.hxx index 5156e0831b45..205e822a12a5 100644 --- a/chart2/source/controller/inc/dlg_DataEditor.hxx +++ b/chart2/source/controller/inc/dlg_DataEditor.hxx @@ -40,7 +40,7 @@ class DataEditor final : public weld::GenericDialogController { public: DataEditor(weld::Window* pParent, - const rtl::Reference<::chart::ChartModel> & xChartDoc, + rtl::Reference<::chart::ChartModel> xChartDoc, const css::uno::Reference<css::uno::XComponentContext> & xContext); virtual ~DataEditor() override; @@ -63,7 +63,7 @@ private: VclPtr<DataBrowser> m_xBrwData; /// handles actions of the toolbox - DECL_LINK( ToolboxHdl, const OString&, void ); + DECL_LINK( ToolboxHdl, const OUString&, void ); /// is called, if the cursor of the table has moved DECL_LINK( BrowserCursorMovedHdl, DataBrowser*, void); }; diff --git a/chart2/source/controller/inc/dlg_DataSource.hxx b/chart2/source/controller/inc/dlg_DataSource.hxx index 97eb659c7052..166131e30ec9 100644 --- a/chart2/source/controller/inc/dlg_DataSource.hxx +++ b/chart2/source/controller/inc/dlg_DataSource.hxx @@ -41,8 +41,7 @@ class DataSourceDialog final : public: explicit DataSourceDialog( weld::Window * pParent, - const rtl::Reference<::chart::ChartModel> & xChartDocument, - const css::uno::Reference< css::uno::XComponentContext > & xContext ); + const rtl::Reference<::chart::ChartModel> & xChartDocument ); virtual ~DataSourceDialog() override; // from GenericDialogController base @@ -53,8 +52,8 @@ public: virtual void setValidPage( BuilderPage * pTabPage ) override; private: - DECL_LINK(ActivatePageHdl, const OString&, void); - DECL_LINK(DeactivatePageHdl, const OString&, bool); + DECL_LINK(ActivatePageHdl, const OUString&, void); + DECL_LINK(DeactivatePageHdl, const OUString&, bool); std::unique_ptr< ChartTypeTemplateProvider > m_apDocTemplateProvider; std::unique_ptr< DialogModel > m_apDialogModel; diff --git a/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx b/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx index b69ab70f64f3..2b265c7d6541 100644 --- a/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx +++ b/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx @@ -38,7 +38,6 @@ struct InsertAxisOrGridDialogData \************************************************************************/ class SchAxisDlg : public weld::GenericDialogController { -protected: std::unique_ptr<weld::CheckButton> m_xCbPrimaryX; std::unique_ptr<weld::CheckButton> m_xCbPrimaryY; std::unique_ptr<weld::CheckButton> m_xCbPrimaryZ; diff --git a/chart2/source/controller/inc/dlg_InsertDataTable.hxx b/chart2/source/controller/inc/dlg_InsertDataTable.hxx new file mode 100644 index 000000000000..cd77099864c4 --- /dev/null +++ b/chart2/source/controller/inc/dlg_InsertDataTable.hxx @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <vcl/weld.hxx> +#include "res_DataTableProperties.hxx" + +namespace chart +{ +/** The data table properties (data) used by the dialog */ +struct DataTableDialogData +{ + bool mbShow = true; + bool mbHorizontalBorders = false; + bool mbVerticalBorders = false; + bool mbOutline = false; + bool mbKeys = false; +}; + +/** The dialog to change the data table specific properties */ +class InsertDataTableDialog final : public weld::GenericDialogController +{ +private: + DataTablePropertiesResources m_aDataTablePropertiesResources; + std::unique_ptr<weld::CheckButton> m_xCbShowDataTable; + + DataTableDialogData m_aData; + + DECL_LINK(ShowDataTableToggle, weld::Toggleable&, void); + + void changeEnabled(); + +public: + InsertDataTableDialog(weld::Window* pParent); + + /** Set the initial state of the data table properties */ + void init(DataTableDialogData const& rData); + + /** Get the state of the data table properties from the dialog */ + DataTableDialogData& getDataTableDialogData(); +}; + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/dlg_InsertErrorBars.hxx b/chart2/source/controller/inc/dlg_InsertErrorBars.hxx index e68036153c10..4f8e8d094a34 100644 --- a/chart2/source/controller/inc/dlg_InsertErrorBars.hxx +++ b/chart2/source/controller/inc/dlg_InsertErrorBars.hxx @@ -31,6 +31,8 @@ class XModel; namespace chart { +class ChartView; + class InsertErrorBarsDialog final : public weld::GenericDialogController { public: @@ -40,10 +42,10 @@ public: void SetAxisMinorStepWidthForErrorBarDecimals(double fMinorStepWidth); - static double getAxisMinorStepWidthForErrorBarDecimals( - const rtl::Reference<::chart::ChartModel>& xChartModel, - const css::uno::Reference<css::uno::XInterface>& xChartView, - const OUString& rSelectedObjectCID); + static double + getAxisMinorStepWidthForErrorBarDecimals(const rtl::Reference<::chart::ChartModel>& xChartModel, + const rtl::Reference<::chart::ChartView>& xChartView, + std::u16string_view rSelectedObjectCID); void FillItemSet(SfxItemSet& rOutAttrs); diff --git a/chart2/source/controller/inc/dlg_ObjectProperties.hxx b/chart2/source/controller/inc/dlg_ObjectProperties.hxx index 238ccc83b42f..621f096753e4 100644 --- a/chart2/source/controller/inc/dlg_ObjectProperties.hxx +++ b/chart2/source/controller/inc/dlg_ObjectProperties.hxx @@ -20,9 +20,9 @@ #include <ObjectIdentifier.hxx> #include <sfx2/tabdlg.hxx> +#include <vcl/graph.hxx> namespace com::sun::star::util { class XNumberFormatsSupplier; } -class Graphic; namespace chart { @@ -30,7 +30,7 @@ namespace chart class ObjectPropertiesDialogParameter final { public: - ObjectPropertiesDialogParameter( const OUString& rObjectCID ); + ObjectPropertiesDialogParameter( OUString aObjectCID ); ~ObjectPropertiesDialogParameter(); void init( const rtl::Reference<::chart::ChartModel>& xModel ); @@ -115,14 +115,14 @@ private: SvNumberFormatter* m_pNumberFormatter; std::optional<SfxItemSet> m_oSymbolShapeProperties; - std::unique_ptr<Graphic> m_pAutoSymbolGraphic; + std::optional<Graphic> m_oAutoSymbolGraphic; double m_fAxisMinorStepWidthForErrorBarDecimals; bool m_bOKPressed; DECL_LINK(OKPressed, weld::Button&, void); - virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override; + virtual void PageCreated(const OUString& rId, SfxTabPage& rPage) override; public: SchAttribTabDlg(weld::Window* pParent, const SfxItemSet* pAttr, @@ -133,7 +133,7 @@ public: //pSymbolShapeProperties: Properties to be set on the symbollist shapes //pAutoSymbolGraphic: Graphic to be shown if AutoSymbol gets selected - void setSymbolInformation( SfxItemSet&& rSymbolShapeProperties, std::unique_ptr<Graphic> pAutoSymbolGraphic ); + void setSymbolInformation( SfxItemSet&& rSymbolShapeProperties, std::optional<Graphic> oAutoSymbolGraphic ); void SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth ); diff --git a/chart2/source/controller/inc/dlg_ShapeFont.hxx b/chart2/source/controller/inc/dlg_ShapeFont.hxx index 6998ba47094b..cfeb002fb92d 100644 --- a/chart2/source/controller/inc/dlg_ShapeFont.hxx +++ b/chart2/source/controller/inc/dlg_ShapeFont.hxx @@ -33,7 +33,7 @@ public: const ViewElementListProvider* pViewElementListProvider); private: - virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override; + virtual void PageCreated(const OUString& rId, SfxTabPage& rPage) override; const ViewElementListProvider* m_pViewElementListProvider; }; diff --git a/chart2/source/controller/inc/dlg_ShapeParagraph.hxx b/chart2/source/controller/inc/dlg_ShapeParagraph.hxx index 9d4d7496d64d..15d0c014d848 100644 --- a/chart2/source/controller/inc/dlg_ShapeParagraph.hxx +++ b/chart2/source/controller/inc/dlg_ShapeParagraph.hxx @@ -30,7 +30,7 @@ public: ShapeParagraphDialog(weld::Window* pParent, const SfxItemSet* pAttr); private: - virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override; + virtual void PageCreated(const OUString& rId, SfxTabPage& rPage) override; }; } // namespace chart diff --git a/chart2/source/controller/inc/dlg_View3D.hxx b/chart2/source/controller/inc/dlg_View3D.hxx index c165e828535e..66c4a8eaf41a 100644 --- a/chart2/source/controller/inc/dlg_View3D.hxx +++ b/chart2/source/controller/inc/dlg_View3D.hxx @@ -41,7 +41,7 @@ public: virtual short run() override; private: - DECL_LINK(ActivatePageHdl, const OString&, void); + DECL_LINK(ActivatePageHdl, const OUString&, void); ControllerLockHelper m_aControllerLocker; diff --git a/chart2/source/controller/inc/helpids.h b/chart2/source/controller/inc/helpids.h index 69a23771c8dd..775ec1489b42 100644 --- a/chart2/source/controller/inc/helpids.h +++ b/chart2/source/controller/inc/helpids.h @@ -19,14 +19,14 @@ #pragma once -#include <rtl/string.hxx> +#include <rtl/ustring.hxx> -inline constexpr OStringLiteral HID_SCH_WIN_DOCUMENT = "CHART2_HID_SCH_WIN_DOCUMENT"; -inline constexpr OStringLiteral HID_SCH_ERROR_BARS_FROM_DATA = "CHART2_SCH_ERROR_BARS_FROM_DATA"; +inline constexpr OUString HID_SCH_WIN_DOCUMENT = u"CHART2_HID_SCH_WIN_DOCUMENT"_ustr; +inline constexpr OUString HID_SCH_ERROR_BARS_FROM_DATA = u"CHART2_SCH_ERROR_BARS_FROM_DATA"_ustr; -inline constexpr OStringLiteral HID_SCH_WIZARD_ROADMAP = "CHART2_HID_SCH_WIZARD_ROADMAP"; -inline constexpr OStringLiteral HID_SCH_DATA_SERIES_LABEL = "CHART2_HID_SCH_DATA_SERIES_LABEL"; +inline constexpr OUString HID_SCH_WIZARD_ROADMAP = u"CHART2_HID_SCH_WIZARD_ROADMAP"_ustr; +inline constexpr OUString HID_SCH_DATA_SERIES_LABEL = u"CHART2_HID_SCH_DATA_SERIES_LABEL"_ustr; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/res_DataTableProperties.hxx b/chart2/source/controller/inc/res_DataTableProperties.hxx new file mode 100644 index 000000000000..4b2aaa4f2ef7 --- /dev/null +++ b/chart2/source/controller/inc/res_DataTableProperties.hxx @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <svl/itemset.hxx> +#include <vcl/weld.hxx> + +namespace chart +{ +/** The shared UI elements for the data table properties */ +class DataTablePropertiesResources final +{ +private: + std::unique_ptr<weld::CheckButton> m_xCbHorizontalBorder; + std::unique_ptr<weld::CheckButton> m_xCbVerticalBorder; + std::unique_ptr<weld::CheckButton> m_xCbOutilne; + std::unique_ptr<weld::CheckButton> m_xCbKeys; + +public: + DataTablePropertiesResources(weld::Builder& rBuilder); + + void initFromItemSet(SfxItemSet const& rInAttrs); + bool writeToItemSet(SfxItemSet& rOutAttrs) const; + void setChecksSensitive(bool bSensitive); + + bool getHorizontalBorder() { return m_xCbHorizontalBorder->get_active(); } + void setHorizontalBorder(bool bActive) { m_xCbHorizontalBorder->set_active(bActive); } + + bool getVerticalBorder() { return m_xCbVerticalBorder->get_active(); } + void setVerticalBorder(bool bActive) { m_xCbVerticalBorder->set_active(bActive); } + + bool getOutline() { return m_xCbOutilne->get_active(); } + void setOutline(bool bActive) { m_xCbOutilne->set_active(bActive); } + + bool getKeys() { return m_xCbKeys->get_active(); } + void setKeys(bool bActive) { m_xCbKeys->set_active(bActive); } +}; + +} //namespace chart + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/inc/res_LegendPosition.hxx b/chart2/source/controller/inc/res_LegendPosition.hxx index d34c28cdd79c..80ccaa85da6e 100644 --- a/chart2/source/controller/inc/res_LegendPosition.hxx +++ b/chart2/source/controller/inc/res_LegendPosition.hxx @@ -40,8 +40,8 @@ public: //constructor without Display checkbox LegendPositionResources(weld::Builder& rBuilder); //constructor inclusive Display checkbox - LegendPositionResources(weld::Builder& rBuilder, const css::uno::Reference< - css::uno::XComponentContext>& xCC ); + LegendPositionResources(weld::Builder& rBuilder, css::uno::Reference< + css::uno::XComponentContext> xCC ); ~LegendPositionResources(); void writeToResources( const rtl::Reference<::chart::ChartModel>& xChartModel ); @@ -57,6 +57,7 @@ public: private: void impl_setRadioButtonToggleHdl(); + void PositionEnable(); private: css::uno::Reference< css::uno::XComponentContext> m_xCC; diff --git a/chart2/source/controller/inc/uiobject.hxx b/chart2/source/controller/inc/uiobject.hxx index b40fffb4451b..6de63f5d3fdf 100644 --- a/chart2/source/controller/inc/uiobject.hxx +++ b/chart2/source/controller/inc/uiobject.hxx @@ -19,7 +19,7 @@ class ChartUIObject final : public UIObject public: ChartUIObject(const VclPtr<chart::ChartWindow>& xChartWindow, - const OUString& rCID); + OUString aCID); StringMap get_state() override; @@ -32,6 +32,8 @@ public: virtual OUString get_type() const override; + virtual bool equals(const UIObject& rOther) const override; + private: OUString maCID; diff --git a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx index cb53acb3a873..c91eb41dbe97 100644 --- a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx @@ -25,10 +25,11 @@ #include <chartview/ExplicitScaleValues.hxx> #include <chartview/ExplicitValueProvider.hxx> #include "SchWhichPairs.hxx" -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <CommonConverters.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <Diagram.hxx> #include <unonames.hxx> @@ -40,10 +41,8 @@ #include <com/sun/star/chart/ChartAxisPosition.hpp> #include <com/sun/star/chart/TimeInterval.hpp> #include <com/sun/star/chart2/XAxis.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/AxisOrientation.hpp> #include <com/sun/star/chart2/AxisType.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <osl/diagnose.h> #include <o3tl/any.hxx> @@ -85,7 +84,7 @@ AxisItemConverter::AxisItemConverter( const rtl::Reference<::chart::ChartModel> & xChartDoc, ::chart::ExplicitScaleData const * pScale /* = NULL */, ::chart::ExplicitIncrementData const * pIncrement /* = NULL */, - const awt::Size* pRefSize ) : + const std::optional<awt::Size>& pRefSize ) : ItemConverter( rPropertySet, rItemPool ), m_xChartDoc( xChartDoc ) { @@ -101,8 +100,8 @@ AxisItemConverter::AxisItemConverter( m_aConverters.emplace_back( new CharacterPropertyItemConverter(rPropertySet, rItemPool, pRefSize, "ReferencePageSize")); - m_xAxis.set( Reference< chart2::XAxis >( rPropertySet, uno::UNO_QUERY ) ); - OSL_ASSERT( m_xAxis.is()); + m_xAxis = dynamic_cast<::chart::Axis*>(rPropertySet.get()); + assert(m_xAxis); } AxisItemConverter::~AxisItemConverter() @@ -180,12 +179,12 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI { double fMax = 10.0; if( rScale.Maximum >>= fMax ) - rOutItemSet.Put( SvxDoubleItem( fMax, nWhichId ) ); + rOutItemSet.Put( SvxDoubleItem( fMax, SCHATTR_AXIS_MAX ) ); else { if( m_pExplicitScale ) fMax = m_pExplicitScale->Maximum; - rOutItemSet.Put( SvxDoubleItem( fMax, nWhichId ) ); + rOutItemSet.Put( SvxDoubleItem( fMax, SCHATTR_AXIS_MAX ) ); } } break; @@ -198,9 +197,9 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI { double fMin = 0.0; if( rScale.Minimum >>= fMin ) - rOutItemSet.Put( SvxDoubleItem( fMin, nWhichId ) ); + rOutItemSet.Put( SvxDoubleItem( fMin, SCHATTR_AXIS_MIN ) ); else if( m_pExplicitScale ) - rOutItemSet.Put( SvxDoubleItem( m_pExplicitScale->Minimum, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( m_pExplicitScale->Minimum, SCHATTR_AXIS_MIN )); } break; @@ -238,17 +237,17 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI { TimeInterval aTimeInterval; if( rTimeIncrement.MajorTimeInterval >>= aTimeInterval ) - rOutItemSet.Put( SvxDoubleItem(aTimeInterval.Number, nWhichId )); + rOutItemSet.Put( SvxDoubleItem(aTimeInterval.Number, SCHATTR_AXIS_STEP_MAIN )); else if( m_pExplicitIncrement ) - rOutItemSet.Put( SvxDoubleItem( m_pExplicitIncrement->MajorTimeInterval.Number, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( m_pExplicitIncrement->MajorTimeInterval.Number, SCHATTR_AXIS_STEP_MAIN )); } else { double fDistance = 1.0; if( rIncrement.Distance >>= fDistance ) - rOutItemSet.Put( SvxDoubleItem(fDistance, nWhichId )); + rOutItemSet.Put( SvxDoubleItem(fDistance, SCHATTR_AXIS_STEP_MAIN )); else if( m_pExplicitIncrement ) - rOutItemSet.Put( SvxDoubleItem( m_pExplicitIncrement->Distance, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( m_pExplicitIncrement->Distance, SCHATTR_AXIS_STEP_MAIN )); } break; @@ -307,7 +306,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI break; case SCHATTR_AXIS_TIME_RESOLUTION: { - tools::Long nTimeResolution=0; + sal_Int32 nTimeResolution=0; if( rTimeIncrement.TimeResolution >>= nTimeResolution ) rOutItemSet.Put( SfxInt32Item( nWhichId, nTimeResolution ) ); else if( m_pExplicitScale ) @@ -329,7 +328,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI if( m_pExplicitScale ) fOrigin = m_pExplicitScale->Origin; } - rOutItemSet.Put( SvxDoubleItem( fOrigin, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( fOrigin, SCHATTR_AXIS_ORIGIN )); } break; @@ -345,7 +344,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI { double fValue = 0.0; if( GetPropertySet()->getPropertyValue( "CrossoverValue" ) >>= fValue ) - rOutItemSet.Put( SvxDoubleItem( fValue, nWhichId ) ); + rOutItemSet.Put( SvxDoubleItem( fValue, SCHATTR_AXIS_POSITION_VALUE ) ); } break; @@ -355,9 +354,9 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI //necessary tp display the crossing value with an appropriate format rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( - m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); - Reference< chart2::XAxis > xCrossingMainAxis( AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ) ); + rtl::Reference< Axis > xCrossingMainAxis = AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ); sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( xCrossingMainAxis, xCooSys, m_xChartDoc); @@ -393,7 +392,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI if( GetPropertySet()->getPropertyValue( "TextRotation" ) >>= fVal ) { - rOutItemSet.Put( SdrAngleItem( nWhichId, Degree100(static_cast< sal_Int32 >( + rOutItemSet.Put( SdrAngleItem( SCHATTR_TEXT_DEGREES, Degree100(static_cast< sal_Int32 >( ::rtl::math::round( fVal * 100.0 )) ) )); } } @@ -403,9 +402,9 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI { if( m_pExplicitScale ) { - Reference< chart2::XCoordinateSystem > xCooSys( + rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( - m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( m_xAxis, xCooSys, m_xChartDoc); @@ -433,8 +432,8 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI case SCHATTR_AXIS_ALLOW_DATEAXIS: { - Reference< chart2::XCoordinateSystem > xCooSys( - AxisHelper::getCoordinateSystemOfAxis( m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + rtl::Reference< BaseCoordinateSystem > xCooSys( + AxisHelper::getCoordinateSystemOfAxis( m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); sal_Int32 nDimensionIndex=0; sal_Int32 nAxisIndex=0; AxisHelper::getIndicesForAxis(m_xAxis, xCooSys, nDimensionIndex, nAxisIndex ); bool bChartTypeAllowsDateAxis = ChartTypeHelper::isSupportingDateAxis( AxisHelper::getChartTypeByIndex( xCooSys, 0 ), nDimensionIndex ); @@ -715,14 +714,14 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet if( !AxisHelper::isAxisPositioningEnabled() ) { //keep old and new settings for axis positioning in sync somehow - Reference< chart2::XCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( - m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( + m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); sal_Int32 nDimensionIndex=0; sal_Int32 nAxisIndex=0; if( AxisHelper::getIndicesForAxis( m_xAxis, xCooSys, nDimensionIndex, nAxisIndex ) && nAxisIndex==0 ) { - Reference< beans::XPropertySet > xCrossingMainAxis( AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ), uno::UNO_QUERY ); + rtl::Reference< Axis > xCrossingMainAxis = AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ); if( xCrossingMainAxis.is() ) { double fValue = 0.0; @@ -757,7 +756,8 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet //move the parallel axes to the other side if necessary if( eAxisPos==css::chart::ChartAxisPosition_START || eAxisPos==css::chart::ChartAxisPosition_END ) { - Reference< beans::XPropertySet > xParallelAxis( AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ), uno::UNO_QUERY ); + rtl::Reference<Diagram> xDiagram = m_xChartDoc->getFirstChartDiagram(); + rtl::Reference< Axis > xParallelAxis = AxisHelper::getParallelAxis( m_xAxis, xDiagram ); if( xParallelAxis.is() ) { css::chart::ChartAxisPosition eOtherPos; @@ -792,8 +792,8 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet //keep old and new settings for axis positioning in sync somehow { - Reference< chart2::XCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( - m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + rtl::Reference< BaseCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemOfAxis( + m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); sal_Int32 nDimensionIndex=0; sal_Int32 nAxisIndex=0; @@ -840,7 +840,8 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet //move the parallel axes to the other side if necessary if( ePos==css::chart::ChartAxisLabelPosition_OUTSIDE_START || ePos==css::chart::ChartAxisLabelPosition_OUTSIDE_END ) { - Reference< beans::XPropertySet > xParallelAxis( AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ), uno::UNO_QUERY ); + rtl::Reference<Diagram> xDiagram = m_xChartDoc->getFirstChartDiagram(); + rtl::Reference< Axis > xParallelAxis = AxisHelper::getParallelAxis( m_xAxis, xDiagram ); if( xParallelAxis.is() ) { css::chart::ChartAxisLabelPosition eOtherPos; @@ -897,8 +898,7 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet if( m_pExplicitScale ) { bool bUseSourceFormat = - static_cast< const SfxBoolItem & >( - rItemSet.Get( SID_ATTR_NUMBERFORMAT_SOURCE )).GetValue(); + rItemSet.Get( SID_ATTR_NUMBERFORMAT_SOURCE ).GetValue(); if( ! bUseSourceFormat ) { @@ -940,9 +940,9 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet } else { - Reference< chart2::XCoordinateSystem > xCooSys( - AxisHelper::getCoordinateSystemOfAxis( - m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) ); + rtl::Reference< BaseCoordinateSystem > xCooSys = + AxisHelper::getCoordinateSystemOfAxis( + m_xAxis, m_xChartDoc->getFirstChartDiagram() ); sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( m_xAxis, xCooSys, m_xChartDoc); diff --git a/chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter.cxx b/chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter.cxx index 5345f9168ca3..a338ae70b4b8 100644 --- a/chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter.cxx @@ -33,7 +33,8 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/chart2/XFormattedString.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -73,11 +74,11 @@ CharacterPropertyItemConverter::CharacterPropertyItemConverter( CharacterPropertyItemConverter::CharacterPropertyItemConverter( const uno::Reference< beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool, - const awt::Size* pRefSize, - const OUString & rRefSizePropertyName, + const std::optional<awt::Size>& pRefSize, + OUString aRefSizePropertyName, const uno::Reference< beans::XPropertySet > & rRefSizePropSet ) : ItemConverter( rPropertySet, rItemPool ), - m_aRefSizePropertyName( rRefSizePropertyName ), + m_aRefSizePropertyName(std::move( aRefSizePropertyName )), m_xRefSizePropSet( rRefSizePropSet.is() ? rRefSizePropSet : rPropertySet ) { if (pRefSize) diff --git a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx index 264bdf92af3b..571f98a56952 100644 --- a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx @@ -25,11 +25,12 @@ #include <CharacterPropertyItemConverter.hxx> #include <StatisticsItemConverter.hxx> #include <SeriesOptionsItemConverter.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> -#include <DiagramHelper.hxx> +#include <DataSeriesProperties.hxx> #include <Diagram.hxx> #include <ChartModel.hxx> -#include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <unonames.hxx> @@ -39,7 +40,6 @@ #include <com/sun/star/chart2/Symbol.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> #include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <comphelper/sequence.hxx> #include <svx/xflclit.hxx> @@ -50,7 +50,7 @@ #include <editeng/brushitem.hxx> #include <svl/ilstitem.hxx> #include <svx/sdangitm.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <vcl/graph.hxx> #include <rtl/math.hxx> @@ -60,6 +60,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; +using namespace ::chart::DataSeriesProperties; using ::com::sun::star::uno::Reference; namespace chart::wrapper { @@ -105,7 +106,7 @@ bool lcl_NumberFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxItemSe bool bChanged = false; if( !xPropertySet.is() ) return bChanged; - OUString aPropertyName = (nWhichId==SID_ATTR_NUMBERFORMAT_VALUE) ? OUString(CHART_UNONAME_NUMFMT) : OUString( "PercentageNumberFormat" ); + OUString aPropertyName = (nWhichId==SID_ATTR_NUMBERFORMAT_VALUE) ? CHART_UNONAME_NUMFMT : OUString( "PercentageNumberFormat" ); sal_uInt16 nSourceWhich = (nWhichId==SID_ATTR_NUMBERFORMAT_VALUE) ? SID_ATTR_NUMBERFORMAT_SOURCE : SCHATTR_PERCENT_NUMBERFORMAT_SOURCE; if( rItemSet.GetItemState( nSourceWhich ) != SfxItemState::SET ) @@ -131,7 +132,7 @@ bool lcl_NumberFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxItemSe uno::Any aOldValue( xPropertySet->getPropertyValue(aPropertyName) ); if( bOverwriteAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( xPropertySet, uno::UNO_QUERY); + rtl::Reference< DataSeries > xSeries( dynamic_cast<DataSeries*>(xPropertySet.get()) ); if( aValue != aOldValue || ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, aPropertyName, aOldValue ) ) { @@ -152,7 +153,7 @@ bool lcl_UseSourceFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxIte bool bChanged = false; if( !xPropertySet.is() ) return bChanged; - OUString aPropertyName = (nWhichId==SID_ATTR_NUMBERFORMAT_SOURCE) ? OUString(CHART_UNONAME_NUMFMT) : OUString( "PercentageNumberFormat" ); + OUString aPropertyName = (nWhichId==SID_ATTR_NUMBERFORMAT_SOURCE) ? CHART_UNONAME_NUMFMT : OUString( "PercentageNumberFormat" ); sal_uInt16 nFormatWhich = (nWhichId==SID_ATTR_NUMBERFORMAT_SOURCE) ? SID_ATTR_NUMBERFORMAT_VALUE : SCHATTR_PERCENT_NUMBERFORMAT_VALUE; if( rItemSet.GetItemState( nWhichId ) != SfxItemState::SET ) @@ -179,7 +180,7 @@ bool lcl_UseSourceFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxIte uno::Any aOldValue( xPropertySet->getPropertyValue(aPropertyName) ); if( bOverwriteAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( xPropertySet, uno::UNO_QUERY); + rtl::Reference< DataSeries > xSeries( dynamic_cast<DataSeries*>(xPropertySet.get()) ); if( aNewValue != aOldValue || ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, aPropertyName, aOldValue ) ) { @@ -202,12 +203,12 @@ DataPointItemConverter::DataPointItemConverter( const rtl::Reference<::chart::ChartModel> & xChartModel, const uno::Reference< uno::XComponentContext > & xContext, const uno::Reference< beans::XPropertySet > & rPropertySet, - const uno::Reference< XDataSeries > & xSeries, + const rtl::Reference< DataSeries > & xSeries, SfxItemPool& rItemPool, SdrModel& rDrawModel, const uno::Reference<lang::XMultiServiceFactory>& xNamedPropertyContainerFactory, GraphicObjectType eMapTo, - const awt::Size* pRefSize, + const std::optional<awt::Size>& pRefSize, bool bDataSeries, bool bUseSpecialFillColor, sal_Int32 nSpecialFillColor, @@ -232,15 +233,17 @@ DataPointItemConverter::DataPointItemConverter( m_aConverters.emplace_back( new CharacterPropertyItemConverter(rPropertySet, rItemPool, pRefSize, "ReferencePageSize")); if( bDataSeries ) { + assert(dynamic_cast<DataSeries*>(rPropertySet.get())); m_aConverters.emplace_back( new StatisticsItemConverter( xChartModel, rPropertySet, rItemPool )); - m_aConverters.emplace_back( new SeriesOptionsItemConverter( xChartModel, xContext, rPropertySet, rItemPool )); + m_aConverters.emplace_back( new SeriesOptionsItemConverter( xChartModel, xContext, + dynamic_cast<DataSeries*>(rPropertySet.get()), rItemPool )); } - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram(xChartModel) ); - uno::Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram , xSeries ) ); + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xSeries ) ); bool bFound = false; bool bAmbiguous = false; - bool bSwapXAndY = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); + bool bSwapXAndY = xDiagram->getVertical( bFound, bAmbiguous ); m_aAvailableLabelPlacements = ChartTypeHelper::getSupportedLabelPlacements( xChartType, bSwapXAndY, xSeries ); m_bForbidPercentValue = ChartTypeHelper::getAxisType( xChartType, 0 ) != AxisType::CATEGORY; @@ -248,10 +251,10 @@ DataPointItemConverter::DataPointItemConverter( if (bDataSeries) return; - uno::Reference<beans::XPropertySet> xSeriesProp(xSeries, uno::UNO_QUERY); uno::Sequence<sal_Int32> deletedLegendEntriesSeq; - xSeriesProp->getPropertyValue("DeletedLegendEntries") >>= deletedLegendEntriesSeq; - for (const auto& deletedLegendEntry : std::as_const(deletedLegendEntriesSeq)) + // "DeletedLegendEntries" + xSeries->getFastPropertyValue(PROP_DATASERIES_DELETED_LEGEND_ENTRIES) >>= deletedLegendEntriesSeq; + for (const auto& deletedLegendEntry : deletedLegendEntriesSeq) { if (nPointIndex == deletedLegendEntry) { @@ -338,7 +341,7 @@ bool DataPointItemConverter::ApplySpecialItem( rValue = rItem.GetValue(); if( m_bOverwriteLabelsForAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if( bOldValue != bool(rValue) || DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, CHART_UNONAME_LABEL , aOldValue ) ) { @@ -379,7 +382,7 @@ bool DataPointItemConverter::ApplySpecialItem( GetPropertySet()->getPropertyValue( "LabelSeparator" ) >>= aOldValue; if( m_bOverwriteLabelsForAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if( aOldValue != aNewValue || DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, "LabelSeparator" , uno::Any( aOldValue ) ) ) { @@ -410,7 +413,7 @@ bool DataPointItemConverter::ApplySpecialItem( GetPropertySet()->getPropertyValue( "TextWordWrap" ) >>= bOld; if( m_bOverwriteLabelsForAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if( bOld!=bNew || DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, "TextWordWrap", uno::Any( bOld ) ) ) { @@ -442,7 +445,7 @@ bool DataPointItemConverter::ApplySpecialItem( GetPropertySet()->getPropertyValue("LabelPlacement") >>= nOld; if( m_bOverwriteLabelsForAttributedDataPointsAlso ) { - Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if( nOld!=nNew || DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, "LabelPlacement" , uno::Any( nOld ) ) ) { @@ -454,6 +457,7 @@ bool DataPointItemConverter::ApplySpecialItem( { GetPropertySet()->setPropertyValue("LabelPlacement", uno::Any(nNew)); GetPropertySet()->setPropertyValue("CustomLabelPosition", uno::Any()); + GetPropertySet()->setPropertyValue("CustomLabelSize", uno::Any()); bChanged = true; } } @@ -571,17 +575,18 @@ bool DataPointItemConverter::ApplySpecialItem( if (bHideLegendEntry != m_bHideLegendEntry) { uno::Sequence<sal_Int32> deletedLegendEntriesSeq; - Reference<beans::XPropertySet> xSeriesProp(m_xSeries, uno::UNO_QUERY); - xSeriesProp->getPropertyValue("DeletedLegendEntries") >>= deletedLegendEntriesSeq; + // "DeletedLegendEntries" + m_xSeries->getFastPropertyValue(PROP_DATASERIES_DELETED_LEGEND_ENTRIES) >>= deletedLegendEntriesSeq; std::vector<sal_Int32> deletedLegendEntries; - for (const auto& deletedLegendEntry : std::as_const(deletedLegendEntriesSeq)) + for (const auto& deletedLegendEntry : deletedLegendEntriesSeq) { if (bHideLegendEntry || m_nPointIndex != deletedLegendEntry) deletedLegendEntries.push_back(deletedLegendEntry); } if (bHideLegendEntry) deletedLegendEntries.push_back(m_nPointIndex); - xSeriesProp->setPropertyValue("DeletedLegendEntries", uno::makeAny(comphelper::containerToSequence(deletedLegendEntries))); + // "DeletedLegendEntries" + m_xSeries->setFastPropertyValue(PROP_DATASERIES_DELETED_LEGEND_ENTRIES, uno::Any(comphelper::containerToSequence(deletedLegendEntries))); } } break; @@ -592,10 +597,9 @@ bool DataPointItemConverter::ApplySpecialItem( { bool bNew = static_cast<const SfxBoolItem&>(rItemSet.Get(nWhichId)).GetValue(); bool bOld = true; - Reference<beans::XPropertySet> xSeriesProp(m_xSeries, uno::UNO_QUERY); - if( (xSeriesProp->getPropertyValue("ShowCustomLeaderLines") >>= bOld) && bOld != bNew ) + if( (m_xSeries->getFastPropertyValue(PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES) >>= bOld) && bOld != bNew ) { - xSeriesProp->setPropertyValue("ShowCustomLeaderLines", uno::Any(bNew)); + m_xSeries->setFastPropertyValue(PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES, uno::Any(bNew)); bChanged = true; } } @@ -634,7 +638,7 @@ void DataPointItemConverter::FillSpecialItem( if( m_bOverwriteLabelsForAttributedDataPointsAlso ) { if( DataSeriesHelper::hasAttributedDataPointDifferentValue( - Reference< chart2::XDataSeries >( GetPropertySet(), uno::UNO_QUERY), CHART_UNONAME_LABEL , uno::Any(aLabel) ) ) + dynamic_cast<DataSeries*>(GetPropertySet().get()), CHART_UNONAME_LABEL , uno::Any(aLabel) ) ) { rOutItemSet.InvalidateItem(nWhichId); } @@ -759,8 +763,7 @@ void DataPointItemConverter::FillSpecialItem( try { bool bValue = true; - Reference<beans::XPropertySet> xSeriesProp(m_xSeries, uno::UNO_QUERY); - if( xSeriesProp->getPropertyValue( "ShowCustomLeaderLines" ) >>= bValue ) + if( m_xSeries->getFastPropertyValue( PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES ) >>= bValue ) rOutItemSet.Put(SfxBoolItem(nWhichId, bValue)); } catch (const uno::Exception&) @@ -804,7 +807,7 @@ void DataPointItemConverter::FillSpecialItem( if( GetPropertySet()->getPropertyValue( "TextRotation" ) >>= fValue ) { - rOutItemSet.Put( SdrAngleItem( nWhichId, Degree100(static_cast< sal_Int32 >( + rOutItemSet.Put( SdrAngleItem( SCHATTR_TEXT_DEGREES, Degree100(static_cast< sal_Int32 >( ::rtl::math::round( fValue * 100.0 ) ) ))); } } diff --git a/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx b/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx new file mode 100644 index 000000000000..e152bf298dfc --- /dev/null +++ b/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <DataTableItemConverter.hxx> +#include <ItemPropertyMap.hxx> +#include <CharacterPropertyItemConverter.hxx> +#include <GraphicPropertyItemConverter.hxx> +#include <chartview/ChartSfxItemIds.hxx> +#include "SchWhichPairs.hxx" +#include <ChartModel.hxx> +#include <memory> + +using namespace css; + +namespace chart::wrapper +{ +namespace +{ +ItemPropertyMapType& lclDataTablePropertyMap() +{ + static ItemPropertyMapType aPropertyMap{ + { SCHATTR_DATA_TABLE_HORIZONTAL_BORDER, { "HBorder", 0 } }, + { SCHATTR_DATA_TABLE_VERTICAL_BORDER, { "VBorder", 0 } }, + { SCHATTR_DATA_TABLE_OUTLINE, { "Outline", 0 } }, + { SCHATTR_DATA_TABLE_KEYS, { "Keys", 0 } }, + }; + return aPropertyMap; +}; +} + +DataTableItemConverter::DataTableItemConverter( + const uno::Reference<beans::XPropertySet>& rPropertySet, SfxItemPool& rItemPool, + SdrModel& rDrawModel, const rtl::Reference<::chart::ChartModel>& xChartDoc) + : ItemConverter(rPropertySet, rItemPool) +{ + m_aConverters.emplace_back(new GraphicPropertyItemConverter( + rPropertySet, rItemPool, rDrawModel, xChartDoc, GraphicObjectType::LineProperties)); + m_aConverters.emplace_back(new CharacterPropertyItemConverter(rPropertySet, rItemPool)); +} + +DataTableItemConverter::~DataTableItemConverter() = default; + +void DataTableItemConverter::FillItemSet(SfxItemSet& rOutItemSet) const +{ + for (const auto& pConv : m_aConverters) + { + pConv->FillItemSet(rOutItemSet); + } + + // own items + ItemConverter::FillItemSet(rOutItemSet); +} + +bool DataTableItemConverter::ApplyItemSet(const SfxItemSet& rItemSet) +{ + bool bResult = false; + + for (const auto& pConv : m_aConverters) + { + bResult = pConv->ApplyItemSet(rItemSet) || bResult; + } + + // own items + return ItemConverter::ApplyItemSet(rItemSet) || bResult; +} + +const WhichRangesContainer& DataTableItemConverter::GetWhichPairs() const +{ + return nDataTableWhichPairs; +} + +bool DataTableItemConverter::GetItemProperty(tWhichIdType nWhichId, + tPropertyNameWithMemberId& rOutProperty) const +{ + ItemPropertyMapType& rMap(lclDataTablePropertyMap()); + auto aIt = rMap.find(nWhichId); + if (aIt == rMap.cend()) + return false; + + rOutProperty = (*aIt).second; + + return true; +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/itemsetwrapper/ErrorBarItemConverter.cxx b/chart2/source/controller/itemsetwrapper/ErrorBarItemConverter.cxx index 89c4e8cc212a..33e09062a9a7 100644 --- a/chart2/source/controller/itemsetwrapper/ErrorBarItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/ErrorBarItemConverter.cxx @@ -30,7 +30,8 @@ #include <com/sun/star/chart2/XInternalDataProvider.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -78,7 +79,7 @@ namespace chart::wrapper { ErrorBarItemConverter::ErrorBarItemConverter( - const uno::Reference< frame::XModel > & xModel, + uno::Reference< frame::XModel > xModel, const uno::Reference< beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool, SdrModel& rDrawModel, @@ -88,7 +89,7 @@ ErrorBarItemConverter::ErrorBarItemConverter( rPropertySet, rItemPool, rDrawModel, xNamedPropertyContainerFactory, GraphicObjectType::LineProperties )), - m_xModel( xModel ) + m_xModel(std::move( xModel )) {} ErrorBarItemConverter::~ErrorBarItemConverter() @@ -356,7 +357,7 @@ void ErrorBarItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( GetPropertySet(), fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, SCHATTR_STAT_PERCENT )); } break; @@ -364,7 +365,7 @@ void ErrorBarItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( GetPropertySet(), fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, SCHATTR_STAT_BIGERROR )); } break; @@ -372,7 +373,7 @@ void ErrorBarItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( GetPropertySet(), fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( fPos, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( fPos, SCHATTR_STAT_CONSTPLUS )); } break; @@ -380,7 +381,7 @@ void ErrorBarItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( GetPropertySet(), fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( fNeg, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( fNeg, SCHATTR_STAT_CONSTMINUS )); } break; diff --git a/chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter.cxx b/chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter.cxx index e265e4198180..ac0b961ba2e4 100644 --- a/chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter.cxx @@ -39,7 +39,8 @@ #include <com/sun/star/drawing/BitmapMode.hpp> #include <com/sun/star/container/XNameAccess.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -137,12 +138,12 @@ GraphicPropertyItemConverter::GraphicPropertyItemConverter( beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool, SdrModel& rDrawModel, - const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, + uno::Reference< lang::XMultiServiceFactory > xNamedPropertyContainerFactory, GraphicObjectType eObjectType /* = FILL_PROPERTIES */ ) : ItemConverter( rPropertySet, rItemPool ), m_GraphicObjectType( eObjectType ), m_rDrawModel( rDrawModel ), - m_xNamedPropertyTableFactory( xNamedPropertyContainerFactory ) + m_xNamedPropertyTableFactory(std::move( xNamedPropertyContainerFactory )) {} GraphicPropertyItemConverter::~GraphicPropertyItemConverter() @@ -425,7 +426,7 @@ bool GraphicPropertyItemConverter::ApplySpecialItem( case XATTR_FILLBMP_STRETCH: if( lcl_supportsFillProperties( m_GraphicObjectType )) { - static const OUStringLiteral aModePropName(u"FillBitmapMode"); + static constexpr OUString aModePropName(u"FillBitmapMode"_ustr); bool bStretched = rItemSet.Get( XATTR_FILLBMP_STRETCH ).GetValue(); drawing::BitmapMode aMode = (bStretched ? drawing::BitmapMode_STRETCH : drawing::BitmapMode_NO_REPEAT); @@ -447,7 +448,7 @@ bool GraphicPropertyItemConverter::ApplySpecialItem( case XATTR_FILLBMP_TILE: if( lcl_supportsFillProperties( m_GraphicObjectType )) { - static const OUStringLiteral aModePropName(u"FillBitmapMode"); + static constexpr OUString aModePropName(u"FillBitmapMode"_ustr); bool bTiled = rItemSet.Get( XATTR_FILLBMP_TILE ).GetValue(); drawing::BitmapMode aMode = (bTiled ? drawing::BitmapMode_REPEAT : drawing::BitmapMode_NO_REPEAT); diff --git a/chart2/source/controller/itemsetwrapper/ItemConverter.cxx b/chart2/source/controller/itemsetwrapper/ItemConverter.cxx index e90fad016cfd..3d4cf2abc309 100644 --- a/chart2/source/controller/itemsetwrapper/ItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/ItemConverter.cxx @@ -25,17 +25,18 @@ #include <svl/itemiter.hxx> #include <svl/whiter.hxx> #include <svx/svxids.hrc> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <sal/log.hxx> +#include <utility> using namespace ::com::sun::star; namespace chart::wrapper { ItemConverter::ItemConverter( - const uno::Reference< beans::XPropertySet > & rPropertySet, + uno::Reference< beans::XPropertySet > xPropertySet, SfxItemPool& rItemPool ) : - m_xPropertySet( rPropertySet ), + m_xPropertySet(std::move( xPropertySet )), m_rItemPool( rItemPool ) { resetPropertySet( m_xPropertySet ); @@ -94,7 +95,7 @@ void ItemConverter::FillItemSet( SfxItemSet & rOutItemSet ) const if( GetItemProperty( nWhich, aProperty )) { // put the Property into the itemset - std::unique_ptr<SfxPoolItem> pItem(rPool.GetDefaultItem( nWhich ).Clone()); + std::unique_ptr<SfxPoolItem> pItem(rPool.GetUserOrPoolDefaultItem( nWhich ).Clone()); if( pItem ) { @@ -157,7 +158,7 @@ bool ItemConverter::ApplyItemSet( const SfxItemSet & rItemSet ) for (const SfxPoolItem* pItem = aIter.GetCurItem(); pItem; pItem = aIter.NextItem()) { - if( rItemSet.GetItemState( pItem->Which(), false ) == SfxItemState::SET ) + if( aIter.GetItemState( false ) == SfxItemState::SET ) { if( GetItemProperty( pItem->Which(), aProperty )) { @@ -198,7 +199,8 @@ void ItemConverter::InvalidateUnequalItems( SfxItemSet &rDestSet, const SfxItem while (nWhich) { - if ((rSourceSet.GetItemState(nWhich, true, &pPoolItem) == SfxItemState::SET) && + SfxItemState nSourceItemState = aIter.GetItemState(true, &pPoolItem); + if ((nSourceItemState == SfxItemState::SET) && (rDestSet.GetItemState(nWhich, true, &pPoolItem) == SfxItemState::SET)) { if (rSourceSet.Get(nWhich) != rDestSet.Get(nWhich)) @@ -209,7 +211,7 @@ void ItemConverter::InvalidateUnequalItems( SfxItemSet &rDestSet, const SfxItem } } } - else if( rSourceSet.GetItemState(nWhich, true, &pPoolItem) == SfxItemState::DONTCARE ) + else if( nSourceItemState == SfxItemState::INVALID ) rDestSet.InvalidateItem(nWhich); nWhich = aIter.NextWhich (); diff --git a/chart2/source/controller/itemsetwrapper/LegendItemConverter.cxx b/chart2/source/controller/itemsetwrapper/LegendItemConverter.cxx index 081e8ebbd390..255445764b04 100644 --- a/chart2/source/controller/itemsetwrapper/LegendItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/LegendItemConverter.cxx @@ -27,7 +27,7 @@ #include <svl/intitem.hxx> #include <svl/eitem.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <memory> @@ -41,7 +41,7 @@ LegendItemConverter::LegendItemConverter( SfxItemPool& rItemPool, SdrModel& rDrawModel, const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, - const awt::Size* pRefSize ) : + const std::optional<awt::Size>& pRefSize ) : ItemConverter( rPropertySet, rItemPool ) { m_aConverters.emplace_back( new GraphicPropertyItemConverter( @@ -96,10 +96,9 @@ bool LegendItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSe { case SCHATTR_LEGEND_SHOW: { - const SfxPoolItem* pPoolItem = nullptr; - if( rInItemSet.GetItemState( SCHATTR_LEGEND_SHOW, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxBoolItem* pShowItem = rInItemSet.GetItemIfSet( SCHATTR_LEGEND_SHOW ) ) { - bool bShow = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue(); + bool bShow = pShowItem->GetValue(); bool bWasShown = true; if( ! (GetPropertySet()->getPropertyValue( "Show" ) >>= bWasShown) || ( bWasShown != bShow )) @@ -113,10 +112,9 @@ bool LegendItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSe break; case SCHATTR_LEGEND_POS: { - const SfxPoolItem* pPoolItem = nullptr; - if( rInItemSet.GetItemState( SCHATTR_LEGEND_POS, true, &pPoolItem ) == SfxItemState::SET ) + if( const SfxInt32Item* pPosItem = rInItemSet.GetItemIfSet( SCHATTR_LEGEND_POS ) ) { - chart2::LegendPosition eNewPos = static_cast<chart2::LegendPosition>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue()); + chart2::LegendPosition eNewPos = static_cast<chart2::LegendPosition>(pPosItem->GetValue()); css::chart::ChartLegendExpansion eExpansion = css::chart::ChartLegendExpansion_HIGH; switch( eNewPos ) @@ -154,10 +152,9 @@ bool LegendItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSe break; case SCHATTR_LEGEND_NO_OVERLAY: { - const SfxPoolItem* pPoolItem = nullptr; - if(rInItemSet.GetItemState(SCHATTR_LEGEND_NO_OVERLAY, true, &pPoolItem) == SfxItemState::SET) + if(const SfxBoolItem* pNoOverlayItem = rInItemSet.GetItemIfSet(SCHATTR_LEGEND_NO_OVERLAY)) { - bool bOverlay = !static_cast<const SfxBoolItem *>(pPoolItem)->GetValue(); + bool bOverlay = !pNoOverlayItem->GetValue(); bool bOldOverlay = false; if(!(GetPropertySet()->getPropertyValue("Overlay") >>= bOldOverlay) || (bOldOverlay != bOverlay)) diff --git a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx index 7c67ef59c139..ef0a1fc4c098 100644 --- a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx +++ b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx @@ -27,15 +27,13 @@ #include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> +#include <DataSeries.hxx> +#include <GridProperties.hxx> #include <TitleHelper.hxx> #include <TitleItemConverter.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <chartview/ExplicitValueProvider.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XDataSeries.hpp> -#include <com/sun/star/chart2/XTitle.hpp> -#include <com/sun/star/util/XNumberFormatsSupplier.hpp> -#include <com/sun/star/chart2/XAxis.hpp> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -48,14 +46,14 @@ AllAxisItemConverter::AllAxisItemConverter( const rtl::Reference<::chart::ChartModel> & xChartModel, SfxItemPool& rItemPool, SdrModel& rDrawModel, - const awt::Size* pRefSize ) + const std::optional<awt::Size>& pRefSize ) : MultipleItemConverter( rItemPool ) { - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); - const Sequence< Reference< XAxis > > aElementList( AxisHelper::getAllAxesOfDiagram( xDiagram ) ); - for( Reference< XAxis > const & axis : aElementList ) + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + const std::vector< rtl::Reference< Axis > > aElementList = AxisHelper::getAllAxesOfDiagram( xDiagram ); + for( rtl::Reference< Axis > const & axis : aElementList ) { - uno::Reference< beans::XPropertySet > xObjectProperties(axis, uno::UNO_QUERY); + uno::Reference< beans::XPropertySet > xObjectProperties(axis); m_aConverters.emplace_back( new ::chart::wrapper::AxisItemConverter( xObjectProperties, rItemPool, rDrawModel, xChartModel, nullptr, nullptr, @@ -80,9 +78,9 @@ AllGridItemConverter::AllGridItemConverter( const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory ) : MultipleItemConverter( rItemPool ) { - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); - const Sequence< Reference< beans::XPropertySet > > aElementList( AxisHelper::getAllGrids( xDiagram ) ); - for( Reference< beans::XPropertySet > const & xObjectProperties : aElementList ) + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + std::vector< rtl::Reference< GridProperties > > aElementList( AxisHelper::getAllGrids( xDiagram ) ); + for( rtl::Reference< GridProperties > const & xObjectProperties : aElementList ) { m_aConverters.emplace_back( new ::chart::wrapper::GraphicPropertyItemConverter( xObjectProperties, rItemPool, rDrawModel, xNamedPropertyContainerFactory, @@ -107,23 +105,22 @@ AllDataLabelItemConverter::AllDataLabelItemConverter( const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory ) : MultipleItemConverter( rItemPool ) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( - ::chart::ChartModelHelper::getDataSeries( xChartModel )); + std::vector< rtl::Reference< DataSeries > > aSeriesList = + ::chart::ChartModelHelper::getDataSeries( xChartModel ); for (auto const& series : aSeriesList) { - uno::Reference< beans::XPropertySet > xObjectProperties(series, uno::UNO_QUERY); uno::Reference< uno::XComponentContext> xContext;//do not need Context for label properties - sal_Int32 nNumberFormat=ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( xObjectProperties ); + sal_Int32 nNumberFormat=ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( series ); sal_Int32 nPercentNumberFormat=ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel( - xObjectProperties,xChartModel); + series,xChartModel); m_aConverters.emplace_back( new ::chart::wrapper::DataPointItemConverter( - xChartModel, xContext, xObjectProperties, series, rItemPool, rDrawModel, + xChartModel, xContext, series, series, rItemPool, rDrawModel, xNamedPropertyContainerFactory, GraphicObjectType::FilledDataPoint, - nullptr, true, false, 0, true, nNumberFormat, nPercentNumberFormat)); + std::nullopt, true, false, 0, true, nNumberFormat, nPercentNumberFormat)); } } @@ -146,13 +143,13 @@ AllTitleItemConverter::AllTitleItemConverter( { for(sal_Int32 nTitle = TitleHelper::TITLE_BEGIN; nTitle < TitleHelper::NORMAL_TITLE_END; nTitle++ ) { - uno::Reference< chart2::XTitle > xTitle( TitleHelper::getTitle( TitleHelper::eTitleType(nTitle), xChartModel ) ); + rtl::Reference< Title > xTitle( TitleHelper::getTitle( TitleHelper::eTitleType(nTitle), xChartModel ) ); if(!xTitle.is()) continue; - uno::Reference< beans::XPropertySet > xObjectProperties( xTitle, uno::UNO_QUERY); + uno::Reference< beans::XPropertySet > xObjectProperties( xTitle ); m_aConverters.emplace_back( new ::chart::wrapper::TitleItemConverter( - xObjectProperties, rItemPool, rDrawModel, xNamedPropertyContainerFactory, nullptr)); + xObjectProperties, rItemPool, rDrawModel, xNamedPropertyContainerFactory, std::nullopt)); } } @@ -171,14 +168,13 @@ AllSeriesStatisticsConverter::AllSeriesStatisticsConverter( SfxItemPool& rItemPool ) : MultipleItemConverter( rItemPool ) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( - ::chart::ChartModelHelper::getDataSeries( xChartModel )); + std::vector< rtl::Reference< DataSeries > > aSeriesList = + ::chart::ChartModelHelper::getDataSeries( xChartModel ); for (auto const& series : aSeriesList) { - uno::Reference< beans::XPropertySet > xObjectProperties(series, uno::UNO_QUERY); m_aConverters.emplace_back( new ::chart::wrapper::StatisticsItemConverter( - xChartModel, xObjectProperties, rItemPool )); + xChartModel, series, rItemPool )); } } diff --git a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx index f98ec6375f3b..da521d874df6 100644 --- a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx @@ -18,9 +18,11 @@ */ #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> #include <RegressionCurveItemConverter.hxx> #include "SchWhichPairs.hxx" #include <GraphicPropertyItemConverter.hxx> +#include <DataSeries.hxx> #include <com/sun/star/chart2/XRegressionCurve.hpp> #include <osl/diagnose.h> @@ -28,6 +30,7 @@ #include <svl/eitem.hxx> #include <svl/intitem.hxx> #include <svl/stritem.hxx> +#include <utility> using namespace ::com::sun::star; @@ -65,12 +68,12 @@ void lclConvertToItemSet(SfxItemSet& rItemSet, sal_uInt16 nWhichId, const uno::R } } -void lclConvertToItemSetDouble(SfxItemSet& rItemSet, sal_uInt16 nWhichId, const uno::Reference<beans::XPropertySet>& xProperties, const OUString& aPropertyID) +void lclConvertToItemSetDouble(SfxItemSet& rItemSet, TypedWhichId<SvxDoubleItem> nWhichId, const uno::Reference<beans::XPropertySet>& xProperties, const OUString& aPropertyID) { OSL_ASSERT(xProperties.is()); if( xProperties.is() ) { - double aValue = static_cast<const SvxDoubleItem&>(rItemSet.Get( nWhichId )).GetValue(); + double aValue = rItemSet.Get( nWhichId ).GetValue(); if(xProperties->getPropertyValue( aPropertyID ) >>= aValue) { rItemSet.Put(SvxDoubleItem( aValue, nWhichId )); @@ -85,7 +88,7 @@ namespace chart::wrapper RegressionCurveItemConverter::RegressionCurveItemConverter( const uno::Reference< beans::XPropertySet >& rPropertySet, - const uno::Reference< chart2::XRegressionCurveContainer >& xContainer, + rtl::Reference< DataSeries > xContainer, SfxItemPool& rItemPool, SdrModel& rDrawModel, const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory ) : @@ -94,7 +97,7 @@ RegressionCurveItemConverter::RegressionCurveItemConverter( rPropertySet, rItemPool, rDrawModel, xNamedPropertyContainerFactory, GraphicObjectType::LineProperties )), - m_xCurveContainer( xContainer ) + m_xCurveContainer(std::move( xContainer )) {} RegressionCurveItemConverter::~RegressionCurveItemConverter() @@ -283,13 +286,13 @@ void RegressionCurveItemConverter::FillSpecialItem(sal_uInt16 nWhichId, SfxItemS case SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD: { - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "ExtrapolateForward"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD, xProperties, "ExtrapolateForward"); } break; case SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD: { - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "ExtrapolateBackward"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD, xProperties, "ExtrapolateBackward"); } break; @@ -301,7 +304,7 @@ void RegressionCurveItemConverter::FillSpecialItem(sal_uInt16 nWhichId, SfxItemS case SCHATTR_REGRESSION_INTERCEPT_VALUE: { - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "InterceptValue"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_INTERCEPT_VALUE, xProperties, "InterceptValue"); } break; diff --git a/chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter.cxx b/chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter.cxx index 22fc379b2a2c..9b10afd4f79d 100644 --- a/chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/RegressionEquationItemConverter.cxx @@ -49,7 +49,7 @@ RegressionEquationItemConverter::RegressionEquationItemConverter( SfxItemPool& rItemPool, SdrModel& rDrawModel, const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, - const awt::Size* pRefSize ) : + const std::optional<awt::Size>& pRefSize ) : ItemConverter( rPropertySet, rItemPool ) { m_aConverters.emplace_back( new GraphicPropertyItemConverter( diff --git a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx index 3c1387009afd..676527f3fef3 100644 --- a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx +++ b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx @@ -171,4 +171,11 @@ const WhichRangesContainer nRegEquationWhichPairs(svl::Items< SID_CHAR_DLG_PREVIEW_STRING, SID_CHAR_DLG_PREVIEW_STRING // Characters >); +const WhichRangesContainer nDataTableWhichPairs(svl::Items< + SCHATTR_DATA_TABLE_START, SCHATTR_DATA_TABLE_END, + XATTR_LINE_FIRST, XATTR_LINE_LAST, // 1000 - 1016 svx/xdef.hxx + XATTR_FILL_FIRST, XATTR_FILL_LAST, // 1018 - 1046 svx/xdef.hxx + EE_ITEMS_START, EE_ITEMS_END +>); + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx index 4d035c061b6c..653e7bf20e5a 100644 --- a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx @@ -21,6 +21,8 @@ #include "SchWhichPairs.hxx" #include <ChartModelHelper.hxx> +#include <ChartType.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <DiagramHelper.hxx> #include <Diagram.hxx> @@ -29,13 +31,12 @@ #include <ChartModel.hxx> #include <BaseCoordinateSystem.hxx> -#include <com/sun/star/chart2/XDataSeries.hpp> - #include <svl/eitem.hxx> #include <svl/intitem.hxx> #include <svl/ilstitem.hxx> #include <svx/sdangitm.hxx> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -45,12 +46,12 @@ namespace chart::wrapper SeriesOptionsItemConverter::SeriesOptionsItemConverter( const rtl::Reference<::chart::ChartModel>& xChartModel - , const uno::Reference< uno::XComponentContext > & xContext - , const uno::Reference< beans::XPropertySet >& xPropertySet + , uno::Reference< uno::XComponentContext > xContext + , const rtl::Reference< ::chart::DataSeries >& xDataSeries , SfxItemPool& rItemPool ) - : ItemConverter( xPropertySet, rItemPool ) + : ItemConverter( xDataSeries, rItemPool ) , m_xChartModel(xChartModel) - , m_xCC(xContext) + , m_xCC(std::move(xContext)) , m_bAttachToMainAxis(true) , m_bSupportingOverlapAndGapWidthProperties(false) , m_bSupportingBarConnectors(false) @@ -69,22 +70,20 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter( { try { - uno::Reference< XDataSeries > xDataSeries( xPropertySet, uno::UNO_QUERY ); - m_bAttachToMainAxis = DiagramHelper::isSeriesAttachedToMainAxis( xDataSeries ); - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram(xChartModel) ); - uno::Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram , xDataSeries ) ); + rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xDataSeries ) ); m_xCooSys = DataSeriesHelper::getCoordinateSystemOfSeries( xDataSeries, xDiagram ); if( m_xCooSys.is() ) { - uno::Reference< chart2::XAxis > xAxis( AxisHelper::getAxis( 1, 0, m_xCooSys ) ); + rtl::Reference< Axis > xAxis = AxisHelper::getAxis( 1, 0, m_xCooSys ); chart2::ScaleData aScale( xAxis->getScaleData() ); m_bClockwise = (aScale.Orientation == chart2::AxisOrientation_REVERSE); } - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + sal_Int32 nDimensionCount = xDiagram->getDimension(); m_bSupportingOverlapAndGapWidthProperties = ChartTypeHelper::isSupportingOverlapAndGapWidthProperties( xChartType, nDimensionCount ); if( m_bSupportingOverlapAndGapWidthProperties ) @@ -93,15 +92,14 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter( sal_Int32 nAxisIndex = DataSeriesHelper::getAttachedAxisIndex(xDataSeries); uno::Sequence< sal_Int32 > aBarPositionSequence; - uno::Reference< beans::XPropertySet > xChartTypeProps( xChartType, uno::UNO_QUERY ); - if( xChartTypeProps.is() ) + if( xChartType.is() ) { - if( xChartTypeProps->getPropertyValue( "OverlapSequence" ) >>= aBarPositionSequence ) + if( xChartType->getPropertyValue( "OverlapSequence" ) >>= aBarPositionSequence ) { if( nAxisIndex >= 0 && nAxisIndex < aBarPositionSequence.getLength() ) m_nBarOverlap = aBarPositionSequence[nAxisIndex]; } - if( xChartTypeProps->getPropertyValue( "GapwidthSequence" ) >>= aBarPositionSequence ) + if( xChartType->getPropertyValue( "GapwidthSequence" ) >>= aBarPositionSequence ) { if( nAxisIndex >= 0 && nAxisIndex < aBarPositionSequence.getLength() ) m_nGapWidth = aBarPositionSequence[nAxisIndex]; @@ -128,8 +126,7 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter( } m_aSupportedMissingValueTreatments = ChartTypeHelper::getSupportedMissingValueTreatments( xChartType ); - m_nMissingValueTreatment = DiagramHelper::getCorrectedMissingValueTreatment( - ChartModelHelper::findDiagram(m_xChartModel), xChartType ); + m_nMissingValueTreatment = xDiagram->getCorrectedMissingValueTreatment( xChartType ); uno::Reference< beans::XPropertySet > xProp( m_xChartModel->getDataProvider(), uno::UNO_QUERY ); if( xProp.is() ) @@ -147,7 +144,7 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter( } } - m_bHideLegendEntry = !xPropertySet->getPropertyValue("ShowLegendEntry").get<bool>(); + m_bHideLegendEntry = !xDataSeries->getPropertyValue("ShowLegendEntry").get<bool>(); } catch( const uno::Exception & ) { @@ -183,8 +180,9 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf if( bAttachToMainAxis != m_bAttachToMainAxis ) { //change model: - bChanged = DiagramHelper::attachSeriesToAxis( bAttachToMainAxis, uno::Reference< XDataSeries >::query( GetPropertySet() ) - , ChartModelHelper::findDiagram(m_xChartModel), m_xCC ); + rtl::Reference<DataSeries> xDataSeries = dynamic_cast<DataSeries*>( GetPropertySet().get() ); + bChanged = m_xChartModel->getFirstChartDiagram()->attachSeriesToAxis( bAttachToMainAxis, xDataSeries + , m_xCC ); if( bChanged ) m_bAttachToMainAxis = bAttachToMainAxis; @@ -204,30 +202,27 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf if( nWhichId == SCHATTR_BAR_OVERLAP ) aPropName = "OverlapSequence"; - uno::Reference< XDataSeries > xDataSeries( GetPropertySet(), uno::UNO_QUERY ); - rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram(m_xChartModel) ); - uno::Reference< beans::XPropertySet > xChartTypeProps( DiagramHelper::getChartTypeOfSeries( xDiagram , xDataSeries ), uno::UNO_QUERY ); - if( xChartTypeProps.is() ) + rtl::Reference< DataSeries > xDataSeries( dynamic_cast<DataSeries*>(GetPropertySet().get()) ); + rtl::Reference< Diagram > xDiagram( m_xChartModel->getFirstChartDiagram() ); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xDataSeries ) ); + if( xChartType.is() ) { sal_Int32 nAxisIndex = DataSeriesHelper::getAttachedAxisIndex(xDataSeries); uno::Sequence< sal_Int32 > aBarPositionSequence; - if( xChartTypeProps.is() ) + if( xChartType->getPropertyValue( aPropName ) >>= aBarPositionSequence ) { - if( xChartTypeProps->getPropertyValue( aPropName ) >>= aBarPositionSequence ) + bool bGroupBarsPerAxis = rItemSet.Get( SCHATTR_GROUP_BARS_PER_AXIS ).GetValue(); + if(!bGroupBarsPerAxis) { - bool bGroupBarsPerAxis = rItemSet.Get( SCHATTR_GROUP_BARS_PER_AXIS ).GetValue(); - if(!bGroupBarsPerAxis) - { - //set the same value for all axes - for( auto & pos : asNonConstRange(aBarPositionSequence) ) - pos = rBarPosition; - } - else if( nAxisIndex >= 0 && nAxisIndex < aBarPositionSequence.getLength() ) - aBarPositionSequence.getArray()[nAxisIndex] = rBarPosition; - - xChartTypeProps->setPropertyValue( aPropName, uno::Any(aBarPositionSequence) ); - bChanged = true; + //set the same value for all axes + for( auto & pos : asNonConstRange(aBarPositionSequence) ) + pos = rBarPosition; } + else if( nAxisIndex >= 0 && nAxisIndex < aBarPositionSequence.getLength() ) + aBarPositionSequence.getArray()[nAxisIndex] = rBarPosition; + + xChartType->setPropertyValue( aPropName, uno::Any(aBarPositionSequence) ); + bChanged = true; } } } @@ -241,7 +236,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf if( m_bSupportingBarConnectors ) { bool bOldConnectBars = false; - rtl::Reference< Diagram > xDiagramProperties( ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY ); + rtl::Reference< Diagram > xDiagramProperties( m_xChartModel->getFirstChartDiagram() ); if( xDiagramProperties.is() && (xDiagramProperties->getPropertyValue( "ConnectBars" ) >>= bOldConnectBars) && bOldConnectBars != m_bConnectBars ) @@ -260,7 +255,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf if( m_bSupportingAxisSideBySide ) { bool bOldGroupBarsPerAxis = true; - rtl::Reference< Diagram > xDiagramProperties( ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY ); + rtl::Reference< Diagram > xDiagramProperties( m_xChartModel->getFirstChartDiagram() ); if( xDiagramProperties.is() && (xDiagramProperties->getPropertyValue( "GroupBarsPerAxis" ) >>= bOldGroupBarsPerAxis) && bOldGroupBarsPerAxis != m_bGroupBarsPerAxis ) @@ -277,7 +272,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf if( m_bSupportingStartingAngle ) { m_nStartingAngle = static_cast< const SdrAngleItem & >( rItemSet.Get( nWhichId )).GetValue().get() / 100; - rtl::Reference< Diagram > xDiagramProperties( ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY ); + rtl::Reference< Diagram > xDiagramProperties( m_xChartModel->getFirstChartDiagram() ); if( xDiagramProperties.is() ) { xDiagramProperties->setPropertyValue( "StartingAngle" , uno::Any(m_nStartingAngle) ); @@ -293,7 +288,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf rItemSet.Get( nWhichId )).GetValue(); if( m_xCooSys.is() ) { - uno::Reference< chart2::XAxis > xAxis( AxisHelper::getAxis( 1, 0, m_xCooSys ) ); + rtl::Reference< Axis > xAxis = AxisHelper::getAxis( 1, 0, m_xCooSys ); if( xAxis.is() ) { chart2::ScaleData aScaleData( xAxis->getScaleData() ); @@ -314,7 +309,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf { try { - rtl::Reference< Diagram > xDiagramProperties( ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY ); + rtl::Reference< Diagram > xDiagramProperties( m_xChartModel->getFirstChartDiagram() ); if( xDiagramProperties.is() ) { xDiagramProperties->setPropertyValue( "MissingValueTreatment" , uno::Any( nNew )); @@ -347,7 +342,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const Sf bool bHideLegendEntry = static_cast<const SfxBoolItem &>(rItemSet.Get(nWhichId)).GetValue(); if (bHideLegendEntry != m_bHideLegendEntry) { - GetPropertySet()->setPropertyValue("ShowLegendEntry", css::uno::makeAny(!bHideLegendEntry)); + GetPropertySet()->setPropertyValue("ShowLegendEntry", css::uno::Any(!bHideLegendEntry)); } } break; @@ -397,7 +392,7 @@ void SeriesOptionsItemConverter::FillSpecialItem( case SCHATTR_STARTING_ANGLE: { if( m_bSupportingStartingAngle ) - rOutItemSet.Put( SdrAngleItem(nWhichId, Degree100(m_nStartingAngle*100)) ); + rOutItemSet.Put( SdrAngleItem(SCHATTR_STARTING_ANGLE, Degree100(m_nStartingAngle*100)) ); break; } case SCHATTR_CLOCKWISE: diff --git a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx index a900466b85b8..c725972c249b 100644 --- a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx @@ -20,6 +20,7 @@ #include <StatisticsItemConverter.hxx> #include "SchWhichPairs.hxx" #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> #include <ErrorBar.hxx> #include <StatisticsHelper.hxx> #include <ChartModel.hxx> @@ -31,10 +32,10 @@ #include <rtl/math.hxx> #include <com/sun/star/chart2/XInternalDataProvider.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -49,7 +50,7 @@ uno::Reference< beans::XPropertySet > lcl_GetErrorBar( if( xProp.is()) try { - ( xProp->getPropertyValue( bYError ? OUString(CHART_UNONAME_ERRORBAR_Y) : OUString(CHART_UNONAME_ERRORBAR_X) ) >>= xResult ); + ( xProp->getPropertyValue( bYError ? CHART_UNONAME_ERRORBAR_Y : CHART_UNONAME_ERRORBAR_X ) >>= xResult ); } catch( const uno::Exception & ) { @@ -107,10 +108,9 @@ uno::Reference< beans::XPropertySet > lcl_getEquationProperties( // ensure that a trendline is on if( pItemSet ) { - const SfxPoolItem *pPoolItem = nullptr; - if( pItemSet->GetItemState( SCHATTR_REGRESSION_TYPE, true, &pPoolItem ) == SfxItemState::SET ) + if( const SvxChartRegressItem* pRegressionItem = pItemSet->GetItemIfSet( SCHATTR_REGRESSION_TYPE ) ) { - SvxChartRegress eRegress = static_cast< const SvxChartRegressItem * >( pPoolItem )->GetValue(); + SvxChartRegress eRegress = pRegressionItem->GetValue(); bEquationExists = ( eRegress != SvxChartRegress::NONE ); } } @@ -118,8 +118,8 @@ uno::Reference< beans::XPropertySet > lcl_getEquationProperties( if( bEquationExists ) { uno::Reference< chart2::XRegressionCurveContainer > xRegCnt( xSeriesPropSet, uno::UNO_QUERY ); - uno::Reference< chart2::XRegressionCurve > xCurve( - ::chart::RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt )); + rtl::Reference< ::chart::RegressionCurveModel > xCurve = + ::chart::RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt ); if( xCurve.is()) { return xCurve->getEquationProperties(); @@ -137,10 +137,9 @@ uno::Reference< beans::XPropertySet > lcl_getCurveProperties( // ensure that a trendline is on if( pItemSet ) { - const SfxPoolItem *pPoolItem = nullptr; - if( pItemSet->GetItemState( SCHATTR_REGRESSION_TYPE, true, &pPoolItem ) == SfxItemState::SET ) + if( const SvxChartRegressItem* pRegressionItem = pItemSet->GetItemIfSet( SCHATTR_REGRESSION_TYPE ) ) { - SvxChartRegress eRegress = static_cast< const SvxChartRegressItem * >( pPoolItem )->GetValue(); + SvxChartRegress eRegress = pRegressionItem->GetValue(); bExists = ( eRegress != SvxChartRegress::NONE ); } } @@ -192,12 +191,12 @@ void lclConvertToItemSet(SfxItemSet& rItemSet, sal_uInt16 nWhichId, const uno::R } } -void lclConvertToItemSetDouble(SfxItemSet& rItemSet, sal_uInt16 nWhichId, const uno::Reference<beans::XPropertySet>& xProperties, const OUString& aPropertyID) +void lclConvertToItemSetDouble(SfxItemSet& rItemSet, TypedWhichId<SvxDoubleItem> nWhichId, const uno::Reference<beans::XPropertySet>& xProperties, const OUString& aPropertyID) { OSL_ASSERT(xProperties.is()); if( xProperties.is() ) { - double aValue = static_cast<const SvxDoubleItem&>(rItemSet.Get( nWhichId )).GetValue(); + double aValue = rItemSet.Get( nWhichId ).GetValue(); if(xProperties->getPropertyValue( aPropertyID ) >>= aValue) { rItemSet.Put(SvxDoubleItem( aValue, nWhichId )); @@ -211,11 +210,11 @@ namespace chart::wrapper { StatisticsItemConverter::StatisticsItemConverter( - const rtl::Reference<::chart::ChartModel> & xModel, + rtl::Reference<::chart::ChartModel> xModel, const uno::Reference< beans::XPropertySet > & rPropertySet, SfxItemPool& rItemPool ) : ItemConverter( rPropertySet, rItemPool ), - m_xModel( xModel ) + m_xModel(std::move( xModel )) { } @@ -309,7 +308,7 @@ bool StatisticsItemConverter::ApplySpecialItem( if( !xErrorBarProp.is() ) { xErrorBarProp = lcl_GetDefaultErrorBar(); - GetPropertySet()->setPropertyValue( bYError ? OUString(CHART_UNONAME_ERRORBAR_Y) : OUString(CHART_UNONAME_ERRORBAR_X), + GetPropertySet()->setPropertyValue( bYError ? CHART_UNONAME_ERRORBAR_Y : CHART_UNONAME_ERRORBAR_X, uno::Any( xErrorBarProp )); } @@ -663,7 +662,7 @@ void StatisticsItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( xErrorBarProp, fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, SCHATTR_STAT_PERCENT )); } } break; @@ -677,7 +676,7 @@ void StatisticsItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( xErrorBarProp, fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( ( fPos + fNeg ) / 2.0, SCHATTR_STAT_BIGERROR )); } } break; @@ -691,7 +690,7 @@ void StatisticsItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( xErrorBarProp, fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( fPos, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( fPos, SCHATTR_STAT_CONSTPLUS )); } } break; @@ -705,7 +704,7 @@ void StatisticsItemConverter::FillSpecialItem( { double fPos(0.0), fNeg(0.0); lcl_getErrorValues( xErrorBarProp, fPos, fNeg ); - rOutItemSet.Put( SvxDoubleItem( fNeg, nWhichId )); + rOutItemSet.Put( SvxDoubleItem( fNeg, SCHATTR_STAT_CONSTMINUS )); } } break; @@ -745,14 +744,14 @@ void StatisticsItemConverter::FillSpecialItem( case SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD: { uno::Reference< beans::XPropertySet > xProperties( lcl_getCurveProperties( GetPropertySet(), nullptr )); - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "ExtrapolateForward"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_EXTRAPOLATE_FORWARD, xProperties, "ExtrapolateForward"); } break; case SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD: { uno::Reference< beans::XPropertySet > xProperties( lcl_getCurveProperties( GetPropertySet(), nullptr )); - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "ExtrapolateBackward"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_EXTRAPOLATE_BACKWARD, xProperties, "ExtrapolateBackward"); } break; @@ -766,7 +765,7 @@ void StatisticsItemConverter::FillSpecialItem( case SCHATTR_REGRESSION_INTERCEPT_VALUE: { uno::Reference< beans::XPropertySet > xProperties( lcl_getCurveProperties( GetPropertySet(), nullptr )); - lclConvertToItemSetDouble(rOutItemSet, nWhichId, xProperties, "InterceptValue"); + lclConvertToItemSetDouble(rOutItemSet, SCHATTR_REGRESSION_INTERCEPT_VALUE, xProperties, "InterceptValue"); } break; diff --git a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx index 36a0686e95f7..a8838f3b24e0 100644 --- a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx @@ -20,10 +20,11 @@ #include <TextLabelItemConverter.hxx> #include <CharacterPropertyItemConverter.hxx> #include <ChartModel.hxx> -#include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> -#include <DiagramHelper.hxx> +#include <DataSeriesProperties.hxx> #include <Diagram.hxx> #include <ItemPropertyMap.hxx> #include "SchWhichPairs.hxx" @@ -37,7 +38,7 @@ #include <svl/stritem.hxx> #include <svx/tabline.hxx> #include <svx/sdangitm.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <vcl/graph.hxx> #include <rtl/math.hxx> @@ -46,12 +47,12 @@ #include <com/sun/star/chart2/DataPointLabel.hpp> #include <com/sun/star/chart2/Symbol.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <memory> using namespace com::sun::star; using namespace com::sun::star::chart2; using com::sun::star::uno::Reference; +using namespace ::chart::DataSeriesProperties; namespace chart::wrapper { @@ -100,7 +101,7 @@ bool numberFormatFromItemToPropertySet( if (!xPropertySet.is()) return bChanged; - OUString aPropertyName = (nWhichId == SID_ATTR_NUMBERFORMAT_VALUE) ? OUString(CHART_UNONAME_NUMFMT) : OUString("PercentageNumberFormat"); + OUString aPropertyName = (nWhichId == SID_ATTR_NUMBERFORMAT_VALUE) ? CHART_UNONAME_NUMFMT : OUString("PercentageNumberFormat"); sal_uInt16 nSourceWhich = (nWhichId == SID_ATTR_NUMBERFORMAT_VALUE) ? SID_ATTR_NUMBERFORMAT_SOURCE : SCHATTR_PERCENT_NUMBERFORMAT_SOURCE; if (rItemSet.GetItemState(nSourceWhich) != SfxItemState::SET) @@ -125,7 +126,7 @@ bool numberFormatFromItemToPropertySet( uno::Any aOldValue = xPropertySet->getPropertyValue(aPropertyName); if (bOverwriteDataPoints) { - Reference<chart2::XDataSeries> xSeries(xPropertySet, uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries( dynamic_cast<DataSeries*>(xPropertySet.get()) ); if (aValue != aOldValue || ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, aPropertyName, aOldValue)) { @@ -148,7 +149,7 @@ bool useSourceFormatFromItemToPropertySet( bool bChanged = false; if (!xPropertySet.is()) return bChanged; - OUString aPropertyName = (nWhichId == SID_ATTR_NUMBERFORMAT_SOURCE) ? OUString(CHART_UNONAME_NUMFMT) : OUString("PercentageNumberFormat"); + OUString aPropertyName = (nWhichId == SID_ATTR_NUMBERFORMAT_SOURCE) ? CHART_UNONAME_NUMFMT : OUString("PercentageNumberFormat"); sal_uInt16 nFormatWhich = (nWhichId == SID_ATTR_NUMBERFORMAT_SOURCE) ? SID_ATTR_NUMBERFORMAT_VALUE : SCHATTR_PERCENT_NUMBERFORMAT_VALUE; if (rItemSet.GetItemState(nWhichId) != SfxItemState::SET) @@ -175,7 +176,7 @@ bool useSourceFormatFromItemToPropertySet( uno::Any aOldValue(xPropertySet->getPropertyValue(aPropertyName)); if (bOverwriteDataPoints) { - Reference<chart2::XDataSeries> xSeries(xPropertySet, uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(xPropertySet.get())); if (aNewValue != aOldValue || ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, aPropertyName, aOldValue)) { @@ -197,8 +198,8 @@ bool useSourceFormatFromItemToPropertySet( TextLabelItemConverter::TextLabelItemConverter( const rtl::Reference<::chart::ChartModel>& xChartModel, const uno::Reference<beans::XPropertySet>& rPropertySet, - const uno::Reference<XDataSeries>& xSeries, - SfxItemPool& rItemPool, const awt::Size* pRefSize, + const rtl::Reference<DataSeries>& xSeries, + SfxItemPool& rItemPool, const std::optional<awt::Size>& pRefSize, bool bDataSeries, sal_Int32 nNumberFormat, sal_Int32 nPercentNumberFormat ) : ItemConverter(rPropertySet, rItemPool), mnNumberFormat(nNumberFormat), @@ -209,11 +210,11 @@ TextLabelItemConverter::TextLabelItemConverter( { maConverters.emplace_back(new CharacterPropertyItemConverter(rPropertySet, rItemPool, pRefSize, "ReferencePageSize")); - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xChartModel)); - uno::Reference<XChartType> xChartType(DiagramHelper::getChartTypeOfSeries(xDiagram, xSeries)); + rtl::Reference< Diagram > xDiagram(xChartModel->getFirstChartDiagram()); + rtl::Reference< ChartType > xChartType(xDiagram->getChartTypeOfSeries(xSeries)); bool bFound = false; bool bAmbiguous = false; - bool bSwapXAndY = DiagramHelper::getVertical(xDiagram, bFound, bAmbiguous); + bool bSwapXAndY = xDiagram->getVertical(bFound, bAmbiguous); maAvailableLabelPlacements = ChartTypeHelper::getSupportedLabelPlacements(xChartType, bSwapXAndY, xSeries); mbForbidPercentValue = ChartTypeHelper::getAxisType(xChartType, 0) != AxisType::CATEGORY; @@ -287,7 +288,7 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte rValue = rItem.GetValue(); if (mbDataSeries) { - Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if (bOldValue != bool(rValue) || DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, CHART_UNONAME_LABEL, aOldValue)) { @@ -325,7 +326,7 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte GetPropertySet()->getPropertyValue("LabelSeparator") >>= aOldValue; if (mbDataSeries) { - Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if (aOldValue != aNewValue || DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, "LabelSeparator", uno::Any(aOldValue))) { @@ -355,7 +356,7 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte GetPropertySet()->getPropertyValue( "TextWordWrap" ) >>= bOld; if( mbDataSeries ) { - Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); + rtl::Reference< DataSeries > xSeries( dynamic_cast<DataSeries*>(GetPropertySet().get()) ); if( bOld!=bNew || DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, "TextWordWrap", uno::Any( bOld ) ) ) { @@ -385,7 +386,7 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte GetPropertySet()->getPropertyValue("LabelPlacement") >>= nOld; if (mbDataSeries) { - Reference<chart2::XDataSeries> xSeries(GetPropertySet(), uno::UNO_QUERY); + rtl::Reference<DataSeries> xSeries(dynamic_cast<DataSeries*>(GetPropertySet().get())); if (nOld != nNew || DataSeriesHelper::hasAttributedDataPointDifferentValue(xSeries, "LabelPlacement", uno::Any(nOld))) { @@ -397,6 +398,7 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte { GetPropertySet()->setPropertyValue("LabelPlacement", uno::Any(nNew)); GetPropertySet()->setPropertyValue("CustomLabelPosition", uno::Any()); + GetPropertySet()->setPropertyValue("CustomLabelSize", uno::Any()); bChanged = true; } } @@ -511,10 +513,9 @@ bool TextLabelItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxIte { bool bNew = static_cast<const SfxBoolItem&>(rItemSet.Get(nWhichId)).GetValue(); bool bOld = true; - Reference<beans::XPropertySet> xSeriesProp(m_xSeries, uno::UNO_QUERY); - if( (xSeriesProp->getPropertyValue("ShowCustomLeaderLines") >>= bOld) && bOld != bNew ) + if( (m_xSeries->getFastPropertyValue(PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES) >>= bOld) && bOld != bNew ) { - xSeriesProp->setPropertyValue("ShowCustomLeaderLines", uno::Any(bNew)); + m_xSeries->setFastPropertyValue(PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES, uno::Any(bNew)); bChanged = true; } } @@ -552,7 +553,7 @@ void TextLabelItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet& r if (mbDataSeries) { if (DataSeriesHelper::hasAttributedDataPointDifferentValue( - Reference<chart2::XDataSeries>(GetPropertySet(), uno::UNO_QUERY), CHART_UNONAME_LABEL, uno::Any(aLabel))) + dynamic_cast<DataSeries*>(GetPropertySet().get()), CHART_UNONAME_LABEL, uno::Any(aLabel))) { rOutItemSet.InvalidateItem(nWhichId); } @@ -668,8 +669,7 @@ void TextLabelItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet& r try { bool bValue = true; - Reference<beans::XPropertySet> xSeriesProp(m_xSeries, uno::UNO_QUERY); - if( xSeriesProp->getPropertyValue( "ShowCustomLeaderLines" ) >>= bValue ) + if( m_xSeries->getFastPropertyValue( PROP_DATASERIES_SHOW_CUSTOM_LEADERLINES ) >>= bValue ) rOutItemSet.Put(SfxBoolItem(nWhichId, bValue)); } catch (const uno::Exception&) @@ -711,7 +711,7 @@ void TextLabelItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet& r if (GetPropertySet()->getPropertyValue("TextRotation") >>= fValue) { rOutItemSet.Put( - SdrAngleItem(nWhichId, Degree100(static_cast<sal_Int32>(rtl::math::round(fValue * 100.0))))); + SdrAngleItem(SCHATTR_TEXT_DEGREES, Degree100(static_cast<sal_Int32>(rtl::math::round(fValue * 100.0))))); } } break; diff --git a/chart2/source/controller/itemsetwrapper/TitleItemConverter.cxx b/chart2/source/controller/itemsetwrapper/TitleItemConverter.cxx index 605eb07b4692..1327a0a0d91b 100644 --- a/chart2/source/controller/itemsetwrapper/TitleItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/TitleItemConverter.cxx @@ -50,7 +50,7 @@ public: FormattedStringsConverter( const uno::Sequence< uno::Reference< chart2::XFormattedString > > & aStrings, SfxItemPool & rItemPool, - const awt::Size* pRefSize, + const std::optional<awt::Size>& pRefSize, const uno::Reference< beans::XPropertySet > & xParentProp ); protected: @@ -62,7 +62,7 @@ protected: FormattedStringsConverter::FormattedStringsConverter( const uno::Sequence< uno::Reference< chart2::XFormattedString > > & aStrings, SfxItemPool & rItemPool, - const awt::Size* pRefSize, + const std::optional<awt::Size>& pRefSize, const uno::Reference< beans::XPropertySet > & xParentProp ) : MultipleItemConverter( rItemPool ) { @@ -92,7 +92,7 @@ TitleItemConverter::TitleItemConverter( SfxItemPool& rItemPool, SdrModel& rDrawModel, const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, - const awt::Size* pRefSize ) : + const std::optional<awt::Size>& pRefSize ) : ItemConverter( rPropertySet, rItemPool ) { m_aConverters.emplace_back( new GraphicPropertyItemConverter( @@ -197,7 +197,7 @@ void TitleItemConverter::FillSpecialItem( if( GetPropertySet()->getPropertyValue( "TextRotation" ) >>= fVal ) { - rOutItemSet.Put( SdrAngleItem( nWhichId, Degree100(static_cast< sal_Int32 >( + rOutItemSet.Put( SdrAngleItem( SCHATTR_TEXT_DEGREES, Degree100(static_cast< sal_Int32 >( ::rtl::math::round( fVal * 100.0 ) ) ))); } } diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index 5a25f761e896..2bd0bf549e89 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -22,22 +22,23 @@ #include <config_wasm_strip.h> #include <ChartController.hxx> +#include <ChartView.hxx> #include <servicenames.hxx> #include <ResId.hxx> #include <dlg_DataSource.hxx> #include <ChartModel.hxx> #include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include "ControllerCommandDispatch.hxx" +#include <DataSeries.hxx> #include <Diagram.hxx> #include <strings.hrc> -#include <chartview/ExplicitValueProvider.hxx> #include <ChartViewHelper.hxx> #include <ChartWindow.hxx> #include <chartview/DrawModelWrapper.hxx> #include <DrawViewWrapper.hxx> #include <ObjectIdentifier.hxx> -#include <DiagramHelper.hxx> #include <ControllerLockGuard.hxx> #include "UndoGuard.hxx" #include "ChartDropTargetHelper.hxx" @@ -51,42 +52,36 @@ #include "UndoActions.hxx" #include <ViewElementListProvider.hxx> -#include <cppuhelper/supportsservice.hxx> -#include <comphelper/servicehelper.hxx> +#include <comphelper/dispatchcommand.hxx> #include <BaseCoordinateSystem.hxx> -#include <com/sun/star/awt/XWindowPeer.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/data/XDataReceiver.hpp> #include <com/sun/star/frame/XController2.hpp> #include <com/sun/star/util/CloseVetoException.hpp> -#include <com/sun/star/util/XModeChangeBroadcaster.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/frame/LayoutManagerEvents.hpp> #include <com/sun/star/frame/XLayoutManagerEventBroadcaster.hpp> -#include <com/sun/star/document/XUndoManagerSupplier.hpp> #include <com/sun/star/ui/XSidebar.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> #include <com/sun/star/chart2/XDataProviderAccess.hpp> +#include <com/sun/star/sheet/XSpreadsheetDocument.hpp> #include <sal/log.hxx> #include <tools/debug.hxx> #include <svx/sidebar/SelectionChangeHandler.hxx> #include <toolkit/helper/vclunohelper.hxx> +#include <utility> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> #include <osl/mutex.hxx> +#include <comphelper/lok.hxx> #include <sfx2/sidebar/SidebarController.hxx> - +#include <com/sun/star/awt/XVclWindowPeer.hpp> #include <com/sun/star/frame/XLayoutManager.hpp> // this is needed to properly destroy the unique_ptr to the AcceleratorExecute // object in the DTOR #include <svtools/acceleratorexecute.hxx> #include <svx/ActionDescriptionProvider.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> // enable the following define to let the controller listen to model changes and // react on this by rebuilding the view @@ -101,10 +96,10 @@ using namespace ::com::sun::star::chart2; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; -ChartController::ChartController(uno::Reference<uno::XComponentContext> const & xContext) : +ChartController::ChartController(uno::Reference<uno::XComponentContext> xContext) : m_aLifeTimeManager( nullptr ), m_bSuspended( false ), - m_xCC(xContext), + m_xCC(std::move(xContext)), m_aModel( nullptr, m_aModelMutex ), m_eDragMode(SdrDragMode::Move), m_aDoubleClickTimer("chart2 ChartController m_aDoubleClickTimer"), @@ -127,8 +122,8 @@ ChartController::~ChartController() stopDoubleClickWaiting(); } -ChartController::TheModel::TheModel( const rtl::Reference<::chart::ChartModel> & xModel ) : - m_xModel( xModel ), +ChartController::TheModel::TheModel( rtl::Reference<::chart::ChartModel> xModel ) : + m_xModel(std::move( xModel )), m_bOwnership( true ) { } @@ -231,20 +226,17 @@ bool ChartController::TheModelRef::is() const namespace { -css::uno::Reference<css::chart2::XChartType> getChartType( - const rtl::Reference<ChartModel>& xChartDoc) +rtl::Reference<ChartType> getChartType(const rtl::Reference<ChartModel>& xChartDoc) { rtl::Reference<Diagram > xDiagram = xChartDoc->getFirstChartDiagram(); if (!xDiagram.is()) - return css::uno::Reference<css::chart2::XChartType>(); + return nullptr; - const std::vector< rtl::Reference< BaseCoordinateSystem > > xCooSysSequence( xDiagram->getBaseCoordinateSystems()); + const std::vector< rtl::Reference< BaseCoordinateSystem > > & xCooSysSequence( xDiagram->getBaseCoordinateSystems()); if (xCooSysSequence.empty()) - return css::uno::Reference<css::chart2::XChartType>(); - - Sequence< Reference< chart2::XChartType > > xChartTypeSequence( xCooSysSequence[0]->getChartTypes() ); + return nullptr; - return xChartTypeSequence[0]; + return xCooSysSequence[0]->getChartTypes2()[0]; } } @@ -279,7 +271,7 @@ OUString ChartController::GetContextName() return "Grid"; case OBJECTTYPE_DIAGRAM: { - css::uno::Reference<css::chart2::XChartType> xChartType = getChartType(getChartModel()); + rtl::Reference<ChartType> xChartType = getChartType(getChartModel()); if (xChartType.is() && xChartType->getChartType() == "com.sun.star.chart2.PieChartType") return "ChartElements"; break; @@ -309,27 +301,6 @@ bool ChartController::impl_isDisposedOrSuspended() const return false; } -// lang::XServiceInfo - -OUString SAL_CALL ChartController::getImplementationName() -{ - return CHART_CONTROLLER_SERVICE_IMPLEMENTATION_NAME; -} - -sal_Bool SAL_CALL ChartController::supportsService( const OUString& rServiceName ) -{ - return cppu::supportsService(this, rServiceName); -} - -css::uno::Sequence< OUString > SAL_CALL ChartController::getSupportedServiceNames() -{ - return { - CHART_CONTROLLER_SERVICE_NAME, - "com.sun.star.frame.Controller" - //// @todo : add additional services if you support any further - }; -} - namespace { uno::Reference<ui::XSidebar> getSidebarFromModel(const uno::Reference<frame::XModel>& xModel) @@ -365,19 +336,6 @@ void SAL_CALL ChartController::attachFrame( if( impl_isDisposedOrSuspended() ) //@todo? allow attaching the frame while suspended? return; //behave passive if already disposed or suspended - mpSelectionChangeHandler->Connect(); - - uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getModel()); - if (xSidebar.is()) - { - auto pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get()); - assert(pSidebar); - sfx2::sidebar::SidebarController::registerSidebarForFrame(pSidebar, this); - pSidebar->updateModel(getModel()); - css::lang::EventObject aEvent; - mpSelectionChangeHandler->selectionChanged(aEvent); - } - if(m_xFrame.is()) //what happens, if we do have a Frame already?? { //@todo? throw exception? @@ -388,6 +346,20 @@ void SAL_CALL ChartController::attachFrame( //--attach frame m_xFrame = xFrame; //the frameloader is responsible to call xFrame->setComponent + // Only notify after setting the frame, otherwise notification will fail + mpSelectionChangeHandler->Connect(); + + uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getChartModel()); + if (xSidebar.is()) + { + auto pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get()); + assert(pSidebar); + pSidebar->registerSidebarForFrame(this); + pSidebar->updateModel(getChartModel()); + css::lang::EventObject aEvent; + mpSelectionChangeHandler->selectionChanged(aEvent); + } + //add as disposelistener to the frame (due to persistent reference) ??...: //the frame is considered to be owner of this controller and will live longer than we do @@ -546,9 +518,8 @@ sal_Bool SAL_CALL ChartController::attachModel( const uno::Reference< frame::XMo //--handle relations to the old model if any if( aOldModelRef.is() ) { - uno::Reference< util::XModeChangeBroadcaster > xViewBroadcaster( m_xChartView, uno::UNO_QUERY ); - if( xViewBroadcaster.is() ) - xViewBroadcaster->removeModeChangeListener(this); + if( m_xChartView.is() ) + m_xChartView->removeModeChangeListener(this); m_pDrawModelWrapper.reset(); aOldModelRef->removeListener( this ); @@ -590,14 +561,12 @@ sal_Bool SAL_CALL ChartController::attachModel( const uno::Reference< frame::XMo // select chart area per default: // select( uno::Any( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_PAGE, OUString() ) ) ); - uno::Reference< lang::XMultiServiceFactory > xFact( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xFact = getChartModel(); if( xFact.is()) { - m_xChartView = xFact->createInstance( CHART_VIEW_SERVICE_NAME ); + m_xChartView = dynamic_cast<::chart::ChartView*>(xFact->createInstance( CHART_VIEW_SERVICE_NAME ).get()); GetDrawModelWrapper(); - uno::Reference< util::XModeChangeBroadcaster > xViewBroadcaster( m_xChartView, uno::UNO_QUERY ); - if( xViewBroadcaster.is() ) - xViewBroadcaster->addModeChangeListener(this); + m_xChartView->addModeChangeListener(this); } //the frameloader is responsible to call xModel->connectController @@ -608,8 +577,7 @@ sal_Bool SAL_CALL ChartController::attachModel( const uno::Reference< frame::XMo pChartWindow->Invalidate(); } - uno::Reference< document::XUndoManagerSupplier > xSuppUndo( getModel(), uno::UNO_QUERY_THROW ); - m_xUndoManager.set( xSuppUndo->getUndoManager(), uno::UNO_SET_THROW ); + m_xUndoManager.set( getChartModel()->getUndoManager(), uno::UNO_SET_THROW ); return true; } @@ -642,7 +610,7 @@ rtl::Reference<::chart::ChartModel> ChartController::getChartModel() rtl::Reference<::chart::Diagram> ChartController::getFirstDiagram() { - return ChartModelHelper::findDiagram( getChartModel() ); + return getChartModel()->getFirstChartDiagram(); } uno::Any SAL_CALL ChartController::getViewData() @@ -698,6 +666,24 @@ sal_Bool SAL_CALL ChartController::suspend( sal_Bool bSuspend ) return true; } +// css::frame::XController2 + +css::uno::Reference<css::awt::XWindow> SAL_CALL ChartController::getComponentWindow() +{ + // it is a special characteristic of ChartController + // that it simultaneously provides the XWindow functionality + return this; +} + +OUString SAL_CALL ChartController::getViewControllerName() { return {}; } + +css::uno::Sequence<css::beans::PropertyValue> SAL_CALL ChartController::getCreationArguments() +{ + return {}; +} + +css::uno::Reference<css::ui::XSidebarProvider> SAL_CALL ChartController::getSidebar() { return {}; } + void ChartController::impl_createDrawViewController() { SolarMutexGuard aGuard; @@ -705,8 +691,21 @@ void ChartController::impl_createDrawViewController() { if( m_pDrawModelWrapper ) { + bool bLokCalcGlobalRTL = false; + if(comphelper::LibreOfficeKit::isActive() && AllSettings::GetLayoutRTL()) + { + rtl::Reference< ChartModel > xChartModel = getChartModel(); + if (xChartModel.is()) + { + uno::Reference<css::sheet::XSpreadsheetDocument> xSSDoc(xChartModel->getParent(), uno::UNO_QUERY); + if (xSSDoc.is()) + bLokCalcGlobalRTL = true; + } + } + m_pDrawViewWrapper.reset( new DrawViewWrapper(m_pDrawModelWrapper->getSdrModel(),GetChartWindow()->GetOutDev()) ); - m_pDrawViewWrapper->attachParentReferenceDevice( getModel() ); + m_pDrawViewWrapper->SetNegativeX(bLokCalcGlobalRTL); + m_pDrawViewWrapper->attachParentReferenceDevice( getChartModel() ); } } } @@ -733,10 +732,10 @@ void SAL_CALL ChartController::dispose() if (getModel().is()) { - uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getModel()); + uno::Reference<ui::XSidebar> xSidebar = getSidebarFromModel(getChartModel()); if (sfx2::sidebar::SidebarController* pSidebar = dynamic_cast<sfx2::sidebar::SidebarController*>(xSidebar.get())) { - sfx2::sidebar::SidebarController::unregisterSidebarForFrame(pSidebar, this); + pSidebar->unregisterSidebarForFrame(this); } } @@ -759,7 +758,7 @@ void SAL_CALL ChartController::dispose() if( m_aModel.is()) { uno::Reference< view::XSelectionChangeListener > xSelectionChangeListener; - uno::Reference< chart2::data::XDataReceiver > xDataReceiver( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xDataReceiver = getChartModel(); if( xDataReceiver.is() ) xSelectionChangeListener.set( xDataReceiver->getRangeHighlighter(), uno::UNO_QUERY ); if( xSelectionChangeListener.is() ) @@ -772,9 +771,8 @@ void SAL_CALL ChartController::dispose() //--release all resources and references { - uno::Reference< util::XModeChangeBroadcaster > xViewBroadcaster( m_xChartView, uno::UNO_QUERY ); - if( xViewBroadcaster.is() ) - xViewBroadcaster->removeModeChangeListener(this); + if( m_xChartView.is() ) + m_xChartView->removeModeChangeListener(this); impl_invalidateAccessible(); SolarMutexGuard aSolarGuard; @@ -793,7 +791,7 @@ void SAL_CALL ChartController::dispose() if( m_xLayoutManagerEventBroadcaster.is()) { m_xLayoutManagerEventBroadcaster->removeLayoutManagerEventListener( this ); - m_xLayoutManagerEventBroadcaster.set( nullptr ); + m_xLayoutManagerEventBroadcaster.clear(); } m_xFrame.clear(); @@ -839,12 +837,12 @@ void SAL_CALL ChartController::dispose() void SAL_CALL ChartController::addEventListener( const uno::Reference<lang::XEventListener>& xListener ) { - SolarMutexGuard aGuard; if( impl_isDisposedOrSuspended() )//@todo? allow adding of listeners in suspend mode? return; //behave passive if already disposed or suspended //--add listener - m_aLifeTimeManager.m_aListenerContainer.addInterface( cppu::UnoType<lang::XEventListener>::get(), xListener ); + std::unique_lock aGuard2(m_aLifeTimeManager.m_aAccessMutex); + m_aLifeTimeManager.m_aEventListeners.addInterface( aGuard2, xListener ); } void SAL_CALL ChartController::removeEventListener( @@ -855,7 +853,8 @@ void SAL_CALL ChartController::removeEventListener( return; //behave passive if already disposed or suspended //--remove listener - m_aLifeTimeManager.m_aListenerContainer.removeInterface( cppu::UnoType<lang::XEventListener>::get(), xListener ); + std::unique_lock aGuard2(m_aLifeTimeManager.m_aAccessMutex); + m_aLifeTimeManager.m_aEventListeners.removeInterface( aGuard2, xListener ); } // util::XCloseListener @@ -936,7 +935,7 @@ void SAL_CALL ChartController::disposing( if( !impl_releaseThisModel( rSource.Source )) { if( rSource.Source == m_xLayoutManagerEventBroadcaster ) - m_xLayoutManagerEventBroadcaster.set( nullptr ); + m_xLayoutManagerEventBroadcaster.clear(); } } @@ -1115,7 +1114,7 @@ void SAL_CALL ChartController::dispatch( } else if(aCommand.startsWith("FillGradient")) { - this->executeDispatch_FillGradient(aCommand.copy(aCommand.indexOf('=') + 1)); + this->executeDispatch_FillGradient(aCommand.subView(aCommand.indexOf('=') + 1)); } else if(aCommand == "Paste") this->executeDispatch_Paste(); @@ -1127,7 +1126,7 @@ void SAL_CALL ChartController::dispatch( this->executeDispatch_SourceData(); else if(aCommand == "Update" ) //Update Chart { - ChartViewHelper::setViewToDirtyState( getModel() ); + ChartViewHelper::setViewToDirtyState( getChartModel() ); SolarMutexGuard aGuard; auto pChartWindow(GetChartWindow()); if( pChartWindow ) @@ -1160,6 +1159,8 @@ void SAL_CALL ChartController::dispatch( this->executeDispatch_InsertErrorBars(false); else if( aCommand == "InsertMenuYErrorBars" ) this->executeDispatch_InsertErrorBars(true); + else if( aCommand == "InsertMenuDataTable" ) + this->executeDispatch_OpenInsertDataTableDialog(); else if( aCommand == "InsertSymbol" ) this->executeDispatch_InsertSpecialCharacter(); else if( aCommand == "InsertTrendline" ) @@ -1214,6 +1215,10 @@ void SAL_CALL ChartController::dispatch( this->executeDispatch_DeleteMajorGrid(); else if( aCommand == "DeleteMinorGrid" ) this->executeDispatch_DeleteMinorGrid(); + else if( aCommand == "InsertDataTable" ) + this->executeDispatch_InsertDataTable(); + else if( aCommand == "DeleteDataTable" ) + this->executeDispatch_DeleteDataTable(); //format objects else if( aCommand == "FormatSelection" ) this->executeDispatch_ObjectProperties(); @@ -1228,7 +1233,9 @@ void SAL_CALL ChartController::dispatch( this->executeDispatch_PositionAndSize(); } } - else if( lcl_isFormatObjectCommand(aCommand) ) + else if ( aCommand == "FontDialog" ) + this->impl_ShapeControllerDispatch(rURL, rArgs); + else if (lcl_isFormatObjectCommand(aCommand)) this->executeDispatch_FormatObject(rURL.Path); //more format else if( aCommand == "DiagramType" ) @@ -1292,6 +1299,8 @@ void SAL_CALL ChartController::dispatch( } } } + else if( aCommand == "ChangeTheme" ) + comphelper::dispatchCommand(".uno:ChangeTheme", getFrame(), rArgs); } void SAL_CALL ChartController::addStatusListener( @@ -1326,17 +1335,19 @@ void SAL_CALL ChartController::releaseContextMenuInterceptor( void ChartController::executeDispatch_ChartType() { - UndoLiveUpdateGuard aUndoGuard( - SchResId( STR_ACTION_EDIT_CHARTTYPE ), m_xUndoManager ); + auto xUndoGuard = std::make_shared<UndoLiveUpdateGuard>(SchResId(STR_ACTION_EDIT_CHARTTYPE), + m_xUndoManager); SolarMutexGuard aSolarGuard; //prepare and open dialog - ChartTypeDialog aDlg(GetChartFrame(), getChartModel()); - if (aDlg.run() == RET_OK) - { - impl_adaptDataSeriesAutoResize(); - aUndoGuard.commit(); - } + auto aDlg = std::make_shared<ChartTypeDialog>(GetChartFrame(), getChartModel()); + weld::DialogController::runAsync(aDlg, [this, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if (nResult == RET_OK) + { + impl_adaptDataSeriesAutoResize(); + xUndoGuard->commit(); + } + }); } void ChartController::executeDispatch_SourceData() @@ -1378,17 +1389,17 @@ void ChartController::executeDispatch_SourceData() rModel.attachDataProvider(xDataProvider); } } - - UndoLiveUpdateGuard aUndoGuard( - SchResId(STR_ACTION_EDIT_DATA_RANGES), m_xUndoManager); - + auto xUndoGuard = std::make_shared<UndoLiveUpdateGuard>(SchResId(STR_ACTION_EDIT_DATA_RANGES), + m_xUndoManager); SolarMutexGuard aSolarGuard; - ::chart::DataSourceDialog aDlg(GetChartFrame(), xChartDoc, m_xCC); - if (aDlg.run() == RET_OK) - { - impl_adaptDataSeriesAutoResize(); - aUndoGuard.commit(); - } + auto aDlg = std::make_shared<DataSourceDialog>(GetChartFrame(), xChartDoc); + weld::DialogController::runAsync(aDlg, [this, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if (nResult == RET_OK) + { + impl_adaptDataSeriesAutoResize(); + xUndoGuard->commit(); + } + }); } void ChartController::executeDispatch_MoveSeries( bool bForward ) @@ -1397,8 +1408,8 @@ void ChartController::executeDispatch_MoveSeries( bool bForward ) //get selected series OUString aObjectCID(m_aSelection.getSelectedCID()); - uno::Reference< XDataSeries > xGivenDataSeries( ObjectIdentifier::getDataSeriesForCID( //yyy todo also legend entries and labels? - aObjectCID, getChartModel() ) ); + rtl::Reference< DataSeries > xGivenDataSeries = ObjectIdentifier::getDataSeriesForCID( //yyy todo also legend entries and labels? + aObjectCID, getChartModel() ); UndoGuardWithSelection aUndoGuard( ActionDescriptionProvider::createDescription( @@ -1406,7 +1417,7 @@ void ChartController::executeDispatch_MoveSeries( bool bForward ) SchResId(STR_OBJECT_DATASERIES)), m_xUndoManager ); - bool bChanged = DiagramHelper::moveSeries( getFirstDiagram(), xGivenDataSeries, bForward ); + bool bChanged = getFirstDiagram()->moveSeries( xGivenDataSeries, bForward ); if( bChanged ) { m_aSelection.setSelection( ObjectIdentifier::getMovedSeriesCID( aObjectCID, bForward ) ); @@ -1414,38 +1425,6 @@ void ChartController::executeDispatch_MoveSeries( bool bForward ) } } -// ____ XMultiServiceFactory ____ -uno::Reference< uno::XInterface > SAL_CALL - ChartController::createInstance( const OUString& aServiceSpecifier ) -{ - uno::Reference< uno::XInterface > xResult; - -#if !ENABLE_WASM_STRIP_ACCESSIBILITY - if( aServiceSpecifier == CHART_ACCESSIBLE_TEXT_SERVICE_NAME ) - xResult.set( impl_createAccessibleTextContext()); -#else - (void)aServiceSpecifier; -#endif - - return xResult; -} - -uno::Reference< uno::XInterface > SAL_CALL - ChartController::createInstanceWithArguments( - const OUString& ServiceSpecifier, - const uno::Sequence< uno::Any >& /* Arguments */ ) -{ - // ignore Arguments - return createInstance( ServiceSpecifier ); -} - -uno::Sequence< OUString > SAL_CALL - ChartController::getAvailableServiceNames() -{ - uno::Sequence< OUString > aServiceNames { CHART_ACCESSIBLE_TEXT_SERVICE_NAME }; - return aServiceNames; -} - // ____ XModifyListener ____ void SAL_CALL ChartController::modified( const lang::EventObject& /* aEvent */ ) @@ -1465,7 +1444,7 @@ void ChartController::NotifyUndoActionHdl( std::unique_ptr<SdrUndoAction> pUndoA try { - const Reference< document::XUndoManagerSupplier > xSuppUndo( getModel(), uno::UNO_QUERY_THROW ); + rtl::Reference< ChartModel > xSuppUndo = getChartModel(); const Reference< document::XUndoManager > xUndoManager( xSuppUndo->getUndoManager(), uno::UNO_SET_THROW ); const Reference< document::XUndoAction > xAction( new impl::ShapeUndoElement( std::move(pUndoAction) ) ); xUndoManager->addUndoAction( xAction ); @@ -1480,9 +1459,8 @@ DrawModelWrapper* ChartController::GetDrawModelWrapper() { if( !m_pDrawModelWrapper ) { - ExplicitValueProvider* pProvider = comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_xChartView ); - if( pProvider ) - m_pDrawModelWrapper = pProvider->getDrawModelWrapper(); + if( m_xChartView ) + m_pDrawModelWrapper = m_xChartView->getDrawModelWrapper(); if ( m_pDrawModelWrapper ) { m_pDrawModelWrapper->getSdrModel().SetNotifyUndoActionHdl( @@ -1541,8 +1519,8 @@ void ChartController::SetAndApplySelection(const Reference<drawing::XShape>& rxS uno::Reference< XAccessible > ChartController::CreateAccessible() { #if !ENABLE_WASM_STRIP_ACCESSIBILITY - uno::Reference< XAccessible > xResult = new AccessibleChartView( GetDrawViewWrapper() ); - impl_initializeAccessible( uno::Reference< lang::XInitialization >( xResult, uno::UNO_QUERY ) ); + rtl::Reference< AccessibleChartView > xResult = new AccessibleChartView( GetDrawViewWrapper() ); + impl_initializeAccessible( *xResult ); return xResult; #else return uno::Reference< XAccessible >(); @@ -1551,30 +1529,35 @@ uno::Reference< XAccessible > ChartController::CreateAccessible() void ChartController::impl_invalidateAccessible() { +#if !ENABLE_WASM_STRIP_ACCESSIBILITY SolarMutexGuard aGuard; auto pChartWindow(GetChartWindow()); if( pChartWindow ) { - Reference< lang::XInitialization > xInit( pChartWindow->GetAccessible(false), uno::UNO_QUERY ); + Reference< XInterface > xInit( pChartWindow->GetAccessible(false) ); if(xInit.is()) { - uno::Sequence< uno::Any > aArguments(3);//empty arguments -> invalid accessible - xInit->initialize(aArguments); + //empty arguments -> invalid accessible + dynamic_cast<AccessibleChartView&>(*xInit).initialize(); } } +#endif } void ChartController::impl_initializeAccessible() { +#if !ENABLE_WASM_STRIP_ACCESSIBILITY SolarMutexGuard aGuard; auto pChartWindow(GetChartWindow()); - if( pChartWindow ) - this->impl_initializeAccessible( Reference< lang::XInitialization >( pChartWindow->GetAccessible(false), uno::UNO_QUERY ) ); + if( !pChartWindow ) + return; + Reference< XInterface > xInit( pChartWindow->GetAccessible(false) ); + if(xInit.is()) + impl_initializeAccessible( dynamic_cast<AccessibleChartView&>(*xInit) ); +#endif } -void ChartController::impl_initializeAccessible( const uno::Reference< lang::XInitialization >& xInit ) +#if !ENABLE_WASM_STRIP_ACCESSIBILITY +void ChartController::impl_initializeAccessible( AccessibleChartView& rAccChartView ) { - if(!xInit.is()) - return; - uno::Reference< XAccessible > xParent; { SolarMutexGuard aGuard; @@ -1586,14 +1569,12 @@ void ChartController::impl_initializeAccessible( const uno::Reference< lang::XIn xParent.set( pParentWin->GetAccessible()); } } - uno::Sequence< uno::Any > aArguments{ uno::Any(uno::Reference<view::XSelectionSupplier>(this)), - uno::Any(getModel()), - uno::Any(m_xChartView), - uno::Any(xParent), - uno::Any(m_xViewWindow) }; - xInit->initialize(aArguments); + rAccChartView.initialize(*this, getChartModel(), m_xChartView, xParent, m_xViewWindow); } +#else +void ChartController::impl_initializeAccessible( AccessibleChartView& /* rAccChartView */) {} +#endif const o3tl::sorted_vector< OUString >& ChartController::impl_getAvailableCommands() { @@ -1622,8 +1603,10 @@ const o3tl::sorted_vector< OUString >& ChartController::impl_getAvailableCommand "DeleteTrendline", "DeleteMeanValue", "DeleteTrendlineEquation", "DeleteXErrorBars", "DeleteYErrorBars", "DeleteDataLabels", "DeleteDataLabel", + "InsertMenuDataTable", + "InsertDataTable", "DeleteDataTable", //format objects - "FormatSelection", "TransformDialog", + "FormatSelection", "FontDialog", "TransformDialog", "DiagramType", "View3D", "Forward", "Backward", "MainTitle", "SubTitle", @@ -1670,11 +1653,4 @@ ViewElementListProvider ChartController::getViewElementListProvider() } //namespace chart -extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * -com_sun_star_comp_chart2_ChartController_get_implementation(css::uno::XComponentContext *context, - css::uno::Sequence<css::uno::Any> const &) -{ - return cppu::acquire(new chart::ChartController(context)); -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/main/ChartController_EditData.cxx b/chart2/source/controller/main/ChartController_EditData.cxx index 4f0a979956b0..63577edf3920 100644 --- a/chart2/source/controller/main/ChartController_EditData.cxx +++ b/chart2/source/controller/main/ChartController_EditData.cxx @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <ChartWindow.hxx> #include <ChartController.hxx> #include <ChartModel.hxx> @@ -27,12 +26,9 @@ #include <strings.hrc> #include <vcl/svapp.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> using namespace ::com::sun::star; -using ::com::sun::star::uno::Reference; - namespace chart { diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index b14a788f2140..b3455ad49e04 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -25,14 +25,15 @@ #include <dlg_InsertLegend.hxx> #include <dlg_InsertErrorBars.hxx> #include <dlg_InsertTitle.hxx> +#include <dlg_InsertDataTable.hxx> #include <dlg_ObjectProperties.hxx> -#include <ChartModel.hxx> -#include <ChartModelHelper.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <TitleHelper.hxx> -#include <DiagramHelper.hxx> +#include <DataSeries.hxx> #include <Diagram.hxx> +#include <GridProperties.hxx> #include <chartview/DrawModelWrapper.hxx> #include <chartview/ChartSfxItemIds.hxx> #include <NumberFormatterWrapper.hxx> @@ -50,15 +51,17 @@ #include <ErrorBarItemConverter.hxx> #include <DataSeriesHelper.hxx> #include <ObjectNameProvider.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> +#include <DataTable.hxx> +#include <RegressionCurveModel.hxx> #include <com/sun/star/chart2/XRegressionCurve.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> #include <svx/ActionDescriptionProvider.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <vcl/svapp.hxx> using namespace ::com::sun::star; @@ -69,14 +72,12 @@ using ::com::sun::star::uno::Sequence; namespace { -void lcl_InsertMeanValueLine( const uno::Reference< chart2::XDataSeries > & xSeries ) +void lcl_InsertMeanValueLine( const rtl::Reference< ::chart::DataSeries > & xSeries ) { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - xSeries, uno::UNO_QUERY ); - if( xRegCurveCnt.is()) + if( xSeries.is()) { ::chart::RegressionCurveHelper::addMeanValueLine( - xRegCurveCnt, uno::Reference< beans::XPropertySet >( xSeries, uno::UNO_QUERY )); + xSeries, xSeries); } } @@ -87,35 +88,36 @@ namespace chart void ChartController::executeDispatch_InsertAxes() { - UndoGuard aUndoGuard( + auto xUndoGuard = std::make_shared<UndoGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_AXES )), m_xUndoManager ); try { - InsertAxisOrGridDialogData aDialogInput; + auto aDialogInput = std::make_shared<InsertAxisOrGridDialogData>(); rtl::Reference< Diagram > xDiagram = getFirstDiagram(); - AxisHelper::getAxisOrGridExistence( aDialogInput.aExistenceList, xDiagram ); - AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, xDiagram ); + AxisHelper::getAxisOrGridExistence( aDialogInput->aExistenceList, xDiagram ); + AxisHelper::getAxisOrGridPossibilities( aDialogInput->aPossibilityList, xDiagram ); SolarMutexGuard aGuard; - SchAxisDlg aDlg(GetChartFrame(), aDialogInput); - if (aDlg.run() == RET_OK) - { - // lock controllers till end of block - ControllerLockGuardUNO aCLGuard( getChartModel() ); + auto aDlg = std::make_shared<SchAxisDlg>(GetChartFrame(), *aDialogInput); + weld::DialogController::runAsync(aDlg, [this, aDlg, aDialogInput, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if ( nResult == RET_OK ) + { + // lock controllers till end of block + ControllerLockGuardUNO aCLGuard( getChartModel() ); - InsertAxisOrGridDialogData aDialogOutput; - aDlg.getResult(aDialogOutput); - std::unique_ptr< ReferenceSizeProvider > pRefSizeProvider( - impl_createReferenceSizeProvider()); - bool bChanged = AxisHelper::changeVisibilityOfAxes( xDiagram - , aDialogInput.aExistenceList, aDialogOutput.aExistenceList, m_xCC - , pRefSizeProvider.get() ); - if( bChanged ) - aUndoGuard.commit(); - } + InsertAxisOrGridDialogData aDialogOutput; + aDlg->getResult(aDialogOutput); + ReferenceSizeProvider aRefSizeProvider(impl_createReferenceSizeProvider()); + bool bChanged = AxisHelper::changeVisibilityOfAxes( getFirstDiagram() + , aDialogInput->aExistenceList, aDialogOutput.aExistenceList, m_xCC + , &aRefSizeProvider ); + if( bChanged ) + xUndoGuard->commit(); + } + }); } catch(const uno::RuntimeException&) { @@ -157,30 +159,145 @@ void ChartController::executeDispatch_InsertGrid() } } +void ChartController::executeDispatch_OpenInsertDataTableDialog() +{ + SolarMutexGuard aGuard; + + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Insert, SchResId(STR_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); + + rtl::Reference<Diagram> xDiagram = getFirstDiagram(); + + InsertDataTableDialog aDialog(GetChartFrame()); + { + // init values + DataTableDialogData aData; + auto xDataTable = xDiagram->getDataTable(); + aData.mbShow = xDataTable.is(); + if (xDataTable.is()) + { + uno::Reference<beans::XPropertySet> xProperties(xDataTable, uno::UNO_QUERY); + + uno::Any aAny = xProperties->getPropertyValue("HBorder"); + if (aAny.has<bool>()) + aData.mbHorizontalBorders = aAny.get<bool>(); + + aAny = xProperties->getPropertyValue("VBorder"); + if (aAny.has<bool>()) + aData.mbVerticalBorders = aAny.get<bool>(); + + aAny = xProperties->getPropertyValue("Outline"); + if (aAny.has<bool>()) + aData.mbOutline = aAny.get<bool>(); + + aAny = xProperties->getPropertyValue("Keys"); + if (aAny.has<bool>()) + aData.mbKeys = aAny.get<bool>(); + } + aDialog.init(aData); + } + + // show the dialog + if (aDialog.run() == RET_OK) + { + bool bChanged = false; + + auto& rDialogData = aDialog.getDataTableDialogData(); + auto xDataTable = xDiagram->getDataTable(); + if (!rDialogData.mbShow && xDataTable.is()) + { + xDiagram->setDataTable(uno::Reference<chart2::XDataTable>()); + bChanged = true; + } + else if (rDialogData.mbShow && !xDataTable.is()) + { + uno::Reference<chart2::XDataTable> xNewDataTable(new DataTable); + if (xNewDataTable.is()) + { + xDiagram->setDataTable(xNewDataTable); + bChanged = true; + } + } + + // Set the properties + xDataTable = xDiagram->getDataTable(); + if (rDialogData.mbShow && xDataTable.is()) + { + uno::Reference<beans::XPropertySet> xProperties(xDataTable, uno::UNO_QUERY); + xProperties->setPropertyValue("HBorder" , uno::Any(rDialogData.mbHorizontalBorders)); + xProperties->setPropertyValue("VBorder" , uno::Any(rDialogData.mbVerticalBorders)); + xProperties->setPropertyValue("Outline" , uno::Any(rDialogData.mbOutline)); + xProperties->setPropertyValue("Keys" , uno::Any(rDialogData.mbKeys)); + bChanged = true; + } + + if (bChanged) + aUndoGuard.commit(); + } +} + +/** Create and insert a data table to the chart */ +void ChartController::executeDispatch_InsertDataTable() +{ + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Insert, SchResId(STR_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); + + + rtl::Reference<Diagram> xDiagram = getFirstDiagram(); + auto xDataTable = xDiagram->getDataTable(); + if (!xDataTable.is()) + { + uno::Reference<chart2::XDataTable> xNewDataTable(new DataTable); + if (xNewDataTable.is()) + { + xDiagram->setDataTable(xNewDataTable); + aUndoGuard.commit(); + } + } +} + +/** Delete a data table from the chart */ +void ChartController::executeDispatch_DeleteDataTable() +{ + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Delete, SchResId(STR_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); + + rtl::Reference<Diagram> xDiagram = getFirstDiagram(); + auto xDataTable = xDiagram->getDataTable(); + if (xDataTable.is()) + { + // insert a empty data table reference + xDiagram->setDataTable(uno::Reference<chart2::XDataTable>()); + aUndoGuard.commit(); + } +} + void ChartController::executeDispatch_InsertTitles() { - UndoGuard aUndoGuard( + auto xUndoGuard = std::make_shared<UndoGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_TITLES )), m_xUndoManager ); try { - TitleDialogData aDialogInput; - aDialogInput.readFromModel( getChartModel() ); + auto aDialogInput = std::make_shared<TitleDialogData>(); + aDialogInput->readFromModel( getChartModel() ); SolarMutexGuard aGuard; - SchTitleDlg aDlg(GetChartFrame(), aDialogInput); - if (aDlg.run() == RET_OK) - { - // lock controllers till end of block - ControllerLockGuardUNO aCLGuard( getChartModel() ); - TitleDialogData aDialogOutput(impl_createReferenceSizeProvider()); - aDlg.getResult(aDialogOutput); - bool bChanged = aDialogOutput.writeDifferenceToModel( getChartModel(), m_xCC, &aDialogInput ); - if( bChanged ) - aUndoGuard.commit(); - } + auto aDlg = std::make_shared<SchTitleDlg>(GetChartFrame(), *aDialogInput); + weld::DialogController::runAsync(aDlg, [this, aDlg, aDialogInput, xUndoGuard=std::move(xUndoGuard)](int nResult){ + if ( nResult == RET_OK ) + { + // lock controllers till end of block + ControllerLockGuardUNO aCLGuard( getChartModel() ); + TitleDialogData aDialogOutput( impl_createReferenceSizeProvider() ); + aDlg->getResult( aDialogOutput ); + bool bChanged = aDialogOutput.writeDifferenceToModel( getChartModel(), m_xCC, aDialogInput.get() ); + if( bChanged ) + xUndoGuard->commit(); + } + }); } catch(const uno::RuntimeException&) { @@ -195,8 +312,7 @@ void ChartController::executeDispatch_DeleteLegend() ActionDescriptionProvider::ActionType::Delete, SchResId( STR_OBJECT_LEGEND )), m_xUndoManager ); - ChartModel& rModel = dynamic_cast<ChartModel&>(*getModel()); - LegendHelper::hideLegend(rModel); + LegendHelper::hideLegend(*getChartModel()); aUndoGuard.commit(); } @@ -207,8 +323,7 @@ void ChartController::executeDispatch_InsertLegend() ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_LEGEND )), m_xUndoManager ); - ChartModel& rModel = dynamic_cast<ChartModel&>(*getModel()); - LegendHelper::showLegend(rModel, m_xCC); + LegendHelper::showLegend(*getChartModel(), m_xCC); aUndoGuard.commit(); } @@ -241,13 +356,13 @@ void ChartController::executeDispatch_OpenLegendDialog() void ChartController::executeDispatch_InsertMenu_DataLabels() { - UndoGuard aUndoGuard( + std::shared_ptr<UndoGuard> aUndoGuard = std::make_shared<UndoGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_DATALABELS )), m_xUndoManager ); //if a series is selected insert labels for that series only: - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel()); if( xSeries.is() ) { @@ -258,19 +373,16 @@ void ChartController::executeDispatch_InsertMenu_DataLabels() OUString aObjectCID = ObjectIdentifier::createClassifiedIdentifierForParticles( ObjectIdentifier::getSeriesParticleFromCID(m_aSelection.getSelectedCID()), aChildParticle ); - bool bSuccess = ChartController::executeDlg_ObjectProperties_withoutUndoGuard( aObjectCID, true ); - if( bSuccess ) - aUndoGuard.commit(); + ChartController::executeDlg_ObjectProperties_withUndoGuard( aUndoGuard, aObjectCID, true ); return; } - try { wrapper::AllDataLabelItemConverter aItemConverter( getChartModel(), m_pDrawModelWrapper->GetItemPool(), m_pDrawModelWrapper->getSdrModel(), - uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY )); + getChartModel() ); SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet(); aItemConverter.FillItemSet( aItemSet ); @@ -278,8 +390,7 @@ void ChartController::executeDispatch_InsertMenu_DataLabels() SolarMutexGuard aGuard; //get number formatter - uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( getModel(), uno::UNO_QUERY ); - NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); + NumberFormatterWrapper aNumberFormatterWrapper( getChartModel() ); SvNumberFormatter* pNumberFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); DataLabelsDialog aDlg(GetChartFrame(), aItemSet, pNumberFormatter); @@ -292,7 +403,7 @@ void ChartController::executeDispatch_InsertMenu_DataLabels() ControllerLockGuardUNO aCLGuard( getChartModel() ); bool bChanged = aItemConverter.ApplyItemSet( aOutItemSet );//model should be changed now if( bChanged ) - aUndoGuard.commit(); + aUndoGuard->commit(); } } catch(const uno::RuntimeException&) @@ -319,17 +430,17 @@ void ChartController::executeDispatch_InsertMenu_MeanValues() ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_AVERAGE_LINE )), m_xUndoManager ); - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is() ) { //if a series is selected insert mean value only for that series: lcl_InsertMeanValueLine( xSeries ); } - else + else if (rtl::Reference<Diagram> xDiagram = getFirstDiagram()) { - std::vector< uno::Reference< chart2::XDataSeries > > aSeries( - DiagramHelper::getDataSeriesFromDiagram( getFirstDiagram())); + std::vector< rtl::Reference< DataSeries > > aSeries = + xDiagram->getDataSeries(); for( const auto& xSrs : aSeries ) lcl_InsertMeanValueLine( xSrs ); @@ -341,7 +452,7 @@ void ChartController::executeDispatch_InsertMenu_Trendlines() { OUString aCID = m_aSelection.getSelectedCID(); - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( aCID, getChartModel() ); if( !xSeries.is() ) @@ -352,35 +463,33 @@ void ChartController::executeDispatch_InsertMenu_Trendlines() void ChartController::executeDispatch_InsertTrendline() { - uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel()), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegressionCurveContainer = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel()); if( !xRegressionCurveContainer.is() ) return; - UndoLiveUpdateGuard aUndoGuard( + auto xUndoGuard = std::make_shared<UndoLiveUpdateGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_CURVE )), m_xUndoManager ); - uno::Reference< chart2::XRegressionCurve > xCurve = + rtl::Reference< RegressionCurveModel > xCurve = RegressionCurveHelper::addRegressionCurve( SvxChartRegress::Linear, xRegressionCurveContainer ); - uno::Reference< beans::XPropertySet > xProperties( xCurve, uno::UNO_QUERY ); - - if( !xProperties.is()) + if( !xCurve.is()) return; - wrapper::RegressionCurveItemConverter aItemConverter( - xProperties, xRegressionCurveContainer, m_pDrawModelWrapper->getSdrModel().GetItemPool(), + auto aItemConverter = std::make_shared<wrapper::RegressionCurveItemConverter>( + xCurve, xRegressionCurveContainer, m_pDrawModelWrapper->getSdrModel().GetItemPool(), m_pDrawModelWrapper->getSdrModel(), - uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY )); + getChartModel() ); // open dialog - SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet(); - aItemConverter.FillItemSet( aItemSet ); + SfxItemSet aItemSet = aItemConverter->CreateEmptyItemSet(); + aItemConverter->FillItemSet( aItemSet ); ObjectPropertiesDialogParameter aDialogParameter( ObjectIdentifier::createDataCurveCID( ObjectIdentifier::getSeriesParticleFromCID( m_aSelection.getSelectedCID()), @@ -388,24 +497,23 @@ void ChartController::executeDispatch_InsertTrendline() aDialogParameter.init( getChartModel() ); ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get()); SolarMutexGuard aGuard; - SchAttribTabDlg aDialog( - GetChartFrame(), &aItemSet, &aDialogParameter, - &aViewElementListProvider, - uno::Reference< util::XNumberFormatsSupplier >( - getModel(), uno::UNO_QUERY ) ); + auto aDialog = std::make_shared<SchAttribTabDlg>(GetChartFrame(), &aItemSet, &aDialogParameter, + &aViewElementListProvider, getChartModel()); // note: when a user pressed "OK" but didn't change any settings in the // dialog, the SfxTabDialog returns "Cancel" - if( aDialog.run() == RET_OK || aDialog.DialogWasClosedWithOK()) - { - const SfxItemSet* pOutItemSet = aDialog.GetOutputItemSet(); - if( pOutItemSet ) + SfxTabDialogController::runAsync(aDialog, [this, aDialog, aItemConverter, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if ( nResult == RET_OK || aDialog->DialogWasClosedWithOK() ) { - ControllerLockGuardUNO aCLGuard( getChartModel() ); - aItemConverter.ApplyItemSet( *pOutItemSet ); + const SfxItemSet* pOutItemSet = aDialog->GetOutputItemSet(); + if( pOutItemSet ) + { + ControllerLockGuardUNO aCLGuard( getChartModel() ); + aItemConverter->ApplyItemSet( *pOutItemSet ); + } + xUndoGuard->commit(); } - aUndoGuard.commit(); - } + }); } void ChartController::executeDispatch_InsertErrorBars( bool bYError ) @@ -413,12 +521,12 @@ void ChartController::executeDispatch_InsertErrorBars( bool bYError ) ObjectType objType = bYError ? OBJECTTYPE_DATA_ERRORS_Y : OBJECTTYPE_DATA_ERRORS_X; //if a series is selected insert error bars for that series only: - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is()) { - UndoLiveUpdateGuard aUndoGuard( + auto xUndoGuard = std::make_shared<UndoLiveUpdateGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( bYError ? STR_OBJECT_ERROR_BARS_Y : STR_OBJECT_ERROR_BARS_X )), @@ -431,47 +539,48 @@ void ChartController::executeDispatch_InsertErrorBars( bool bYError ) bYError)); // get an appropriate item converter - wrapper::ErrorBarItemConverter aItemConverter( - getModel(), xErrorBarProp, m_pDrawModelWrapper->getSdrModel().GetItemPool(), + auto aItemConverter = std::make_shared<wrapper::ErrorBarItemConverter> ( + getChartModel(), xErrorBarProp, m_pDrawModelWrapper->getSdrModel().GetItemPool(), m_pDrawModelWrapper->getSdrModel(), - uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY )); + getChartModel() ); // open dialog - SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet(); + SfxItemSet aItemSet = aItemConverter->CreateEmptyItemSet(); aItemSet.Put(SfxBoolItem(SCHATTR_STAT_ERRORBAR_TYPE,bYError)); - aItemConverter.FillItemSet( aItemSet ); + aItemConverter->FillItemSet( aItemSet ); ObjectPropertiesDialogParameter aDialogParameter( ObjectIdentifier::createClassifiedIdentifierWithParent( objType, u"", m_aSelection.getSelectedCID())); aDialogParameter.init( getChartModel() ); ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get()); SolarMutexGuard aGuard; - SchAttribTabDlg aDlg( + auto aDlg = std::make_shared<SchAttribTabDlg>( GetChartFrame(), &aItemSet, &aDialogParameter, &aViewElementListProvider, - uno::Reference< util::XNumberFormatsSupplier >( - getModel(), uno::UNO_QUERY ) ); - aDlg.SetAxisMinorStepWidthForErrorBarDecimals( + getChartModel() ); + aDlg->SetAxisMinorStepWidthForErrorBarDecimals( InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getChartModel(), m_xChartView, m_aSelection.getSelectedCID())); // note: when a user pressed "OK" but didn't change any settings in the // dialog, the SfxTabDialog returns "Cancel" - if (aDlg.run() == RET_OK || aDlg.DialogWasClosedWithOK()) - { - const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet(); - if( pOutItemSet ) + SfxTabDialogController::runAsync(aDlg, [this, aDlg, aItemConverter, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if ( nResult == RET_OK || aDlg->DialogWasClosedWithOK() ) { - ControllerLockGuardUNO aCLGuard( getChartModel() ); - aItemConverter.ApplyItemSet( *pOutItemSet ); + const SfxItemSet* pOutItemSet = aDlg->GetOutputItemSet(); + if( pOutItemSet ) + { + ControllerLockGuardUNO aCLGuard( getChartModel() ); + aItemConverter->ApplyItemSet( *pOutItemSet ); + } + xUndoGuard->commit(); } - aUndoGuard.commit(); - } + }); } else { //if no series is selected insert error bars for all series - UndoGuard aUndoGuard( + auto xUndoGuard = std::make_shared<UndoGuard>( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, ObjectNameProvider::getName_ObjectForAllSeries( objType ) ), @@ -479,32 +588,34 @@ void ChartController::executeDispatch_InsertErrorBars( bool bYError ) try { - wrapper::AllSeriesStatisticsConverter aItemConverter( + auto aItemConverter = std::make_shared<wrapper::AllSeriesStatisticsConverter>( getChartModel(), m_pDrawModelWrapper->GetItemPool() ); - SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet(); - aItemConverter.FillItemSet( aItemSet ); + SfxItemSet aItemSet = aItemConverter->CreateEmptyItemSet(); + aItemConverter->FillItemSet( aItemSet ); //prepare and open dialog SolarMutexGuard aGuard; - InsertErrorBarsDialog aDlg( + auto aDlg = std::make_shared<InsertErrorBarsDialog>( GetChartFrame(), aItemSet, getChartModel(), bYError ? ErrorBarResources::ERROR_BAR_Y : ErrorBarResources::ERROR_BAR_X); - aDlg.SetAxisMinorStepWidthForErrorBarDecimals( - InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getChartModel(), m_xChartView, OUString() ) ); - - if (aDlg.run() == RET_OK) - { - SfxItemSet aOutItemSet = aItemConverter.CreateEmptyItemSet(); - aDlg.FillItemSet( aOutItemSet ); - - // lock controllers till end of block - ControllerLockGuardUNO aCLGuard( getChartModel() ); - bool bChanged = aItemConverter.ApplyItemSet( aOutItemSet );//model should be changed now - if( bChanged ) - aUndoGuard.commit(); - } + aDlg->SetAxisMinorStepWidthForErrorBarDecimals( + InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getChartModel(), m_xChartView, u"" ) ); + + weld::DialogController::runAsync(aDlg, [this, aDlg, aItemConverter, xUndoGuard=std::move(xUndoGuard)](int nResult) { + if ( nResult == RET_OK ) + { + SfxItemSet aOutItemSet = aItemConverter->CreateEmptyItemSet(); + aDlg->FillItemSet( aOutItemSet ); + + // lock controllers till end of block + ControllerLockGuardUNO aCLGuard( getChartModel() ); + bool bChanged = aItemConverter->ApplyItemSet( aOutItemSet );//model should be changed now + if( bChanged ) + xUndoGuard->commit(); + } + }); } catch(const uno::RuntimeException&) { @@ -519,8 +630,8 @@ void ChartController::executeDispatch_InsertTrendlineEquation( bool bInsertR2 ) ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getChartModel() ), uno::UNO_QUERY ); if( !xRegCurve.is() ) { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegCurveCnt = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); xRegCurve.set( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCurveCnt ) ); } if( !xRegCurve.is()) @@ -573,8 +684,8 @@ void ChartController::executeDispatch_DeleteR2Value() void ChartController::executeDispatch_DeleteMeanValue() { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegCurveCnt = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xRegCurveCnt.is()) { UndoGuard aUndoGuard( @@ -588,8 +699,8 @@ void ChartController::executeDispatch_DeleteMeanValue() void ChartController::executeDispatch_DeleteTrendline() { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegCurveCnt = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xRegCurveCnt.is()) { UndoGuard aUndoGuard( @@ -603,8 +714,8 @@ void ChartController::executeDispatch_DeleteTrendline() void ChartController::executeDispatch_DeleteTrendlineEquation() { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegCurveCnt = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xRegCurveCnt.is()) { UndoGuard aUndoGuard( @@ -618,8 +729,8 @@ void ChartController::executeDispatch_DeleteTrendlineEquation() void ChartController::executeDispatch_DeleteErrorBars( bool bYError ) { - uno::Reference< chart2::XDataSeries > xDataSeries( - ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() )); + rtl::Reference< DataSeries > xDataSeries = + ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xDataSeries.is()) { UndoGuard aUndoGuard( @@ -633,7 +744,7 @@ void ChartController::executeDispatch_DeleteErrorBars( bool bYError ) void ChartController::executeDispatch_InsertDataLabels() { - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is() ) { @@ -656,7 +767,7 @@ void ChartController::executeDispatch_InsertDataLabel() void ChartController::executeDispatch_DeleteDataLabels() { - uno::Reference< chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is() ) { @@ -682,7 +793,7 @@ void ChartController::executeDispatch_ResetAllDataPoints() UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Format, SchResId( STR_OBJECT_DATAPOINTS )), m_xUndoManager ); - uno::Reference< chart2::XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is() ) xSeries->resetAllDataPoints(); aUndoGuard.commit(); @@ -692,7 +803,7 @@ void ChartController::executeDispatch_ResetDataPoint() UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Format, SchResId( STR_OBJECT_DATAPOINT )), m_xUndoManager ); - uno::Reference< chart2::XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xSeries.is() ) { sal_Int32 nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() ); @@ -705,14 +816,14 @@ void ChartController::executeDispatch_InsertAxisTitle() { try { - uno::Reference< XTitle > xTitle; + rtl::Reference< Title > xTitle; { UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Insert, SchResId( STR_OBJECT_TITLE )), m_xUndoManager ); - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); sal_Int32 nDimensionIndex = -1; sal_Int32 nCooSysIndex = -1; sal_Int32 nAxisIndex = -1; @@ -726,8 +837,8 @@ void ChartController::executeDispatch_InsertAxisTitle() else eTitleType = TitleHelper::Z_AXIS_TITLE; - std::unique_ptr< ReferenceSizeProvider > apRefSizeProvider( impl_createReferenceSizeProvider()); - xTitle = TitleHelper::createTitle( eTitleType, ObjectNameProvider::getTitleNameByType(eTitleType), getChartModel(), m_xCC, apRefSizeProvider.get() ); + ReferenceSizeProvider aRefSizeProvider( impl_createReferenceSizeProvider()); + xTitle = TitleHelper::createTitle( eTitleType, ObjectNameProvider::getTitleNameByType(eTitleType), getChartModel(), m_xCC, &aRefSizeProvider ); aUndoGuard.commit(); } } @@ -746,7 +857,7 @@ void ChartController::executeDispatch_InsertAxis() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { AxisHelper::makeAxisVisible( xAxis ); @@ -768,7 +879,7 @@ void ChartController::executeDispatch_DeleteAxis() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { AxisHelper::makeAxisInvisible( xAxis ); @@ -790,10 +901,10 @@ void ChartController::executeDispatch_InsertMajorGrid() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { - AxisHelper::makeGridVisible( xAxis->getGridProperties() ); + AxisHelper::makeGridVisible( xAxis->getGridProperties2() ); aUndoGuard.commit(); } } @@ -812,10 +923,10 @@ void ChartController::executeDispatch_DeleteMajorGrid() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { - AxisHelper::makeGridInvisible( xAxis->getGridProperties() ); + AxisHelper::makeGridInvisible( xAxis->getGridProperties2() ); aUndoGuard.commit(); } } @@ -834,11 +945,11 @@ void ChartController::executeDispatch_InsertMinorGrid() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { - const Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() ); - for( Reference< beans::XPropertySet > const & props : aSubGrids) + std::vector< rtl::Reference< ::chart::GridProperties > > aSubGrids( xAxis->getSubGridProperties2() ); + for( rtl::Reference< GridProperties > const & props : aSubGrids) AxisHelper::makeGridVisible( props ); aUndoGuard.commit(); } @@ -858,11 +969,11 @@ void ChartController::executeDispatch_DeleteMinorGrid() try { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); if( xAxis.is() ) { - const Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() ); - for( Reference< beans::XPropertySet > const & props : aSubGrids) + std::vector< rtl::Reference< ::chart::GridProperties > > aSubGrids( xAxis->getSubGridProperties2() ); + for( rtl::Reference< ::chart::GridProperties > const & props : aSubGrids) AxisHelper::makeGridInvisible( props ); aUndoGuard.commit(); } diff --git a/chart2/source/controller/main/ChartController_Position.cxx b/chart2/source/controller/main/ChartController_Position.cxx index f57a3b8e8f96..df047d747afd 100644 --- a/chart2/source/controller/main/ChartController_Position.cxx +++ b/chart2/source/controller/main/ChartController_Position.cxx @@ -19,31 +19,28 @@ #include <ChartController.hxx> -#include <ChartWindow.hxx> #include <DrawViewWrapper.hxx> #include <PositionAndSizeHelper.hxx> #include <ChartModel.hxx> #include <ChartModelHelper.hxx> +#include <ChartView.hxx> #include "UndoGuard.hxx" #include <ObjectNameProvider.hxx> #include <DiagramHelper.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <CommonConverters.hxx> #include <svx/ActionDescriptionProvider.hxx> -#include <comphelper/servicehelper.hxx> #include <svx/svxids.hrc> #include <svx/rectenum.hxx> #include <svl/intitem.hxx> #include <svx/svxdlg.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <vcl/svapp.hxx> #include <memory> namespace chart { using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; static void lcl_getPositionAndSizeFromItemSet( const SfxItemSet& rItemSet, awt::Rectangle& rPosAndSize, const awt::Size& rOriginalSize ) { @@ -54,19 +51,18 @@ static void lcl_getPositionAndSizeFromItemSet( const SfxItemSet& rItemSet, awt:: RectPoint eRP = RectPoint::LT; - const SfxPoolItem* pPoolItem=nullptr; //read position - if (rItemSet.GetItemState(SID_ATTR_TRANSFORM_POS_X,true,&pPoolItem)==SfxItemState::SET) - nPosX= static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); - if (rItemSet.GetItemState(SID_ATTR_TRANSFORM_POS_Y,true,&pPoolItem)==SfxItemState::SET) - nPosY=static_cast<const SfxInt32Item*>(pPoolItem)->GetValue(); + if (const SfxInt32Item* pPosXItem = rItemSet.GetItemIfSet(SID_ATTR_TRANSFORM_POS_X)) + nPosX = pPosXItem->GetValue(); + if (const SfxInt32Item* pPosYItem = rItemSet.GetItemIfSet(SID_ATTR_TRANSFORM_POS_Y)) + nPosY = pPosYItem->GetValue(); //read size - if (rItemSet.GetItemState(SID_ATTR_TRANSFORM_WIDTH,true,&pPoolItem)==SfxItemState::SET) - nSizX=static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue(); - if (rItemSet.GetItemState(SID_ATTR_TRANSFORM_HEIGHT,true,&pPoolItem)==SfxItemState::SET) - nSizY=static_cast<const SfxUInt32Item*>(pPoolItem)->GetValue(); - if (rItemSet.GetItemState(SID_ATTR_TRANSFORM_SIZE_POINT,true,&pPoolItem)==SfxItemState::SET) - eRP=static_cast<RectPoint>(static_cast<const SfxUInt16Item*>(pPoolItem)->GetValue()); + if (const SfxUInt32Item* pWidthItem = rItemSet.GetItemIfSet(SID_ATTR_TRANSFORM_WIDTH)) + nSizX = pWidthItem->GetValue(); + if (const SfxUInt32Item* pHeightItem = rItemSet.GetItemIfSet(SID_ATTR_TRANSFORM_HEIGHT)) + nSizY = pHeightItem->GetValue(); + if (const SfxUInt16Item* pSizeItem = rItemSet.GetItemIfSet(SID_ATTR_TRANSFORM_SIZE_POINT)) + eRP=static_cast<RectPoint>(pSizeItem->GetValue()); switch( eRP ) { @@ -150,26 +146,21 @@ void ChartController::executeDispatch_PositionAndSize(const ::css::uno::Sequence if (!pPool) return; - sal_uInt16 nWhich; for (const auto& aProp: *pArgs) { sal_Int32 nValue = 0; aProp.Value >>= nValue; if (aProp.Name == "TransformPosX") { - nWhich = pPool->GetWhich(SID_ATTR_TRANSFORM_POS_X); - aItemSet.Put(SfxInt32Item(nWhich, nValue)); + aItemSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_POS_X, nValue)); } else if (aProp.Name == "TransformPosY") { - nWhich = pPool->GetWhich(SID_ATTR_TRANSFORM_POS_Y); - aItemSet.Put(SfxInt32Item(nWhich, nValue)); + aItemSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_POS_Y, nValue)); } else if (aProp.Name == "TransformWidth") { - nWhich = pPool->GetWhich(SID_ATTR_TRANSFORM_WIDTH); - aItemSet.Put(SfxUInt32Item(nWhich, static_cast<sal_uInt32>(nValue))); + aItemSet.Put(SfxUInt32Item(SID_ATTR_TRANSFORM_WIDTH, static_cast<sal_uInt32>(nValue))); } else if (aProp.Name == "TransformHeight") { - nWhich = pPool->GetWhich(SID_ATTR_TRANSFORM_HEIGHT); - aItemSet.Put(SfxUInt32Item(nWhich, static_cast<sal_uInt32>(nValue))); + aItemSet.Put(SfxUInt32Item(SID_ATTR_TRANSFORM_HEIGHT, static_cast<sal_uInt32>(nValue))); } } } @@ -177,9 +168,8 @@ void ChartController::executeDispatch_PositionAndSize(const ::css::uno::Sequence if(pOutItemSet || pArgs) { awt::Rectangle aOldObjectRect; - ExplicitValueProvider* pProvider(comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_xChartView )); - if( pProvider ) - aOldObjectRect = pProvider->getRectangleOfObject(aCID); + if( m_xChartView ) + aOldObjectRect = m_xChartView->getRectangleOfObject(aCID); awt::Rectangle aNewObjectRect; lcl_getPositionAndSizeFromItemSet( aItemSet, aNewObjectRect, ToSize(aOldObjectRect) ); @@ -189,8 +179,7 @@ void ChartController::executeDispatch_PositionAndSize(const ::css::uno::Sequence bool bChanged = false; if ( eObjectType == OBJECTTYPE_LEGEND ) { - ChartModel& rModel = dynamic_cast<ChartModel&>(*getModel()); - bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning(rModel, false , true); + bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning(*getChartModel(), false , true); } bool bMoved = PositionAndSizeHelper::moveObject( m_aSelection.getSelectedCID(), getChartModel() diff --git a/chart2/source/controller/main/ChartController_Properties.cxx b/chart2/source/controller/main/ChartController_Properties.cxx index df0da042a218..62b7ad8a6beb 100644 --- a/chart2/source/controller/main/ChartController_Properties.cxx +++ b/chart2/source/controller/main/ChartController_Properties.cxx @@ -18,7 +18,7 @@ */ #include <ChartController.hxx> -#include <ChartWindow.hxx> +#include <ChartView.hxx> #include <chartview/DrawModelWrapper.hxx> #include <chartview/ChartSfxItemIds.hxx> #include <ObjectIdentifier.hxx> @@ -34,16 +34,20 @@ #include <MultipleChartConverters.hxx> #include <TitleItemConverter.hxx> #include <LegendItemConverter.hxx> +#include <DataTableItemConverter.hxx> #include <RegressionCurveItemConverter.hxx> #include <RegressionEquationItemConverter.hxx> #include <ErrorBarItemConverter.hxx> #include <ChartModelHelper.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <TitleHelper.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartModel.hxx> #include <ColorPerPointHelper.hxx> -#include <DiagramHelper.hxx> +#include <DataSeries.hxx> +#include <DataSeriesProperties.hxx> #include <Diagram.hxx> #include <ControllerLockGuard.hxx> #include "UndoGuard.hxx" @@ -52,28 +56,28 @@ #include <strings.hrc> #include <ReferenceSizeProvider.hxx> #include <RegressionCurveHelper.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> +#include <RegressionCurveModel.hxx> +#include <o3tl/string_view.hxx> #include <com/sun/star/util/CloseVetoException.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> -#include <comphelper/servicehelper.hxx> #include <memory> #include <vcl/svapp.hxx> #include <svx/ActionDescriptionProvider.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; +using namespace ::chart::DataSeriesProperties; using ::com::sun::star::uno::Reference; namespace { wrapper::ItemConverter* createItemConverter( - const OUString & aObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, + std::u16string_view aObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, const uno::Reference<uno::XComponentContext>& xContext, SdrModel& rDrawModel, ExplicitValueProvider* pExplicitValueProvider, ReferenceSizeProvider const * pRefSizeProvider ) { @@ -87,8 +91,8 @@ wrapper::ItemConverter* createItemConverter( return nullptr; } - OUString aParticleID = ObjectIdentifier::getParticleID( aObjectCID ); - bool bAffectsMultipleObjects = aParticleID == "ALLELEMENTS"; + std::u16string_view aParticleID = ObjectIdentifier::getParticleID( aObjectCID ); + bool bAffectsMultipleObjects = aParticleID == u"ALLELEMENTS"; if( !bAffectsMultipleObjects ) { uno::Reference< beans::XPropertySet > xObjectProperties = @@ -106,26 +110,26 @@ wrapper::ItemConverter* createItemConverter( break; case OBJECTTYPE_TITLE: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset(new awt::Size(pRefSizeProvider->getPageSize())); + pRefSize.emplace(pRefSizeProvider->getPageSize()); pItemConverter = new wrapper::TitleItemConverter( xObjectProperties, rDrawModel.GetItemPool(), rDrawModel, xChartModel, - pRefSize.get()); + pRefSize); } break; case OBJECTTYPE_LEGEND: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize())); + pRefSize.emplace( pRefSizeProvider->getPageSize() ); pItemConverter = new wrapper::LegendItemConverter( xObjectProperties, rDrawModel.GetItemPool(), rDrawModel, xChartModel, - pRefSize.get()); + pRefSize); } break; case OBJECTTYPE_LEGEND_ENTRY: @@ -141,9 +145,9 @@ wrapper::ItemConverter* createItemConverter( break; case OBJECTTYPE_AXIS: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize())); + pRefSize.emplace( pRefSizeProvider->getPageSize() ); // the second property set contains the property CoordinateOrigin // nOriginIndex is the index of the corresponding index of the @@ -153,7 +157,7 @@ wrapper::ItemConverter* createItemConverter( ExplicitIncrementData aExplicitIncrement; if( pExplicitValueProvider ) pExplicitValueProvider->getExplicitValuesForAxis( - uno::Reference< XAxis >( xObjectProperties, uno::UNO_QUERY ), + dynamic_cast< Axis* >( xObjectProperties.get() ), aExplicitScale, aExplicitIncrement ); pItemConverter = new wrapper::AxisItemConverter( @@ -161,7 +165,7 @@ wrapper::ItemConverter* createItemConverter( rDrawModel, xChartModel, &aExplicitScale, &aExplicitIncrement, - pRefSize.get() ); + pRefSize ); } break; case OBJECTTYPE_AXIS_UNITLABEL: @@ -169,11 +173,11 @@ wrapper::ItemConverter* createItemConverter( case OBJECTTYPE_DATA_LABELS: case OBJECTTYPE_DATA_LABEL: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize())); + pRefSize.emplace( pRefSizeProvider->getPageSize() ); - uno::Reference<XDataSeries> xSeries = ObjectIdentifier::getDataSeriesForCID(aObjectCID, xChartModel); + rtl::Reference<DataSeries> xSeries = ObjectIdentifier::getDataSeriesForCID(aObjectCID, xChartModel); bool bDataSeries = eObjectType == OBJECTTYPE_DATA_LABELS; @@ -183,25 +187,25 @@ wrapper::ItemConverter* createItemConverter( pItemConverter = new wrapper::TextLabelItemConverter( xChartModel, xObjectProperties, xSeries, - rDrawModel.GetItemPool(), pRefSize.get(), bDataSeries, + rDrawModel.GetItemPool(), pRefSize, bDataSeries, nNumberFormat, nPercentNumberFormat); } break; case OBJECTTYPE_DATA_SERIES: case OBJECTTYPE_DATA_POINT: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize())); + pRefSize.emplace( pRefSizeProvider->getPageSize() ); wrapper::GraphicObjectType eMapTo = wrapper::GraphicObjectType::FilledDataPoint; - uno::Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( aObjectCID, xChartModel ); - uno::Reference< XChartType > xChartType = ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( aObjectCID, xChartModel ); + rtl::Reference< ChartType > xChartType = ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries ); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); + sal_Int32 nDimensionCount = xDiagram->getDimension(); if( !ChartTypeHelper::isSupportingAreaProperties( xChartType, nDimensionCount ) ) eMapTo = wrapper::GraphicObjectType::LineDataPoint; @@ -213,14 +217,14 @@ wrapper::ItemConverter* createItemConverter( sal_Int32 nPointIndex = -1; /*-1 for whole series*/ if(!bDataSeries) { - nPointIndex = aParticleID.toInt32(); - uno::Reference< beans::XPropertySet > xSeriesProp( xSeries, uno::UNO_QUERY ); + nPointIndex = o3tl::toInt32(aParticleID); bool bVaryColorsByPoint = false; - if( xSeriesProp.is() && - (xSeriesProp->getPropertyValue("VaryColorsByPoint") >>= bVaryColorsByPoint) && + if( xSeries.is() && + // "VaryColorsByPoint" + (xSeries->getFastPropertyValue(PROP_DATASERIES_VARY_COLORS_BY_POINT) >>= bVaryColorsByPoint) && bVaryColorsByPoint ) { - if( !ColorPerPointHelper::hasPointOwnColor( xSeriesProp, nPointIndex, xObjectProperties ) ) + if( !ColorPerPointHelper::hasPointOwnColor( xSeries, nPointIndex, xObjectProperties ) ) { bUseSpecialFillColor = true; OSL_ASSERT( xDiagram.is()); @@ -237,7 +241,7 @@ wrapper::ItemConverter* createItemConverter( pItemConverter = new wrapper::DataPointItemConverter( xChartModel, xContext, xObjectProperties, xSeries, rDrawModel.GetItemPool(), rDrawModel, xChartModel, - eMapTo, pRefSize.get(), bDataSeries, bUseSpecialFillColor, nSpecialFillColor, true, + eMapTo, pRefSize, bDataSeries, bUseSpecialFillColor, nSpecialFillColor, true, nNumberFormat, nPercentNumberFormat, nPointIndex ); break; } @@ -260,21 +264,21 @@ wrapper::ItemConverter* createItemConverter( case OBJECTTYPE_DATA_CURVE: pItemConverter = new wrapper::RegressionCurveItemConverter( - xObjectProperties, uno::Reference< chart2::XRegressionCurveContainer >( - ObjectIdentifier::getDataSeriesForCID( aObjectCID, xChartModel ), uno::UNO_QUERY ), - rDrawModel.GetItemPool(), rDrawModel, - xChartModel); + xObjectProperties, + ObjectIdentifier::getDataSeriesForCID( aObjectCID, xChartModel ), + rDrawModel.GetItemPool(), rDrawModel, + xChartModel); break; case OBJECTTYPE_DATA_CURVE_EQUATION: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset(new awt::Size(pRefSizeProvider->getPageSize())); + pRefSize.emplace(pRefSizeProvider->getPageSize()); pItemConverter = new wrapper::RegressionEquationItemConverter( xObjectProperties, rDrawModel.GetItemPool(), rDrawModel, xChartModel, - pRefSize.get()); + pRefSize); break; } case OBJECTTYPE_DATA_STOCK_RANGE: @@ -286,6 +290,13 @@ wrapper::ItemConverter* createItemConverter( rDrawModel, xChartModel, wrapper::GraphicObjectType::LineAndFillProperties ); break; + case OBJECTTYPE_DATA_TABLE: + { + pItemConverter = new wrapper::DataTableItemConverter( + xObjectProperties, rDrawModel.GetItemPool(), + rDrawModel, xChartModel); + } + break; default: //OBJECTTYPE_UNKNOWN break; } @@ -301,13 +312,13 @@ wrapper::ItemConverter* createItemConverter( break; case OBJECTTYPE_AXIS: { - std::unique_ptr<awt::Size> pRefSize; + std::optional<awt::Size> pRefSize; if (pRefSizeProvider) - pRefSize.reset( new awt::Size( pRefSizeProvider->getPageSize())); + pRefSize.emplace( pRefSizeProvider->getPageSize() ); pItemConverter = new wrapper::AllAxisItemConverter( xChartModel, rDrawModel.GetItemPool(), - rDrawModel, pRefSize.get()); + rDrawModel, pRefSize ); } break; case OBJECTTYPE_GRID: @@ -342,7 +353,7 @@ OUString lcl_getTitleCIDForCommand( std::string_view rDispatchCommand, const rtl else if( rDispatchCommand == "SecondaryYTitle" ) nTitleType = TitleHelper::SECONDARY_Y_AXIS_TITLE; - uno::Reference< XTitle > xTitle( TitleHelper::getTitle( nTitleType, xChartModel ) ); + rtl::Reference< Title > xTitle( TitleHelper::getTitle( nTitleType, xChartModel ) ); return ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, xChartModel ); } @@ -374,14 +385,14 @@ OUString lcl_getAxisCIDForCommand( std::string_view rDispatchCommand, const rtl: nDimensionIndex=1; bMainAxis=false; } - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); - uno::Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, bMainAxis, xDiagram ) ); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); + rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, bMainAxis, xDiagram ); return ObjectIdentifier::createClassifiedIdentifierForObject( xAxis, xChartModel ); } OUString lcl_getGridCIDForCommand( std::string_view rDispatchCommand, const rtl::Reference<::chart::ChartModel>& xChartModel ) { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartModel ); + rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram(); if( rDispatchCommand == "DiagramGridAll") return ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_GRID, u"ALLELEMENTS" ); @@ -416,7 +427,7 @@ OUString lcl_getGridCIDForCommand( std::string_view rDispatchCommand, const rtl: nDimensionIndex=2; bMainGrid=false; } - uno::Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, true/*bMainAxis*/, xDiagram ) ); + rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, true/*bMainAxis*/, xDiagram ); sal_Int32 nSubGridIndex= bMainGrid ? -1 : 0; OUString aCID( ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, xChartModel, nSubGridIndex ) ); @@ -436,8 +447,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt ObjectType eObjectType = OBJECTTYPE_UNKNOWN; const ObjectType eSelectedType = ObjectIdentifier::getObjectType( rSelectedCID ); - uno::Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSelectedCID, xChartDocument ); - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( xSeries, uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rSelectedCID, xChartDocument ); //legend if( rDispatchCommand == "Legend" || rDispatchCommand == "FormatLegend" ) @@ -527,7 +537,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt return rSelectedCID; else { - sal_Int32 nPointIndex = ObjectIdentifier::getParticleID( rSelectedCID ).toInt32(); + sal_Int32 nPointIndex = o3tl::toInt32(ObjectIdentifier::getParticleID( rSelectedCID )); if( nPointIndex>=0 ) { OUString aSeriesParticle = ObjectIdentifier::getSeriesParticleFromCID( rSelectedCID ); @@ -548,8 +558,8 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt else return ObjectIdentifier::createDataCurveCID( ObjectIdentifier::getSeriesParticleFromCID( rSelectedCID ), - RegressionCurveHelper::getRegressionCurveIndex( xRegCurveCnt, - RegressionCurveHelper::getMeanValueLine( xRegCurveCnt ) ), true ); + RegressionCurveHelper::getRegressionCurveIndex( xSeries, + RegressionCurveHelper::getMeanValueLine( xSeries ) ), true ); } //trend line else if( rDispatchCommand == "FormatTrendline" ) @@ -559,8 +569,8 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt else return ObjectIdentifier::createDataCurveCID( ObjectIdentifier::getSeriesParticleFromCID( rSelectedCID ), - RegressionCurveHelper::getRegressionCurveIndex( xRegCurveCnt, - RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCurveCnt ) ), false ); + RegressionCurveHelper::getRegressionCurveIndex( xSeries, + RegressionCurveHelper::getFirstCurveNotMeanValueLine( xSeries ) ), false ); } //trend line equation else if( rDispatchCommand == "FormatTrendlineEquation" ) @@ -570,8 +580,8 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt else return ObjectIdentifier::createDataCurveEquationCID( ObjectIdentifier::getSeriesParticleFromCID( rSelectedCID ), - RegressionCurveHelper::getRegressionCurveIndex( xRegCurveCnt, - RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCurveCnt ) ) ); + RegressionCurveHelper::getRegressionCurveIndex( xSeries, + RegressionCurveHelper::getFirstCurveNotMeanValueLine( xSeries ) ) ); } // y error bars else if( rDispatchCommand == "FormatXErrorBars" ) @@ -590,7 +600,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt return rSelectedCID; else { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); return ObjectIdentifier::createClassifiedIdentifierForObject( xAxis , xChartDocument ); } } @@ -601,7 +611,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt return rSelectedCID; else { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); return ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, xChartDocument ); } @@ -613,7 +623,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view rDispatchCommand, const rt return rSelectedCID; else { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( rSelectedCID, xChartDocument ); return ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, xChartDocument, 0 /*sub grid index*/ ); } } @@ -674,7 +684,7 @@ OUString lcl_getFormatCIDforSelectedCID( const OUString& rSelectedCID ) // some legend entries are handled as if they were data series if( eObjectType==OBJECTTYPE_LEGEND_ENTRY ) { - OUString aParentParticle( ObjectIdentifier::getFullParentParticle( rSelectedCID ) ); + std::u16string_view aParentParticle( ObjectIdentifier::getFullParentParticle( rSelectedCID ) ); aFormatCID = ObjectIdentifier::createClassifiedIdentifierForParticle( aParentParticle ); } @@ -691,24 +701,22 @@ void ChartController::executeDlg_ObjectProperties( const OUString& rSelectedObje { OUString aObjectCID = lcl_getFormatCIDforSelectedCID( rSelectedObjectCID ); - UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::ActionType::Format, - ObjectNameProvider::getName( ObjectIdentifier::getObjectType( aObjectCID ))), - m_xUndoManager ); + auto xUndoGuard = std::make_shared<UndoGuard>( + ActionDescriptionProvider::createDescription( + ActionDescriptionProvider::ActionType::Format, + ObjectNameProvider::getName( ObjectIdentifier::getObjectType( aObjectCID ))), + m_xUndoManager ); - bool bSuccess = ChartController::executeDlg_ObjectProperties_withoutUndoGuard( aObjectCID, false ); - if( bSuccess ) - aUndoGuard.commit(); + ChartController::executeDlg_ObjectProperties_withUndoGuard(std::move(xUndoGuard), aObjectCID, false ); } -bool ChartController::executeDlg_ObjectProperties_withoutUndoGuard( - const OUString& rObjectCID, bool bSuccessOnUnchanged ) +void ChartController::executeDlg_ObjectProperties_withUndoGuard( + std::shared_ptr<UndoGuard> xUndoGuard, const OUString& rObjectCID, bool bSuccessOnUnchanged ) { //return true if the properties were changed successfully - bool bRet = false; if( rObjectCID.isEmpty() ) { - return bRet; + return; } try { @@ -716,26 +724,28 @@ bool ChartController::executeDlg_ObjectProperties_withoutUndoGuard( ObjectType eObjectType = ObjectIdentifier::getObjectType( rObjectCID ); if( eObjectType==OBJECTTYPE_UNKNOWN ) { - return bRet; + return; } if( eObjectType==OBJECTTYPE_DIAGRAM_WALL || eObjectType==OBJECTTYPE_DIAGRAM_FLOOR ) { - if( !DiagramHelper::isSupportingFloorAndWall( getFirstDiagram() ) ) - return bRet; + if( !getFirstDiagram()->isSupportingFloorAndWall() ) + return; } //convert properties to ItemSet - std::unique_ptr<ReferenceSizeProvider> pRefSizeProv(impl_createReferenceSizeProvider()); + ReferenceSizeProvider aRefSizeProv(impl_createReferenceSizeProvider()); - std::unique_ptr<wrapper::ItemConverter> pItemConverter( - createItemConverter( rObjectCID, getChartModel(), m_xCC, + rtl::Reference<::chart::ChartModel> xChartDoc(getChartModel()); + + std::shared_ptr<wrapper::ItemConverter> pItemConverter( + createItemConverter( rObjectCID, xChartDoc, m_xCC, m_pDrawModelWrapper->getSdrModel(), - comphelper::getFromUnoTunnel<ExplicitValueProvider>(m_xChartView), - pRefSizeProv.get())); + m_xChartView.get(), + &aRefSizeProv)); if (!pItemConverter) - return bRet; + return; SfxItemSet aItemSet = pItemConverter->CreateEmptyItemSet(); @@ -746,52 +756,53 @@ bool ChartController::executeDlg_ObjectProperties_withoutUndoGuard( //prepare dialog ObjectPropertiesDialogParameter aDialogParameter( rObjectCID ); - aDialogParameter.init( getChartModel() ); + aDialogParameter.init(xChartDoc); ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get() ); SolarMutexGuard aGuard; - SchAttribTabDlg aDlg( - GetChartFrame(), &aItemSet, &aDialogParameter, - &aViewElementListProvider, - uno::Reference< util::XNumberFormatsSupplier >( - getModel(), uno::UNO_QUERY ) ); + std::shared_ptr<SchAttribTabDlg> aDlgPtr = std::make_shared<SchAttribTabDlg>( + GetChartFrame(), &aItemSet, &aDialogParameter, + &aViewElementListProvider, + xChartDoc); if(aDialogParameter.HasSymbolProperties()) { uno::Reference< beans::XPropertySet > xObjectProperties = - ObjectIdentifier::getObjectPropertySet( rObjectCID, getChartModel() ); - wrapper::DataPointItemConverter aSymbolItemConverter( getChartModel(), m_xCC - , xObjectProperties, ObjectIdentifier::getDataSeriesForCID( rObjectCID, getChartModel() ) + ObjectIdentifier::getObjectPropertySet( rObjectCID, xChartDoc ); + wrapper::DataPointItemConverter aSymbolItemConverter( xChartDoc, m_xCC + , xObjectProperties, ObjectIdentifier::getDataSeriesForCID( rObjectCID, xChartDoc ) , m_pDrawModelWrapper->getSdrModel().GetItemPool() , m_pDrawModelWrapper->getSdrModel() - , getChartModel() + , xChartDoc , wrapper::GraphicObjectType::FilledDataPoint ); SfxItemSet aSymbolShapeProperties(aSymbolItemConverter.CreateEmptyItemSet() ); aSymbolItemConverter.FillItemSet( aSymbolShapeProperties ); sal_Int32 const nStandardSymbol=0;//@todo get from somewhere - std::unique_ptr<Graphic> pAutoSymbolGraphic(new Graphic( aViewElementListProvider.GetSymbolGraphic( nStandardSymbol, &aSymbolShapeProperties ) )); + std::optional<Graphic> oAutoSymbolGraphic(std::in_place, aViewElementListProvider.GetSymbolGraphic( nStandardSymbol, &aSymbolShapeProperties ) ); // note: the dialog takes the ownership of pSymbolShapeProperties and pAutoSymbolGraphic - aDlg.setSymbolInformation( std::move(aSymbolShapeProperties), std::move(pAutoSymbolGraphic) ); + aDlgPtr->setSymbolInformation( std::move(aSymbolShapeProperties), std::move(oAutoSymbolGraphic) ); } if( aDialogParameter.HasStatisticProperties() ) { - aDlg.SetAxisMinorStepWidthForErrorBarDecimals( - InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getChartModel(), m_xChartView, rObjectCID ) ); + aDlgPtr->SetAxisMinorStepWidthForErrorBarDecimals( + InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( xChartDoc, m_xChartView, rObjectCID ) ); } //open the dialog - if (aDlg.run() == RET_OK || (bSuccessOnUnchanged && aDlg.DialogWasClosedWithOK())) + SfxTabDialogController::runAsync(aDlgPtr, [aDlgPtr, xChartDoc, pItemConverter,bSuccessOnUnchanged, + xUndoGuard=std::move(xUndoGuard)] (int nResult) { - const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet(); - if(pOutItemSet) - { - ControllerLockGuardUNO aCLGuard( getChartModel()); - (void)pItemConverter->ApplyItemSet(*pOutItemSet); //model should be changed now - bRet = true; + if (nResult == RET_OK || (bSuccessOnUnchanged && aDlgPtr->DialogWasClosedWithOK())) { + const SfxItemSet* pOutItemSet = aDlgPtr->GetOutputItemSet(); + if(pOutItemSet) { + ControllerLockGuardUNO aCLGuard(xChartDoc); + (void)pItemConverter->ApplyItemSet(*pOutItemSet); //model should be changed now + xUndoGuard->commit(); + } } - } + }); } catch( const util::CloseVetoException& ) { @@ -799,7 +810,6 @@ bool ChartController::executeDlg_ObjectProperties_withoutUndoGuard( catch( const uno::RuntimeException& ) { } - return bRet; } void ChartController::executeDispatch_View3D() diff --git a/chart2/source/controller/main/ChartController_TextEdit.cxx b/chart2/source/controller/main/ChartController_TextEdit.cxx index 100d210c2e9e..600d46b434d0 100644 --- a/chart2/source/controller/main/ChartController_TextEdit.cxx +++ b/chart2/source/controller/main/ChartController_TextEdit.cxx @@ -26,9 +26,11 @@ #include <DrawViewWrapper.hxx> #include <ChartWindow.hxx> #include <ChartModel.hxx> +#include <ChartView.hxx> #include <TitleHelper.hxx> #include <ObjectIdentifier.hxx> #include <ControllerLockGuard.hxx> +#include <comphelper/diagnose_ex.hxx> #if !ENABLE_WASM_STRIP_ACCESSIBILITY #include <AccessibleTextHelper.hxx> #endif @@ -42,9 +44,12 @@ #include <editeng/editids.hrc> #include <vcl/svapp.hxx> #include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XTitle.hpp> +#include <com/sun/star/beans/XPropertySetInfo.hpp> +#include <com/sun/star/text/XTextCursor.hpp> +#include <com/sun/star/chart2/FormattedString.hpp> #include <svl/stritem.hxx> #include <editeng/fontitem.hxx> +#include <editeng/section.hxx> #include <memory> namespace chart @@ -72,9 +77,8 @@ void ChartController::StartTextEdit( const Point* pMousePixel ) SdrOutliner* pOutliner = m_pDrawViewWrapper->getOutliner(); //#i77362 change notification for changes on additional shapes are missing - uno::Reference< beans::XPropertySet > xChartViewProps( m_xChartView, uno::UNO_QUERY ); - if( xChartViewProps.is() ) - xChartViewProps->setPropertyValue( "SdrViewIsInEditMode", uno::Any(true) ); + if( m_xChartView.is() ) + m_xChartView->setPropertyValue( "SdrViewIsInEditMode", uno::Any(true) ); auto pChartWindow(GetChartWindow()); @@ -117,25 +121,17 @@ bool ChartController::EndTextEdit() m_pDrawViewWrapper->SdrEndTextEdit(); //#i77362 change notification for changes on additional shapes are missing - uno::Reference< beans::XPropertySet > xChartViewProps( m_xChartView, uno::UNO_QUERY ); - if( xChartViewProps.is() ) - xChartViewProps->setPropertyValue( "SdrViewIsInEditMode", uno::Any(false) ); + if( m_xChartView.is() ) + m_xChartView->setPropertyValue( "SdrViewIsInEditMode", uno::Any(false) ); SdrObject* pTextObject = m_pDrawViewWrapper->getTextEditObject(); if(!pTextObject) return false; - SdrOutliner* pOutliner = m_pDrawViewWrapper->getOutliner(); OutlinerParaObject* pParaObj = pTextObject->GetOutlinerParaObject(); - if( !pParaObj || !pOutliner ) + if( !pParaObj ) return true; - pOutliner->SetText( *pParaObj ); - - OUString aString = pOutliner->GetText( - pOutliner->GetParagraph( 0 ), - pOutliner->GetParagraphCount() ); - OUString aObjectCID = m_aSelection.getSelectedCID(); if ( !aObjectCID.isEmpty() ) { @@ -145,8 +141,11 @@ bool ChartController::EndTextEdit() // lock controllers till end of block ControllerLockGuardUNO aCLGuard( getChartModel() ); - TitleHelper::setCompleteString( aString, uno::Reference< - css::chart2::XTitle >::query( xPropSet ), m_xCC ); + uno::Sequence< uno::Reference< chart2::XFormattedString > > aNewFormattedTitle = + GetFormattedTitle(pParaObj->GetTextObject(), pTextObject->getUnoShape()); + + Title* pTitle = dynamic_cast<Title*>(xPropSet.get()); + TitleHelper::setFormattedString(pTitle, aNewFormattedTitle); OSL_ENSURE(m_pTextActionUndoGuard, "ChartController::EndTextEdit: no TextUndoGuard!"); if (m_pTextActionUndoGuard) @@ -156,6 +155,70 @@ bool ChartController::EndTextEdit() return true; } +uno::Sequence< uno::Reference< chart2::XFormattedString > > ChartController::GetFormattedTitle( + const EditTextObject& aEdit, const uno::Reference< drawing::XShape >& xShape ) +{ + std::vector < uno::Reference< chart2::XFormattedString > > aNewStrings; + if (!xShape.is()) + return comphelper::containerToSequence(aNewStrings); + + uno::Reference< text::XText > xText(xShape, uno::UNO_QUERY); + if (!xText.is()) + return comphelper::containerToSequence(aNewStrings); + + uno::Reference< text::XTextCursor > xSelectionCursor(xText->createTextCursor()); + if (!xSelectionCursor.is()) + return comphelper::containerToSequence(aNewStrings); + + xSelectionCursor->gotoStart(false); + + std::vector<editeng::Section> aSecAttrs; + aEdit.GetAllSections(aSecAttrs); + + for (editeng::Section const& rSection : aSecAttrs) + { + if (!xSelectionCursor->isCollapsed()) + xSelectionCursor->collapseToEnd(); + + xSelectionCursor->goRight(rSection.mnEnd - rSection.mnStart, true); + + OUString aNewString = xSelectionCursor->getString(); + + bool bNextPara = (aEdit.GetParagraphCount() > 1 && rSection.mnParagraph != aEdit.GetParagraphCount() - 1 && + aEdit.GetTextLen(rSection.mnParagraph) <= rSection.mnEnd); + + uno::Reference< chart2::XFormattedString2 > xFmtStr = chart2::FormattedString::create(m_xCC); + if (bNextPara) + aNewString = aNewString + OUStringChar('\n'); + xFmtStr->setString(aNewString); + aNewStrings.emplace_back(xFmtStr); + + uno::Reference< beans::XPropertySetInfo > xInfo = xFmtStr->getPropertySetInfo(); + uno::Reference< beans::XPropertySet > xSelectionProp(xSelectionCursor, uno::UNO_QUERY); + try + { + for (const beans::Property& rProp : xSelectionProp->getPropertySetInfo()->getProperties()) + { + if (xInfo.is() && xInfo->hasPropertyByName(rProp.Name)) + { + const uno::Any aValue = xSelectionProp->getPropertyValue(rProp.Name); + xFmtStr->setPropertyValue(rProp.Name, aValue); + } + } + } + catch ( const uno::Exception& ) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + aNewStrings.clear(); + } + + if (bNextPara) + xSelectionCursor->goRight(1, false); // next paragraph + } + + return comphelper::containerToSequence(aNewStrings); +} + void ChartController::executeDispatch_InsertSpecialCharacter() { SolarMutexGuard aGuard; @@ -178,55 +241,58 @@ void ChartController::executeDispatch_InsertSpecialCharacter() vcl::Font aCurFont = m_pDrawViewWrapper->getOutliner()->GetRefDevice()->GetFont(); aSet.Put( SvxFontItem( aCurFont.GetFamilyType(), aCurFont.GetFamilyName(), aCurFont.GetStyleName(), aCurFont.GetPitch(), aCurFont.GetCharSet(), SID_ATTR_CHAR_FONT ) ); - ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateCharMapDialog(GetChartFrame(), aSet, nullptr)); - if( pDlg->Execute() != RET_OK ) - return; - - const SfxItemSet* pSet = pDlg->GetOutputItemSet(); - const SfxPoolItem* pItem=nullptr; - OUString aString; - if (pSet && pSet->GetItemState(SID_CHARMAP, true, &pItem) == SfxItemState::SET) - if (auto pStringItem = dynamic_cast<const SfxStringItem*>(pItem)) - aString = pStringItem->GetValue(); - - OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); - SdrOutliner* pOutliner = m_pDrawViewWrapper->getOutliner(); - - if(!pOutliner || !pOutlinerView) - return; - - // insert string to outliner - - // prevent flicker - pOutlinerView->HideCursor(); - pOutliner->SetUpdateLayout(false); - - // delete current selection by inserting empty String, so current - // attributes become unique (sel. has to be erased anyway) - pOutlinerView->InsertText(OUString()); - - pOutlinerView->InsertText(aString, true); - - ESelection aSel = pOutlinerView->GetSelection(); - aSel.nStartPara = aSel.nEndPara; - aSel.nStartPos = aSel.nEndPos; - pOutlinerView->SetSelection(aSel); + VclPtr<SfxAbstractDialog> pDlg(pFact->CreateCharMapDialog(GetChartFrame(), aSet, nullptr)); + pDlg->StartExecuteAsync( + [this, pDlg] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + const SfxItemSet* pSet = pDlg->GetOutputItemSet(); + OUString aString; + if (pSet) + if (const SfxStringItem* pCharMapItem = pSet->GetItemIfSet(SID_CHARMAP)) + aString = pCharMapItem->GetValue(); + + OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); + SdrOutliner* pOutliner = m_pDrawViewWrapper->getOutliner(); + + if(pOutliner && pOutlinerView) + { + // insert string to outliner + + // prevent flicker + pOutlinerView->HideCursor(); + pOutliner->SetUpdateLayout(false); + + // delete current selection by inserting empty String, so current + // attributes become unique (sel. has to be erased anyway) + pOutlinerView->InsertText(OUString()); + + pOutlinerView->InsertText(aString, true); + + ESelection aSel = pOutlinerView->GetSelection(); + aSel.nStartPara = aSel.nEndPara; + aSel.nStartPos = aSel.nEndPos; + pOutlinerView->SetSelection(aSel); + + // show changes + pOutliner->SetUpdateLayout(true); + pOutlinerView->ShowCursor(); + } + } + pDlg->disposeOnce(); + } + ); - // show changes - pOutliner->SetUpdateLayout(true); - pOutlinerView->ShowCursor(); } -uno::Reference< css::accessibility::XAccessibleContext > - ChartController::impl_createAccessibleTextContext() +rtl::Reference< ::chart::AccessibleTextHelper > + ChartController::createAccessibleTextContext() { #if !ENABLE_WASM_STRIP_ACCESSIBILITY - uno::Reference< css::accessibility::XAccessibleContext > xResult( - new AccessibleTextHelper( m_pDrawViewWrapper.get() )); - - return xResult; + return new AccessibleTextHelper( m_pDrawViewWrapper.get() ); #else - return uno::Reference< css::accessibility::XAccessibleContext >(); + return {}; #endif } diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index 7b9c28de63e5..5774ff1350d4 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -21,8 +21,9 @@ #include <ChartWindow.hxx> #include <ChartModel.hxx> #include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <TitleHelper.hxx> -#include <ThreeDHelper.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include "UndoGuard.hxx" #include <ControllerLockGuard.hxx> @@ -33,8 +34,11 @@ #include <chartview/DrawModelWrapper.hxx> #include "ChartTransferable.hxx" #include <DrawViewWrapper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> +#include <RegressionCurveModel.hxx> #include <RegressionCurveHelper.hxx> #include "ShapeController.hxx" #include <DiagramHelper.hxx> @@ -42,15 +46,15 @@ #include <ObjectNameProvider.hxx> #include <unonames.hxx> +#include <com/sun/star/awt/Gradient.hpp> #include <com/sun/star/chart2/DataPointLabel.hpp> -#include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/graphic/XGraphic.hpp> #include <com/sun/star/drawing/TextVerticalAdjust.hpp> #include <com/sun/star/drawing/TextHorizontalAdjust.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <com/sun/star/chart2/XRegressionCurveContainer.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> +#include <docmodel/uno/UnoGradientTools.hxx> #include <editeng/editview.hxx> #include <editeng/outliner.hxx> #include <svx/ActionDescriptionProvider.hxx> @@ -70,12 +74,11 @@ #include <svx/unoapi.hxx> #include <svx/unopage.hxx> #include <svx/unoshape.hxx> -#include <svx/xgrad.hxx> #include <PropertyHelper.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <tools/debug.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <tools/UnitConversion.hxx> #include <memory> @@ -92,16 +95,16 @@ namespace { bool lcl_deleteDataSeries( - const OUString & rCID, + std::u16string_view rCID, const rtl::Reference<::chart::ChartModel> & xModel, const Reference< document::XUndoManager > & xUndoManager ) { bool bResult = false; - uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rCID, xModel )); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( rCID, xModel ); if( xSeries.is() && xModel.is()) { - uno::Reference< chart2::XChartType > xChartType( - DataSeriesHelper::getChartTypeOfSeries( xSeries, xModel->getFirstDiagram())); + rtl::Reference< ::chart::ChartType > xChartType = + DataSeriesHelper::getChartTypeOfSeries( xSeries, xModel->getFirstChartDiagram()); if( xChartType.is()) { UndoGuard aUndoGuard( @@ -109,8 +112,8 @@ bool lcl_deleteDataSeries( ActionDescriptionProvider::ActionType::Delete, SchResId( STR_OBJECT_DATASERIES )), xUndoManager ); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel ); - uno::Reference< chart2::XAxis > xAxis( DiagramHelper::getAttachedAxis( xSeries, xDiagram ) ); + rtl::Reference< Diagram > xDiagram = xModel->getFirstChartDiagram(); + rtl::Reference< Axis > xAxis = xDiagram->getAttachedAxis( xSeries ); DataSeriesHelper::deleteSeries( xSeries, xChartType ); @@ -124,7 +127,7 @@ bool lcl_deleteDataSeries( } bool lcl_deleteDataCurve( - const OUString & rCID, + std::u16string_view rCID, const rtl::Reference<::chart::ChartModel> & xModel, const Reference< document::XUndoManager > & xUndoManager ) { @@ -159,18 +162,16 @@ bool lcl_deleteDataCurve( } // anonymous namespace -std::unique_ptr<ReferenceSizeProvider> ChartController::impl_createReferenceSizeProvider() +ReferenceSizeProvider ChartController::impl_createReferenceSizeProvider() { awt::Size aPageSize( ChartModelHelper::getPageSize( getChartModel() ) ); - return std::make_unique<ReferenceSizeProvider>(aPageSize, getChartModel()); + return ReferenceSizeProvider(aPageSize, getChartModel()); } void ChartController::impl_adaptDataSeriesAutoResize() { - std::unique_ptr<ReferenceSizeProvider> pRefSizeProvider(impl_createReferenceSizeProvider()); - if (pRefSizeProvider) - pRefSizeProvider->setValuesAtAllDataSeries(); + impl_createReferenceSizeProvider().setValuesAtAllDataSeries(); } void ChartController::executeDispatch_NewArrangement() @@ -181,7 +182,7 @@ void ChartController::executeDispatch_NewArrangement() try { rtl::Reference<::chart::ChartModel> xModel( getChartModel() ); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel ); + rtl::Reference< Diagram > xDiagram = xModel->getFirstChartDiagram(); if( xDiagram.is()) { UndoGuard aUndoGuard( @@ -195,15 +196,15 @@ void ChartController::executeDispatch_NewArrangement() xDiagram->setPropertyToDefault( "PosSizeExcludeAxes"); // 3d rotation - ThreeDHelper::set3DSettingsToDefault( xDiagram ); + xDiagram->set3DSettingsToDefault(); // legend - Reference< beans::XPropertyState > xLegendState( xDiagram->getLegend(), uno::UNO_QUERY ); - if( xLegendState.is()) + rtl::Reference< Legend > xLegend = xDiagram->getLegend2(); + if( xLegend.is()) { - xLegendState->setPropertyToDefault( "RelativePosition"); - xLegendState->setPropertyToDefault( "RelativeSize"); - xLegendState->setPropertyToDefault( "AnchorPosition"); + xLegend->setPropertyToDefault( "RelativePosition"); + xLegend->setPropertyToDefault( "RelativeSize"); + xLegend->setPropertyToDefault( "AnchorPosition"); } // titles @@ -211,16 +212,16 @@ void ChartController::executeDispatch_NewArrangement() eType < TitleHelper::NORMAL_TITLE_END; ++eType ) { - Reference< beans::XPropertyState > xTitleState( + rtl::Reference< Title > xTitleState = TitleHelper::getTitle( - static_cast< TitleHelper::eTitleType >( eType ), xModel ), uno::UNO_QUERY ); + static_cast< TitleHelper::eTitleType >( eType ), xModel ); if( xTitleState.is()) xTitleState->setPropertyToDefault( "RelativePosition"); } // regression curve equations - std::vector< Reference< chart2::XRegressionCurve > > aRegressionCurves( - RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine( xDiagram )); + std::vector< rtl::Reference< RegressionCurveModel > > aRegressionCurves = + xDiagram->getAllRegressionCurvesNotMeanValueLine(); // reset equation position for( const auto& xCurve : aRegressionCurves ) @@ -243,10 +244,7 @@ void ChartController::executeDispatch_ScaleText() m_xUndoManager ); ControllerLockGuardUNO aCtlLockGuard( getChartModel() ); - std::unique_ptr<ReferenceSizeProvider> pRefSizeProv(impl_createReferenceSizeProvider()); - OSL_ASSERT(pRefSizeProv); - if (pRefSizeProv) - pRefSizeProv->toggleAutoResizeState(); + impl_createReferenceSizeProvider().toggleAutoResizeState(); aUndoGuard.commit(); } @@ -260,7 +258,7 @@ void ChartController::executeDispatch_Paste() Graphic aGraphic; // paste location: center of window - Point aPos = pChartWindow->PixelToLogic( tools::Rectangle( {}, pChartWindow->GetSizePixel()).Center()); + Point aPos = pChartWindow->PixelToLogic( tools::Rectangle(Point{}, pChartWindow->GetSizePixel()).Center()); // handle different formats TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pChartWindow )); @@ -268,8 +266,7 @@ void ChartController::executeDispatch_Paste() { if ( aDataHelper.HasFormat( SotClipboardFormatId::DRAWING ) ) { - tools::SvRef<SotTempStream> xStm; - if ( aDataHelper.GetSotStorageStream( SotClipboardFormatId::DRAWING, xStm ) ) + if (std::unique_ptr<SvStream> xStm = aDataHelper.GetSotStorageStream( SotClipboardFormatId::DRAWING) ) { xStm->Seek( 0 ); Reference< io::XInputStream > xInputStream( new utl::OInputStreamWrapper( *xStm ) ); @@ -286,8 +283,7 @@ void ChartController::executeDispatch_Paste() else if ( aDataHelper.HasFormat( SotClipboardFormatId::SVXB ) ) { // graphic exchange format (graphic manager bitmap format?) - tools::SvRef<SotTempStream> xStm; - if( aDataHelper.GetSotStorageStream( SotClipboardFormatId::SVXB, xStm )) + if (std::unique_ptr<SvStream> xStm = aDataHelper.GetSotStorageStream( SotClipboardFormatId::SVXB )) { TypeSerializer aSerializer(*xStm); aSerializer.readGraphic(aGraphic); @@ -315,8 +311,8 @@ void ChartController::executeDispatch_Paste() if( m_pDrawViewWrapper ) { OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); - if( pOutlinerView )//in case of edit mode insert into edited string - pOutlinerView->InsertText( aString ); + if (pOutlinerView)//in case of edit mode insert the formatted string + pOutlinerView->PasteSpecial(); else { impl_PasteStringAsTextShape( aString, awt::Point( 0, 0 ) ); @@ -343,9 +339,9 @@ void ChartController::impl_PasteGraphic( DBG_TESTSOLARMUTEX(); // note: the XPropertySet of the model is the old API. Also the property // "AdditionalShapes" that is used there. - uno::Reference< beans::XPropertySet > xModelProp( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xModel = getChartModel(); DrawModelWrapper * pDrawModelWrapper( GetDrawModelWrapper()); - if( ! (xGraphic.is() && xModelProp.is())) + if( ! (xGraphic.is() && xModel.is())) return; rtl::Reference<SvxGraphicObject> xGraphicShape = new SvxGraphicObject(nullptr); xGraphicShape->setShapeKind(SdrObjKind::Graphic); @@ -355,11 +351,7 @@ void ChartController::impl_PasteGraphic( { xPage->add( xGraphicShape ); //need to change the model state manually - { - uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY ); - if( xModifiable.is() ) - xModifiable->setModified( true ); - } + xModel->setModified( true ); //select new shape m_aSelection.setSelection( xGraphicShape ); m_aSelection.applySelection( m_pDrawViewWrapper.get() ); @@ -367,14 +359,30 @@ void ChartController::impl_PasteGraphic( xGraphicShape->SvxShape::setPropertyValue( "Graphic", uno::Any( xGraphic )); awt::Size aGraphicSize( 1000, 1000 ); + bool bGotGraphicSize = false; + try + { + bGotGraphicSize = xGraphicShape->SvxShape::getPropertyValue( "Size100thMM") >>= aGraphicSize; + } + catch (css::beans::UnknownPropertyException& ) + {} auto pChartWindow(GetChartWindow()); // first try size in 100th mm, then pixel size - if( ! ( xGraphicShape->SvxShape::getPropertyValue( "Size100thMM") >>= aGraphicSize ) && - ( ( xGraphicShape->SvxShape::getPropertyValue( "SizePixel") >>= aGraphicSize ) && pChartWindow )) + if( !bGotGraphicSize ) { - ::Size aVCLSize( pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height ))); - aGraphicSize.Width = aVCLSize.getWidth(); - aGraphicSize.Height = aVCLSize.getHeight(); + bool bGotSizePixel = false; + try + { + bGotSizePixel = xGraphicShape->SvxShape::getPropertyValue( "SizePixel") >>= aGraphicSize; + } + catch (css::beans::UnknownPropertyException& ) + {} + if ( bGotSizePixel && pChartWindow ) + { + ::Size aVCLSize( pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height ))); + aGraphicSize.Width = aVCLSize.getWidth(); + aGraphicSize.Height = aVCLSize.getHeight(); + } } xGraphicShape->setSize( aGraphicSize ); xGraphicShape->setPosition( awt::Point( 0, 0 ) ); @@ -402,7 +410,9 @@ void ChartController::impl_PasteShapes( SdrModel* pModel ) { SdrObject* pObj(aIter.Next()); // Clone to new SdrModel - SdrObject* pNewObj(pObj ? pObj->CloneSdrObject(pDrawModelWrapper->getSdrModel()) : nullptr); + rtl::Reference<SdrObject> pNewObj; + if (pObj) + pNewObj = pObj->CloneSdrObject(pDrawModelWrapper->getSdrModel()); if ( pNewObj ) { @@ -413,14 +423,14 @@ void ChartController::impl_PasteShapes( SdrModel* pModel ) xShape->setPosition( awt::Point( 0, 0 ) ); } - pDestPage->InsertObject( pNewObj ); + pDestPage->InsertObject( pNewObj.get() ); m_pDrawViewWrapper->AddUndo( std::make_unique<SdrUndoInsertObj>( *pNewObj ) ); xSelShape = xShape; } } } - Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xModifiable = getChartModel(); if ( xModifiable.is() ) { xModifiable->setModified( true ); @@ -570,6 +580,13 @@ bool ChartController::isShapeContext() const ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == SdrObjKind::Text ) ); } +bool ChartController::IsTextEdit() const +{ + // only Title objects are editable textshapes + return m_aSelection.isTitleObjectSelected() && + m_pDrawViewWrapper && m_pDrawViewWrapper->IsTextEdit(); +} + void ChartController::impl_ClearSelection() { if( m_aSelection.hasSelection()) @@ -591,7 +608,7 @@ bool ChartController::executeDispatch_Delete() return false; //remove chart object - uno::Reference< chart2::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xChartDoc = getChartModel(); if( !xChartDoc.is() ) return false; @@ -612,17 +629,17 @@ bool ChartController::executeDispatch_Delete() } case OBJECTTYPE_LEGEND: { - uno::Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram()); + rtl::Reference< Diagram > xDiagram( xChartDoc->getFirstChartDiagram()); if( xDiagram.is()) { - uno::Reference< beans::XPropertySet > xLegendProp( xDiagram->getLegend(), uno::UNO_QUERY ); - if( xLegendProp.is()) + rtl::Reference< Legend > xLegend( xDiagram->getLegend2() ); + if( xLegend.is()) { UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::ActionType::Delete, SchResId( STR_OBJECT_LEGEND )), m_xUndoManager ); - xLegendProp->setPropertyValue( "Show", uno::Any( false )); + xLegend->setPropertyValue( "Show", uno::Any( false )); bReturn = true; aUndoGuard.commit(); } @@ -762,7 +779,7 @@ bool ChartController::executeDispatch_Delete() aLabel.ShowSeriesName = false; if( aObjectType == OBJECTTYPE_DATA_LABELS ) { - uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( aCID, getChartModel() )); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( aCID, getChartModel() ); DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, CHART_UNONAME_LABEL, uno::Any(aLabel) ); DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, CHART_UNONAME_CUSTOM_LABEL_FIELDS, uno::Any() ); } @@ -819,11 +836,10 @@ bool ChartController::executeDispatch_Delete() void ChartController::executeDispatch_ToggleLegend() { - Reference< frame::XModel > xModel( getModel() ); + rtl::Reference< ChartModel > xModel = getChartModel(); UndoGuard aUndoGuard( SchResId( STR_ACTION_TOGGLE_LEGEND ), m_xUndoManager ); - ChartModel& rModel = dynamic_cast<ChartModel&>(*xModel); - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(rModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*xModel); bool bChanged = false; if( xLegendProp.is()) { @@ -843,7 +859,7 @@ void ChartController::executeDispatch_ToggleLegend() } else { - xLegendProp.set( LegendHelper::getLegend(rModel, m_xCC, true), uno::UNO_QUERY ); + xLegendProp = LegendHelper::getLegend(*xModel, m_xCC, true); if( xLegendProp.is()) bChanged = true; } @@ -938,10 +954,10 @@ void ChartController::executeDispatch_FillColor(sal_uInt32 nColor) } } -void ChartController::executeDispatch_FillGradient(OUString sJSONGradient) +void ChartController::executeDispatch_FillGradient(std::u16string_view sJSONGradient) { - XGradient aXGradient = XGradient::fromJSON(sJSONGradient); - css::awt::Gradient aGradient = aXGradient.toGradientUNO(); + basegfx::BGradient aBGradient = basegfx::BGradient::fromJSON(sJSONGradient); + css::awt::Gradient aGradient = model::gradient::createUnoGradient2(aBGradient); try { @@ -955,9 +971,10 @@ void ChartController::executeDispatch_FillGradient(OUString sJSONGradient) if( xPropSet.is() ) { - OUString aPrefferedName = OUString::number(static_cast<sal_Int32>(aXGradient.GetStartColor())) - + OUString::number(static_cast<sal_Int32>(aXGradient.GetEndColor())) - + OUString::number(static_cast<sal_Int32>(aXGradient.GetAngle().get())); + OUString aPrefferedName = + OUString::number(static_cast<sal_Int32>(Color(aBGradient.GetColorStops().front().getStopColor()))) + + OUString::number(static_cast<sal_Int32>(Color(aBGradient.GetColorStops().back().getStopColor()))) + + OUString::number(static_cast<sal_Int32>(aBGradient.GetAngle().get())); OUString aNewName = PropertyHelper::addGradientUniqueNameToTable(css::uno::Any(aGradient), xChartModel, @@ -994,7 +1011,7 @@ void ChartController::executeDispatch_LineColor(sal_uInt32 nColor) } if( xPropSet.is() ) - xPropSet->setPropertyValue( "LineColor", css::uno::makeAny( Color(ColorTransparency, nColor) ) ); + xPropSet->setPropertyValue( "LineColor", css::uno::Any( Color(ColorTransparency, nColor) ) ); } } catch( const uno::Exception& ) @@ -1024,7 +1041,7 @@ void ChartController::executeDispatch_LineWidth(sal_uInt32 nWidth) } if( xPropSet.is() ) - xPropSet->setPropertyValue( "LineWidth", css::uno::makeAny( nWidth ) ); + xPropSet->setPropertyValue( "LineWidth", css::uno::Any( nWidth ) ); } } catch( const uno::Exception& ) @@ -1099,8 +1116,7 @@ void ChartController::impl_switchDiagramPositioningToExcludingPositioning() ActionDescriptionProvider::ActionType::PosSize, ObjectNameProvider::getName( OBJECTTYPE_DIAGRAM)), m_xUndoManager ); - ChartModel& rModel = dynamic_cast<ChartModel&>(*m_aModel->getModel()); - if (DiagramHelper::switchDiagramPositioningToExcludingPositioning(rModel, true, true)) + if (DiagramHelper::switchDiagramPositioningToExcludingPositioning(*getChartModel(), true, true)) aUndoGuard.commit(); } diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx index b8d925427736..375c2824a8a1 100644 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ b/chart2/source/controller/main/ChartController_Window.cxx @@ -22,12 +22,14 @@ #include <string_view> #include <ChartController.hxx> +#include <ChartView.hxx> #include <PositionAndSizeHelper.hxx> #include <ObjectIdentifier.hxx> #include <ChartWindow.hxx> #include <ResId.hxx> #include <ChartModel.hxx> #include <ChartModelHelper.hxx> +#include <ChartType.hxx> #include <DiagramHelper.hxx> #include <Diagram.hxx> #include <TitleHelper.hxx> @@ -42,8 +44,12 @@ #include <RelativePositionHelper.hxx> #include <chartview/DrawModelWrapper.hxx> #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> #include <StatisticsHelper.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> +#include <DataSeriesProperties.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <LegendHelper.hxx> #include <servicenames_charttypes.hxx> @@ -53,24 +59,17 @@ #include <com/sun/star/chart2/RelativePosition.hpp> #include <com/sun/star/chart2/RelativeSize.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <com/sun/star/chart2/data/XPivotTableDataProvider.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/awt/PopupMenuDirection.hpp> #include <com/sun/star/frame/DispatchHelper.hpp> #include <com/sun/star/frame/FrameSearchFlag.hpp> #include <com/sun/star/frame/XPopupMenuController.hpp> -#include <com/sun/star/util/XUpdatable.hpp> #include <com/sun/star/awt/Rectangle.hpp> -#include <com/sun/star/qa/XDumper.hpp> #include <comphelper/lok.hxx> #include <comphelper/propertysequence.hxx> #include <comphelper/propertyvalue.hxx> -#include <comphelper/sequence.hxx> - -#include <toolkit/awt/vclxmenu.hxx> #include <sfx2/viewsh.hxx> #include <svx/ActionDescriptionProvider.hxx> @@ -84,8 +83,10 @@ #include <vcl/weld.hxx> #include <vcl/ptrstyle.hxx> #include <svtools/acceleratorexecute.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <toolkit/awt/vclxmenu.hxx> #include <sal/log.hxx> +#include <o3tl/string_view.hxx> #include <boost/property_tree/json_parser.hpp> #include <sfx2/dispatch.hxx> @@ -95,6 +96,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; +using namespace ::chart::DataSeriesProperties; using ::com::sun::star::uno::Reference; namespace chart @@ -148,7 +150,7 @@ void lcl_insertMenuCommand( xMenu->setCommand( nId, rCommand ); } -OUString lcl_getFormatCommandForObjectCID( const OUString& rCID ) +OUString lcl_getFormatCommandForObjectCID( std::u16string_view rCID ) { OUString aDispatchCommand( ".uno:FormatSelection" ); @@ -265,8 +267,7 @@ void SAL_CALL ChartController::setPosSize( pChartWindow->setPosSizePixel( X, Y, Width, Height, static_cast<PosSizeFlags>(Flags) ); //#i75867# poor quality of ole's alternative view with 3D scenes and zoomfactors besides 100% - uno::Reference< beans::XPropertySet > xProp( m_xChartView, uno::UNO_QUERY ); - if( xProp.is() ) + if( m_xChartView.is() ) { auto aZoomFactors(::comphelper::InitPropertySequence({ { "ScaleXNumerator", uno::Any( nScaleXNumerator ) }, @@ -274,7 +275,7 @@ void SAL_CALL ChartController::setPosSize( { "ScaleYNumerator", uno::Any( nScaleYNumerator ) }, { "ScaleYDenominator", uno::Any( nScaleYDenominator ) } })); - xProp->setPropertyValue( "ZoomFactors", uno::Any( aZoomFactors )); + m_xChartView->setPropertyValue( "ZoomFactors", uno::Any( aZoomFactors )); } //a correct work area is at least necessary for correct values in the position and size dialog and for dragging area @@ -461,14 +462,13 @@ void ChartController::execute_Paint(vcl::RenderContext& rRenderContext, const to { try { - uno::Reference<frame::XModel> xModel(getModel()); + rtl::Reference<ChartModel> xModel(getChartModel()); //OSL_ENSURE( xModel.is(), "ChartController::execute_Paint: have no model to paint"); if (!xModel.is()) return; //better performance for big data - uno::Reference<beans::XPropertySet> xProp(m_xChartView, uno::UNO_QUERY); - if (xProp.is()) + if (m_xChartView.is()) { awt::Size aResolution(1000, 1000); { @@ -480,12 +480,11 @@ void ChartController::execute_Paint(vcl::RenderContext& rRenderContext, const to aResolution.Height = pChartWindow->GetSizePixel().Height(); } } - xProp->setPropertyValue( "Resolution", uno::Any( aResolution )); + m_xChartView->setPropertyValue( "Resolution", uno::Any( aResolution )); } - uno::Reference< util::XUpdatable > xUpdatable( m_xChartView, uno::UNO_QUERY ); - if (xUpdatable.is()) - xUpdatable->update(); + if (m_xChartView.is()) + m_xChartView->update(); { SolarMutexGuard aGuard; @@ -705,7 +704,7 @@ void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) } else { - OUString aDragMethodServiceName( ObjectIdentifier::getDragMethodServiceName( m_aSelection.getSelectedCID() ) ); + std::u16string_view aDragMethodServiceName( ObjectIdentifier::getDragMethodServiceName( m_aSelection.getSelectedCID() ) ); if( aDragMethodServiceName == ObjectIdentifier::getPieSegmentDragMethodServiceName() ) pDragMethod = new DragMethod_PieSegment( *pDrawViewWrapper, m_aSelection.getSelectedCID(), getChartModel() ); } @@ -744,6 +743,7 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) bool bMouseUpWithoutMouseDown = !m_bWaitingForMouseUp; m_bWaitingForMouseUp = false; bool bNotifySelectionChange = false; + bool bEditText = false; { SolarMutexGuard aGuard; @@ -843,7 +843,7 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) awt::Size aPageSize( ChartModelHelper::getPageSize( getChartModel() ) ); tools::Rectangle aPageRect( 0,0,aPageSize.Width,aPageSize.Height ); - const E3dObject* pE3dObject(dynamic_cast< const E3dObject*>(pObj)); + const E3dObject* pE3dObject(DynCastE3dObject(pObj)); if(nullptr != pE3dObject) { E3dScene* pScene(pE3dObject->getRootE3dSceneFromE3dObject()); @@ -864,17 +864,15 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) m_xUndoManager ); bool bChanged = false; - css::uno::Reference< css::frame::XModel > xModel = getModel(); - ChartModel* pModel = dynamic_cast<ChartModel*>(xModel.get()); - assert(pModel); + rtl::Reference< ChartModel > xModel = getChartModel(); if ( eObjectType == OBJECTTYPE_LEGEND ) - bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning( *pModel, false , true ); + bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning( *xModel, false , true ); bool bMoved = PositionAndSizeHelper::moveObject( m_aSelection.getSelectedCID() - , getChartModel() - , awt::Rectangle(aObjectRect.Left(),aObjectRect.Top(),aObjectRect.getWidth(),aObjectRect.getHeight()) + , xModel + , awt::Rectangle(aObjectRect.Left(),aObjectRect.Top(),aObjectRect.getOpenWidth(),aObjectRect.getOpenHeight()) , awt::Rectangle(aOldObjectRect.Left(), aOldObjectRect.Top(), 0, 0) - , awt::Rectangle(aPageRect.Left(),aPageRect.Top(),aPageRect.getWidth(),aPageRect.getHeight()) ); + , awt::Rectangle(aPageRect.Left(),aPageRect.Top(),aPageRect.getOpenWidth(),aPageRect.getOpenHeight()) ); if( bMoved || bChanged ) { @@ -922,7 +920,7 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) if( isDoubleClick(rMEvt) && !bMouseUpWithoutMouseDown /*#i106966#*/ ) { Point aMousePixel = rMEvt.GetPosPixel(); - execute_DoubleClick( &aMousePixel ); + execute_DoubleClick( &aMousePixel, bEditText ); } if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) @@ -931,18 +929,17 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) impl_SetMousePointer( rMEvt ); - if(bNotifySelectionChange) + if(bNotifySelectionChange || bEditText) impl_notifySelectionChangeListeners(); } -void ChartController::execute_DoubleClick( const Point* pMousePixel ) +void ChartController::execute_DoubleClick( const Point* pMousePixel, bool &bEditText ) { const SfxViewShell* pViewShell = SfxViewShell::Current(); - bool isMobilePhone = pViewShell && pViewShell->isLOKMobilePhone(); - if (isMobilePhone) + bool notAllowed = pViewShell && (pViewShell->isLOKMobilePhone() || pViewShell->IsLokReadOnlyView()); + if (notAllowed) return; - bool bEditText = false; if ( m_aSelection.hasSelection() ) { OUString aCID( m_aSelection.getSelectedCID() ); @@ -958,7 +955,7 @@ void ChartController::execute_DoubleClick( const Point* pMousePixel ) { // #i12587# support for shapes in chart SdrObject* pObj = DrawViewWrapper::getSdrObject( m_aSelection.getSelectedAdditionalShape() ); - if ( dynamic_cast< const SdrTextObj* >(pObj) != nullptr ) + if ( DynCastSdrTextObj(pObj) != nullptr ) { bEditText = true; } @@ -1006,8 +1003,7 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) impl_notifySelectionChangeListeners(); - css::uno::Reference< css::awt::XPopupMenu > xPopupMenu( m_xCC->getServiceManager()->createInstanceWithContext( - "com.sun.star.awt.PopupMenu", m_xCC ), css::uno::UNO_QUERY ); + rtl::Reference< VCLXPopupMenu > xPopupMenu = new VCLXPopupMenu(); Point aPos( rCEvt.GetMousePosPixel() ); if( !rCEvt.IsMouseEvent() ) @@ -1022,254 +1018,249 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) aMenuName = m_pDrawViewWrapper->IsTextEdit() ? std::u16string_view( u"drawtext" ) : std::u16string_view( u"draw" ); else { + ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() ); + // todo: the context menu should be specified by an xml file in uiconfig - if( xPopupMenu.is()) + sal_Int16 nUniqueId = 1; + if (eObjectType != OBJECTTYPE_DATA_TABLE) { - sal_Int16 nUniqueId = 1; lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Cut" ); lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Copy" ); lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Paste" ); xPopupMenu->insertSeparator( -1 ); + } - ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() ); - rtl::Reference< Diagram > xDiagram = getFirstDiagram(); + rtl::Reference< Diagram > xDiagram = getFirstDiagram(); - OUString aFormatCommand( lcl_getFormatCommandForObjectCID( m_aSelection.getSelectedCID() ) ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, aFormatCommand ); + OUString aFormatCommand( lcl_getFormatCommandForObjectCID( m_aSelection.getSelectedCID() ) ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, aFormatCommand ); + if (eObjectType == OBJECTTYPE_TITLE && m_pDrawViewWrapper->IsTextEdit()) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FontDialog" ); - //some commands for dataseries and points: + //some commands for dataseries and points: - if( eObjectType == OBJECTTYPE_DATA_SERIES || eObjectType == OBJECTTYPE_DATA_POINT ) + if( eObjectType == OBJECTTYPE_DATA_SERIES || eObjectType == OBJECTTYPE_DATA_POINT ) + { + bool bIsPoint = ( eObjectType == OBJECTTYPE_DATA_POINT ); + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); + rtl::Reference< RegressionCurveModel > xTrendline = RegressionCurveHelper::getFirstCurveNotMeanValueLine( xSeries ); + bool bHasEquation = RegressionCurveHelper::hasEquation( xTrendline ); + rtl::Reference< RegressionCurveModel > xMeanValue = RegressionCurveHelper::getMeanValueLine( xSeries ); + bool bHasYErrorBars = StatisticsHelper::hasErrorBars( xSeries ); + bool bHasXErrorBars = StatisticsHelper::hasErrorBars( xSeries, false ); + bool bHasDataLabelsAtSeries = DataSeriesHelper::hasDataLabelsAtSeries( xSeries ); + bool bHasDataLabelsAtPoints = DataSeriesHelper::hasDataLabelsAtPoints( xSeries ); + bool bHasDataLabelAtPoint = false; + sal_Int32 nPointIndex = -1; + if( bIsPoint ) { - bool bIsPoint = ( eObjectType == OBJECTTYPE_DATA_POINT ); - uno::Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getChartModel() ); - uno::Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); - Reference< chart2::XRegressionCurve > xTrendline( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xCurveCnt ) ); - bool bHasEquation = RegressionCurveHelper::hasEquation( xTrendline ); - Reference< chart2::XRegressionCurve > xMeanValue( RegressionCurveHelper::getMeanValueLine( xCurveCnt ) ); - bool bHasYErrorBars = StatisticsHelper::hasErrorBars( xSeries ); - bool bHasXErrorBars = StatisticsHelper::hasErrorBars( xSeries, false ); - bool bHasDataLabelsAtSeries = DataSeriesHelper::hasDataLabelsAtSeries( xSeries ); - bool bHasDataLabelsAtPoints = DataSeriesHelper::hasDataLabelsAtPoints( xSeries ); - bool bHasDataLabelAtPoint = false; - sal_Int32 nPointIndex = -1; - if( bIsPoint ) - { - nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() ); - bHasDataLabelAtPoint = DataSeriesHelper::hasDataLabelAtPoint( xSeries, nPointIndex ); - } - bool bSelectedPointIsFormatted = false; - bool bHasFormattedDataPointsOtherThanSelected = false; + nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() ); + bHasDataLabelAtPoint = DataSeriesHelper::hasDataLabelAtPoint( xSeries, nPointIndex ); + } + bool bSelectedPointIsFormatted = false; + bool bHasFormattedDataPointsOtherThanSelected = false; - Reference< beans::XPropertySet > xSeriesProperties( xSeries, uno::UNO_QUERY ); - if( xSeriesProperties.is() ) + if( xSeries.is() ) + { + uno::Sequence< sal_Int32 > aAttributedDataPointIndexList; + // "AttributedDataPoints" + if( xSeries->getFastPropertyValue( PROP_DATASERIES_ATTRIBUTED_DATA_POINTS ) >>= aAttributedDataPointIndexList ) { - uno::Sequence< sal_Int32 > aAttributedDataPointIndexList; - if( xSeriesProperties->getPropertyValue( "AttributedDataPoints" ) >>= aAttributedDataPointIndexList ) + if( aAttributedDataPointIndexList.hasElements() ) { - if( aAttributedDataPointIndexList.hasElements() ) + if( bIsPoint ) { - if( bIsPoint ) - { - auto aIndices( comphelper::sequenceToContainer<std::vector< sal_Int32 >>( aAttributedDataPointIndexList ) ); - std::vector< sal_Int32 >::iterator aIt = std::find( aIndices.begin(), aIndices.end(), nPointIndex ); - if( aIt != aIndices.end()) - bSelectedPointIsFormatted = true; - else - bHasFormattedDataPointsOtherThanSelected = true; - } + auto aIt = std::find( aAttributedDataPointIndexList.begin(), aAttributedDataPointIndexList.end(), nPointIndex ); + if (aIt != aAttributedDataPointIndexList.end()) + bSelectedPointIsFormatted = true; else bHasFormattedDataPointsOtherThanSelected = true; } + else + bHasFormattedDataPointsOtherThanSelected = true; } } + } - if( bIsPoint ) - { - if( bHasDataLabelAtPoint ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataLabel" ); - if( !bHasDataLabelAtPoint ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertDataLabel" ); - else - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteDataLabel" ); - if( bSelectedPointIsFormatted ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:ResetDataPoint" ); + if( bIsPoint ) + { + if( bHasDataLabelAtPoint ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataLabel" ); + if( !bHasDataLabelAtPoint ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertDataLabel" ); + else + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteDataLabel" ); + if( bSelectedPointIsFormatted ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:ResetDataPoint" ); - xPopupMenu->insertSeparator( -1 ); + xPopupMenu->insertSeparator( -1 ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataSeries" ); - } + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataSeries" ); + } - Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) ); - if( xChartType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeOfSeries( xSeries ) ); + if( xChartType->getChartType() == CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK ) + { + try { - try - { - Reference< beans::XPropertySet > xChartTypeProp( xChartType, uno::UNO_QUERY ); - if( xChartTypeProp.is() ) - { - bool bJapaneseStyle = false; - xChartTypeProp->getPropertyValue( "Japanese" ) >>= bJapaneseStyle; - - if( bJapaneseStyle ) - { - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockLoss" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockGain" ); - } - } - } - catch( const uno::Exception & ) + bool bJapaneseStyle = false; + xChartType->getPropertyValue( "Japanese" ) >>= bJapaneseStyle; + + if( bJapaneseStyle ) { - DBG_UNHANDLED_EXCEPTION("chart2"); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockLoss" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockGain" ); } } + catch( const uno::Exception & ) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + } + } - if( bHasDataLabelsAtSeries ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataLabels" ); - if( bHasEquation ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatTrendlineEquation" ); - if( xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMeanValue" ); - if( bHasXErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatXErrorBars" ); - if( bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatYErrorBars" ); + if( bHasDataLabelsAtSeries ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatDataLabels" ); + if( bHasEquation ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatTrendlineEquation" ); + if( xMeanValue.is() ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMeanValue" ); + if( bHasXErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatXErrorBars" ); + if( bHasYErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatYErrorBars" ); - xPopupMenu->insertSeparator( -1 ); + xPopupMenu->insertSeparator( -1 ); - if( !bHasDataLabelsAtSeries ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertDataLabels" ); - - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendline" ); - - if( !xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMeanValue" ); - if( !bHasXErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertXErrorBars" ); - if( !bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertYErrorBars" ); - if( bHasDataLabelsAtSeries || ( bHasDataLabelsAtPoints && bHasFormattedDataPointsOtherThanSelected ) ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteDataLabels" ); - if( bHasEquation ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendlineEquation" ); - if( xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMeanValue" ); - if( bHasXErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteXErrorBars" ); - if( bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteYErrorBars" ); - - if( bHasFormattedDataPointsOtherThanSelected ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:ResetAllDataPoints" ); + if( !bHasDataLabelsAtSeries ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertDataLabels" ); + + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendline" ); + + if( !xMeanValue.is() ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMeanValue" ); + if( !bHasXErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertXErrorBars" ); + if( !bHasYErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertYErrorBars" ); + if( bHasDataLabelsAtSeries || ( bHasDataLabelsAtPoints && bHasFormattedDataPointsOtherThanSelected ) ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteDataLabels" ); + if( bHasEquation ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendlineEquation" ); + if( xMeanValue.is() ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMeanValue" ); + if( bHasXErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteXErrorBars" ); + if( bHasYErrorBars ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteYErrorBars" ); + + if( bHasFormattedDataPointsOtherThanSelected ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:ResetAllDataPoints" ); - xPopupMenu->insertSeparator( -1 ); + xPopupMenu->insertSeparator( -1 ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId, ".uno:ArrangeRow" ); - uno::Reference< awt::XPopupMenu > xArrangePopupMenu( - m_xCC->getServiceManager()->createInstanceWithContext( - "com.sun.star.awt.PopupMenu", m_xCC ), uno::UNO_QUERY ); - if( xArrangePopupMenu.is() ) - { - sal_Int16 nSubId = nUniqueId + 1; - lcl_insertMenuCommand( xArrangePopupMenu, nSubId++, ".uno:Forward" ); - lcl_insertMenuCommand( xArrangePopupMenu, nSubId, ".uno:Backward" ); - xPopupMenu->setPopupMenu( nUniqueId, xArrangePopupMenu ); - nUniqueId = nSubId; - } - ++nUniqueId; - } - else if( eObjectType == OBJECTTYPE_DATA_CURVE ) - { - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendline" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatTrendlineEquation" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendlineEquation" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendlineEquationAndR2" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertR2Value" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendlineEquation" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteR2Value" ); - } - else if( eObjectType == OBJECTTYPE_DATA_CURVE_EQUATION ) - { - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertR2Value" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteR2Value" ); - } + lcl_insertMenuCommand( xPopupMenu, nUniqueId, ".uno:ArrangeRow" ); + rtl::Reference< VCLXPopupMenu > xArrangePopupMenu = new VCLXPopupMenu(); + sal_Int16 nSubId = nUniqueId + 1; + lcl_insertMenuCommand( xArrangePopupMenu, nSubId++, ".uno:Forward" ); + lcl_insertMenuCommand( xArrangePopupMenu, nSubId, ".uno:Backward" ); + xPopupMenu->setPopupMenu( nUniqueId, xArrangePopupMenu ); + nUniqueId = nSubId; + ++nUniqueId; + } + else if( eObjectType == OBJECTTYPE_DATA_CURVE ) + { + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendline" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatTrendlineEquation" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendlineEquation" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTrendlineEquationAndR2" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertR2Value" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteTrendlineEquation" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteR2Value" ); + } + else if( eObjectType == OBJECTTYPE_DATA_CURVE_EQUATION ) + { + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertR2Value" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteR2Value" ); + } - //some commands for axes: and grids + //some commands for axes: and grids - else if( eObjectType == OBJECTTYPE_AXIS || eObjectType == OBJECTTYPE_GRID || eObjectType == OBJECTTYPE_SUBGRID ) + else if( eObjectType == OBJECTTYPE_AXIS || eObjectType == OBJECTTYPE_GRID || eObjectType == OBJECTTYPE_SUBGRID ) + { + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); + if( xAxis.is() && xDiagram.is() ) { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() ); - if( xAxis.is() && xDiagram.is() ) - { - sal_Int32 nDimensionIndex = -1; - sal_Int32 nCooSysIndex = -1; - sal_Int32 nAxisIndex = -1; - AxisHelper::getIndicesForAxis( xAxis, xDiagram, nCooSysIndex, nDimensionIndex, nAxisIndex ); - bool bIsSecondaryAxis = nAxisIndex!=0; - bool bIsAxisVisible = AxisHelper::isAxisVisible( xAxis ); - bool bIsMajorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, true /*bMainGrid*/, xDiagram ); - bool bIsMinorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, false /*bMainGrid*/, xDiagram ); - bool bHasTitle = false; - uno::Reference< XTitled > xTitled( xAxis, uno::UNO_QUERY ); - if( xTitled.is()) - bHasTitle = !TitleHelper::getCompleteString( xTitled->getTitleObject() ).isEmpty(); - - if( eObjectType != OBJECTTYPE_AXIS && bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatAxis" ); - if( eObjectType != OBJECTTYPE_GRID && bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMajorGrid" ); - if( eObjectType != OBJECTTYPE_SUBGRID && bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMinorGrid" ); - - xPopupMenu->insertSeparator( -1 ); - - if( eObjectType != OBJECTTYPE_AXIS && !bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertAxis" ); - if( eObjectType != OBJECTTYPE_GRID && !bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMajorGrid" ); - if( eObjectType != OBJECTTYPE_SUBGRID && !bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMinorGrid" ); - if( !bHasTitle ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertAxisTitle" ); - - if( bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteAxis" ); - if( bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMajorGrid" ); - if( bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMinorGrid" ); - } - } - - if( eObjectType == OBJECTTYPE_DATA_STOCK_LOSS ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockGain" ); - else if( eObjectType == OBJECTTYPE_DATA_STOCK_GAIN ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockLoss" ); + sal_Int32 nDimensionIndex = -1; + sal_Int32 nCooSysIndex = -1; + sal_Int32 nAxisIndex = -1; + AxisHelper::getIndicesForAxis( xAxis, xDiagram, nCooSysIndex, nDimensionIndex, nAxisIndex ); + bool bIsSecondaryAxis = nAxisIndex!=0; + bool bIsAxisVisible = AxisHelper::isAxisVisible( xAxis ); + bool bIsMajorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, true /*bMainGrid*/, xDiagram ); + bool bIsMinorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, false /*bMainGrid*/, xDiagram ); + bool bHasTitle = !TitleHelper::getCompleteString( xAxis->getTitleObject2() ).isEmpty(); + + if( eObjectType != OBJECTTYPE_AXIS && bIsAxisVisible ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatAxis" ); + if( eObjectType != OBJECTTYPE_GRID && bIsMajorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMajorGrid" ); + if( eObjectType != OBJECTTYPE_SUBGRID && bIsMinorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatMinorGrid" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:TransformDialog" ); + xPopupMenu->insertSeparator( -1 ); - if( eObjectType == OBJECTTYPE_PAGE || eObjectType == OBJECTTYPE_DIAGRAM - || eObjectType == OBJECTTYPE_DIAGRAM_WALL - || eObjectType == OBJECTTYPE_DIAGRAM_FLOOR - || eObjectType == OBJECTTYPE_UNKNOWN ) - { - if( eObjectType != OBJECTTYPE_UNKNOWN ) - xPopupMenu->insertSeparator( -1 ); - bool bHasLegend = LegendHelper::hasLegend( xDiagram ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTitles" ); - if( !bHasLegend ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertLegend" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertRemoveAxes" ); - if( bHasLegend ) - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteLegend" ); + if( eObjectType != OBJECTTYPE_AXIS && !bIsAxisVisible ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertAxis" ); + if( eObjectType != OBJECTTYPE_GRID && !bIsMajorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMajorGrid" ); + if( eObjectType != OBJECTTYPE_SUBGRID && !bIsMinorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertMinorGrid" ); + if( !bHasTitle ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertAxisTitle" ); + + if( bIsAxisVisible ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteAxis" ); + if( bIsMajorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMajorGrid" ); + if( bIsMinorGridVisible && !bIsSecondaryAxis ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMinorGrid" ); + if (bIsAxisVisible) + lcl_insertMenuCommand(xPopupMenu, nUniqueId++, ".uno:InsertDataTable"); } + } + else if (eObjectType == OBJECTTYPE_DATA_TABLE) + { + lcl_insertMenuCommand(xPopupMenu, nUniqueId++, ".uno:DeleteDataTable"); + } - xPopupMenu->insertSeparator( -1 ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DiagramType" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DataRanges" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DiagramData" ); - lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:View3D" ); + if( eObjectType == OBJECTTYPE_DATA_STOCK_LOSS ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockGain" ); + else if( eObjectType == OBJECTTYPE_DATA_STOCK_GAIN ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockLoss" ); + + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:TransformDialog" ); + + if( eObjectType == OBJECTTYPE_PAGE || eObjectType == OBJECTTYPE_DIAGRAM + || eObjectType == OBJECTTYPE_DIAGRAM_WALL + || eObjectType == OBJECTTYPE_DIAGRAM_FLOOR + || eObjectType == OBJECTTYPE_UNKNOWN ) + { + if( eObjectType != OBJECTTYPE_UNKNOWN ) + xPopupMenu->insertSeparator( -1 ); + bool bHasLegend = LegendHelper::hasLegend( xDiagram ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertTitles" ); + if( !bHasLegend ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertLegend" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:InsertRemoveAxes" ); + if( bHasLegend ) + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteLegend" ); } + + xPopupMenu->insertSeparator( -1 ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DiagramType" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DataRanges" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DiagramData" ); + lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:View3D" ); } css::uno::Sequence< css::uno::Any > aArgs{ @@ -1303,14 +1294,13 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) } } - Menu* pPopupMenu = comphelper::getFromUnoTunnel<VCLXMenu>(xPopupMenu)->GetMenu(); - boost::property_tree::ptree aMenu = SfxDispatcher::fillPopupMenu(pPopupMenu); + boost::property_tree::ptree aMenu = SfxDispatcher::fillPopupMenu(xPopupMenu); boost::property_tree::ptree aRoot; aRoot.add_child("menu", aMenu); std::stringstream aStream; boost::property_tree::write_json(aStream, aRoot, true); - pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CONTEXT_MENU, aStream.str().c_str()); + pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CONTEXT_MENU, OString(aStream.str())); } } else @@ -1330,8 +1320,7 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) ( rCEvt.GetCommand() == CommandEventId::InputContextChange ) ) { //#i84417# enable editing with IME - if( m_pDrawViewWrapper ) - m_pDrawViewWrapper->Command( rCEvt, pChartWindow ); + m_pDrawViewWrapper->Command( rCEvt, pChartWindow ); } } @@ -1384,7 +1373,7 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) { // Navigation (Tab/F3/Home/End) rtl::Reference<::chart::ChartModel> xChartDoc( getChartModel() ); - ObjectKeyNavigation aObjNav( m_aSelection.getSelectedOID(), xChartDoc, comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_xChartView )); + ObjectKeyNavigation aObjNav( m_aSelection.getSelectedOID(), xChartDoc, m_xChartView.get() ); awt::KeyEvent aKeyEvent( ::svt::AcceleratorExecute::st_VCLKey2AWTKey( aKeyCode )); bReturn = aObjNav.handleKeyEvent( aKeyEvent ); if( bReturn ) @@ -1427,7 +1416,7 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) nCode == KEY_DOWN ) { bDrag = true; - OUString aParameter( ObjectIdentifier::getDragParameterString( m_aSelection.getSelectedCID() )); + std::u16string_view aParameter( ObjectIdentifier::getDragParameterString( m_aSelection.getSelectedCID() )); sal_Int32 nOffsetPercentDummy( 0 ); awt::Point aMinimumPosition( 0, 0 ); awt::Point aMaximumPosition( 0, 0 ); @@ -1532,7 +1521,7 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) else bReturn = PositionAndSizeHelper::moveObject( m_aSelection.getSelectedCID(), getChartModel(), - awt::Rectangle(aRect.Left() + fShiftAmountX, aRect.Top() + fShiftAmountY, aRect.getWidth(), aRect.getHeight()), + awt::Rectangle(aRect.Left() + fShiftAmountX, aRect.Top() + fShiftAmountY, aRect.getOpenWidth(), aRect.getOpenHeight()), awt::Rectangle(aRect.Left(), aRect.Top(), 0, 0), awt::Rectangle(0, 0, aPageSize.Width, aPageSize.Height)); } @@ -1572,10 +1561,10 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) // dumping the shape if( !bReturn && bCtrl && nCode == KEY_F12) { - uno::Reference< qa::XDumper > xChartModel( getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xChartModel = getChartModel(); if(xChartModel.is()) { - OUString aDump = xChartModel->dump(); + OUString aDump = xChartModel->dump("shapes"); SAL_WARN("chart2", aDump); } } @@ -1613,10 +1602,10 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) bReturn = executeDispatch_Delete(); if( ! bReturn ) { - std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(pChartWindow->GetFrameWeld(), + std::shared_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(pChartWindow->GetFrameWeld(), VclMessageType::Info, VclButtonsType::Ok, SchResId(STR_ACTION_NOTPOSSIBLE))); - xInfoBox->run(); + xInfoBox->runAsync(xInfoBox, [] (int) {}); } } @@ -1650,10 +1639,8 @@ bool ChartController::requestQuickHelp( rOutQuickHelpText = ObjectNameProvider::getHelpText( aCID, xChartModel, bIsBalloonHelp /* bVerbose */ ); // set rectangle - ExplicitValueProvider * pValueProvider( - comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_xChartView )); - if( pValueProvider ) - rOutEqualRect = pValueProvider->getRectangleOfObject( aCID, true ); + if( m_xChartView ) + rOutEqualRect = m_xChartView->getRectangleOfObject( aCID, true ); } return bResult; @@ -1738,7 +1725,8 @@ void SAL_CALL ChartController::addSelectionChangeListener( const uno::Reference< return; //behave passive if already disposed or suspended //--add listener - m_aLifeTimeManager.m_aListenerContainer.addInterface( cppu::UnoType<view::XSelectionChangeListener>::get(), xListener ); + std::unique_lock aGuard2(m_aLifeTimeManager.m_aAccessMutex); + m_aLifeTimeManager.m_aSelectionChangeListeners.addInterface( aGuard2, xListener ); } void SAL_CALL ChartController::removeSelectionChangeListener( const uno::Reference<view::XSelectionChangeListener> & xListener ) @@ -1748,22 +1736,18 @@ void SAL_CALL ChartController::removeSelectionChangeListener( const uno::Referen return; //behave passive if already disposed or suspended //--remove listener - m_aLifeTimeManager.m_aListenerContainer.removeInterface( cppu::UnoType<view::XSelectionChangeListener>::get(), xListener ); + std::unique_lock aGuard2(m_aLifeTimeManager.m_aAccessMutex); + m_aLifeTimeManager.m_aSelectionChangeListeners.removeInterface( aGuard2, xListener ); } void ChartController::impl_notifySelectionChangeListeners() { - ::comphelper::OInterfaceContainerHelper2* pIC = m_aLifeTimeManager.m_aListenerContainer - .getContainer( cppu::UnoType<view::XSelectionChangeListener>::get() ); - if( pIC ) + std::unique_lock aGuard(m_aLifeTimeManager.m_aAccessMutex); + if( m_aLifeTimeManager.m_aSelectionChangeListeners.getLength(aGuard) ) { uno::Reference< view::XSelectionSupplier > xSelectionSupplier(this); lang::EventObject aEvent( xSelectionSupplier ); - ::comphelper::OInterfaceIteratorHelper2 aIt( *pIC ); - while( aIt.hasMoreElements() ) - { - static_cast< view::XSelectionChangeListener* >( aIt.next() )->selectionChanged( aEvent ); - } + m_aLifeTimeManager.m_aSelectionChangeListeners.notifyEach(aGuard, &view::XSelectionChangeListener::selectionChanged, aEvent); } } @@ -1805,8 +1789,7 @@ bool ChartController::impl_moveOrResizeObject( if( ( bDeterminePos || bDetermineSize ) && ( aRefSize.Width > 0 && aRefSize.Height > 0 ) ) { - ExplicitValueProvider * pValueProvider( - comphelper::getFromUnoTunnel<ExplicitValueProvider>( m_xChartView )); + ExplicitValueProvider * pValueProvider( m_xChartView.get() ); if( pValueProvider ) { awt::Rectangle aRect( pValueProvider->getRectangleOfObject( rCID )); @@ -1863,15 +1846,15 @@ bool ChartController::impl_moveOrResizeObject( return bResult; } -bool ChartController::impl_DragDataPoint( const OUString & rCID, double fAdditionalOffset ) +bool ChartController::impl_DragDataPoint( std::u16string_view rCID, double fAdditionalOffset ) { bool bResult = false; if( fAdditionalOffset < -1.0 || fAdditionalOffset > 1.0 || fAdditionalOffset == 0.0 ) return bResult; sal_Int32 nDataPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( rCID ); - uno::Reference< chart2::XDataSeries > xSeries( - ObjectIdentifier::getDataSeriesForCID( rCID, getChartModel() )); + rtl::Reference< DataSeries > xSeries = + ObjectIdentifier::getDataSeriesForCID( rCID, getChartModel() ); if( xSeries.is()) { try @@ -2073,12 +2056,7 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) pChartWindow->SetPointer( PointerStyle::Arrow ); } -css::uno::Reference<css::uno::XInterface> const & ChartController::getChartView() const -{ - return m_xChartView; -} - -void ChartController::sendPopupRequest(OUString const & rCID, tools::Rectangle aRectangle) +void ChartController::sendPopupRequest(std::u16string_view rCID, tools::Rectangle aRectangle) { ChartModel* pChartModel = m_aModel->getModel().get(); if (!pChartModel) @@ -2097,11 +2075,11 @@ void ChartController::sendPopupRequest(OUString const & rCID, tools::Rectangle a return; // Get dimension index from CID - sal_Int32 nStartPos = rCID.lastIndexOf('.'); + size_t nStartPos = rCID.rfind('.'); nStartPos++; - sal_Int32 nEndPos = rCID.getLength(); - OUString sDimensionIndex = rCID.copy(nStartPos, nEndPos - nStartPos); - sal_Int32 nDimensionIndex = sDimensionIndex.toInt32(); + sal_Int32 nEndPos = rCID.size(); + std::u16string_view sDimensionIndex = rCID.substr(nStartPos, nEndPos - nStartPos); + sal_Int32 nDimensionIndex = o3tl::toInt32(sDimensionIndex); awt::Rectangle xRectangle { sal_Int32(aRectangle.Left()), @@ -2112,12 +2090,12 @@ void ChartController::sendPopupRequest(OUString const & rCID, tools::Rectangle a uno::Sequence<beans::PropertyValue> aCallbackData = comphelper::InitPropertySequence( { - {"Rectangle", uno::makeAny<awt::Rectangle>(xRectangle)}, - {"DimensionIndex", uno::makeAny<sal_Int32>(nDimensionIndex)}, - {"PivotTableName", uno::makeAny<OUString>(sPivotTableName)}, + {"Rectangle", uno::Any(xRectangle)}, + {"DimensionIndex", uno::Any(sal_Int32(nDimensionIndex))}, + {"PivotTableName", uno::Any(sPivotTableName)}, }); - pPopupRequest->getCallback()->notify(uno::makeAny(aCallbackData)); + pPopupRequest->getCallback()->notify(uno::Any(aCallbackData)); } } //namespace chart diff --git a/chart2/source/controller/main/ChartDropTargetHelper.cxx b/chart2/source/controller/main/ChartDropTargetHelper.cxx index ceb599569e16..fc6762598a68 100644 --- a/chart2/source/controller/main/ChartDropTargetHelper.cxx +++ b/chart2/source/controller/main/ChartDropTargetHelper.cxx @@ -18,14 +18,15 @@ */ #include "ChartDropTargetHelper.hxx" +#include <DataSource.hxx> #include <DataSourceHelper.hxx> #include <ChartModel.hxx> +#include <Diagram.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/data/XDataProvider.hpp> -#include <com/sun/star/container/XChild.hpp> #include <sot/formats.hxx> +#include <utility> #include <vector> using namespace ::com::sun::star; @@ -61,9 +62,9 @@ namespace chart ChartDropTargetHelper::ChartDropTargetHelper( const Reference< datatransfer::dnd::XDropTarget >& rxDropTarget, - const rtl::Reference<::chart::ChartModel> & xChartDocument ) : + rtl::Reference<::chart::ChartModel> xChartDocument ) : DropTargetHelper( rxDropTarget ), - m_xChartDocument( xChartDocument ) + m_xChartDocument(std::move( xChartDocument )) {} ChartDropTargetHelper::~ChartDropTargetHelper() @@ -119,15 +120,15 @@ sal_Int8 ChartDropTargetHelper::ExecuteDrop( const ExecuteDropEvent& rEvt ) // @todo: get the title somehow and compare it to // aDocName if successful (the document is the // parent) - Reference< chart2::XDiagram > xDiagram( m_xChartDocument->getFirstDiagram() ); + rtl::Reference< Diagram > xDiagram = m_xChartDocument->getFirstChartDiagram(); Reference< chart2::data::XDataProvider > xDataProvider( m_xChartDocument->getDataProvider()); if( xDataProvider.is() && xDiagram.is() && DataSourceHelper::allArgumentsForRectRangeDetected( m_xChartDocument )) { - Reference< chart2::data::XDataSource > xDataSource( - DataSourceHelper::pressUsedDataIntoRectangularFormat( m_xChartDocument )); + rtl::Reference< DataSource > xDataSource1 = + DataSourceHelper::pressUsedDataIntoRectangularFormat( m_xChartDocument ); Sequence< beans::PropertyValue > aArguments( - xDataProvider->detectArguments( xDataSource )); + xDataProvider->detectArguments( xDataSource1 )); OUString aOldRange; beans::PropertyValue * pCellRange = nullptr; @@ -155,8 +156,9 @@ sal_Int8 ChartDropTargetHelper::ExecuteDrop( const ExecuteDropEvent& rEvt ) pCellRange->Value <<= aRangeString; } - xDataSource.set( xDataProvider->createDataSource( aArguments )); - xDiagram->setDiagramData( xDataSource, aArguments ); + Reference< chart2::data::XDataSource > xDataSource2 = + xDataProvider->createDataSource( aArguments ); + xDiagram->setDiagramData( xDataSource2, aArguments ); // always return copy state to avoid deletion of the dragged range nResult = DND_ACTION_COPY; diff --git a/chart2/source/controller/main/ChartDropTargetHelper.hxx b/chart2/source/controller/main/ChartDropTargetHelper.hxx index 4955d6eaea43..ab573f1cd694 100644 --- a/chart2/source/controller/main/ChartDropTargetHelper.hxx +++ b/chart2/source/controller/main/ChartDropTargetHelper.hxx @@ -37,7 +37,7 @@ public: ChartDropTargetHelper() = delete; explicit ChartDropTargetHelper( const css::uno::Reference< css::datatransfer::dnd::XDropTarget >& rxDropTarget, - const rtl::Reference<::chart::ChartModel> & xChartDocument ); + rtl::Reference<::chart::ChartModel> xChartDocument ); virtual ~ChartDropTargetHelper() override; protected: diff --git a/chart2/source/controller/main/ChartFrameloader.cxx b/chart2/source/controller/main/ChartFrameloader.cxx index 991c6a87e00f..2ff45588002b 100644 --- a/chart2/source/controller/main/ChartFrameloader.cxx +++ b/chart2/source/controller/main/ChartFrameloader.cxx @@ -20,11 +20,14 @@ #include "ChartFrameloader.hxx" #include <servicenames.hxx> #include <MediaDescriptorHelper.hxx> +#include <ChartController.hxx> +#include <ChartModel.hxx> +#include <unotools/fcm.hxx> #include <unotools/mediadescriptor.hxx> #include <cppuhelper/supportsservice.hxx> #include <com/sun/star/frame/XLoadable.hpp> #include <com/sun/star/uno/XComponentContext.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { @@ -93,44 +96,22 @@ sal_Bool SAL_CALL ChartFrameLoader::load( const uno::Sequence< beans::PropertyVa if( ! xModel.is()) { //@todo?? load mechanism to cancel during loading of document - xModel.set( - m_xCC->getServiceManager()->createInstanceWithContext( - CHART_MODEL_SERVICE_IMPLEMENTATION_NAME, m_xCC ) - , uno::UNO_QUERY ); + xModel = new ChartModel(m_xCC); if( impl_checkCancel() ) return false; } //create the controller(+XWindow) - uno::Reference< frame::XController > xController; - uno::Reference< awt::XWindow > xComponentWindow; - { - xController.set( - m_xCC->getServiceManager()->createInstanceWithContext( - CHART_CONTROLLER_SERVICE_IMPLEMENTATION_NAME,m_xCC ) - , uno::UNO_QUERY ); - - //!!!it is a special characteristic of the example application - //that the controller simultaneously provides the XWindow controller functionality - xComponentWindow = - uno::Reference< awt::XWindow >( xController, uno::UNO_QUERY ); + rtl::Reference< ChartController > xController = new ChartController(m_xCC); - if( impl_checkCancel() ) - return false; - } + if( impl_checkCancel() ) + return false; //connect frame, controller and model one to each other: - if(xController.is()&&xModel.is()) + if(xModel.is()) { - xModel->connectController(xController); - xModel->setCurrentController(xController); - xController->attachModel(xModel); - if(xFrame.is()) - xFrame->setComponent(xComponentWindow,xController); - //creates the view and menu - //for correct menu creation the initialized component must be already set into the frame - xController->attachFrame(xFrame); + utl::ConnectFrameControllerModel(xFrame, xController, xModel); } // call initNew() or load() at XLoadable @@ -167,8 +148,9 @@ sal_Bool SAL_CALL ChartFrameLoader::load( const uno::Sequence< beans::PropertyVa xLoadable->load( aCompleteMediaDescriptor ); //resize standalone files to get correct size: - if( xComponentWindow.is() && aMDHelper.ISSET_FilterName && aMDHelper.FilterName == "StarChart 5.0" ) + if( aMDHelper.ISSET_FilterName && aMDHelper.FilterName == "StarChart 5.0" ) { + uno::Reference<awt::XWindow> xComponentWindow = xController->getComponentWindow(); awt::Rectangle aRect( xComponentWindow->getPosSize() ); xComponentWindow->setPosSize( aRect.X, aRect.Y, aRect.Width, aRect.Height, 0 ); } diff --git a/chart2/source/controller/main/ChartModelClone.cxx b/chart2/source/controller/main/ChartModelClone.cxx index dfb089d566e8..b1228cd383a3 100644 --- a/chart2/source/controller/main/ChartModelClone.cxx +++ b/chart2/source/controller/main/ChartModelClone.cxx @@ -21,6 +21,7 @@ #include <ChartModel.hxx> #include <ChartModelHelper.hxx> #include <ControllerLockGuard.hxx> +#include <DataSource.hxx> #include <DataSourceHelper.hxx> #include <com/sun/star/chart2/XAnyDescriptionAccess.hpp> @@ -28,14 +29,10 @@ #include <com/sun/star/util/XCloneable.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/chart2/XTitled.hpp> -#include <com/sun/star/util/XModifiable.hpp> -#include <com/sun/star/chart2/data/XDataSource.hpp> #include <com/sun/star/chart2/data/XLabeledDataSequence.hpp> #include <comphelper/property.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { @@ -51,10 +48,6 @@ namespace chart using ::com::sun::star::chart2::XInternalDataProvider; using ::com::sun::star::chart2::XAnyDescriptionAccess; using ::com::sun::star::view::XSelectionSupplier; - using ::com::sun::star::lang::XComponent; - using ::com::sun::star::chart2::XTitled; - using ::com::sun::star::util::XModifiable; - using ::com::sun::star::chart2::data::XDataSource; using ::com::sun::star::chart2::data::XLabeledDataSequence; // = helper @@ -201,7 +194,7 @@ namespace chart if ( i_model->hasInternalDataProvider() ) { Reference< XInternalDataProvider > xNewDataProvider( i_model->getDataProvider(), UNO_QUERY ); - Reference< XDataSource > xUsedData( DataSourceHelper::getUsedData( *i_model ) ); + rtl::Reference< DataSource > xUsedData = DataSourceHelper::getUsedData( *i_model ); if ( xUsedData.is() && xNewDataProvider.is() ) { const Sequence< Reference< XLabeledDataSequence > > aData( xUsedData->getDataSequences() ); diff --git a/chart2/source/controller/main/ChartTransferable.cxx b/chart2/source/controller/main/ChartTransferable.cxx index 322e73be3aa8..7c8eb12041f6 100644 --- a/chart2/source/controller/main/ChartTransferable.cxx +++ b/chart2/source/controller/main/ChartTransferable.cxx @@ -49,20 +49,19 @@ ChartTransferable::ChartTransferable( SdrModel& rSdrModel, SdrObject* pSelectedObj, bool bDrawing) -: m_pMarkedObjModel( nullptr ) - ,m_bDrawing( bDrawing ) + : m_bDrawing(bDrawing) { - std::unique_ptr<SdrExchangeView> pExchgView(std::make_unique<SdrView>( rSdrModel )); - SdrPageView* pPv = pExchgView->ShowSdrPage( rSdrModel.GetPage( 0 )); + SdrView aExchgView( rSdrModel ); + SdrPageView* pPv = aExchgView.ShowSdrPage( rSdrModel.GetPage( 0 )); if( pSelectedObj ) - pExchgView->MarkObj( pSelectedObj, pPv ); + aExchgView.MarkObj( pSelectedObj, pPv ); else - pExchgView->MarkAllObj( pPv ); - Graphic aGraphic( pExchgView->GetMarkedObjMetaFile(true)); + aExchgView.MarkAllObj( pPv ); + Graphic aGraphic( aExchgView.GetMarkedObjMetaFile(true)); m_xMetaFileGraphic.set( aGraphic.GetXGraphic()); if ( m_bDrawing ) { - m_pMarkedObjModel = pExchgView->CreateMarkedObjModel().release(); + m_xMarkedObjModel = aExchgView.CreateMarkedObjModel(); } } @@ -89,7 +88,7 @@ bool ChartTransferable::GetData( const css::datatransfer::DataFlavor& rFlavor, c { if ( nFormat == SotClipboardFormatId::DRAWING ) { - bResult = SetObject( m_pMarkedObjModel, CHARTTRANSFER_OBJECTTYPE_DRAWMODEL, rFlavor ); + bResult = SetObject(m_xMarkedObjModel.get(), CHARTTRANSFER_OBJECTTYPE_DRAWMODEL, rFlavor); } else if ( nFormat == SotClipboardFormatId::GDIMETAFILE ) { @@ -106,7 +105,7 @@ bool ChartTransferable::GetData( const css::datatransfer::DataFlavor& rFlavor, c return bResult; } -bool ChartTransferable::WriteObject( tools::SvRef<SotTempStream>& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, +bool ChartTransferable::WriteObject( SvStream& rOStm, void* pUserObject, sal_uInt32 nUserObjectId, const datatransfer::DataFlavor& /* rFlavor */ ) { // called from SetObject, put data into stream @@ -119,12 +118,12 @@ bool ChartTransferable::WriteObject( tools::SvRef<SotTempStream>& rxOStm, void* SdrModel* pMarkedObjModel = static_cast< SdrModel* >( pUserObject ); if ( pMarkedObjModel ) { - rxOStm->SetBufferSize( 0xff00 ); + rOStm.SetBufferSize( 0xff00 ); // for the changed pool defaults from drawing layer pool set those // attributes as hard attributes to preserve them for saving const SfxItemPool& rItemPool = pMarkedObjModel->GetItemPool(); - const SvxFontHeightItem& rDefaultFontHeight = rItemPool.GetDefaultItem( EE_CHAR_FONTHEIGHT ); + const SvxFontHeightItem& rDefaultFontHeight = rItemPool.GetUserOrPoolDefaultItem( EE_CHAR_FONTHEIGHT ); sal_uInt16 nCount = pMarkedObjModel->GetPageCount(); for ( sal_uInt16 i = 0; i < nCount; ++i ) { @@ -141,10 +140,10 @@ bool ChartTransferable::WriteObject( tools::SvRef<SotTempStream>& rxOStm, void* } } - Reference< io::XOutputStream > xDocOut( new utl::OOutputStreamWrapper( *rxOStm ) ); + Reference< io::XOutputStream > xDocOut( new utl::OOutputStreamWrapper( rOStm ) ); SvxDrawingLayerExport( pMarkedObjModel, xDocOut ); - bRet = ( rxOStm->GetError() == ERRCODE_NONE ); + bRet = ( rOStm.GetError() == ERRCODE_NONE ); } } break; diff --git a/chart2/source/controller/main/ChartTransferable.hxx b/chart2/source/controller/main/ChartTransferable.hxx index 34567dceb6a9..486fdb48c5a9 100644 --- a/chart2/source/controller/main/ChartTransferable.hxx +++ b/chart2/source/controller/main/ChartTransferable.hxx @@ -46,12 +46,12 @@ protected: // implementation of TransferableHelper methods virtual void AddSupportedFormats() override; virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override; - virtual bool WriteObject( tools::SvRef<SotTempStream>& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, + virtual bool WriteObject( SvStream& rOStm, void* pUserObject, sal_uInt32 nUserObjectId, const css::datatransfer::DataFlavor& rFlavor ) override; private: css::uno::Reference< css::graphic::XGraphic > m_xMetaFileGraphic; - SdrModel* m_pMarkedObjModel; + std::unique_ptr<SdrModel> m_xMarkedObjModel; bool m_bDrawing; }; diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx index b3d2c8db4df6..60ab7eb0ed2d 100644 --- a/chart2/source/controller/main/ChartWindow.cxx +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -209,7 +209,6 @@ void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) if( ( rHEvt.GetMode() & HelpEventMode::QUICK ) && m_pWindowController ) { -// Point aLogicHitPos = PixelToLogic( rHEvt.GetMousePosPixel()); // old chart: GetPointerPosPixel() Point aLogicHitPos = PixelToLogic( GetPointerPosPixel()); OUString aQuickHelpText; awt::Rectangle aHelpRect; @@ -218,12 +217,14 @@ void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) if( bHelpHandled ) { + tools::Rectangle aPixelRect(LogicToPixel(lcl_AWTRectToVCLRect(aHelpRect))); + tools::Rectangle aScreenRect(OutputToScreenPixel(aPixelRect.TopLeft()), + OutputToScreenPixel(aPixelRect.BottomRight())); + if( bIsBalloonHelp ) - Help::ShowBalloon( - this, rHEvt.GetMousePosPixel(), lcl_AWTRectToVCLRect( aHelpRect ), aQuickHelpText ); + Help::ShowBalloon(this, rHEvt.GetMousePosPixel(), aScreenRect, aQuickHelpText); else - Help::ShowQuickHelp( - this, lcl_AWTRectToVCLRect( aHelpRect ), aQuickHelpText ); + Help::ShowQuickHelp(this, aScreenRect, aQuickHelpText); } } @@ -231,21 +232,6 @@ void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) vcl::Window::RequestHelp( rHEvt ); } -void ChartWindow::LogicMouseButtonDown(const MouseEvent& rEvent) -{ - MouseButtonDown(rEvent); -} - -void ChartWindow::LogicMouseButtonUp(const MouseEvent& rEvent) -{ - MouseButtonUp(rEvent); -} - -void ChartWindow::LogicMouseMove(const MouseEvent& rEvent) -{ - MouseMove(rEvent); -} - void ChartWindow::adjustHighContrastMode() { static const DrawModeFlags nContrastMode = @@ -260,23 +246,11 @@ void ChartWindow::ForceInvalidate() { vcl::Window::Invalidate(); } -void ChartWindow::Invalidate( InvalidateFlags nFlags ) -{ - if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" - return; - vcl::Window::Invalidate( nFlags ); -} -void ChartWindow::Invalidate( const tools::Rectangle& rRect, InvalidateFlags nFlags ) -{ - if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" - return; - vcl::Window::Invalidate( rRect, nFlags ); -} -void ChartWindow::Invalidate( const vcl::Region& rRegion, InvalidateFlags nFlags ) +void ChartWindow::ImplInvalidate( const vcl::Region* rRegion, InvalidateFlags nFlags ) { if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" return; - vcl::Window::Invalidate( rRegion, nFlags ); + vcl::Window::ImplInvalidate( rRegion, nFlags ); } void ChartWindow::LogicInvalidate(const tools::Rectangle* pRectangle) diff --git a/chart2/source/controller/main/CommandDispatch.cxx b/chart2/source/controller/main/CommandDispatch.cxx index 9a16fbb73b8b..2cb25f68d5bf 100644 --- a/chart2/source/controller/main/CommandDispatch.cxx +++ b/chart2/source/controller/main/CommandDispatch.cxx @@ -19,7 +19,6 @@ #include "CommandDispatch.hxx" #include <com/sun/star/util/URLTransformer.hpp> -#include <tools/diagnose_ex.h> using namespace ::com::sun::star; @@ -31,7 +30,6 @@ namespace chart CommandDispatch::CommandDispatch( const Reference< uno::XComponentContext > & xContext ) : - impl::CommandDispatch_Base( m_aMutex ), m_xContext( xContext ) { } @@ -44,17 +42,11 @@ void CommandDispatch::initialize() // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed -void SAL_CALL CommandDispatch::disposing() +void CommandDispatch::disposing(std::unique_lock<std::mutex>& rGuard) { Reference< uno::XInterface > xEventSource(static_cast< cppu::OWeakObject* >( this )); for( auto& rElement : m_aListeners ) - { - if( rElement.second ) - { - rElement.second->disposeAndClear( xEventSource ); - rElement.second.reset(); - } - } + rElement.second.disposeAndClear( rGuard, xEventSource ); m_aListeners.clear(); } @@ -64,24 +56,29 @@ void SAL_CALL CommandDispatch::dispatch( const util::URL& /* URL */, const Seque void SAL_CALL CommandDispatch::addStatusListener( const Reference< frame::XStatusListener >& Control, const util::URL& URL ) { - tListenerMap::iterator aIt( m_aListeners.find( URL.Complete )); - if( aIt == m_aListeners.end()) { - aIt = m_aListeners.insert( - m_aListeners.begin(), - tListenerMap::value_type( URL.Complete, new ::comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener>( m_aMutex ))); - } - OSL_ASSERT( aIt != m_aListeners.end()); + std::unique_lock g(m_aMutex); + tListenerMap::iterator aIt( m_aListeners.find( URL.Complete )); + if( aIt == m_aListeners.end()) + { + aIt = m_aListeners.emplace( + std::piecewise_construct, + std::forward_as_tuple(URL.Complete), + std::forward_as_tuple()).first; + } + assert( aIt != m_aListeners.end()); - aIt->second->addInterface( Control ); + aIt->second.addInterface( g, Control ); + } fireStatusEvent( URL.Complete, Control ); } void SAL_CALL CommandDispatch::removeStatusListener( const Reference< frame::XStatusListener >& Control, const util::URL& URL ) { + std::unique_lock g(m_aMutex); tListenerMap::iterator aIt( m_aListeners.find( URL.Complete )); if( aIt != m_aListeners.end()) - (*aIt).second->removeInterface( Control ); + (*aIt).second.removeInterface( g, Control ); } // ____ XModifyListener ____ @@ -132,22 +129,8 @@ void CommandDispatch::fireStatusEventForURL( tListenerMap::iterator aIt( m_aListeners.find( aURL.Complete )); if( aIt != m_aListeners.end()) { - if( aIt->second ) - { - ::comphelper::OInterfaceIteratorHelper3 aIntfIt( *((*aIt).second) ); - - while( aIntfIt.hasMoreElements()) - { - try - { - aIntfIt.next()->statusChanged( aEventToSend ); - } - catch( const uno::Exception & ) - { - DBG_UNHANDLED_EXCEPTION("chart2"); - } - } - } + std::unique_lock g(m_aMutex); + aIt->second.notifyEach(g, &css::frame::XStatusListener::statusChanged, aEventToSend); } } } diff --git a/chart2/source/controller/main/CommandDispatch.hxx b/chart2/source/controller/main/CommandDispatch.hxx index 16e0b5ab72bc..feb1c2183af5 100644 --- a/chart2/source/controller/main/CommandDispatch.hxx +++ b/chart2/source/controller/main/CommandDispatch.hxx @@ -18,14 +18,12 @@ */ #pragma once -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase.hxx> -#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/compbase.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <com/sun/star/frame/XDispatch.hpp> #include <com/sun/star/util/XModifyListener.hpp> #include <map> -#include <memory> namespace com::sun::star::uno { class XComponentContext; } namespace com::sun::star::util { class XURLTransformer; } @@ -35,7 +33,7 @@ namespace chart namespace impl { -typedef ::cppu::WeakComponentImplHelper< +typedef ::comphelper::WeakComponentImplHelper< css::frame::XDispatch, css::util::XModifyListener > CommandDispatch_Base; @@ -43,9 +41,7 @@ typedef ::cppu::WeakComponentImplHelper< /** This is the base class for an XDispatch. */ -class CommandDispatch : - public cppu::BaseMutex, - public impl::CommandDispatch_Base +class CommandDispatch : public impl::CommandDispatch_Base { public: explicit CommandDispatch( const css::uno::Reference< css::uno::XComponentContext > & xContext ); @@ -107,7 +103,7 @@ protected: // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed - virtual void SAL_CALL disposing() override; + virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; // ____ XModifyListener ____ virtual void SAL_CALL modified( @@ -121,7 +117,7 @@ private: css::uno::Reference< css::uno::XComponentContext > m_xContext; css::uno::Reference< css::util::XURLTransformer > m_xURLTransformer; - typedef std::map< OUString, std::unique_ptr<::comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener>> > + typedef std::map< OUString, ::comphelper::OInterfaceContainerHelper4<css::frame::XStatusListener> > tListenerMap; tListenerMap m_aListeners; diff --git a/chart2/source/controller/main/CommandDispatchContainer.cxx b/chart2/source/controller/main/CommandDispatchContainer.cxx index 05eea58de66d..c16a0e45be37 100644 --- a/chart2/source/controller/main/CommandDispatchContainer.cxx +++ b/chart2/source/controller/main/CommandDispatchContainer.cxx @@ -26,8 +26,8 @@ #include <ChartModel.hxx> #include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> +#include <osl/diagnose.h> #include <rtl/ref.hxx> #include <o3tl/sorted_vector.hxx> diff --git a/chart2/source/controller/main/ConfigurationAccess.cxx b/chart2/source/controller/main/ConfigurationAccess.cxx deleted file mode 100644 index f6dfecc60113..000000000000 --- a/chart2/source/controller/main/ConfigurationAccess.cxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include <ConfigurationAccess.hxx> - -#include <unotools/syslocale.hxx> -#include <unotools/configitem.hxx> -#include <unotools/localedatawrapper.hxx> - -namespace chart -{ -using namespace ::com::sun::star; - -namespace -{ -bool lcl_IsMetric() -{ - SvtSysLocale aSysLocale; - MeasurementSystem eSys = aSysLocale.GetLocaleData().getMeasurementSystemEnum(); - - return ( eSys == MeasurementSystem::Metric ); -} - -class CalcConfigItem : public ::utl::ConfigItem -{ -private: - virtual void ImplCommit() override; - -public: - CalcConfigItem(); - - FieldUnit getFieldUnit(); - virtual void Notify( const uno::Sequence<OUString>& aPropertyNames) override; -}; - -}//end anonymous namespace - -CalcConfigItem::CalcConfigItem() - : ConfigItem( "Office.Calc/Layout" ) -{ -} - -void CalcConfigItem::ImplCommit() {} -void CalcConfigItem::Notify( const uno::Sequence<OUString>& ) {} - -FieldUnit CalcConfigItem::getFieldUnit() -{ - FieldUnit eResult( FieldUnit::CM ); - - uno::Sequence< OUString > aNames; - if( lcl_IsMetric() ) - aNames = { "Other/MeasureUnit/Metric" }; - else - aNames = { "Other/MeasureUnit/NonMetric" }; - - uno::Sequence< uno::Any > aResult( GetProperties( aNames )); - sal_Int32 nValue = 0; - if( aResult[ 0 ] >>= nValue ) - eResult = static_cast< FieldUnit >( nValue ); - - return eResult; -} - -namespace ConfigurationAccess -{ - FieldUnit getFieldUnit() - { - //a CalcConfigItem Singleton - static CalcConfigItem SINGLETON; - FieldUnit aUnit( SINGLETON.getFieldUnit() ); - return aUnit; - } -} //namespace ConfigurationAccess - -} //namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx b/chart2/source/controller/main/ControllerCommandDispatch.cxx index 9da88ea5d6c7..8d7bc490e569 100644 --- a/chart2/source/controller/main/ControllerCommandDispatch.cxx +++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx @@ -18,17 +18,18 @@ */ #include "ControllerCommandDispatch.hxx" -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <TitleHelper.hxx> #include <LegendHelper.hxx> #include <ObjectIdentifier.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartController.hxx> #include <RegressionCurveHelper.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <StatisticsHelper.hxx> #include <ReferenceSizeProvider.hxx> @@ -36,16 +37,12 @@ #include <vcl/svapp.hxx> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <comphelper/lok.hxx> #include <sfx2/viewsh.hxx> #include <sfx2/objsh.hxx> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/frame/XStorable.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/chart2/XRegressionCurve.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <com/sun/star/chart2/XDataProviderAccess.hpp> // only needed until #i68864# is fixed @@ -194,24 +191,22 @@ void ControllerState::update( bIsPositionableObject = (aObjectType != OBJECTTYPE_DATA_POINT) && aSelOID.isDragableObject(); bIsTextObject = aObjectType == OBJECTTYPE_TITLE; - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel ); + rtl::Reference< Diagram > xDiagram = xModel->getFirstChartDiagram(); bIsFormateableObjectSelected = bHasSelectedObject && aSelOID.isAutoGeneratedObject(); if( aObjectType==OBJECTTYPE_DIAGRAM || aObjectType==OBJECTTYPE_DIAGRAM_WALL || aObjectType==OBJECTTYPE_DIAGRAM_FLOOR ) - bIsFormateableObjectSelected = DiagramHelper::isSupportingFloorAndWall( xDiagram ); + bIsFormateableObjectSelected = xDiagram->isSupportingFloorAndWall(); - uno::Reference< chart2::XDataSeries > xGivenDataSeries( + rtl::Reference< DataSeries > xGivenDataSeries = ObjectIdentifier::getDataSeriesForCID( - aSelObjCID, xModel ) ); + aSelObjCID, xModel ); bIsDeleteableObjectSelected = ChartController::isObjectDeleteable( aSelObj ); - bMayMoveSeriesForward = (aObjectType!=OBJECTTYPE_DATA_POINT) && DiagramHelper::isSeriesMoveable( - ChartModelHelper::findDiagram( xModel ), + bMayMoveSeriesForward = (aObjectType!=OBJECTTYPE_DATA_POINT) && xDiagram && xDiagram->isSeriesMoveable( xGivenDataSeries, MOVE_SERIES_FORWARD ); - bMayMoveSeriesBackward = (aObjectType!=OBJECTTYPE_DATA_POINT) && DiagramHelper::isSeriesMoveable( - ChartModelHelper::findDiagram( xModel ), + bMayMoveSeriesBackward = (aObjectType!=OBJECTTYPE_DATA_POINT) && xDiagram && xDiagram->isSeriesMoveable( xGivenDataSeries, MOVE_SERIES_BACKWARD ); @@ -239,24 +234,20 @@ void ControllerState::update( if( xGivenDataSeries.is()) { bMayAddMenuTrendline = true; - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); - uno::Reference< chart2::XChartType > xFirstChartType( + sal_Int32 nDimensionCount = xDiagram->getDimension(); + rtl::Reference< ::chart::ChartType > xFirstChartType( DataSeriesHelper::getChartTypeOfSeries( xGivenDataSeries, xDiagram )); // trend lines/mean value line if( (aObjectType == OBJECTTYPE_DATA_SERIES || aObjectType == OBJECTTYPE_DATA_POINT) && ChartTypeHelper::isSupportingRegressionProperties( xFirstChartType, nDimensionCount )) { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( xGivenDataSeries, uno::UNO_QUERY ); - if( xRegCurveCnt.is()) - { - // Trendline - bMayAddTrendline = true; + // Trendline + bMayAddTrendline = true; - // Mean Value - bMayFormatMeanValue = bMayDeleteMeanValue = RegressionCurveHelper::hasMeanValueLine( xRegCurveCnt ); - bMayAddMeanValue = ! bMayDeleteMeanValue; - } + // Mean Value + bMayFormatMeanValue = bMayDeleteMeanValue = RegressionCurveHelper::hasMeanValueLine( xGivenDataSeries ); + bMayAddMeanValue = ! bMayDeleteMeanValue; } // error bars @@ -290,23 +281,28 @@ void ControllerState::update( // Trendline Equation bMayFormatTrendlineEquation = bMayDeleteTrendlineEquation = RegressionCurveHelper::hasEquation( xRegCurve ); bMayAddTrendlineEquation = !bMayDeleteTrendlineEquation; + bMayAddR2Value = RegressionCurveHelper::MayHaveCorrelationCoefficient( xRegCurve ) && bMayAddTrendlineEquation; } else if( aObjectType == OBJECTTYPE_DATA_CURVE_EQUATION ) { bMayFormatTrendlineEquation = true; bool bHasR2Value = false; + bool bMayHaveR2 = true; try { uno::Reference< beans::XPropertySet > xEquationProperties = ObjectIdentifier::getObjectPropertySet( aSelObjCID, xModel ); if( xEquationProperties.is() ) + { xEquationProperties->getPropertyValue( "ShowCorrelationCoefficient" ) >>= bHasR2Value; + xEquationProperties->getPropertyValue( "MayHaveCorrelationCoefficient" ) >>= bMayHaveR2; + } } catch(const uno::RuntimeException&) { TOOLS_WARN_EXCEPTION("chart2", "" ); } - bMayAddR2Value = !bHasR2Value; + bMayAddR2Value = !bHasR2Value && bMayHaveR2; bMayDeleteR2Value = bHasR2Value; } } @@ -365,6 +361,8 @@ struct ModelState bool bSupportsStatistics; bool bSupportsAxes; + + bool bDataTable = false; }; ModelState::ModelState() : @@ -400,13 +398,17 @@ ModelState::ModelState() : void ModelState::update( const rtl::Reference<::chart::ChartModel> & xModel ) { - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel ); + rtl::Reference< Diagram > xDiagram = xModel->getFirstChartDiagram(); bIsReadOnly = xModel->isReadonly(); - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + sal_Int32 nDimensionCount = 0; + if (xDiagram) + nDimensionCount = xDiagram->getDimension(); - uno::Reference< chart2::XChartType > xFirstChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); + rtl::Reference< ChartType > xFirstChartType; + if (xDiagram) + xFirstChartType = xDiagram->getChartTypeByIndex( 0 ); bSupportsStatistics = ChartTypeHelper::isSupportingStatisticProperties( xFirstChartType, nDimensionCount ); bSupportsAxes = ChartTypeHelper::isSupportingMainAxis( xFirstChartType, nDimensionCount, 0 ); @@ -443,8 +445,10 @@ void ModelState::update( const rtl::Reference<::chart::ChartModel> & xModel ) ReferenceSizeProvider::AUTO_RESIZE_YES); bHasLegend = LegendHelper::hasLegend( xDiagram ); - bHasWall = DiagramHelper::isSupportingFloorAndWall( xDiagram ); + bHasWall = xDiagram && xDiagram->isSupportingFloorAndWall(); bHasFloor = bHasWall && bIsThreeD; + + bDataTable = xDiagram.is() && xDiagram->getDataTable().is(); } bool ModelState::HasAnyAxis() const @@ -527,6 +531,7 @@ void ControllerCommandDispatch::updateCommandAvailability() // read-only bool bIsWritable = bModelStateIsValid && (! m_apModelState->bIsReadOnly); bool bShapeContext = m_xChartController.is() && m_xChartController->isShapeContext(); + bool bIsTextEdit = m_xChartController.is() && m_xChartController->IsTextEdit(); bool bEnableDataTableDialog = false; bool bCanCreateDataProvider = false; @@ -546,12 +551,11 @@ void ControllerCommandDispatch::updateCommandAvailability() } } - Reference< chart2::XChartDocument > xChartDoc(m_xChartController->getModel(), uno::UNO_QUERY); - OSL_ENSURE(xChartDoc.is(), "Invalid XChartDocument"); - if ( xChartDoc.is() ) + rtl::Reference< ChartModel > xChartModel = m_xChartController->getChartModel(); + OSL_ENSURE(xChartModel.is(), "Invalid XChartDocument"); + if ( xChartModel.is() ) { - ChartModel& rModel = dynamic_cast<ChartModel&>(*xChartDoc); - css::uno::Reference< com::sun::star::chart2::XDataProviderAccess > xCreatorDoc(rModel.getParent(), uno::UNO_QUERY); + css::uno::Reference< com::sun::star::chart2::XDataProviderAccess > xCreatorDoc(xChartModel->getParent(), uno::UNO_QUERY); bCanCreateDataProvider = xCreatorDoc.is(); } } @@ -563,12 +567,12 @@ void ControllerCommandDispatch::updateCommandAvailability() // toolbar commands m_aCommandAvailability[ ".uno:ToggleGridHorizontal" ] = bIsWritable; - m_aCommandArguments[ ".uno:ToggleGridHorizontal" ] <<= m_apModelState->bHasMainYGrid; + m_aCommandArguments[ ".uno:ToggleGridHorizontal" ] <<= bModelStateIsValid && m_apModelState->bHasMainYGrid; m_aCommandAvailability[ ".uno:ToggleGridVertical" ] = bIsWritable; - m_aCommandArguments[ ".uno:ToggleGridVertical" ] <<= m_apModelState->bHasMainXGrid; + m_aCommandArguments[ ".uno:ToggleGridVertical" ] <<= bModelStateIsValid && m_apModelState->bHasMainXGrid; m_aCommandAvailability[ ".uno:ToggleLegend" ] = bIsWritable; - m_aCommandArguments[ ".uno:ToggleLegend" ] <<= m_apModelState->bHasLegend; + m_aCommandArguments[ ".uno:ToggleLegend" ] <<= bModelStateIsValid && m_apModelState->bHasLegend; m_aCommandAvailability[ ".uno:NewArrangement" ] = bIsWritable; m_aCommandAvailability[ ".uno:Update" ] = bIsWritable; @@ -585,17 +589,19 @@ void ControllerCommandDispatch::updateCommandAvailability() m_aCommandAvailability[ ".uno:InsertMenuDataLabels" ] = bIsWritable; m_aCommandAvailability[ ".uno:InsertRemoveAxes" ] = m_aCommandAvailability[ ".uno:InsertMenuAxes" ] = bIsWritable && m_apModelState->bSupportsAxes; m_aCommandAvailability[ ".uno:InsertMenuGrids" ] = bIsWritable && m_apModelState->bSupportsAxes; - m_aCommandAvailability[ ".uno:InsertMenuTrendlines" ] = bIsWritable && m_apModelState->bSupportsStatistics && m_apControllerState->bMayAddMenuTrendline; + m_aCommandAvailability[ ".uno:InsertMenuTrendlines" ] = bIsWritable && m_apModelState->bSupportsStatistics && bControllerStateIsValid && m_apControllerState->bMayAddMenuTrendline; m_aCommandAvailability[ ".uno:InsertMenuMeanValues" ] = bIsWritable && m_apModelState->bSupportsStatistics; m_aCommandAvailability[ ".uno:InsertMenuXErrorBars" ] = bIsWritable && m_apModelState->bSupportsStatistics; m_aCommandAvailability[ ".uno:InsertMenuYErrorBars" ] = bIsWritable && m_apModelState->bSupportsStatistics; - m_aCommandAvailability[ ".uno:InsertSymbol" ] = bIsWritable && m_apControllerState->bIsTextObject; + m_aCommandAvailability[ ".uno:InsertSymbol" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bIsTextObject; + m_aCommandAvailability[ ".uno:InsertMenuDataTable" ] = bIsWritable; // format objects bool bFormatObjectAvailable = bIsWritable && bControllerStateIsValid && m_apControllerState->bIsFormateableObjectSelected; - m_aCommandAvailability[ ".uno:FormatSelection" ] = bFormatObjectAvailable; + m_aCommandAvailability[ ".uno:FormatSelection" ] = bFormatObjectAvailable && !bIsTextEdit; + m_aCommandAvailability[ ".uno:FontDialog" ] = bFormatObjectAvailable && bIsTextEdit; m_aCommandAvailability[ ".uno:FormatAxis" ] = bFormatObjectAvailable; - m_aCommandAvailability[ ".uno:FormatTitle" ] = bFormatObjectAvailable; + m_aCommandAvailability[ ".uno:FormatTitle" ] = bFormatObjectAvailable && !bIsTextEdit; m_aCommandAvailability[ ".uno:FormatDataSeries" ] = bFormatObjectAvailable; m_aCommandAvailability[ ".uno:FormatDataPoint" ] = bFormatObjectAvailable; m_aCommandAvailability[ ".uno:FormatDataLabels" ] = bFormatObjectAvailable; @@ -642,7 +648,7 @@ void ControllerCommandDispatch::updateCommandAvailability() // text m_aCommandAvailability[ ".uno:ScaleText" ] = bIsWritable && bModelStateIsValid ; - m_aCommandArguments[ ".uno:ScaleText" ] <<= m_apModelState->bHasAutoScaledText; + m_aCommandArguments[ ".uno:ScaleText" ] <<= bModelStateIsValid && m_apModelState->bHasAutoScaledText; // axes m_aCommandAvailability[ ".uno:DiagramAxisX" ] = bIsWritable && bModelStateIsValid && m_apModelState->bHasXAxis; @@ -672,9 +678,11 @@ void ControllerCommandDispatch::updateCommandAvailability() m_aCommandAvailability[ ".uno:InsertDataLabel" ] = bIsWritable; m_aCommandAvailability[ ".uno:InsertMeanValue" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddMeanValue; m_aCommandAvailability[ ".uno:InsertTrendline" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddTrendline; - m_aCommandAvailability[ ".uno:InsertTrendlineEquation" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddTrendlineEquation; - m_aCommandAvailability[ ".uno:InsertTrendlineEquationAndR2" ] = m_aCommandAvailability[ ".uno:InsertTrendlineEquation" ]; - m_aCommandAvailability[ ".uno:InsertR2Value" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddR2Value; + const bool bInsertTrendlineEquation = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddTrendlineEquation; + m_aCommandAvailability[ ".uno:InsertTrendlineEquation" ] = bInsertTrendlineEquation; + m_aCommandAvailability[ ".uno:InsertTrendlineEquationAndR2" ] = bInsertTrendlineEquation && m_apControllerState->bMayAddR2Value; + m_aCommandAvailability[ ".uno:InsertR2Value" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddR2Value + && !m_apControllerState->bMayAddTrendlineEquation; m_aCommandAvailability[ ".uno:DeleteR2Value" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayDeleteR2Value; m_aCommandAvailability[ ".uno:InsertXErrorBars" ] = bIsWritable && bControllerStateIsValid && m_apControllerState->bMayAddXErrorBars; @@ -700,6 +708,10 @@ void ControllerCommandDispatch::updateCommandAvailability() m_aCommandAvailability[ ".uno:FormatMinorGrid" ] = bIsWritable; m_aCommandAvailability[ ".uno:InsertMinorGrid" ] = bIsWritable; m_aCommandAvailability[ ".uno:DeleteMinorGrid" ] = bIsWritable; + + // data table + m_aCommandAvailability[ ".uno:InsertDataTable" ] = bIsWritable && bModelStateIsValid && !m_apModelState->bDataTable; + m_aCommandAvailability[ ".uno:DeleteDataTable" ] = bIsWritable && bModelStateIsValid && m_apModelState->bDataTable; } bool ControllerCommandDispatch::commandAvailable( const OUString & rCommand ) @@ -767,7 +779,7 @@ void SAL_CALL ControllerCommandDispatch::dispatch( // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed -void SAL_CALL ControllerCommandDispatch::disposing() +void ControllerCommandDispatch::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { m_xChartController.clear(); m_xDispatch.clear(); diff --git a/chart2/source/controller/main/ControllerCommandDispatch.hxx b/chart2/source/controller/main/ControllerCommandDispatch.hxx index 38b00c48d8f0..6a5e441e8e3c 100644 --- a/chart2/source/controller/main/ControllerCommandDispatch.hxx +++ b/chart2/source/controller/main/ControllerCommandDispatch.hxx @@ -74,7 +74,7 @@ protected: // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed - virtual void SAL_CALL disposing() override; + virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; // ____ XEventListener (base of XModifyListener) ____ virtual void SAL_CALL disposing( diff --git a/chart2/source/controller/main/DragMethod_Base.cxx b/chart2/source/controller/main/DragMethod_Base.cxx index d1885e333077..5e46dc327b19 100644 --- a/chart2/source/controller/main/DragMethod_Base.cxx +++ b/chart2/source/controller/main/DragMethod_Base.cxx @@ -24,23 +24,21 @@ #include <ObjectIdentifier.hxx> #include <svx/ActionDescriptionProvider.hxx> -#include <com/sun/star/frame/XModel.hpp> +#include <utility> #include <vcl/ptrstyle.hxx> namespace chart { using namespace ::com::sun::star; -using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::WeakReference; DragMethod_Base::DragMethod_Base( DrawViewWrapper& rDrawViewWrapper - , const OUString& rObjectCID + , OUString aObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel , ActionDescriptionProvider::ActionType eActionType ) : SdrDragMethod( rDrawViewWrapper ) , m_rDrawViewWrapper(rDrawViewWrapper) - , m_aObjectCID(rObjectCID) + , m_aObjectCID(std::move(aObjectCID)) , m_eActionType( eActionType ) , m_xChartModel( xChartModel.get() ) { diff --git a/chart2/source/controller/main/DragMethod_Base.hxx b/chart2/source/controller/main/DragMethod_Base.hxx index 497b31f6e88d..1a6593889066 100644 --- a/chart2/source/controller/main/DragMethod_Base.hxx +++ b/chart2/source/controller/main/DragMethod_Base.hxx @@ -32,7 +32,7 @@ class ChartModel; class DragMethod_Base : public SdrDragMethod { public: - DragMethod_Base( DrawViewWrapper& rDrawViewWrapper, const OUString& rObjectCID + DragMethod_Base( DrawViewWrapper& rDrawViewWrapper, OUString aObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel , ActionDescriptionProvider::ActionType eActionType = ActionDescriptionProvider::ActionType::Move ); virtual ~DragMethod_Base() override; diff --git a/chart2/source/controller/main/DragMethod_PieSegment.cxx b/chart2/source/controller/main/DragMethod_PieSegment.cxx index c2c5db234bd7..5bd85faaf959 100644 --- a/chart2/source/controller/main/DragMethod_PieSegment.cxx +++ b/chart2/source/controller/main/DragMethod_PieSegment.cxx @@ -25,9 +25,8 @@ #include <ObjectIdentifier.hxx> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/awt/Point.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <basegfx/matrix/b2dhommatrix.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace chart { @@ -46,7 +45,7 @@ DragMethod_PieSegment::DragMethod_PieSegment( DrawViewWrapper& rDrawViewWrapper , m_aDragDirection(1000.0,1000.0) , m_fDragRange( 1.0 ) { - OUString aParameter( ObjectIdentifier::getDragParameterString( m_aObjectCID ) ); + std::u16string_view aParameter( ObjectIdentifier::getDragParameterString( m_aObjectCID ) ); sal_Int32 nOffsetPercent(0); awt::Point aMinimumPosition(0,0); @@ -128,7 +127,7 @@ bool DragMethod_PieSegment::EndSdrDrag(bool /*bCopy*/) return true; } -basegfx::B2DHomMatrix DragMethod_PieSegment::getCurrentTransformation() +basegfx::B2DHomMatrix DragMethod_PieSegment::getCurrentTransformation() const { basegfx::B2DHomMatrix aRetval; @@ -143,8 +142,8 @@ void DragMethod_PieSegment::createSdrDragEntries() if( pObj && pPV ) { - const basegfx::B2DPolyPolygon aNewPolyPolygon(pObj->TakeXorPoly()); - addSdrDragEntry(std::unique_ptr<SdrDragEntry>(new SdrDragEntryPolyPolygon(aNewPolyPolygon))); + basegfx::B2DPolyPolygon aNewPolyPolygon(pObj->TakeXorPoly()); + addSdrDragEntry(std::unique_ptr<SdrDragEntry>(new SdrDragEntryPolyPolygon(std::move(aNewPolyPolygon)))); } } } //namespace chart diff --git a/chart2/source/controller/main/DragMethod_PieSegment.hxx b/chart2/source/controller/main/DragMethod_PieSegment.hxx index 8a36dbd4c876..8cb498373f33 100644 --- a/chart2/source/controller/main/DragMethod_PieSegment.hxx +++ b/chart2/source/controller/main/DragMethod_PieSegment.hxx @@ -36,7 +36,7 @@ public: virtual void MoveSdrDrag(const Point& rPnt) override; virtual bool EndSdrDrag(bool bCopy) override; - virtual basegfx::B2DHomMatrix getCurrentTransformation() override; + virtual basegfx::B2DHomMatrix getCurrentTransformation() const override; protected: virtual void createSdrDragEntries() override; diff --git a/chart2/source/controller/main/DragMethod_RotateDiagram.cxx b/chart2/source/controller/main/DragMethod_RotateDiagram.cxx index 030fcd0bf8bc..6172a25edad2 100644 --- a/chart2/source/controller/main/DragMethod_RotateDiagram.cxx +++ b/chart2/source/controller/main/DragMethod_RotateDiagram.cxx @@ -21,10 +21,9 @@ #include <DrawViewWrapper.hxx> #include <SelectionHelper.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ThreeDHelper.hxx> #include <defines.hxx> @@ -32,8 +31,6 @@ #include <svx/scene3d.hxx> #include <basegfx/matrix/b3dhommatrix.hxx> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <basegfx/polygon/b2dpolypolygontools.hxx> #include <svx/sdr/contact/viewcontactofe3dscene.hxx> #include <drawinglayer/geometry/viewinformation3d.hxx> @@ -42,7 +39,6 @@ namespace chart { using namespace ::com::sun::star; -using ::com::sun::star::uno::Reference; DragMethod_RotateDiagram::DragMethod_RotateDiagram( DrawViewWrapper& rDrawViewWrapper , const OUString& rObjectCID @@ -74,18 +70,18 @@ DragMethod_RotateDiagram::DragMethod_RotateDiagram( DrawViewWrapper& rDrawViewWr m_aWireframePolyPolygon = m_pScene->CreateWireframe(); - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram(getChartModel()); + rtl::Reference< Diagram > xDiagram = getChartModel()->getFirstChartDiagram(); if( !xDiagram.is() ) return; - ThreeDHelper::getRotationFromDiagram( xDiagram - , m_nInitialHorizontalAngleDegree, m_nInitialVerticalAngleDegree ); + xDiagram->getRotation( + m_nInitialHorizontalAngleDegree, m_nInitialVerticalAngleDegree ); - ThreeDHelper::getRotationAngleFromDiagram( xDiagram - , m_fInitialXAngleRad, m_fInitialYAngleRad, m_fInitialZAngleRad ); + xDiagram->getRotationAngle( + m_fInitialXAngleRad, m_fInitialYAngleRad, m_fInitialZAngleRad ); if( ChartTypeHelper::isSupportingRightAngledAxes( - DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ) ) + xDiagram->getChartTypeByIndex( 0 ) ) ) xDiagram->getPropertyValue("RightAngledAxes") >>= m_bRightAngledAxes; if(m_bRightAngledAxes) { @@ -161,13 +157,16 @@ bool DragMethod_RotateDiagram::EndSdrDrag(bool /*bCopy*/) if(m_bRightAngledAxes) ThreeDHelper::adaptRadAnglesForRightAngledAxes( fResultX, fResultY ); - ThreeDHelper::setRotationAngleToDiagram( ChartModelHelper::findDiagram( getChartModel() ) - , fResultX, fResultY, fResultZ ); + rtl::Reference<Diagram> xDiagram = getChartModel()->getFirstChartDiagram(); + if (xDiagram) + xDiagram->setRotationAngle( fResultX, fResultY, fResultZ ); } else { - ThreeDHelper::setRotationToDiagram( ChartModelHelper::findDiagram( getChartModel() ) - , m_nInitialHorizontalAngleDegree+m_nAdditionalHorizontalAngleDegree, m_nInitialVerticalAngleDegree+m_nAdditionalVerticalAngleDegree ); + rtl::Reference<Diagram> xDiagram = getChartModel()->getFirstChartDiagram(); + if (xDiagram) + xDiagram->setRotation( + m_nInitialHorizontalAngleDegree+m_nAdditionalHorizontalAngleDegree, m_nInitialVerticalAngleDegree+m_nAdditionalVerticalAngleDegree ); } return true; @@ -217,7 +216,7 @@ void DragMethod_RotateDiagram::CreateOverlayGeometry( std::unique_ptr<sdr::overlay::OverlayPolyPolygonStripedAndFilled> pNew( new sdr::overlay::OverlayPolyPolygonStripedAndFilled( - aPolyPolygon)); + std::move(aPolyPolygon))); insertNewlyCreatedOverlayObjectForSdrDragMethod( std::move(pNew), diff --git a/chart2/source/controller/main/DrawCommandDispatch.cxx b/chart2/source/controller/main/DrawCommandDispatch.cxx index a20d2ba1a7fb..01771f1e7763 100644 --- a/chart2/source/controller/main/DrawCommandDispatch.cxx +++ b/chart2/source/controller/main/DrawCommandDispatch.cxx @@ -18,15 +18,14 @@ */ #include "DrawCommandDispatch.hxx" -#include "DrawCommandDispatch.h" #include <ChartController.hxx> #include <DrawViewWrapper.hxx> #include <chartview/DrawModelWrapper.hxx> #include <com/sun/star/frame/CommandGroup.hpp> #include <o3tl/unsafe_downcast.hxx> +#include <o3tl/string_view.hxx> #include <vcl/svapp.hxx> -#include <svl/itempool.hxx> #include <editeng/eeitem.hxx> #include <svx/strings.hrc> #include <svx/dialmgr.hxx> @@ -67,7 +66,7 @@ DrawCommandDispatch::~DrawCommandDispatch() bool DrawCommandDispatch::isFeatureSupported( const OUString& rCommandURL ) { - sal_uInt16 nFeatureId = 0; + ChartCommandID nFeatureId = ChartCommandID::NONE; OUString aBaseCommand; OUString aCustomShapeType; return parseCommandURL( rCommandURL, &nFeatureId, &aBaseCommand, &aCustomShapeType ); @@ -115,8 +114,6 @@ void DrawCommandDispatch::setAttributes( SdrObject* pObj ) if ( aObjList[ i ].equalsIgnoreAsciiCase( m_aCustomShapeType ) ) { FmFormModel aModel; - SfxItemPool& rPool(aModel.GetItemPool()); - rPool.FreezeIdRanges(); if ( GalleryExplorer::GetSdrObj( GALLERY_THEME_POWERPOINT, i, &aModel ) ) { @@ -164,7 +161,7 @@ void DrawCommandDispatch::setAttributes( SdrObject* pObj ) void DrawCommandDispatch::setLineEnds( SfxItemSet& rAttr ) { - if ( !(m_nFeatureId == COMMAND_ID_LINE_ARROW_END && m_pChartController) ) + if ( !(m_nFeatureId == ChartCommandID::DrawLineArrowEnd && m_pChartController) ) return; DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper(); @@ -183,11 +180,11 @@ void DrawCommandDispatch::setLineEnds( SfxItemSet& rAttr ) aArrow.append( aNewArrow ); } - SfxItemSet aSet( pDrawViewWrapper->GetModel()->GetItemPool() ); + SfxItemSet aSet(pDrawViewWrapper->GetModel().GetItemPool()); pDrawViewWrapper->GetAttributes( aSet ); tools::Long nWidth = 300; // (1/100th mm) - if ( aSet.GetItemState( XATTR_LINEWIDTH ) != SfxItemState::DONTCARE ) + if ( aSet.GetItemState( XATTR_LINEWIDTH ) != SfxItemState::INVALID ) { tools::Long nValue = aSet.Get( XATTR_LINEWIDTH ).GetValue(); if ( nValue > 0 ) @@ -201,7 +198,7 @@ void DrawCommandDispatch::setLineEnds( SfxItemSet& rAttr ) } // WeakComponentImplHelperBase -void DrawCommandDispatch::disposing() +void DrawCommandDispatch::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { } @@ -216,27 +213,27 @@ FeatureState DrawCommandDispatch::getState( const OUString& rCommand ) aReturn.bEnabled = false; aReturn.aState <<= false; - sal_uInt16 nFeatureId = 0; + ChartCommandID nFeatureId = ChartCommandID::NONE; OUString aBaseCommand; OUString aCustomShapeType; if ( parseCommandURL( rCommand, &nFeatureId, &aBaseCommand, &aCustomShapeType ) ) { switch ( nFeatureId ) { - case COMMAND_ID_OBJECT_SELECT: - case COMMAND_ID_DRAW_LINE: - case COMMAND_ID_LINE_ARROW_END: - case COMMAND_ID_DRAW_RECT: - case COMMAND_ID_DRAW_ELLIPSE: - case COMMAND_ID_DRAW_FREELINE_NOFILL: - case COMMAND_ID_DRAW_TEXT: - case COMMAND_ID_DRAW_CAPTION: - case COMMAND_ID_DRAWTBX_CS_BASIC: - case COMMAND_ID_DRAWTBX_CS_SYMBOL: - case COMMAND_ID_DRAWTBX_CS_ARROW: - case COMMAND_ID_DRAWTBX_CS_FLOWCHART: - case COMMAND_ID_DRAWTBX_CS_CALLOUT: - case COMMAND_ID_DRAWTBX_CS_STAR: + case ChartCommandID::DrawObjectSelect: + case ChartCommandID::DrawLine: + case ChartCommandID::DrawLineArrowEnd: + case ChartCommandID::DrawRect: + case ChartCommandID::DrawEllipse: + case ChartCommandID::DrawFreelineNoFill: + case ChartCommandID::DrawText: + case ChartCommandID::DrawCaption: + case ChartCommandID::DrawToolboxCsBasic: + case ChartCommandID::DrawToolboxCsSymbol: + case ChartCommandID::DrawToolboxCsArrow: + case ChartCommandID::DrawToolboxCsFlowchart: + case ChartCommandID::DrawToolboxCsCallout: + case ChartCommandID::DrawToolboxCsStar: { aReturn.bEnabled = true; aReturn.aState <<= false; @@ -259,7 +256,7 @@ void DrawCommandDispatch::execute( const OUString& rCommand, const Sequence< bea ChartDrawMode eDrawMode = CHARTDRAW_SELECT; SdrObjKind eKind = SdrObjKind::NONE; - sal_uInt16 nFeatureId = 0; + ChartCommandID nFeatureId = ChartCommandID::NONE; OUString aBaseCommand; OUString aCustomShapeType; if ( !parseCommandURL( rCommand, &nFeatureId, &aBaseCommand, &aCustomShapeType ) ) @@ -271,56 +268,56 @@ void DrawCommandDispatch::execute( const OUString& rCommand, const Sequence< bea switch ( nFeatureId ) { - case COMMAND_ID_OBJECT_SELECT: + case ChartCommandID::DrawObjectSelect: { eDrawMode = CHARTDRAW_SELECT; eKind = SdrObjKind::NONE; } break; - case COMMAND_ID_DRAW_LINE: - case COMMAND_ID_LINE_ARROW_END: + case ChartCommandID::DrawLine: + case ChartCommandID::DrawLineArrowEnd: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::Line; } break; - case COMMAND_ID_DRAW_RECT: + case ChartCommandID::DrawRect: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::Rectangle; } break; - case COMMAND_ID_DRAW_ELLIPSE: + case ChartCommandID::DrawEllipse: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::CircleOrEllipse; } break; - case COMMAND_ID_DRAW_FREELINE_NOFILL: + case ChartCommandID::DrawFreelineNoFill: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::FreehandLine; } break; - case COMMAND_ID_DRAW_TEXT: + case ChartCommandID::DrawText: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::Text; bCreate = true; } break; - case COMMAND_ID_DRAW_CAPTION: + case ChartCommandID::DrawCaption: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::Caption; } break; - case COMMAND_ID_DRAWTBX_CS_BASIC: - case COMMAND_ID_DRAWTBX_CS_SYMBOL: - case COMMAND_ID_DRAWTBX_CS_ARROW: - case COMMAND_ID_DRAWTBX_CS_FLOWCHART: - case COMMAND_ID_DRAWTBX_CS_CALLOUT: - case COMMAND_ID_DRAWTBX_CS_STAR: + case ChartCommandID::DrawToolboxCsBasic: + case ChartCommandID::DrawToolboxCsSymbol: + case ChartCommandID::DrawToolboxCsArrow: + case ChartCommandID::DrawToolboxCsFlowchart: + case ChartCommandID::DrawToolboxCsCallout: + case ChartCommandID::DrawToolboxCsStar: { eDrawMode = CHARTDRAW_INSERT; eKind = SdrObjKind::CustomShape; @@ -361,13 +358,13 @@ void DrawCommandDispatch::execute( const OUString& rCommand, const Sequence< bea if ( eDrawMode != CHARTDRAW_INSERT ) return; - SdrObject* pObj = createDefaultObject( nFeatureId ); + rtl::Reference<SdrObject> pObj = createDefaultObject( nFeatureId ); if ( pObj ) { SdrPageView* pPageView = pDrawViewWrapper->GetSdrPageView(); - if (pDrawViewWrapper->InsertObjectAtView(pObj, *pPageView)) + if (pDrawViewWrapper->InsertObjectAtView(pObj.get(), *pPageView)) m_pChartController->SetAndApplySelection(Reference<drawing::XShape>(pObj->getUnoShape(), uno::UNO_QUERY)); - if ( nFeatureId == COMMAND_ID_DRAW_TEXT ) + if ( nFeatureId == ChartCommandID::DrawText ) { m_pChartController->StartTextEdit(); } @@ -376,20 +373,20 @@ void DrawCommandDispatch::execute( const OUString& rCommand, const Sequence< bea void DrawCommandDispatch::describeSupportedFeatures() { - implDescribeSupportedFeature( ".uno:SelectObject", COMMAND_ID_OBJECT_SELECT, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:Line", COMMAND_ID_DRAW_LINE, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:LineArrowEnd", COMMAND_ID_LINE_ARROW_END, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:Rect", COMMAND_ID_DRAW_RECT, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:Ellipse", COMMAND_ID_DRAW_ELLIPSE, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:Freeline_Unfilled", COMMAND_ID_DRAW_FREELINE_NOFILL, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:DrawText", COMMAND_ID_DRAW_TEXT, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:DrawCaption", COMMAND_ID_DRAW_CAPTION, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:BasicShapes", COMMAND_ID_DRAWTBX_CS_BASIC, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:SymbolShapes", COMMAND_ID_DRAWTBX_CS_SYMBOL, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:ArrowShapes", COMMAND_ID_DRAWTBX_CS_ARROW, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:FlowChartShapes", COMMAND_ID_DRAWTBX_CS_FLOWCHART, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:CalloutShapes", COMMAND_ID_DRAWTBX_CS_CALLOUT, CommandGroup::INSERT ); - implDescribeSupportedFeature( ".uno:StarShapes", COMMAND_ID_DRAWTBX_CS_STAR, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:SelectObject", ChartCommandID::DrawObjectSelect, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:Line", ChartCommandID::DrawLine, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:LineArrowEnd", ChartCommandID::DrawLineArrowEnd, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:Rect", ChartCommandID::DrawRect, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:Ellipse", ChartCommandID::DrawEllipse, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:Freeline_Unfilled", ChartCommandID::DrawFreelineNoFill, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:DrawText", ChartCommandID::DrawText, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:DrawCaption", ChartCommandID::DrawCaption, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:BasicShapes", ChartCommandID::DrawToolboxCsBasic, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:SymbolShapes", ChartCommandID::DrawToolboxCsSymbol, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:ArrowShapes", ChartCommandID::DrawToolboxCsArrow, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:FlowChartShapes", ChartCommandID::DrawToolboxCsFlowchart, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:CalloutShapes", ChartCommandID::DrawToolboxCsCallout, CommandGroup::INSERT ); + implDescribeSupportedFeature( ".uno:StarShapes", ChartCommandID::DrawToolboxCsStar, CommandGroup::INSERT ); } void DrawCommandDispatch::setInsertObj(SdrObjKind eObj) @@ -401,9 +398,9 @@ void DrawCommandDispatch::setInsertObj(SdrObjKind eObj) } } -SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) +rtl::Reference<SdrObject> DrawCommandDispatch::createDefaultObject( const ChartCommandID nID ) { - SdrObject* pObj = nullptr; + rtl::Reference<SdrObject> pObj; DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : nullptr ); DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : nullptr ); @@ -431,10 +428,10 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) switch ( nID ) { - case COMMAND_ID_DRAW_LINE: - case COMMAND_ID_LINE_ARROW_END: + case ChartCommandID::DrawLine: + case ChartCommandID::DrawLineArrowEnd: { - if ( auto const pathObj = dynamic_cast<SdrPathObj*>( pObj) ) + if ( auto const pathObj = dynamic_cast<SdrPathObj*>( pObj.get()) ) { Point aStart = aRect.TopLeft(); Point aEnd = aRect.BottomRight(); @@ -449,9 +446,9 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) } } break; - case COMMAND_ID_DRAW_FREELINE_NOFILL: + case ChartCommandID::DrawFreelineNoFill: { - if ( auto const pathObj = dynamic_cast<SdrPathObj*>( pObj) ) + if ( auto const pathObj = dynamic_cast<SdrPathObj*>( pObj.get()) ) { basegfx::B2DPolygon aInnerPoly; aInnerPoly.append( basegfx::B2DPoint( aRect.Left(), aRect.Bottom() ) ); @@ -469,13 +466,13 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) } } break; - case COMMAND_ID_DRAW_TEXT: - case COMMAND_ID_DRAW_TEXT_VERTICAL: + case ChartCommandID::DrawText: + case ChartCommandID::DrawTextVertical: { - if ( SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>( pObj) ) + if ( SdrTextObj* pTextObj = DynCastSdrTextObj( pObj.get()) ) { pTextObj->SetLogicRect( aRect ); - bool bVertical = ( nID == COMMAND_ID_DRAW_TEXT_VERTICAL ); + bool bVertical = ( nID == ChartCommandID::DrawTextVertical ); pTextObj->SetVerticalWriting( bVertical ); if ( bVertical ) { @@ -489,12 +486,12 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) } } break; - case COMMAND_ID_DRAW_CAPTION: - case COMMAND_ID_DRAW_CAPTION_VERTICAL: + case ChartCommandID::DrawCaption: + case ChartCommandID::DrawCaptionVertical: { - if ( SdrCaptionObj* pCaptionObj = dynamic_cast<SdrCaptionObj*>( pObj) ) + if ( SdrCaptionObj* pCaptionObj = dynamic_cast<SdrCaptionObj*>( pObj.get()) ) { - bool bIsVertical( nID == COMMAND_ID_DRAW_CAPTION_VERTICAL ); + bool bIsVertical( nID == ChartCommandID::DrawCaptionVertical ); pCaptionObj->SetVerticalWriting( bIsVertical ); if ( bIsVertical ) { @@ -513,7 +510,7 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) { pObj->SetLogicRect( aRect ); SfxItemSet aSet( pDrawModelWrapper->GetItemPool() ); - setAttributes( pObj ); + setAttributes( pObj.get() ); pObj->SetMergedItemSet( aSet ); } break; @@ -525,17 +522,17 @@ SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID ) return pObj; } -bool DrawCommandDispatch::parseCommandURL( const OUString& rCommandURL, sal_uInt16* pnFeatureId, +bool DrawCommandDispatch::parseCommandURL( const OUString& rCommandURL, ChartCommandID* pnFeatureId, OUString* pBaseCommand, OUString* pCustomShapeType ) { bool bFound = true; - sal_uInt16 nFeatureId = 0; + ChartCommandID nFeatureId = ChartCommandID::NONE; OUString aBaseCommand; OUString aType; - sal_Int32 nIndex = 1; - OUString aToken = rCommandURL.getToken( 0, '.', nIndex ); - if ( nIndex == -1 || aToken.isEmpty() ) + sal_Int32 nIndex = std::min(sal_Int32(1), rCommandURL.getLength()); + std::u16string_view aToken = o3tl::getToken(rCommandURL, 0, '.', nIndex ); + if ( nIndex == -1 || aToken.empty() ) { aBaseCommand = rCommandURL; SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( aBaseCommand ); @@ -545,32 +542,32 @@ bool DrawCommandDispatch::parseCommandURL( const OUString& rCommandURL, sal_uInt switch ( nFeatureId ) { - case COMMAND_ID_DRAWTBX_CS_BASIC: + case ChartCommandID::DrawToolboxCsBasic: { aType = "diamond"; } break; - case COMMAND_ID_DRAWTBX_CS_SYMBOL: + case ChartCommandID::DrawToolboxCsSymbol: { aType = "smiley"; } break; - case COMMAND_ID_DRAWTBX_CS_ARROW: + case ChartCommandID::DrawToolboxCsArrow: { aType = "left-right-arrow"; } break; - case COMMAND_ID_DRAWTBX_CS_FLOWCHART: + case ChartCommandID::DrawToolboxCsFlowchart: { aType = "flowchart-internal-storage"; } break; - case COMMAND_ID_DRAWTBX_CS_CALLOUT: + case ChartCommandID::DrawToolboxCsCallout: { aType = "round-rectangular-callout"; } break; - case COMMAND_ID_DRAWTBX_CS_STAR: + case ChartCommandID::DrawToolboxCsStar: { aType = "star5"; } diff --git a/chart2/source/controller/main/DrawCommandDispatch.h b/chart2/source/controller/main/DrawCommandDispatch.h deleted file mode 100644 index faf70bde1047..000000000000 --- a/chart2/source/controller/main/DrawCommandDispatch.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ -#ifndef CHART_DRAWCOMMANDDISPATCH_HRC -#define CHART_DRAWCOMMANDDISPATCH_HRC - -//Command Ids: -#define COMMAND_ID_OBJECT_SELECT 1 -#define COMMAND_ID_DRAW_LINE 2 -#define COMMAND_ID_LINE_ARROW_END 3 -#define COMMAND_ID_DRAW_RECT 4 -#define COMMAND_ID_DRAW_ELLIPSE 5 -#define COMMAND_ID_DRAW_FREELINE_NOFILL 6 -#define COMMAND_ID_DRAW_TEXT 7 -#define COMMAND_ID_DRAW_TEXT_VERTICAL 8 -#define COMMAND_ID_DRAW_CAPTION 9 -#define COMMAND_ID_DRAW_CAPTION_VERTICAL 10 -#define COMMAND_ID_DRAWTBX_CS_BASIC 11 -#define COMMAND_ID_DRAWTBX_CS_SYMBOL 12 -#define COMMAND_ID_DRAWTBX_CS_ARROW 13 -#define COMMAND_ID_DRAWTBX_CS_FLOWCHART 14 -#define COMMAND_ID_DRAWTBX_CS_CALLOUT 15 -#define COMMAND_ID_DRAWTBX_CS_STAR 16 - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/main/DrawCommandDispatch.hxx b/chart2/source/controller/main/DrawCommandDispatch.hxx index febfa8338d40..65200cca6323 100644 --- a/chart2/source/controller/main/DrawCommandDispatch.hxx +++ b/chart2/source/controller/main/DrawCommandDispatch.hxx @@ -20,6 +20,7 @@ #include <svx/svdobjkind.hxx> #include "FeatureCommandDispatchBase.hxx" +#include <rtl/ref.hxx> class SfxItemSet; class SdrObject; @@ -44,7 +45,7 @@ public: protected: // WeakComponentImplHelperBase - virtual void SAL_CALL disposing() override; + virtual void disposing( std::unique_lock<std::mutex>& rGuard ) override; // XEventListener virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; @@ -60,9 +61,9 @@ protected: private: void setInsertObj(SdrObjKind eObj); - SdrObject* createDefaultObject( const sal_uInt16 nID ); + rtl::Reference<SdrObject> createDefaultObject( const ChartCommandID nID ); - bool parseCommandURL( const OUString& rCommandURL, sal_uInt16* pnFeatureId, OUString* pBaseCommand, OUString* pCustomShapeType ); + bool parseCommandURL( const OUString& rCommandURL, ChartCommandID* pnFeatureId, OUString* pBaseCommand, OUString* pCustomShapeType ); ChartController* m_pChartController; OUString m_aCustomShapeType; diff --git a/chart2/source/controller/main/ElementSelector.cxx b/chart2/source/controller/main/ElementSelector.cxx index e56da4fc6173..d538108ae8e9 100644 --- a/chart2/source/controller/main/ElementSelector.cxx +++ b/chart2/source/controller/main/ElementSelector.cxx @@ -33,10 +33,6 @@ #include <toolkit/helper/vclunohelper.hxx> #include <vcl/svapp.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - namespace chart { class ExplicitValueProvider; } namespace chart @@ -120,7 +116,7 @@ void SelectorListBox::UpdateChartElementsListAndSelection() bAddSelectionToList = true; Reference< uno::XInterface > xChartView; - Reference< lang::XMultiServiceFactory > xFact( xChartController->getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xFact = xChartController->getChartModel(); if( xFact.is() ) xChartView = xFact->createInstance( CHART_VIEW_SERVICE_NAME ); ExplicitValueProvider* pExplicitValueProvider = nullptr; //ExplicitValueProvider::getExplicitValueProvider(xChartView); this creates all visible data points, that's too much @@ -162,7 +158,8 @@ void SelectorListBox::UpdateChartElementsListAndSelection() sal_uInt16 nN=0; for (auto const& entry : m_aEntries) { - m_xWidget->append_text(entry.UIName); + // tdf#152087 strip any newlines from the entry + m_xWidget->append_text(entry.UIName.replaceAll("\n", " ")); if ( !bSelectionFound && aSelectedOID == entry.OID ) { nEntryPosToSelect = nN; @@ -288,7 +285,7 @@ void SAL_CALL ElementSelectorToolbarController::statusChanged( const frame::Feat Reference< frame::XController > xChartController; rEvent.State >>= xChartController; ::chart::ChartController* pController = dynamic_cast<::chart::ChartController*>(xChartController.get()); - assert(pController); + assert(!xChartController || pController); m_apSelectorListBox->SetChartController( pController ); m_apSelectorListBox->UpdateChartElementsListAndSelection(); } diff --git a/chart2/source/controller/main/ElementSelector.hxx b/chart2/source/controller/main/ElementSelector.hxx index 5467dd161299..fb1e4e0527ff 100644 --- a/chart2/source/controller/main/ElementSelector.hxx +++ b/chart2/source/controller/main/ElementSelector.hxx @@ -20,7 +20,6 @@ #include <ObjectIdentifier.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/frame/XController.hpp> #include <cppuhelper/implbase1.hxx> #include <svtools/toolboxcontroller.hxx> diff --git a/chart2/source/controller/main/FeatureCommandDispatchBase.cxx b/chart2/source/controller/main/FeatureCommandDispatchBase.cxx index 90dcf77b2482..b1c5f72d1d5b 100644 --- a/chart2/source/controller/main/FeatureCommandDispatchBase.cxx +++ b/chart2/source/controller/main/FeatureCommandDispatchBase.cxx @@ -29,7 +29,7 @@ namespace chart FeatureCommandDispatchBase::FeatureCommandDispatchBase( const Reference< uno::XComponentContext >& rxContext ) :CommandDispatch( rxContext ) - ,m_nFeatureId( 0 ) + ,m_nFeatureId( ChartCommandID::NONE ) { } @@ -79,7 +79,7 @@ void FeatureCommandDispatchBase::dispatch( const util::URL& URL, } void FeatureCommandDispatchBase::implDescribeSupportedFeature( const char* pAsciiCommandURL, - sal_uInt16 nId, sal_Int16 nGroup ) + ChartCommandID nId, sal_Int16 nGroup ) { ControllerFeature aFeature; aFeature.Command = OUString::createFromAscii( pAsciiCommandURL ); diff --git a/chart2/source/controller/main/FeatureCommandDispatchBase.hxx b/chart2/source/controller/main/FeatureCommandDispatchBase.hxx index 0c291a684d79..3ceb35ad1268 100644 --- a/chart2/source/controller/main/FeatureCommandDispatchBase.hxx +++ b/chart2/source/controller/main/FeatureCommandDispatchBase.hxx @@ -22,12 +22,50 @@ #include <com/sun/star/frame/DispatchInformation.hpp> +enum class ChartCommandID +{ + NONE = 0, + + //Draw Command Ids: + DrawObjectSelect = 1, + DrawLine = 2, + DrawLineArrowEnd = 3, + DrawRect = 4, + DrawEllipse = 5, + DrawFreelineNoFill = 6, + DrawText = 7, + DrawTextVertical = 8, + DrawCaption = 9, + DrawCaptionVertical = 10, + DrawToolboxCsBasic = 11, + DrawToolboxCsSymbol = 12, + DrawToolboxCsArrow = 13, + DrawToolboxCsFlowchart = 14, + DrawToolboxCsCallout = 15, + DrawToolboxCsStar = 16, + + //Shape Controller Command Ids: + ShapeFormatLine = 21, + ShapeFormatArea = 22, + ShapeTextAttributes = 23, + ShapeTransformDialog = 24, + ShapeObjectTitleDescription = 25, + ShapeRenameObject = 26, + ShapeBringToFront = 28, + ShapeForward = 29, + ShapeBackward = 30, + ShapeSendToBack = 31, + ShapeFontDialog = 35, + ShapeParagraphDialog = 36 +}; + + namespace chart { struct ControllerFeature: public css::frame::DispatchInformation { - sal_uInt16 nFeatureId; + ChartCommandID nFeatureId; }; typedef std::map< OUString, @@ -84,12 +122,12 @@ protected: the command group of the feature. This is important for configuring the controller UI by the user, see also <type scope="css::frame">CommandGroup</type>. */ - void implDescribeSupportedFeature( const char* pAsciiCommandURL, sal_uInt16 nId, + void implDescribeSupportedFeature( const char* pAsciiCommandURL, ChartCommandID nId, sal_Int16 nGroup ); mutable SupportedFeatures m_aSupportedFeatures; - sal_uInt16 m_nFeatureId; + ChartCommandID m_nFeatureId; }; } // namespace chart diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx b/chart2/source/controller/main/ObjectHierarchy.cxx index 1fb449026f3a..3a215ac99522 100644 --- a/chart2/source/controller/main/ObjectHierarchy.cxx +++ b/chart2/source/controller/main/ObjectHierarchy.cxx @@ -19,38 +19,35 @@ #include <ObjectHierarchy.hxx> #include <ObjectIdentifier.hxx> -#include <ChartModelHelper.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> +#include <Axis.hxx> #include <AxisHelper.hxx> #include <chartview/ExplicitValueProvider.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartModel.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> +#include <GridProperties.hxx> #include <LegendHelper.hxx> #include <chartview/DrawModelWrapper.hxx> #include <unonames.hxx> +#include <BaseCoordinateSystem.hxx> #include <map> #include <algorithm> -#include <iterator> +#include <cstddef> #include <com/sun/star/drawing/XShapes.hpp> -#include <com/sun/star/chart2/XTitled.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> -#include <com/sun/star/chart2/XDataSeriesContainer.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/awt/Key.hpp> -#include <com/sun/star/awt/KeyEvent.hpp> #include <com/sun/star/awt/KeyModifier.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -91,12 +88,11 @@ void lcl_getChildOIDs( } } -void lcl_addAxisTitle( const Reference< XAxis >& xAxis, ::chart::ObjectHierarchy::tChildContainer& rContainer, const rtl::Reference<::chart::ChartModel>& xChartModel ) +void lcl_addAxisTitle( const rtl::Reference< ::chart::Axis >& xAxis, ::chart::ObjectHierarchy::tChildContainer& rContainer, const rtl::Reference<::chart::ChartModel>& xChartModel ) { - Reference< XTitled > xAxisTitled( xAxis, uno::UNO_QUERY ); - if( xAxisTitled.is()) + if( xAxis.is()) { - Reference< XTitle > xAxisTitle( xAxisTitled->getTitleObject()); + Reference< XTitle > xAxisTitle( xAxis->getTitleObject()); if( xAxisTitle.is()) rContainer.emplace_back( ::chart::ObjectIdentifier::createClassifiedIdentifierForObject( xAxisTitle, xChartModel ) ); } @@ -109,17 +105,17 @@ namespace chart void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xChartDocument ) { - m_aChildMap = tChildMap();//clear tree + m_aChildMap.clear(); if( !xChartDocument.is() ) return; //@todo: change ObjectIdentifier to take an XChartDocument rather than XModel - rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xChartDocument ); + rtl::Reference< Diagram > xDiagram = xChartDocument->getFirstChartDiagram(); ObjectIdentifier aDiaOID; if( xDiagram.is() ) aDiaOID = ObjectIdentifier( ObjectIdentifier::createClassifiedIdentifierForObject( static_cast<cppu::OWeakObject*>(xDiagram.get()), xChartDocument ) ); - ObjectHierarchy::tChildContainer aTopLevelContainer; + tChildContainer aTopLevelContainer; // First Level @@ -150,8 +146,8 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh if( !m_bOrderingForElementSelector ) { // Axis Titles. Note: These are interpreted of being top level - const Sequence< Reference< XAxis > > aAxes( AxisHelper::getAllAxesOfDiagram( xDiagram ) ); - for( Reference< XAxis > const & axis : aAxes ) + const std::vector< rtl::Reference< Axis > > aAxes = AxisHelper::getAllAxesOfDiagram( xDiagram ); + for( rtl::Reference< Axis > const & axis : aAxes ) lcl_addAxisTitle( axis, aTopLevelContainer, xChartDocument ); // Diagram @@ -162,7 +158,7 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh createDiagramTree( aTopLevelContainer, xChartDocument, xDiagram ); else { - ObjectHierarchy::tChildContainer aSubContainer; + tChildContainer aSubContainer; createDiagramTree( aSubContainer, xChartDocument, xDiagram ); if( !aSubContainer.empty() ) m_aChildMap[ aDiaOID ] = aSubContainer; @@ -183,13 +179,13 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh aTopLevelContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_PAGE, u"" ) ); if( ! aTopLevelContainer.empty()) - m_aChildMap[ ObjectHierarchy::getRootNodeOID() ] = aTopLevelContainer; + m_aChildMap[ObjectHierarchy::getRootNodeOID()] = aTopLevelContainer; } void ObjectHierarchy::createLegendTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, - const Reference< XDiagram > & xDiagram ) + const rtl::Reference< Diagram > & xDiagram ) { if( !(xDiagram.is() && LegendHelper::hasLegend( xDiagram )) ) return; @@ -200,9 +196,10 @@ void ObjectHierarchy::createLegendTree( // iterate over child shapes of legend and search for matching CIDs if( m_pExplicitValueProvider ) { - Reference< container::XIndexAccess > xLegendShapeContainer( - m_pExplicitValueProvider->getShapeForCID( aLegendOID.getObjectCID() ), uno::UNO_QUERY ); - ObjectHierarchy::tChildContainer aLegendEntryOIDs; + rtl::Reference< SvxShapeGroupAnyD > xLegendShapeContainer = + dynamic_cast<SvxShapeGroupAnyD*>( + m_pExplicitValueProvider->getShapeForCID( aLegendOID.getObjectCID() ).get() ); + tChildContainer aLegendEntryOIDs; lcl_getChildOIDs( aLegendEntryOIDs, xLegendShapeContainer ); m_aChildMap[ aLegendOID ] = aLegendEntryOIDs; @@ -210,28 +207,35 @@ void ObjectHierarchy::createLegendTree( } void ObjectHierarchy::createAxesTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, - const Reference< XDiagram > & xDiagram ) + const rtl::Reference< Diagram > & xDiagram ) { - Reference< XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW ); - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); - uno::Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); + sal_Int32 nDimensionCount = xDiagram->getDimension(); + rtl::Reference< ChartType > xChartType( xDiagram->getChartTypeByIndex( 0 ) ); bool bSupportsAxesGrids = ChartTypeHelper::isSupportingMainAxis( xChartType, nDimensionCount, 0 ); if( !bSupportsAxesGrids ) return; - Sequence< Reference< XAxis > > aAxes( AxisHelper::getAllAxesOfDiagram( xDiagram, /* bOnlyVisible = */ true ) ); + // Data Table + uno::Reference<chart2::XDataTable> xDataTable = xDiagram->getDataTable(); + if (xDataTable.is()) + { + rContainer.push_back(ObjectIdentifier::createClassifiedIdentifierForObject(xDataTable, xChartDoc)); + } + + // Axes + std::vector< rtl::Reference< Axis > > aAxes = AxisHelper::getAllAxesOfDiagram( xDiagram, /* bOnlyVisible = */ true ); if( !m_bOrderingForElementSelector ) { - for (const auto & rAxis : std::as_const(aAxes)) + for (const auto& rAxis : aAxes) rContainer.push_back( ObjectIdentifier::createClassifiedIdentifierForObject( rAxis, xChartDoc ) ); } // get all axes, also invisible ones aAxes = AxisHelper::getAllAxesOfDiagram( xDiagram ); // Grids - for( Reference< XAxis > const & xAxis : std::as_const(aAxes) ) + for( rtl::Reference< Axis > const & xAxis : aAxes ) { if(!xAxis.is()) continue; @@ -253,19 +257,17 @@ void ObjectHierarchy::createAxesTree( lcl_addAxisTitle( xAxis, rContainer, xChartDoc ); } - Reference< beans::XPropertySet > xGridProperties( xAxis->getGridProperties() ); + rtl::Reference< ::chart::GridProperties > xGridProperties( xAxis->getGridProperties2() ); if( AxisHelper::isGridVisible( xGridProperties ) ) { //main grid rContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, xChartDoc ) ); } - Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() ); - sal_Int32 nSubGrid = 0; - for( nSubGrid = 0; nSubGrid < aSubGrids.getLength(); ++nSubGrid ) + std::vector< rtl::Reference< ::chart::GridProperties > > aSubGrids( xAxis->getSubGridProperties2() ); + for( size_t nSubGrid = 0; nSubGrid < aSubGrids.size(); ++nSubGrid ) { - Reference< beans::XPropertySet > xSubGridProperties( aSubGrids[nSubGrid] ); - if( AxisHelper::isGridVisible( xSubGridProperties ) ) + if( AxisHelper::isGridVisible( aSubGrids[nSubGrid] ) ) { //sub grid rContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, xChartDoc, nSubGrid ) ); @@ -275,12 +277,12 @@ void ObjectHierarchy::createAxesTree( } void ObjectHierarchy::createWallAndFloor( - ObjectHierarchy::tChildContainer & rContainer, - const Reference< XDiagram > & xDiagram ) + tChildContainer & rContainer, + const rtl::Reference< Diagram > & xDiagram ) { - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); + sal_Int32 nDimensionCount = xDiagram->getDimension(); bool bIsThreeD = ( nDimensionCount == 3 ); - bool bHasWall = DiagramHelper::isSupportingFloorAndWall( xDiagram ); + bool bHasWall = xDiagram->isSupportingFloorAndWall(); if( bHasWall && bIsThreeD ) { rContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM_WALL, u"" ) ); @@ -293,9 +295,9 @@ void ObjectHierarchy::createWallAndFloor( } void ObjectHierarchy::createDiagramTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, - const Reference< XDiagram > & xDiagram ) + const rtl::Reference< Diagram > & xDiagram ) { if( !m_bOrderingForElementSelector ) { @@ -311,27 +313,23 @@ void ObjectHierarchy::createDiagramTree( } void ObjectHierarchy::createDataSeriesTree( - ObjectHierarchy::tChildContainer & rOutDiagramSubContainer, - const Reference< XDiagram > & xDiagram ) + tChildContainer & rOutDiagramSubContainer, + const rtl::Reference< Diagram > & xDiagram ) { - Reference< XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW ); - try { - sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); - Sequence< Reference< XCoordinateSystem > > aCooSysSeq( - xCooSysCnt->getCoordinateSystems()); - for( sal_Int32 nCooSysIdx=0; nCooSysIdx<aCooSysSeq.getLength(); ++nCooSysIdx ) + sal_Int32 nDimensionCount = xDiagram->getDimension(); + std::vector< rtl::Reference< BaseCoordinateSystem > > aCooSysSeq( + xDiagram->getBaseCoordinateSystems()); + for( std::size_t nCooSysIdx=0; nCooSysIdx<aCooSysSeq.size(); ++nCooSysIdx ) { - Reference< XChartTypeContainer > xCTCnt( aCooSysSeq[nCooSysIdx], uno::UNO_QUERY_THROW ); - Sequence< Reference< XChartType > > aChartTypeSeq( xCTCnt->getChartTypes()); - for( sal_Int32 nCTIdx=0; nCTIdx<aChartTypeSeq.getLength(); ++nCTIdx ) + std::vector< rtl::Reference< ChartType > > aChartTypeSeq( aCooSysSeq[nCooSysIdx]->getChartTypes2()); + for( std::size_t nCTIdx=0; nCTIdx<aChartTypeSeq.size(); ++nCTIdx ) { - Reference< XChartType > xChartType( aChartTypeSeq[nCTIdx] ); - Reference< XDataSeriesContainer > xDSCnt( xChartType, uno::UNO_QUERY_THROW ); - Sequence< Reference< XDataSeries > > aSeriesSeq( xDSCnt->getDataSeries() ); + rtl::Reference< ChartType > xChartType( aChartTypeSeq[nCTIdx] ); + std::vector< rtl::Reference< DataSeries > > aSeriesSeq( xChartType->getDataSeries2() ); const sal_Int32 nNumberOfSeries = - ChartTypeHelper::getNumberOfDisplayedSeries( xChartType, aSeriesSeq.getLength()); + ChartTypeHelper::getNumberOfDisplayedSeries( xChartType, aSeriesSeq.size()); for( sal_Int32 nSeriesIdx=0; nSeriesIdx<nNumberOfSeries; ++nSeriesIdx ) { @@ -342,9 +340,9 @@ void ObjectHierarchy::createDataSeriesTree( ObjectIdentifier( ObjectIdentifier::createClassifiedIdentifierForParticle( aSeriesParticle ) ) ); rOutDiagramSubContainer.push_back( aSeriesOID ); - ObjectHierarchy::tChildContainer aSeriesSubContainer; + tChildContainer aSeriesSubContainer; - Reference< chart2::XDataSeries > const & xSeries = aSeriesSeq[nSeriesIdx]; + rtl::Reference< DataSeries > const & xSeries = aSeriesSeq[nSeriesIdx]; // data labels if( DataSeriesHelper::hasDataLabelsAtSeries( xSeries ) ) @@ -356,45 +354,38 @@ void ObjectHierarchy::createDataSeriesTree( // Statistics if( ChartTypeHelper::isSupportingStatisticProperties( xChartType, nDimensionCount ) ) { - Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); - if( xCurveCnt.is()) + const std::vector< rtl::Reference< RegressionCurveModel > > & rCurves( xSeries->getRegressionCurves2()); + for( size_t nCurveIdx=0; nCurveIdx<rCurves.size(); ++nCurveIdx ) { - Sequence< Reference< chart2::XRegressionCurve > > aCurves( xCurveCnt->getRegressionCurves()); - for( sal_Int32 nCurveIdx=0; nCurveIdx<aCurves.getLength(); ++nCurveIdx ) + bool bIsAverageLine = RegressionCurveHelper::isMeanValueLine( rCurves[nCurveIdx] ); + aSeriesSubContainer.emplace_back( ObjectIdentifier::createDataCurveCID( aSeriesParticle, nCurveIdx, bIsAverageLine ) ); + if( RegressionCurveHelper::hasEquation( rCurves[nCurveIdx] ) ) { - bool bIsAverageLine = RegressionCurveHelper::isMeanValueLine( aCurves[nCurveIdx] ); - aSeriesSubContainer.emplace_back( ObjectIdentifier::createDataCurveCID( aSeriesParticle, nCurveIdx, bIsAverageLine ) ); - if( RegressionCurveHelper::hasEquation( aCurves[nCurveIdx] ) ) - { - aSeriesSubContainer.emplace_back( ObjectIdentifier::createDataCurveEquationCID( aSeriesParticle, nCurveIdx ) ); - } + aSeriesSubContainer.emplace_back( ObjectIdentifier::createDataCurveEquationCID( aSeriesParticle, nCurveIdx ) ); } - Reference< beans::XPropertySet > xSeriesProp( xSeries, uno::UNO_QUERY ); - Reference< beans::XPropertySet > xErrorBarProp; - if( xSeriesProp.is() && - (xSeriesProp->getPropertyValue( CHART_UNONAME_ERRORBAR_Y) >>= xErrorBarProp) && - xErrorBarProp.is()) + } + Reference< beans::XPropertySet > xErrorBarProp; + if( (xSeries->getPropertyValue( CHART_UNONAME_ERRORBAR_Y) >>= xErrorBarProp) && + xErrorBarProp.is()) + { + sal_Int32 nStyle = css::chart::ErrorBarStyle::NONE; + if( ( xErrorBarProp->getPropertyValue( "ErrorBarStyle") >>= nStyle ) && + ( nStyle != css::chart::ErrorBarStyle::NONE ) ) { - sal_Int32 nStyle = css::chart::ErrorBarStyle::NONE; - if( ( xErrorBarProp->getPropertyValue( "ErrorBarStyle") >>= nStyle ) && - ( nStyle != css::chart::ErrorBarStyle::NONE ) ) - { - aSeriesSubContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierWithParent( - OBJECTTYPE_DATA_ERRORS_Y, u"", aSeriesParticle ) ); - } + aSeriesSubContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierWithParent( + OBJECTTYPE_DATA_ERRORS_Y, u"", aSeriesParticle ) ); } + } - if( xSeriesProp.is() && - (xSeriesProp->getPropertyValue(CHART_UNONAME_ERRORBAR_X) >>= xErrorBarProp) && - xErrorBarProp.is()) + if( (xSeries->getPropertyValue(CHART_UNONAME_ERRORBAR_X) >>= xErrorBarProp) && + xErrorBarProp.is()) + { + sal_Int32 nStyle = css::chart::ErrorBarStyle::NONE; + if( ( xErrorBarProp->getPropertyValue( "ErrorBarStyle") >>= nStyle ) && + ( nStyle != css::chart::ErrorBarStyle::NONE ) ) { - sal_Int32 nStyle = css::chart::ErrorBarStyle::NONE; - if( ( xErrorBarProp->getPropertyValue( "ErrorBarStyle") >>= nStyle ) && - ( nStyle != css::chart::ErrorBarStyle::NONE ) ) - { - aSeriesSubContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierWithParent( - OBJECTTYPE_DATA_ERRORS_X, u"", aSeriesParticle ) ); - } + aSeriesSubContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifierWithParent( + OBJECTTYPE_DATA_ERRORS_X, u"", aSeriesParticle ) ); } } } @@ -403,8 +394,9 @@ void ObjectHierarchy::createDataSeriesTree( // iterate over child shapes of legend and search for matching CIDs if( m_pExplicitValueProvider ) { - Reference< container::XIndexAccess > xSeriesShapeContainer( - m_pExplicitValueProvider->getShapeForCID( aSeriesOID.getObjectCID() ), uno::UNO_QUERY ); + rtl::Reference< SvxShapeGroupAnyD > xSeriesShapeContainer = + dynamic_cast<SvxShapeGroupAnyD*>( + m_pExplicitValueProvider->getShapeForCID( aSeriesOID.getObjectCID() ).get() ); lcl_getChildOIDs( aSeriesSubContainer, xSeriesShapeContainer ); } @@ -420,7 +412,7 @@ void ObjectHierarchy::createDataSeriesTree( } } -void ObjectHierarchy::createAdditionalShapesTree( ObjectHierarchy::tChildContainer& rContainer ) +void ObjectHierarchy::createAdditionalShapesTree(tChildContainer& rContainer) { try { @@ -467,7 +459,7 @@ const ObjectHierarchy::tChildContainer & ObjectHierarchy::getChildren( const Obj if( aIt != m_aChildMap.end()) return aIt->second; } - static const ObjectHierarchy::tChildContainer EMPTY; + static const tChildContainer EMPTY; return EMPTY; } @@ -477,13 +469,13 @@ const ObjectHierarchy::tChildContainer & ObjectHierarchy::getSiblings( const Obj { for (auto const& child : m_aChildMap) { - ObjectHierarchy::tChildContainer::const_iterator aElemIt( + tChildContainer::const_iterator aElemIt( std::find( child.second.begin(), child.second.end(), rNode )); if( aElemIt != child.second.end()) return child.second; } } - static const ObjectHierarchy::tChildContainer EMPTY; + static const tChildContainer EMPTY; return EMPTY; } @@ -492,8 +484,8 @@ ObjectIdentifier ObjectHierarchy::getParentImpl( const ObjectIdentifier & rOID ) const { // search children - ObjectHierarchy::tChildContainer aChildren( getChildren( rParentOID )); - ObjectHierarchy::tChildContainer::const_iterator aIt( + tChildContainer aChildren( getChildren( rParentOID )); + tChildContainer::const_iterator aIt( std::find( aChildren.begin(), aChildren.end(), rOID )); // recursion end if( aIt != aChildren.end()) @@ -568,11 +560,11 @@ sal_Int32 ObjectHierarchy::getIndexInParent( } ObjectKeyNavigation::ObjectKeyNavigation( - const ObjectIdentifier & rCurrentOID, - const rtl::Reference<::chart::ChartModel> & xChartDocument, + ObjectIdentifier aCurrentOID, + rtl::Reference<::chart::ChartModel> xChartDocument, ExplicitValueProvider * pExplicitValueProvider /* = 0 */ ) : - m_aCurrentOID( rCurrentOID ), - m_xChartDocument( xChartDocument ), + m_aCurrentOID(std::move( aCurrentOID )), + m_xChartDocument(std::move( xChartDocument )), m_pExplicitValueProvider( pExplicitValueProvider ) { if ( !m_aCurrentOID.isValid() ) diff --git a/chart2/source/controller/main/PositionAndSizeHelper.cxx b/chart2/source/controller/main/PositionAndSizeHelper.cxx index ec744633ca0c..8cad36404fdc 100644 --- a/chart2/source/controller/main/PositionAndSizeHelper.cxx +++ b/chart2/source/controller/main/PositionAndSizeHelper.cxx @@ -20,12 +20,9 @@ #include <PositionAndSizeHelper.hxx> #include <ControllerLockGuard.hxx> #include <com/sun/star/chart/ChartLegendExpansion.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> #include <com/sun/star/chart2/RelativeSize.hpp> -#include <com/sun/star/frame/XModel.hpp> #include <tools/gen.hxx> -#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/awt/Rectangle.hpp> #include <ChartModel.hxx> #include <Diagram.hxx> @@ -48,7 +45,7 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType tools::Rectangle aPageRect( Point(rPageRectangle.X,rPageRectangle.Y), Size(rPageRectangle.Width,rPageRectangle.Height) ); // every following branch divides by width and height - if (aPageRect.getWidth() == 0 || aPageRect.getHeight() == 0) + if (aPageRect.getOpenWidth() == 0 || aPageRect.getOpenHeight() == 0) return false; if( eObjectType==OBJECTTYPE_TITLE ) @@ -58,16 +55,16 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType aRelativePosition.Anchor = drawing::Alignment_CENTER; //the anchor point at the title object is top/middle Point aPos = aObjectRect.TopLeft(); - aRelativePosition.Primary = (double(aPos.X())+double(aObjectRect.getWidth())/2.0)/double(aPageRect.getWidth()); - aRelativePosition.Secondary = (double(aPos.Y())+double(aObjectRect.getHeight())/2.0)/double(aPageRect.getHeight()); + aRelativePosition.Primary = (double(aPos.X())+double(aObjectRect.getOpenWidth())/2.0)/double(aPageRect.getOpenWidth()); + aRelativePosition.Secondary = (double(aPos.Y())+double(aObjectRect.getOpenHeight())/2.0)/double(aPageRect.getOpenHeight()); xObjectProp->setPropertyValue( "RelativePosition", uno::Any(aRelativePosition) ); } else if( eObjectType == OBJECTTYPE_DATA_LABEL ) { RelativePosition aAbsolutePosition; RelativePosition aCustomLabelPosition; - aAbsolutePosition.Primary = double(rOldPositionAndSize.X) / double(aPageRect.getWidth()); - aAbsolutePosition.Secondary = double(rOldPositionAndSize.Y) / double(aPageRect.getHeight()); + aAbsolutePosition.Primary = double(rOldPositionAndSize.X) / double(aPageRect.getOpenWidth()); + aAbsolutePosition.Secondary = double(rOldPositionAndSize.Y) / double(aPageRect.getOpenHeight()); if( xObjectProp->getPropertyValue("CustomLabelPosition") >>= aCustomLabelPosition ) { @@ -84,8 +81,8 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType else if( fRotation == 270.0 ) aPos = aObjectRect.TopRight(); - aCustomLabelPosition.Primary = double(aPos.X()) / double(aPageRect.getWidth()) - aAbsolutePosition.Primary; - aCustomLabelPosition.Secondary = double(aPos.Y()) / double(aPageRect.getHeight()) - aAbsolutePosition.Secondary; + aCustomLabelPosition.Primary = double(aPos.X()) / double(aPageRect.getOpenWidth()) - aAbsolutePosition.Primary; + aCustomLabelPosition.Secondary = double(aPos.Y()) / double(aPageRect.getOpenHeight()) - aAbsolutePosition.Secondary; xObjectProp->setPropertyValue("CustomLabelPosition", uno::Any(aCustomLabelPosition)); } else if( eObjectType==OBJECTTYPE_DATA_CURVE_EQUATION ) @@ -95,8 +92,8 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType aRelativePosition.Anchor = drawing::Alignment_TOP_LEFT; //the anchor point at the title object is top/middle Point aPos = aObjectRect.TopLeft(); - aRelativePosition.Primary = double(aPos.X())/double(aPageRect.getWidth()); - aRelativePosition.Secondary = double(aPos.Y())/double(aPageRect.getHeight()); + aRelativePosition.Primary = double(aPos.X())/double(aPageRect.getOpenWidth()); + aRelativePosition.Secondary = double(aPos.Y())/double(aPageRect.getOpenHeight()); xObjectProp->setPropertyValue( "RelativePosition", uno::Any(aRelativePosition) ); } else if(eObjectType==OBJECTTYPE_LEGEND) @@ -108,21 +105,21 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType aRelativePosition.Primary = static_cast< double >( aAnchor.X()) / - static_cast< double >( aPageRect.getWidth() ); + static_cast< double >( aPageRect.getOpenWidth() ); aRelativePosition.Secondary = static_cast< double >( aAnchor.Y()) / - static_cast< double >( aPageRect.getHeight()); + static_cast< double >( aPageRect.getOpenHeight()); xObjectProp->setPropertyValue( "RelativePosition", uno::Any(aRelativePosition) ); aRelativeSize.Primary = - static_cast< double >( aObjectRect.getWidth()) / - static_cast< double >( aPageRect.getWidth() ); + static_cast< double >( aObjectRect.getOpenWidth()) / + static_cast< double >( aPageRect.getOpenWidth() ); if (aRelativeSize.Primary > 1.0) aRelativeSize.Primary = 1.0; aRelativeSize.Secondary = - static_cast< double >( aObjectRect.getHeight()) / - static_cast< double >( aPageRect.getHeight()); + static_cast< double >( aObjectRect.getOpenHeight()) / + static_cast< double >( aPageRect.getOpenHeight()); if (aRelativeSize.Secondary > 1.0) aRelativeSize.Secondary = 1.0; @@ -137,16 +134,16 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType aRelativePosition.Anchor = drawing::Alignment_CENTER; Point aPos = aObjectRect.Center(); - aRelativePosition.Primary = double(aPos.X())/double(aPageRect.getWidth()); - aRelativePosition.Secondary = double(aPos.Y())/double(aPageRect.getHeight()); + aRelativePosition.Primary = double(aPos.X())/double(aPageRect.getOpenWidth()); + aRelativePosition.Secondary = double(aPos.Y())/double(aPageRect.getOpenHeight()); xObjectProp->setPropertyValue( "RelativePosition", uno::Any(aRelativePosition) ); //set size: RelativeSize aRelativeSize; //the anchor points for the diagram are in the middle of the diagram //and in the middle of the page - aRelativeSize.Primary = double(aObjectRect.getWidth())/double(aPageRect.getWidth()); - aRelativeSize.Secondary = double(aObjectRect.getHeight())/double(aPageRect.getHeight()); + aRelativeSize.Primary = double(aObjectRect.getOpenWidth())/double(aPageRect.getOpenWidth()); + aRelativeSize.Secondary = double(aObjectRect.getOpenHeight())/double(aPageRect.getOpenHeight()); xObjectProp->setPropertyValue( "RelativeSize", uno::Any(aRelativeSize) ); } else @@ -154,7 +151,7 @@ bool PositionAndSizeHelper::moveObject( ObjectType eObjectType return true; } -bool PositionAndSizeHelper::moveObject( const OUString& rObjectCID +bool PositionAndSizeHelper::moveObject( std::u16string_view rObjectCID , const rtl::Reference<::chart::ChartModel>& xChartModel , const awt::Rectangle& rNewPositionAndSize , const awt::Rectangle& rOldPositionAndSize diff --git a/chart2/source/controller/main/SelectionHelper.cxx b/chart2/source/controller/main/SelectionHelper.cxx index 433a157ba828..de2ad664abe5 100644 --- a/chart2/source/controller/main/SelectionHelper.cxx +++ b/chart2/source/controller/main/SelectionHelper.cxx @@ -19,12 +19,9 @@ #include <SelectionHelper.hxx> #include <ObjectIdentifier.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> -#include <com/sun/star/frame/XModel.hpp> #include <svx/svdpage.hxx> #include <svx/svditer.hxx> #include <svx/obj3d.hxx> @@ -315,6 +312,11 @@ bool Selection::isDragableObjectSelected() const return m_aSelectedOID.isDragableObject(); } +bool Selection::isTitleObjectSelected() const +{ + return m_aSelectedOID.getObjectType() == OBJECTTYPE_TITLE; +} + bool Selection::isAdditionalShapeSelected() const { return m_aSelectedOID.isAdditionalShape(); @@ -433,8 +435,7 @@ OUString SelectionHelper::getHitObjectCID( if( aRet == aWallCID ) { - OUString aDiagramCID = ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM, OUString::number( 0 ) ); - aRet = aDiagramCID; + aRet = ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM, OUString::number( 0 ) ); } } } @@ -443,13 +444,13 @@ OUString SelectionHelper::getHitObjectCID( // \\- solar mutex } -bool SelectionHelper::isRotateableObject( const OUString& rCID +bool SelectionHelper::isRotateableObject( std::u16string_view rCID , const rtl::Reference<::chart::ChartModel>& xChartModel ) { if( !ObjectIdentifier::isRotateableObject( rCID ) ) return false; - sal_Int32 nDimensionCount = DiagramHelper::getDimension( ChartModelHelper::findDiagram( xChartModel ) ); + sal_Int32 nDimensionCount = xChartModel->getFirstChartDiagram()->getDimension(); return nDimensionCount == 3; } @@ -466,7 +467,7 @@ SelectionHelper::~SelectionHelper() bool SelectionHelper::getFrameDragSingles() { //true == green == surrounding handles - return dynamic_cast<const E3dObject*>( m_pSelectedObj) == nullptr; + return DynCastE3dObject( m_pSelectedObj) == nullptr; } SdrObject* SelectionHelper::getMarkHandlesObject( SdrObject* pObj ) @@ -533,7 +534,7 @@ E3dScene* SelectionHelper::getSceneToRotate( SdrObject* pObj ) if(pObj) { - pRotateable = dynamic_cast<E3dObject*>(pObj); + pRotateable = DynCastE3dObject(pObj); if( !pRotateable ) { SolarMutexGuard aSolarGuard; @@ -543,8 +544,7 @@ E3dScene* SelectionHelper::getSceneToRotate( SdrObject* pObj ) SdrObjListIter aIterator(pSubList, SdrIterMode::DeepWithGroups); while( aIterator.IsMore() && !pRotateable ) { - SdrObject* pSubObj = aIterator.Next(); - pRotateable = dynamic_cast<E3dObject*>(pSubObj); + pRotateable = DynCastE3dObject(aIterator.Next()); } } } @@ -598,7 +598,7 @@ bool SelectionHelper::getMarkHandles( SdrHdlList& rHdlList ) for( sal_uInt32 nM = 0; nM < aPolygon.count(); nM++) { const ::basegfx::B2DPoint aPoint(aPolygon.getB2DPoint(nM)); - rHdlList.AddHdl(std::make_unique<SdrHdl>(Point(basegfx::fround(aPoint.getX()), basegfx::fround(aPoint.getY())), SdrHdlKind::Poly)); + rHdlList.AddHdl(std::make_unique<SdrHdl>(Point(basegfx::fround<tools::Long>(aPoint.getX()), basegfx::fround<tools::Long>(aPoint.getY())), SdrHdlKind::Poly)); } } return true; diff --git a/chart2/source/controller/main/ShapeController.cxx b/chart2/source/controller/main/ShapeController.cxx index acdcb78ce045..c440a7d97925 100644 --- a/chart2/source/controller/main/ShapeController.cxx +++ b/chart2/source/controller/main/ShapeController.cxx @@ -18,15 +18,14 @@ */ #include "ShapeController.hxx" -#include <ShapeController.h> #include <ChartController.hxx> #include <ViewElementListProvider.hxx> #include <dlg_ShapeFont.hxx> #include <dlg_ShapeParagraph.hxx> +#include <ChartModel.hxx> #include <chartview/DrawModelWrapper.hxx> #include <com/sun/star/drawing/XShapes.hpp> #include <com/sun/star/frame/CommandGroup.hpp> -#include <com/sun/star/frame/XStorable.hpp> #include <vcl/svapp.hxx> #include <editeng/formatbreakitem.hxx> @@ -37,7 +36,7 @@ #include <editeng/spltitem.hxx> #include <svx/svxdlg.hxx> #include <editeng/widwitem.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::frame; @@ -60,7 +59,7 @@ ShapeController::~ShapeController() } // WeakComponentImplHelperBase -void ShapeController::disposing() +void ShapeController::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { } @@ -78,7 +77,7 @@ FeatureState ShapeController::getState( const OUString& rCommand ) bool bWritable = false; if ( m_pChartController ) { - Reference< frame::XStorable > xStorable( m_pChartController->getModel(), uno::UNO_QUERY ); + rtl::Reference< ChartModel > xStorable = m_pChartController->getChartModel(); if ( xStorable.is() ) { bWritable = !xStorable->isReadonly(); @@ -88,37 +87,37 @@ FeatureState ShapeController::getState( const OUString& rCommand ) SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand ); if ( aIter != m_aSupportedFeatures.end() ) { - sal_uInt16 nFeatureId = aIter->second.nFeatureId; + ChartCommandID nFeatureId = aIter->second.nFeatureId; switch ( nFeatureId ) { - case COMMAND_ID_FORMAT_LINE: - case COMMAND_ID_FORMAT_AREA: - case COMMAND_ID_TEXT_ATTRIBUTES: - case COMMAND_ID_TRANSFORM_DIALOG: - case COMMAND_ID_OBJECT_TITLE_DESCRIPTION: - case COMMAND_ID_RENAME_OBJECT: + case ChartCommandID::ShapeFormatLine: + case ChartCommandID::ShapeFormatArea: + case ChartCommandID::ShapeTextAttributes: + case ChartCommandID::ShapeTransformDialog: + case ChartCommandID::ShapeObjectTitleDescription: + case ChartCommandID::ShapeRenameObject: { aReturn.bEnabled = bWritable; aReturn.aState <<= false; } break; - case COMMAND_ID_BRING_TO_FRONT: - case COMMAND_ID_FORWARD: + case ChartCommandID::ShapeBringToFront: + case ChartCommandID::ShapeForward: { aReturn.bEnabled = ( bWritable && isForwardPossible() ); aReturn.aState <<= false; } break; - case COMMAND_ID_BACKWARD: - case COMMAND_ID_SEND_TO_BACK: + case ChartCommandID::ShapeBackward: + case ChartCommandID::ShapeSendToBack: { aReturn.bEnabled = ( bWritable && isBackwardPossible() ); aReturn.aState <<= false; } break; - case COMMAND_ID_FONT_DIALOG: - case COMMAND_ID_PARAGRAPH_DIALOG: + case ChartCommandID::ShapeFontDialog: + case ChartCommandID::ShapeParagraphDialog: { aReturn.bEnabled = bWritable; aReturn.aState <<= false; @@ -142,53 +141,53 @@ void ShapeController::execute( const OUString& rCommand, const Sequence< beans:: if ( aIter == m_aSupportedFeatures.end() ) return; - sal_uInt16 nFeatureId = aIter->second.nFeatureId; + ChartCommandID nFeatureId = aIter->second.nFeatureId; switch ( nFeatureId ) { - case COMMAND_ID_FORMAT_LINE: + case ChartCommandID::ShapeFormatLine: { executeDispatch_FormatLine(); } break; - case COMMAND_ID_FORMAT_AREA: + case ChartCommandID::ShapeFormatArea: { executeDispatch_FormatArea(); } break; - case COMMAND_ID_TEXT_ATTRIBUTES: + case ChartCommandID::ShapeTextAttributes: { executeDispatch_TextAttributes(); } break; - case COMMAND_ID_TRANSFORM_DIALOG: + case ChartCommandID::ShapeTransformDialog: { executeDispatch_TransformDialog(); } break; - case COMMAND_ID_OBJECT_TITLE_DESCRIPTION: + case ChartCommandID::ShapeObjectTitleDescription: { executeDispatch_ObjectTitleDescription(); } break; - case COMMAND_ID_RENAME_OBJECT: + case ChartCommandID::ShapeRenameObject: { executeDispatch_RenameObject(); } break; - case COMMAND_ID_BRING_TO_FRONT: - case COMMAND_ID_FORWARD: - case COMMAND_ID_BACKWARD: - case COMMAND_ID_SEND_TO_BACK: + case ChartCommandID::ShapeBringToFront: + case ChartCommandID::ShapeForward: + case ChartCommandID::ShapeBackward: + case ChartCommandID::ShapeSendToBack: { executeDispatch_ChangeZOrder( nFeatureId ); } break; - case COMMAND_ID_FONT_DIALOG: + case ChartCommandID::ShapeFontDialog: { executeDispatch_FontDialog(); } break; - case COMMAND_ID_PARAGRAPH_DIALOG: + case ChartCommandID::ShapeParagraphDialog: { executeDispatch_ParagraphDialog(); } @@ -202,24 +201,23 @@ void ShapeController::execute( const OUString& rCommand, const Sequence< beans:: void ShapeController::describeSupportedFeatures() { - implDescribeSupportedFeature( ".uno:FormatLine", COMMAND_ID_FORMAT_LINE, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:FormatArea", COMMAND_ID_FORMAT_AREA, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:TextAttributes", COMMAND_ID_TEXT_ATTRIBUTES, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:TransformDialog", COMMAND_ID_TRANSFORM_DIALOG, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:ObjectTitleDescription", COMMAND_ID_OBJECT_TITLE_DESCRIPTION, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:RenameObject", COMMAND_ID_RENAME_OBJECT, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:BringToFront", COMMAND_ID_BRING_TO_FRONT, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:Forward", COMMAND_ID_FORWARD, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:Backward", COMMAND_ID_BACKWARD, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:SendToBack", COMMAND_ID_SEND_TO_BACK, CommandGroup::FORMAT ); - implDescribeSupportedFeature( ".uno:FontDialog", COMMAND_ID_FONT_DIALOG, CommandGroup::EDIT ); - implDescribeSupportedFeature( ".uno:ParagraphDialog", COMMAND_ID_PARAGRAPH_DIALOG, CommandGroup::EDIT ); + implDescribeSupportedFeature( ".uno:FormatLine", ChartCommandID::ShapeFormatLine, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:FormatArea", ChartCommandID::ShapeFormatArea, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:TextAttributes", ChartCommandID::ShapeTextAttributes, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:TransformDialog", ChartCommandID::ShapeTransformDialog, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:ObjectTitleDescription", ChartCommandID::ShapeObjectTitleDescription, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:RenameObject", ChartCommandID::ShapeRenameObject, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:BringToFront", ChartCommandID::ShapeBringToFront, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:Forward", ChartCommandID::ShapeForward, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:Backward", ChartCommandID::ShapeBackward, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:SendToBack", ChartCommandID::ShapeSendToBack, CommandGroup::FORMAT ); + implDescribeSupportedFeature( ".uno:FontDialog", ChartCommandID::ShapeFontDialog, CommandGroup::EDIT ); + implDescribeSupportedFeature( ".uno:ParagraphDialog", ChartCommandID::ShapeParagraphDialog, CommandGroup::EDIT ); } IMPL_LINK( ShapeController, CheckNameHdl, AbstractSvxObjectNameDialog&, rDialog, bool ) { - OUString aName; - rDialog.GetName( aName ); + OUString aName = rDialog.GetName(); if ( !aName.isEmpty() ) { @@ -289,7 +287,7 @@ void ShapeController::executeDispatch_FormatArea() } SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); ScopedVclPtr< AbstractSvxAreaTabDialog > pDlg( - pFact->CreateSvxAreaTabDialog(pChartWindow, &aAttr, &pDrawModelWrapper->getSdrModel(), true)); + pFact->CreateSvxAreaTabDialog(pChartWindow, &aAttr, &pDrawModelWrapper->getSdrModel(), true, false)); if ( pDlg->Execute() == RET_OK ) { const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); @@ -322,20 +320,26 @@ void ShapeController::executeDispatch_TextAttributes() pDrawViewWrapper->MergeAttrFromMarked( aAttr, false ); } SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - ScopedVclPtr< SfxAbstractTabDialog > pDlg( + VclPtr< SfxAbstractTabDialog > pDlg( pFact->CreateTextTabDialog(pChartWindow, &aAttr, pDrawViewWrapper)); - if ( pDlg->Execute() == RET_OK ) - { - const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); - if ( bHasMarked ) - { - pDrawViewWrapper->SetAttributes( *pOutAttr ); - } - else + pDlg->StartExecuteAsync( + [pDlg, bHasMarked, pDrawViewWrapper] (sal_Int32 nResult)->void { - pDrawViewWrapper->SetDefaultAttr( *pOutAttr, false ); + if ( RET_OK == nResult ) + { + const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); + if ( bHasMarked ) + { + pDrawViewWrapper->SetAttributes( *pOutAttr ); + } + else + { + pDrawViewWrapper->SetDefaultAttr( *pOutAttr, false ); + } + } + pDlg->disposeOnce(); } - } + ); } void ShapeController::executeDispatch_TransformDialog() @@ -353,7 +357,7 @@ void ShapeController::executeDispatch_TransformDialog() if ( pSelectedObj && pSelectedObj->GetObjIdentifier() == SdrObjKind::Caption ) { // item set for caption - SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() ); + SfxItemSet aAttr(pDrawViewWrapper->GetModel().GetItemPool()); pDrawViewWrapper->GetAttributes( aAttr ); // item set for position and size SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() ); @@ -402,17 +406,23 @@ void ShapeController::executeDispatch_ObjectTitleDescription() OUString aTitle( pSelectedObj->GetTitle() ); OUString aDescription( pSelectedObj->GetDescription() ); + bool isDecorative(pSelectedObj->IsDecorative()); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); weld::Window* pChartWindow(m_pChartController->GetChartFrame()); - ScopedVclPtr< AbstractSvxObjectTitleDescDialog > pDlg( - pFact->CreateSvxObjectTitleDescDialog(pChartWindow, aTitle, aDescription)); - if ( pDlg->Execute() == RET_OK ) - { - pDlg->GetTitle( aTitle ); - pDlg->GetDescription( aDescription ); - pSelectedObj->SetTitle( aTitle ); - pSelectedObj->SetDescription( aDescription ); - } + VclPtr< AbstractSvxObjectTitleDescDialog > pDlg( + pFact->CreateSvxObjectTitleDescDialog(pChartWindow, aTitle, aDescription, isDecorative)); + pDlg->StartExecuteAsync( + [pDlg, pSelectedObj] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + pSelectedObj->SetTitle( pDlg->GetTitle() ); + pSelectedObj->SetDescription( pDlg->GetDescription() ); + pSelectedObj->SetDecorative(pDlg->IsDecorative()); + } + pDlg->disposeOnce(); + } + ); } void ShapeController::executeDispatch_RenameObject() @@ -429,23 +439,28 @@ void ShapeController::executeDispatch_RenameObject() if ( !pSelectedObj ) return; - OUString aName = pSelectedObj->GetName(); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); weld::Window* pChartWindow(m_pChartController->GetChartFrame()); - ScopedVclPtr< AbstractSvxObjectNameDialog > pDlg( - pFact->CreateSvxObjectNameDialog(pChartWindow, aName)); + VclPtr< AbstractSvxObjectNameDialog > pDlg( + pFact->CreateSvxObjectNameDialog(pChartWindow, pSelectedObj->GetName())); pDlg->SetCheckNameHdl( LINK( this, ShapeController, CheckNameHdl ) ); - if ( pDlg->Execute() == RET_OK ) - { - pDlg->GetName(aName); - if (pSelectedObj->GetName() == aName) + pDlg->StartExecuteAsync( + [pDlg, pSelectedObj] (sal_Int32 nResult)->void { - pSelectedObj->SetName( aName ); + if (nResult == RET_OK) + { + OUString aName = pDlg->GetName(); + if (pSelectedObj->GetName() != aName) + { + pSelectedObj->SetName( aName ); + } + } + pDlg->disposeOnce(); } - } + ); } -void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) +void ShapeController::executeDispatch_ChangeZOrder( ChartCommandID nId ) { SolarMutexGuard aGuard; DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : nullptr ); @@ -454,7 +469,7 @@ void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) switch ( nId ) { - case COMMAND_ID_BRING_TO_FRONT: + case ChartCommandID::ShapeBringToFront: { if ( isForwardPossible() ) { @@ -462,7 +477,7 @@ void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) } } break; - case COMMAND_ID_FORWARD: + case ChartCommandID::ShapeForward: { if ( isForwardPossible() ) { @@ -470,7 +485,7 @@ void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) } } break; - case COMMAND_ID_BACKWARD: + case ChartCommandID::ShapeBackward: { if ( isBackwardPossible() ) { @@ -478,7 +493,7 @@ void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) } } break; - case COMMAND_ID_SEND_TO_BACK: + case ChartCommandID::ShapeSendToBack: { if ( isBackwardPossible() ) { @@ -505,7 +520,7 @@ void ShapeController::executeDispatch_FontDialog() DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); if ( pChartWindow && pDrawModelWrapper && pDrawViewWrapper ) { - SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() ); + SfxItemSet aAttr(pDrawViewWrapper->GetModel().GetItemPool()); pDrawViewWrapper->GetAttributes( aAttr ); ViewElementListProvider aViewElementListProvider( pDrawModelWrapper ); ShapeFontDialog aDlg(pChartWindow, &aAttr, &aViewElementListProvider); @@ -528,7 +543,7 @@ void ShapeController::executeDispatch_ParagraphDialog() if ( !(pChartWindow && pDrawViewWrapper) ) return; - SfxItemPool& rPool = pDrawViewWrapper->GetModel()->GetItemPool(); + SfxItemPool& rPool = pDrawViewWrapper->GetModel().GetItemPool(); SfxItemSet aAttr( rPool ); pDrawViewWrapper->GetAttributes( aAttr ); diff --git a/chart2/source/controller/main/ShapeController.hxx b/chart2/source/controller/main/ShapeController.hxx index 3d65c49e504c..cdd8002ce2d8 100644 --- a/chart2/source/controller/main/ShapeController.hxx +++ b/chart2/source/controller/main/ShapeController.hxx @@ -41,7 +41,7 @@ public: protected: // WeakComponentImplHelperBase - virtual void SAL_CALL disposing() override; + virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; // XEventListener virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; @@ -64,7 +64,7 @@ private: void executeDispatch_TransformDialog(); void executeDispatch_ObjectTitleDescription(); void executeDispatch_RenameObject(); - void executeDispatch_ChangeZOrder( sal_uInt16 nId ); + void executeDispatch_ChangeZOrder( ChartCommandID nId ); void executeDispatch_FontDialog(); void executeDispatch_ParagraphDialog(); diff --git a/chart2/source/controller/main/StatusBarCommandDispatch.cxx b/chart2/source/controller/main/StatusBarCommandDispatch.cxx index 1b867cb562f8..e3c1f038b0ac 100644 --- a/chart2/source/controller/main/StatusBarCommandDispatch.cxx +++ b/chart2/source/controller/main/StatusBarCommandDispatch.cxx @@ -19,10 +19,9 @@ #include "StatusBarCommandDispatch.hxx" #include <ObjectNameProvider.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/util/XModifiable.hpp> #include <ChartModel.hxx> +#include <utility> using namespace ::com::sun::star; @@ -34,10 +33,10 @@ namespace chart StatusBarCommandDispatch::StatusBarCommandDispatch( const Reference< uno::XComponentContext > & xContext, - const rtl::Reference<::chart::ChartModel> & xModel, + rtl::Reference<::chart::ChartModel> xModel, const Reference< view::XSelectionSupplier > & xSelSupp ) : impl::StatusBarCommandDispatch_Base( xContext ), - m_xChartModel( xModel ), + m_xChartModel(std::move( xModel )), m_xSelectionSupplier( xSelSupp ), m_bIsModified( false ) {} @@ -66,7 +65,7 @@ void StatusBarCommandDispatch::fireStatusEvent( bool bFireContext( bFireAll || rURL == ".uno:Context" ); bool bFireModified( bFireAll || rURL == ".uno:ModifiedStatus" ); - if( bFireContext ) + if( bFireContext && m_xChartModel.is()) { uno::Any aArg; aArg <<= ObjectNameProvider::getSelectedObjectText( m_aSelectedOID.getObjectCID(), m_xChartModel ); @@ -91,7 +90,7 @@ void SAL_CALL StatusBarCommandDispatch::dispatch( // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed -void SAL_CALL StatusBarCommandDispatch::disposing() +void StatusBarCommandDispatch::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { m_xChartModel.clear(); m_xSelectionSupplier.clear(); diff --git a/chart2/source/controller/main/StatusBarCommandDispatch.hxx b/chart2/source/controller/main/StatusBarCommandDispatch.hxx index c123475c037f..ae9dcaf4f67a 100644 --- a/chart2/source/controller/main/StatusBarCommandDispatch.hxx +++ b/chart2/source/controller/main/StatusBarCommandDispatch.hxx @@ -49,7 +49,7 @@ class StatusBarCommandDispatch : public impl::StatusBarCommandDispatch_Base public: explicit StatusBarCommandDispatch( const css::uno::Reference< css::uno::XComponentContext > & xContext, - const rtl::Reference<::chart::ChartModel> & xModel, + rtl::Reference<::chart::ChartModel> xModel, const css::uno::Reference< css::view::XSelectionSupplier > & xSelSupp ); virtual ~StatusBarCommandDispatch() override; @@ -64,7 +64,7 @@ protected: // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed - virtual void SAL_CALL disposing() override; + virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; // ____ XModifyListener (override from CommandDispatch) ____ virtual void SAL_CALL modified( diff --git a/chart2/source/controller/main/UndoActions.cxx b/chart2/source/controller/main/UndoActions.cxx index 6d043137d464..a3c899253295 100644 --- a/chart2/source/controller/main/UndoActions.cxx +++ b/chart2/source/controller/main/UndoActions.cxx @@ -26,19 +26,18 @@ #include <svx/svdundo.hxx> #include <memory> +#include <utility> using namespace ::com::sun::star; namespace chart::impl { - using ::com::sun::star::uno::Reference; - using ::com::sun::star::frame::XModel; using ::com::sun::star::lang::DisposedException; -UndoElement::UndoElement( const OUString& i_actionString, const rtl::Reference<::chart::ChartModel>& i_documentModel, const std::shared_ptr< ChartModelClone >& i_modelClone ) - :m_sActionString( i_actionString ) - ,m_xDocumentModel( i_documentModel ) - ,m_pModelClone( i_modelClone ) +UndoElement::UndoElement( OUString i_actionString, rtl::Reference<::chart::ChartModel> i_documentModel, std::shared_ptr< ChartModelClone > i_modelClone ) + :m_sActionString(std::move( i_actionString )) + ,m_xDocumentModel(std::move( i_documentModel )) + ,m_pModelClone(std::move( i_modelClone )) { } @@ -66,7 +65,7 @@ void UndoElement::impl_toggleModelState() // apply the previous snapshot to our model m_pModelClone->applyToModel( m_xDocumentModel ); // remember the new snapshot, for the next toggle - m_pModelClone = pNewClone; + m_pModelClone = std::move(pNewClone); } void SAL_CALL UndoElement::undo( ) diff --git a/chart2/source/controller/main/UndoActions.hxx b/chart2/source/controller/main/UndoActions.hxx index 3291a72be649..a86479e167ce 100644 --- a/chart2/source/controller/main/UndoActions.hxx +++ b/chart2/source/controller/main/UndoActions.hxx @@ -53,9 +53,9 @@ public: is the cloned model from before the changes, which the Undo action represents, have been applied. Upon <member>invoking</member>, the clone model is applied to the document model. */ - UndoElement( const OUString & i_actionString, - const rtl::Reference<::chart::ChartModel>& i_documentModel, - const std::shared_ptr< ChartModelClone >& i_modelClone + UndoElement( OUString i_actionString, + rtl::Reference<::chart::ChartModel> i_documentModel, + std::shared_ptr< ChartModelClone > i_modelClone ); virtual ~UndoElement() override; diff --git a/chart2/source/controller/main/UndoCommandDispatch.cxx b/chart2/source/controller/main/UndoCommandDispatch.cxx index 3a05412d1670..c90fac3f4045 100644 --- a/chart2/source/controller/main/UndoCommandDispatch.cxx +++ b/chart2/source/controller/main/UndoCommandDispatch.cxx @@ -20,13 +20,12 @@ #include "UndoCommandDispatch.hxx" #include <ChartModel.hxx> -#include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/document/UndoFailedException.hpp> -#include <com/sun/star/document/XUndoManagerSupplier.hpp> +#include <utility> #include <vcl/svapp.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <svtools/strings.hrc> #include <svtools/svtresid.hxx> @@ -41,9 +40,9 @@ namespace chart UndoCommandDispatch::UndoCommandDispatch( const Reference< uno::XComponentContext > & xContext, - const rtl::Reference<::chart::ChartModel> & xModel ) : + rtl::Reference<::chart::ChartModel> xModel ) : CommandDispatch( xContext ), - m_xModel( xModel ) + m_xModel(std::move( xModel )) { m_xUndoManager.set( m_xModel->getUndoManager(), uno::UNO_SET_THROW ); } @@ -122,7 +121,7 @@ void SAL_CALL UndoCommandDispatch::dispatch( // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed -void SAL_CALL UndoCommandDispatch::disposing() +void UndoCommandDispatch::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { Reference< util::XModifyBroadcaster > xBroadcaster( m_xUndoManager, uno::UNO_QUERY ); OSL_ENSURE( xBroadcaster.is(), "UndoCommandDispatch::initialize: missing modification broadcaster interface!" ); diff --git a/chart2/source/controller/main/UndoCommandDispatch.hxx b/chart2/source/controller/main/UndoCommandDispatch.hxx index 7be241a5fbc3..f872387c761b 100644 --- a/chart2/source/controller/main/UndoCommandDispatch.hxx +++ b/chart2/source/controller/main/UndoCommandDispatch.hxx @@ -35,7 +35,7 @@ class UndoCommandDispatch : public CommandDispatch public: explicit UndoCommandDispatch( const css::uno::Reference< css::uno::XComponentContext > & xContext, - const rtl::Reference<::chart::ChartModel> & xModel ); + rtl::Reference<::chart::ChartModel> xModel ); virtual ~UndoCommandDispatch() override; // late initialisation, especially for adding as listener @@ -49,7 +49,7 @@ protected: // ____ WeakComponentImplHelperBase ____ /// is called when this is disposed - virtual void SAL_CALL disposing() override; + virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; // ____ XEventListener (base of XModifyListener) ____ virtual void SAL_CALL disposing( diff --git a/chart2/source/controller/main/UndoGuard.cxx b/chart2/source/controller/main/UndoGuard.cxx index 420347eb40d4..4e870c36d07d 100644 --- a/chart2/source/controller/main/UndoGuard.cxx +++ b/chart2/source/controller/main/UndoGuard.cxx @@ -23,9 +23,9 @@ #include <ChartModel.hxx> #include <com/sun/star/document/XUndoManager.hpp> -#include <com/sun/star/frame/XModel.hpp> +#include <utility> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -34,10 +34,10 @@ using ::com::sun::star::uno::Reference; namespace chart { -UndoGuard::UndoGuard( const OUString& i_undoString, const uno::Reference< document::XUndoManager > & i_undoManager, +UndoGuard::UndoGuard( OUString i_undoString, const uno::Reference< document::XUndoManager > & i_undoManager, const ModelFacet i_facet ) :m_xUndoManager( i_undoManager ) - ,m_aUndoString( i_undoString ) + ,m_aUndoString(std::move( i_undoString )) ,m_bActionPosted( false ) { m_xChartModel = dynamic_cast<::chart::ChartModel*>(i_undoManager->getParent().get()); diff --git a/chart2/source/controller/main/UndoGuard.hxx b/chart2/source/controller/main/UndoGuard.hxx index 9808da8bc1ad..90443a247af4 100644 --- a/chart2/source/controller/main/UndoGuard.hxx +++ b/chart2/source/controller/main/UndoGuard.hxx @@ -37,7 +37,7 @@ class UndoGuard { public: explicit UndoGuard( - const OUString& i_undoMessage, + OUString i_undoMessage, const css::uno::Reference< css::document::XUndoManager > & i_undoManager, const ModelFacet i_facet = E_MODEL ); diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.cxx b/chart2/source/controller/sidebar/ChartAreaPanel.cxx index f13f2390debc..cb660661c140 100644 --- a/chart2/source/controller/sidebar/ChartAreaPanel.cxx +++ b/chart2/source/controller/sidebar/ChartAreaPanel.cxx @@ -19,7 +19,6 @@ #include <PropertyHelper.hxx> #include <chartview/DrawModelWrapper.hxx> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/chart2/XDiagram.hpp> #include <sfx2/weldutils.hxx> @@ -409,6 +408,12 @@ void ChartAreaPanel::setFillStyleAndBitmap(const XFillStyleItem* pStyleItem, xPropSet->setPropertyValue("FillBitmapName", aBitmap); } +void ChartAreaPanel::setFillUseBackground(const XFillStyleItem* pStyleItem, + const XFillUseSlideBackgroundItem& /*rItem*/) +{ + setFillStyle(*pStyleItem); +} + void ChartAreaPanel::updateData() { if (!mbUpdate || !mbModelValid) @@ -507,7 +512,7 @@ void ChartAreaPanel::selectionChanged(bool bCorrectType) updateData(); } -void ChartAreaPanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartAreaPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.hxx b/chart2/source/controller/sidebar/ChartAreaPanel.hxx index 132513412518..e1edd3d832e8 100644 --- a/chart2/source/controller/sidebar/ChartAreaPanel.hxx +++ b/chart2/source/controller/sidebar/ChartAreaPanel.hxx @@ -57,6 +57,7 @@ public: virtual void setFillStyleAndGradient(const XFillStyleItem* pStyleItem, const XFillGradientItem& rGradientItem) override; virtual void setFillStyleAndHatch(const XFillStyleItem* pStyleItem, const XFillHatchItem& rHatchItem) override; virtual void setFillStyleAndBitmap(const XFillStyleItem* pStyleItem, const XFillBitmapItem& rBitmapItem) override; + virtual void setFillUseBackground(const XFillStyleItem* pStyleItem, const XFillUseSlideBackgroundItem& rItem) override; virtual void updateData() override; virtual void modelInvalid() override; @@ -72,7 +73,7 @@ private: rtl::Reference<ChartSidebarSelectionListener> mxSelectionListener; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); bool mbUpdate; bool mbModelValid; diff --git a/chart2/source/controller/sidebar/ChartAxisPanel.cxx b/chart2/source/controller/sidebar/ChartAxisPanel.cxx index 2b6bc5535b27..48a4620684b3 100644 --- a/chart2/source/controller/sidebar/ChartAxisPanel.cxx +++ b/chart2/source/controller/sidebar/ChartAxisPanel.cxx @@ -17,11 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/chart/ChartAxisLabelPosition.hpp> #include <com/sun/star/chart2/AxisOrientation.hpp> -#include <com/sun/star/chart2/XAxis.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <vcl/svapp.hxx> #include <sal/log.hxx> @@ -29,6 +26,7 @@ #include "ChartAxisPanel.hxx" #include <ChartController.hxx> #include <ChartModel.hxx> +#include <Axis.hxx> using namespace css; using namespace css::uno; @@ -38,10 +36,9 @@ namespace chart::sidebar { namespace { bool isLabelShown(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return false; @@ -56,10 +53,9 @@ bool isLabelShown(const rtl::Reference<::chart::ChartModel>& xModel, } void setLabelShown(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, bool bVisible) + std::u16string_view rCID, bool bVisible) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return; @@ -81,10 +77,9 @@ AxisLabelPosMap const aLabelPosMap[] = { }; sal_Int32 getLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return 0; @@ -105,10 +100,9 @@ sal_Int32 getLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel, } void setLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, sal_Int32 nPos) + std::u16string_view rCID, sal_Int32 nPos) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return; @@ -124,9 +118,9 @@ void setLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel, } bool isReverse(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::chart2::XAxis > xAxis = + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) @@ -138,9 +132,9 @@ bool isReverse(const rtl::Reference<::chart::ChartModel>& xModel, } void setReverse(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, bool bReverse) + std::u16string_view rCID, bool bReverse) { - css::uno::Reference< css::chart2::XAxis > xAxis = + rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) @@ -176,10 +170,10 @@ OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel) } void setAxisRotation(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, double nVal) + std::u16string_view rCID, double nVal) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = + ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return; @@ -188,10 +182,10 @@ void setAxisRotation(const rtl::Reference<::chart::ChartModel>& xModel, } double getAxisRotation(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::beans::XPropertySet > xAxis( - ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< ::chart::Axis > xAxis = + ObjectIdentifier::getAxisForCID(rCID, xModel); if (!xAxis.is()) return 0; @@ -306,7 +300,7 @@ void ChartAxisPanel::modelInvalid() mbModelValid = false; } -void ChartAxisPanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartAxisPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { diff --git a/chart2/source/controller/sidebar/ChartAxisPanel.hxx b/chart2/source/controller/sidebar/ChartAxisPanel.hxx index 32f3c0b3331e..e5ed4b5ebcc6 100644 --- a/chart2/source/controller/sidebar/ChartAxisPanel.hxx +++ b/chart2/source/controller/sidebar/ChartAxisPanel.hxx @@ -81,7 +81,7 @@ private: bool mbModelValid; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); DECL_LINK(CheckBoxHdl, weld::Toggleable&, void); DECL_LINK(ListBoxHdl, weld::ComboBox&, void); diff --git a/chart2/source/controller/sidebar/ChartColorWrapper.cxx b/chart2/source/controller/sidebar/ChartColorWrapper.cxx index ed94c0b0fa45..f5c79133434c 100644 --- a/chart2/source/controller/sidebar/ChartColorWrapper.cxx +++ b/chart2/source/controller/sidebar/ChartColorWrapper.cxx @@ -30,6 +30,7 @@ #include <comphelper/lok.hxx> #include <sal/log.hxx> #include <sfx2/viewsh.hxx> +#include <utility> #include <LibreOfficeKit/LibreOfficeKitEnums.h> namespace chart::sidebar { @@ -38,6 +39,9 @@ namespace { OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel) { + if (!xModel.is()) + return OUString(); + css::uno::Reference<css::frame::XController> xController(xModel->getCurrentController()); css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(xController, css::uno::UNO_QUERY); if (!xSelectionSupplier.is()) @@ -77,16 +81,16 @@ css::uno::Reference<css::beans::XPropertySet> getPropSet( } ChartColorWrapper::ChartColorWrapper( - rtl::Reference<::chart::ChartModel> const & xModel, + rtl::Reference<::chart::ChartModel> xModel, SvxColorToolBoxControl* pControl, - const OUString& rName): - mxModel(xModel), + OUString aName): + mxModel(std::move(xModel)), mpControl(pControl), - maPropertyName(rName) + maPropertyName(std::move(aName)) { } -void ChartColorWrapper::operator()([[maybe_unused]] const OUString& , const svx::NamedThemedColor& rColor) +void ChartColorWrapper::operator()([[maybe_unused]] const OUString& , const NamedColor& rColor) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getPropSet(mxModel); @@ -96,7 +100,7 @@ void ChartColorWrapper::operator()([[maybe_unused]] const OUString& , const svx: return; } - xPropSet->setPropertyValue(maPropertyName, css::uno::makeAny(rColor.m_aColor)); + xPropSet->setPropertyValue(maPropertyName, css::uno::Any(rColor.m_aColor)); } void ChartColorWrapper::updateModel(const rtl::Reference<::chart::ChartModel>& xModel) @@ -106,7 +110,7 @@ void ChartColorWrapper::updateModel(const rtl::Reference<::chart::ChartModel>& x void ChartColorWrapper::updateData() { - static constexpr OUStringLiteral aLineColor = u"LineColor"; + static constexpr OUString aLineColor = u"LineColor"_ustr; static const std::u16string_view aCommands[2] = {u".uno:XLineColor", u".uno:FillColor"}; css::uno::Reference<css::beans::XPropertySet> xPropSet = getPropSet(mxModel); @@ -125,18 +129,18 @@ void ChartColorWrapper::updateData() SfxViewShell* pViewShell = SfxViewShell::Current(); if (comphelper::LibreOfficeKit::isActive() && pViewShell && (maPropertyName == aLineColor)) { - std::string sCommand = OUStringToOString(aUrl.Complete, RTL_TEXTENCODING_ASCII_US).getStr(); + OString sCommand = OUStringToOString(aUrl.Complete, RTL_TEXTENCODING_ASCII_US); sal_Int32 nColor = -1; aEvent.State >>= nColor; pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, - (sCommand + "=" + std::to_string(nColor)).c_str()); + sCommand + "=" + OString::number(nColor)); } } ChartLineStyleWrapper::ChartLineStyleWrapper( - rtl::Reference<::chart::ChartModel> const & xModel, + rtl::Reference<::chart::ChartModel> xModel, SvxLineStyleToolBoxControl* pControl) - : mxModel(xModel) + : mxModel(std::move(xModel)) , mpControl(pControl) { } diff --git a/chart2/source/controller/sidebar/ChartColorWrapper.hxx b/chart2/source/controller/sidebar/ChartColorWrapper.hxx index 861f1e1628ea..70b3ce8fa47c 100644 --- a/chart2/source/controller/sidebar/ChartColorWrapper.hxx +++ b/chart2/source/controller/sidebar/ChartColorWrapper.hxx @@ -9,8 +9,9 @@ #pragma once -#include <com/sun/star/uno/Reference.hxx> -#include <svx/Palette.hxx> +#include <ChartModel.hxx> + +#include <sfx2/namedcolor.hxx> #include <rtl/ref.hxx> namespace com::sun::star::frame { class XModel; } @@ -23,11 +24,11 @@ namespace chart::sidebar { class ChartColorWrapper { public: - ChartColorWrapper(rtl::Reference<::chart::ChartModel> const & xModel, + ChartColorWrapper(rtl::Reference<::chart::ChartModel> xModel, SvxColorToolBoxControl* pControl, - const OUString& rPropertyName); + OUString rPropertyName); - void operator()(const OUString& rCommand, const svx::NamedThemedColor& rColor); + void operator()(const OUString& rCommand, const NamedColor& rColor); // ColorSelectFunction signature void updateModel(const rtl::Reference<::chart::ChartModel>& xModel); @@ -46,7 +47,7 @@ private: class ChartLineStyleWrapper { public: - ChartLineStyleWrapper(rtl::Reference<::chart::ChartModel> const & xModel, + ChartLineStyleWrapper(rtl::Reference<::chart::ChartModel> xModel, SvxLineStyleToolBoxControl* pControl); bool operator()(std::u16string_view rCommand, const css::uno::Any& rValue); diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.cxx b/chart2/source/controller/sidebar/ChartElementsPanel.cxx index 572ea7de4bd3..1e5e6e9403fa 100644 --- a/chart2/source/controller/sidebar/ChartElementsPanel.cxx +++ b/chart2/source/controller/sidebar/ChartElementsPanel.cxx @@ -19,8 +19,6 @@ #include <com/sun/star/chart2/LegendPosition.hpp> #include <com/sun/star/chart/ChartLegendExpansion.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> #include <vcl/svapp.hxx> @@ -28,11 +26,11 @@ #include <ChartController.hxx> #include <comphelper/processfactory.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> -#include <ChartModelHelper.hxx> #include <AxisHelper.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> +#include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartModel.hxx> #include <BaseCoordinateSystem.hxx> @@ -75,7 +73,7 @@ bool isLegendVisible(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return false; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if( xLegendProp.is()) { try @@ -112,7 +110,7 @@ bool isLegendOverlay(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return false; - Reference< beans::XPropertySet > xLegendProp(LegendHelper::getLegend(*pModel), uno::UNO_QUERY); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if( xLegendProp.is()) { try @@ -137,7 +135,7 @@ void setLegendOverlay(const css::uno::Reference<css::frame::XModel>& xModel, boo if (!pModel) return; - Reference<beans::XPropertySet> xLegendProp(LegendHelper::getLegend(*pModel), uno::UNO_QUERY); + rtl::Reference<Legend> xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return; @@ -146,19 +144,18 @@ void setLegendOverlay(const css::uno::Reference<css::frame::XModel>& xModel, boo bool isTitleVisible(const rtl::Reference<::chart::ChartModel>& xModel, TitleHelper::eTitleType eTitle) { - css::uno::Reference<css::uno::XInterface> xTitle = TitleHelper::getTitle(eTitle, xModel); + rtl::Reference<Title> xTitle = TitleHelper::getTitle(eTitle, xModel); if (!xTitle.is()) return false; - css::uno::Reference<css::beans::XPropertySet> xPropSet(xTitle, css::uno::UNO_QUERY_THROW); - css::uno::Any aAny = xPropSet->getPropertyValue("Visible"); + css::uno::Any aAny = xTitle->getPropertyValue("Visible"); bool bVisible = aAny.get<bool>(); return bVisible; } bool isGridVisible(const rtl::Reference<::chart::ChartModel>& xModel, GridType eType) { - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel)); + rtl::Reference< Diagram > xDiagram(xModel->getFirstChartDiagram()); if(xDiagram.is()) { sal_Int32 nDimensionIndex = 0; @@ -175,7 +172,7 @@ bool isGridVisible(const rtl::Reference<::chart::ChartModel>& xModel, GridType e void setGridVisible(const rtl::Reference<::chart::ChartModel>& xModel, GridType eType, bool bVisible) { - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel)); + rtl::Reference< Diagram > xDiagram(xModel->getFirstChartDiagram()); if(!xDiagram.is()) return; @@ -195,7 +192,7 @@ void setGridVisible(const rtl::Reference<::chart::ChartModel>& xModel, GridType bool isAxisVisible(const rtl::Reference<::chart::ChartModel>& xModel, AxisType eType) { - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel)); + rtl::Reference< Diagram > xDiagram(xModel->getFirstChartDiagram()); if(xDiagram.is()) { sal_Int32 nDimensionIndex = 0; @@ -214,7 +211,7 @@ bool isAxisVisible(const rtl::Reference<::chart::ChartModel>& xModel, AxisType e void setAxisVisible(const rtl::Reference<::chart::ChartModel>& xModel, AxisType eType, bool bVisible) { - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel)); + rtl::Reference< Diagram > xDiagram(xModel->getFirstChartDiagram()); if(!xDiagram.is()) return; @@ -238,7 +235,7 @@ sal_Int32 getLegendPos(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return -1; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return -1; @@ -265,7 +262,7 @@ void setLegendPos(const css::uno::Reference<css::frame::XModel>& xModel, sal_Int if (!pModel) return; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return; @@ -406,21 +403,21 @@ void ChartElementsPanel::Initialize() namespace { -css::uno::Reference<css::chart2::XChartType> getChartType(const rtl::Reference<ChartModel>& xModel) +rtl::Reference<ChartType> getChartType(const rtl::Reference<ChartModel>& xModel) { rtl::Reference<Diagram > xDiagram = xModel->getFirstChartDiagram(); if (!xDiagram.is()) - return css::uno::Reference<css::chart2::XChartType>(); + return nullptr; const std::vector<rtl::Reference<BaseCoordinateSystem>> & xCooSysSequence(xDiagram->getBaseCoordinateSystems()); if (xCooSysSequence.empty()) - return css::uno::Reference<css::chart2::XChartType>(); + return nullptr; - css::uno::Sequence<css::uno::Reference<css::chart2::XChartType>> xChartTypeSequence(xCooSysSequence[0]->getChartTypes()); + const std::vector<rtl::Reference<ChartType>> & xChartTypeSequence(xCooSysSequence[0]->getChartTypes2()); - if (!xChartTypeSequence.hasElements()) - return css::uno::Reference<css::chart2::XChartType>(); + if (xChartTypeSequence.empty()) + return nullptr; return xChartTypeSequence[0]; } @@ -432,8 +429,10 @@ void ChartElementsPanel::updateData() if (!mbModelValid) return; - rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(mxModel)); - sal_Int32 nDimension = DiagramHelper::getDimension(xDiagram); + rtl::Reference< Diagram > xDiagram(mxModel->getFirstChartDiagram()); + sal_Int32 nDimension = 0; + if (xDiagram) + nDimension = xDiagram->getDimension(); SolarMutexGuard aGuard; mxCBLegend->set_active(isLegendVisible(mxModel)); @@ -556,7 +555,7 @@ void ChartElementsPanel::modelInvalid() mbModelValid = false; } -void ChartElementsPanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartElementsPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { @@ -635,7 +634,8 @@ IMPL_LINK(ChartElementsPanel, EditHdl, weld::Entry&, rEdit, void) // set it OUString aText(rEdit.get_text()); - TitleHelper::setCompleteString(aText, TitleHelper::getTitle(aTitleType, mxModel), comphelper::getProcessComponentContext()); + TitleHelper::setCompleteString(aText, TitleHelper::getTitle(aTitleType, mxModel), + comphelper::getProcessComponentContext(), nullptr, true); } IMPL_LINK_NOARG(ChartElementsPanel, LegendPosHdl, weld::ComboBox&, void) diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.hxx b/chart2/source/controller/sidebar/ChartElementsPanel.hxx index 07c7ee19c3db..2e0dee28b68f 100644 --- a/chart2/source/controller/sidebar/ChartElementsPanel.hxx +++ b/chart2/source/controller/sidebar/ChartElementsPanel.hxx @@ -102,7 +102,7 @@ private: OUString maTextSubTitle; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); void setTitleVisible(TitleHelper::eTitleType eTitle, bool bVisible); diff --git a/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx b/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx index 0db870b8bcc5..c9430791b3c9 100644 --- a/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx +++ b/chart2/source/controller/sidebar/ChartErrorBarPanel.cxx @@ -18,7 +18,6 @@ */ #include <com/sun/star/chart/ErrorBarStyle.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/beans/XPropertySet.hpp> #include "ChartErrorBarPanel.hxx" @@ -42,13 +41,13 @@ enum class ErrorBarDirection }; css::uno::Reference<css::beans::XPropertySet> getErrorBarPropSet( - const rtl::Reference<::chart::ChartModel>& xModel, const OUString& rCID) + const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID) { return ObjectIdentifier::getObjectPropertySet(rCID, xModel); } bool showPositiveError(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -67,7 +66,7 @@ bool showPositiveError(const rtl::Reference<::chart::ChartModel>& xModel, } bool showNegativeError(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -86,7 +85,7 @@ bool showNegativeError(const rtl::Reference<::chart::ChartModel>& xModel, } void setShowPositiveError(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, bool bShow) + std::u16string_view rCID, bool bShow) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -98,7 +97,7 @@ void setShowPositiveError(const rtl::Reference<::chart::ChartModel>& xModel, } void setShowNegativeError(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, bool bShow) + std::u16string_view rCID, bool bShow) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -126,7 +125,7 @@ ErrorBarTypeMap const aErrorBarType[] = { }; sal_Int32 getTypePos(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -152,7 +151,7 @@ sal_Int32 getTypePos(const rtl::Reference<::chart::ChartModel>& xModel, } void setTypePos(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, sal_Int32 nPos) + std::u16string_view rCID, sal_Int32 nPos) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -171,7 +170,7 @@ void setTypePos(const rtl::Reference<::chart::ChartModel>& xModel, } double getValue(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, ErrorBarDirection eDir) + std::u16string_view rCID, ErrorBarDirection eDir) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -195,7 +194,7 @@ double getValue(const rtl::Reference<::chart::ChartModel>& xModel, } void setValue(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, double nVal, ErrorBarDirection eDir) + std::u16string_view rCID, double nVal, ErrorBarDirection eDir) { css::uno::Reference<css::beans::XPropertySet> xPropSet = getErrorBarPropSet(xModel, rCID); @@ -370,7 +369,7 @@ void ChartErrorBarPanel::modelInvalid() mbModelValid = false; } -void ChartErrorBarPanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartErrorBarPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { diff --git a/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx b/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx index 1613006b7ea5..92f7afb0ad53 100644 --- a/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx +++ b/chart2/source/controller/sidebar/ChartErrorBarPanel.hxx @@ -79,7 +79,7 @@ private: bool mbModelValid; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); DECL_LINK(RadioBtnHdl, weld::Toggleable&, void); DECL_LINK(ListBoxHdl, weld::ComboBox&, void); diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx index 94658d26ed2d..46cec9695f4d 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.cxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -13,7 +13,6 @@ #include <ChartModel.hxx> #include <svx/xlnwtit.hxx> -#include <svx/xlinjoit.hxx> #include <svx/xlntrit.hxx> #include <svx/linectrl.hxx> @@ -22,7 +21,6 @@ #include <vcl/svapp.hxx> #include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/chart2/XDiagram.hpp> #include <comphelper/lok.hxx> @@ -56,10 +54,7 @@ OUString getCID(const rtl::Reference<::chart::ChartModel>& xModel) css::uno::Any aAny = xSelectionSupplier->getSelection(); if (!aAny.hasValue()) - { - xSelectionSupplier->select(css::uno::makeAny(OUString("CID/Page="))); - aAny = xSelectionSupplier->getSelection(); - } + return OUString(); OUString aCID; aAny >>= aCID; @@ -200,7 +195,7 @@ void ChartLinePanel::selectionChanged(bool bCorrectType) updateData(); } -void ChartLinePanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartLinePanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { @@ -236,23 +231,6 @@ void ChartLinePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel) doUpdateModel(pModel); } -void ChartLinePanel::setLineJoint(const XLineJointItem* pItem) -{ - css::uno::Reference<css::beans::XPropertySet> xPropSet = - getPropSet(mxModel); - - if (!xPropSet.is()) - return; - - PreventUpdate aPreventUpdate(mbUpdate); - if (pItem) - xPropSet->setPropertyValue("LineJoint", css::uno::Any(pItem->GetValue())); -} - -void ChartLinePanel::setLineCap(const XLineCapItem* /*pItem*/) -{ -} - void ChartLinePanel::setLineTransparency(const XLineTransparenceItem& rItem) { css::uno::Reference<css::beans::XPropertySet> xPropSet = @@ -285,7 +263,7 @@ void ChartLinePanel::updateLineWidth(bool bDisabled, bool bSetOrDefault, const S if (comphelper::LibreOfficeKit::isActive() && pViewShell) { pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_STATE_CHANGED, - (".uno:LineWidth=" + std::to_string(mnWidthCoreValue)).c_str()); + ".uno:LineWidth=" + OString::number(mnWidthCoreValue)); } } diff --git a/chart2/source/controller/sidebar/ChartLinePanel.hxx b/chart2/source/controller/sidebar/ChartLinePanel.hxx index 10bfd5a4cf0d..ca3d8be14244 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.hxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.hxx @@ -16,10 +16,8 @@ #include "ChartSidebarSelectionListener.hxx" #include "ChartColorWrapper.hxx" -class XLineCapItem; class XLineDashItem; class XLineEndItem; -class XLineJointItem; class XLineStartItem; class XLineStyleItem; class XLineTransparenceItem; @@ -62,8 +60,6 @@ public: protected: virtual void setLineTransparency(const XLineTransparenceItem& rItem) override; - virtual void setLineJoint(const XLineJointItem* pItem) override; - virtual void setLineCap(const XLineCapItem* pItem) override; virtual void updateLineWidth(bool bDisabled, bool bSetOrDefault, const SfxPoolItem* pItem) override; @@ -74,7 +70,7 @@ private: rtl::Reference<ChartSidebarSelectionListener> mxSelectionListener; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); bool mbUpdate; bool mbModelValid; diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx index 27878f8926cc..9e94ac005ecb 100644 --- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx +++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx @@ -18,14 +18,7 @@ */ #include <com/sun/star/chart/ErrorBarStyle.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/chart/DataLabelPlacement.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XDataSeries.hpp> -#include <com/sun/star/chart2/XChartTypeContainer.hpp> -#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> #include <vcl/svapp.hxx> #include <sal/log.hxx> @@ -33,10 +26,12 @@ #include "ChartSeriesPanel.hxx" #include <ChartController.hxx> #include <ChartModel.hxx> +#include <ChartType.hxx> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> #include <RegressionCurveHelper.hxx> +#include <RegressionCurveModel.hxx> #include <StatisticsHelper.hxx> #include <BaseCoordinateSystem.hxx> @@ -49,9 +44,9 @@ namespace chart::sidebar { namespace { -bool isDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, const OUString& rCID) +bool isDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) @@ -60,9 +55,9 @@ bool isDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, const return DataSeriesHelper::hasDataLabelsAtSeries(xSeries); } -void setDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, const OUString& rCID, bool bVisible) +void setDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID, bool bVisible) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) @@ -90,10 +85,10 @@ LabelPlacementMap const aLabelPlacementMap[] = { }; sal_Int32 getDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::beans::XPropertySet > xSeries( - ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries = + ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) return 0; @@ -115,10 +110,10 @@ sal_Int32 getDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xMode } void setDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, sal_Int32 nPos) + std::u16string_view rCID, sal_Int32 nPos) { - css::uno::Reference< css::beans::XPropertySet > xSeries( - ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xSeries = + ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) return; @@ -137,22 +132,22 @@ void setDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xModel, } bool isTrendlineVisible(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID) + std::u16string_view rCID) { - css::uno::Reference< css::chart2::XRegressionCurveContainer > xRegressionCurveContainer( - ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegressionCurveContainer = + ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xRegressionCurveContainer.is()) return false; - return xRegressionCurveContainer->getRegressionCurves().hasElements(); + return !xRegressionCurveContainer->getRegressionCurves2().empty(); } void setTrendlineVisible(const rtl::Reference<::chart::ChartModel>& - xModel, const OUString& rCID, bool bVisible) + xModel, std::u16string_view rCID, bool bVisible) { - css::uno::Reference< css::chart2::XRegressionCurveContainer > xRegressionCurveContainer( - ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY ); + rtl::Reference< DataSeries > xRegressionCurveContainer = + ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xRegressionCurveContainer.is()) return; @@ -170,9 +165,9 @@ void setTrendlineVisible(const rtl::Reference<::chart::ChartModel>& } bool isErrorBarVisible(const rtl::Reference<::chart::ChartModel>& xModel, - const OUString& rCID, bool bYError) + std::u16string_view rCID, bool bYError) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) @@ -182,9 +177,9 @@ bool isErrorBarVisible(const rtl::Reference<::chart::ChartModel>& xModel, } void setErrorBarVisible(const rtl::Reference<::chart::ChartModel>& - xModel, const OUString& rCID, bool bYError, bool bVisible) + xModel, std::u16string_view rCID, bool bYError, bool bVisible) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) @@ -203,9 +198,9 @@ void setErrorBarVisible(const rtl::Reference<::chart::ChartModel>& } bool isPrimaryAxis(const rtl::Reference<::chart::ChartModel>& - xModel, const OUString& rCID) + xModel, std::u16string_view rCID) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) @@ -215,36 +210,35 @@ bool isPrimaryAxis(const rtl::Reference<::chart::ChartModel>& } void setAttachedAxisType(const rtl::Reference<::chart::ChartModel>& - xModel, const OUString& rCID, bool bPrimary) + xModel, std::u16string_view rCID, bool bPrimary) { - const uno::Reference<chart2::XDataSeries>& xDataSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); + const rtl::Reference<DataSeries> xDataSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xDataSeries.is()) return; - uno::Reference<chart2::XDiagram> xDiagram = xModel->getFirstDiagram(); - DiagramHelper::attachSeriesToAxis(bPrimary, xDataSeries, xDiagram, comphelper::getProcessComponentContext()); + rtl::Reference<Diagram> xDiagram = xModel->getFirstChartDiagram(); + xDiagram->attachSeriesToAxis(bPrimary, xDataSeries, comphelper::getProcessComponentContext()); } -css::uno::Reference<css::chart2::XChartType> getChartType( +rtl::Reference<ChartType> getChartType( const rtl::Reference<::chart::ChartModel>& xModel) { rtl::Reference<Diagram> xDiagram = xModel->getFirstChartDiagram(); - const std::vector< rtl::Reference< BaseCoordinateSystem > > xCooSysSequence( xDiagram->getBaseCoordinateSystems()); - css::uno::Sequence< css::uno::Reference< css::chart2::XChartType > > xChartTypeSequence( xCooSysSequence[0]->getChartTypes() ); - return xChartTypeSequence[0]; + const std::vector< rtl::Reference< BaseCoordinateSystem > > & xCooSysSequence( xDiagram->getBaseCoordinateSystems()); + return xCooSysSequence[0]->getChartTypes2()[0]; } -OUString getSeriesLabel(const rtl::Reference<::chart::ChartModel>& xModel, const OUString& rCID) +OUString getSeriesLabel(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID) { - css::uno::Reference< css::chart2::XDataSeries > xSeries = + rtl::Reference< DataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel); if (!xSeries.is()) return OUString(); - css::uno::Reference<css::chart2::XChartType> xChartType = getChartType(xModel); - return DataSeriesHelper::getDataSeriesLabel(xSeries, xChartType->getRoleOfSequenceForSeriesLabel()); + rtl::Reference<ChartType> xChartType = getChartType(xModel); + return xSeries->getLabelForRole(xChartType->getRoleOfSequenceForSeriesLabel()); } OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel) @@ -405,7 +399,7 @@ void ChartSeriesPanel::modelInvalid() mbModelValid = false; } -void ChartSeriesPanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartSeriesPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx index b457667ec257..5b69cc3b959f 100644 --- a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx +++ b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx @@ -98,7 +98,7 @@ private: bool mbModelValid; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); DECL_LINK(CheckBoxHdl, weld::Toggleable&, void); DECL_LINK(RadioBtnHdl, weld::Toggleable&, void); diff --git a/chart2/source/controller/sidebar/ChartTypePanel.cxx b/chart2/source/controller/sidebar/ChartTypePanel.cxx index d1d73fb3bd10..40423aa62ea1 100644 --- a/chart2/source/controller/sidebar/ChartTypePanel.cxx +++ b/chart2/source/controller/sidebar/ChartTypePanel.cxx @@ -21,22 +21,16 @@ #include <TimerTriggeredControllerLock.hxx> #include <ChartController.hxx> -#include <ChartModelHelper.hxx> #include <ChartModel.hxx> #include <ChartResourceGroups.hxx> #include <ChartTypeDialogController.hxx> #include <ChartTypeManager.hxx> #include <ChartTypeTemplate.hxx> -#include <DiagramHelper.hxx> #include <Diagram.hxx> #include <unonames.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XDiagram.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> - #include <svtools/valueset.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace css; using namespace css::uno; @@ -161,9 +155,10 @@ void ChartTypePanel::Initialize() if (!m_xChartModel.is()) return; rtl::Reference<::chart::ChartTypeManager> xChartTypeManager = m_xChartModel->getTypeManager(); - rtl::Reference<Diagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel); - DiagramHelper::tTemplateWithServiceName aTemplate - = DiagramHelper::getTemplateForDiagram(xDiagram, xChartTypeManager); + rtl::Reference<Diagram> xDiagram = m_xChartModel->getFirstChartDiagram(); + Diagram::tTemplateWithServiceName aTemplate; + if (xDiagram) + aTemplate = xDiagram->getTemplate(xChartTypeManager); OUString aServiceName(aTemplate.sServiceName); bool bFound = false; @@ -185,7 +180,7 @@ void ChartTypePanel::Initialize() m_pCurrentMainType = getSelectedMainType(); //set ThreeDLookScheme - aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram); + aParameter.eThreeDLookScheme = xDiagram->detectScheme(); if (!aParameter.b3DLook && aParameter.eThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Realistic) aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Realistic; @@ -225,12 +220,13 @@ void ChartTypePanel::updateData() if (!m_xChartModel.is()) return; rtl::Reference<::chart::ChartTypeManager> xChartTypeManager = m_xChartModel->getTypeManager(); - rtl::Reference<Diagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel); - DiagramHelper::tTemplateWithServiceName aTemplate - = DiagramHelper::getTemplateForDiagram(xDiagram, xChartTypeManager); + rtl::Reference<Diagram> xDiagram = m_xChartModel->getFirstChartDiagram(); + Diagram::tTemplateWithServiceName aTemplate; + if (xDiagram) + aTemplate = xDiagram->getTemplate(xChartTypeManager); OUString aServiceName(aTemplate.sServiceName); - sal_uInt16 nM = 0; + //sal_uInt16 nM = 0; for (auto const& elem : m_aChartTypeDialogControllerList) { if (elem->isSubType(aServiceName)) @@ -239,7 +235,7 @@ void ChartTypePanel::updateData() //m_pMainTypeList->select_entry_region(nM, nM); break; } - ++nM; + //++nM; } } @@ -263,7 +259,7 @@ void ChartTypePanel::HandleContextChange(const vcl::EnumContext& rContext) void ChartTypePanel::modelInvalid() { mbModelValid = false; } -void ChartTypePanel::doUpdateModel(rtl::Reference<::chart::ChartModel> xModel) +void ChartTypePanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel) { if (mbModelValid) { @@ -371,8 +367,8 @@ void ChartTypePanel::stateChanged() commitToModel(aParameter); //detect the new ThreeDLookScheme - rtl::Reference<Diagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel); - aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram); + rtl::Reference<Diagram> xDiagram = m_xChartModel->getFirstChartDiagram(); + aParameter.eThreeDLookScheme = xDiagram->detectScheme(); try { xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues; @@ -415,13 +411,12 @@ void ChartTypePanel::selectMainType() m_pCurrentMainType->adjustParameterToMainType(aParameter); commitToModel(aParameter); //detect the new ThreeDLookScheme - aParameter.eThreeDLookScheme - = ThreeDHelper::detectScheme(ChartModelHelper::findDiagram(m_xChartModel)); + aParameter.eThreeDLookScheme = m_xChartModel->getFirstChartDiagram()->detectScheme(); if (!aParameter.b3DLook && aParameter.eThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Realistic) aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Realistic; - rtl::Reference<Diagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel); + rtl::Reference<Diagram> xDiagram = m_xChartModel->getFirstChartDiagram(); try { xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues; diff --git a/chart2/source/controller/sidebar/ChartTypePanel.hxx b/chart2/source/controller/sidebar/ChartTypePanel.hxx index 5555eba2f464..8df0020431db 100644 --- a/chart2/source/controller/sidebar/ChartTypePanel.hxx +++ b/chart2/source/controller/sidebar/ChartTypePanel.hxx @@ -94,7 +94,7 @@ private: bool mbModelValid; void Initialize(); - void doUpdateModel(rtl::Reference<::chart::ChartModel> xModel); + void doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel); std::unique_ptr<Dim3DLookResourceGroup> m_pDim3DLookResourceGroup; std::unique_ptr<StackingResourceGroup> m_pStackingResourceGroup; diff --git a/chart2/source/controller/uitest/uiobject.cxx b/chart2/source/controller/uitest/uiobject.cxx index ef4f4d7112c8..c75f15c3885c 100644 --- a/chart2/source/controller/uitest/uiobject.cxx +++ b/chart2/source/controller/uitest/uiobject.cxx @@ -11,22 +11,21 @@ #include <uiobject.hxx> #include <ChartWindow.hxx> +#include <ChartView.hxx> #include <ChartController.hxx> #include <ChartModel.hxx> #include <ObjectHierarchy.hxx> #include <chartview/ExplicitValueProvider.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> - -#include <comphelper/servicehelper.hxx> +#include <utility> #include <vcl/svapp.hxx> #include <algorithm> #include <iterator> ChartUIObject::ChartUIObject(const VclPtr<chart::ChartWindow>& xChartWindow, - const OUString& rCID): - maCID(rCID), + OUString aCID): + maCID(std::move(aCID)), mxChartWindow(xChartWindow) { } @@ -96,6 +95,14 @@ OUString ChartUIObject::get_type() const return "ChartUIObject for type: "; } +bool ChartUIObject::equals(const UIObject& rOther) const +{ + const ChartUIObject* pOther = dynamic_cast<const ChartUIObject*>(&rOther); + if (!pOther) + return false; + return mxChartWindow.get() == pOther->mxChartWindow.get(); +} + ChartWindowUIObject::ChartWindowUIObject(const VclPtr<chart::ChartWindow>& xChartWindow): WindowUIObject(xChartWindow), mxChartWindow(xChartWindow) @@ -173,10 +180,9 @@ std::set<OUString> ChartWindowUIObject::get_children() const if (!pController) return aChildren; - rtl::Reference<::chart::ChartModel> xChartDoc( pController->getChartModel() ); - - css::uno::Reference<css::uno::XInterface> xChartView = pController->getChartView(); - chart::ExplicitValueProvider* pValueProvider = comphelper::getFromUnoTunnel<chart::ExplicitValueProvider>( xChartView ); + rtl::Reference<::chart::ChartModel> xChartDoc = pController->getChartModel(); + rtl::Reference<::chart::ChartView> xChartView = pController->getChartView(); + chart::ExplicitValueProvider* pValueProvider = xChartView.get(); chart::ObjectHierarchy aHierarchy(xChartDoc, pValueProvider); chart::ObjectIdentifier aIdentifier = chart::ObjectHierarchy::getRootNodeOID(); aChildren.insert(aIdentifier.getObjectCID()); |