summaryrefslogtreecommitdiff
path: root/include/oox/drawingml/theme.hxx
blob: c2408ec1c015f50aaa9812660d36d807b467e760 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* -*- 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_DRAWINGML_THEME_HXX
#define INCLUDED_OOX_DRAWINGML_THEME_HXX

#include <functional>

#include <com/sun/star/uno/Reference.hxx>
#include <oox/drawingml/clrscheme.hxx>
#include <oox/drawingml/shape.hxx>
#include <oox/dllapi.h>
#include <oox/helper/refmap.hxx>
#include <oox/helper/refvector.hxx>
#include <rtl/ustring.hxx>
#include <sal/types.h>

namespace com::sun::star {
    namespace drawing { class XDrawPage; }
    namespace xml::dom { class XDocument; }
}
namespace model {
    class Theme;
}

namespace oox::drawingml
{

struct EffectProperties;
struct FillProperties;
struct LineProperties;
struct TextCharacterProperties;

const sal_Int32 THEMED_STYLE_SUBTLE     = 1;
const sal_Int32 THEMED_STYLE_MODERATE   = 2;
const sal_Int32 THEMED_STYLE_INTENSE    = 3;

typedef RefVector< FillProperties >                     FillStyleList;
typedef RefVector< LineProperties >                     LineStyleList;
typedef RefVector< EffectProperties >                   EffectStyleList;
typedef RefMap< sal_Int32, TextCharacterProperties >    FontScheme;

class TextFont;

class OOX_DLLPUBLIC Theme
{
public:
    void setThemeName(OUString const& rName) { maThemeName = rName; }
    void setFormatSchemeName(OUString const& rName) { maFormatSchemeName = rName; }
    void setFontSchemeName(OUString const& rName) { maFontSchemeName = rName; }

    ClrScheme&               getClrScheme() { return maClrScheme; }
    const ClrScheme&         getClrScheme() const { return maClrScheme; }

    FillStyleList&           getFillStyleList() { return maFillStyleList; }
    const FillStyleList&     getFillStyleList() const { return maFillStyleList; }
    FillStyleList&           getBgFillStyleList() { return maBgFillStyleList; }
    const FillStyleList&     getBgFillStyleList() const { return maBgFillStyleList; }
    /** Returns the fill properties of the passed one-based themed style index. */
    const FillProperties*           getFillStyle( sal_Int32 nIndex ) const;

    LineStyleList&           getLineStyleList() { return maLineStyleList; }
    const LineStyleList&     getLineStyleList() const { return maLineStyleList; }
    /** Returns the line properties of the passed one-based themed style index. */
    const LineProperties*           getLineStyle( sal_Int32 nIndex ) const;

    EffectStyleList&         getEffectStyleList() { return maEffectStyleList; }
    const EffectStyleList&   getEffectStyleList() const { return maEffectStyleList; }
    const EffectProperties*         getEffectStyle( sal_Int32 nIndex ) const;

    FontScheme&              getFontScheme() { return maFontScheme; }
    const FontScheme&        getFontScheme() const { return maFontScheme; }

    std::map<sal_Int32, std::vector<std::pair<OUString, OUString>>>& getSupplementalFontMap() { return maSupplementalFontMap; }
    std::map<sal_Int32, std::vector<std::pair<OUString, OUString>>> const& getSupplementalFontMap() const { return maSupplementalFontMap; }

    /** Returns theme font properties by scheme type (major/minor). */
    const TextCharacterProperties*  getFontStyle( sal_Int32 nSchemeType ) const;
    /** Returns theme font by placeholder name, e.g. the major latin theme font for the font name '+mj-lt'. */
    const TextFont*                 resolveFont( std::u16string_view rName ) const;

    Shape&                   getSpDef() { return maSpDef; }
    const Shape&             getSpDef() const { return maSpDef; }

    Shape&                   getLnDef() { return maLnDef; }
    const Shape&             getLnDef() const { return maLnDef; }

    Shape&                   getTxDef() { return maTxDef; }
    const Shape&             getTxDef() const { return maTxDef; }

    const css::uno::Reference<css::xml::dom::XDocument>& getFragment() const { return mxFragment; }
    void                     setFragment( const css::uno::Reference< css::xml::dom::XDocument>& xRef ) { mxFragment=xRef; }

    std::shared_ptr<model::Theme> createSvxTheme() const;
    void addTheme(const css::uno::Reference<css::drawing::XDrawPage>& xDrawPage) const;

private:
    OUString            maThemeName;
    OUString            maFontSchemeName;
    OUString            maFormatSchemeName;
    ClrScheme           maClrScheme;
    FillStyleList       maFillStyleList;
    FillStyleList       maBgFillStyleList;
    LineStyleList       maLineStyleList;
    EffectStyleList     maEffectStyleList;
    FontScheme          maFontScheme;
    std::map<sal_Int32, std::vector<std::pair<OUString, OUString>>> maSupplementalFontMap;
    Shape               maSpDef;
    Shape               maLnDef;
    Shape               maTxDef;
    css::uno::Reference< css::xml::dom::XDocument> mxFragment;
};


} // namespace oox::drawingml

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */