/* -*- 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 .
*/
namespace chart
{ /** This class is a container of `SeriesPlotter` objects (such as `PieChart` * instances). It is used for initializing coordinate systems, axes and scales * of all series plotters which belongs to the container.
*/ class SeriesPlotterContainer
{ public: explicit SeriesPlotterContainer(std::vector<std::unique_ptr<VCoordinateSystem>>& rVCooSysList);
~SeriesPlotterContainer();
/** It is used to set coordinate systems (`m_rVCooSysList`), this method * is invoked by `ChartView::createShapes2D` before of * `ChartView::impl_createDiagramAndContent`. * Coordinate systems are retrieved through the `XCoordinateSystemContainer` * interface implemented by a diagram object which is provided by the * `ChartModel` object passed to the method (`rChartModel.getFirstDiagram()`). * * It is used for creating series plotters and appending them * to `m_aSeriesPlotterList`. The created series plotters are initialized * through data (number formats supplier, color scheme, data series), * extracted from the chart model or the diagram objects. An exception is * the explicit category provider that is retrieved through the * `VCoordinateSystem` object used by the series plotter. * * It sets the minimum-maximum supplier for a coordinate system: * this supplier is the series plotter itself which utilizes the given * coordinate system. In fact `VSeriesPlotter` has `MinimumMaximumSupplier` * as one of its base classes. * Hence, for instance, a `PieChart`, which is a series plotter, is * a `MinimumMaximumSupplier`, too.
*/ void initializeCooSysAndSeriesPlotter(ChartModel& rModel);
/** This method is invoked by `ChartView::impl_createDiagramAndContent`. * It iterates on every axis of every coordinate systems, and if the axis * is not yet present in `m_aAxisUsageList` it creates a new `AxisUsage` * object and initialize its `aAutoScaling` member to the `ScaleData` * object of the current axis.
*/ void initAxisUsageList(const Date& rNullDate);
/** * Perform automatic axis scaling and determine the amount and spacing of * increments. It assumes that the caller has determined the size of the * largest axis label text object prior to calling this method. * * The new axis scaling data will be stored in the VCoordinateSystem * objects. The label alignment direction for each axis will also get * determined during this process, and stored in VAxis. * * This method is invoked by `ChartView::impl_createDiagramAndContent` * soon after `initAxisUsageList`. * It initializes explicit scale and increment objects for all coordinate * systems in `m_rVCooSysList`. * This action is achieved by iterating on the `m_aAxisUsageList` container, * and performing 3 steps: * 1- call `VCoordinateSystem::prepareAutomaticAxisScaling` for setting * scaling parameters of the `aAutoScaling` member (a `ScaleAutomatism` * object) for the current `AxisUsage` instance * (see `VCoordinateSystem::prepareAutomaticAxisScaling`); * 2- calculate the explicit scale and increment objects * (see ScaleAutomatism::calculateExplicitScaleAndIncrement); * 3- set the explicit scale and increment objects for each coordinate * system.
*/ void doAutoScaling(ChartModel& rModel);
/** * After auto-scaling is performed, call this method to set the explicit * scaling and increment data to all relevant VAxis objects.
*/ void updateScalesAndIncrementsOnAxes();
/** * After auto-scaling is performed, call this method to set the explicit * scaling data to all the plotters.
*/ void setScalesFromCooSysToPlotter();
private: /** A vector of series plotters.
*/
std::vector<std::unique_ptr<VSeriesPlotter>> m_aSeriesPlotterList;
/** A vector of coordinate systems.
*/
std::vector<std::unique_ptr<VCoordinateSystem>>& m_rVCooSysList;
/** A map whose key is a `XAxis` interface and the related value is * an object of `AxisUsage` type.
*/
std::map<rtl::Reference<Axis>, AxisUsage> m_aAxisUsageList;
/** * Max axis index of all dimensions. Currently this can be either 0 or 1 * since we only support primary and secondary axes per dimension. The * value of 0 means all dimensions have only primary axis, while 1 means * at least one dimension has a secondary axis.
*/
sal_Int32 m_nMaxAxisIndex;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.