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