1*cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*cde9e8dcSAndrew Rist  * distributed with this work for additional information
6*cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9*cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*cde9e8dcSAndrew Rist  *
11*cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*cde9e8dcSAndrew Rist  *
13*cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15*cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17*cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18*cde9e8dcSAndrew Rist  * under the License.
19*cde9e8dcSAndrew Rist  *
20*cde9e8dcSAndrew Rist  *************************************************************/
21*cde9e8dcSAndrew Rist 
22*cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir #include "tp_SeriesToAxis.hxx"
27cdf0e10cSrcweir #include "tp_SeriesToAxis.hrc"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include "ResId.hxx"
30cdf0e10cSrcweir #include "chartview/ChartSfxItemIds.hxx"
31cdf0e10cSrcweir #include "NoWarningThisInCTOR.hxx"
32cdf0e10cSrcweir 
33cdf0e10cSrcweir // header for class SfxBoolItem
34cdf0e10cSrcweir #include <svl/eitem.hxx>
35cdf0e10cSrcweir // header for SfxInt32Item
36cdf0e10cSrcweir #include <svl/intitem.hxx>
37cdf0e10cSrcweir //SfxIntegerListItem
38cdf0e10cSrcweir #include <svl/ilstitem.hxx>
39cdf0e10cSrcweir #include <svtools/controldims.hrc>
40cdf0e10cSrcweir 
41cdf0e10cSrcweir #include <com/sun/star/chart/MissingValueTreatment.hpp>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir //.............................................................................
44cdf0e10cSrcweir namespace chart
45cdf0e10cSrcweir {
46cdf0e10cSrcweir //.............................................................................
47cdf0e10cSrcweir 
SchOptionTabPage(Window * pWindow,const SfxItemSet & rInAttrs)48cdf0e10cSrcweir SchOptionTabPage::SchOptionTabPage(Window* pWindow,const SfxItemSet& rInAttrs) :
49cdf0e10cSrcweir 	SfxTabPage(pWindow, SchResId(TP_OPTIONS), rInAttrs),
50cdf0e10cSrcweir 	aGrpAxis(this, SchResId(GRP_OPT_AXIS)),
51cdf0e10cSrcweir 	aRbtAxis1(this,SchResId(RBT_OPT_AXIS_1)),
52cdf0e10cSrcweir 	aRbtAxis2(this,SchResId(RBT_OPT_AXIS_2)),
53cdf0e10cSrcweir 
54cdf0e10cSrcweir 	aGrpBar(this, SchResId(GB_BAR)),
55cdf0e10cSrcweir 	aFTGap(this,SchResId(FT_GAP)),
56cdf0e10cSrcweir 	aMTGap(this,SchResId(MT_GAP)),
57cdf0e10cSrcweir 	aFTOverlap(this,SchResId(FT_OVERLAP)),
58cdf0e10cSrcweir 	aMTOverlap(this,SchResId(MT_OVERLAP)),
59cdf0e10cSrcweir 	aCBConnect(this,SchResId(CB_CONNECTOR)),
60cdf0e10cSrcweir     aCBAxisSideBySide(this,SchResId(CB_BARS_SIDE_BY_SIDE)),
61cdf0e10cSrcweir     m_aFL_PlotOptions(this,SchResId(FL_PLOT_OPTIONS)),
62cdf0e10cSrcweir     m_aFT_MissingValues(this,SchResId(FT_MISSING_VALUES)),
63cdf0e10cSrcweir     m_aRB_DontPaint(this,SchResId(RB_DONT_PAINT)),
64cdf0e10cSrcweir     m_aRB_AssumeZero(this,SchResId(RB_ASSUME_ZERO)),
65cdf0e10cSrcweir     m_aRB_ContinueLine(this,SchResId(RB_CONTINUE_LINE)),
66cdf0e10cSrcweir     m_aCBIncludeHiddenCells(this,SchResId(CB_INCLUDE_HIDDEN_CELLS)),
67cdf0e10cSrcweir     m_bProvidesSecondaryYAxis(true),
68cdf0e10cSrcweir     m_bProvidesOverlapAndGapWidth(false)
69cdf0e10cSrcweir {
70cdf0e10cSrcweir 	FreeResource();
71cdf0e10cSrcweir 
72cdf0e10cSrcweir     aRbtAxis1.SetClickHdl( LINK( this, SchOptionTabPage, EnableHdl ));
73cdf0e10cSrcweir     aRbtAxis2.SetClickHdl( LINK( this, SchOptionTabPage, EnableHdl ));
74cdf0e10cSrcweir }
75cdf0e10cSrcweir 
~SchOptionTabPage()76cdf0e10cSrcweir SchOptionTabPage::~SchOptionTabPage()
77cdf0e10cSrcweir {
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
IMPL_LINK(SchOptionTabPage,EnableHdl,RadioButton *,EMPTYARG)80cdf0e10cSrcweir IMPL_LINK( SchOptionTabPage, EnableHdl, RadioButton *, EMPTYARG )
81cdf0e10cSrcweir {
82cdf0e10cSrcweir     if( m_nAllSeriesAxisIndex == 0 )
83cdf0e10cSrcweir         aCBAxisSideBySide.Enable( aRbtAxis2.IsChecked());
84cdf0e10cSrcweir     else if( m_nAllSeriesAxisIndex == 1 )
85cdf0e10cSrcweir         aCBAxisSideBySide.Enable( aRbtAxis1.IsChecked());
86cdf0e10cSrcweir 
87cdf0e10cSrcweir     return 0;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
Create(Window * pWindow,const SfxItemSet & rOutAttrs)90cdf0e10cSrcweir SfxTabPage* SchOptionTabPage::Create(Window* pWindow,const SfxItemSet& rOutAttrs)
91cdf0e10cSrcweir {
92cdf0e10cSrcweir 	return new SchOptionTabPage(pWindow, rOutAttrs);
93cdf0e10cSrcweir }
94cdf0e10cSrcweir 
FillItemSet(SfxItemSet & rOutAttrs)95cdf0e10cSrcweir sal_Bool SchOptionTabPage::FillItemSet(SfxItemSet& rOutAttrs)
96cdf0e10cSrcweir {
97cdf0e10cSrcweir 	if(aRbtAxis2.IsChecked())
98cdf0e10cSrcweir 		rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS,CHART_AXIS_SECONDARY_Y));
99cdf0e10cSrcweir 	else
100cdf0e10cSrcweir 		rOutAttrs.Put(SfxInt32Item(SCHATTR_AXIS,CHART_AXIS_PRIMARY_Y));
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 	if(aMTGap.IsVisible())
103cdf0e10cSrcweir 		rOutAttrs.Put(SfxInt32Item(SCHATTR_BAR_GAPWIDTH,static_cast< sal_Int32 >( aMTGap.GetValue())));
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 	if(aMTOverlap.IsVisible())
106cdf0e10cSrcweir 		rOutAttrs.Put(SfxInt32Item(SCHATTR_BAR_OVERLAP,static_cast< sal_Int32 >( aMTOverlap.GetValue())));
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 	if(aCBConnect.IsVisible())
109cdf0e10cSrcweir 		rOutAttrs.Put(SfxBoolItem(SCHATTR_BAR_CONNECT,aCBConnect.IsChecked()));
110cdf0e10cSrcweir 
111cdf0e10cSrcweir     // model property is "group bars per axis", UI feature is the other way
112cdf0e10cSrcweir     // round: "show bars side by side"
113cdf0e10cSrcweir     if(aCBAxisSideBySide.IsVisible())
114cdf0e10cSrcweir         rOutAttrs.Put(SfxBoolItem(SCHATTR_GROUP_BARS_PER_AXIS, ! aCBAxisSideBySide.IsChecked()));
115cdf0e10cSrcweir 
116cdf0e10cSrcweir     if(m_aRB_DontPaint.IsChecked())
117cdf0e10cSrcweir         rOutAttrs.Put(SfxInt32Item(SCHATTR_MISSING_VALUE_TREATMENT,::com::sun::star::chart::MissingValueTreatment::LEAVE_GAP));
118cdf0e10cSrcweir     else if(m_aRB_AssumeZero.IsChecked())
119cdf0e10cSrcweir         rOutAttrs.Put(SfxInt32Item(SCHATTR_MISSING_VALUE_TREATMENT,::com::sun::star::chart::MissingValueTreatment::USE_ZERO));
120cdf0e10cSrcweir     else if(m_aRB_ContinueLine.IsChecked())
121cdf0e10cSrcweir         rOutAttrs.Put(SfxInt32Item(SCHATTR_MISSING_VALUE_TREATMENT,::com::sun::star::chart::MissingValueTreatment::CONTINUE));
122cdf0e10cSrcweir 
123cdf0e10cSrcweir     if (m_aCBIncludeHiddenCells.IsVisible())
124cdf0e10cSrcweir         rOutAttrs.Put(SfxBoolItem(SCHATTR_INCLUDE_HIDDEN_CELLS, m_aCBIncludeHiddenCells.IsChecked()));
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 	return sal_True;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
Reset(const SfxItemSet & rInAttrs)129cdf0e10cSrcweir void SchOptionTabPage::Reset(const SfxItemSet& rInAttrs)
130cdf0e10cSrcweir {
131cdf0e10cSrcweir 	const SfxPoolItem *pPoolItem = NULL;
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 	aRbtAxis1.Check(sal_True);
134cdf0e10cSrcweir 	aRbtAxis2.Check(sal_False);
135cdf0e10cSrcweir 	if (rInAttrs.GetItemState(SCHATTR_AXIS,sal_True, &pPoolItem) == SFX_ITEM_SET)
136cdf0e10cSrcweir 	{
137cdf0e10cSrcweir 		long nVal=((const SfxInt32Item*)pPoolItem)->GetValue();
138cdf0e10cSrcweir 		if(nVal==CHART_AXIS_SECONDARY_Y)
139cdf0e10cSrcweir 		{
140cdf0e10cSrcweir 			aRbtAxis2.Check(sal_True);
141cdf0e10cSrcweir 			aRbtAxis1.Check(sal_False);
142cdf0e10cSrcweir 		}
143cdf0e10cSrcweir 	}
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	long nTmp;
146cdf0e10cSrcweir 	if (rInAttrs.GetItemState(SCHATTR_BAR_GAPWIDTH, sal_True, &pPoolItem) == SFX_ITEM_SET)
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir 		nTmp = (long)((const SfxInt32Item*)pPoolItem)->GetValue();
149cdf0e10cSrcweir 		aMTGap.SetValue(nTmp);
150cdf0e10cSrcweir 	}
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	if (rInAttrs.GetItemState(SCHATTR_BAR_OVERLAP, sal_True, &pPoolItem) == SFX_ITEM_SET)
153cdf0e10cSrcweir 	{
154cdf0e10cSrcweir 		nTmp = (long)((const SfxInt32Item*)pPoolItem)->GetValue();
155cdf0e10cSrcweir 		aMTOverlap.SetValue(nTmp);
156cdf0e10cSrcweir 	}
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	if (rInAttrs.GetItemState(SCHATTR_BAR_CONNECT, sal_True, &pPoolItem) == SFX_ITEM_SET)
159cdf0e10cSrcweir 	{
160cdf0e10cSrcweir 		sal_Bool bCheck = static_cast< const SfxBoolItem * >( pPoolItem )->GetValue();
161cdf0e10cSrcweir 		aCBConnect.Check(bCheck);
162cdf0e10cSrcweir 	}
163cdf0e10cSrcweir 
164cdf0e10cSrcweir     if (rInAttrs.GetItemState(SCHATTR_AXIS_FOR_ALL_SERIES, sal_True, &pPoolItem) == SFX_ITEM_SET)
165cdf0e10cSrcweir     {
166cdf0e10cSrcweir         m_nAllSeriesAxisIndex = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue();
167cdf0e10cSrcweir         aCBAxisSideBySide.Disable();
168cdf0e10cSrcweir     }
169cdf0e10cSrcweir     if (rInAttrs.GetItemState(SCHATTR_GROUP_BARS_PER_AXIS, sal_True, &pPoolItem) == SFX_ITEM_SET)
170cdf0e10cSrcweir     {
171cdf0e10cSrcweir         // model property is "group bars per axis", UI feature is the other way
172cdf0e10cSrcweir         // round: "show bars side by side"
173cdf0e10cSrcweir 		sal_Bool bCheck = ! static_cast< const SfxBoolItem * >( pPoolItem )->GetValue();
174cdf0e10cSrcweir         aCBAxisSideBySide.Check( bCheck );
175cdf0e10cSrcweir     }
176cdf0e10cSrcweir     else
177cdf0e10cSrcweir     {
178cdf0e10cSrcweir         aCBAxisSideBySide.Show(sal_False);
179cdf0e10cSrcweir     }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     //missing value treatment
183cdf0e10cSrcweir     {
184cdf0e10cSrcweir         ::com::sun::star::uno::Sequence < sal_Int32 > aMissingValueTreatments;
185cdf0e10cSrcweir         if( rInAttrs.GetItemState(SCHATTR_AVAILABLE_MISSING_VALUE_TREATMENTS, sal_True, &pPoolItem) == SFX_ITEM_SET )
186cdf0e10cSrcweir             aMissingValueTreatments =((const SfxIntegerListItem*)pPoolItem)->GetConstSequence();
187cdf0e10cSrcweir 
188cdf0e10cSrcweir         if ( aMissingValueTreatments.getLength()>1 && rInAttrs.GetItemState(SCHATTR_MISSING_VALUE_TREATMENT,sal_True, &pPoolItem) == SFX_ITEM_SET)
189cdf0e10cSrcweir         {
190cdf0e10cSrcweir             m_aRB_DontPaint.Enable(sal_False);
191cdf0e10cSrcweir             m_aRB_AssumeZero.Enable(sal_False);
192cdf0e10cSrcweir             m_aRB_ContinueLine.Enable(sal_False);
193cdf0e10cSrcweir 
194cdf0e10cSrcweir             for( sal_Int32 nN =0; nN<aMissingValueTreatments.getLength(); nN++ )
195cdf0e10cSrcweir             {
196cdf0e10cSrcweir                 sal_Int32 nVal = aMissingValueTreatments[nN];
197cdf0e10cSrcweir                 if(nVal==::com::sun::star::chart::MissingValueTreatment::LEAVE_GAP)
198cdf0e10cSrcweir                     m_aRB_DontPaint.Enable(sal_True);
199cdf0e10cSrcweir                 else if(nVal==::com::sun::star::chart::MissingValueTreatment::USE_ZERO)
200cdf0e10cSrcweir                     m_aRB_AssumeZero.Enable(sal_True);
201cdf0e10cSrcweir                 else if(nVal==::com::sun::star::chart::MissingValueTreatment::CONTINUE)
202cdf0e10cSrcweir                     m_aRB_ContinueLine.Enable(sal_True);
203cdf0e10cSrcweir             }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir             long nVal=((const SfxInt32Item*)pPoolItem)->GetValue();
206cdf0e10cSrcweir             if(nVal==::com::sun::star::chart::MissingValueTreatment::LEAVE_GAP)
207cdf0e10cSrcweir                 m_aRB_DontPaint.Check(sal_True);
208cdf0e10cSrcweir             else if(nVal==::com::sun::star::chart::MissingValueTreatment::USE_ZERO)
209cdf0e10cSrcweir                 m_aRB_AssumeZero.Check(sal_True);
210cdf0e10cSrcweir             else if(nVal==::com::sun::star::chart::MissingValueTreatment::CONTINUE)
211cdf0e10cSrcweir                 m_aRB_ContinueLine.Check(sal_True);
212cdf0e10cSrcweir         }
213cdf0e10cSrcweir         else
214cdf0e10cSrcweir         {
215cdf0e10cSrcweir             m_aFT_MissingValues.Show(sal_False);
216cdf0e10cSrcweir             m_aRB_DontPaint.Show(sal_False);
217cdf0e10cSrcweir             m_aRB_AssumeZero.Show(sal_False);
218cdf0e10cSrcweir             m_aRB_ContinueLine.Show(sal_False);
219cdf0e10cSrcweir         }
220cdf0e10cSrcweir     }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir     // Include hidden cells
223cdf0e10cSrcweir     if (rInAttrs.GetItemState(SCHATTR_INCLUDE_HIDDEN_CELLS, sal_True, &pPoolItem) == SFX_ITEM_SET)
224cdf0e10cSrcweir     {
225cdf0e10cSrcweir         bool bVal = static_cast<const SfxBoolItem*>(pPoolItem)->GetValue();
226cdf0e10cSrcweir         m_aCBIncludeHiddenCells.Check(bVal);
227cdf0e10cSrcweir     }
228cdf0e10cSrcweir     else
229cdf0e10cSrcweir     {
230cdf0e10cSrcweir         m_aCBIncludeHiddenCells.Show(sal_False);
231cdf0e10cSrcweir         if(!m_aFT_MissingValues.IsVisible())
232cdf0e10cSrcweir             m_aFL_PlotOptions.Show(sal_False);
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     AdaptControlPositionsAndVisibility();
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
Init(bool bProvidesSecondaryYAxis,bool bProvidesOverlapAndGapWidth,bool bProvidesBarConnectors)238cdf0e10cSrcweir void SchOptionTabPage::Init( bool bProvidesSecondaryYAxis, bool bProvidesOverlapAndGapWidth, bool bProvidesBarConnectors )
239cdf0e10cSrcweir {
240cdf0e10cSrcweir     m_bProvidesSecondaryYAxis = bProvidesSecondaryYAxis;
241cdf0e10cSrcweir     m_bProvidesOverlapAndGapWidth = bProvidesOverlapAndGapWidth;
242cdf0e10cSrcweir     m_bProvidesBarConnectors = bProvidesBarConnectors;
243cdf0e10cSrcweir 
244cdf0e10cSrcweir     AdaptControlPositionsAndVisibility();
245cdf0e10cSrcweir }
246cdf0e10cSrcweir 
lcl_offsetControl(Control & rCtrl,long nXOffset,long nYOffset)247cdf0e10cSrcweir void lcl_offsetControl(Control& rCtrl, long nXOffset, long nYOffset )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir     Point aPos = rCtrl.GetPosPixel();
250cdf0e10cSrcweir     rCtrl.SetPosPixel( Point(aPos.getX() + nXOffset, aPos.getY() + nYOffset) );
251cdf0e10cSrcweir }
252cdf0e10cSrcweir 
lcl_optimzeRadioButtonSize(RadioButton & rCtrl)253cdf0e10cSrcweir void lcl_optimzeRadioButtonSize( RadioButton& rCtrl )
254cdf0e10cSrcweir {
255cdf0e10cSrcweir     rCtrl.SetSizePixel( rCtrl.CalcMinimumSize() );
256cdf0e10cSrcweir }
257cdf0e10cSrcweir 
AdaptControlPositionsAndVisibility()258cdf0e10cSrcweir void SchOptionTabPage::AdaptControlPositionsAndVisibility()
259cdf0e10cSrcweir {
260cdf0e10cSrcweir     aRbtAxis1.Show(m_bProvidesSecondaryYAxis);
261cdf0e10cSrcweir     aRbtAxis2.Show(m_bProvidesSecondaryYAxis);
262cdf0e10cSrcweir     aGrpAxis.Show(m_bProvidesSecondaryYAxis);
263cdf0e10cSrcweir 
264cdf0e10cSrcweir 	aMTGap.Show(m_bProvidesOverlapAndGapWidth);
265cdf0e10cSrcweir 	aFTGap.Show(m_bProvidesOverlapAndGapWidth);
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	aMTOverlap.Show(m_bProvidesOverlapAndGapWidth);
268cdf0e10cSrcweir 	aFTOverlap.Show(m_bProvidesOverlapAndGapWidth);
269cdf0e10cSrcweir 
270cdf0e10cSrcweir     aCBConnect.Show(m_bProvidesBarConnectors);
271cdf0e10cSrcweir 
272cdf0e10cSrcweir     if( !aMTGap.IsVisible() && !aMTOverlap.IsVisible() )
273cdf0e10cSrcweir     {
274cdf0e10cSrcweir 		aGrpBar.Show(sal_False);
275cdf0e10cSrcweir 		Point aPos;
276cdf0e10cSrcweir 		if( !aRbtAxis1.IsVisible() && !aRbtAxis2.IsVisible() )
277cdf0e10cSrcweir 			aPos = aGrpAxis.GetPosPixel();
278cdf0e10cSrcweir 	    else
279cdf0e10cSrcweir             aPos = aGrpBar.GetPosPixel();
280cdf0e10cSrcweir 
281cdf0e10cSrcweir         long nYOffset = aPos.getY() - m_aFL_PlotOptions.GetPosPixel().getY();
282cdf0e10cSrcweir         lcl_offsetControl(m_aFL_PlotOptions,       0, nYOffset);
283cdf0e10cSrcweir         lcl_offsetControl(m_aFT_MissingValues,     0, nYOffset);
284cdf0e10cSrcweir         lcl_offsetControl(m_aRB_DontPaint,         0, nYOffset);
285cdf0e10cSrcweir         lcl_offsetControl(m_aRB_AssumeZero,        0, nYOffset);
286cdf0e10cSrcweir         lcl_offsetControl(m_aRB_ContinueLine,      0, nYOffset);
287cdf0e10cSrcweir         lcl_offsetControl(m_aCBIncludeHiddenCells, 0, nYOffset);
288cdf0e10cSrcweir     }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir     m_aFT_MissingValues.SetSizePixel( m_aFT_MissingValues.CalcMinimumSize() );
291cdf0e10cSrcweir     lcl_optimzeRadioButtonSize( m_aRB_DontPaint );
292cdf0e10cSrcweir     lcl_optimzeRadioButtonSize( m_aRB_AssumeZero );
293cdf0e10cSrcweir     lcl_optimzeRadioButtonSize( m_aRB_ContinueLine );
294cdf0e10cSrcweir 
295cdf0e10cSrcweir     Size aControlDistance( m_aFT_MissingValues.LogicToPixel( Size(RSC_SP_CTRL_DESC_X,RSC_SP_CTRL_GROUP_Y), MapMode(MAP_APPFONT) ) );
296cdf0e10cSrcweir     long nXOffset = m_aFT_MissingValues.GetPosPixel().getX() + m_aFT_MissingValues.GetSizePixel().getWidth() + aControlDistance.getWidth() - m_aRB_DontPaint.GetPosPixel().getX();
297cdf0e10cSrcweir     lcl_offsetControl(m_aRB_DontPaint,         nXOffset, 0);
298cdf0e10cSrcweir     lcl_offsetControl(m_aRB_AssumeZero,        nXOffset, 0);
299cdf0e10cSrcweir     lcl_offsetControl(m_aRB_ContinueLine,      nXOffset, 0);
300cdf0e10cSrcweir 
301cdf0e10cSrcweir     if( !m_aFT_MissingValues.IsVisible() )
302cdf0e10cSrcweir     {
303cdf0e10cSrcweir         //for example for stock charts
304cdf0e10cSrcweir         m_aCBIncludeHiddenCells.SetPosPixel( m_aFT_MissingValues.GetPosPixel() );
305cdf0e10cSrcweir     }
306cdf0e10cSrcweir }
307cdf0e10cSrcweir //.............................................................................
308cdf0e10cSrcweir } //namespace chart
309cdf0e10cSrcweir //.............................................................................
310