1cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3cde9e8dcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4cde9e8dcSAndrew Rist * or more contributor license agreements. See the NOTICE file
5cde9e8dcSAndrew Rist * distributed with this work for additional information
6cde9e8dcSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7cde9e8dcSAndrew Rist * to you under the Apache License, Version 2.0 (the
8cde9e8dcSAndrew Rist * "License"); you may not use this file except in compliance
9cde9e8dcSAndrew Rist * with the License. You may obtain a copy of the License at
10cde9e8dcSAndrew Rist *
11cde9e8dcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cde9e8dcSAndrew Rist *
13cde9e8dcSAndrew Rist * Unless required by applicable law or agreed to in writing,
14cde9e8dcSAndrew Rist * software distributed under the License is distributed on an
15cde9e8dcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16cde9e8dcSAndrew Rist * KIND, either express or implied. See the License for the
17cde9e8dcSAndrew Rist * specific language governing permissions and limitations
18cde9e8dcSAndrew Rist * under the License.
19cde9e8dcSAndrew Rist *
20cde9e8dcSAndrew Rist *************************************************************/
21cde9e8dcSAndrew Rist
22cde9e8dcSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "res_ErrorBar.hxx"
28cdf0e10cSrcweir #include "res_ErrorBar_IDs.hrc"
29cdf0e10cSrcweir #include "ResId.hxx"
30cdf0e10cSrcweir #include "Strings.hrc"
31cdf0e10cSrcweir #include "Bitmaps.hrc"
32cdf0e10cSrcweir #include "Bitmaps_HC.hrc"
33cdf0e10cSrcweir #include "RangeSelectionHelper.hxx"
34cdf0e10cSrcweir // for RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR
35cdf0e10cSrcweir #include "TabPageNotifiable.hxx"
36cdf0e10cSrcweir #include "macros.hxx"
37cdf0e10cSrcweir
38cdf0e10cSrcweir #include <rtl/math.hxx>
39cdf0e10cSrcweir #include <vcl/dialog.hxx>
40cdf0e10cSrcweir #include <svl/stritem.hxx>
41cdf0e10cSrcweir
42cdf0e10cSrcweir using namespace ::com::sun::star;
43cdf0e10cSrcweir
44cdf0e10cSrcweir namespace
45cdf0e10cSrcweir {
lcl_enableRangeChoosing(bool bEnable,Dialog * pDialog)46cdf0e10cSrcweir void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog )
47cdf0e10cSrcweir {
48cdf0e10cSrcweir if( pDialog )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir pDialog->Show( bEnable ? sal_False : sal_True );
51cdf0e10cSrcweir pDialog->SetModalInputMode( bEnable ? sal_False : sal_True );
52cdf0e10cSrcweir }
53cdf0e10cSrcweir }
54cdf0e10cSrcweir
lcl_getLbEntryPosByErrorKind(SvxChartKindError eErrorKind)55cdf0e10cSrcweir sal_uInt16 lcl_getLbEntryPosByErrorKind( SvxChartKindError eErrorKind )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir sal_uInt16 nResult = 0;
58cdf0e10cSrcweir switch( eErrorKind )
59cdf0e10cSrcweir {
60cdf0e10cSrcweir // for these cases select the default in the list box
61cdf0e10cSrcweir case CHERROR_NONE:
62cdf0e10cSrcweir case CHERROR_PERCENT:
63cdf0e10cSrcweir case CHERROR_CONST:
64cdf0e10cSrcweir case CHERROR_RANGE:
65cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_DEV;
66cdf0e10cSrcweir break;
67cdf0e10cSrcweir case CHERROR_VARIANT:
68cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_VARIANCE;
69cdf0e10cSrcweir break;
70cdf0e10cSrcweir case CHERROR_SIGMA:
71cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_DEV;
72cdf0e10cSrcweir break;
73cdf0e10cSrcweir case CHERROR_BIGERROR:
74cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_ERROR_MARGIN;
75cdf0e10cSrcweir break;
76cdf0e10cSrcweir case CHERROR_STDERROR:
77cdf0e10cSrcweir nResult = CHART_LB_FUNCTION_STD_ERROR;
78cdf0e10cSrcweir break;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir return nResult;
81cdf0e10cSrcweir }
82cdf0e10cSrcweir } // anonymous namespace
83cdf0e10cSrcweir
84cdf0e10cSrcweir
85cdf0e10cSrcweir //.............................................................................
86cdf0e10cSrcweir namespace chart
87cdf0e10cSrcweir {
88cdf0e10cSrcweir //.............................................................................
89cdf0e10cSrcweir
90cdf0e10cSrcweir // macro for selecting a normal or high contrast bitmap the stack variable
91cdf0e10cSrcweir // bIsHighContrast must exist and reflect the correct state
92cdf0e10cSrcweir #define SELECT_IMAGE(name) Image( SchResId( bIsHighContrast ? name ## _HC : name ))
93cdf0e10cSrcweir
94cdf0e10cSrcweir enum StatIndicator
95cdf0e10cSrcweir {
96cdf0e10cSrcweir INDICATE_BOTH,
97cdf0e10cSrcweir INDICATE_UP,
98cdf0e10cSrcweir INDICATE_DOWN
99cdf0e10cSrcweir };
100cdf0e10cSrcweir
ErrorBarResources(Window * pParent,Dialog * pParentDialog,const SfxItemSet & rInAttrs,bool bNoneAvailable,tErrorBarType eType)101cdf0e10cSrcweir ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog,
102cdf0e10cSrcweir const SfxItemSet& rInAttrs, bool bNoneAvailable,
103cdf0e10cSrcweir tErrorBarType eType /* = ERROR_BAR_Y */ ) :
104cdf0e10cSrcweir
105cdf0e10cSrcweir m_aFlErrorCategory( pParent, SchResId( FL_ERROR )),
106cdf0e10cSrcweir m_aRbNone( pParent, SchResId( RB_NONE )),
107cdf0e10cSrcweir m_aRbConst( pParent, SchResId( RB_CONST )),
108cdf0e10cSrcweir m_aRbPercent( pParent, SchResId( RB_PERCENT )),
109cdf0e10cSrcweir m_aRbFunction( pParent, SchResId( RB_FUNCTION )),
110cdf0e10cSrcweir m_aRbRange( pParent, SchResId( RB_RANGE )),
111cdf0e10cSrcweir m_aLbFunction( pParent, SchResId( LB_FUNCTION )),
112cdf0e10cSrcweir
113cdf0e10cSrcweir m_aFlParameters( pParent, SchResId( FL_PARAMETERS )),
114cdf0e10cSrcweir m_aFtPositive( pParent, SchResId( FT_POSITIVE )),
115cdf0e10cSrcweir m_aMfPositive( pParent, SchResId( MF_POSITIVE )),
116cdf0e10cSrcweir m_aEdRangePositive( pParent, SchResId( ED_RANGE_POSITIVE )),
117cdf0e10cSrcweir m_aIbRangePositive( pParent, SchResId( IB_RANGE_POSITIVE )),
118cdf0e10cSrcweir m_aFtNegative( pParent, SchResId( FT_NEGATIVE )),
119cdf0e10cSrcweir m_aMfNegative( pParent, SchResId( MF_NEGATIVE )),
120cdf0e10cSrcweir m_aEdRangeNegative( pParent, SchResId( ED_RANGE_NEGATIVE )),
121cdf0e10cSrcweir m_aIbRangeNegative( pParent, SchResId( IB_RANGE_NEGATIVE )),
122cdf0e10cSrcweir m_aCbSyncPosNeg( pParent, SchResId( CB_SYN_POS_NEG )),
123cdf0e10cSrcweir
124cdf0e10cSrcweir m_aFlIndicate( pParent, SchResId( FL_INDICATE )),
125cdf0e10cSrcweir m_aRbBoth( pParent, SchResId( RB_BOTH )),
126cdf0e10cSrcweir m_aRbPositive( pParent, SchResId( RB_POSITIVE )),
127cdf0e10cSrcweir m_aRbNegative( pParent, SchResId( RB_NEGATIVE )),
128cdf0e10cSrcweir m_aFiBoth( pParent, SchResId( FI_BOTH )),
129cdf0e10cSrcweir m_aFiPositive( pParent, SchResId( FI_POSITIVE )),
130cdf0e10cSrcweir m_aFiNegative( pParent, SchResId( FI_NEGATIVE )),
131cdf0e10cSrcweir
132cdf0e10cSrcweir m_eErrorKind( CHERROR_NONE ),
133cdf0e10cSrcweir m_eIndicate( CHINDICATE_BOTH ),
134cdf0e10cSrcweir m_bErrorKindUnique( true ),
135cdf0e10cSrcweir m_bIndicatorUnique( true ),
136cdf0e10cSrcweir m_bPlusUnique( true ),
137cdf0e10cSrcweir m_bMinusUnique( true ),
138cdf0e10cSrcweir m_bRangePosUnique( true ),
139cdf0e10cSrcweir m_bRangeNegUnique( true ),
140cdf0e10cSrcweir m_bNoneAvailable( bNoneAvailable ),
141cdf0e10cSrcweir m_eErrorBarType( eType ),
142cdf0e10cSrcweir m_nConstDecimalDigits( 1 ),
143cdf0e10cSrcweir m_nConstSpinSize( 1 ),
144cdf0e10cSrcweir m_pParentWindow( pParent ),
145cdf0e10cSrcweir m_pParentDialog( pParentDialog ),
146cdf0e10cSrcweir m_pCurrentRangeChoosingField( 0 ),
147cdf0e10cSrcweir m_bHasInternalDataProvider( true ),
148cdf0e10cSrcweir m_bDisableDataTableDialog( false )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir if( m_bNoneAvailable )
151cdf0e10cSrcweir m_aRbNone.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
152cdf0e10cSrcweir else
153cdf0e10cSrcweir m_aRbNone.Hide();
154cdf0e10cSrcweir
155cdf0e10cSrcweir m_aRbConst.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
156cdf0e10cSrcweir m_aRbPercent.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
157cdf0e10cSrcweir m_aRbFunction.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
158cdf0e10cSrcweir m_aRbRange.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
159cdf0e10cSrcweir m_aLbFunction.SetSelectHdl( LINK( this, ErrorBarResources, CategoryChosen ));
160cdf0e10cSrcweir
161cdf0e10cSrcweir m_aCbSyncPosNeg.Check( sal_False );
162cdf0e10cSrcweir m_aCbSyncPosNeg.SetToggleHdl( LINK( this, ErrorBarResources, SynchronizePosAndNeg ));
163cdf0e10cSrcweir
164cdf0e10cSrcweir m_aMfPositive.SetModifyHdl( LINK( this, ErrorBarResources, PosValueChanged ));
165cdf0e10cSrcweir m_aEdRangePositive.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged ));
166cdf0e10cSrcweir m_aEdRangeNegative.SetModifyHdl( LINK( this, ErrorBarResources, RangeChanged ));
167cdf0e10cSrcweir
168cdf0e10cSrcweir m_aRbPositive.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged ));
169cdf0e10cSrcweir m_aRbNegative.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged ));
170cdf0e10cSrcweir m_aRbBoth.SetClickHdl( LINK( this, ErrorBarResources, IndicatorChanged ));
171cdf0e10cSrcweir
172cdf0e10cSrcweir m_aIbRangePositive.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange ));
173cdf0e10cSrcweir m_aIbRangeNegative.SetClickHdl( LINK( this, ErrorBarResources, ChooseRange ));
174cdf0e10cSrcweir m_aIbRangePositive.SetQuickHelpText( String( SchResId( STR_TIP_SELECT_RANGE )));
175cdf0e10cSrcweir m_aIbRangeNegative.SetQuickHelpText( String( SchResId( STR_TIP_SELECT_RANGE )));
176cdf0e10cSrcweir
177cdf0e10cSrcweir FillValueSets();
178cdf0e10cSrcweir Reset( rInAttrs );
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
~ErrorBarResources()181cdf0e10cSrcweir ErrorBarResources::~ErrorBarResources()
182cdf0e10cSrcweir {
183cdf0e10cSrcweir }
184cdf0e10cSrcweir
SetErrorBarType(tErrorBarType eNewType)185cdf0e10cSrcweir void ErrorBarResources::SetErrorBarType( tErrorBarType eNewType )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir if( m_eErrorBarType != eNewType )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir m_eErrorBarType = eNewType;
190cdf0e10cSrcweir FillValueSets();
191cdf0e10cSrcweir }
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
SetChartDocumentForRangeChoosing(const uno::Reference<chart2::XChartDocument> & xChartDocument)194cdf0e10cSrcweir void ErrorBarResources::SetChartDocumentForRangeChoosing(
195cdf0e10cSrcweir const uno::Reference< chart2::XChartDocument > & xChartDocument )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir if( xChartDocument.is())
198cdf0e10cSrcweir {
199cdf0e10cSrcweir m_bHasInternalDataProvider = xChartDocument->hasInternalDataProvider();
200cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xProps( xChartDocument, uno::UNO_QUERY );
201cdf0e10cSrcweir if ( xProps.is() )
202cdf0e10cSrcweir {
203cdf0e10cSrcweir try
204cdf0e10cSrcweir {
205cdf0e10cSrcweir xProps->getPropertyValue( C2U( "DisableDataTableDialog" ) ) >>= m_bDisableDataTableDialog;
206cdf0e10cSrcweir }
207cdf0e10cSrcweir catch( uno::Exception& e )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir ASSERT_EXCEPTION( e );
210cdf0e10cSrcweir }
211cdf0e10cSrcweir }
212cdf0e10cSrcweir }
213cdf0e10cSrcweir m_apRangeSelectionHelper.reset( new RangeSelectionHelper( xChartDocument ));
214cdf0e10cSrcweir
215cdf0e10cSrcweir // has internal data provider => rename "cell range" to "from data"
216cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get());
217cdf0e10cSrcweir if( m_bHasInternalDataProvider )
218cdf0e10cSrcweir {
219cdf0e10cSrcweir m_aRbRange.SetText( String( SchResId( STR_CONTROLTEXT_ERROR_BARS_FROM_DATA )));
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
222cdf0e10cSrcweir if( m_aRbRange.IsChecked())
223cdf0e10cSrcweir {
224cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangePositive );
225cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangeNegative );
226cdf0e10cSrcweir }
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
SetAxisMinorStepWidthForErrorBarDecimals(double fMinorStepWidth)229cdf0e10cSrcweir void ErrorBarResources::SetAxisMinorStepWidthForErrorBarDecimals( double fMinorStepWidth )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir if( fMinorStepWidth < 0 )
232cdf0e10cSrcweir fMinorStepWidth = -fMinorStepWidth;
233cdf0e10cSrcweir
234cdf0e10cSrcweir sal_Int32 nExponent = static_cast< sal_Int32 >( ::rtl::math::approxFloor( log10( fMinorStepWidth )));
235cdf0e10cSrcweir if( nExponent <= 0 )
236cdf0e10cSrcweir {
237cdf0e10cSrcweir // one digit precision more
238cdf0e10cSrcweir m_nConstDecimalDigits = static_cast< sal_uInt16 >( (-nExponent) + 1 );
239cdf0e10cSrcweir m_nConstSpinSize = 10;
240cdf0e10cSrcweir }
241cdf0e10cSrcweir else
242cdf0e10cSrcweir {
243cdf0e10cSrcweir m_nConstDecimalDigits = 0;
244cdf0e10cSrcweir m_nConstSpinSize = static_cast< sal_Int64 >( pow( 10.0, (int)nExponent ));
245cdf0e10cSrcweir }
246cdf0e10cSrcweir }
247cdf0e10cSrcweir
UpdateControlStates()248cdf0e10cSrcweir void ErrorBarResources::UpdateControlStates()
249cdf0e10cSrcweir {
250cdf0e10cSrcweir // function
251cdf0e10cSrcweir bool bIsFunction = m_aRbFunction.IsChecked();
252cdf0e10cSrcweir m_aLbFunction.Enable( bIsFunction );
253cdf0e10cSrcweir
254cdf0e10cSrcweir // range buttons
255cdf0e10cSrcweir m_aRbRange.Enable( !m_bHasInternalDataProvider || !m_bDisableDataTableDialog );
256cdf0e10cSrcweir bool bShowRange = ( m_aRbRange.IsChecked());
257cdf0e10cSrcweir bool bCanChooseRange =
258cdf0e10cSrcweir ( bShowRange &&
259cdf0e10cSrcweir m_apRangeSelectionHelper.get() &&
260cdf0e10cSrcweir m_apRangeSelectionHelper->hasRangeSelection());
261cdf0e10cSrcweir
262cdf0e10cSrcweir m_aMfPositive.Show( ! bShowRange );
263cdf0e10cSrcweir m_aMfNegative.Show( ! bShowRange );
264cdf0e10cSrcweir
265cdf0e10cSrcweir // use range but without range chooser => hide controls
266cdf0e10cSrcweir m_aEdRangePositive.Show( bShowRange && ! m_bHasInternalDataProvider );
267cdf0e10cSrcweir m_aIbRangePositive.Show( bCanChooseRange );
268cdf0e10cSrcweir m_aEdRangeNegative.Show( bShowRange && ! m_bHasInternalDataProvider );
269cdf0e10cSrcweir m_aIbRangeNegative.Show( bCanChooseRange );
270cdf0e10cSrcweir
271cdf0e10cSrcweir bool bShowPosNegAndSync = ! (bShowRange && m_bHasInternalDataProvider);
272cdf0e10cSrcweir m_aFtPositive.Show( bShowPosNegAndSync );
273cdf0e10cSrcweir m_aFtNegative.Show( bShowPosNegAndSync );
274cdf0e10cSrcweir m_aCbSyncPosNeg.Show( bShowPosNegAndSync );
275cdf0e10cSrcweir m_aFlParameters.Show( bShowPosNegAndSync );
276cdf0e10cSrcweir
277cdf0e10cSrcweir // unit for metric fields
278cdf0e10cSrcweir bool bIsErrorMargin(
279cdf0e10cSrcweir ( m_aRbFunction.IsChecked()) &&
280cdf0e10cSrcweir ( m_aLbFunction.GetSelectEntryPos() == CHART_LB_FUNCTION_ERROR_MARGIN ));
281cdf0e10cSrcweir bool bIsPercentage( m_aRbPercent.IsChecked() || bIsErrorMargin );
282cdf0e10cSrcweir String aCustomUnit;
283cdf0e10cSrcweir
284cdf0e10cSrcweir if( bIsPercentage )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir aCustomUnit = String( RTL_CONSTASCII_USTRINGPARAM( " %" ));
287cdf0e10cSrcweir m_aMfPositive.SetDecimalDigits( 1 );
288cdf0e10cSrcweir m_aMfPositive.SetSpinSize( 10 );
289cdf0e10cSrcweir m_aMfNegative.SetDecimalDigits( 1 );
290cdf0e10cSrcweir m_aMfNegative.SetSpinSize( 10 );
291cdf0e10cSrcweir }
292cdf0e10cSrcweir else
293cdf0e10cSrcweir {
294cdf0e10cSrcweir m_aMfPositive.SetDecimalDigits( m_nConstDecimalDigits );
295cdf0e10cSrcweir m_aMfPositive.SetSpinSize( m_nConstSpinSize );
296cdf0e10cSrcweir m_aMfNegative.SetDecimalDigits( m_nConstDecimalDigits );
297cdf0e10cSrcweir m_aMfNegative.SetSpinSize( m_nConstSpinSize );
298cdf0e10cSrcweir }
299cdf0e10cSrcweir m_aMfPositive.SetCustomUnitText( aCustomUnit );
300cdf0e10cSrcweir m_aMfNegative.SetCustomUnitText( aCustomUnit );
301cdf0e10cSrcweir
302cdf0e10cSrcweir // positive and negative value fields
303cdf0e10cSrcweir bool bPosEnabled = ( m_aRbPositive.IsChecked() || m_aRbBoth.IsChecked());
304cdf0e10cSrcweir bool bNegEnabled = ( m_aRbNegative.IsChecked() || m_aRbBoth.IsChecked());
305cdf0e10cSrcweir if( !( bPosEnabled || bNegEnabled ))
306cdf0e10cSrcweir {
307cdf0e10cSrcweir // all three controls are not checked -> ambiguous state
308cdf0e10cSrcweir bPosEnabled = true;
309cdf0e10cSrcweir bNegEnabled = true;
310cdf0e10cSrcweir }
311cdf0e10cSrcweir
312cdf0e10cSrcweir // functions with only one parameter
313cdf0e10cSrcweir bool bOneParameterCategory =
314cdf0e10cSrcweir bIsErrorMargin || m_aRbPercent.IsChecked();
315cdf0e10cSrcweir if( bOneParameterCategory )
316cdf0e10cSrcweir {
317cdf0e10cSrcweir m_aCbSyncPosNeg.Check();
318cdf0e10cSrcweir }
319cdf0e10cSrcweir
320cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked())
321cdf0e10cSrcweir {
322cdf0e10cSrcweir bPosEnabled = true;
323cdf0e10cSrcweir bNegEnabled = false;
324cdf0e10cSrcweir }
325cdf0e10cSrcweir
326cdf0e10cSrcweir // all functions except error margin take no arguments
327cdf0e10cSrcweir if( m_aRbFunction.IsChecked() &&
328cdf0e10cSrcweir ( m_aLbFunction.GetSelectEntryPos() != CHART_LB_FUNCTION_ERROR_MARGIN ))
329cdf0e10cSrcweir {
330cdf0e10cSrcweir bPosEnabled = false;
331cdf0e10cSrcweir bNegEnabled = false;
332cdf0e10cSrcweir }
333cdf0e10cSrcweir
334cdf0e10cSrcweir // enable/disable pos/neg fields
335cdf0e10cSrcweir m_aFtPositive.Enable( bPosEnabled );
336cdf0e10cSrcweir m_aFtNegative.Enable( bNegEnabled );
337cdf0e10cSrcweir if( bShowRange )
338cdf0e10cSrcweir {
339cdf0e10cSrcweir m_aEdRangePositive.Enable( bPosEnabled );
340cdf0e10cSrcweir m_aIbRangePositive.Enable( bPosEnabled );
341cdf0e10cSrcweir m_aEdRangeNegative.Enable( bNegEnabled );
342cdf0e10cSrcweir m_aIbRangeNegative.Enable( bNegEnabled );
343cdf0e10cSrcweir }
344cdf0e10cSrcweir else
345cdf0e10cSrcweir {
346cdf0e10cSrcweir m_aMfPositive.Enable( bPosEnabled );
347cdf0e10cSrcweir m_aMfNegative.Enable( bNegEnabled );
348cdf0e10cSrcweir }
349cdf0e10cSrcweir
350cdf0e10cSrcweir m_aCbSyncPosNeg.Enable(
351cdf0e10cSrcweir !bOneParameterCategory &&
352cdf0e10cSrcweir ( bPosEnabled || bNegEnabled ));
353cdf0e10cSrcweir
354cdf0e10cSrcweir // mark invalid entries in the range fields
355cdf0e10cSrcweir if( bShowRange && ! m_bHasInternalDataProvider )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangePositive );
358cdf0e10cSrcweir isRangeFieldContentValid( m_aEdRangeNegative );
359cdf0e10cSrcweir }
360cdf0e10cSrcweir }
361cdf0e10cSrcweir
362cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, CategoryChosen, void *, )
363cdf0e10cSrcweir {
364cdf0e10cSrcweir m_bErrorKindUnique = true;
365cdf0e10cSrcweir SvxChartKindError eOldError = m_eErrorKind;
366cdf0e10cSrcweir
367cdf0e10cSrcweir if( m_aRbNone.IsChecked())
368cdf0e10cSrcweir m_eErrorKind = CHERROR_NONE;
369cdf0e10cSrcweir else if( m_aRbConst.IsChecked())
370cdf0e10cSrcweir m_eErrorKind = CHERROR_CONST;
371cdf0e10cSrcweir else if( m_aRbPercent.IsChecked())
372cdf0e10cSrcweir m_eErrorKind = CHERROR_PERCENT;
373cdf0e10cSrcweir else if( m_aRbRange.IsChecked())
374cdf0e10cSrcweir m_eErrorKind = CHERROR_RANGE;
375cdf0e10cSrcweir else if( m_aRbFunction.IsChecked())
376cdf0e10cSrcweir {
377cdf0e10cSrcweir if( m_aLbFunction.GetSelectEntryCount() == 1 )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir switch( m_aLbFunction.GetSelectEntryPos())
380cdf0e10cSrcweir {
381cdf0e10cSrcweir case CHART_LB_FUNCTION_STD_ERROR:
382cdf0e10cSrcweir m_eErrorKind = CHERROR_STDERROR; break;
383cdf0e10cSrcweir case CHART_LB_FUNCTION_STD_DEV:
384cdf0e10cSrcweir m_eErrorKind = CHERROR_SIGMA; break;
385cdf0e10cSrcweir case CHART_LB_FUNCTION_VARIANCE:
386cdf0e10cSrcweir m_eErrorKind = CHERROR_VARIANT; break;
387cdf0e10cSrcweir case CHART_LB_FUNCTION_ERROR_MARGIN:
388cdf0e10cSrcweir m_eErrorKind = CHERROR_BIGERROR; break;
389cdf0e10cSrcweir default:
390cdf0e10cSrcweir m_bErrorKindUnique = false;
391cdf0e10cSrcweir }
392cdf0e10cSrcweir }
393cdf0e10cSrcweir else
394cdf0e10cSrcweir m_bErrorKindUnique = false;
395cdf0e10cSrcweir }
396cdf0e10cSrcweir else
397cdf0e10cSrcweir {
398cdf0e10cSrcweir OSL_ENSURE( false, "Unknown category chosen" );
399cdf0e10cSrcweir m_bErrorKindUnique = false;
400cdf0e10cSrcweir }
401cdf0e10cSrcweir
402cdf0e10cSrcweir // changed to range
403cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE &&
404cdf0e10cSrcweir eOldError != CHERROR_RANGE )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir m_aCbSyncPosNeg.Check(
407cdf0e10cSrcweir (m_aEdRangePositive.GetText().Len() > 0) &&
408cdf0e10cSrcweir m_aEdRangePositive.GetText().Equals(
409cdf0e10cSrcweir m_aEdRangeNegative.GetText()));
410cdf0e10cSrcweir }
411cdf0e10cSrcweir // changed from range
412cdf0e10cSrcweir else if( m_eErrorKind != CHERROR_RANGE &&
413cdf0e10cSrcweir eOldError == CHERROR_RANGE )
414cdf0e10cSrcweir {
415cdf0e10cSrcweir m_aCbSyncPosNeg.Check(
416cdf0e10cSrcweir m_aMfPositive.GetValue() == m_aMfNegative.GetValue());
417cdf0e10cSrcweir }
418cdf0e10cSrcweir
419cdf0e10cSrcweir UpdateControlStates();
420cdf0e10cSrcweir return 0;
421cdf0e10cSrcweir }
422cdf0e10cSrcweir
IMPL_LINK(ErrorBarResources,SynchronizePosAndNeg,void *,EMPTYARG)423cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, SynchronizePosAndNeg, void *, EMPTYARG )
424cdf0e10cSrcweir {
425cdf0e10cSrcweir UpdateControlStates();
426cdf0e10cSrcweir PosValueChanged( 0 );
427cdf0e10cSrcweir return 0;
428cdf0e10cSrcweir }
429cdf0e10cSrcweir
IMPL_LINK(ErrorBarResources,PosValueChanged,void *,EMPTYARG)430cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, PosValueChanged, void *, EMPTYARG )
431cdf0e10cSrcweir {
432cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked())
433cdf0e10cSrcweir {
434cdf0e10cSrcweir if( m_aRbRange.IsChecked())
435cdf0e10cSrcweir {
436cdf0e10cSrcweir m_aEdRangeNegative.SetText( m_aEdRangePositive.GetText());
437cdf0e10cSrcweir m_bRangeNegUnique = m_bRangePosUnique;
438cdf0e10cSrcweir }
439cdf0e10cSrcweir else
440cdf0e10cSrcweir m_aMfNegative.SetValue( m_aMfPositive.GetValue());
441cdf0e10cSrcweir }
442cdf0e10cSrcweir
443cdf0e10cSrcweir return 0;
444cdf0e10cSrcweir }
445cdf0e10cSrcweir
IMPL_LINK(ErrorBarResources,IndicatorChanged,void *,EMPTYARG)446cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, IndicatorChanged, void *, EMPTYARG )
447cdf0e10cSrcweir {
448cdf0e10cSrcweir m_bIndicatorUnique = true;
449cdf0e10cSrcweir if( m_aRbBoth.IsChecked())
450cdf0e10cSrcweir m_eIndicate = CHINDICATE_BOTH;
451cdf0e10cSrcweir else if( m_aRbPositive.IsChecked())
452cdf0e10cSrcweir m_eIndicate = CHINDICATE_UP;
453cdf0e10cSrcweir else if( m_aRbNegative.IsChecked())
454cdf0e10cSrcweir m_eIndicate = CHINDICATE_DOWN;
455cdf0e10cSrcweir else
456cdf0e10cSrcweir m_bIndicatorUnique = false;
457cdf0e10cSrcweir
458cdf0e10cSrcweir UpdateControlStates();
459cdf0e10cSrcweir return 0;
460cdf0e10cSrcweir }
461cdf0e10cSrcweir
IMPL_LINK(ErrorBarResources,ChooseRange,RangeSelectionButton *,pButton)462cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, ChooseRange, RangeSelectionButton *, pButton )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get());
465cdf0e10cSrcweir if( ! m_apRangeSelectionHelper.get())
466cdf0e10cSrcweir return 0;
467cdf0e10cSrcweir OSL_ASSERT( m_pCurrentRangeChoosingField == 0 );
468cdf0e10cSrcweir
469cdf0e10cSrcweir ::rtl::OUString aUIString;
470cdf0e10cSrcweir if( pButton == &m_aIbRangePositive )
471cdf0e10cSrcweir {
472cdf0e10cSrcweir m_pCurrentRangeChoosingField = &m_aEdRangePositive;
473cdf0e10cSrcweir aUIString = String( SchResId( STR_DATA_SELECT_RANGE_FOR_POSITIVE_ERRORBARS ));
474cdf0e10cSrcweir }
475cdf0e10cSrcweir else
476cdf0e10cSrcweir {
477cdf0e10cSrcweir m_pCurrentRangeChoosingField = &m_aEdRangeNegative;
478cdf0e10cSrcweir aUIString = String( SchResId( STR_DATA_SELECT_RANGE_FOR_NEGATIVE_ERRORBARS ));
479cdf0e10cSrcweir }
480cdf0e10cSrcweir
481cdf0e10cSrcweir OSL_ASSERT( m_pParentDialog );
482cdf0e10cSrcweir if( m_pParentDialog )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir lcl_enableRangeChoosing( true, m_pParentDialog );
485cdf0e10cSrcweir m_apRangeSelectionHelper->chooseRange(
486cdf0e10cSrcweir m_pCurrentRangeChoosingField->GetText(),
487cdf0e10cSrcweir aUIString, *this );
488cdf0e10cSrcweir }
489cdf0e10cSrcweir else
490cdf0e10cSrcweir m_pCurrentRangeChoosingField = 0;
491cdf0e10cSrcweir
492cdf0e10cSrcweir return 0;
493cdf0e10cSrcweir }
494cdf0e10cSrcweir
IMPL_LINK(ErrorBarResources,RangeChanged,Edit *,pEdit)495cdf0e10cSrcweir IMPL_LINK( ErrorBarResources, RangeChanged, Edit *, pEdit )
496cdf0e10cSrcweir {
497cdf0e10cSrcweir if( pEdit == & m_aEdRangePositive )
498cdf0e10cSrcweir {
499cdf0e10cSrcweir m_bRangePosUnique = true;
500cdf0e10cSrcweir PosValueChanged( 0 );
501cdf0e10cSrcweir }
502cdf0e10cSrcweir else
503cdf0e10cSrcweir {
504cdf0e10cSrcweir m_bRangeNegUnique = true;
505cdf0e10cSrcweir }
506cdf0e10cSrcweir
507cdf0e10cSrcweir isRangeFieldContentValid( *pEdit );
508cdf0e10cSrcweir
509cdf0e10cSrcweir return 0;
510cdf0e10cSrcweir }
511cdf0e10cSrcweir
Reset(const SfxItemSet & rInAttrs)512cdf0e10cSrcweir void ErrorBarResources::Reset(const SfxItemSet& rInAttrs)
513cdf0e10cSrcweir {
514cdf0e10cSrcweir const SfxPoolItem *pPoolItem = NULL;
515cdf0e10cSrcweir SfxItemState aState = SFX_ITEM_UNKNOWN;
516cdf0e10cSrcweir
517cdf0e10cSrcweir // category
518cdf0e10cSrcweir m_eErrorKind = CHERROR_NONE;
519cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_KIND_ERROR, sal_True, &pPoolItem );
520cdf0e10cSrcweir m_bErrorKindUnique = ( aState != SFX_ITEM_DONTCARE );
521cdf0e10cSrcweir
522cdf0e10cSrcweir if( aState == SFX_ITEM_SET )
523cdf0e10cSrcweir m_eErrorKind = ((const SvxChartKindErrorItem*) pPoolItem)->GetValue();
524cdf0e10cSrcweir
525cdf0e10cSrcweir m_aLbFunction.SelectEntryPos( lcl_getLbEntryPosByErrorKind( m_eErrorKind ));
526cdf0e10cSrcweir
527cdf0e10cSrcweir if( m_bErrorKindUnique )
528cdf0e10cSrcweir {
529cdf0e10cSrcweir switch( m_eErrorKind )
530cdf0e10cSrcweir {
531cdf0e10cSrcweir case CHERROR_NONE:
532cdf0e10cSrcweir m_aRbNone.Check();
533cdf0e10cSrcweir break;
534cdf0e10cSrcweir case CHERROR_PERCENT:
535cdf0e10cSrcweir m_aRbPercent.Check();
536cdf0e10cSrcweir break;
537cdf0e10cSrcweir case CHERROR_CONST:
538cdf0e10cSrcweir m_aRbConst.Check();
539cdf0e10cSrcweir break;
540cdf0e10cSrcweir case CHERROR_STDERROR:
541cdf0e10cSrcweir case CHERROR_VARIANT:
542cdf0e10cSrcweir case CHERROR_SIGMA:
543cdf0e10cSrcweir case CHERROR_BIGERROR:
544cdf0e10cSrcweir m_aRbFunction.Check();
545cdf0e10cSrcweir break;
546cdf0e10cSrcweir case CHERROR_RANGE:
547cdf0e10cSrcweir m_aRbRange.Check();
548cdf0e10cSrcweir break;
549cdf0e10cSrcweir }
550cdf0e10cSrcweir }
551cdf0e10cSrcweir else
552cdf0e10cSrcweir {
553cdf0e10cSrcweir m_aRbNone.Check( sal_False );
554cdf0e10cSrcweir m_aRbConst.Check( sal_False );
555cdf0e10cSrcweir m_aRbPercent.Check( sal_False );
556cdf0e10cSrcweir m_aRbFunction.Check( sal_False );
557cdf0e10cSrcweir }
558cdf0e10cSrcweir
559cdf0e10cSrcweir // parameters
560cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTPLUS, sal_True, &pPoolItem );
561cdf0e10cSrcweir m_bPlusUnique = ( aState != SFX_ITEM_DONTCARE );
562cdf0e10cSrcweir double fPlusValue = 0.0;
563cdf0e10cSrcweir if( aState == SFX_ITEM_SET )
564cdf0e10cSrcweir {
565cdf0e10cSrcweir fPlusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue();
566cdf0e10cSrcweir sal_Int32 nPlusValue = static_cast< sal_Int32 >( fPlusValue * pow(10.0,m_aMfPositive.GetDecimalDigits()) );
567cdf0e10cSrcweir m_aMfPositive.SetValue( nPlusValue );
568cdf0e10cSrcweir }
569cdf0e10cSrcweir
570cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_CONSTMINUS, sal_True, &pPoolItem );
571cdf0e10cSrcweir m_bMinusUnique = ( aState != SFX_ITEM_DONTCARE );
572cdf0e10cSrcweir double fMinusValue = 0.0;
573cdf0e10cSrcweir if( aState == SFX_ITEM_SET )
574cdf0e10cSrcweir {
575cdf0e10cSrcweir fMinusValue = ((const SvxDoubleItem*) pPoolItem)->GetValue();
576cdf0e10cSrcweir sal_Int32 nMinusValue = static_cast< sal_Int32 >( fMinusValue * pow(10.0,m_aMfNegative.GetDecimalDigits()) );
577cdf0e10cSrcweir m_aMfNegative.SetValue( nMinusValue );
578cdf0e10cSrcweir
579cdf0e10cSrcweir if( m_eErrorKind != CHERROR_RANGE &&
580cdf0e10cSrcweir fPlusValue == fMinusValue )
581cdf0e10cSrcweir m_aCbSyncPosNeg.Check();
582cdf0e10cSrcweir }
583cdf0e10cSrcweir
584cdf0e10cSrcweir // indicator
585cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_INDICATE, sal_True, &pPoolItem );
586cdf0e10cSrcweir m_bIndicatorUnique = ( aState != SFX_ITEM_DONTCARE );
587cdf0e10cSrcweir if( aState == SFX_ITEM_SET)
588cdf0e10cSrcweir m_eIndicate = ((const SvxChartIndicateItem * ) pPoolItem)->GetValue();
589cdf0e10cSrcweir
590cdf0e10cSrcweir if( m_bIndicatorUnique )
591cdf0e10cSrcweir {
592cdf0e10cSrcweir switch( m_eIndicate )
593cdf0e10cSrcweir {
594cdf0e10cSrcweir case CHINDICATE_NONE :
595cdf0e10cSrcweir // no longer used, use both as default
596cdf0e10cSrcweir m_eIndicate = CHINDICATE_BOTH;
597cdf0e10cSrcweir // fall-through intended to BOTH
598cdf0e10cSrcweir case CHINDICATE_BOTH :
599cdf0e10cSrcweir m_aRbBoth.Check(); break;
600cdf0e10cSrcweir case CHINDICATE_UP :
601cdf0e10cSrcweir m_aRbPositive.Check(); break;
602cdf0e10cSrcweir case CHINDICATE_DOWN :
603cdf0e10cSrcweir m_aRbNegative.Check(); break;
604cdf0e10cSrcweir }
605cdf0e10cSrcweir }
606cdf0e10cSrcweir else
607cdf0e10cSrcweir {
608cdf0e10cSrcweir m_aRbBoth.Check( sal_False );
609cdf0e10cSrcweir m_aRbPositive.Check( sal_False );
610cdf0e10cSrcweir m_aRbNegative.Check( sal_False );
611cdf0e10cSrcweir }
612cdf0e10cSrcweir
613cdf0e10cSrcweir // ranges
614cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_POS, sal_True, &pPoolItem );
615cdf0e10cSrcweir m_bRangePosUnique = ( aState != SFX_ITEM_DONTCARE );
616cdf0e10cSrcweir if( aState == SFX_ITEM_SET )
617cdf0e10cSrcweir {
618cdf0e10cSrcweir String sRangePositive = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue();
619cdf0e10cSrcweir m_aEdRangePositive.SetText( sRangePositive );
620cdf0e10cSrcweir }
621cdf0e10cSrcweir
622cdf0e10cSrcweir aState = rInAttrs.GetItemState( SCHATTR_STAT_RANGE_NEG, sal_True, &pPoolItem );
623cdf0e10cSrcweir m_bRangeNegUnique = ( aState != SFX_ITEM_DONTCARE );
624cdf0e10cSrcweir if( aState == SFX_ITEM_SET )
625cdf0e10cSrcweir {
626cdf0e10cSrcweir String sRangeNegative = (static_cast< const SfxStringItem * >( pPoolItem ))->GetValue();
627cdf0e10cSrcweir m_aEdRangeNegative.SetText( sRangeNegative );
628cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE &&
629cdf0e10cSrcweir sRangeNegative.Len() > 0 &&
630cdf0e10cSrcweir sRangeNegative.Equals( m_aEdRangePositive.GetText()))
631cdf0e10cSrcweir m_aCbSyncPosNeg.Check();
632cdf0e10cSrcweir }
633cdf0e10cSrcweir
634cdf0e10cSrcweir UpdateControlStates();
635cdf0e10cSrcweir }
636cdf0e10cSrcweir
FillItemSet(SfxItemSet & rOutAttrs) const637cdf0e10cSrcweir sal_Bool ErrorBarResources::FillItemSet(SfxItemSet& rOutAttrs) const
638cdf0e10cSrcweir {
639cdf0e10cSrcweir if( m_bErrorKindUnique )
640cdf0e10cSrcweir rOutAttrs.Put( SvxChartKindErrorItem( m_eErrorKind, SCHATTR_STAT_KIND_ERROR ));
641cdf0e10cSrcweir if( m_bIndicatorUnique )
642cdf0e10cSrcweir rOutAttrs.Put( SvxChartIndicateItem( m_eIndicate, SCHATTR_STAT_INDICATE ));
643cdf0e10cSrcweir
644cdf0e10cSrcweir if( m_bErrorKindUnique )
645cdf0e10cSrcweir {
646cdf0e10cSrcweir if( m_eErrorKind == CHERROR_RANGE )
647cdf0e10cSrcweir {
648cdf0e10cSrcweir String aPosRange;
649cdf0e10cSrcweir String aNegRange;
650cdf0e10cSrcweir if( m_bHasInternalDataProvider )
651cdf0e10cSrcweir {
652cdf0e10cSrcweir // the strings aPosRange/aNegRange have to be set to a non-empty
653cdf0e10cSrcweir // arbitrary string to generate error-bar sequences
654cdf0e10cSrcweir aPosRange.Assign( sal_Unicode('x'));
655cdf0e10cSrcweir aNegRange = aPosRange;
656cdf0e10cSrcweir }
657cdf0e10cSrcweir else
658cdf0e10cSrcweir {
659cdf0e10cSrcweir aPosRange = m_aEdRangePositive.GetText();
660cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked())
661cdf0e10cSrcweir aNegRange = aPosRange;
662cdf0e10cSrcweir else
663cdf0e10cSrcweir aNegRange = m_aEdRangeNegative.GetText();
664cdf0e10cSrcweir }
665cdf0e10cSrcweir
666cdf0e10cSrcweir if( m_bRangePosUnique )
667cdf0e10cSrcweir rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_POS, aPosRange ));
668cdf0e10cSrcweir if( m_bRangeNegUnique )
669cdf0e10cSrcweir rOutAttrs.Put( SfxStringItem( SCHATTR_STAT_RANGE_NEG, aNegRange ));
670cdf0e10cSrcweir }
671cdf0e10cSrcweir else if( m_eErrorKind == CHERROR_CONST ||
672cdf0e10cSrcweir m_eErrorKind == CHERROR_PERCENT ||
673cdf0e10cSrcweir m_eErrorKind == CHERROR_BIGERROR )
674cdf0e10cSrcweir {
675cdf0e10cSrcweir double fPosValue = static_cast< double >( m_aMfPositive.GetValue()) /
676cdf0e10cSrcweir pow( 10.0, m_aMfPositive.GetDecimalDigits());
677cdf0e10cSrcweir double fNegValue = 0.0;
678cdf0e10cSrcweir
679cdf0e10cSrcweir if( m_aCbSyncPosNeg.IsChecked())
680cdf0e10cSrcweir fNegValue = fPosValue;
681cdf0e10cSrcweir else
682cdf0e10cSrcweir fNegValue = static_cast< double >( m_aMfNegative.GetValue()) /
683cdf0e10cSrcweir pow( 10.0, m_aMfNegative.GetDecimalDigits());
684cdf0e10cSrcweir
685cdf0e10cSrcweir rOutAttrs.Put( SvxDoubleItem( fPosValue, SCHATTR_STAT_CONSTPLUS ));
686cdf0e10cSrcweir rOutAttrs.Put( SvxDoubleItem( fNegValue, SCHATTR_STAT_CONSTMINUS ));
687cdf0e10cSrcweir }
688cdf0e10cSrcweir }
689cdf0e10cSrcweir
690cdf0e10cSrcweir return sal_True;
691cdf0e10cSrcweir }
692cdf0e10cSrcweir
FillValueSets()693cdf0e10cSrcweir void ErrorBarResources::FillValueSets()
694cdf0e10cSrcweir {
695cdf0e10cSrcweir bool bIsHighContrast = ( true && m_aRbConst.GetSettings().GetStyleSettings().GetHighContrastMode() );
696cdf0e10cSrcweir
697cdf0e10cSrcweir // do not scale images, show then centered
698cdf0e10cSrcweir // m_aFiPositive.SetStyle( (m_aFiPositive.GetStyle() & (~WB_SCALE)) | WB_CENTER );
699cdf0e10cSrcweir // m_aFiNegative.SetStyle( (m_aFiNegative.GetStyle() & (~WB_SCALE)) | WB_CENTER );
700cdf0e10cSrcweir // m_aFiBoth.SetStyle( (m_aFiBoth.GetStyle() & (~WB_SCALE)) | WB_CENTER );
701cdf0e10cSrcweir
702cdf0e10cSrcweir if( m_eErrorBarType == ERROR_BAR_Y )
703cdf0e10cSrcweir {
704cdf0e10cSrcweir m_aFiNegative.SetImage( SELECT_IMAGE( BMP_INDICATE_DOWN ));
705cdf0e10cSrcweir m_aFiPositive.SetImage( SELECT_IMAGE( BMP_INDICATE_UP ));
706cdf0e10cSrcweir m_aFiBoth.SetImage( SELECT_IMAGE( BMP_INDICATE_BOTH_VERTI ));
707cdf0e10cSrcweir }
708cdf0e10cSrcweir else if( m_eErrorBarType == ERROR_BAR_X )
709cdf0e10cSrcweir {
710cdf0e10cSrcweir m_aFiNegative.SetImage( SELECT_IMAGE( BMP_INDICATE_LEFT ));
711cdf0e10cSrcweir m_aFiPositive.SetImage( SELECT_IMAGE( BMP_INDICATE_RIGHT ));
712cdf0e10cSrcweir m_aFiBoth.SetImage( SELECT_IMAGE( BMP_INDICATE_BOTH_HORI ));
713cdf0e10cSrcweir }
714cdf0e10cSrcweir }
715cdf0e10cSrcweir
listeningFinished(const::rtl::OUString & rNewRange)716cdf0e10cSrcweir void ErrorBarResources::listeningFinished(
717cdf0e10cSrcweir const ::rtl::OUString & rNewRange )
718cdf0e10cSrcweir {
719cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get());
720cdf0e10cSrcweir if( ! m_apRangeSelectionHelper.get())
721cdf0e10cSrcweir return;
722cdf0e10cSrcweir
723cdf0e10cSrcweir // rNewRange becomes invalid after removing the listener
724cdf0e10cSrcweir ::rtl::OUString aRange( rNewRange );
725cdf0e10cSrcweir
726cdf0e10cSrcweir // m_rDialogModel.startControllerLockTimer();
727cdf0e10cSrcweir
728cdf0e10cSrcweir // stop listening
729cdf0e10cSrcweir m_apRangeSelectionHelper->stopRangeListening();
730cdf0e10cSrcweir
731cdf0e10cSrcweir // change edit field
732cdf0e10cSrcweir if( m_pParentWindow )
733cdf0e10cSrcweir {
734cdf0e10cSrcweir m_pParentWindow->ToTop();
735cdf0e10cSrcweir m_pParentWindow->GrabFocus();
736cdf0e10cSrcweir }
737cdf0e10cSrcweir
738cdf0e10cSrcweir if( m_pCurrentRangeChoosingField )
739cdf0e10cSrcweir {
740cdf0e10cSrcweir m_pCurrentRangeChoosingField->SetText( String( aRange ));
741cdf0e10cSrcweir m_pCurrentRangeChoosingField->GrabFocus();
742cdf0e10cSrcweir PosValueChanged( 0 );
743cdf0e10cSrcweir }
744cdf0e10cSrcweir
745cdf0e10cSrcweir m_pCurrentRangeChoosingField = 0;
746cdf0e10cSrcweir
747cdf0e10cSrcweir UpdateControlStates();
748cdf0e10cSrcweir OSL_ASSERT( m_pParentDialog );
749cdf0e10cSrcweir if( m_pParentDialog )
750cdf0e10cSrcweir lcl_enableRangeChoosing( false, m_pParentDialog );
751cdf0e10cSrcweir }
752cdf0e10cSrcweir
disposingRangeSelection()753cdf0e10cSrcweir void ErrorBarResources::disposingRangeSelection()
754cdf0e10cSrcweir {
755cdf0e10cSrcweir OSL_ASSERT( m_apRangeSelectionHelper.get());
756cdf0e10cSrcweir if( m_apRangeSelectionHelper.get())
757cdf0e10cSrcweir m_apRangeSelectionHelper->stopRangeListening( false );
758cdf0e10cSrcweir }
759cdf0e10cSrcweir
isRangeFieldContentValid(Edit & rEdit)760cdf0e10cSrcweir bool ErrorBarResources::isRangeFieldContentValid( Edit & rEdit )
761cdf0e10cSrcweir {
762cdf0e10cSrcweir ::rtl::OUString aRange( rEdit.GetText());
763*9ec58d04SHerbert Dürr bool bIsValid = aRange.isEmpty() ||
764cdf0e10cSrcweir ( m_apRangeSelectionHelper.get() &&
765cdf0e10cSrcweir m_apRangeSelectionHelper->verifyCellRange( aRange ));
766cdf0e10cSrcweir
767cdf0e10cSrcweir if( bIsValid || !rEdit.IsEnabled())
768cdf0e10cSrcweir {
769cdf0e10cSrcweir rEdit.SetControlForeground();
770cdf0e10cSrcweir rEdit.SetControlBackground();
771cdf0e10cSrcweir }
772cdf0e10cSrcweir else
773cdf0e10cSrcweir {
774cdf0e10cSrcweir rEdit.SetControlBackground( RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR );
775cdf0e10cSrcweir rEdit.SetControlForeground( RANGE_SELECTION_INVALID_RANGE_FOREGROUND_COLOR );
776cdf0e10cSrcweir }
777cdf0e10cSrcweir
778cdf0e10cSrcweir return bIsValid;
779cdf0e10cSrcweir }
780cdf0e10cSrcweir
781cdf0e10cSrcweir //.............................................................................
782cdf0e10cSrcweir } //namespace chart
783cdf0e10cSrcweir //.............................................................................
784