1
0
Fork 0
libreoffice/oox/source/drawingml/diagram/diagram.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

171 lines
5.4 KiB
C++

/* -*- 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 INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAM_HXX
#define INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DIAGRAM_HXX
#include <map>
#include <memory>
#include <vector>
#include <rtl/ustring.hxx>
#include "datamodel.hxx"
#include <oox/drawingml/shape.hxx>
namespace com::sun::star {
namespace xml::dom { class XDocument; }
}
namespace oox::drawingml {
class Diagram;
class LayoutNode;
typedef std::shared_ptr< LayoutNode > LayoutNodePtr;
class LayoutAtom;
typedef std::shared_ptr< LayoutAtom > LayoutAtomPtr;
typedef std::map< OUString, css::uno::Reference<css::xml::dom::XDocument> > DiagramDomMap;
typedef std::map< OUString, LayoutAtomPtr > LayoutAtomMap;
typedef std::map< const svx::diagram::Point*, ShapePtr > PresPointShapeMap;
class DiagramLayout
{
public:
DiagramLayout(Diagram& rDgm)
: mrDgm(rDgm)
{
}
void setDefStyle( const OUString & sDefStyle )
{ msDefStyle = sDefStyle; }
void setMinVer( const OUString & sMinVer )
{ msMinVer = sMinVer; }
void setUniqueId( const OUString & sUniqueId )
{ msUniqueId = sUniqueId; }
void setTitle( const OUString & sTitle )
{ msTitle = sTitle; }
void setDesc( const OUString & sDesc )
{ msDesc = sDesc; }
Diagram& getDiagram() { return mrDgm; }
LayoutNodePtr & getNode()
{ return mpNode; }
const LayoutNodePtr & getNode() const
{ return mpNode; }
OoxDiagramDataPtr& getSampData()
{ return mpSampData; }
const OoxDiagramDataPtr& getSampData() const
{ return mpSampData; }
OoxDiagramDataPtr& getStyleData()
{ return mpStyleData; }
const OoxDiagramDataPtr& getStyleData() const
{ return mpStyleData; }
LayoutAtomMap & getLayoutAtomMap()
{ return maLayoutAtomMap; }
PresPointShapeMap & getPresPointShapeMap()
{ return maPresPointShapeMap; }
private:
Diagram& mrDgm;
OUString msDefStyle;
OUString msMinVer;
OUString msUniqueId;
OUString msTitle;
OUString msDesc;
LayoutNodePtr mpNode;
OoxDiagramDataPtr mpSampData;
OoxDiagramDataPtr mpStyleData;
// TODO
// catLst
// clrData
LayoutAtomMap maLayoutAtomMap;
PresPointShapeMap maPresPointShapeMap;
};
typedef std::shared_ptr< DiagramLayout > DiagramLayoutPtr;
struct DiagramStyle
{
ShapeStyleRef maFillStyle;
ShapeStyleRef maLineStyle;
ShapeStyleRef maEffectStyle;
ShapeStyleRef maTextStyle;
};
typedef std::map<OUString,DiagramStyle> DiagramQStyleMap;
struct DiagramColor
{
std::vector<oox::drawingml::Color> maFillColors;
std::vector<oox::drawingml::Color> maLineColors;
std::vector<oox::drawingml::Color> maEffectColors;
std::vector<oox::drawingml::Color> maTextFillColors;
std::vector<oox::drawingml::Color> maTextLineColors;
std::vector<oox::drawingml::Color> maTextEffectColors;
static const oox::drawingml::Color&
getColorByIndex(const std::vector<oox::drawingml::Color>& rColors, sal_Int32 nIndex);
};
typedef std::map<OUString,DiagramColor> DiagramColorMap;
class Diagram
{
public:
explicit Diagram();
void setData( OoxDiagramDataPtr& pData )
{ mpData = pData; }
const OoxDiagramDataPtr& getData() const
{ return mpData; }
void setLayout( const DiagramLayoutPtr & pLayout )
{ mpLayout = pLayout; }
const DiagramLayoutPtr& getLayout() const
{ return mpLayout; }
DiagramQStyleMap& getStyles() { return maStyles; }
const DiagramQStyleMap& getStyles() const { return maStyles; }
DiagramColorMap& getColors() { return maColors; }
const DiagramColorMap& getColors() const { return maColors; }
DiagramDomMap & getDomMap() { return maMainDomMap; }
css::uno::Sequence< css::uno::Sequence< css::uno::Any > > & getDataRelsMap() { return maDataRelsMap; }
void addTo( const ShapePtr & pShape, bool bCreate );
css::uno::Sequence<css::beans::PropertyValue> getDomsAsPropertyValues() const;
oox::core::NamedShapePairs& getDiagramFontHeights() { return maDiagramFontHeights; }
void syncDiagramFontHeights();
private:
// This contains groups of shapes: automatic font size is the same in each group.
oox::core::NamedShapePairs maDiagramFontHeights;
OoxDiagramDataPtr mpData;
DiagramLayoutPtr mpLayout;
DiagramQStyleMap maStyles;
DiagramColorMap maColors;
DiagramDomMap maMainDomMap;
css::uno::Sequence< css::uno::Sequence< css::uno::Any > > maDataRelsMap;
};
typedef std::shared_ptr< Diagram > DiagramPtr;
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */