1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_chart2.hxx"
26*b1cdbd2cSJim Jagielski #include "tp_Scale.hxx"
27*b1cdbd2cSJim Jagielski #include "tp_Scale.hrc"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include "ResId.hxx"
30*b1cdbd2cSJim Jagielski #include "Strings.hrc"
31*b1cdbd2cSJim Jagielski #include "chartview/ChartSfxItemIds.hxx"
32*b1cdbd2cSJim Jagielski #include "NoWarningThisInCTOR.hxx"
33*b1cdbd2cSJim Jagielski #include "AxisHelper.hxx"
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski #ifndef _SVX_SVXIDS_HRC
36*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski #include <rtl/math.hxx>
39*b1cdbd2cSJim Jagielski // header for class SvxDoubleItem
40*b1cdbd2cSJim Jagielski #include <svx/chrtitem.hxx>
41*b1cdbd2cSJim Jagielski // header for class SfxBoolItem
42*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
43*b1cdbd2cSJim Jagielski // header for SfxInt32Item
44*b1cdbd2cSJim Jagielski #include <svl/intitem.hxx>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski // header for class WarningBox
47*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski // header for class SvNumberformat
50*b1cdbd2cSJim Jagielski #ifndef _ZFORMAT_HXX
51*b1cdbd2cSJim Jagielski #ifndef _ZFORLIST_DECLARE_TABLE
52*b1cdbd2cSJim Jagielski #define _ZFORLIST_DECLARE_TABLE
53*b1cdbd2cSJim Jagielski #endif
54*b1cdbd2cSJim Jagielski #include <svl/zformat.hxx>
55*b1cdbd2cSJim Jagielski #endif
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski #include <svtools/controldims.hrc>
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski #include <com/sun/star/chart2/AxisType.hpp>
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski //.............................................................................
64*b1cdbd2cSJim Jagielski namespace chart
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski //.............................................................................
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski namespace
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski
lcl_placeControlAtX(Control & rControl,long nNewXPos)71*b1cdbd2cSJim Jagielski void lcl_placeControlAtX( Control& rControl, long nNewXPos )
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski Point aPos( rControl.GetPosPixel() );
74*b1cdbd2cSJim Jagielski aPos.X() = nNewXPos;
75*b1cdbd2cSJim Jagielski rControl.SetPosPixel(aPos);
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski
lcl_placeControlAtY(Control & rControl,long nNewYPos)78*b1cdbd2cSJim Jagielski void lcl_placeControlAtY( Control& rControl, long nNewYPos )
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski Point aPos( rControl.GetPosPixel() );
81*b1cdbd2cSJim Jagielski aPos.Y() = nNewYPos;
82*b1cdbd2cSJim Jagielski rControl.SetPosPixel(aPos);
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski
lcl_shiftControls(Control & rEdit,Control & rAuto,long nNewXPos)85*b1cdbd2cSJim Jagielski void lcl_shiftControls( Control& rEdit, Control& rAuto, long nNewXPos )
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski Point aPos( rEdit.GetPosPixel() );
88*b1cdbd2cSJim Jagielski long nShift = nNewXPos - aPos.X();
89*b1cdbd2cSJim Jagielski aPos.X() = nNewXPos;
90*b1cdbd2cSJim Jagielski rEdit.SetPosPixel(aPos);
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski aPos = rAuto.GetPosPixel();
93*b1cdbd2cSJim Jagielski aPos.X() += nShift;
94*b1cdbd2cSJim Jagielski rAuto.SetPosPixel(aPos);
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski
lcl_getLabelDistance(Control & rControl)97*b1cdbd2cSJim Jagielski long lcl_getLabelDistance( Control& rControl )
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski return rControl.LogicToPixel( Size(RSC_SP_CTRL_DESC_X, 0), MapMode(MAP_APPFONT) ).Width();
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski
lcl_setValue(FormattedField & rFmtField,double fValue)102*b1cdbd2cSJim Jagielski void lcl_setValue( FormattedField& rFmtField, double fValue )
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski rFmtField.SetValue( fValue );
105*b1cdbd2cSJim Jagielski rFmtField.SetDefaultValue( fValue );
106*b1cdbd2cSJim Jagielski }
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski
ScaleTabPage(Window * pWindow,const SfxItemSet & rInAttrs)110*b1cdbd2cSJim Jagielski ScaleTabPage::ScaleTabPage(Window* pWindow,const SfxItemSet& rInAttrs) :
111*b1cdbd2cSJim Jagielski SfxTabPage(pWindow, SchResId(TP_SCALE), rInAttrs),
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski aFlScale(this, SchResId(FL_SCALE)),
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski aCbxReverse(this, SchResId(CBX_REVERSE)),
116*b1cdbd2cSJim Jagielski aCbxLogarithm(this, SchResId(CBX_LOGARITHM)),
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski m_aTxt_AxisType(this, SchResId (TXT_AXIS_TYPE)),
119*b1cdbd2cSJim Jagielski m_aLB_AxisType(this, SchResId(LB_AXIS_TYPE)),
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski aTxtMin (this, SchResId (TXT_MIN)),
122*b1cdbd2cSJim Jagielski aFmtFldMin(this, SchResId(EDT_MIN)),
123*b1cdbd2cSJim Jagielski aCbxAutoMin(this, SchResId(CBX_AUTO_MIN)),
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski aTxtMax(this, SchResId (TXT_MAX)),
126*b1cdbd2cSJim Jagielski aFmtFldMax(this, SchResId(EDT_MAX)),
127*b1cdbd2cSJim Jagielski aCbxAutoMax(this, SchResId(CBX_AUTO_MAX)),
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski m_aTxt_TimeResolution(this, SchResId (TXT_TIME_RESOLUTION)),
130*b1cdbd2cSJim Jagielski m_aLB_TimeResolution(this, SchResId(LB_TIME_RESOLUTION)),
131*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution(this, SchResId(CBX_AUTO_TIME_RESOLUTION)),
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski aTxtMain (this, SchResId (TXT_STEP_MAIN)),
134*b1cdbd2cSJim Jagielski aFmtFldStepMain(this, SchResId(EDT_STEP_MAIN)),
135*b1cdbd2cSJim Jagielski m_aMt_MainDateStep(this, SchResId(MT_MAIN_DATE_STEP)),
136*b1cdbd2cSJim Jagielski m_aLB_MainTimeUnit(this, SchResId(LB_MAIN_TIME_UNIT)),
137*b1cdbd2cSJim Jagielski aCbxAutoStepMain(this, SchResId(CBX_AUTO_STEP_MAIN)),
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski aTxtHelpCount (this, SchResId (TXT_STEP_HELP_COUNT)),
140*b1cdbd2cSJim Jagielski aTxtHelp (this, SchResId (TXT_STEP_HELP)),
141*b1cdbd2cSJim Jagielski aMtStepHelp (this, SchResId (MT_STEPHELP)),
142*b1cdbd2cSJim Jagielski m_aLB_HelpTimeUnit(this, SchResId(LB_HELP_TIME_UNIT)),
143*b1cdbd2cSJim Jagielski aCbxAutoStepHelp(this, SchResId(CBX_AUTO_STEP_HELP)),
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski aTxtOrigin (this, SchResId (TXT_ORIGIN)),
146*b1cdbd2cSJim Jagielski aFmtFldOrigin(this, SchResId(EDT_ORIGIN)),
147*b1cdbd2cSJim Jagielski aCbxAutoOrigin(this, SchResId(CBX_AUTO_ORIGIN)),
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski fMin(0.0),
150*b1cdbd2cSJim Jagielski fMax(0.0),
151*b1cdbd2cSJim Jagielski fStepMain(0.0),
152*b1cdbd2cSJim Jagielski nStepHelp(0),
153*b1cdbd2cSJim Jagielski fOrigin(0.0),
154*b1cdbd2cSJim Jagielski m_nTimeResolution(1),
155*b1cdbd2cSJim Jagielski m_nMainTimeUnit(1),
156*b1cdbd2cSJim Jagielski m_nHelpTimeUnit(1),
157*b1cdbd2cSJim Jagielski m_nAxisType(chart2::AxisType::REALNUMBER),
158*b1cdbd2cSJim Jagielski m_bAllowDateAxis(false),
159*b1cdbd2cSJim Jagielski pNumFormatter(NULL),
160*b1cdbd2cSJim Jagielski m_bShowAxisOrigin(false)
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski FreeResource();
163*b1cdbd2cSJim Jagielski SetExchangeSupport();
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski aCbxAutoMin.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
166*b1cdbd2cSJim Jagielski aCbxAutoMax.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
167*b1cdbd2cSJim Jagielski aCbxAutoStepMain.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
168*b1cdbd2cSJim Jagielski aCbxAutoStepHelp.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
169*b1cdbd2cSJim Jagielski aCbxAutoOrigin.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
170*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution.SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski m_aLB_AxisType.SetDropDownLineCount(3);
173*b1cdbd2cSJim Jagielski m_aLB_AxisType.SetSelectHdl(LINK(this, ScaleTabPage, SelectAxisTypeHdl));
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski m_aLB_TimeResolution.SetDropDownLineCount(3);
176*b1cdbd2cSJim Jagielski m_aLB_MainTimeUnit.SetDropDownLineCount(3);
177*b1cdbd2cSJim Jagielski m_aLB_HelpTimeUnit.SetDropDownLineCount(3);
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielski aFmtFldMin.SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
180*b1cdbd2cSJim Jagielski aFmtFldMax.SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
181*b1cdbd2cSJim Jagielski aFmtFldStepMain.SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
182*b1cdbd2cSJim Jagielski aFmtFldOrigin.SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski
IMPL_LINK(ScaleTabPage,FmtFieldModifiedHdl,FormattedField *,pFmtFied)185*b1cdbd2cSJim Jagielski IMPL_LINK( ScaleTabPage, FmtFieldModifiedHdl, FormattedField*, pFmtFied )
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski if( pFmtFied )
188*b1cdbd2cSJim Jagielski pFmtFied->SetDefaultValue( pFmtFied->GetValue() );
189*b1cdbd2cSJim Jagielski return 0;
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
StateChanged(StateChangedType nType)192*b1cdbd2cSJim Jagielski void ScaleTabPage::StateChanged( StateChangedType nType )
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski TabPage::StateChanged( nType );
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski if( nType == STATE_CHANGE_INITSHOW )
197*b1cdbd2cSJim Jagielski AdjustControlPositions();
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski
AdjustControlPositions()200*b1cdbd2cSJim Jagielski void ScaleTabPage::AdjustControlPositions()
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski //optimize position of the controls
203*b1cdbd2cSJim Jagielski long nLabelWidth = ::std::max( aTxtMin.CalcMinimumSize().Width(), aTxtMax.CalcMinimumSize().Width() );
204*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( aTxtMain.CalcMinimumSize().Width(), nLabelWidth );
205*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( aTxtHelp.CalcMinimumSize().Width(), nLabelWidth );
206*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( aTxtHelpCount.CalcMinimumSize().Width(), nLabelWidth );
207*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( aTxtOrigin.CalcMinimumSize().Width(), nLabelWidth );
208*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( m_aTxt_TimeResolution.CalcMinimumSize().Width(), nLabelWidth );
209*b1cdbd2cSJim Jagielski nLabelWidth = ::std::max( m_aTxt_AxisType.CalcMinimumSize().Width(), nLabelWidth );
210*b1cdbd2cSJim Jagielski nLabelWidth+=1;
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski long nLabelDistance = lcl_getLabelDistance(aTxtMin);
213*b1cdbd2cSJim Jagielski long nNewXPos = aTxtMin.GetPosPixel().X() + nLabelWidth + nLabelDistance;
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski //ensure that the auto checkboxes are wide enough and have correct size for calculation
216*b1cdbd2cSJim Jagielski aCbxAutoMin.SetSizePixel( aCbxAutoMin.CalcMinimumSize() );
217*b1cdbd2cSJim Jagielski aCbxAutoMax.SetSizePixel( aCbxAutoMax.CalcMinimumSize() );
218*b1cdbd2cSJim Jagielski aCbxAutoStepMain.SetSizePixel( aCbxAutoStepMain.CalcMinimumSize() );
219*b1cdbd2cSJim Jagielski aCbxAutoStepHelp.SetSizePixel( aCbxAutoStepHelp.CalcMinimumSize() );
220*b1cdbd2cSJim Jagielski aCbxAutoOrigin.SetSizePixel( aCbxAutoOrigin.CalcMinimumSize() );
221*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution.SetSizePixel( m_aCbx_AutoTimeResolution.CalcMinimumSize() );
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski //ensure new pos is ok
224*b1cdbd2cSJim Jagielski long nWidthOfOtherControls = m_aLB_MainTimeUnit.GetPosPixel().X() + m_aLB_MainTimeUnit.GetSizePixel().Width() - aFmtFldMin.GetPosPixel().X();
225*b1cdbd2cSJim Jagielski long nDialogWidth = GetSizePixel().Width();
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski long nLeftSpace = nDialogWidth - nNewXPos - nWidthOfOtherControls;
228*b1cdbd2cSJim Jagielski if(nLeftSpace>=0)
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski Size aSize( aTxtMin.GetSizePixel() );
231*b1cdbd2cSJim Jagielski aSize.Width() = nLabelWidth;
232*b1cdbd2cSJim Jagielski aTxtMin.SetSizePixel(aSize);
233*b1cdbd2cSJim Jagielski aTxtMax.SetSizePixel(aSize);
234*b1cdbd2cSJim Jagielski aTxtMain.SetSizePixel(aSize);
235*b1cdbd2cSJim Jagielski aTxtHelp.SetSizePixel(aSize);
236*b1cdbd2cSJim Jagielski aTxtHelpCount.SetSizePixel(aSize);
237*b1cdbd2cSJim Jagielski aTxtOrigin.SetSizePixel(aSize);
238*b1cdbd2cSJim Jagielski m_aTxt_TimeResolution.SetSizePixel(aSize);
239*b1cdbd2cSJim Jagielski m_aTxt_AxisType.SetSizePixel(aSize);
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski long nOrgAutoCheckX = aCbxAutoMin.GetPosPixel().X();
242*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepMain, nOrgAutoCheckX );
243*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepHelp, nOrgAutoCheckX );
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski lcl_shiftControls( aFmtFldMin, aCbxAutoMin, nNewXPos );
246*b1cdbd2cSJim Jagielski lcl_shiftControls( aFmtFldMax, aCbxAutoMax, nNewXPos );
247*b1cdbd2cSJim Jagielski lcl_shiftControls( aFmtFldStepMain, aCbxAutoStepMain, nNewXPos );
248*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aMt_MainDateStep, aFmtFldStepMain.GetPosPixel().X() );
249*b1cdbd2cSJim Jagielski lcl_shiftControls( aMtStepHelp, aCbxAutoStepHelp, nNewXPos );
250*b1cdbd2cSJim Jagielski lcl_shiftControls( aFmtFldOrigin, aCbxAutoOrigin, nNewXPos );
251*b1cdbd2cSJim Jagielski lcl_shiftControls( m_aLB_TimeResolution, m_aCbx_AutoTimeResolution, nNewXPos );
252*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_AxisType, nNewXPos );
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski nNewXPos = aCbxAutoStepMain.GetPosPixel().X() + aCbxAutoStepMain.GetSizePixel().Width() + nLabelDistance;
255*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_MainTimeUnit, nNewXPos );
256*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_HelpTimeUnit, nNewXPos );
257*b1cdbd2cSJim Jagielski }
258*b1cdbd2cSJim Jagielski PlaceIntervalControlsAccordingToAxisType();
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski
PlaceIntervalControlsAccordingToAxisType()261*b1cdbd2cSJim Jagielski void ScaleTabPage::PlaceIntervalControlsAccordingToAxisType()
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski long nMinX = std::min( aCbxAutoStepMain.GetPosPixel().X(), m_aLB_MainTimeUnit.GetPosPixel().X() );
264*b1cdbd2cSJim Jagielski long nLabelDistance = lcl_getLabelDistance(aTxtMin);
265*b1cdbd2cSJim Jagielski long nListWidth = m_aLB_MainTimeUnit.GetSizePixel().Width();
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski if( chart2::AxisType::DATE == m_nAxisType )
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_MainTimeUnit, nMinX );
270*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_HelpTimeUnit, nMinX );
271*b1cdbd2cSJim Jagielski long nSecondX = nMinX + nListWidth + nLabelDistance;
272*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepMain, nSecondX );
273*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepHelp, nSecondX );
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski long nOne = m_aMt_MainDateStep.LogicToPixel( Size(0, 1), MapMode(MAP_APPFONT) ).Height();
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski long nYMajor = m_aMt_MainDateStep.GetPosPixel().Y();
278*b1cdbd2cSJim Jagielski lcl_placeControlAtY( aCbxAutoStepMain , nYMajor+(3*nOne));
279*b1cdbd2cSJim Jagielski lcl_placeControlAtY( aTxtMain , nYMajor+nOne+nOne);
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski long nYMinor = m_aLB_HelpTimeUnit.GetPosPixel().Y();
282*b1cdbd2cSJim Jagielski lcl_placeControlAtY( aMtStepHelp , nYMinor );
283*b1cdbd2cSJim Jagielski lcl_placeControlAtY( aCbxAutoStepHelp , nYMinor+(3*nOne));
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski else
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepMain, nMinX );
288*b1cdbd2cSJim Jagielski lcl_placeControlAtX( aCbxAutoStepHelp, nMinX );
289*b1cdbd2cSJim Jagielski long nSecondX = nMinX + aCbxAutoStepMain.GetSizePixel().Width() + nLabelDistance;
290*b1cdbd2cSJim Jagielski long nSecondXMax = GetSizePixel().Width() - nListWidth;
291*b1cdbd2cSJim Jagielski if( nSecondX > nSecondXMax )
292*b1cdbd2cSJim Jagielski nSecondX = nSecondXMax;
293*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_MainTimeUnit, nSecondX );
294*b1cdbd2cSJim Jagielski lcl_placeControlAtX( m_aLB_HelpTimeUnit, nSecondX );
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski
EnableControls()298*b1cdbd2cSJim Jagielski void ScaleTabPage::EnableControls()
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski bool bValueAxis = chart2::AxisType::REALNUMBER == m_nAxisType || chart2::AxisType::PERCENT == m_nAxisType || chart2::AxisType::DATE == m_nAxisType;
301*b1cdbd2cSJim Jagielski bool bDateAxis = chart2::AxisType::DATE == m_nAxisType;
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski m_aTxt_AxisType.Show(m_bAllowDateAxis);
304*b1cdbd2cSJim Jagielski m_aLB_AxisType.Show(m_bAllowDateAxis);
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski aCbxLogarithm.Show( bValueAxis && !bDateAxis );
307*b1cdbd2cSJim Jagielski aTxtMin.Show( bValueAxis );
308*b1cdbd2cSJim Jagielski aFmtFldMin.Show( bValueAxis );
309*b1cdbd2cSJim Jagielski aCbxAutoMin.Show( bValueAxis );
310*b1cdbd2cSJim Jagielski aTxtMax.Show( bValueAxis );
311*b1cdbd2cSJim Jagielski aFmtFldMax.Show( bValueAxis );
312*b1cdbd2cSJim Jagielski aCbxAutoMax.Show( bValueAxis );
313*b1cdbd2cSJim Jagielski aTxtMain.Show( bValueAxis );
314*b1cdbd2cSJim Jagielski aFmtFldStepMain.Show( bValueAxis );
315*b1cdbd2cSJim Jagielski aCbxAutoStepMain.Show( bValueAxis );
316*b1cdbd2cSJim Jagielski aTxtHelp.Show( bValueAxis );
317*b1cdbd2cSJim Jagielski aTxtHelpCount.Show( bValueAxis );
318*b1cdbd2cSJim Jagielski aMtStepHelp.Show( bValueAxis );
319*b1cdbd2cSJim Jagielski aCbxAutoStepHelp.Show( bValueAxis );
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski aTxtOrigin.Show( m_bShowAxisOrigin && bValueAxis );
322*b1cdbd2cSJim Jagielski aFmtFldOrigin.Show( m_bShowAxisOrigin && bValueAxis );
323*b1cdbd2cSJim Jagielski aCbxAutoOrigin.Show( m_bShowAxisOrigin && bValueAxis );
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski aTxtHelpCount.Show( bValueAxis && !bDateAxis );
326*b1cdbd2cSJim Jagielski aTxtHelp.Show( bDateAxis );
327*b1cdbd2cSJim Jagielski
328*b1cdbd2cSJim Jagielski m_aTxt_TimeResolution.Show( bDateAxis );
329*b1cdbd2cSJim Jagielski m_aLB_TimeResolution.Show( bDateAxis );
330*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution.Show( bDateAxis );
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski bool bWasDateAxis = m_aMt_MainDateStep.IsVisible();
333*b1cdbd2cSJim Jagielski if( bWasDateAxis != bDateAxis )
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski //transport value from one to other control
336*b1cdbd2cSJim Jagielski if( bWasDateAxis )
337*b1cdbd2cSJim Jagielski lcl_setValue( aFmtFldStepMain, m_aMt_MainDateStep.GetValue() );
338*b1cdbd2cSJim Jagielski else
339*b1cdbd2cSJim Jagielski m_aMt_MainDateStep.SetValue( static_cast<sal_Int32>(aFmtFldStepMain.GetValue()) );
340*b1cdbd2cSJim Jagielski }
341*b1cdbd2cSJim Jagielski aFmtFldStepMain.Show( bValueAxis && !bDateAxis );
342*b1cdbd2cSJim Jagielski m_aMt_MainDateStep.Show( bDateAxis );
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski m_aLB_MainTimeUnit.Show( bDateAxis );
345*b1cdbd2cSJim Jagielski m_aLB_HelpTimeUnit.Show( bDateAxis );
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski EnableValueHdl(&aCbxAutoMin);
348*b1cdbd2cSJim Jagielski EnableValueHdl(&aCbxAutoMax);
349*b1cdbd2cSJim Jagielski EnableValueHdl(&aCbxAutoStepMain);
350*b1cdbd2cSJim Jagielski EnableValueHdl(&aCbxAutoStepHelp);
351*b1cdbd2cSJim Jagielski EnableValueHdl(&aCbxAutoOrigin);
352*b1cdbd2cSJim Jagielski EnableValueHdl(&m_aCbx_AutoTimeResolution);
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski
IMPL_LINK(ScaleTabPage,EnableValueHdl,CheckBox *,pCbx)355*b1cdbd2cSJim Jagielski IMPL_LINK( ScaleTabPage, EnableValueHdl, CheckBox *, pCbx )
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski bool bEnable = pCbx && !pCbx->IsChecked() && pCbx->IsEnabled();
358*b1cdbd2cSJim Jagielski if (pCbx == &aCbxAutoMin)
359*b1cdbd2cSJim Jagielski {
360*b1cdbd2cSJim Jagielski aFmtFldMin.Enable( bEnable );
361*b1cdbd2cSJim Jagielski }
362*b1cdbd2cSJim Jagielski else if (pCbx == &aCbxAutoMax)
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski aFmtFldMax.Enable( bEnable );
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski else if (pCbx == &aCbxAutoStepMain)
367*b1cdbd2cSJim Jagielski {
368*b1cdbd2cSJim Jagielski aFmtFldStepMain.Enable( bEnable );
369*b1cdbd2cSJim Jagielski m_aMt_MainDateStep.Enable( bEnable );
370*b1cdbd2cSJim Jagielski m_aLB_MainTimeUnit.Enable( bEnable );
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski else if (pCbx == &aCbxAutoStepHelp)
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski aMtStepHelp.Enable( bEnable );
375*b1cdbd2cSJim Jagielski m_aLB_HelpTimeUnit.Enable( bEnable );
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski else if (pCbx == &m_aCbx_AutoTimeResolution)
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski m_aLB_TimeResolution.Enable( bEnable );
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski else if (pCbx == &aCbxAutoOrigin)
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski aFmtFldOrigin.Enable( bEnable );
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski return 0;
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski
388*b1cdbd2cSJim Jagielski enum AxisTypeListBoxEntry
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski TYPE_AUTO=0,
391*b1cdbd2cSJim Jagielski TYPE_TEXT=1,
392*b1cdbd2cSJim Jagielski TYPE_DATE=2
393*b1cdbd2cSJim Jagielski };
394*b1cdbd2cSJim Jagielski
IMPL_LINK(ScaleTabPage,SelectAxisTypeHdl,void *,EMPTYARG)395*b1cdbd2cSJim Jagielski IMPL_LINK( ScaleTabPage, SelectAxisTypeHdl, void *, EMPTYARG )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski sal_uInt16 nPos = m_aLB_AxisType.GetSelectEntryPos();
398*b1cdbd2cSJim Jagielski if( nPos==TYPE_DATE )
399*b1cdbd2cSJim Jagielski m_nAxisType = chart2::AxisType::DATE;
400*b1cdbd2cSJim Jagielski else
401*b1cdbd2cSJim Jagielski m_nAxisType = chart2::AxisType::CATEGORY;
402*b1cdbd2cSJim Jagielski if( chart2::AxisType::DATE == m_nAxisType )
403*b1cdbd2cSJim Jagielski aCbxLogarithm.Check(false);
404*b1cdbd2cSJim Jagielski EnableControls();
405*b1cdbd2cSJim Jagielski PlaceIntervalControlsAccordingToAxisType();
406*b1cdbd2cSJim Jagielski SetNumFormat();
407*b1cdbd2cSJim Jagielski return 0;
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski
Create(Window * pWindow,const SfxItemSet & rOutAttrs)410*b1cdbd2cSJim Jagielski SfxTabPage* ScaleTabPage::Create(Window* pWindow,const SfxItemSet& rOutAttrs)
411*b1cdbd2cSJim Jagielski {
412*b1cdbd2cSJim Jagielski return new ScaleTabPage(pWindow, rOutAttrs);
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski
FillItemSet(SfxItemSet & rOutAttrs)415*b1cdbd2cSJim Jagielski sal_Bool ScaleTabPage::FillItemSet(SfxItemSet& rOutAttrs)
416*b1cdbd2cSJim Jagielski {
417*b1cdbd2cSJim Jagielski DBG_ASSERT( pNumFormatter, "No NumberFormatter available" );
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxInt32Item(SCHATTR_AXISTYPE, m_nAxisType));
420*b1cdbd2cSJim Jagielski if(m_bAllowDateAxis)
421*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_DATEAXIS, TYPE_AUTO==m_aLB_AxisType.GetSelectEntryPos()));
422*b1cdbd2cSJim Jagielski
423*b1cdbd2cSJim Jagielski bool bAutoScale = false;
424*b1cdbd2cSJim Jagielski if( m_nAxisType==chart2::AxisType::CATEGORY )
425*b1cdbd2cSJim Jagielski bAutoScale = true;//reset scaling for category charts
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MIN ,bAutoScale || aCbxAutoMin.IsChecked()));
428*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MAX ,bAutoScale || aCbxAutoMax.IsChecked()));
429*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_HELP,bAutoScale || aCbxAutoStepHelp.IsChecked()));
430*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_ORIGIN ,bAutoScale || aCbxAutoOrigin.IsChecked()));
431*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_LOGARITHM ,aCbxLogarithm.IsChecked()));
432*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_REVERSE ,aCbxReverse.IsChecked()));
433*b1cdbd2cSJim Jagielski rOutAttrs.Put(SvxDoubleItem(fMax , SCHATTR_AXIS_MAX));
434*b1cdbd2cSJim Jagielski rOutAttrs.Put(SvxDoubleItem(fMin , SCHATTR_AXIS_MIN));
435*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS_STEP_HELP, nStepHelp));
436*b1cdbd2cSJim Jagielski rOutAttrs.Put(SvxDoubleItem(fOrigin , SCHATTR_AXIS_ORIGIN));
437*b1cdbd2cSJim Jagielski
438*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_MAIN,bAutoScale || aCbxAutoStepMain.IsChecked()));
439*b1cdbd2cSJim Jagielski rOutAttrs.Put(SvxDoubleItem(fStepMain,SCHATTR_AXIS_STEP_MAIN));
440*b1cdbd2cSJim Jagielski
441*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxBoolItem(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,bAutoScale || m_aCbx_AutoTimeResolution.IsChecked()));
442*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS_TIME_RESOLUTION,m_nTimeResolution));
443*b1cdbd2cSJim Jagielski
444*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS_MAIN_TIME_UNIT,m_nMainTimeUnit));
445*b1cdbd2cSJim Jagielski rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS_HELP_TIME_UNIT,m_nHelpTimeUnit));
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski return sal_True;
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski
Reset(const SfxItemSet & rInAttrs)450*b1cdbd2cSJim Jagielski void ScaleTabPage::Reset(const SfxItemSet& rInAttrs)
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski DBG_ASSERT( pNumFormatter, "No NumberFormatter available" );
453*b1cdbd2cSJim Jagielski if(!pNumFormatter)
454*b1cdbd2cSJim Jagielski return;
455*b1cdbd2cSJim Jagielski
456*b1cdbd2cSJim Jagielski const SfxPoolItem *pPoolItem = NULL;
457*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_ALLOW_DATEAXIS, sal_True, &pPoolItem) == SFX_ITEM_SET)
458*b1cdbd2cSJim Jagielski m_bAllowDateAxis = (bool) ((const SfxBoolItem*)pPoolItem)->GetValue();
459*b1cdbd2cSJim Jagielski m_nAxisType=chart2::AxisType::REALNUMBER;
460*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXISTYPE, sal_True, &pPoolItem) == SFX_ITEM_SET)
461*b1cdbd2cSJim Jagielski m_nAxisType = (int) ((const SfxInt32Item*)pPoolItem)->GetValue();
462*b1cdbd2cSJim Jagielski if( m_nAxisType==chart2::AxisType::DATE && !m_bAllowDateAxis )
463*b1cdbd2cSJim Jagielski m_nAxisType=chart2::AxisType::CATEGORY;
464*b1cdbd2cSJim Jagielski if( m_bAllowDateAxis )
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski bool bAutoDateAxis = false;
467*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_DATEAXIS, sal_True, &pPoolItem) == SFX_ITEM_SET)
468*b1cdbd2cSJim Jagielski bAutoDateAxis = (bool) ((const SfxBoolItem*)pPoolItem)->GetValue();
469*b1cdbd2cSJim Jagielski
470*b1cdbd2cSJim Jagielski sal_uInt16 nPos = 0;
471*b1cdbd2cSJim Jagielski if( m_nAxisType==chart2::AxisType::DATE )
472*b1cdbd2cSJim Jagielski nPos=TYPE_DATE;
473*b1cdbd2cSJim Jagielski else if( bAutoDateAxis )
474*b1cdbd2cSJim Jagielski nPos=TYPE_AUTO;
475*b1cdbd2cSJim Jagielski else
476*b1cdbd2cSJim Jagielski nPos=TYPE_TEXT;
477*b1cdbd2cSJim Jagielski m_aLB_AxisType.SelectEntryPos( nPos );
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski
480*b1cdbd2cSJim Jagielski if( m_bAllowDateAxis )
481*b1cdbd2cSJim Jagielski aCbxReverse.SetHelpId("chart2:CheckBox:TP_SCALE:CBX_REVERSE:MayBeDateAxis");
482*b1cdbd2cSJim Jagielski else if( m_nAxisType==chart2::AxisType::CATEGORY || m_nAxisType==chart2::AxisType::SERIES )
483*b1cdbd2cSJim Jagielski aCbxReverse.SetHelpId("chart2:CheckBox:TP_SCALE:CBX_REVERSE:Category");
484*b1cdbd2cSJim Jagielski
485*b1cdbd2cSJim Jagielski PlaceIntervalControlsAccordingToAxisType();
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski aCbxAutoMin.Check( true );
488*b1cdbd2cSJim Jagielski aCbxAutoMax.Check( true );
489*b1cdbd2cSJim Jagielski aCbxAutoStepMain.Check( true );
490*b1cdbd2cSJim Jagielski aCbxAutoStepHelp.Check( true );
491*b1cdbd2cSJim Jagielski aCbxAutoOrigin.Check( true );
492*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution.Check( true );
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_MIN,sal_True,&pPoolItem) == SFX_ITEM_SET)
495*b1cdbd2cSJim Jagielski aCbxAutoMin.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
496*b1cdbd2cSJim Jagielski
497*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_MIN,sal_True, &pPoolItem) == SFX_ITEM_SET)
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski fMin = ((const SvxDoubleItem*)pPoolItem)->GetValue();
500*b1cdbd2cSJim Jagielski lcl_setValue( aFmtFldMin, fMin );
501*b1cdbd2cSJim Jagielski }
502*b1cdbd2cSJim Jagielski
503*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_MAX,sal_True, &pPoolItem) == SFX_ITEM_SET)
504*b1cdbd2cSJim Jagielski aCbxAutoMax.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_MAX,sal_True, &pPoolItem) == SFX_ITEM_SET)
507*b1cdbd2cSJim Jagielski {
508*b1cdbd2cSJim Jagielski fMax = ((const SvxDoubleItem*)pPoolItem)->GetValue();
509*b1cdbd2cSJim Jagielski lcl_setValue( aFmtFldMax, fMax );
510*b1cdbd2cSJim Jagielski }
511*b1cdbd2cSJim Jagielski
512*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_STEP_MAIN,sal_True, &pPoolItem) == SFX_ITEM_SET)
513*b1cdbd2cSJim Jagielski aCbxAutoStepMain.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_STEP_MAIN,sal_True, &pPoolItem) == SFX_ITEM_SET)
516*b1cdbd2cSJim Jagielski {
517*b1cdbd2cSJim Jagielski fStepMain = ((const SvxDoubleItem*)pPoolItem)->GetValue();
518*b1cdbd2cSJim Jagielski lcl_setValue( aFmtFldStepMain, fStepMain );
519*b1cdbd2cSJim Jagielski m_aMt_MainDateStep.SetValue( static_cast<sal_Int32>(fStepMain) );
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_STEP_HELP,sal_True, &pPoolItem) == SFX_ITEM_SET)
522*b1cdbd2cSJim Jagielski aCbxAutoStepHelp.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
523*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_LOGARITHM,sal_True, &pPoolItem) == SFX_ITEM_SET)
524*b1cdbd2cSJim Jagielski aCbxLogarithm.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
525*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_REVERSE,sal_True, &pPoolItem) == SFX_ITEM_SET)
526*b1cdbd2cSJim Jagielski aCbxReverse.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
527*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_STEP_HELP,sal_True, &pPoolItem) == SFX_ITEM_SET)
528*b1cdbd2cSJim Jagielski {
529*b1cdbd2cSJim Jagielski nStepHelp = ((const SfxInt32Item*)pPoolItem)->GetValue();
530*b1cdbd2cSJim Jagielski aMtStepHelp.SetValue( nStepHelp );
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_ORIGIN,sal_True, &pPoolItem) == SFX_ITEM_SET)
533*b1cdbd2cSJim Jagielski aCbxAutoOrigin.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
534*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_ORIGIN,sal_True, &pPoolItem) == SFX_ITEM_SET)
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski fOrigin = ((const SvxDoubleItem*)pPoolItem)->GetValue();
537*b1cdbd2cSJim Jagielski lcl_setValue( aFmtFldOrigin, fOrigin );
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski
540*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,sal_True, &pPoolItem) == SFX_ITEM_SET)
541*b1cdbd2cSJim Jagielski m_aCbx_AutoTimeResolution.Check(((const SfxBoolItem*)pPoolItem)->GetValue());
542*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_TIME_RESOLUTION,sal_True, &pPoolItem) == SFX_ITEM_SET)
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski m_nTimeResolution = ((const SfxInt32Item*)pPoolItem)->GetValue();
545*b1cdbd2cSJim Jagielski m_aLB_TimeResolution.SelectEntryPos( m_nTimeResolution );
546*b1cdbd2cSJim Jagielski }
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_MAIN_TIME_UNIT,sal_True, &pPoolItem) == SFX_ITEM_SET)
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski m_nMainTimeUnit = ((const SfxInt32Item*)pPoolItem)->GetValue();
551*b1cdbd2cSJim Jagielski m_aLB_MainTimeUnit.SelectEntryPos( m_nMainTimeUnit );
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski if (rInAttrs.GetItemState(SCHATTR_AXIS_HELP_TIME_UNIT,sal_True, &pPoolItem) == SFX_ITEM_SET)
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski m_nHelpTimeUnit = ((const SfxInt32Item*)pPoolItem)->GetValue();
556*b1cdbd2cSJim Jagielski m_aLB_HelpTimeUnit.SelectEntryPos( m_nHelpTimeUnit );
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski EnableControls();
560*b1cdbd2cSJim Jagielski SetNumFormat();
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski
DeactivatePage(SfxItemSet * pItemSet)563*b1cdbd2cSJim Jagielski int ScaleTabPage::DeactivatePage(SfxItemSet* pItemSet)
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski if( !pNumFormatter )
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski DBG_ERROR( "No NumberFormatter available" );
568*b1cdbd2cSJim Jagielski return LEAVE_PAGE;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski bool bDateAxis = chart2::AxisType::DATE == m_nAxisType;
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski sal_uInt32 nIndex = pNumFormatter->GetStandardIndex(LANGUAGE_SYSTEM);
574*b1cdbd2cSJim Jagielski const SfxPoolItem *pPoolItem = NULL;
575*b1cdbd2cSJim Jagielski if( GetItemSet().GetItemState( SID_ATTR_NUMBERFORMAT_VALUE, sal_True, &pPoolItem ) == SFX_ITEM_SET )
576*b1cdbd2cSJim Jagielski nIndex = static_cast< sal_uInt32 >( static_cast< const SfxInt32Item* >(pPoolItem)->GetValue());
577*b1cdbd2cSJim Jagielski else
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "Using Standard Language" );
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski Control* pControl = NULL;
583*b1cdbd2cSJim Jagielski sal_uInt16 nErrStrId = 0;
584*b1cdbd2cSJim Jagielski double fDummy;
585*b1cdbd2cSJim Jagielski
586*b1cdbd2cSJim Jagielski fMax = aFmtFldMax.GetValue();
587*b1cdbd2cSJim Jagielski fMin = aFmtFldMin.GetValue();
588*b1cdbd2cSJim Jagielski fOrigin = aFmtFldOrigin.GetValue();
589*b1cdbd2cSJim Jagielski fStepMain = bDateAxis ? m_aMt_MainDateStep.GetValue() : aFmtFldStepMain.GetValue();
590*b1cdbd2cSJim Jagielski nStepHelp = static_cast< sal_Int32 >( aMtStepHelp.GetValue());
591*b1cdbd2cSJim Jagielski m_nTimeResolution = m_aLB_TimeResolution.GetSelectEntryPos();
592*b1cdbd2cSJim Jagielski m_nMainTimeUnit = m_aLB_MainTimeUnit.GetSelectEntryPos();
593*b1cdbd2cSJim Jagielski m_nHelpTimeUnit = m_aLB_HelpTimeUnit.GetSelectEntryPos();
594*b1cdbd2cSJim Jagielski
595*b1cdbd2cSJim Jagielski if( chart2::AxisType::REALNUMBER != m_nAxisType )
596*b1cdbd2cSJim Jagielski aCbxLogarithm.Show( false );
597*b1cdbd2cSJim Jagielski
598*b1cdbd2cSJim Jagielski //check wich entries need user action
599*b1cdbd2cSJim Jagielski
600*b1cdbd2cSJim Jagielski if ( aCbxLogarithm.IsChecked() &&
601*b1cdbd2cSJim Jagielski ( ( !aCbxAutoMin.IsChecked() && fMin <= 0.0 )
602*b1cdbd2cSJim Jagielski || ( !aCbxAutoMax.IsChecked() && fMax <= 0.0 ) ) )
603*b1cdbd2cSJim Jagielski {
604*b1cdbd2cSJim Jagielski pControl = &aFmtFldMin;
605*b1cdbd2cSJim Jagielski nErrStrId = STR_BAD_LOGARITHM;
606*b1cdbd2cSJim Jagielski }
607*b1cdbd2cSJim Jagielski else if (!aCbxAutoMax.IsChecked() && !aCbxAutoMin.IsChecked() &&
608*b1cdbd2cSJim Jagielski fMin >= fMax)
609*b1cdbd2cSJim Jagielski {
610*b1cdbd2cSJim Jagielski pControl = &aFmtFldMin;
611*b1cdbd2cSJim Jagielski nErrStrId = STR_MIN_GREATER_MAX;
612*b1cdbd2cSJim Jagielski }
613*b1cdbd2cSJim Jagielski else if (!aCbxAutoStepMain.IsChecked() && fStepMain <= 0)
614*b1cdbd2cSJim Jagielski {
615*b1cdbd2cSJim Jagielski pControl = &aFmtFldStepMain;
616*b1cdbd2cSJim Jagielski nErrStrId = STR_STEP_GT_ZERO;
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski // check for entries that cannot be parsed for the current number format
619*b1cdbd2cSJim Jagielski else if ( aFmtFldMin.IsModified()
620*b1cdbd2cSJim Jagielski && !aCbxAutoMin.IsChecked()
621*b1cdbd2cSJim Jagielski && !pNumFormatter->IsNumberFormat(aFmtFldMin.GetText(), nIndex, fDummy))
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski pControl = &aFmtFldMin;
624*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_NUMBER;
625*b1cdbd2cSJim Jagielski }
626*b1cdbd2cSJim Jagielski else if (aFmtFldMax.IsModified() && !aCbxAutoMax.IsChecked() &&
627*b1cdbd2cSJim Jagielski !pNumFormatter->IsNumberFormat(aFmtFldMax.GetText(),
628*b1cdbd2cSJim Jagielski nIndex, fDummy))
629*b1cdbd2cSJim Jagielski {
630*b1cdbd2cSJim Jagielski pControl = &aFmtFldMax;
631*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_NUMBER;
632*b1cdbd2cSJim Jagielski }
633*b1cdbd2cSJim Jagielski else if ( !bDateAxis && aFmtFldStepMain.IsModified() && !aCbxAutoStepMain.IsChecked() &&
634*b1cdbd2cSJim Jagielski !pNumFormatter->IsNumberFormat(aFmtFldStepMain.GetText(),
635*b1cdbd2cSJim Jagielski nIndex, fDummy))
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski pControl = &aFmtFldStepMain;
638*b1cdbd2cSJim Jagielski nErrStrId = STR_STEP_GT_ZERO;
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski else if (aFmtFldOrigin.IsModified() && !aCbxAutoOrigin.IsChecked() &&
641*b1cdbd2cSJim Jagielski !pNumFormatter->IsNumberFormat(aFmtFldOrigin.GetText(),
642*b1cdbd2cSJim Jagielski nIndex, fDummy))
643*b1cdbd2cSJim Jagielski {
644*b1cdbd2cSJim Jagielski pControl = &aFmtFldOrigin;
645*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_NUMBER;
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski else if (!aCbxAutoStepMain.IsChecked() && fStepMain <= 0.0)
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski pControl = &aFmtFldStepMain;
650*b1cdbd2cSJim Jagielski nErrStrId = STR_STEP_GT_ZERO;
651*b1cdbd2cSJim Jagielski }
652*b1cdbd2cSJim Jagielski else if( bDateAxis )
653*b1cdbd2cSJim Jagielski {
654*b1cdbd2cSJim Jagielski if( !aCbxAutoStepMain.IsChecked() && !aCbxAutoStepHelp.IsChecked() )
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski if( m_nHelpTimeUnit > m_nMainTimeUnit )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski pControl = &m_aLB_MainTimeUnit;
659*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_INTERVALS;
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski else if( m_nHelpTimeUnit == m_nMainTimeUnit && nStepHelp > fStepMain )
662*b1cdbd2cSJim Jagielski {
663*b1cdbd2cSJim Jagielski pControl = &m_aLB_MainTimeUnit;
664*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_INTERVALS;
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski if( !nErrStrId && !m_aCbx_AutoTimeResolution.IsChecked() )
668*b1cdbd2cSJim Jagielski {
669*b1cdbd2cSJim Jagielski if( (!aCbxAutoStepMain.IsChecked() && m_nTimeResolution > m_nMainTimeUnit )
670*b1cdbd2cSJim Jagielski ||
671*b1cdbd2cSJim Jagielski (!aCbxAutoStepHelp.IsChecked() && m_nTimeResolution > m_nHelpTimeUnit )
672*b1cdbd2cSJim Jagielski )
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski pControl = &m_aLB_TimeResolution;
675*b1cdbd2cSJim Jagielski nErrStrId = STR_INVALID_TIME_UNIT;
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski
680*b1cdbd2cSJim Jagielski if( ShowWarning( nErrStrId, pControl ) )
681*b1cdbd2cSJim Jagielski return KEEP_PAGE;
682*b1cdbd2cSJim Jagielski
683*b1cdbd2cSJim Jagielski if( pItemSet )
684*b1cdbd2cSJim Jagielski FillItemSet( *pItemSet );
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski return LEAVE_PAGE;
687*b1cdbd2cSJim Jagielski }
688*b1cdbd2cSJim Jagielski
SetNumFormatter(SvNumberFormatter * pFormatter)689*b1cdbd2cSJim Jagielski void ScaleTabPage::SetNumFormatter( SvNumberFormatter* pFormatter )
690*b1cdbd2cSJim Jagielski {
691*b1cdbd2cSJim Jagielski pNumFormatter = pFormatter;
692*b1cdbd2cSJim Jagielski aFmtFldMax.SetFormatter( pNumFormatter );
693*b1cdbd2cSJim Jagielski aFmtFldMin.SetFormatter( pNumFormatter );
694*b1cdbd2cSJim Jagielski aFmtFldStepMain.SetFormatter( pNumFormatter );
695*b1cdbd2cSJim Jagielski aFmtFldOrigin.SetFormatter( pNumFormatter );
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski // #101318#, #i6278# allow more decimal places than the output format. As
698*b1cdbd2cSJim Jagielski // the numbers shown in the edit fields are used for input, it makes more
699*b1cdbd2cSJim Jagielski // sense to display the values in the input format rather than the output
700*b1cdbd2cSJim Jagielski // format.
701*b1cdbd2cSJim Jagielski aFmtFldMax.UseInputStringForFormatting();
702*b1cdbd2cSJim Jagielski aFmtFldMin.UseInputStringForFormatting();
703*b1cdbd2cSJim Jagielski aFmtFldStepMain.UseInputStringForFormatting();
704*b1cdbd2cSJim Jagielski aFmtFldOrigin.UseInputStringForFormatting();
705*b1cdbd2cSJim Jagielski
706*b1cdbd2cSJim Jagielski SetNumFormat();
707*b1cdbd2cSJim Jagielski }
708*b1cdbd2cSJim Jagielski
SetNumFormat()709*b1cdbd2cSJim Jagielski void ScaleTabPage::SetNumFormat()
710*b1cdbd2cSJim Jagielski {
711*b1cdbd2cSJim Jagielski const SfxPoolItem *pPoolItem = NULL;
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski if( GetItemSet().GetItemState( SID_ATTR_NUMBERFORMAT_VALUE, sal_True, &pPoolItem ) == SFX_ITEM_SET )
714*b1cdbd2cSJim Jagielski {
715*b1cdbd2cSJim Jagielski sal_uLong nFmt = (sal_uLong)((const SfxInt32Item*)pPoolItem)->GetValue();
716*b1cdbd2cSJim Jagielski
717*b1cdbd2cSJim Jagielski aFmtFldMax.SetFormatKey( nFmt );
718*b1cdbd2cSJim Jagielski aFmtFldMin.SetFormatKey( nFmt );
719*b1cdbd2cSJim Jagielski aFmtFldOrigin.SetFormatKey( nFmt );
720*b1cdbd2cSJim Jagielski
721*b1cdbd2cSJim Jagielski if( pNumFormatter )
722*b1cdbd2cSJim Jagielski {
723*b1cdbd2cSJim Jagielski short eType = pNumFormatter->GetType( nFmt );
724*b1cdbd2cSJim Jagielski if( eType == NUMBERFORMAT_DATE )
725*b1cdbd2cSJim Jagielski {
726*b1cdbd2cSJim Jagielski // for intervals use standard format for dates (so you can enter a number of days)
727*b1cdbd2cSJim Jagielski const SvNumberformat* pFormat = pNumFormatter->GetEntry( nFmt );
728*b1cdbd2cSJim Jagielski if( pFormat )
729*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardIndex( pFormat->GetLanguage());
730*b1cdbd2cSJim Jagielski else
731*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardIndex();
732*b1cdbd2cSJim Jagielski }
733*b1cdbd2cSJim Jagielski else if( eType == NUMBERFORMAT_DATETIME )
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski // for intervals use time format for date times
736*b1cdbd2cSJim Jagielski const SvNumberformat* pFormat = pNumFormatter->GetEntry( nFmt );
737*b1cdbd2cSJim Jagielski if( pFormat )
738*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardFormat( NUMBERFORMAT_TIME, pFormat->GetLanguage() );
739*b1cdbd2cSJim Jagielski else
740*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardFormat( NUMBERFORMAT_TIME );
741*b1cdbd2cSJim Jagielski }
742*b1cdbd2cSJim Jagielski
743*b1cdbd2cSJim Jagielski if( chart2::AxisType::DATE == m_nAxisType && ( eType != NUMBERFORMAT_DATE && eType != NUMBERFORMAT_DATETIME) )
744*b1cdbd2cSJim Jagielski {
745*b1cdbd2cSJim Jagielski const SvNumberformat* pFormat = pNumFormatter->GetEntry( nFmt );
746*b1cdbd2cSJim Jagielski if( pFormat )
747*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardFormat( NUMBERFORMAT_DATE, pFormat->GetLanguage() );
748*b1cdbd2cSJim Jagielski else
749*b1cdbd2cSJim Jagielski nFmt = pNumFormatter->GetStandardFormat( NUMBERFORMAT_DATE );
750*b1cdbd2cSJim Jagielski
751*b1cdbd2cSJim Jagielski aFmtFldMax.SetFormatKey( nFmt );
752*b1cdbd2cSJim Jagielski aFmtFldMin.SetFormatKey( nFmt );
753*b1cdbd2cSJim Jagielski aFmtFldOrigin.SetFormatKey( nFmt );
754*b1cdbd2cSJim Jagielski }
755*b1cdbd2cSJim Jagielski }
756*b1cdbd2cSJim Jagielski
757*b1cdbd2cSJim Jagielski aFmtFldStepMain.SetFormatKey( nFmt );
758*b1cdbd2cSJim Jagielski }
759*b1cdbd2cSJim Jagielski }
760*b1cdbd2cSJim Jagielski
ShowAxisOrigin(bool bShowOrigin)761*b1cdbd2cSJim Jagielski void ScaleTabPage::ShowAxisOrigin( bool bShowOrigin )
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski m_bShowAxisOrigin = bShowOrigin;
764*b1cdbd2cSJim Jagielski if( !AxisHelper::isAxisPositioningEnabled() )
765*b1cdbd2cSJim Jagielski m_bShowAxisOrigin = true;
766*b1cdbd2cSJim Jagielski }
767*b1cdbd2cSJim Jagielski
ShowWarning(sal_uInt16 nResIdMessage,Control * pControl)768*b1cdbd2cSJim Jagielski bool ScaleTabPage::ShowWarning( sal_uInt16 nResIdMessage, Control* pControl /* = NULL */ )
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski if( nResIdMessage == 0 )
771*b1cdbd2cSJim Jagielski return false;
772*b1cdbd2cSJim Jagielski
773*b1cdbd2cSJim Jagielski WarningBox( this, WinBits( WB_OK ), String( SchResId( nResIdMessage ))).Execute();
774*b1cdbd2cSJim Jagielski if( pControl )
775*b1cdbd2cSJim Jagielski {
776*b1cdbd2cSJim Jagielski pControl->GrabFocus();
777*b1cdbd2cSJim Jagielski Edit* pEdit = dynamic_cast<Edit*>(pControl);
778*b1cdbd2cSJim Jagielski if(pEdit)
779*b1cdbd2cSJim Jagielski pEdit->SetSelection( Selection( 0, SELECTION_MAX ));
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski return true;
782*b1cdbd2cSJim Jagielski }
783*b1cdbd2cSJim Jagielski
784*b1cdbd2cSJim Jagielski //.............................................................................
785*b1cdbd2cSJim Jagielski } //namespace chart
786*b1cdbd2cSJim Jagielski //.............................................................................
787