1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _CHART2_EXPLICITSCALEVALUES_HXX
24 #define _CHART2_EXPLICITSCALEVALUES_HXX
25 
26 #include "chartviewdllapi.hxx"
27 #include <com/sun/star/chart/TimeInterval.hpp>
28 #include <com/sun/star/chart/TimeUnit.hpp>
29 #include <com/sun/star/chart2/AxisOrientation.hpp>
30 #include <com/sun/star/chart2/AxisType.hpp>
31 #include <com/sun/star/chart2/XScaling.hpp>
32 #include <tools/date.hxx>
33 #include <vector>
34 //.............................................................................
35 namespace chart
36 {
37 //.............................................................................
38 
39 //-----------------------------------------------------------------------------
40 /** This structure contains the explicit values for a scale like Minimum and Maximum.
41     See also ::com::sun::star::chart2::ScaleData.
42 */
43 
44 struct OOO_DLLPUBLIC_CHARTVIEW ExplicitScaleData
45 {
46     ExplicitScaleData();
47 
48     double Minimum;
49     double Maximum;
50     double Origin;
51 
52     ::com::sun::star::chart2::AxisOrientation     Orientation;
53 
54     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XScaling > Scaling;
55 
56     sal_Int32   AxisType;//see ::com::sun::star::chart2::AxisType
57     bool        ShiftedCategoryPosition;
58     sal_Int32   TimeResolution; //constant of type <type>::com::sun::star::chart::TimeUnit</type>
59     Date        NullDate;
60 };
61 
62 struct OOO_DLLPUBLIC_CHARTVIEW ExplicitSubIncrement
63 {
64     ExplicitSubIncrement();
65 
66     /** Numbers of intervals between two superior ticks.  For an axis
67         this usually means, that <code>IntervalCount - 1</code>
68         sub-tick-marks are displayed between two superior ticks.
69 
70      */
71     sal_Int32 IntervalCount;
72 
73     /** If <TRUE/>, the distance between two sub-tick-marks on the
74         screen is always the same.  If <FALSE/>, the distances may
75         differ depending on the <type>XScaling</type>.
76      */
77     bool PostEquidistant;
78 };
79 
80 /** describes how tickmarks are positioned on the scale of an axis.
81 */
82 struct OOO_DLLPUBLIC_CHARTVIEW ExplicitIncrementData
83 {
84     ExplicitIncrementData();
85 
86     /** the following two members are only for date-time axis
87     */
88     ::com::sun::star::chart::TimeInterval   MajorTimeInterval;
89     ::com::sun::star::chart::TimeInterval   MinorTimeInterval;
90 
91     /** the other members are for *not* date-time axis
92     */
93 
94     /** <member>Distance</member> describes the distance between two
95     neighboring main tickmarks on a <type>Scale</type> of an axis.
96     All neighboring main tickmarks have the same constant distance.
97 
98     <p>If the Scale has a <type>XScaling</type> the <member>Distance</member>
99     may be measured in two different ways - that is - before or after the
100     scaling is applied.</p>
101 
102     <p>On a logarithmic scale for example the distance between two main
103     tickmarks is typically measured after the scaling is applied:
104     Distance = log(tick2)-log(tick1)
105     ( log(1000)-log(100)==log(100)-log(10)==log(10)-log(1)==1==Distance ).
106     The resulting tickmarks will always look equidistant on the screen.
107     The other possibility is to have a Distance = tick2-tick1 measured constant
108     before a scaling is applied, which may lead to non equidistant tickmarks
109     on the screen.</p>
110 
111     <p><member>PostEquidistant</member> rules whether the <member>Distance</member>
112     is meant to be a value before or after scaling.</p>
113     */
114 	double		Distance;
115 
116     /**
117     <member>PostEquidistant</member> rules whether the member <member>Distance</member>
118     describes a distance before or after the scaling is applied.
119 
120     <p>If <member>PostEquidistant</member> equals <TRUE/> <member>Distance</member>
121     is given in values after <type>XScaling</type> is applied, thus resulting
122     main tickmarks will always look equidistant on the screen.
123     If <member>PostEquidistant</member> equals <FALSE/> <member>Distance</member>
124     is given in values before <type>XScaling</type> is applied.</p>
125     */
126 	bool		PostEquidistant;
127 
128     /** The <member>BaseValue</member> gives a starting point on the scale
129     to which all further main tickmarks are relatively positioned.
130 
131     <p>The <member>BaseValue</member> is always a value on the scale before
132     a possible scaling is applied. If the given value is not valid in the
133     associated scaling the minimum of the scaling is assumed,
134     if there is no minimum any other obvious value will be assumed.</p>
135 
136     <p>E.g.: assume a scale from 0 to 6 with identical scaling.
137     Further assume this Increment to have Distance==2 and PostEquidistant==false.
138     Setting BaseValue=0 would lead to main tickmarks 0; 2; 4; 6;
139     Setting BaseValue=1,3 would lead to main tickmarks 1,3; 3,3; 5,3;
140     Setting BaseValue=-0,7 would also lead to main tickmarks 1,3; 3,3; 5,3;
141     And setting BaseValue to 2, -2, 4, -4 etc. in this example
142     leads to the same result as BaseValue=0.</p>
143     */
144 	double		BaseValue;
145 
146     /** <member>SubIncrements</member> describes the positioning of further
147     sub tickmarks on the scale of an axis.
148 
149     <p>The first SubIncrement in this sequence determines how the
150     distance between two neighboring main tickmarks is divided for positioning
151     of further sub tickmarks. Every following SubIncrement determines the
152     positions of subsequent tickmarks in relation to their parent tickmarks
153     iven by the preceding SubIncrement.</p>
154     */
155     ::std::vector< ExplicitSubIncrement > SubIncrements;
156 };
157 
158 //.............................................................................
159 } //namespace chart
160 //.............................................................................
161 #endif
162