summaryrefslogtreecommitdiffstats
path: root/chart2/source/controller/inc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /chart2/source/controller/inc
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--chart2/source/controller/inc/AccessibleBase.hxx324
-rw-r--r--chart2/source/controller/inc/AccessibleChartView.hxx118
-rw-r--r--chart2/source/controller/inc/AccessibleTextHelper.hxx88
-rw-r--r--chart2/source/controller/inc/AxisItemConverter.hxx74
-rw-r--r--chart2/source/controller/inc/CharacterPropertyItemConverter.hxx59
-rw-r--r--chart2/source/controller/inc/ChartController.hxx562
-rw-r--r--chart2/source/controller/inc/ChartDocumentWrapper.hxx172
-rw-r--r--chart2/source/controller/inc/ChartToolbarController.hxx79
-rw-r--r--chart2/source/controller/inc/ChartWindow.hxx91
-rw-r--r--chart2/source/controller/inc/CommandDispatchContainer.hxx136
-rw-r--r--chart2/source/controller/inc/ConfigurationAccess.hxx38
-rw-r--r--chart2/source/controller/inc/DataPointItemConverter.hxx90
-rw-r--r--chart2/source/controller/inc/DrawViewWrapper.hxx100
-rw-r--r--chart2/source/controller/inc/ErrorBarItemConverter.hxx60
-rw-r--r--chart2/source/controller/inc/GraphicPropertyItemConverter.hxx64
-rw-r--r--chart2/source/controller/inc/ItemConverter.hxx185
-rw-r--r--chart2/source/controller/inc/ItemPropertyMap.hxx34
-rw-r--r--chart2/source/controller/inc/LegendItemConverter.hxx61
-rw-r--r--chart2/source/controller/inc/MultipleChartConverters.hxx103
-rw-r--r--chart2/source/controller/inc/MultipleItemConverter.hxx49
-rw-r--r--chart2/source/controller/inc/ObjectHierarchy.hxx127
-rw-r--r--chart2/source/controller/inc/ObjectNameProvider.hxx69
-rw-r--r--chart2/source/controller/inc/PositionAndSizeHelper.hxx48
-rw-r--r--chart2/source/controller/inc/RangeSelectionHelper.hxx71
-rw-r--r--chart2/source/controller/inc/RangeSelectionListener.hxx70
-rw-r--r--chart2/source/controller/inc/RegressionCurveItemConverter.hxx60
-rw-r--r--chart2/source/controller/inc/RegressionEquationItemConverter.hxx61
-rw-r--r--chart2/source/controller/inc/SelectionHelper.hxx115
-rw-r--r--chart2/source/controller/inc/SeriesOptionsItemConverter.hxx83
-rw-r--r--chart2/source/controller/inc/ShapeController.h38
-rw-r--r--chart2/source/controller/inc/StatisticsItemConverter.hxx52
-rw-r--r--chart2/source/controller/inc/TabPageNotifiable.hxx42
-rw-r--r--chart2/source/controller/inc/TextDirectionListBox.hxx34
-rw-r--r--chart2/source/controller/inc/TextLabelItemConverter.hxx74
-rw-r--r--chart2/source/controller/inc/TimerTriggeredControllerLock.hxx58
-rw-r--r--chart2/source/controller/inc/TitleDialogData.hxx53
-rw-r--r--chart2/source/controller/inc/TitleItemConverter.hxx59
-rw-r--r--chart2/source/controller/inc/ViewElementListProvider.hxx63
-rw-r--r--chart2/source/controller/inc/dlg_ChartType.hxx48
-rw-r--r--chart2/source/controller/inc/dlg_ChartType_UNO.hxx67
-rw-r--r--chart2/source/controller/inc/dlg_CreationWizard.hxx83
-rw-r--r--chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx116
-rw-r--r--chart2/source/controller/inc/dlg_DataEditor.hxx73
-rw-r--r--chart2/source/controller/inc/dlg_DataSource.hxx75
-rw-r--r--chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx68
-rw-r--r--chart2/source/controller/inc/dlg_InsertDataLabel.hxx46
-rw-r--r--chart2/source/controller/inc/dlg_InsertErrorBars.hxx56
-rw-r--r--chart2/source/controller/inc/dlg_InsertLegend.hxx49
-rw-r--r--chart2/source/controller/inc/dlg_InsertTitle.hxx40
-rw-r--r--chart2/source/controller/inc/dlg_ObjectProperties.hxx145
-rw-r--r--chart2/source/controller/inc/dlg_ShapeFont.hxx43
-rw-r--r--chart2/source/controller/inc/dlg_ShapeParagraph.hxx38
-rw-r--r--chart2/source/controller/inc/dlg_View3D.hxx58
-rw-r--r--chart2/source/controller/inc/helpids.h32
-rw-r--r--chart2/source/controller/inc/res_ErrorBar.hxx142
-rw-r--r--chart2/source/controller/inc/res_LegendPosition.hxx75
-rw-r--r--chart2/source/controller/inc/res_Titles.hxx73
-rw-r--r--chart2/source/controller/inc/uiobject.hxx68
58 files changed, 5059 insertions, 0 deletions
diff --git a/chart2/source/controller/inc/AccessibleBase.hxx b/chart2/source/controller/inc/AccessibleBase.hxx
new file mode 100644
index 000000000..44f326f2a
--- /dev/null
+++ b/chart2/source/controller/inc/AccessibleBase.hxx
@@ -0,0 +1,324 @@
+/* -*- 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 <ObjectIdentifier.hxx>
+
+#include <com/sun/star/accessibility/XAccessible.hpp>
+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
+#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
+#include <comphelper/accessibleeventnotifier.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase.hxx>
+#include <rtl/ref.hxx>
+#include <tools/color.hxx>
+#include <unotools/weakref.hxx>
+
+#include <map>
+#include <vector>
+#include <memory>
+
+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;
+
+namespace accessibility
+{
+class IAccessibleViewForwarder;
+}
+
+namespace chart
+{
+
+class AccessibleBase;
+class ObjectHierarchy;
+
+typedef ObjectIdentifier AccessibleUniqueId;
+
+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;
+ css::uno::WeakReference< css::awt::XWindow > m_xWindow;
+
+ std::shared_ptr< ObjectHierarchy > m_spObjectHierarchy;
+
+ AccessibleBase * m_pParent;
+ SdrView* m_pSdrView;
+ ::accessibility::IAccessibleViewForwarder* m_pViewForwarder;
+};
+
+namespace impl
+{
+typedef ::cppu::WeakComponentImplHelper<
+ css::accessibility::XAccessible,
+ css::accessibility::XAccessibleContext,
+ css::accessibility::XAccessibleComponent,
+ css::accessibility::XAccessibleEventBroadcaster,
+ css::lang::XServiceInfo,
+ css::lang::XEventListener
+ > AccessibleBase_Base;
+}
+
+/** Base class for all Chart Accessibility objects
+ */
+class AccessibleBase :
+ public cppu::BaseMutex,
+ public impl::AccessibleBase_Base
+{
+public:
+ enum class EventType
+ {
+ GOT_SELECTION,
+ LOST_SELECTION
+ };
+
+ AccessibleBase( const AccessibleElementInfo & rAccInfo,
+ bool bMayHaveChildren,
+ bool bAlwaysTransparent );
+ virtual ~AccessibleBase() override;
+
+protected:
+ // for all calls to protected methods it is assumed that the mutex is locked
+ // unless calls outside via UNO, e.g. event notification, are done
+
+ /** @param bThrowException if true, a DisposedException is thrown if the
+ object is already disposed
+ @return true, if the component is already disposed and bThrowException is false,
+ false otherwise
+ @throws css::lang::DisposedException
+ */
+ bool CheckDisposeState( bool bThrowException = true ) const;
+
+ /** Events coming from the core have to be processed in this methods. The
+ default implementation returns false, which indicates that the object is
+ not interested in the event. To react on events you have to implement
+ this method in derived classes.
+
+ The default implementation iterates over all children and forwards the
+ event until the first child returns true.
+
+ @param nObjId contains the object id of chart objects. If the object is
+ no chart object, the event is not broadcast.
+ @return If an object is the addressee of the event it should return
+ true, false otherwise.
+ */
+ bool NotifyEvent( EventType eType, const AccessibleUniqueId & rId );
+
+ /** Adds a state to the set.
+
+ @throws css::uno::RuntimeException
+ */
+ void AddState( sal_Int16 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 );
+
+ /** has to be overridden by derived classes that support child elements.
+ With this method a rescan is initiated that should result in a correct
+ list of children.
+
+ This method is called when access to any methods concerning children is
+ invoked for the first time.
+ */
+ bool UpdateChildren();
+
+ /** Is called by UpdateChildren. This method is only called if an update is
+ really necessary.
+ */
+ virtual bool ImplUpdateChildren();
+
+ /** adds a child to the end of the internal vector of children. As a
+ result, the child-count increases by one, but all existing children keep
+ their indices.
+
+ Important: as the implementation is needed, this should remain the only
+ method for adding children (i.e. there mustn't be an AddChild( Reference<
+ XAccessible > ) or the like).
+ */
+ void AddChild( AccessibleBase* pChild );
+
+ /** removes a child from the internal vector. All children with index
+ greater than the index of the removed element get an index one less than
+ before.
+ */
+ void RemoveChildByOId( const ObjectIdentifier& rOId );
+
+ /** Retrieve the pixel coordinates of logical coordinates (0,0) of the
+ current logic coordinate system. This can be used for
+ getLocationOnScreen, if the coordinates of an object are not relative to
+ its direct parent, but a parent higher up in hierarchy.
+
+ @return the (x,y) pixel coordinates of the upper left corner
+ */
+ virtual css::awt::Point GetUpperLeftOnScreen() const;
+
+ /** This method creates an AccessibleEventObject and sends it to all
+ listeners that are currently listening to this object
+ */
+ void BroadcastAccEvent( sal_Int16 nId,
+ const css::uno::Any & rNew,
+ const css::uno::Any & rOld ) const;
+
+ /** Removes all children from the internal lists and broadcasts child remove
+ events.
+
+ This method cares about mutex locking, and thus should be called without
+ the mutex locked.
+ */
+ void KillAllChildren();
+
+ /** Is called from getAccessibleChild(). Before this method is called, an
+ update of children is done if necessary.
+
+ @throws css::lang::IndexOutOfBoundsException
+ @throws css::uno::RuntimeException
+ */
+ virtual css::uno::Reference< css::accessibility::XAccessible >
+ ImplGetAccessibleChildById( sal_Int32 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;
+
+ const AccessibleElementInfo& GetInfo() const { return m_aAccInfo;}
+ void SetInfo( const AccessibleElementInfo & rNewInfo );
+ const AccessibleUniqueId& GetId() const { return m_aAccInfo.m_aOID;}
+
+ // ________ WeakComponentImplHelper (XComponent::dispose) ________
+ virtual void SAL_CALL disposing() override;
+
+ // ________ XAccessible ________
+ virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override;
+
+ // ________ XAccessibleContext ________
+ virtual sal_Int32 SAL_CALL getAccessibleChildCount() override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
+ getAccessibleChild( sal_Int32 i ) override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
+ getAccessibleParent() override;
+ virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override;
+ /// @return AccessibleRole.SHAPE
+ virtual sal_Int16 SAL_CALL getAccessibleRole() override;
+ // has to be implemented by derived classes
+// virtual OUString SAL_CALL getAccessibleName()
+// 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 css::lang::Locale SAL_CALL getLocale() override;
+ // has to be implemented by derived classes
+// virtual OUString SAL_CALL getAccessibleDescription()
+// throw (css::uno::RuntimeException);
+
+ // ________ XAccessibleComponent ________
+ virtual sal_Bool SAL_CALL containsPoint(
+ const css::awt::Point& aPoint ) override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
+ getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
+ // has to be defined in derived classes
+ virtual css::awt::Rectangle SAL_CALL getBounds() override;
+ virtual css::awt::Point SAL_CALL getLocation() override;
+ virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
+ virtual css::awt::Size SAL_CALL getSize() override;
+ virtual void SAL_CALL grabFocus() override;
+ virtual sal_Int32 SAL_CALL getForeground() override;
+ virtual sal_Int32 SAL_CALL getBackground() override;
+
+ // ________ 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;
+
+ // ________ XEventListener ________
+ virtual void SAL_CALL disposing(
+ const css::lang::EventObject& Source ) override;
+
+ // ________ XAccessibleEventBroadcaster ________
+ virtual void SAL_CALL addAccessibleEventListener(
+ const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
+ virtual void SAL_CALL removeAccessibleEventListener(
+ const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
+
+private:
+ enum eColorType
+ {
+ ACC_BASE_FOREGROUND,
+ ACC_BASE_BACKGROUND
+ };
+ Color getColor( eColorType eColType );
+
+private:
+ /** type of the vector containing the accessible children
+ */
+ typedef std::vector< css::uno::Reference< css::accessibility::XAccessible > > ChildListVectorType;
+ /** type of the hash containing a vector index for every AccessibleUniqueId
+ of the object in the child list
+ */
+ typedef std::map< ObjectIdentifier, css::uno::Reference< css::accessibility::XAccessible > > ChildOIDMap;
+
+ bool m_bIsDisposed;
+ const bool m_bMayHaveChildren;
+ bool m_bChildrenInitialized;
+ ChildListVectorType m_aChildList;
+
+ ChildOIDMap m_aChildOIDMap;
+
+ ::comphelper::AccessibleEventNotifier::TClientId m_nEventNotifierId;
+
+ /** Implementation helper for getAccessibleStateSet()
+
+ Note: This member must come before m_aStateSet!
+ */
+ rtl::Reference<::utl::AccessibleStateSetHelper> m_xStateSetHelper;
+
+ AccessibleElementInfo m_aAccInfo;
+ const bool m_bAlwaysTransparent;
+ /** denotes if the state-set is initialized. On initialization the selected
+ state is checked.
+
+ This variable is monitored by the solar mutex!
+
+ Note: declared volatile to enable double-check-locking
+ */
+ volatile bool m_bStateSetInitialized;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/AccessibleChartView.hxx b/chart2/source/controller/inc/AccessibleChartView.hxx
new file mode 100644
index 000000000..eb3367b20
--- /dev/null
+++ b/chart2/source/controller/inc/AccessibleChartView.hxx
@@ -0,0 +1,118 @@
+/* -*- 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 "AccessibleBase.hxx"
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/weakref.hxx>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/view/XSelectionChangeListener.hpp>
+
+#include <memory>
+
+namespace com::sun::star::accessibility { class XAccessible; }
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::view { class XSelectionSupplier; }
+
+namespace accessibility
+{
+class IAccessibleViewForwarder;
+}
+
+namespace chart
+{
+
+namespace impl
+{
+typedef ::cppu::ImplInheritanceHelper<
+ ::chart::AccessibleBase,
+ css::lang::XInitialization,
+ css::view::XSelectionChangeListener >
+ AccessibleChartView_Base;
+}
+
+class AccessibleChartView final :
+ public impl::AccessibleChartView_Base
+{
+public:
+ AccessibleChartView(SdrView* pView );
+ virtual ~AccessibleChartView() override;
+
+ AccessibleChartView() = delete;
+
+ // ____ 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;
+
+ // ____ view::XSelectionChangeListener ____
+ virtual void SAL_CALL selectionChanged( const css::lang::EventObject& aEvent ) override;
+
+ // ________ XEventListener ________
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ // ________ 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 OUString SAL_CALL getAccessibleName() override;
+ virtual sal_Int16 SAL_CALL getAccessibleRole() override;
+
+ // ________ XAccessibleComponent ________
+ virtual css::awt::Rectangle SAL_CALL getBounds() override;
+ virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
+
+protected:
+ // ________ AccessibleChartElement ________
+ virtual css::awt::Point GetUpperLeftOnScreen() const override;
+
+private: // methods
+ /** @return the result that m_xWindow->getPosSize() _should_ return. It
+ returns (0,0) as upper left corner. When calling
+ getAccessibleParent, you get the parent's parent, which contains
+ a decoration. Thus you have an offset of (currently) (2,2)
+ which isn't taken into account.
+ */
+ 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;
+ css::uno::WeakReference< css::awt::XWindow > m_xWindow;
+ css::uno::WeakReference< css::accessibility::XAccessible > m_xParent;
+
+ std::shared_ptr< ObjectHierarchy > m_spObjectHierarchy;
+ AccessibleUniqueId m_aCurrentSelectionOID;
+ SdrView* m_pSdrView;
+ std::unique_ptr<::accessibility::IAccessibleViewForwarder> m_pViewForwarder;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/AccessibleTextHelper.hxx b/chart2/source/controller/inc/AccessibleTextHelper.hxx
new file mode 100644
index 000000000..075fbf0f9
--- /dev/null
+++ b/chart2/source/controller/inc/AccessibleTextHelper.hxx
@@ -0,0 +1,88 @@
+/* -*- 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 <memory>
+#include <comphelper/compbase.hxx>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
+
+// forward declaration of helper class from svx
+namespace accessibility
+{
+class AccessibleTextHelper;
+}
+
+namespace chart
+{
+
+class DrawViewWrapper;
+
+namespace impl
+{
+typedef comphelper::WeakComponentImplHelper<
+ css::lang::XInitialization,
+ css::accessibility::XAccessibleContext >
+ AccessibleTextHelper_Base;
+}
+
+class AccessibleTextHelper final :
+ public impl::AccessibleTextHelper_Base
+{
+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
+ the corresponding drawing object that contains the text that should
+ be handled by this helper class.
+1
+ mandatory parameter 1: type XAccessible. Is used as EventSource for the
+ ::accessibility::AccessibleTextHelper (svx)
+
+ 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;
+
+ // ____ XAccessibleContext ____
+ virtual ::sal_Int32 SAL_CALL getAccessibleChildCount() override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(
+ ::sal_Int32 i ) override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override;
+ virtual ::sal_Int32 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 css::lang::Locale SAL_CALL getLocale() override;
+
+private:
+ std::unique_ptr<::accessibility::AccessibleTextHelper> m_pTextHelper;
+ DrawViewWrapper * m_pDrawViewWrapper;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/AxisItemConverter.hxx b/chart2/source/controller/inc/AxisItemConverter.hxx
new file mode 100644
index 000000000..cbb75d2a1
--- /dev/null
+++ b/chart2/source/controller/inc/AxisItemConverter.hxx
@@ -0,0 +1,74 @@
+/* -*- 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 "ItemConverter.hxx"
+#include <rtl/ref.hxx>
+
+#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 { struct ExplicitIncrementData; }
+namespace chart { struct ExplicitScaleData; }
+namespace chart { class ChartModel; }
+
+class SdrModel;
+
+namespace chart::wrapper {
+
+class AxisItemConverter final : public ItemConverter
+{
+public:
+ AxisItemConverter(
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ SfxItemPool& rItemPool, SdrModel& rDrawModel,
+ const rtl::Reference<::chart::ChartModel> & xChartDoc,
+ ExplicitScaleData const * pScale,
+ ExplicitIncrementData const * pIncrement,
+ const css::awt::Size* pRefSize );
+
+ virtual ~AxisItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+ css::uno::Reference<
+ css::chart2::XAxis > m_xAxis;
+
+ rtl::Reference<::chart::ChartModel>m_xChartDoc;
+
+ std::unique_ptr<ExplicitScaleData> m_pExplicitScale;
+ std::unique_ptr<ExplicitIncrementData> m_pExplicitIncrement;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx b/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx
new file mode 100644
index 000000000..96138e237
--- /dev/null
+++ b/chart2/source/controller/inc/CharacterPropertyItemConverter.hxx
@@ -0,0 +1,59 @@
+/* -*- 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 "ItemConverter.hxx"
+#include <com/sun/star/awt/Size.hpp>
+
+#include <optional>
+
+namespace chart::wrapper {
+
+class CharacterPropertyItemConverter final : public ItemConverter
+{
+public:
+ CharacterPropertyItemConverter(
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ SfxItemPool& rItemPool );
+
+ CharacterPropertyItemConverter(
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ SfxItemPool& rItemPool,
+ const css::awt::Size* pRefSize,
+ const OUString & rRefSizePropertyName,
+ const css::uno::Reference<css::beans::XPropertySet>& rRefSizePropSet = css::uno::Reference<css::beans::XPropertySet>() );
+
+ virtual ~CharacterPropertyItemConverter() override;
+
+private:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const override;
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+ const css::uno::Reference<css::beans::XPropertySet>& GetRefSizePropertySet() const;
+
+ OUString m_aRefSizePropertyName;
+ css::uno::Reference<css::beans::XPropertySet> m_xRefSizePropSet;
+ std::optional<css::awt::Size> m_pRefSize;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ChartController.hxx b/chart2/source/controller/inc/ChartController.hxx
new file mode 100644
index 000000000..d50800fd6
--- /dev/null
+++ b/chart2/source/controller/inc/ChartController.hxx
@@ -0,0 +1,562 @@
+/* -*- 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 <LifeTime.hxx>
+#include "CommandDispatchContainer.hxx"
+#include "SelectionHelper.hxx"
+
+#include <svx/svdtypes.hxx>
+#include <vcl/timer.hxx>
+
+#include <cppuhelper/implbase.hxx>
+#include <o3tl/sorted_vector.hxx>
+#include <salhelper/simplereferenceobject.hxx>
+
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/ui/XContextMenuInterception.hpp>
+#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/XLayoutManagerListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+
+#include <memory>
+#include <string_view>
+
+namespace com::sun::star::accessibility { class XAccessible; }
+namespace com::sun::star::accessibility { class XAccessibleContext; }
+namespace com::sun::star::awt { class XFocusListener; }
+namespace com::sun::star::awt { class XKeyListener; }
+namespace com::sun::star::awt { class XMouseListener; }
+namespace com::sun::star::awt { class XMouseMotionListener; }
+namespace com::sun::star::awt { class XPaintListener; }
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::awt { class XWindowListener; }
+namespace com::sun::star::awt { struct Point; }
+namespace com::sun::star::document { class XUndoManager; }
+namespace com::sun::star::frame { class XDispatch; }
+namespace com::sun::star::frame { class XLayoutManagerEventBroadcaster; }
+namespace com::sun::star::graphic { class XGraphic; }
+namespace com::sun::star::lang { class XInitialization; }
+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
+{
+ class AcceleratorExecute;
+}
+
+namespace svx::sidebar {
+ class SelectionChangeHandler;
+}
+
+namespace weld {
+ class Window;
+}
+
+class DropTargetHelper;
+
+namespace chart
+{
+
+class UndoGuard;
+class ChartWindow;
+class DrawModelWrapper;
+class DrawViewWrapper;
+class ReferenceSizeProvider;
+class ViewElementListProvider;
+class Diagram;
+
+enum ChartDrawMode { CHARTDRAW_INSERT, CHARTDRAW_SELECT };
+
+
+class ChartController final : public ::cppu::WeakImplHelper <
+ css::frame::XController //comprehends XComponent (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
+ >
+{
+public:
+ ChartController() = delete;
+ explicit ChartController(css::uno::Reference< css::uno::XComponentContext > const & 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;
+
+ virtual sal_Bool SAL_CALL
+ attachModel( const css::uno::Reference< css::frame::XModel > & xModel ) override;
+
+ virtual css::uno::Reference< css::frame::XFrame > SAL_CALL
+ getFrame() override;
+
+ virtual css::uno::Reference< css::frame::XModel > SAL_CALL
+ getModel() override;
+
+ virtual css::uno::Any SAL_CALL
+ getViewData() override;
+
+ virtual void SAL_CALL
+ restoreViewData( const css::uno::Any& rValue ) override;
+
+ virtual sal_Bool SAL_CALL
+ suspend( sal_Bool bSuspend ) override;
+
+ // css::lang::XComponent (base of XController)
+ virtual void SAL_CALL
+ dispose() override;
+
+ virtual void SAL_CALL
+ addEventListener( const css::uno::Reference< css::lang::XEventListener > & xListener ) override;
+
+ virtual void SAL_CALL
+ removeEventListener( const css::uno::Reference< css::lang::XEventListener > & xListener ) override;
+
+ // css::frame::XDispatchProvider (required interface)
+ virtual css::uno::Reference< css::frame::XDispatch> SAL_CALL
+ queryDispatch( const css::util::URL& rURL
+ , const OUString& rTargetFrameName
+ , sal_Int32 nSearchFlags) override;
+
+ virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL
+ queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor > & xDescripts) override;
+
+ // css::view::XSelectionSupplier (optional interface)
+ virtual sal_Bool SAL_CALL
+ select( const css::uno::Any& rSelection ) override;
+
+ virtual css::uno::Any SAL_CALL
+ getSelection() override;
+
+ virtual void SAL_CALL
+ addSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener > & xListener ) override;
+
+ virtual void SAL_CALL
+ removeSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener > & xListener ) override;
+
+ // css::ui::XContextMenuInterception (optional interface)
+ virtual void SAL_CALL
+ registerContextMenuInterceptor( const css::uno::Reference< css::ui::XContextMenuInterceptor > & xInterceptor) override;
+
+ virtual void SAL_CALL
+ releaseContextMenuInterceptor( const css::uno::Reference< css::ui::XContextMenuInterceptor > & xInterceptor) override;
+
+ //additional interfaces
+
+ // css::util::XCloseListener
+ virtual void SAL_CALL
+ queryClosing( const css::lang::EventObject& Source
+ , sal_Bool GetsOwnership ) override;
+
+ virtual void SAL_CALL
+ notifyClosing( const css::lang::EventObject& Source ) override;
+
+ // css::util::XEventListener (base of XCloseListener and XModifyListener)
+ virtual void SAL_CALL
+ disposing( const css::lang::EventObject& Source ) override;
+
+ // css::frame::XDispatch
+
+ virtual void SAL_CALL
+ dispatch( const css::util::URL& aURL
+ , const css::uno::Sequence< css::beans::PropertyValue >& aArgs ) override;
+
+ virtual void SAL_CALL
+ addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl
+ , const css::util::URL& aURL ) override;
+
+ virtual void SAL_CALL
+ removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl
+ , const css::util::URL& aURL ) override;
+
+ // css::awt::XWindow
+ virtual void SAL_CALL
+ setPosSize( sal_Int32 X, sal_Int32 Y
+ , sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) override;
+
+ virtual css::awt::Rectangle SAL_CALL
+ getPosSize() override;
+
+ virtual void SAL_CALL
+ setVisible( sal_Bool Visible ) override;
+
+ virtual void SAL_CALL
+ setEnable( sal_Bool Enable ) override;
+
+ virtual void SAL_CALL
+ setFocus() override;
+
+ virtual void SAL_CALL
+ addWindowListener( const css::uno::Reference< css::awt::XWindowListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ removeWindowListener( const css::uno::Reference< css::awt::XWindowListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ addFocusListener( const css::uno::Reference< css::awt::XFocusListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ removeFocusListener( const css::uno::Reference< css::awt::XFocusListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ addKeyListener( const css::uno::Reference< css::awt::XKeyListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ removeKeyListener( const css::uno::Reference< css::awt::XKeyListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ addMouseListener( const css::uno::Reference< css::awt::XMouseListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ removeMouseListener( const css::uno::Reference< css::awt::XMouseListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ addMouseMotionListener( const css::uno::Reference< css::awt::XMouseMotionListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ removeMouseMotionListener( const css::uno::Reference< css::awt::XMouseMotionListener >& xListener ) override;
+
+ virtual void SAL_CALL
+ addPaintListener( const css::uno::Reference< css::awt::XPaintListener >& xListener ) override;
+
+ 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;
+
+ // css::util::XModeChangeListener
+ virtual void SAL_CALL modeChanged(
+ const css::util::ModeChangeEvent& _rSource ) override;
+
+ // css::frame::XLayoutManagerListener
+ virtual void SAL_CALL layoutEvent(
+ const css::lang::EventObject& aSource,
+ ::sal_Int16 eLayoutEvent,
+ const css::uno::Any& aInfo ) override;
+
+ // WindowController stuff
+ void PrePaint();
+ void execute_Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect);
+ void execute_MouseButtonDown( const MouseEvent& rMEvt );
+ void execute_MouseMove( const MouseEvent& rMEvt );
+ void execute_MouseButtonUp( const MouseEvent& rMEvt );
+ void execute_Resize();
+ void execute_Command( const CommandEvent& rCEvt );
+ bool execute_KeyInput( const KeyEvent& rKEvt );
+
+ /** get help text to be shown in a quick help
+
+ @param aAtLogicPosition the position in logic coordinates (of the
+ window) of the mouse cursor to determine for
+ which object help is requested.
+
+ @param bIsBalloonHelp determines whether to return the long text version
+ (balloon help) or the shorter one (quick help).
+
+ @param rOutQuickHelpText is filled with the quick help text
+
+ @param rOutEqualRect is filled with a rectangle that denotes the region
+ in which the quick help does not change.
+
+ @return </sal_True>, if a quick help should be shown.
+ */
+ bool requestQuickHelp(
+ ::Point aAtLogicPosition, bool bIsBalloonHelp,
+ OUString & rOutQuickHelpText, css::awt::Rectangle & rOutEqualRect );
+
+ css::uno::Reference< css::accessibility::XAccessible > CreateAccessible();
+
+ static bool isObjectDeleteable( const css::uno::Any& rSelection );
+
+ void setDrawMode( ChartDrawMode eMode ) { m_eDrawMode = eMode; }
+
+ bool isShapeContext() const;
+
+ ViewElementListProvider getViewElementListProvider();
+ DrawModelWrapper* GetDrawModelWrapper();
+ DrawViewWrapper* GetDrawViewWrapper();
+ ChartWindow* GetChartWindow() const;
+ weld::Window* GetChartFrame();
+ bool isAdditionalShapeSelected() const;
+ void SetAndApplySelection(const css::uno::Reference<css::drawing::XShape>& rxShape);
+ void StartTextEdit( const Point* pMousePixel = nullptr );
+
+ void NotifyUndoActionHdl( std::unique_ptr<SdrUndoAction> );
+
+ css::uno::Reference<css::uno::XInterface> const & getChartView() const;
+
+ rtl::Reference<::chart::ChartModel> getChartModel();
+ rtl::Reference<::chart::Diagram> getFirstDiagram();
+
+private:
+ class TheModel : public salhelper::SimpleReferenceObject
+ {
+ public:
+ explicit TheModel( const rtl::Reference<::chart::ChartModel> & xModel );
+
+ virtual ~TheModel() override;
+
+ void addListener( ChartController* pController );
+ void removeListener( ChartController* pController );
+ void tryTermination();
+ const rtl::Reference<::chart::ChartModel>&
+ getModel() const { return m_xModel;}
+
+ private:
+ rtl::Reference<::chart::ChartModel> m_xModel;
+
+ //the ownership between model and controller is not clear at first
+ //each controller might consider himself as owner of the model first
+ bool m_bOwnership;
+ };
+ class TheModelRef final
+ {
+ public:
+ TheModelRef( TheModel* pTheModel, ::osl::Mutex& rMutex );
+ TheModelRef( const TheModelRef& rTheModel, ::osl::Mutex& rMutex );
+ TheModelRef& operator=(ChartController::TheModel* pTheModel);
+ TheModelRef& operator=(const TheModelRef& rTheModel);
+ ~TheModelRef();
+ bool is() const;
+ TheModel* operator->() const { return m_xTheModel.get(); }
+ private:
+ rtl::Reference<TheModel> m_xTheModel;
+ ::osl::Mutex& m_rModelMutex;
+ };
+
+ mutable ::apphelper::LifeTimeManager m_aLifeTimeManager;
+
+ bool m_bSuspended;
+
+ css::uno::Reference< css::uno::XComponentContext> m_xCC;
+
+ //model
+ css::uno::Reference< css::frame::XFrame > m_xFrame;
+ mutable ::osl::Mutex m_aModelMutex;
+ TheModelRef m_aModel;
+
+ //view
+ css::uno::Reference<css::awt::XWindow> m_xViewWindow;
+ css::uno::Reference<css::uno::XInterface> m_xChartView;
+ std::shared_ptr< DrawModelWrapper > m_pDrawModelWrapper;
+ std::unique_ptr<DrawViewWrapper> m_pDrawViewWrapper;
+
+ Selection m_aSelection;
+ SdrDragMode m_eDragMode;
+
+ Timer m_aDoubleClickTimer;
+ bool m_bWaitingForDoubleClick;
+ bool m_bWaitingForMouseUp;
+ bool m_bFieldButtonDown;
+
+ bool m_bConnectingToView;
+ bool m_bDisposed;
+
+ css::uno::Reference< css::document::XUndoManager > m_xUndoManager;
+ std::unique_ptr< UndoGuard > m_pTextActionUndoGuard;
+
+ std::unique_ptr< ::svt::AcceleratorExecute > m_apAccelExecute;
+
+ CommandDispatchContainer m_aDispatchContainer;
+
+ std::unique_ptr< DropTargetHelper > m_apDropTargetHelper;
+ css::uno::Reference<
+ css::frame::XLayoutManagerEventBroadcaster > m_xLayoutManagerEventBroadcaster;
+
+ ChartDrawMode m_eDrawMode;
+
+ rtl::Reference<svx::sidebar::SelectionChangeHandler> mpSelectionChangeHandler;
+
+ bool impl_isDisposedOrSuspended() const;
+ std::unique_ptr<ReferenceSizeProvider> impl_createReferenceSizeProvider();
+ void impl_adaptDataSeriesAutoResize();
+
+ void impl_createDrawViewController();
+ void impl_deleteDrawViewController();
+
+ //executeDispatch methods
+ 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 executeDispatch_ChartType();
+
+ void executeDispatch_InsertTitles();
+ void executeDispatch_InsertLegend();
+ void executeDispatch_DeleteLegend();
+ void executeDispatch_OpenLegendDialog();
+ void executeDispatch_InsertAxes();
+ void executeDispatch_InsertGrid();
+
+ void executeDispatch_InsertMenu_DataLabels();
+ void executeDispatch_InsertMenu_Trendlines();
+ void executeDispatch_InsertMenu_MeanValues();
+
+ void executeDispatch_InsertMeanValue();
+ void executeDispatch_InsertTrendline();
+ void executeDispatch_InsertTrendlineEquation( bool bInsertR2=false );
+ void executeDispatch_InsertErrorBars( bool bYError );
+
+ void executeDispatch_InsertR2Value();
+ void executeDispatch_DeleteR2Value();
+
+ void executeDispatch_DeleteMeanValue();
+ void executeDispatch_DeleteTrendline();
+ void executeDispatch_DeleteTrendlineEquation();
+ void executeDispatch_DeleteErrorBars( bool bYError );
+
+ void executeDispatch_InsertDataLabels();
+ void executeDispatch_InsertDataLabel();
+ void executeDispatch_DeleteDataLabels();
+ void executeDispatch_DeleteDataLabel();
+
+ void executeDispatch_ResetAllDataPoints();
+ void executeDispatch_ResetDataPoint();
+
+ void executeDispatch_InsertAxis();
+ void executeDispatch_InsertAxisTitle();
+ void executeDispatch_InsertMajorGrid();
+ void executeDispatch_InsertMinorGrid();
+ void executeDispatch_DeleteAxis();
+ void executeDispatch_DeleteMajorGrid();
+ void executeDispatch_DeleteMinorGrid();
+
+ void executeDispatch_InsertSpecialCharacter();
+ void executeDispatch_EditText( const Point* pMousePixel = nullptr );
+ void executeDispatch_SourceData();
+ void executeDispatch_MoveSeries( bool bForward );
+
+ bool EndTextEdit();
+
+ void executeDispatch_View3D();
+ void executeDispatch_PositionAndSize( const ::css::uno::Sequence< ::css::beans::PropertyValue >* pArgs = nullptr );
+
+ void executeDispatch_EditData();
+
+ void executeDispatch_NewArrangement();
+ void executeDispatch_ScaleText();
+
+ void executeDispatch_Paste();
+ void executeDispatch_Copy();
+ void executeDispatch_Cut();
+ bool executeDispatch_Delete();
+ void executeDispatch_ToggleLegend();
+ void executeDispatch_ToggleGridHorizontal();
+ void executeDispatch_ToggleGridVertical();
+
+ 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_LineColor(sal_uInt32 nColor);
+ void executeDispatch_LineWidth(sal_uInt32 nWidth);
+
+ void sendPopupRequest(OUString const & 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 startDoubleClickWaiting();
+ void stopDoubleClickWaiting();
+
+ void impl_selectObjectAndNotiy();
+ void impl_notifySelectionChangeListeners();
+ void impl_invalidateAccessible();
+ void impl_initializeAccessible();
+ void impl_initializeAccessible( const css::uno::Reference< css::lang::XInitialization >& xInit );
+
+ //sets the model member to null if it equals the parameter
+ //returns true if successful
+ bool impl_releaseThisModel( const css::uno::Reference< css::uno::XInterface > & xModel );
+
+ enum eMoveOrResizeType
+ {
+ MOVE_OBJECT,
+ CENTERED_RESIZE_OBJECT
+ };
+ /// @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 );
+
+ 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 );
+ void impl_PasteStringAsTextShape( const OUString& rString, const css::awt::Point& rPosition );
+ void impl_SetMousePointer( const MouseEvent & rEvent );
+
+ void impl_ClearSelection();
+
+ void impl_switchDiagramPositioningToExcludingPositioning();
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ChartDocumentWrapper.hxx b/chart2/source/controller/inc/ChartDocumentWrapper.hxx
new file mode 100644
index 000000000..04f76d705
--- /dev/null
+++ b/chart2/source/controller/inc/ChartDocumentWrapper.hxx
@@ -0,0 +1,172 @@
+/* -*- 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 <WrappedPropertySet.hxx>
+#include <com/sun/star/chart/XChartDocument.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/uno/XAggregation.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <unotools/eventlisteneradapter.hxx>
+#include <rtl/ref.hxx>
+#include <svx/unopage.hxx>
+#include <memory>
+
+namespace com::sun::star::uno { class XComponentContext; }
+namespace com::sun::star::util { class XRefreshable; }
+namespace chart { class ChartView; }
+
+namespace chart::wrapper
+{
+
+class Chart2ModelContact;
+
+class ChartDocumentWrapper_Base : public ::cppu::ImplInheritanceHelper
+ < WrappedPropertySet
+ , css::chart::XChartDocument
+ , css::drawing::XDrawPageSupplier
+ , css::lang::XMultiServiceFactory
+ , css::lang::XServiceInfo
+ , css::uno::XAggregation
+ >
+{
+};
+
+class ChartDocumentWrapper final : public ChartDocumentWrapper_Base
+ , public ::utl::OEventListenerAdapter
+{
+public:
+ explicit ChartDocumentWrapper( const css::uno::Reference< css::uno::XComponentContext > & xContext );
+ virtual ~ChartDocumentWrapper() override;
+
+ /// XServiceInfo declarations
+ 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;
+
+ void setAddIn( const css::uno::Reference< css::util::XRefreshable >& xAddIn );
+ const css::uno::Reference< css::util::XRefreshable >& getAddIn() const { return m_xAddIn;}
+
+ void setUpdateAddIn( bool bUpdateAddIn );
+ bool getUpdateAddIn() const { return m_bUpdateAddIn;}
+
+ void setBaseDiagram( const OUString& rBaseDiagram );
+ const OUString& getBaseDiagram() const { return m_aBaseDiagram;}
+
+ css::uno::Reference< css::drawing::XShapes > getAdditionalShapes() const;
+
+ /// @throws css::uno::RuntimeException
+ rtl::Reference<SvxDrawPage> impl_getDrawPage() const;
+
+protected:
+
+ // ____ chart::XChartDocument ____
+ virtual css::uno::Reference< css::drawing::XShape > SAL_CALL getTitle() override;
+ virtual css::uno::Reference< css::drawing::XShape > SAL_CALL getSubTitle() override;
+ virtual css::uno::Reference< css::drawing::XShape > SAL_CALL getLegend() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > SAL_CALL getArea() override;
+ virtual css::uno::Reference< css::chart::XDiagram > SAL_CALL getDiagram() override;
+ virtual void SAL_CALL setDiagram( const css::uno::Reference<
+ css::chart::XDiagram >& xDiagram ) override;
+ virtual css::uno::Reference< css::chart::XChartData > SAL_CALL getData() override;
+ virtual void SAL_CALL attachData( const css::uno::Reference<
+ css::chart::XChartData >& xData ) override;
+
+ // ____ XModel ____
+ virtual sal_Bool SAL_CALL attachResource( const OUString& URL,
+ const css::uno::Sequence< css::beans::PropertyValue >& Arguments ) override;
+ virtual OUString SAL_CALL getURL() override;
+ virtual css::uno::Sequence<
+ css::beans::PropertyValue > SAL_CALL getArgs() override;
+ virtual void SAL_CALL connectController( const css::uno::Reference<
+ css::frame::XController >& Controller ) override;
+ virtual void SAL_CALL disconnectController( const css::uno::Reference<
+ css::frame::XController >& Controller ) override;
+ virtual void SAL_CALL lockControllers() override;
+ virtual void SAL_CALL unlockControllers() override;
+ virtual sal_Bool SAL_CALL hasControllersLocked() override;
+ virtual css::uno::Reference<
+ css::frame::XController > SAL_CALL getCurrentController() override;
+ virtual void SAL_CALL setCurrentController( const css::uno::Reference< css::frame::XController >& Controller ) override;
+ virtual css::uno::Reference<css::uno::XInterface > SAL_CALL getCurrentSelection() override;
+
+ // ____ XComponent ____
+ virtual void SAL_CALL dispose() override;
+ virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
+ virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
+
+ // ____ XInterface (for new interfaces) ____
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
+
+ // ____ ::utl::OEventListenerAdapter ____
+ virtual void _disposing( const css::lang::EventObject& rSource ) override;
+
+ // ____ XDrawPageSupplier ____
+ virtual css::uno::Reference< css::drawing::XDrawPage > SAL_CALL getDrawPage() override;
+
+ // ____ 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;
+
+ // ____ XAggregation ____
+ virtual void SAL_CALL setDelegator(
+ const css::uno::Reference< css::uno::XInterface >& rDelegator ) override;
+ virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type& aType ) override;
+
+ // ____ WrappedPropertySet ____
+ virtual const css::uno::Sequence< css::beans::Property >& getPropertySequence() override;
+ virtual std::vector< std::unique_ptr<WrappedProperty> > createWrappedProperties() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > getInnerPropertySet() override;
+
+private: //methods
+ void impl_resetAddIn();
+
+private: //member
+ std::shared_ptr< Chart2ModelContact > m_spChart2ModelContact;
+
+ css::uno::Reference< css::uno::XInterface > m_xDelegator;
+
+ css::uno::Reference< css::drawing::XShape > m_xTitle;
+ css::uno::Reference< css::drawing::XShape > m_xSubTitle;
+ css::uno::Reference< css::drawing::XShape > m_xLegend;
+ css::uno::Reference< css::chart::XChartData > m_xChartData;
+ css::uno::Reference< css::chart::XDiagram > m_xDiagram;
+ css::uno::Reference< css::beans::XPropertySet > m_xArea;
+
+ css::uno::Reference< css::util::XRefreshable > m_xAddIn;
+ OUString m_aBaseDiagram;
+ bool m_bUpdateAddIn;
+
+ rtl::Reference< ChartView > m_xChartView;
+ css::uno::Reference< css::lang::XMultiServiceFactory>
+ m_xShapeFactory;
+
+ bool m_bIsDisposed;
+};
+
+} // namespace chart::wrapper
+
+// CHART_CHARTDOCUMENT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ChartToolbarController.hxx b/chart2/source/controller/inc/ChartToolbarController.hxx
new file mode 100644
index 000000000..ce493bba6
--- /dev/null
+++ b/chart2/source/controller/inc/ChartToolbarController.hxx
@@ -0,0 +1,79 @@
+/* -*- 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 <comphelper/compbase.hxx>
+
+#include <com/sun/star/frame/XToolbarController.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/util/XUpdatable.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::frame { class XFramesSupplier; }
+
+namespace chart {
+
+typedef comphelper::WeakComponentImplHelper<
+ css::frame::XToolbarController, css::frame::XStatusListener,
+ css::util::XUpdatable, css::lang::XInitialization,
+ css::lang::XServiceInfo> ChartToolbarControllerBase;
+
+class ChartToolbarController final : public ChartToolbarControllerBase
+{
+public:
+ ChartToolbarController(const css::uno::Sequence<css::uno::Any>& rProperties);
+ virtual ~ChartToolbarController() override;
+
+ ChartToolbarController(const ChartToolbarController&) = delete;
+ const ChartToolbarController& operator=(const ChartToolbarController&) = delete;
+
+ // XToolbarController
+ virtual void SAL_CALL execute(sal_Int16 nKeyModifier) override;
+
+ virtual void SAL_CALL click() override;
+
+ virtual void SAL_CALL doubleClick() override;
+
+ virtual css::uno::Reference<css::awt::XWindow> SAL_CALL createPopupWindow() override;
+
+ virtual css::uno::Reference<css::awt::XWindow> SAL_CALL
+ createItemWindow(const css::uno::Reference<css::awt::XWindow>& rParent) override;
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+
+ virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName) override;
+
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+
+ // XStatusListener
+ virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& rEvent) override;
+
+ // XEventListener
+ virtual void SAL_CALL disposing(const css::lang::EventObject& rSource) override;
+
+ // XInitialization
+ virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rAny) override;
+
+ // XUpdatable
+ virtual void SAL_CALL update() override;
+
+ using comphelper::WeakComponentImplHelperBase::disposing;
+
+private:
+
+ css::uno::Reference<css::frame::XFramesSupplier> mxFramesSupplier;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ChartWindow.hxx b/chart2/source/controller/inc/ChartWindow.hxx
new file mode 100644
index 000000000..4ab65ddd9
--- /dev/null
+++ b/chart2/source/controller/inc/ChartWindow.hxx
@@ -0,0 +1,91 @@
+/* -*- 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 <vcl/window.hxx>
+
+namespace chart
+{
+
+class ChartController;
+
+/** The ChartWindow collects events from the window and forwards them the to the controller
+thus the controller can perform appropriate actions
+*/
+
+class ChartWindow final : public vcl::Window
+{
+public:
+ ChartWindow( ChartController* pController, vcl::Window* pParent, WinBits nStyle );
+ virtual ~ChartWindow() override;
+ virtual void dispose() override;
+
+ //from base class Window:
+ virtual void PrePaint(vcl::RenderContext& rRenderContext) override;
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
+ virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
+ virtual void MouseMove( const MouseEvent& rMEvt ) override;
+ virtual void Tracking( const TrackingEvent& rTEvt ) override;
+ virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
+ virtual void Resize() override;
+ virtual void Activate() override;
+ virtual void Deactivate() override;
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+ virtual void Command( const CommandEvent& rCEvt ) override;
+ virtual void KeyInput( const KeyEvent& rKEvt ) override;
+ 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;
+ /// Notify the LOK client about an invalidated area.
+ virtual void LogicInvalidate( const tools::Rectangle* pRectangle ) override;
+
+ virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
+
+ virtual FactoryFunction GetUITestFactory() const override;
+
+ ChartController* GetController();
+
+ virtual bool IsChart() const override { return true; }
+ vcl::Window* GetParentEditWin();
+
+private:
+ // returns the chart bounding box in twips
+ tools::Rectangle GetBoundingBox();
+
+private:
+ ChartController* m_pWindowController;
+ bool m_bInPaint;
+ VclPtr<vcl::Window> m_pViewShellWindow;
+
+ void adjustHighContrastMode();
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/CommandDispatchContainer.hxx b/chart2/source/controller/inc/CommandDispatchContainer.hxx
new file mode 100644
index 000000000..ae95313c0
--- /dev/null
+++ b/chart2/source/controller/inc/CommandDispatchContainer.hxx
@@ -0,0 +1,136 @@
+/* -*- 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 <unotools/weakref.hxx>
+#include <o3tl/sorted_vector.hxx>
+
+#include <map>
+#include <vector>
+
+namespace com::sun::star::frame { class XController; }
+namespace com::sun::star::frame { class XDispatch; }
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::frame { struct DispatchDescriptor; }
+namespace com::sun::star::uno { class XComponentContext; }
+namespace com::sun::star::util { struct URL; }
+
+namespace chart
+{
+class ChartModel;
+class DrawCommandDispatch;
+class ShapeController;
+
+/** @HTML
+
+ Helper class for implementing the <code>XDispatchProvider</code> interface
+ of the ChartController. This class handles all commands to queryDispatch and
+ queryDispatches in the following way:
+
+ <ul>
+ <li>Check if there is a cached <code>XDispatch</code> for a given command.
+ If so, use it.</li>
+ <li>Check if the command is handled by this class, e.g. Undo. If so,
+ return a corresponding <code>XDispatch</code> implementation, and cache
+ this implementation for later use</li>
+ <li>Otherwise send the command to the chart dispatch provider, if it
+ can handle this dispatch (determined by the list of commands given in
+ <code>setChartDispatch()</code>).</li>
+ </ul>
+
+ <p>The <code>XDispatch</code>Provider is designed to return different
+ <code>XDispatch</code> implementations for each command. This class here
+ decides which implementation to use for which command.</p>
+
+ <p>As most commands need much information of the controller and are
+ implemented there, the controller handles most of the commands itself (it
+ also implements <code>XDispatch</code>). Therefore it is set here as
+ chart dispatch.</p>
+ */
+class CommandDispatchContainer
+{
+public:
+ // note: the chart dispatcher should be removed when all commands are
+ // handled by other dispatchers. (Chart is currently the controller
+ // itself)
+ explicit CommandDispatchContainer(
+ const css::uno::Reference< css::uno::XComponentContext > & xContext );
+
+ void setModel(
+ const rtl::Reference<::chart::ChartModel> & xModel );
+
+ /** Set a chart dispatcher that is used for all commands contained in
+ rChartCommands
+ */
+ void setChartDispatch(
+ const css::uno::Reference< css::frame::XDispatch >& rChartDispatch,
+ o3tl::sorted_vector< OUString > && rChartCommands );
+
+ /** Returns the dispatch that is able to do the command given in rURL, if
+ implemented here. If the URL is not implemented here, it should be
+ checked whether the command is one of the commands given via
+ the setChartDispatch() method. If so, call the chart dispatch.
+
+ <p>If all this fails, return an empty dispatch.</p>
+ */
+ css::uno::Reference< css::frame::XDispatch > getDispatchForURL(
+ const css::util::URL & rURL );
+
+ css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > getDispatchesForURLs(
+ const css::uno::Sequence< css::frame::DispatchDescriptor > & aDescriptors );
+
+ void DisposeAndClear();
+
+ static css::uno::Reference< css::frame::XDispatch >
+ getContainerDispatchForURL(
+ const css::uno::Reference< css::frame::XController > & xChartController,
+ const css::util::URL & rURL );
+
+ const css::uno::Reference< css::frame::XDispatch > & getChartDispatcher() const { return m_xChartDispatcher; }
+
+ void setDrawCommandDispatch( DrawCommandDispatch* pDispatch );
+ DrawCommandDispatch* getDrawCommandDispatch() { return m_pDrawCommandDispatch; }
+ void setShapeController( ShapeController* pController );
+ ShapeController* getShapeController() { return m_pShapeController; }
+
+private:
+ typedef
+ std::map< OUString,
+ css::uno::Reference< css::frame::XDispatch > >
+ tDispatchMap;
+
+ typedef
+ std::vector< css::uno::Reference< css::frame::XDispatch > > tDisposeVector;
+
+ mutable tDispatchMap m_aCachedDispatches;
+ mutable tDisposeVector m_aToBeDisposedDispatches;
+
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ unotools::WeakReference< ::chart::ChartModel > m_xModel;
+
+ css::uno::Reference< css::frame::XDispatch > m_xChartDispatcher;
+ o3tl::sorted_vector< OUString > m_aChartCommands;
+
+ DrawCommandDispatch* m_pDrawCommandDispatch;
+ ShapeController* m_pShapeController;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ConfigurationAccess.hxx b/chart2/source/controller/inc/ConfigurationAccess.hxx
new file mode 100644
index 000000000..2fb4636d2
--- /dev/null
+++ b/chart2/source/controller/inc/ConfigurationAccess.hxx
@@ -0,0 +1,38 @@
+/* -*- 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
new file mode 100644
index 000000000..3c6e276ff
--- /dev/null
+++ b/chart2/source/controller/inc/DataPointItemConverter.hxx
@@ -0,0 +1,90 @@
+/* -*- 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 "ItemConverter.hxx"
+#include "GraphicPropertyItemConverter.hxx"
+#include <com/sun/star/uno/Sequence.h>
+
+#include <tools/color.hxx>
+#include <rtl/ref.hxx>
+
+#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 {
+
+class DataPointItemConverter final : public ItemConverter
+{
+public:
+ DataPointItemConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ const css::uno::Reference<css::uno::XComponentContext>& xContext,
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ 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,
+ bool bDataSeries = false,
+ bool bUseSpecialFillColor = false,
+ sal_Int32 nSpecialFillColor = 0,
+ bool bOverwriteLabelsForAttributedDataPointsAlso = false,
+ sal_Int32 nNumberFormat = 0,
+ sal_Int32 nPercentNumberFormat = 0,
+ sal_Int32 nPointIndex = -1 );
+
+ virtual ~DataPointItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+ bool m_bDataSeries;
+ bool m_bOverwriteLabelsForAttributedDataPointsAlso;
+ bool m_bUseSpecialFillColor;
+ Color m_nSpecialFillColor;
+ sal_Int32 m_nNumberFormat;
+ sal_Int32 m_nPercentNumberFormat;
+ css::uno::Sequence<sal_Int32> m_aAvailableLabelPlacements;
+ bool m_bForbidPercentValue;
+ bool m_bHideLegendEntry;
+ sal_Int32 m_nPointIndex;
+ rtl::Reference<::chart::DataSeries> m_xSeries;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/DrawViewWrapper.hxx b/chart2/source/controller/inc/DrawViewWrapper.hxx
new file mode 100644
index 000000000..28c2a927e
--- /dev/null
+++ b/chart2/source/controller/inc/DrawViewWrapper.hxx
@@ -0,0 +1,100 @@
+/* -*- 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 <memory>
+#include <svx/view3d.hxx>
+
+namespace com::sun::star::drawing { class XShape; }
+namespace com::sun::star::frame { class XModel; }
+
+class SdrModel;
+
+namespace chart
+{
+
+/** The DrawViewWrapper should help us to reduce effort if the underlying DrawingLayer changes.
+Another task is to hide functionality we do not need, for example more than one page.
+*/
+
+class MarkHandleProvider
+{
+public:
+ virtual bool getMarkHandles( SdrHdlList& rHdlList ) =0;
+ virtual bool getFrameDragSingles() =0;
+
+protected:
+ ~MarkHandleProvider() {}
+};
+
+class DrawViewWrapper final : public E3dView
+{
+public:
+ DrawViewWrapper(
+ SdrModel& rSdrModel,
+ OutputDevice* pOut);
+
+ virtual ~DrawViewWrapper() override;
+
+ //triggers the use of an updated first page
+ void ReInit();
+
+ /// tries to get an OutputDevice from the XParent of the model to use as reference device
+ void attachParentReferenceDevice(
+ const css::uno::Reference< css::frame::XModel > & xChartModel );
+
+ //fill list of selection handles 'aHdl'
+ virtual void SetMarkHandles(SfxViewShell* pOtherShell) override;
+
+ SdrPageView* GetPageView() const;
+
+ SdrObject* getHitObject( const Point& rPnt ) const;
+
+ void MarkObject( SdrObject* pObj );
+
+ //pMarkHandleProvider can be NULL; ownership is not taken
+ void setMarkHandleProvider( MarkHandleProvider* pMarkHandleProvider );
+ void CompleteRedraw(OutputDevice* pOut, const vcl::Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector = nullptr) override;
+
+ SdrObject* getSelectedObject() const;
+ SdrObject* getTextEditObject() const;
+ SdrOutliner* getOutliner() const;
+
+ SfxItemSet getPositionAndSizeItemSetFromMarkedObject() const;
+
+ SdrObject* getNamedSdrObject( const OUString& rName ) const;
+ static bool IsObjectHit( SdrObject const * pObj, const Point& rPnt );
+
+ virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
+
+ static SdrObject* getSdrObject( const css::uno::Reference< css::drawing::XShape >& xShape );
+
+private:
+ mutable MarkHandleProvider* m_pMarkHandleProvider;
+
+ std::unique_ptr< SdrOutliner > m_apOutliner;
+
+ // #i79965# scroll back view when ending text edit
+ bool m_bRestoreMapMode;
+ MapMode m_aMapModeToRestore;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ErrorBarItemConverter.hxx b/chart2/source/controller/inc/ErrorBarItemConverter.hxx
new file mode 100644
index 000000000..997bda7d2
--- /dev/null
+++ b/chart2/source/controller/inc/ErrorBarItemConverter.hxx
@@ -0,0 +1,60 @@
+/* -*- 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 "ItemConverter.hxx"
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::lang { class XMultiServiceFactory; }
+
+class SdrModel;
+
+namespace chart::wrapper
+{
+
+class ErrorBarItemConverter final : public ItemConverter
+{
+public:
+ ErrorBarItemConverter(
+ const css::uno::Reference< css::frame::XModel > & xChartModel,
+ const css::uno::Reference< css::beans::XPropertySet > & rPropertySet,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory );
+ virtual ~ErrorBarItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::shared_ptr< ItemConverter > m_spGraphicConverter;
+ css::uno::Reference< css::frame::XModel > m_xModel;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx b/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx
new file mode 100644
index 000000000..234e50751
--- /dev/null
+++ b/chart2/source/controller/inc/GraphicPropertyItemConverter.hxx
@@ -0,0 +1,64 @@
+/* -*- 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 "ItemConverter.hxx"
+
+namespace com::sun::star::lang { class XMultiServiceFactory; }
+
+class SdrModel;
+
+namespace chart::wrapper
+{
+
+enum class GraphicObjectType
+{
+ FilledDataPoint,
+ LineDataPoint,
+ LineProperties,
+ LineAndFillProperties
+};
+
+class GraphicPropertyItemConverter final : public ItemConverter
+{
+public:
+ GraphicPropertyItemConverter(
+ const css::uno::Reference< css::beans::XPropertySet > & rPropertySet,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory,
+ GraphicObjectType eObjectType );
+ virtual ~GraphicPropertyItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const override;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ GraphicObjectType m_GraphicObjectType;
+ SdrModel & m_rDrawModel;
+ css::uno::Reference< css::lang::XMultiServiceFactory > m_xNamedPropertyTableFactory;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ItemConverter.hxx b/chart2/source/controller/inc/ItemConverter.hxx
new file mode 100644
index 000000000..865268a3a
--- /dev/null
+++ b/chart2/source/controller/inc/ItemConverter.hxx
@@ -0,0 +1,185 @@
+/* -*- 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 <unotools/eventlisteneradapter.hxx>
+#include <svl/itemset.hxx>
+
+#include <utility>
+
+namespace com::sun::star::beans { class XPropertySet; }
+namespace com::sun::star::beans { class XPropertySetInfo; }
+
+namespace chart::wrapper {
+
+
+/** This class serves for conversion between properties of an XPropertySet and
+ SfxItems in SfxItemSets.
+
+ With this helper classes, you can feed dialogs with XPropertySets and let
+ those modify by the dialogs.
+
+ You must implement GetWhichPairs() such that an SfxItemSet created with
+ CreateEmptyItemSet() is able to hold all items that may be mapped.
+
+ You also have to implement GetItemProperty(), in order to return the
+ property name for a given which-id together with the corresponding member-id
+ that has to be used for conversion in QueryValue/PutValue.
+
+ FillSpecialItem and ApplySpecialItem may be used for special handling of
+ individual item, e.g. if you need member-ids in QueryValue/PutValue
+
+ A typical use could be the following:
+
+ ::comphelper::ChartTypeItemConverter aItemConverter( xPropertySet, GetItemPool() );
+ SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
+ aItemConverter.FillItemSet( aItemSet );
+ bool bChanged = false;
+
+ MyDialog aDlg( aItemSet );
+ if( aDlg.Execute() == RET_OK )
+ {
+ const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet();
+ if( pOutItemSet )
+ bChanged = aItemConverter.ApplyItemSet( *pOutItemSet );
+ }
+
+ if( bChanged )
+ {
+ [ apply model changes to view ]
+ }
+ */
+class ItemConverter :
+ public ::utl::OEventListenerAdapter
+{
+public:
+ /** Construct an item converter that uses the given property set for
+ reading/writing converted items
+ */
+ ItemConverter(
+ const css::uno::Reference< css::beans::XPropertySet > & rPropertySet ,
+ SfxItemPool& rItemPool );
+ virtual ~ItemConverter() override;
+
+ typedef sal_uInt16 tWhichIdType;
+ typedef OUString tPropertyNameType;
+ typedef sal_uInt8 tMemberIdType;
+
+ typedef std::pair< tPropertyNameType, tMemberIdType > tPropertyNameWithMemberId;
+
+ /** applies all properties that can be mapped to items into the given item
+ set.
+
+ Call this method before opening a dialog.
+
+ @param rOutItemSet
+ the SfxItemSet is filled with all items that are a result of a
+ conversion from a property of the internal XPropertySet.
+ */
+ virtual void FillItemSet( SfxItemSet & rOutItemSet ) const;
+
+ /** applies all properties that are results of a conversion from all items
+ in rItemSet to the internal XPropertySet.
+
+ Call this method after a dialog was closed with OK
+
+ @return true, if any properties have been changed, false otherwise.
+ */
+ virtual bool ApplyItemSet( const SfxItemSet & rItemSet );
+
+ /** creates an empty item set using the given pool or a common pool if empty
+ (see GetItemPool) and allowing all items given in the ranges returned by
+ GetWhichPairs.
+ */
+ SfxItemSet CreateEmptyItemSet() const;
+
+ /** Invalidates all items in rDestSet, that are set (state SfxItemState::SET) in
+ both item sets (rDestSet and rSourceSet) and have differing content.
+ */
+ static void InvalidateUnequalItems( SfxItemSet &rDestSet, const SfxItemSet &rSourceSet );
+
+protected:
+
+ /** implement this method to provide an array of which-ranges
+ */
+ virtual const WhichRangesContainer& GetWhichPairs() const = 0;
+
+ /** implement this method to return a Property object for a given which id.
+
+ @param rOutProperty
+ If true is returned, this contains the property name and the
+ corresponding Member-Id.
+
+ @return true, if the item can be mapped to a property.
+ */
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const = 0;
+
+ /** for items that can not be mapped directly to a property.
+
+ This method is called from FillItemSet(), if GetItemProperty() returns
+ false.
+
+ The default implementation does nothing except showing an assertion
+
+ @throws css::uno::Exception
+ */
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const;
+
+ /** for items that can not be mapped directly to a property.
+
+ This method is called from ApplyItemSet(), if GetItemProperty() returns
+ false.
+
+ The default implementation returns just false and shows an assertion
+
+ @return true if the item changed a property, false otherwise.
+
+ @throws css::uno::Exception
+ */
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet );
+
+ /// Returns the pool
+ SfxItemPool & GetItemPool() const { return m_rItemPool;}
+
+ /** Returns the XPropertySet that was given in the CTOR and is used to apply
+ items in ApplyItemSet().
+ */
+ const css::uno::Reference< css::beans::XPropertySet >& GetPropertySet() const { return m_xPropertySet;}
+
+ // ____ ::utl::OEventListenerAdapter ____
+ virtual void _disposing( const css::lang::EventObject& rSource ) override;
+
+protected:
+ /** sets a new property set, that you get with GetPropertySet(). It should
+ not be necessary to use this method. It is introduced to allow changing
+ the regression type of a regression curve which changes the object
+ identity.
+ */
+ void resetPropertySet( const css::uno::Reference< css::beans::XPropertySet > & xPropSet );
+
+private:
+ css::uno::Reference< css::beans::XPropertySet > m_xPropertySet;
+ css::uno::Reference< css::beans::XPropertySetInfo > m_xPropertySetInfo;
+
+ SfxItemPool& m_rItemPool;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ItemPropertyMap.hxx b/chart2/source/controller/inc/ItemPropertyMap.hxx
new file mode 100644
index 000000000..7bee6ae81
--- /dev/null
+++ b/chart2/source/controller/inc/ItemPropertyMap.hxx
@@ -0,0 +1,34 @@
+/* -*- 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 <sal/config.h>
+
+#include "ItemConverter.hxx"
+
+#include <map>
+
+namespace chart::wrapper
+{
+typedef std::map<ItemConverter::tWhichIdType,
+ std::pair<ItemConverter::tPropertyNameType, ItemConverter::tMemberIdType>>
+ ItemPropertyMapType;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/LegendItemConverter.hxx b/chart2/source/controller/inc/LegendItemConverter.hxx
new file mode 100644
index 000000000..3e9315acc
--- /dev/null
+++ b/chart2/source/controller/inc/LegendItemConverter.hxx
@@ -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/.
+ *
+ * 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 "ItemConverter.hxx"
+
+#include <vector>
+
+namespace com::sun::star::awt { struct Size; }
+namespace com::sun::star::lang { class XMultiServiceFactory; }
+
+class SdrModel;
+
+namespace chart::wrapper
+{
+
+class LegendItemConverter final : public ItemConverter
+{
+public:
+ LegendItemConverter(
+ 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 );
+
+ virtual ~LegendItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/MultipleChartConverters.hxx b/chart2/source/controller/inc/MultipleChartConverters.hxx
new file mode 100644
index 000000000..4fe1bb1de
--- /dev/null
+++ b/chart2/source/controller/inc/MultipleChartConverters.hxx
@@ -0,0 +1,103 @@
+/* -*- 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 "MultipleItemConverter.hxx"
+#include <rtl/ref.hxx>
+
+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; }
+class SdrModel;
+
+namespace chart::wrapper {
+
+class AllAxisItemConverter final : public MultipleItemConverter
+{
+public:
+ AllAxisItemConverter(
+ const rtl::Reference<::chart::ChartModel> & xChartModel,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::awt::Size* pRefSize );
+
+ virtual ~AllAxisItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+};
+
+class AllGridItemConverter final : public MultipleItemConverter
+{
+public:
+ AllGridItemConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::uno::Reference<css::lang::XMultiServiceFactory> & xNamedPropertyContainerFactory );
+ virtual ~AllGridItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+};
+
+class AllDataLabelItemConverter final : public MultipleItemConverter
+{
+public:
+ AllDataLabelItemConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::uno::Reference<css::lang::XMultiServiceFactory>& xNamedPropertyContainerFactory );
+
+ virtual ~AllDataLabelItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+};
+
+class AllTitleItemConverter final : public MultipleItemConverter
+{
+public:
+ AllTitleItemConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ SfxItemPool& rItemPool, SdrModel& rDrawModel,
+ const css::uno::Reference<css::lang::XMultiServiceFactory>& xNamedPropertyContainerFactory );
+
+ virtual ~AllTitleItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+};
+
+class AllSeriesStatisticsConverter final : public MultipleItemConverter
+{
+public:
+ AllSeriesStatisticsConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel, SfxItemPool& rItemPool );
+ virtual ~AllSeriesStatisticsConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/MultipleItemConverter.hxx b/chart2/source/controller/inc/MultipleItemConverter.hxx
new file mode 100644
index 000000000..e2e8f0775
--- /dev/null
+++ b/chart2/source/controller/inc/MultipleItemConverter.hxx
@@ -0,0 +1,49 @@
+/* -*- 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 "ItemConverter.hxx"
+
+#include <vector>
+
+namespace chart::wrapper {
+
+/** Note: virtual const sal_uInt16 * GetWhichPairs() const; is still pure virtual
+ */
+class MultipleItemConverter : public ItemConverter
+{
+public:
+ virtual ~MultipleItemConverter() override;
+
+ virtual void FillItemSet( SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplyItemSet( const SfxItemSet & rItemSet ) override;
+
+ /// implemented empty (returns always false)
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const override;
+
+protected:
+ MultipleItemConverter( SfxItemPool& rItemPool );
+
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ObjectHierarchy.hxx b/chart2/source/controller/inc/ObjectHierarchy.hxx
new file mode 100644
index 000000000..55c073bf2
--- /dev/null
+++ b/chart2/source/controller/inc/ObjectHierarchy.hxx
@@ -0,0 +1,127 @@
+/* -*- 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 <ChartModel.hxx>
+#include <ObjectIdentifier.hxx>
+#include <map>
+#include <vector>
+
+namespace com::sun::star::awt { struct KeyEvent; }
+namespace com::sun::star::chart2 { class XChartDocument; }
+
+namespace chart
+{
+
+class ExplicitValueProvider;
+
+class ObjectHierarchy
+{
+public:
+ typedef std::vector< ObjectIdentifier > tChildContainer;
+
+ /** @param bFlattenDiagram
+ If <TRUE/>, the content of the diagram (data series, wall, floor,
+ etc.) is treated as being at the same level as the diagram. (This is
+ used for keyboard navigation).
+ */
+ explicit ObjectHierarchy(
+ const rtl::Reference<::chart::ChartModel> & xChartDocument,
+ ExplicitValueProvider * pExplicitValueProvider,
+ bool bFlattenDiagram = false,
+ bool bOrderingForElementSelector = false );
+ ~ObjectHierarchy();
+
+ static ObjectIdentifier getRootNodeOID();
+ 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;
+
+ /// The result is empty, if the node cannot be found in the tree
+ ObjectIdentifier getParent( const ObjectIdentifier& rNode ) const;
+ /// @returns -1, if no parent can be determined
+ sal_Int32 getIndexInParent( const ObjectIdentifier& rNode ) const;
+
+private:
+ void createTree( const rtl::Reference<::chart::ChartModel> & xChartDocument );
+ void createAxesTree(
+ ObjectHierarchy::tChildContainer & rContainer,
+ const rtl::Reference<::chart::ChartModel> & xChartDoc,
+ const rtl::Reference< ::chart::Diagram > & xDiagram );
+ void createDiagramTree(
+ ObjectHierarchy::tChildContainer& rContainer,
+ const rtl::Reference<::chart::ChartModel>& xChartDoc,
+ const rtl::Reference< ::chart::Diagram >& xDiagram );
+ void createDataSeriesTree(
+ ObjectHierarchy::tChildContainer & rOutDiagramSubContainer,
+ const rtl::Reference< ::chart::Diagram > & xDiagram );
+ static void createWallAndFloor(
+ ObjectHierarchy::tChildContainer & rContainer,
+ const rtl::Reference< ::chart::Diagram > & xDiagram );
+ void createLegendTree(
+ ObjectHierarchy::tChildContainer & rContainer,
+ const rtl::Reference<::chart::ChartModel> & xChartDoc,
+ const rtl::Reference< ::chart::Diagram > & xDiagram );
+ void createAdditionalShapesTree( ObjectHierarchy::tChildContainer& rContainer );
+ ObjectIdentifier getParentImpl(
+ const ObjectIdentifier& rParentOID,
+ const ObjectIdentifier& rOID ) const;
+
+ typedef std::map< ObjectIdentifier, ObjectHierarchy::tChildContainer >
+ tChildMap;
+ tChildMap m_aChildMap;
+ ExplicitValueProvider* m_pExplicitValueProvider;
+ bool m_bFlattenDiagram;
+ bool m_bOrderingForElementSelector;
+};
+
+class ObjectKeyNavigation
+{
+public:
+ explicit ObjectKeyNavigation( const ObjectIdentifier & rCurrentOID,
+ const rtl::Reference<::chart::ChartModel> & xChartDocument,
+ ExplicitValueProvider * pExplicitValueProvider );
+
+ bool handleKeyEvent( const css::awt::KeyEvent & rEvent );
+ const ObjectIdentifier& getCurrentSelection() const { return m_aCurrentOID;}
+
+private:
+ void setCurrentSelection( const ObjectIdentifier& rOID );
+ bool first();
+ bool last();
+ bool next();
+ bool previous();
+ bool up();
+ bool down();
+ bool veryFirst();
+ bool veryLast();
+
+ ObjectIdentifier m_aCurrentOID;
+ rtl::Reference<::chart::ChartModel> m_xChartDocument;
+ ExplicitValueProvider * m_pExplicitValueProvider;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ObjectNameProvider.hxx b/chart2/source/controller/inc/ObjectNameProvider.hxx
new file mode 100644
index 000000000..276e58977
--- /dev/null
+++ b/chart2/source/controller/inc/ObjectNameProvider.hxx
@@ -0,0 +1,69 @@
+/* -*- 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 <ObjectIdentifier.hxx>
+#include <TitleHelper.hxx>
+
+namespace com::sun::star::chart2 { class XChartDocument; }
+namespace com::sun::star::frame { class XModel; }
+
+namespace chart
+{
+
+/** Provides localized ui strings for the userinterface.
+*/
+
+class ObjectNameProvider
+{
+public:
+ static OUString getName( ObjectType eObjectType, bool bPlural=false );
+ static OUString getAxisName( const OUString& rObjectCID
+ , const rtl::Reference<::chart::ChartModel>& xChartModel );
+ static OUString getGridName( const OUString& rObjectCID
+ , const rtl::Reference<::chart::ChartModel>& xChartModel );
+ static OUString getTitleName( const OUString& rObjectCID
+ , const rtl::Reference<::chart::ChartModel>& xChartModel );
+ static OUString getTitleNameByType( TitleHelper::eTitleType eType );
+
+ static OUString getNameForCID(
+ const OUString& rObjectCID,
+ const rtl::Reference<::chart::ChartModel>& xChartDocument );
+
+ static OUString getName_ObjectForSeries(
+ ObjectType eObjectType,
+ const OUString& 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 );
+
+ /** 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 );
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/PositionAndSizeHelper.hxx b/chart2/source/controller/inc/PositionAndSizeHelper.hxx
new file mode 100644
index 000000000..f70ccf302
--- /dev/null
+++ b/chart2/source/controller/inc/PositionAndSizeHelper.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/.
+ *
+ * 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 <ObjectIdentifier.hxx>
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::awt { struct Rectangle; }
+
+namespace chart
+{
+
+class PositionAndSizeHelper
+{
+public:
+ static bool moveObject( ObjectType eObjectType
+ , const css::uno::Reference< css::beans::XPropertySet >& xObjectProp
+ , const css::awt::Rectangle& rNewPositionAndSize
+ , const css::awt::Rectangle& rOldPositionAndSize
+ , const css::awt::Rectangle& rPageRectangle );
+
+ static bool moveObject( const OUString& rObjectCID
+ , const rtl::Reference<::chart::ChartModel>& xChartModel
+ , const css::awt::Rectangle& rNewPositionAndSize
+ , const css::awt::Rectangle& rOldPositionAndSize
+ , const css::awt::Rectangle& rPageRectangle );
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/RangeSelectionHelper.hxx b/chart2/source/controller/inc/RangeSelectionHelper.hxx
new file mode 100644
index 000000000..02db335a1
--- /dev/null
+++ b/chart2/source/controller/inc/RangeSelectionHelper.hxx
@@ -0,0 +1,71 @@
+/* -*- 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 <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/Sequence.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::beans { struct PropertyValue; }
+namespace com::sun::star::chart2 { class XChartDocument; }
+
+namespace com::sun::star {
+ namespace sheet{
+ class XRangeSelection;
+ class XRangeSelectionListener;
+ }
+}
+
+namespace chart
+{
+class ChartModel;
+class RangeSelectionListenerParent;
+
+class RangeSelectionHelper
+{
+public:
+ explicit RangeSelectionHelper(
+ const rtl::Reference<::chart::ChartModel> & xChartDocument );
+ ~RangeSelectionHelper();
+
+ bool hasRangeSelection();
+ css::uno::Reference< css::sheet::XRangeSelection > const & getRangeSelection();
+ void raiseRangeSelectionDocument();
+ bool chooseRange(
+ const OUString & aCurrentRange,
+ const OUString & aUIString,
+ RangeSelectionListenerParent & rListenerParent );
+ void stopRangeListening( bool bRemoveListener = true );
+ bool verifyCellRange( const OUString & rRangeStr );
+ bool verifyArguments( const css::uno::Sequence< css::beans::PropertyValue >& rArguments );
+
+private:
+ css::uno::Reference< css::sheet::XRangeSelection >
+ m_xRangeSelection;
+
+ rtl::Reference<::chart::ChartModel> m_xChartDocument;
+
+ css::uno::Reference< css::sheet::XRangeSelectionListener >
+ m_xRangeSelectionListener;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/RangeSelectionListener.hxx b/chart2/source/controller/inc/RangeSelectionListener.hxx
new file mode 100644
index 000000000..29bea261c
--- /dev/null
+++ b/chart2/source/controller/inc/RangeSelectionListener.hxx
@@ -0,0 +1,70 @@
+/* -*- 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 <ControllerLockGuard.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/sheet/XRangeSelectionListener.hpp>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::frame
+{
+class XModel;
+}
+
+namespace chart
+{
+class ChartModel;
+
+class RangeSelectionListenerParent
+{
+public:
+ virtual void listeningFinished(const OUString& rNewRange) = 0;
+ virtual void disposingRangeSelection() = 0;
+
+protected:
+ ~RangeSelectionListenerParent() {}
+};
+
+class RangeSelectionListener final
+ : public ::cppu::WeakImplHelper<css::sheet::XRangeSelectionListener>
+{
+public:
+ explicit RangeSelectionListener(
+ RangeSelectionListenerParent& rParent, const OUString& rInitialRange,
+ const rtl::Reference<::chart::ChartModel>& xModelToLockController);
+ virtual ~RangeSelectionListener() override;
+
+protected:
+ // ____ XRangeSelectionListener ____
+ virtual void SAL_CALL done(const css::sheet::RangeSelectionEvent& aEvent) override;
+ virtual void SAL_CALL aborted(const css::sheet::RangeSelectionEvent& aEvent) override;
+
+ // ____ XEventListener ____
+ virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
+
+private:
+ RangeSelectionListenerParent& m_rParent;
+ OUString m_aRange;
+ ControllerLockGuardUNO m_aControllerLockGuard;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/RegressionCurveItemConverter.hxx b/chart2/source/controller/inc/RegressionCurveItemConverter.hxx
new file mode 100644
index 000000000..30c74c4c2
--- /dev/null
+++ b/chart2/source/controller/inc/RegressionCurveItemConverter.hxx
@@ -0,0 +1,60 @@
+/* -*- 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 "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
+{
+
+class RegressionCurveItemConverter final : public ItemConverter
+{
+public:
+ RegressionCurveItemConverter(
+ const css::uno::Reference< css::beans::XPropertySet > & rPropertySet,
+ const rtl::Reference< ::chart::DataSeries > & xRegCurveCnt,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const css::uno::Reference< css::lang::XMultiServiceFactory > & xNamedPropertyContainerFactory );
+ virtual ~RegressionCurveItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::shared_ptr< ItemConverter > m_spGraphicConverter;
+ rtl::Reference< ::chart::DataSeries > m_xCurveContainer;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/RegressionEquationItemConverter.hxx b/chart2/source/controller/inc/RegressionEquationItemConverter.hxx
new file mode 100644
index 000000000..0b32e4b9e
--- /dev/null
+++ b/chart2/source/controller/inc/RegressionEquationItemConverter.hxx
@@ -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/.
+ *
+ * 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 "ItemConverter.hxx"
+
+#include <vector>
+
+namespace com::sun::star::awt { struct Size; }
+namespace com::sun::star::beans { class XPropertySet; }
+namespace com::sun::star::lang { class XMultiServiceFactory; }
+
+class SdrModel;
+
+namespace chart::wrapper {
+
+class RegressionEquationItemConverter final : public ItemConverter
+{
+public:
+ RegressionEquationItemConverter(
+ 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 );
+
+ virtual ~RegressionEquationItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/SelectionHelper.hxx b/chart2/source/controller/inc/SelectionHelper.hxx
new file mode 100644
index 000000000..ff0e95eee
--- /dev/null
+++ b/chart2/source/controller/inc/SelectionHelper.hxx
@@ -0,0 +1,115 @@
+/* -*- 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 "DrawViewWrapper.hxx"
+#include <ObjectIdentifier.hxx>
+
+class SdrObject;
+
+namespace com::sun::star::drawing { class XShape; }
+
+namespace chart
+{
+
+class Selection
+{
+public: //methods
+ bool hasSelection() const;
+
+ OUString const & getSelectedCID() const;
+ css::uno::Reference< css::drawing::XShape > const & getSelectedAdditionalShape() const;
+ const ObjectIdentifier& getSelectedOID() const { return m_aSelectedOID;}
+
+ bool isResizeableObjectSelected() const;
+ bool isRotateableObjectSelected( const rtl::Reference<::chart::ChartModel>& xChartModel ) const;
+ bool isDragableObjectSelected() const;
+
+ bool isAdditionalShapeSelected() const;
+
+ //returns true if selection has changed
+ bool setSelection( const OUString& rCID );
+ bool setSelection( const css::uno::Reference< css::drawing::XShape >& xShape );
+
+ void clearSelection();
+
+ //returns true if the selection has changed
+ bool maybeSwitchSelectionAfterSingleClickWasEnsured();
+ void resetPossibleSelectionAfterSingleClickWasEnsured();
+
+ void remindSelectionBeforeMouseDown();
+ bool isSelectionDifferentFromBeforeMouseDown() const;
+
+ void adaptSelectionToNewPos( const Point& rMousePos, DrawViewWrapper const * pDrawViewWrapper
+ , bool bIsRightMouse, bool bWaitingForDoubleClick );
+
+ void applySelection( DrawViewWrapper* pDrawViewWrapper );
+
+private: //member
+ //the selection could be given by a CID or by a shape
+ //if m_aSelectedObjectCID is not empty this indicates the selection
+ //the content of m_xSelectedShape is ignored in that case
+ //the strings are used for autogenerated chart specific objects
+ //the shape reference is used for additional shapes
+ ObjectIdentifier m_aSelectedOID; //only single object selection so far
+ ObjectIdentifier m_aSelectedOID_beforeMouseDown;
+ ObjectIdentifier m_aSelectedOID_selectOnlyIfNoDoubleClickIsFollowing;
+};
+
+class SelectionHelper final : public MarkHandleProvider
+{
+public:
+ static bool findNamedParent( SdrObject*& pInOutObject
+ , OUString& rOutName
+ , bool bGivenObjectMayBeResult );
+ static bool findNamedParent( SdrObject*& pInOutObject
+ , ObjectIdentifier& rOutObject
+ , bool bGivenObjectMayBeResult );
+ static SdrObject* getMarkHandlesObject( SdrObject* pObj );
+ static E3dScene* getSceneToRotate( SdrObject* pObj );
+ static bool isDragableObjectHitTwice( const Point& rMPos
+ , const OUString& rNameOfSelectedObject
+ , const DrawViewWrapper& rDrawViewWrapper );
+
+ static OUString getHitObjectCID(
+ const Point& rMPos,
+ DrawViewWrapper const & rDrawViewWrapper,
+ bool bGetDiagramInsteadOf_Wall=false );
+
+ static bool isRotateableObject( std::u16string_view rCID
+ , const rtl::Reference<::chart::ChartModel>& xChartModel );
+
+ explicit SelectionHelper( SdrObject* pSelectedObj );
+ virtual ~SelectionHelper();
+
+ //MarkHandleProvider:
+ virtual bool getMarkHandles( SdrHdlList& rHdlList ) override;
+ virtual bool getFrameDragSingles() override;
+
+ SdrObject* getObjectToMark();//sets also internally the mark object
+ //-> getMarkHandles will behave different if this method has found a Mark Object different from m_pSelectedObj
+
+private:
+ SdrObject* m_pSelectedObj;//hit and logically selected object
+ SdrObject* m_pMarkObj;//object that is marked instead to have more pretty handles
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx b/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx
new file mode 100644
index 000000000..f9bc42dcc
--- /dev/null
+++ b/chart2/source/controller/inc/SeriesOptionsItemConverter.hxx
@@ -0,0 +1,83 @@
+/* -*- 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 "ItemConverter.hxx"
+#include <com/sun/star/uno/Sequence.h>
+#include <rtl/ref.hxx>
+
+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::wrapper
+{
+
+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,
+ SfxItemPool& rItemPool );
+ virtual ~SeriesOptionsItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const override;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ rtl::Reference<::chart::ChartModel> m_xChartModel;
+ css::uno::Reference< css::uno::XComponentContext> m_xCC;
+
+ bool m_bAttachToMainAxis;
+ bool m_bSupportingOverlapAndGapWidthProperties;
+ bool m_bSupportingBarConnectors;
+
+ sal_Int32 m_nBarOverlap;
+ sal_Int32 m_nGapWidth;
+ bool m_bConnectBars;
+
+ bool m_bSupportingAxisSideBySide;
+ bool m_bGroupBarsPerAxis;
+
+ bool m_bSupportingStartingAngle;
+ sal_Int32 m_nStartingAngle;
+
+ bool m_bClockwise;
+ rtl::Reference< ::chart::BaseCoordinateSystem > m_xCooSys;
+
+ css::uno::Sequence< sal_Int32 > m_aSupportedMissingValueTreatments;
+ sal_Int32 m_nMissingValueTreatment;
+
+ bool m_bSupportingPlottingOfHiddenCells;
+ bool m_bIncludeHiddenCells;
+
+ bool m_bHideLegendEntry;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ShapeController.h b/chart2/source/controller/inc/ShapeController.h
new file mode 100644
index 000000000..392c28d2f
--- /dev/null
+++ b/chart2/source/controller/inc/ShapeController.h
@@ -0,0 +1,38 @@
+/* -*- 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
new file mode 100644
index 000000000..b82c1c230
--- /dev/null
+++ b/chart2/source/controller/inc/StatisticsItemConverter.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/.
+ *
+ * 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 "ItemConverter.hxx"
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::frame { class XModel; }
+namespace chart { class ChartModel; }
+
+namespace chart::wrapper
+{
+
+class StatisticsItemConverter final : public ItemConverter
+{
+public:
+ StatisticsItemConverter(
+ const rtl::Reference<::chart::ChartModel> & xChartModel,
+ const css::uno::Reference< css::beans::XPropertySet > & rPropertySet,
+ SfxItemPool& rItemPool );
+ virtual ~StatisticsItemConverter() override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const override;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ rtl::Reference<::chart::ChartModel> m_xModel;
+};
+
+} // namespace chart::wrapper
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TabPageNotifiable.hxx b/chart2/source/controller/inc/TabPageNotifiable.hxx
new file mode 100644
index 000000000..440cda2de
--- /dev/null
+++ b/chart2/source/controller/inc/TabPageNotifiable.hxx
@@ -0,0 +1,42 @@
+/* -*- 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
+
+// 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
+#define RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR Color(0xff6563)
+
+class BuilderPage;
+
+namespace chart
+{
+class TabPageNotifiable
+{
+public:
+ virtual void setInvalidPage(BuilderPage* pTabPage) = 0;
+ virtual void setValidPage(BuilderPage* pTabPage) = 0;
+
+protected:
+ ~TabPageNotifiable() {}
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TextDirectionListBox.hxx b/chart2/source/controller/inc/TextDirectionListBox.hxx
new file mode 100644
index 000000000..d346a23cb
--- /dev/null
+++ b/chart2/source/controller/inc/TextDirectionListBox.hxx
@@ -0,0 +1,34 @@
+/* -*- 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 <svx/frmdirlbox.hxx>
+
+namespace chart
+{
+class TextDirectionListBox final : public svx::FrameDirectionListBox
+{
+public:
+ explicit TextDirectionListBox(std::unique_ptr<weld::ComboBox> pControl);
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TextLabelItemConverter.hxx b/chart2/source/controller/inc/TextLabelItemConverter.hxx
new file mode 100644
index 000000000..9df2a65e1
--- /dev/null
+++ b/chart2/source/controller/inc/TextLabelItemConverter.hxx
@@ -0,0 +1,74 @@
+/* -*- 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 "ItemConverter.hxx"
+
+#include <com/sun/star/uno/Sequence.h>
+#include <rtl/ref.hxx>
+#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 {
+
+class TextLabelItemConverter final : public ItemConverter
+{
+public:
+ TextLabelItemConverter(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ const css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ const rtl::Reference<::chart::DataSeries>& xSeries,
+ SfxItemPool& rItemPool,
+ const css::awt::Size* pRefSize,
+ bool bDataSeries,
+ sal_Int32 nNumberFormat,
+ sal_Int32 nPercentNumberFormat );
+
+ virtual ~TextLabelItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector<std::unique_ptr<ItemConverter>> maConverters;
+ sal_Int32 mnNumberFormat;
+ sal_Int32 mnPercentNumberFormat;
+ css::uno::Sequence<sal_Int32> maAvailableLabelPlacements;
+
+ bool mbDataSeries:1;
+ bool mbForbidPercentValue:1;
+
+ rtl::Reference<::chart::DataSeries> m_xSeries;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx b/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx
new file mode 100644
index 000000000..34a4880c0
--- /dev/null
+++ b/chart2/source/controller/inc/TimerTriggeredControllerLock.hxx
@@ -0,0 +1,58 @@
+/* -*- 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 <vcl/timer.hxx>
+#include <rtl/ref.hxx>
+
+#include <memory>
+
+namespace com::sun::star::frame
+{
+class XModel;
+}
+namespace chart
+{
+class ControllerLockGuardUNO;
+}
+
+namespace chart
+{
+class ChartModel;
+
+class TimerTriggeredControllerLock final
+{
+public:
+ TimerTriggeredControllerLock(const rtl::Reference<::chart::ChartModel>& xModel);
+ ~TimerTriggeredControllerLock();
+
+ void startTimer();
+
+private:
+ rtl::Reference<::chart::ChartModel> m_xModel;
+ std::unique_ptr<ControllerLockGuardUNO> m_apControllerLockGuard;
+ AutoTimer m_aTimer;
+
+ DECL_LINK(TimerTimeout, Timer*, void);
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TitleDialogData.hxx b/chart2/source/controller/inc/TitleDialogData.hxx
new file mode 100644
index 000000000..70b03c8a6
--- /dev/null
+++ b/chart2/source/controller/inc/TitleDialogData.hxx
@@ -0,0 +1,53 @@
+/* -*- 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 <ReferenceSizeProvider.hxx>
+#include <memory>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace chart
+{
+class ChartModel;
+
+struct TitleDialogData
+{
+ css::uno::Sequence< sal_Bool > aPossibilityList;
+ css::uno::Sequence< sal_Bool > aExistenceList;
+ css::uno::Sequence< OUString > aTextList;
+ std::unique_ptr< ReferenceSizeProvider > apReferenceSizeProvider;
+
+ TitleDialogData(std::unique_ptr<ReferenceSizeProvider> pReferenzeSizeProvider = nullptr);
+
+ void readFromModel( const rtl::Reference<::chart::ChartModel>& xChartModel );
+ /* return true if anything has changed;
+ when pOldState is NULL then all data are written to the model
+ */
+ bool writeDifferenceToModel( const rtl::Reference<::chart::ChartModel>& xChartModel
+ , const css::uno::Reference< css::uno::XComponentContext >& xContext
+ , const TitleDialogData* pOldState=nullptr );
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/TitleItemConverter.hxx b/chart2/source/controller/inc/TitleItemConverter.hxx
new file mode 100644
index 000000000..5a2686d62
--- /dev/null
+++ b/chart2/source/controller/inc/TitleItemConverter.hxx
@@ -0,0 +1,59 @@
+/* -*- 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 "ItemConverter.hxx"
+
+#include <vector>
+
+namespace com::sun::star::awt { struct Size; }
+namespace com::sun::star::lang { class XMultiServiceFactory; }
+
+class SdrModel;
+
+namespace chart::wrapper {
+
+class TitleItemConverter final : public ItemConverter
+{
+public:
+ TitleItemConverter(
+ 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 );
+
+ virtual ~TitleItemConverter() 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;
+
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const override;
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) override;
+
+private:
+ std::vector< std::unique_ptr<ItemConverter> > m_aConverters;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/ViewElementListProvider.hxx b/chart2/source/controller/inc/ViewElementListProvider.hxx
new file mode 100644
index 000000000..d8b8ffc42
--- /dev/null
+++ b/chart2/source/controller/inc/ViewElementListProvider.hxx
@@ -0,0 +1,63 @@
+/* -*- 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 <memory>
+#include <svx/xtable.hxx>
+
+class FontList;
+class SdrObjList;
+class SfxItemSet;
+
+namespace chart
+{
+
+class DrawModelWrapper;
+
+class ViewElementListProvider final
+{
+public:
+ ViewElementListProvider( DrawModelWrapper* pDrawModelWrapper );
+ ViewElementListProvider(ViewElementListProvider&&) noexcept;
+ ~ViewElementListProvider();
+
+ XColorListRef GetColorTable() const;
+ XDashListRef GetDashList() const;
+ XLineEndListRef GetLineEndList() const;
+ XGradientListRef GetGradientList() const;
+ XHatchListRef GetHatchList() const;
+ XBitmapListRef GetBitmapList() const;
+ XPatternListRef GetPatternList() const;
+
+ //create chartspecific symbols for linecharts
+ SdrObjList* GetSymbolList() const;
+ Graphic GetSymbolGraphic( sal_Int32 nStandardSymbol, const SfxItemSet* pSymbolShapeProperties ) const;
+
+ FontList* getFontList() const;
+ //SfxPrinter* getPrinter();
+
+private:
+ DrawModelWrapper* m_pDrawModelWrapper;
+ mutable std::unique_ptr<FontList> m_pFontList;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_ChartType.hxx b/chart2/source/controller/inc/dlg_ChartType.hxx
new file mode 100644
index 000000000..7520869e8
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_ChartType.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/.
+ *
+ * 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 <vcl/weld.hxx>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::frame
+{
+class XModel;
+}
+
+namespace chart
+{
+class ChartModel;
+class ChartTypeTabPage;
+
+class ChartTypeDialog final : public weld::GenericDialogController
+{
+public:
+ ChartTypeDialog(weld::Window* pWindow, const rtl::Reference<::chart::ChartModel>& xChartModel);
+ virtual ~ChartTypeDialog() override;
+
+private:
+ rtl::Reference<::chart::ChartModel> m_xChartModel;
+ std::unique_ptr<weld::Container> m_xContentArea;
+ std::unique_ptr<ChartTypeTabPage> m_xChartTypeTabPage;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_ChartType_UNO.hxx b/chart2/source/controller/inc/dlg_ChartType_UNO.hxx
new file mode 100644
index 000000000..4566ec751
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_ChartType_UNO.hxx
@@ -0,0 +1,67 @@
+/* -*- 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 <comphelper/proparrhlp.hxx>
+#include <svtools/genericunodialog.hxx>
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::beans { class XPropertySetInfo; }
+
+namespace chart
+{
+class ChartModel;
+
+typedef ::svt::OGenericUnoDialog ChartTypeUnoDlg_BASE;
+class ChartTypeUnoDlg final : public ChartTypeUnoDlg_BASE
+ ,public ::comphelper::OPropertyArrayUsageHelper< ChartTypeUnoDlg >
+{
+public:
+ ChartTypeUnoDlg( const css::uno::Reference< css::uno::XComponentContext >& xContext );
+
+private:
+ virtual ~ChartTypeUnoDlg() override;
+
+ // OGenericUnoDialog overridables
+ virtual void implInitialize(const css::uno::Any& _rValue) override;
+ virtual std::unique_ptr<weld::DialogController> createDialog(const css::uno::Reference<css::awt::XWindow>& rParent) override;
+
+ // XTypeProvider
+ virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( ) override;
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() override;
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
+
+ ChartTypeUnoDlg(const ChartTypeUnoDlg&) = delete;
+ void operator =(const ChartTypeUnoDlg&) = delete;
+
+ rtl::Reference<::chart::ChartModel> m_xChartModel;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_CreationWizard.hxx b/chart2/source/controller/inc/dlg_CreationWizard.hxx
new file mode 100644
index 000000000..a0fcc9dae
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_CreationWizard.hxx
@@ -0,0 +1,83 @@
+/* -*- 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 "TimerTriggeredControllerLock.hxx"
+#include "TabPageNotifiable.hxx"
+
+#include <rtl/ref.hxx>
+#include <vcl/roadmapwizard.hxx>
+
+#include <memory>
+
+namespace com::sun::star::chart2
+{
+class XChartDocument;
+}
+namespace com::sun::star::uno
+{
+class XComponentContext;
+}
+
+using vcl::WizardTypes::WizardState;
+using vcl::WizardTypes::CommitPageReason;
+
+namespace chart
+{
+class ChartModel;
+class ChartTypeTemplateProvider;
+class DialogModel;
+
+class CreationWizard final : public vcl::RoadmapWizardMachine, public TabPageNotifiable
+{
+public:
+ CreationWizard(weld::Window* pParent, const rtl::Reference<::chart::ChartModel>& xChartModel,
+ const css::uno::Reference<css::uno::XComponentContext>& xContext);
+
+ CreationWizard() = delete;
+ virtual ~CreationWizard() override;
+
+ // TabPageNotifiable
+ virtual void setInvalidPage(BuilderPage* pTabPage) override;
+ virtual void setValidPage(BuilderPage* pTabPage) override;
+
+protected:
+ virtual bool leaveState(WizardState _nState) override;
+ virtual WizardState determineNextState(WizardState nCurrentState) const override;
+ virtual void enterState(WizardState nState) override;
+
+ virtual OUString getStateDisplayName(WizardState nState) const override;
+
+private:
+ virtual std::unique_ptr<BuilderPage> createPage(WizardState nState) override;
+
+ rtl::Reference<::chart::ChartModel> m_xChartModel;
+ css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
+ ChartTypeTemplateProvider* m_pTemplateProvider;
+ std::unique_ptr<DialogModel> m_pDialogModel;
+
+ TimerTriggeredControllerLock m_aTimerTriggeredControllerLock;
+
+ bool m_bCanTravel;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx b/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx
new file mode 100644
index 000000000..7e1792f08
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_CreationWizard_UNO.hxx
@@ -0,0 +1,116 @@
+/* -*- 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 <cppuhelper/basemutex.hxx>
+#include <cppuhelper/component.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/frame/XTerminateListener.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
+#include <rtl/ref.hxx>
+
+#include "dlg_CreationWizard.hxx"
+#include <tools/link.hxx>
+
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+class VclWindowEvent;
+
+namespace chart
+{
+class ChartModel;
+
+class CreationWizardUnoDlg final : public cppu::BaseMutex
+ , public ::cppu::OComponentHelper
+ , public css::ui::dialogs::XAsynchronousExecutableDialog
+ , public css::lang::XServiceInfo
+ , public css::lang::XInitialization
+ , public css::frame::XTerminateListener
+ , public css::beans::XPropertySet
+{
+public:
+ CreationWizardUnoDlg() = delete;
+
+ CreationWizardUnoDlg( const css::uno::Reference< css::uno::XComponentContext >& xContext );
+ virtual ~CreationWizardUnoDlg() override;
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
+ virtual css::uno::Any SAL_CALL queryAggregation( css::uno::Type const & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ // XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) override;
+
+ // 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;
+
+ // XAsynchronousExecutableDialog
+ virtual void SAL_CALL setDialogTitle( const OUString& aTitle ) override;
+ virtual void SAL_CALL startExecuteModal( const css::uno::Reference<css::ui::dialogs::XDialogClosedListener>& xListener ) override;
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override;
+
+ // XTerminateListener
+ virtual void SAL_CALL queryTermination( const css::lang::EventObject& Event ) override;
+ virtual void SAL_CALL notifyTermination( const css::lang::EventObject& Event ) override;
+
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ //XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+ virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
+ virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
+ virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
+ virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
+ virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
+ virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
+
+protected:
+ // ____ OComponentHelper ____
+ /// Called in dispose method after the listeners were notified.
+ virtual void SAL_CALL disposing() override;
+
+private:
+ void createDialogOnDemand();
+ DECL_STATIC_LINK(CreationWizardUnoDlg, InstallLOKNotifierHdl, void*, vcl::ILibreOfficeKitNotifier*);
+
+private:
+ rtl::Reference< ::chart::ChartModel > m_xChartModel;
+ css::uno::Reference< css::uno::XComponentContext> m_xCC;
+ css::uno::Reference< css::awt::XWindow > m_xParentWindow;
+
+ std::shared_ptr<CreationWizard> m_xDialog;
+ bool m_bUnlockControllersOnExecute;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_DataEditor.hxx b/chart2/source/controller/inc/dlg_DataEditor.hxx
new file mode 100644
index 000000000..5156e0831
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_DataEditor.hxx
@@ -0,0 +1,73 @@
+/* -*- 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 <vcl/weld.hxx>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::uno { class XComponentContext; }
+namespace comphelper { template <class Tp, class Arg> class mem_fun1_t; }
+
+namespace com::sun::star {
+ namespace chart2 {
+ class XChartDocument;
+ }
+}
+
+namespace chart
+{
+class ChartModel;
+class DataBrowser;
+
+class DataEditor final : public weld::GenericDialogController
+{
+public:
+ DataEditor(weld::Window* pParent,
+ const rtl::Reference<::chart::ChartModel> & xChartDoc,
+ const css::uno::Reference<css::uno::XComponentContext> & xContext);
+ virtual ~DataEditor() override;
+
+ DECL_LINK(CloseHdl, weld::Button&, void);
+
+ void SetReadOnly( bool bReadOnly );
+
+private:
+ bool m_bReadOnly;
+
+ rtl::Reference<::chart::ChartModel> m_xChartDoc;
+ css::uno::Reference<css::uno::XComponentContext> m_xContext;
+
+ std::unique_ptr<weld::Toolbar> m_xTbxData;
+ std::unique_ptr<weld::Button> m_xCloseBtn;
+ std::unique_ptr<weld::Container> m_xTable;
+ std::unique_ptr<weld::Container> m_xColumns;
+ std::unique_ptr<weld::Container> m_xColors;
+ css::uno::Reference<css::awt::XWindow> m_xTableCtrlParent;
+ VclPtr<DataBrowser> m_xBrwData;
+
+ /// handles actions of the toolbox
+ DECL_LINK( ToolboxHdl, const OString&, void );
+ /// is called, if the cursor of the table has moved
+ DECL_LINK( BrowserCursorMovedHdl, DataBrowser*, void);
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_DataSource.hxx b/chart2/source/controller/inc/dlg_DataSource.hxx
new file mode 100644
index 000000000..2dce4169d
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_DataSource.hxx
@@ -0,0 +1,75 @@
+/* -*- 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 "TabPageNotifiable.hxx"
+#include <vcl/weld.hxx>
+#include <memory>
+
+namespace com::sun::star::chart2 { class XChartDocument; }
+namespace com::sun::star::uno { class XComponentContext; }
+class BuilderPage;
+
+namespace chart
+{
+class ChartModel;
+class ChartTypeTemplateProvider;
+class DataSourceTabPage;
+class DialogModel;
+class RangeChooserTabPage;
+
+class DataSourceDialog final :
+ public weld::GenericDialogController,
+ public TabPageNotifiable
+{
+public:
+ explicit DataSourceDialog(
+ weld::Window * pParent,
+ const rtl::Reference<::chart::ChartModel> & xChartDocument );
+ virtual ~DataSourceDialog() override;
+
+ // from GenericDialogController base
+ virtual short run() override;
+
+ // TabPageNotifiable
+ virtual void setInvalidPage( BuilderPage * pTabPage ) override;
+ virtual void setValidPage( BuilderPage * pTabPage ) override;
+
+private:
+ DECL_LINK(ActivatePageHdl, const OString&, void);
+ DECL_LINK(DeactivatePageHdl, const OString&, bool);
+
+ std::unique_ptr< ChartTypeTemplateProvider > m_apDocTemplateProvider;
+ std::unique_ptr< DialogModel > m_apDialogModel;
+
+ std::unique_ptr<RangeChooserTabPage> m_xRangeChooserTabPage;
+ std::unique_ptr<DataSourceTabPage> m_xDataSourceTabPage;
+ bool m_bRangeChooserTabIsValid;
+ bool m_bDataSourceTabIsValid;
+ bool m_bTogglingEnabled;
+
+ std::unique_ptr<weld::Notebook> m_xTabControl;
+ std::unique_ptr<weld::Button> m_xBtnOK;
+
+ static sal_uInt16 m_nLastPageId;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx b/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx
new file mode 100644
index 000000000..b69ab70f6
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_InsertAxis_Grid.hxx
@@ -0,0 +1,68 @@
+/* -*- 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 <vcl/weld.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+namespace chart
+{
+struct InsertAxisOrGridDialogData
+{
+ css::uno::Sequence<sal_Bool> aPossibilityList;
+ css::uno::Sequence<sal_Bool> aExistenceList;
+
+ InsertAxisOrGridDialogData();
+};
+
+/*************************************************************************
+|*
+|* insert Axis dialog (also base for grid dialog)
+|*
+\************************************************************************/
+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;
+ std::unique_ptr<weld::CheckButton> m_xCbSecondaryX;
+ std::unique_ptr<weld::CheckButton> m_xCbSecondaryY;
+ std::unique_ptr<weld::CheckButton> m_xCbSecondaryZ;
+
+public:
+ SchAxisDlg(weld::Window* pParent, const InsertAxisOrGridDialogData& rInput,
+ bool bAxisDlg = true);
+ void getResult(InsertAxisOrGridDialogData& rOutput);
+};
+
+/*************************************************************************
+|*
+|* Grid dialog
+|*
+\************************************************************************/
+class SchGridDlg final : public SchAxisDlg
+{
+public:
+ SchGridDlg(weld::Window* pParent, const InsertAxisOrGridDialogData& rInput);
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_InsertDataLabel.hxx b/chart2/source/controller/inc/dlg_InsertDataLabel.hxx
new file mode 100644
index 000000000..7777db3c9
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_InsertDataLabel.hxx
@@ -0,0 +1,46 @@
+/* -*- 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 <vcl/weld.hxx>
+#include <svl/itemset.hxx>
+#include <memory>
+
+class SvNumberFormatter;
+
+namespace chart
+{
+class DataLabelResources;
+
+class DataLabelsDialog final : public weld::GenericDialogController
+{
+private:
+ std::unique_ptr<DataLabelResources> m_apDataLabelResources;
+
+public:
+ DataLabelsDialog(weld::Window* pParent, const SfxItemSet& rInAttrs,
+ SvNumberFormatter* pFormatter);
+ virtual ~DataLabelsDialog() override;
+
+ void FillItemSet(SfxItemSet& rOutAttrs);
+};
+
+} //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
new file mode 100644
index 000000000..e68036153
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_InsertErrorBars.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/.
+ *
+ * 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 <memory>
+#include <vcl/weld.hxx>
+#include <svl/itemset.hxx>
+
+#include "res_ErrorBar.hxx"
+
+namespace com::sun::star::frame
+{
+class XModel;
+}
+
+namespace chart
+{
+class InsertErrorBarsDialog final : public weld::GenericDialogController
+{
+public:
+ InsertErrorBarsDialog(weld::Window* pParent, const SfxItemSet& rMyAttrs,
+ const rtl::Reference<::chart::ChartModel>& xChartDocument,
+ ErrorBarResources::tErrorBarType eType);
+
+ void SetAxisMinorStepWidthForErrorBarDecimals(double fMinorStepWidth);
+
+ static double getAxisMinorStepWidthForErrorBarDecimals(
+ const rtl::Reference<::chart::ChartModel>& xChartModel,
+ const css::uno::Reference<css::uno::XInterface>& xChartView,
+ const OUString& rSelectedObjectCID);
+
+ void FillItemSet(SfxItemSet& rOutAttrs);
+
+private:
+ std::unique_ptr<ErrorBarResources> m_apErrorBarResources;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_InsertLegend.hxx b/chart2/source/controller/inc/dlg_InsertLegend.hxx
new file mode 100644
index 000000000..0e2cccc38
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_InsertLegend.hxx
@@ -0,0 +1,49 @@
+/* -*- 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 <vcl/weld.hxx>
+#include <rtl/ref.hxx>
+
+#include <memory>
+
+#include "res_LegendPosition.hxx"
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace chart
+{
+class ChartModel;
+
+class SchLegendDlg final : public weld::GenericDialogController
+{
+private:
+ std::unique_ptr<LegendPositionResources> m_xLegendPositionResources;
+
+public:
+ SchLegendDlg(weld::Window* pParent, const css::uno::Reference< css::uno::XComponentContext>& xCC);
+
+ void init( const rtl::Reference<::chart::ChartModel>& xChartModel );
+ void writeToModel( const rtl::Reference<::chart::ChartModel>& xChartModel ) const;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_InsertTitle.hxx b/chart2/source/controller/inc/dlg_InsertTitle.hxx
new file mode 100644
index 000000000..096628529
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_InsertTitle.hxx
@@ -0,0 +1,40 @@
+/* -*- 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 "res_Titles.hxx"
+#include <vcl/weld.hxx>
+#include <memory>
+
+namespace chart
+{
+class SchTitleDlg final : public weld::GenericDialogController
+{
+private:
+ std::unique_ptr<TitleResources> m_xTitleResources;
+
+public:
+ SchTitleDlg(weld::Window* pParent, const TitleDialogData& rInput);
+
+ void getResult(TitleDialogData& rOutput);
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_ObjectProperties.hxx b/chart2/source/controller/inc/dlg_ObjectProperties.hxx
new file mode 100644
index 000000000..238ccc83b
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_ObjectProperties.hxx
@@ -0,0 +1,145 @@
+/* -*- 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 <ObjectIdentifier.hxx>
+#include <sfx2/tabdlg.hxx>
+
+namespace com::sun::star::util { class XNumberFormatsSupplier; }
+class Graphic;
+
+namespace chart
+{
+
+class ObjectPropertiesDialogParameter final
+{
+public:
+ ObjectPropertiesDialogParameter( const OUString& rObjectCID );
+ ~ObjectPropertiesDialogParameter();
+
+ void init( const rtl::Reference<::chart::ChartModel>& xModel );
+ ObjectType getObjectType() const { return m_eObjectType;}
+ const OUString& getLocalizedName() const { return m_aLocalizedName;}
+
+ bool HasGeometryProperties() const { return m_bHasGeometryProperties;}
+ bool HasStatisticProperties() const { return m_bHasStatisticProperties;}
+ bool ProvidesSecondaryYAxis() const { return m_bProvidesSecondaryYAxis;}
+ bool ProvidesOverlapAndGapWidth() const { return m_bProvidesOverlapAndGapWidth;}
+ bool ProvidesBarConnectors() const { return m_bProvidesBarConnectors;}
+ bool HasAreaProperties() const { return m_bHasAreaProperties;}
+ bool HasSymbolProperties() const { return m_bHasSymbolProperties;}
+ bool HasNumberProperties() const { return m_bHasNumberProperties;}
+ bool ProvidesStartingAngle() const { return m_bProvidesStartingAngle;}
+ bool ProvidesMissingValueTreatments() const { return m_bProvidesMissingValueTreatments;}
+ bool IsPieChartDataPoint() const { return m_bIsPieChartDataPoint;}
+
+ bool HasScaleProperties() const { return m_bHasScaleProperties;}
+ bool CanAxisLabelsBeStaggered() const { return m_bCanAxisLabelsBeStaggered;}
+ bool IsSupportingAxisPositioning() const { return m_bSupportingAxisPositioning;}
+ bool ShowAxisOrigin() const { return m_bShowAxisOrigin;}
+ bool IsCrossingAxisIsCategoryAxis() const { return m_bIsCrossingAxisIsCategoryAxis;}
+ bool IsSupportingCategoryPositioning() const { return m_bSupportingCategoryPositioning;}
+ const css::uno::Sequence< OUString >& GetCategories() const { return m_aCategories;}
+
+ const rtl::Reference<::chart::ChartModel>&
+ getDocument() const { return m_xChartDocument;}
+
+ bool IsComplexCategoriesAxis() const { return m_bComplexCategoriesAxis;}
+
+ sal_Int32 getNbPoints() const { return m_nNbPoints;}
+
+private:
+ OUString m_aObjectCID;
+ ObjectType m_eObjectType;
+ bool m_bAffectsMultipleObjects;//is true if more than one object of the given type will be changed (e.g. all axes or all titles)
+
+ OUString m_aLocalizedName;
+
+ bool m_bHasGeometryProperties;
+ bool m_bHasStatisticProperties;
+ bool m_bProvidesSecondaryYAxis;
+ bool m_bProvidesOverlapAndGapWidth;
+ bool m_bProvidesBarConnectors;
+ bool m_bHasAreaProperties;
+ bool m_bHasSymbolProperties;
+ bool m_bHasNumberProperties;
+ bool m_bProvidesStartingAngle;
+ bool m_bProvidesMissingValueTreatments;
+ bool m_bIsPieChartDataPoint;
+
+ bool m_bHasScaleProperties;
+ bool m_bCanAxisLabelsBeStaggered;
+
+ bool m_bSupportingAxisPositioning;
+ bool m_bShowAxisOrigin;
+ bool m_bIsCrossingAxisIsCategoryAxis;
+ bool m_bSupportingCategoryPositioning;
+ css::uno::Sequence< OUString > m_aCategories;
+
+ rtl::Reference<::chart::ChartModel> m_xChartDocument;
+
+ bool m_bComplexCategoriesAxis;
+
+ sal_Int32 m_nNbPoints;
+};
+
+/*************************************************************************
+|*
+|* dialog for properties of different chart object
+|*
+\************************************************************************/
+
+class ViewElementListProvider;
+
+class SchAttribTabDlg final : public SfxTabDialogController
+{
+private:
+ const ObjectPropertiesDialogParameter * const m_pParameter;
+ const ViewElementListProvider* const m_pViewElementListProvider;
+ SvNumberFormatter* m_pNumberFormatter;
+
+ std::optional<SfxItemSet> m_oSymbolShapeProperties;
+ std::unique_ptr<Graphic> m_pAutoSymbolGraphic;
+
+ double m_fAxisMinorStepWidthForErrorBarDecimals;
+ bool m_bOKPressed;
+
+ DECL_LINK(OKPressed, weld::Button&, void);
+
+ virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override;
+
+public:
+ SchAttribTabDlg(weld::Window* pParent, const SfxItemSet* pAttr,
+ const ObjectPropertiesDialogParameter* pDialogParameter,
+ const ViewElementListProvider* pViewElementListProvider,
+ const css::uno::Reference< css::util::XNumberFormatsSupplier >& xNumberFormatsSupplier );
+ virtual ~SchAttribTabDlg() override;
+
+ //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 SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth );
+
+ bool DialogWasClosedWithOK() const { return m_bOKPressed;}
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_ShapeFont.hxx b/chart2/source/controller/inc/dlg_ShapeFont.hxx
new file mode 100644
index 000000000..6998ba470
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_ShapeFont.hxx
@@ -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/.
+ *
+ * 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 <sfx2/tabdlg.hxx>
+
+namespace chart
+{
+class ViewElementListProvider;
+
+/** dialog for font properties of shapes
+ */
+class ShapeFontDialog final : public SfxTabDialogController
+{
+public:
+ ShapeFontDialog(weld::Window* pParent, const SfxItemSet* pAttr,
+ const ViewElementListProvider* pViewElementListProvider);
+
+private:
+ virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override;
+
+ const ViewElementListProvider* m_pViewElementListProvider;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_ShapeParagraph.hxx b/chart2/source/controller/inc/dlg_ShapeParagraph.hxx
new file mode 100644
index 000000000..9d4d7496d
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_ShapeParagraph.hxx
@@ -0,0 +1,38 @@
+/* -*- 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 <sfx2/tabdlg.hxx>
+
+namespace chart
+{
+/** dialog for paragraph properties of shapes
+ */
+class ShapeParagraphDialog final : public SfxTabDialogController
+{
+public:
+ ShapeParagraphDialog(weld::Window* pParent, const SfxItemSet* pAttr);
+
+private:
+ virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/dlg_View3D.hxx b/chart2/source/controller/inc/dlg_View3D.hxx
new file mode 100644
index 000000000..c165e8285
--- /dev/null
+++ b/chart2/source/controller/inc/dlg_View3D.hxx
@@ -0,0 +1,58 @@
+/* -*- 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 <vcl/weld.hxx>
+#include <ControllerLockGuard.hxx>
+
+namespace com::sun::star::frame
+{
+class XModel;
+}
+
+namespace chart
+{
+class ThreeD_SceneGeometry_TabPage;
+class ThreeD_SceneAppearance_TabPage;
+class ThreeD_SceneIllumination_TabPage;
+
+class View3DDialog final : public weld::GenericDialogController
+{
+public:
+ View3DDialog(weld::Window* pWindow, const rtl::Reference<::chart::ChartModel>& xChartModel);
+ virtual ~View3DDialog() override;
+
+ virtual short run() override;
+
+private:
+ DECL_LINK(ActivatePageHdl, const OString&, void);
+
+ ControllerLockHelper m_aControllerLocker;
+
+ static sal_uInt16 m_nLastPageId;
+
+ std::unique_ptr<weld::Notebook> m_xTabControl;
+ std::unique_ptr<ThreeD_SceneGeometry_TabPage> m_xGeometry;
+ std::unique_ptr<ThreeD_SceneAppearance_TabPage> m_xAppearance;
+ std::unique_ptr<ThreeD_SceneIllumination_TabPage> m_xIllumination;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/helpids.h b/chart2/source/controller/inc/helpids.h
new file mode 100644
index 000000000..69a23771c
--- /dev/null
+++ b/chart2/source/controller/inc/helpids.h
@@ -0,0 +1,32 @@
+/* -*- 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 <rtl/string.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 OStringLiteral HID_SCH_WIZARD_ROADMAP = "CHART2_HID_SCH_WIZARD_ROADMAP";
+inline constexpr OStringLiteral HID_SCH_DATA_SERIES_LABEL = "CHART2_HID_SCH_DATA_SERIES_LABEL";
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/res_ErrorBar.hxx b/chart2/source/controller/inc/res_ErrorBar.hxx
new file mode 100644
index 000000000..c3521d5ba
--- /dev/null
+++ b/chart2/source/controller/inc/res_ErrorBar.hxx
@@ -0,0 +1,142 @@
+/* -*- 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 <memory>
+#include <tools/link.hxx>
+#include <svl/itemset.hxx>
+#include <svx/chrtitem.hxx>
+#include "RangeSelectionListener.hxx"
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::chart2 { class XChartDocument; }
+namespace weld { class Builder; }
+namespace weld { class Button; }
+namespace weld { class CheckButton; }
+namespace weld { class ComboBox; }
+namespace weld { class DialogController; }
+namespace weld { class Entry; }
+namespace weld { class Frame; }
+namespace weld { class Image; }
+namespace weld { class Label; }
+namespace weld { class MetricSpinButton; }
+namespace weld { class RadioButton; }
+namespace weld { class Toggleable; }
+namespace weld { class Widget; }
+
+namespace chart
+{
+class ChartModel;
+class RangeSelectionHelper;
+
+class ErrorBarResources final : public RangeSelectionListenerParent
+{
+public:
+ enum tErrorBarType
+ {
+ ERROR_BAR_X,
+ ERROR_BAR_Y
+ };
+
+ ErrorBarResources(
+ weld::Builder* pParent, weld::DialogController* pControllerDialog, const SfxItemSet& rInAttrs, bool bNoneAvailable, chart::ErrorBarResources::tErrorBarType eType = ERROR_BAR_Y);
+ virtual ~ErrorBarResources();
+
+ void SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth );
+ void SetErrorBarType( tErrorBarType eNewType );
+ void SetChartDocumentForRangeChoosing(
+ const rtl::Reference<::chart::ChartModel> & xChartDocument );
+ void Reset(const SfxItemSet& rInAttrs);
+ void FillItemSet(SfxItemSet& rOutAttrs) const;
+
+ void FillValueSets();
+
+ // ____ RangeSelectionListenerParent ____
+ virtual void listeningFinished( const OUString & rNewRange ) override;
+ virtual void disposingRangeSelection() override;
+
+private:
+ SvxChartKindError m_eErrorKind;
+ SvxChartIndicate m_eIndicate;
+
+ bool m_bErrorKindUnique;
+ bool m_bIndicatorUnique;
+ bool m_bRangePosUnique;
+ bool m_bRangeNegUnique;
+
+ tErrorBarType m_eErrorBarType;
+ sal_uInt16 m_nConstDecimalDigits;
+ sal_Int64 m_nConstSpinSize;
+ double m_fPlusValue;
+ double m_fMinusValue;
+
+ weld::DialogController* m_pController;
+ std::unique_ptr< RangeSelectionHelper > m_apRangeSelectionHelper;
+ weld::Entry* m_pCurrentRangeChoosingField;
+ bool m_bHasInternalDataProvider;
+ bool m_bEnableDataTableDialog;
+
+
+ // category
+ std::unique_ptr<weld::RadioButton> m_xRbNone;
+ std::unique_ptr<weld::RadioButton> m_xRbConst;
+ std::unique_ptr<weld::RadioButton> m_xRbPercent;
+ std::unique_ptr<weld::RadioButton> m_xRbFunction;
+ std::unique_ptr<weld::RadioButton> m_xRbRange;
+ std::unique_ptr<weld::ComboBox> m_xLbFunction;
+
+ // parameters
+ std::unique_ptr<weld::Frame> m_xFlParameters;
+ std::unique_ptr<weld::Widget> m_xBxPositive;
+ std::unique_ptr<weld::MetricSpinButton> m_xMfPositive;
+ std::unique_ptr<weld::Entry> m_xEdRangePositive;
+ std::unique_ptr<weld::Button> m_xIbRangePositive;
+ std::unique_ptr<weld::Widget> m_xBxNegative;
+ std::unique_ptr<weld::MetricSpinButton> m_xMfNegative;
+ std::unique_ptr<weld::Entry> m_xEdRangeNegative;
+ std::unique_ptr<weld::Button> m_xIbRangeNegative;
+ std::unique_ptr<weld::CheckButton> m_xCbSyncPosNeg;
+
+ // indicator
+ std::unique_ptr<weld::RadioButton> m_xRbBoth;
+ std::unique_ptr<weld::RadioButton> m_xRbPositive;
+ std::unique_ptr<weld::RadioButton> m_xRbNegative;
+ std::unique_ptr<weld::Image> m_xFiBoth;
+ std::unique_ptr<weld::Image> m_xFiPositive;
+ std::unique_ptr<weld::Image> m_xFiNegative;
+
+ std::unique_ptr<weld::Label> m_xUIStringPos;
+ std::unique_ptr<weld::Label> m_xUIStringNeg;
+ std::unique_ptr<weld::Label> m_xUIStringRbRange;
+
+ DECL_LINK( CategoryChosen, weld::Toggleable&, void );
+ DECL_LINK( CategoryChosen2, weld::ComboBox&, void );
+ DECL_LINK( SynchronizePosAndNeg, weld::Toggleable&, void );
+ DECL_LINK( PosValueChanged, weld::MetricSpinButton&, void );
+ DECL_LINK( IndicatorChanged, weld::Toggleable&, void );
+ DECL_LINK( ChooseRange, weld::Button&, void );
+ DECL_LINK( RangeChanged, weld::Entry&, void );
+
+ void UpdateControlStates();
+ void isRangeFieldContentValid(weld::Entry& rEdit);
+};
+
+} //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
new file mode 100644
index 000000000..ca0870dd4
--- /dev/null
+++ b/chart2/source/controller/inc/res_LegendPosition.hxx
@@ -0,0 +1,75 @@
+/* -*- 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 <svl/itemset.hxx>
+#include <tools/link.hxx>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::uno { class XComponentContext; }
+namespace weld { class Builder; }
+namespace weld { class CheckButton; }
+namespace weld { class RadioButton; }
+namespace weld { class Toggleable; }
+
+namespace chart
+{
+class ChartModel;
+
+class LegendPositionResources final
+{
+
+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();
+
+ void writeToResources( const rtl::Reference<::chart::ChartModel>& xChartModel );
+ void writeToModel( const rtl::Reference<::chart::ChartModel>& xChartModel ) const;
+
+ void initFromItemSet( const SfxItemSet& rInAttrs );
+ void writeToItemSet( SfxItemSet& rOutAttrs ) const;
+
+ void SetChangeHdl( const Link<LinkParamNone*,void>& rLink );
+
+ DECL_LINK( PositionEnableHdl, weld::Toggleable&, void );
+ DECL_LINK( PositionChangeHdl, weld::Toggleable&, void );
+
+private:
+ void impl_setRadioButtonToggleHdl();
+ void PositionEnable();
+
+private:
+ css::uno::Reference< css::uno::XComponentContext> m_xCC;
+ Link<LinkParamNone*,void> m_aChangeLink;
+
+ std::unique_ptr<weld::CheckButton> m_xCbxShow;
+ std::unique_ptr<weld::RadioButton> m_xRbtLeft;
+ std::unique_ptr<weld::RadioButton> m_xRbtRight;
+ std::unique_ptr<weld::RadioButton> m_xRbtTop;
+ std::unique_ptr<weld::RadioButton> m_xRbtBottom;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/res_Titles.hxx b/chart2/source/controller/inc/res_Titles.hxx
new file mode 100644
index 000000000..a7a2eba57
--- /dev/null
+++ b/chart2/source/controller/inc/res_Titles.hxx
@@ -0,0 +1,73 @@
+/* -*- 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 "TitleDialogData.hxx"
+
+template <typename Arg, typename Ret> class Link;
+namespace weld
+{
+class Builder;
+}
+namespace weld
+{
+class Entry;
+}
+namespace weld
+{
+class Label;
+}
+
+namespace chart
+{
+class TitleResources final
+{
+public:
+ TitleResources(weld::Builder& rParent, bool bShowSecondaryAxesTitle);
+ ~TitleResources();
+
+ void writeToResources(const TitleDialogData& rInput);
+ void readFromResources(TitleDialogData& rOutput);
+
+ void connect_changed(const Link<weld::Entry&, void>& rLink);
+ bool get_value_changed_from_saved() const;
+ void save_value();
+
+private:
+ std::unique_ptr<weld::Label> m_xFT_Main;
+ std::unique_ptr<weld::Label> m_xFT_Sub;
+ std::unique_ptr<weld::Entry> m_xEd_Main;
+ std::unique_ptr<weld::Entry> m_xEd_Sub;
+
+ std::unique_ptr<weld::Label> m_xFT_XAxis;
+ std::unique_ptr<weld::Label> m_xFT_YAxis;
+ std::unique_ptr<weld::Label> m_xFT_ZAxis;
+ std::unique_ptr<weld::Entry> m_xEd_XAxis;
+ std::unique_ptr<weld::Entry> m_xEd_YAxis;
+ std::unique_ptr<weld::Entry> m_xEd_ZAxis;
+
+ std::unique_ptr<weld::Label> m_xFT_SecondaryXAxis;
+ std::unique_ptr<weld::Label> m_xFT_SecondaryYAxis;
+ std::unique_ptr<weld::Entry> m_xEd_SecondaryXAxis;
+ std::unique_ptr<weld::Entry> m_xEd_SecondaryYAxis;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/uiobject.hxx b/chart2/source/controller/inc/uiobject.hxx
new file mode 100644
index 000000000..b40fffb44
--- /dev/null
+++ b/chart2/source/controller/inc/uiobject.hxx
@@ -0,0 +1,68 @@
+/* -*- 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 <memory>
+#include <vcl/uitest/uiobject.hxx>
+
+#include "ChartWindow.hxx"
+
+class ChartUIObject final : public UIObject
+{
+public:
+
+ ChartUIObject(const VclPtr<chart::ChartWindow>& xChartWindow,
+ const OUString& rCID);
+
+ StringMap get_state() override;
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual std::unique_ptr<UIObject> get_child(const OUString& rID) override;
+
+ virtual std::set<OUString> get_children() const override;
+
+ virtual OUString get_type() const override;
+
+private:
+
+ OUString maCID;
+ VclPtr<chart::ChartWindow> mxChartWindow;
+ std::vector<std::unique_ptr<OUString>> maCommands;
+
+ DECL_LINK(PostCommand, void*, void);
+};
+
+class ChartWindowUIObject final : public WindowUIObject
+{
+ VclPtr<chart::ChartWindow> mxChartWindow;
+
+public:
+
+ ChartWindowUIObject(const VclPtr<chart::ChartWindow>& xChartWindow);
+
+ virtual StringMap get_state() override;
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual std::unique_ptr<UIObject> get_child(const OUString& rID) override;
+
+ virtual std::set<OUString> get_children() const override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+protected:
+
+ virtual OUString get_name() const override;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */