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