blob: 3cb8de727ed3036b321bdb87ad2d91925c8938e3 (
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _CHART2_VAXIS_PROPERTIES_HXX
#define _CHART2_VAXIS_PROPERTIES_HXX
#include "TickmarkProperties.hxx"
#include "PlottingPositionHelper.hxx"
#include "LabelAlignment.hxx"
#include "ExplicitCategoriesProvider.hxx"
#include <com/sun/star/chart/ChartAxisLabelPosition.hpp>
#include <com/sun/star/chart/ChartAxisMarkPosition.hpp>
#include <com/sun/star/chart/ChartAxisPosition.hpp>
#include <com/sun/star/chart2/XAxis.hpp>
#include <com/sun/star/chart2/AxisType.hpp>
#include <com/sun/star/chart2/data/XTextualDataSequence.hpp>
#include <com/sun/star/awt/Rectangle.hpp>
#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <vector>
//.............................................................................
namespace chart
{
//.............................................................................
//-----------------------------------------------------------------------------
/**
*/
//These properties describe how a couple of labels are arranged one to another.
//The couple can contain all labels for all tickmark depth or just the labels for one single depth or
//the labels from an coherent range of tick depths (e.g. the major and first minor tickmarks should be handled together).
//... only allow side by side for different tick depth
enum AxisLabelStaggering
{
SIDE_BY_SIDE
, STAGGER_EVEN
, STAGGER_ODD
, STAGGER_AUTO
};
struct AxisLabelProperties
{
AxisLabelProperties();
::com::sun::star::awt::Size m_aFontReferenceSize;//reference size to calculate the font height
::com::sun::star::awt::Rectangle m_aMaximumSpaceForLabels;//Labels need to be clipped in order to fit into this rectangle
sal_Int32 nNumberFormatKey;
AxisLabelStaggering eStaggering;
sal_Bool bLineBreakAllowed;
sal_Bool bOverlapAllowed;
sal_Bool bStackCharacters;
double fRotationAngleDegree;
sal_Int32 nRhythm; //show only each nth label with n==nRhythm
bool bRhythmIsFix; //states whether the given rhythm is fix or may be changed
//methods:
void init( const ::com::sun::star::uno::Reference<
::com::sun::star::chart2::XAxis >& xAxisModel );
sal_Bool getIsStaggered() const;
};
struct AxisProperties
{
::com::sun::star::uno::Reference< ::com::sun::star::chart2::XAxis > m_xAxisModel;
sal_Int32 m_nDimensionIndex;
bool m_bIsMainAxis;//not secondary axis
bool m_bSwapXAndY;
::com::sun::star::chart::ChartAxisPosition m_eCrossoverType;
::com::sun::star::chart::ChartAxisLabelPosition m_eLabelPos;
::com::sun::star::chart::ChartAxisMarkPosition m_eTickmarkPos;
double* m_pfMainLinePositionAtOtherAxis;
double* m_pfExrtaLinePositionAtOtherAxis;
bool m_bCrossingAxisHasReverseDirection;
bool m_bCrossingAxisIsCategoryAxes;
//this direction is used to indicate in which direction the labels are to be drawn
double m_fLabelDirectionSign;
//this direction is used to indicate in which direction inner tickmarks are to be drawn
double m_fInnerDirectionSign;
LabelAlignment m_aLabelAlignment;
sal_Bool m_bDisplayLabels;
sal_Int32 m_nNumberFormatKey;
/*
0: no tickmarks 1: inner tickmarks
2: outer tickmarks 3: inner and outer tickmarks
*/
sal_Int32 m_nMajorTickmarks;
sal_Int32 m_nMinorTickmarks;
::std::vector<TickmarkProperties> m_aTickmarkPropertiesList;
VLineProperties m_aLineProperties;
//for category axes ->
sal_Int32 m_nAxisType;//REALNUMBER, CATEGORY etc. type ::com::sun::star::chart2::AxisType
bool m_bComplexCategories;
ExplicitCategoriesProvider* m_pExplicitCategoriesProvider;/*no ownership here*/
::com::sun::star::uno::Reference<
::com::sun::star::chart2::data::XTextualDataSequence >
m_xAxisTextProvider; //for categries or series names
//<- category axes
//methods:
AxisProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XAxis >& xAxisModel
, ExplicitCategoriesProvider* pExplicitCategoriesProvider );
AxisProperties( const AxisProperties& rAxisProperties );
virtual ~AxisProperties();
virtual void init(bool bCartesian=false);//init from model data (m_xAxisModel)
void initAxisPositioning( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xAxisProp );
static TickmarkProperties getBiggestTickmarkProperties();
TickmarkProperties makeTickmarkPropertiesForComplexCategories( sal_Int32 nTickLength, sal_Int32 nTickStartDistanceToAxis, sal_Int32 nTextLevel ) const;
private:
AxisProperties();
protected:
virtual TickmarkProperties makeTickmarkProperties( sal_Int32 nDepth ) const;
VLineProperties makeLinePropertiesForDepth( sal_Int32 nDepth ) const;
};
//.............................................................................
} //namespace chart
//.............................................................................
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|