Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include "tp_ChartType.hxx"
22 : #include "tp_ChartType.hrc"
23 : #include "Strings.hrc"
24 : #include "ResId.hxx"
25 : #include "ChartModelHelper.hxx"
26 : #include "DiagramHelper.hxx"
27 : #include "NoWarningThisInCTOR.hxx"
28 : #include "res_BarGeometry.hxx"
29 : #include "ControllerLockGuard.hxx"
30 : #include "macros.hxx"
31 :
32 : #include <svtools/controldims.hrc>
33 :
34 : // header for define RET_OK
35 : #include <vcl/msgbox.hxx>
36 :
37 : //for auto_ptr
38 : #include <memory>
39 :
40 : //.............................................................................
41 : namespace chart
42 : {
43 : //.............................................................................
44 : using namespace ::com::sun::star;
45 : using namespace ::com::sun::star::chart2;
46 :
47 : namespace
48 : {
49 0 : long lcl_getDistance()
50 : {
51 0 : return 6;
52 : }
53 :
54 0 : sal_Bool lcl_getSortByXValues( const uno::Reference< chart2::XChartDocument >& xChartDoc )
55 : {
56 0 : sal_Bool bRet = sal_False;
57 0 : if( xChartDoc.is() )
58 : {
59 : try
60 : {
61 0 : uno::Reference< beans::XPropertySet > xDiaProp( xChartDoc->getFirstDiagram(), uno::UNO_QUERY_THROW );
62 0 : xDiaProp->getPropertyValue( "SortByXValues" ) >>= bRet;
63 : }
64 0 : catch( const uno::Exception & ex )
65 : {
66 : ASSERT_EXCEPTION( ex );
67 : }
68 : }
69 0 : return bRet;
70 : }
71 : }
72 :
73 : //--------------------------------------------------------------------------
74 : class AxisTypeResourceGroup : public ChangingResource
75 : {
76 : public:
77 : AxisTypeResourceGroup( Window* pWindow );
78 : virtual ~AxisTypeResourceGroup();
79 :
80 : void showControls( bool bShow );
81 : Point getPosition();
82 : long getHeight();
83 : void setPosition( const Point& rPoint );
84 :
85 : void fillControls( const ChartTypeParameter& rParameter );
86 : void fillParameter( ChartTypeParameter& rParameter );
87 :
88 : private:
89 : DECL_LINK( AxisTypeCheckHdl, void* );
90 : private:
91 : CheckBox m_aCB_XAxis_Categories;
92 : };
93 0 : AxisTypeResourceGroup::AxisTypeResourceGroup( Window* pWindow )
94 : : ChangingResource()
95 0 : , m_aCB_XAxis_Categories( pWindow, SchResId( CB_X_AXIS_CATEGORIES ) )
96 : {
97 0 : m_aCB_XAxis_Categories.SetToggleHdl( LINK( this, AxisTypeResourceGroup, AxisTypeCheckHdl ) );
98 0 : }
99 0 : AxisTypeResourceGroup::~AxisTypeResourceGroup()
100 : {
101 0 : }
102 0 : void AxisTypeResourceGroup::showControls( bool bShow )
103 : {
104 0 : m_aCB_XAxis_Categories.Show(bShow);
105 0 : }
106 0 : Point AxisTypeResourceGroup::getPosition()
107 : {
108 0 : return m_aCB_XAxis_Categories.GetPosPixel();
109 : }
110 0 : long AxisTypeResourceGroup::getHeight()
111 : {
112 0 : return m_aCB_XAxis_Categories.GetSizePixel().Height();
113 : }
114 0 : void AxisTypeResourceGroup::setPosition( const Point& rPoint )
115 : {
116 0 : m_aCB_XAxis_Categories.SetPosPixel(rPoint);
117 0 : }
118 0 : void AxisTypeResourceGroup::fillControls( const ChartTypeParameter& rParameter )
119 : {
120 0 : m_aCB_XAxis_Categories.Check(!rParameter.bXAxisWithValues);
121 0 : }
122 0 : void AxisTypeResourceGroup::fillParameter( ChartTypeParameter& rParameter )
123 : {
124 0 : rParameter.bXAxisWithValues = !m_aCB_XAxis_Categories.IsChecked();
125 0 : }
126 0 : IMPL_LINK_NOARG(AxisTypeResourceGroup, AxisTypeCheckHdl)
127 : {
128 0 : if( m_pChangeListener )
129 0 : m_pChangeListener->stateChanged(this);
130 0 : return 0;
131 : }
132 : //--------------------------------------------------------------------------
133 :
134 : #define POS_3DSCHEME_SIMPLE 0
135 : #define POS_3DSCHEME_REALISTIC 1
136 :
137 : class Dim3DLookResourceGroup : public ChangingResource
138 : {
139 : public:
140 : Dim3DLookResourceGroup( Window* pWindow );
141 : virtual ~Dim3DLookResourceGroup();
142 :
143 : void showControls( bool bShow );
144 : long getHeight();
145 : void setPosition( const Point& rPoint );
146 :
147 : void fillControls( const ChartTypeParameter& rParameter );
148 : void fillParameter( ChartTypeParameter& rParameter );
149 :
150 : private:
151 : DECL_LINK( Dim3DLookCheckHdl, void* );
152 : DECL_LINK( SelectSchemeHdl, void* );
153 :
154 : private:
155 : CheckBox m_aCB_3DLook;
156 : ListBox m_aLB_Scheme;
157 : };
158 0 : Dim3DLookResourceGroup::Dim3DLookResourceGroup( Window* pWindow )
159 : : ChangingResource()
160 : , m_aCB_3DLook( pWindow, SchResId( CB_3D_LOOK ) )
161 0 : , m_aLB_Scheme( pWindow, SchResId( LB_3D_SCHEME ) )
162 : {
163 0 : m_aCB_3DLook.SetToggleHdl( LINK( this, Dim3DLookResourceGroup, Dim3DLookCheckHdl ) );
164 :
165 0 : m_aLB_Scheme.InsertEntry(String(SchResId(STR_3DSCHEME_SIMPLE)));
166 0 : m_aLB_Scheme.InsertEntry(String(SchResId(STR_3DSCHEME_REALISTIC)));
167 0 : m_aLB_Scheme.SetDropDownLineCount(2);
168 :
169 0 : m_aLB_Scheme.SetSelectHdl( LINK( this, Dim3DLookResourceGroup, SelectSchemeHdl ) );
170 0 : m_aLB_Scheme.SetAccessibleName(m_aCB_3DLook.GetText());
171 0 : m_aLB_Scheme.SetAccessibleRelationLabeledBy(&m_aCB_3DLook);
172 0 : }
173 0 : Dim3DLookResourceGroup::~Dim3DLookResourceGroup()
174 : {
175 0 : }
176 0 : void Dim3DLookResourceGroup::showControls( bool bShow )
177 : {
178 0 : m_aCB_3DLook.Show(bShow);
179 0 : m_aLB_Scheme.Show(bShow);
180 0 : }
181 0 : long Dim3DLookResourceGroup::getHeight()
182 : {
183 0 : return m_aCB_3DLook.GetSizePixel().Height() + m_aLB_Scheme.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
184 : }
185 0 : void Dim3DLookResourceGroup::setPosition( const Point& rPoint )
186 : {
187 0 : m_aCB_3DLook.SetPosPixel(rPoint);
188 0 : Size aSize( m_aCB_3DLook.CalcMinimumSize() );
189 0 : m_aCB_3DLook.SetPosSizePixel(rPoint,aSize);
190 0 : Point aLBPos(rPoint);
191 0 : aLBPos.X() += aSize.Width()
192 0 : + m_aLB_Scheme.LogicToPixel( Size(6,0), MapMode(MAP_APPFONT) ).Width();
193 0 : aLBPos.Y() -= m_aLB_Scheme.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
194 0 : m_aLB_Scheme.SetPosPixel(aLBPos);
195 0 : }
196 0 : void Dim3DLookResourceGroup::fillControls( const ChartTypeParameter& rParameter )
197 : {
198 0 : m_aCB_3DLook.Check(rParameter.b3DLook);
199 0 : m_aLB_Scheme.Enable(rParameter.b3DLook);
200 :
201 0 : if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Simple )
202 0 : m_aLB_Scheme.SelectEntryPos(POS_3DSCHEME_SIMPLE);
203 0 : else if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Realistic )
204 0 : m_aLB_Scheme.SelectEntryPos(POS_3DSCHEME_REALISTIC);
205 : else
206 0 : m_aLB_Scheme.SetNoSelection();
207 0 : }
208 0 : void Dim3DLookResourceGroup::fillParameter( ChartTypeParameter& rParameter )
209 : {
210 0 : rParameter.b3DLook = m_aCB_3DLook.IsChecked();
211 0 : sal_uInt16 nPos = m_aLB_Scheme.GetSelectEntryPos();
212 0 : if( POS_3DSCHEME_SIMPLE == nPos )
213 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Simple;
214 0 : else if( POS_3DSCHEME_REALISTIC == nPos )
215 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Realistic;
216 : else
217 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Unknown;
218 0 : }
219 0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, Dim3DLookCheckHdl)
220 : {
221 0 : if(m_pChangeListener)
222 0 : m_pChangeListener->stateChanged(this);
223 0 : return 0;
224 : }
225 0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, SelectSchemeHdl)
226 : {
227 0 : if(m_pChangeListener)
228 0 : m_pChangeListener->stateChanged(this);
229 0 : return 0;
230 : }
231 :
232 : //--------------------------------------------------------------------------
233 :
234 : class SortByXValuesResourceGroup : public ChangingResource
235 : {
236 : public:
237 : SortByXValuesResourceGroup( Window* pWindow );
238 : virtual ~SortByXValuesResourceGroup();
239 :
240 : void showControls( bool bShow );
241 : long getHeight();
242 : void setPosition( const Point& rPoint );
243 :
244 : void fillControls( const ChartTypeParameter& rParameter );
245 : void fillParameter( ChartTypeParameter& rParameter );
246 :
247 : private:
248 : DECL_LINK( SortByXValuesCheckHdl, void* );
249 :
250 : private:
251 : CheckBox m_aCB_XValueSorting;
252 : };
253 0 : SortByXValuesResourceGroup::SortByXValuesResourceGroup( Window* pWindow )
254 : : ChangingResource()
255 0 : , m_aCB_XValueSorting( pWindow, SchResId( CB_XVALUE_SORTING ) )
256 : {
257 0 : m_aCB_XValueSorting.SetToggleHdl( LINK( this, SortByXValuesResourceGroup, SortByXValuesCheckHdl ) );
258 0 : }
259 0 : SortByXValuesResourceGroup::~SortByXValuesResourceGroup()
260 : {
261 0 : }
262 0 : void SortByXValuesResourceGroup::showControls( bool bShow )
263 : {
264 0 : m_aCB_XValueSorting.Show(bShow);
265 0 : }
266 0 : long SortByXValuesResourceGroup::getHeight()
267 : {
268 0 : return m_aCB_XValueSorting.GetSizePixel().Height();
269 : }
270 0 : void SortByXValuesResourceGroup::setPosition( const Point& rPoint )
271 : {
272 0 : m_aCB_XValueSorting.SetPosPixel(rPoint);
273 0 : }
274 0 : void SortByXValuesResourceGroup::fillControls( const ChartTypeParameter& rParameter )
275 : {
276 0 : m_aCB_XValueSorting.Check( rParameter.bSortByXValues );
277 0 : }
278 0 : void SortByXValuesResourceGroup::fillParameter( ChartTypeParameter& rParameter )
279 : {
280 0 : rParameter.bSortByXValues = m_aCB_XValueSorting.IsChecked();
281 0 : }
282 0 : IMPL_LINK_NOARG(SortByXValuesResourceGroup, SortByXValuesCheckHdl)
283 : {
284 0 : if(m_pChangeListener)
285 0 : m_pChangeListener->stateChanged(this);
286 0 : return 0;
287 : }
288 : //--------------------------------------------------------------------------
289 : class StackingResourceGroup : public ChangingResource
290 : {
291 : public:
292 : StackingResourceGroup( Window* pWindow );
293 : virtual ~StackingResourceGroup();
294 :
295 : void showControls( bool bShow, bool bShowDeepStacking );
296 : Point getPosition();
297 : long getHeight();
298 : void setPosition( const Point& rPoint );
299 :
300 : void fillControls( const ChartTypeParameter& rParameter );
301 : void fillParameter( ChartTypeParameter& rParameter );
302 :
303 : private:
304 : DECL_LINK( StackingChangeHdl, RadioButton* );
305 : DECL_LINK( StackingEnableHdl, void* );
306 :
307 : private:
308 : CheckBox m_aCB_Stacked;
309 : RadioButton m_aRB_Stack_Y;
310 : RadioButton m_aRB_Stack_Y_Percent;
311 : RadioButton m_aRB_Stack_Z;
312 :
313 : bool m_bShowDeepStacking;
314 : };
315 0 : StackingResourceGroup::StackingResourceGroup( Window* pWindow )
316 : : ChangingResource()
317 : , m_aCB_Stacked( pWindow, SchResId( CB_STACKED ) )
318 : , m_aRB_Stack_Y( pWindow, SchResId( RB_STACK_Y ) )
319 : , m_aRB_Stack_Y_Percent( pWindow, SchResId( RB_STACK_Y_PERCENT ) )
320 : , m_aRB_Stack_Z( pWindow, SchResId( RB_STACK_Z ) )
321 0 : , m_bShowDeepStacking(true)
322 : {
323 0 : m_aCB_Stacked.SetToggleHdl( LINK( this, StackingResourceGroup, StackingEnableHdl ) );
324 0 : m_aRB_Stack_Y.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
325 0 : m_aRB_Stack_Y_Percent.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
326 0 : m_aRB_Stack_Z.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
327 0 : m_aRB_Stack_Y.SetAccessibleRelationMemberOf(&m_aCB_Stacked);
328 0 : m_aRB_Stack_Y_Percent.SetAccessibleRelationMemberOf(&m_aCB_Stacked);
329 0 : m_aRB_Stack_Z.SetAccessibleRelationMemberOf(&m_aCB_Stacked);
330 0 : }
331 0 : StackingResourceGroup::~StackingResourceGroup()
332 : {
333 0 : }
334 0 : void StackingResourceGroup::showControls( bool bShow, bool bShowDeepStacking )
335 : {
336 0 : m_bShowDeepStacking = bShowDeepStacking;
337 0 : m_aCB_Stacked.Show(bShow);
338 0 : m_aRB_Stack_Y.Show(bShow);
339 0 : m_aRB_Stack_Y_Percent.Show(bShow);
340 0 : m_aRB_Stack_Z.Show(bShow&&bShowDeepStacking);
341 0 : }
342 0 : Point StackingResourceGroup::getPosition()
343 : {
344 0 : return m_aCB_Stacked.GetPosPixel();
345 : }
346 0 : long StackingResourceGroup::getHeight()
347 : {
348 0 : RadioButton& rLastButton = m_bShowDeepStacking ? m_aRB_Stack_Z : m_aRB_Stack_Y_Percent;
349 :
350 0 : long nHeight = rLastButton.GetPosPixel().Y()
351 0 : - m_aCB_Stacked.GetPosPixel().Y();
352 0 : nHeight += rLastButton.GetSizePixel().Height();
353 0 : return nHeight;
354 : }
355 0 : void StackingResourceGroup::setPosition( const Point& rPoint )
356 : {
357 0 : Point aOld = this->getPosition();
358 0 : long nDiffY = rPoint.Y() - aOld.Y();
359 0 : long nDiffX = rPoint.X() - aOld.X();
360 0 : m_aCB_Stacked.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
361 :
362 0 : aOld = m_aRB_Stack_Y.GetPosPixel();
363 0 : m_aRB_Stack_Y.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
364 :
365 0 : aOld = m_aRB_Stack_Y_Percent.GetPosPixel();
366 0 : m_aRB_Stack_Y_Percent.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
367 :
368 0 : aOld = m_aRB_Stack_Z.GetPosPixel();
369 0 : m_aRB_Stack_Z.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
370 0 : }
371 0 : void StackingResourceGroup::fillControls( const ChartTypeParameter& rParameter )
372 : {
373 : m_aCB_Stacked.Check( rParameter.eStackMode!=GlobalStackMode_NONE
374 0 : && rParameter.eStackMode!=GlobalStackMode_STACK_Z ); //todo remove this condition if z stacking radio button is really used
375 0 : switch( rParameter.eStackMode )
376 : {
377 : case GlobalStackMode_STACK_Y:
378 0 : m_aRB_Stack_Y.Check();
379 0 : break;
380 : case GlobalStackMode_STACK_Y_PERCENT:
381 0 : m_aRB_Stack_Y_Percent.Check();
382 0 : break;
383 : case GlobalStackMode_STACK_Z:
384 : //todo uncomment this condition if z stacking radio button is really used
385 : /*
386 : if( rParameter.b3DLook )
387 : m_aRB_Stack_Z.Check();
388 : else
389 : */
390 0 : m_aRB_Stack_Y.Check();
391 0 : break;
392 : default:
393 0 : m_aRB_Stack_Y.Check();
394 0 : break;
395 : }
396 : //dis/enabling
397 0 : m_aCB_Stacked.Enable( !rParameter.bXAxisWithValues );
398 0 : m_aRB_Stack_Y.Enable( m_aCB_Stacked.IsChecked() && !rParameter.bXAxisWithValues );
399 0 : m_aRB_Stack_Y_Percent.Enable( m_aCB_Stacked.IsChecked() && !rParameter.bXAxisWithValues );
400 0 : m_aRB_Stack_Z.Enable( m_aCB_Stacked.IsChecked() && rParameter.b3DLook );
401 0 : }
402 0 : void StackingResourceGroup::fillParameter( ChartTypeParameter& rParameter )
403 : {
404 0 : if(!m_aCB_Stacked.IsChecked())
405 0 : rParameter.eStackMode = GlobalStackMode_NONE;
406 0 : else if(m_aRB_Stack_Y.IsChecked())
407 0 : rParameter.eStackMode = GlobalStackMode_STACK_Y;
408 0 : else if(m_aRB_Stack_Y_Percent.IsChecked())
409 0 : rParameter.eStackMode = GlobalStackMode_STACK_Y_PERCENT;
410 0 : else if(m_aRB_Stack_Z.IsChecked())
411 0 : rParameter.eStackMode = GlobalStackMode_STACK_Z;
412 0 : }
413 0 : IMPL_LINK( StackingResourceGroup, StackingChangeHdl, RadioButton*, pRadio )
414 : {
415 : //for each radio click ther are coming two change events
416 : //first uncheck of previous button -> ignore that call
417 : //the second call gives the check of the new button
418 0 : if( m_pChangeListener && pRadio && pRadio->IsChecked() )
419 0 : m_pChangeListener->stateChanged(this);
420 0 : return 0;
421 : }
422 0 : IMPL_LINK_NOARG(StackingResourceGroup, StackingEnableHdl)
423 : {
424 0 : if( m_pChangeListener )
425 0 : m_pChangeListener->stateChanged(this);
426 0 : return 0;
427 : }
428 : //--------------------------------------------------------------------------
429 : class SplinePropertiesDialog : public ModalDialog
430 : {
431 : public:
432 : SplinePropertiesDialog( Window* pParent );
433 : virtual ~SplinePropertiesDialog();
434 :
435 : void fillControls( const ChartTypeParameter& rParameter );
436 : void fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines );
437 :
438 : virtual void StateChanged( StateChangedType nType );
439 :
440 : private:
441 : DECL_LINK( SplineModeRadioHdl, void* );
442 :
443 : void adjustControlPositions();
444 : void adjustSize();
445 :
446 : private:
447 : RadioButton m_aRB_Splines_Cubic;
448 : RadioButton m_aRB_Splines_B;
449 :
450 : FixedLine m_aFL_SplineSeparator;
451 :
452 : FixedText m_aFT_SplineResolution;
453 : MetricField m_aMF_SplineResolution;
454 : FixedText m_aFT_SplineOrder;
455 : MetricField m_aMF_SplineOrder;
456 :
457 : FixedLine m_aFL_DialogButtons;
458 : HelpButton m_aBP_Help;
459 : OKButton m_aBP_OK;
460 : CancelButton m_aBP_Cancel;
461 : };
462 :
463 0 : SplinePropertiesDialog::SplinePropertiesDialog( Window* pParent )
464 : : ModalDialog( pParent, SchResId( DLG_SPLINE_PROPERTIES ) )
465 : , m_aRB_Splines_Cubic( this, SchResId( RB_SPLINES_CUBIC ) )
466 : , m_aRB_Splines_B( this, SchResId( RB_SPLINES_B ) )
467 : , m_aFL_SplineSeparator( this, SchResId( FL_SPLINE_SEPARATOR ) )
468 : , m_aFT_SplineResolution( this, SchResId( FT_SPLINE_RESOLUTION ) )
469 : , m_aMF_SplineResolution( this, SchResId( MF_SPLINE_RESOLUTION ) )
470 : , m_aFT_SplineOrder( this, SchResId( FT_SPLINE_ORDER ) )
471 : , m_aMF_SplineOrder( this, SchResId( MF_SPLINE_ORDER ) )
472 : , m_aFL_DialogButtons( this, SchResId( FL_SPLINE_DIALOGBUTTONS ) )
473 : , m_aBP_Help( this, SchResId(BTN_HELP) )
474 : , m_aBP_OK( this, SchResId(BTN_OK) )
475 0 : , m_aBP_Cancel( this, SchResId(BTN_CANCEL) )
476 : {
477 0 : FreeResource();
478 :
479 0 : this->SetText( String( SchResId( STR_DLG_SMOOTH_LINE_PROPERTIES ) ) );
480 :
481 0 : m_aRB_Splines_Cubic.SetToggleHdl( LINK( this, SplinePropertiesDialog, SplineModeRadioHdl ) );
482 0 : m_aRB_Splines_B.SetToggleHdl( LINK( this, SplinePropertiesDialog, SplineModeRadioHdl ) );
483 0 : }
484 :
485 0 : SplinePropertiesDialog::~SplinePropertiesDialog()
486 : {
487 0 : }
488 :
489 0 : void SplinePropertiesDialog::StateChanged( StateChangedType nType )
490 : {
491 0 : Dialog::StateChanged( nType );
492 :
493 0 : if( nType == STATE_CHANGE_INITSHOW )
494 : {
495 0 : adjustControlPositions();
496 0 : adjustSize();
497 : }
498 0 : }
499 :
500 0 : void SplinePropertiesDialog::adjustControlPositions()
501 : {
502 : //position of controls:
503 : //----------------
504 : //fixed line and Fixed texts as near as possible to radio controls
505 0 : long nRBWidth = ::std::max( m_aRB_Splines_Cubic.CalcMinimumSize().Width(), m_aRB_Splines_B.CalcMinimumSize().Width());
506 0 : long nFLXPos = m_aRB_Splines_Cubic.GetPosPixel().X()+nRBWidth+m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,0), MapMode(MAP_APPFONT) ).Width();
507 0 : long nFTXPos = nFLXPos + m_aFL_SplineSeparator.GetSizePixel().Width() + m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,0), MapMode(MAP_APPFONT) ).Width();
508 :
509 0 : m_aRB_Splines_Cubic.SetSizePixel( Size( nRBWidth, m_aRB_Splines_Cubic.GetSizePixel().Height() ) );
510 0 : m_aRB_Splines_B.SetSizePixel( Size( nRBWidth, m_aRB_Splines_B.GetSizePixel().Height() ) );
511 :
512 0 : m_aFL_SplineSeparator.SetPosPixel( Point( nFLXPos, m_aFL_SplineSeparator.GetPosPixel().Y() ) );
513 :
514 0 : m_aFT_SplineOrder.SetPosPixel( Point( nFTXPos, m_aFT_SplineOrder.GetPosPixel().Y() ) );
515 0 : m_aFT_SplineResolution.SetPosPixel( Point( nFTXPos, m_aFT_SplineResolution.GetPosPixel().Y() ) );
516 :
517 : //----------------
518 : //move metric controls as near to text as possible
519 0 : long nFTWidth = ::std::max( m_aFT_SplineOrder.CalcMinimumSize().Width(), m_aFT_SplineResolution.CalcMinimumSize().Width());
520 0 : long nMFXPos = m_aFT_SplineOrder.GetPosPixel().X()+nFTWidth+m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_DESC_X,0), MapMode(MAP_APPFONT) ).Width();
521 :
522 0 : m_aFT_SplineOrder.SetSizePixel( Size( nFTWidth, m_aFT_SplineOrder.GetSizePixel().Height() ) );
523 0 : m_aFT_SplineResolution.SetSizePixel( Size( nFTWidth, m_aFT_SplineResolution.GetSizePixel().Height() ) );
524 :
525 0 : m_aMF_SplineOrder.SetPosPixel( Point( nMFXPos, m_aMF_SplineOrder.GetPosPixel().Y() ) );
526 0 : m_aMF_SplineResolution.SetPosPixel( Point( nMFXPos, m_aMF_SplineResolution.GetPosPixel().Y() ) );
527 0 : }
528 :
529 0 : void SplinePropertiesDialog::adjustSize()
530 : {
531 0 : Size aDlgSize( this->GetSizePixel() );
532 0 : long nBorder = m_aRB_Splines_Cubic.GetPosPixel().X();
533 0 : long nX = m_aMF_SplineOrder.GetPosPixel().X() + m_aMF_SplineOrder.GetSizePixel().Width();
534 0 : if(aDlgSize.Width()< (nX+nBorder) )
535 : {
536 0 : aDlgSize.Width() = (nX+nBorder);
537 0 : this->SetSizePixel(aDlgSize);
538 :
539 0 : Size aLineSize( m_aFL_DialogButtons.GetSizePixel() );
540 0 : aLineSize.Width() = aDlgSize.Width();
541 0 : m_aFL_DialogButtons.SetSizePixel(aLineSize);
542 : }
543 0 : }
544 0 : void SplinePropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
545 : {
546 0 : switch(rParameter.eCurveStyle)
547 : {
548 : case CurveStyle_CUBIC_SPLINES:
549 0 : m_aRB_Splines_Cubic.Check();
550 0 : break;
551 : case CurveStyle_B_SPLINES:
552 0 : m_aRB_Splines_B.Check();
553 0 : break;
554 : default:
555 0 : m_aRB_Splines_Cubic.Check();
556 0 : break;
557 : }
558 0 : m_aMF_SplineOrder.SetValue( rParameter.nSplineOrder );
559 0 : m_aMF_SplineResolution.SetValue( rParameter.nCurveResolution );
560 :
561 : //dis/enabling
562 0 : m_aFT_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
563 0 : m_aMF_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
564 0 : }
565 0 : void SplinePropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines )
566 : {
567 0 : if(!bSmoothLines)
568 0 : rParameter.eCurveStyle=CurveStyle_LINES;
569 0 : else if(m_aRB_Splines_Cubic.IsChecked())
570 0 : rParameter.eCurveStyle=CurveStyle_CUBIC_SPLINES;
571 0 : else if(m_aRB_Splines_B.IsChecked())
572 0 : rParameter.eCurveStyle=CurveStyle_B_SPLINES;
573 :
574 0 : rParameter.nCurveResolution = static_cast< sal_Int32 >( m_aMF_SplineResolution.GetValue());
575 0 : rParameter.nSplineOrder = static_cast< sal_Int32 >( m_aMF_SplineOrder.GetValue());
576 0 : }
577 0 : IMPL_LINK_NOARG(SplinePropertiesDialog, SplineModeRadioHdl)
578 : {
579 0 : m_aFT_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
580 0 : m_aMF_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
581 0 : return 0;
582 : }
583 :
584 : //--------------------------------------------------------------------------
585 :
586 : class SplineResourceGroup : public ChangingResource
587 : {
588 : public:
589 : SplineResourceGroup( Window* pWindow );
590 : virtual ~SplineResourceGroup();
591 :
592 : void showControls( bool bShow );
593 : Point getPosition();
594 : long getHeight();
595 : void setPosition( const Point& rPoint );
596 :
597 : void fillControls( const ChartTypeParameter& rParameter );
598 : void fillParameter( ChartTypeParameter& rParameter );
599 :
600 : private:
601 : DECL_LINK( SplineChangeHdl, void* );
602 : DECL_LINK( SplineDetailsDialogHdl, void* );
603 : SplinePropertiesDialog& getSplinePropertiesDialog();
604 :
605 : private:
606 : CheckBox m_aCB_Splines;
607 : PushButton m_aPB_DetailsDialog;
608 : ::std::auto_ptr< SplinePropertiesDialog > m_pSplinePropertiesDialog;
609 : };
610 0 : SplineResourceGroup::SplineResourceGroup( Window* pWindow )
611 : : ChangingResource()
612 : , m_aCB_Splines( pWindow, SchResId( CB_SPLINES ) )
613 : , m_aPB_DetailsDialog( pWindow, SchResId( PB_SPLINE_DIALOG ) )
614 0 : , m_pSplinePropertiesDialog()
615 : {
616 0 : m_aCB_Splines.SetToggleHdl( LINK( this, SplineResourceGroup, SplineChangeHdl ) );
617 0 : m_aPB_DetailsDialog.SetClickHdl( LINK( this, SplineResourceGroup, SplineDetailsDialogHdl ) );
618 0 : m_aPB_DetailsDialog.SetQuickHelpText( String( SchResId(STR_DLG_SMOOTH_LINE_PROPERTIES) ) );
619 :
620 0 : Size aButtonSize( m_aPB_DetailsDialog.GetSizePixel() );
621 0 : Size aMinSize( m_aPB_DetailsDialog.CalcMinimumSize() );
622 0 : sal_Int32 nDistance = 10;
623 0 : if( pWindow )
624 : {
625 0 : Size aDistanceSize( pWindow->LogicToPixel( Size(RSC_SP_CTRL_DESC_X,2), MapMode(MAP_APPFONT) ) );
626 0 : nDistance = 2*aDistanceSize.Width();
627 : }
628 0 : aButtonSize.Width() = aMinSize.Width() + nDistance;
629 0 : m_aPB_DetailsDialog.SetSizePixel( aButtonSize );
630 0 : }
631 0 : SplineResourceGroup::~SplineResourceGroup()
632 : {
633 0 : }
634 0 : SplinePropertiesDialog& SplineResourceGroup::getSplinePropertiesDialog()
635 : {
636 0 : if( !m_pSplinePropertiesDialog.get() )
637 0 : m_pSplinePropertiesDialog = ::std::auto_ptr< SplinePropertiesDialog >( new SplinePropertiesDialog( m_aPB_DetailsDialog.GetParent() ) );
638 0 : return *m_pSplinePropertiesDialog;
639 : }
640 0 : void SplineResourceGroup::showControls( bool bShow )
641 : {
642 0 : m_aCB_Splines.Show(bShow);
643 0 : m_aPB_DetailsDialog.Show(bShow);
644 0 : }
645 0 : Point SplineResourceGroup::getPosition()
646 : {
647 0 : return m_aCB_Splines.GetPosPixel();
648 : }
649 0 : long SplineResourceGroup::getHeight()
650 : {
651 0 : return m_aCB_Splines.GetSizePixel().Height() + m_aPB_DetailsDialog.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
652 : }
653 0 : void SplineResourceGroup::setPosition( const Point& rPoint )
654 : {
655 0 : Size aSize( m_aCB_Splines.CalcMinimumSize() );
656 0 : Size aDistanceSize( m_aCB_Splines.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,1), MapMode(MAP_APPFONT) ) );
657 0 : m_aCB_Splines.SetSizePixel( aSize );
658 :
659 0 : Point aOld = this->getPosition();
660 0 : long nDiffY = rPoint.Y() - aOld.Y();
661 0 : long nDiffX = rPoint.X() - aOld.X();
662 :
663 0 : Point aNew( aOld.X()+nDiffX, aOld.Y()+nDiffY );
664 0 : m_aCB_Splines.SetPosPixel( aNew );
665 :
666 0 : aNew.X() += ( aSize.Width() + aDistanceSize.Width() );
667 0 : aNew.Y() -= 3*aDistanceSize.Height();
668 0 : m_aPB_DetailsDialog.SetPosPixel( aNew );
669 0 : }
670 :
671 0 : void SplineResourceGroup::fillControls( const ChartTypeParameter& rParameter )
672 : {
673 0 : m_aCB_Splines.Check( rParameter.eCurveStyle!=CurveStyle_LINES );
674 0 : getSplinePropertiesDialog().fillControls( rParameter );
675 0 : }
676 0 : void SplineResourceGroup::fillParameter( ChartTypeParameter& rParameter )
677 : {
678 0 : getSplinePropertiesDialog().fillParameter( rParameter, m_aCB_Splines.IsChecked() );
679 0 : }
680 0 : IMPL_LINK_NOARG(SplineResourceGroup, SplineChangeHdl)
681 : {
682 0 : if( m_pChangeListener )
683 0 : m_pChangeListener->stateChanged(this);
684 0 : return 0;
685 : }
686 :
687 0 : IMPL_LINK_NOARG(SplineResourceGroup, SplineDetailsDialogHdl)
688 : {
689 :
690 0 : ChartTypeParameter aOldParameter;
691 0 : getSplinePropertiesDialog().fillParameter( aOldParameter, m_aCB_Splines.IsChecked() );
692 :
693 0 : sal_Bool bOldSmoothLines = m_aCB_Splines.IsChecked();
694 0 : m_aCB_Splines.Check();
695 0 : if( RET_OK == getSplinePropertiesDialog().Execute() )
696 : {
697 0 : if( m_pChangeListener )
698 0 : m_pChangeListener->stateChanged(this);
699 : }
700 : else
701 : {
702 : //restore old state:
703 0 : m_aCB_Splines.Check( bOldSmoothLines );
704 0 : getSplinePropertiesDialog().fillControls( aOldParameter );
705 : }
706 0 : return 0;
707 : }
708 :
709 : //--------------------------------------------------------------------------
710 :
711 : class GeometryResourceGroup : public ChangingResource
712 : {
713 : public:
714 : GeometryResourceGroup( Window* pWindow );
715 : virtual ~GeometryResourceGroup();
716 :
717 : void showControls( bool bShow );
718 : long getHeight();
719 : void setPosition( const Point& rPoint );
720 :
721 : void fillControls( const ChartTypeParameter& rParameter );
722 : void fillParameter( ChartTypeParameter& rParameter );
723 :
724 : private:
725 : DECL_LINK( GeometryChangeHdl, void* );
726 :
727 : private:
728 : BarGeometryResources m_aGeometryResources;
729 : };
730 0 : GeometryResourceGroup::GeometryResourceGroup( Window* pWindow )
731 : : ChangingResource()
732 0 : , m_aGeometryResources( pWindow )
733 : {
734 0 : m_aGeometryResources.SetSelectHdl( LINK( this, GeometryResourceGroup, GeometryChangeHdl ) );
735 0 : }
736 0 : GeometryResourceGroup::~GeometryResourceGroup()
737 : {
738 0 : }
739 0 : void GeometryResourceGroup::showControls( bool bShow )
740 : {
741 0 : m_aGeometryResources.Show(bShow);
742 0 : }
743 0 : long GeometryResourceGroup::getHeight()
744 : {
745 0 : return m_aGeometryResources.GetSizePixel().Height();
746 : }
747 0 : void GeometryResourceGroup::setPosition( const Point& rPoint )
748 : {
749 0 : m_aGeometryResources.SetPosPixel( rPoint );
750 0 : }
751 :
752 0 : void GeometryResourceGroup::fillControls( const ChartTypeParameter& rParameter )
753 : {
754 0 : sal_uInt16 nGeometry3D = static_cast<sal_uInt16>(rParameter.nGeometry3D);
755 0 : m_aGeometryResources.SelectEntryPos(nGeometry3D);
756 0 : m_aGeometryResources.Enable(rParameter.b3DLook);
757 0 : }
758 0 : void GeometryResourceGroup::fillParameter( ChartTypeParameter& rParameter )
759 : {
760 0 : rParameter.nGeometry3D = 1;
761 0 : if( m_aGeometryResources.GetSelectEntryCount() )
762 0 : rParameter.nGeometry3D = m_aGeometryResources.GetSelectEntryPos();
763 0 : }
764 0 : IMPL_LINK_NOARG(GeometryResourceGroup, GeometryChangeHdl)
765 : {
766 0 : if( m_pChangeListener )
767 0 : m_pChangeListener->stateChanged(this);
768 0 : return 0;
769 : }
770 :
771 : //--------------------------------------------------------------------------
772 : //--------------------------------------------------------------------------
773 : //--------------------------------------------------------------------------
774 :
775 0 : ChartTypeTabPage::ChartTypeTabPage( Window* pParent
776 : , const uno::Reference< XChartDocument >& xChartModel
777 : , const uno::Reference< uno::XComponentContext >& xContext
778 : , bool bDoLiveUpdate, bool bHideDescription )
779 : : OWizardPage( pParent, SchResId(TP_CHARTTYPE) )
780 : , m_aFT_ChooseType( this, SchResId( FT_CHARTTYPE ) )
781 : , m_aMainTypeList( this, SchResId( LB_CHARTTYPE ) )
782 : , m_aSubTypeList( this, SchResId( CT_CHARTVARIANT ) )
783 0 : , m_pAxisTypeResourceGroup( new AxisTypeResourceGroup(this) )
784 0 : , m_pDim3DLookResourceGroup( new Dim3DLookResourceGroup(this) )
785 0 : , m_pStackingResourceGroup( new StackingResourceGroup(this) )
786 0 : , m_pSplineResourceGroup( new SplineResourceGroup(this) )
787 0 : , m_pGeometryResourceGroup( new GeometryResourceGroup( this ) )
788 0 : , m_pSortByXValuesResourceGroup( new SortByXValuesResourceGroup( this ) )
789 : , m_nYTopPos(0)
790 : , m_xChartModel( xChartModel )
791 : , m_xCC( xContext )
792 : , m_aChartTypeDialogControllerList(0)
793 : , m_pCurrentMainType(0)
794 : , m_nChangingCalls(0)
795 : , m_bDoLiveUpdate(bDoLiveUpdate)
796 0 : , m_aTimerTriggeredControllerLock( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) )
797 : {
798 0 : FreeResource();
799 :
800 0 : if( bHideDescription )
801 : {
802 0 : m_aFT_ChooseType.Hide();
803 0 : long nYDiff = m_aMainTypeList.GetPosPixel().Y() - m_aFT_ChooseType.GetPosPixel().Y();
804 :
805 0 : Point aOldPos( m_aMainTypeList.GetPosPixel() );
806 0 : m_aMainTypeList.SetPosPixel( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
807 :
808 0 : aOldPos = m_aSubTypeList.GetPosPixel();
809 0 : m_aSubTypeList.SetPosPixel( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
810 :
811 0 : aOldPos = m_pAxisTypeResourceGroup->getPosition();
812 0 : m_pAxisTypeResourceGroup->setPosition( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
813 :
814 0 : Size aSize( this->GetSizePixel() );
815 0 : this->SetSizePixel( Size( aSize.Width(), aSize.Height()-nYDiff+3 ) );
816 : }
817 : else
818 : {
819 0 : Font aFont( m_aFT_ChooseType.GetControlFont() );
820 0 : aFont.SetWeight( WEIGHT_BOLD );
821 0 : m_aFT_ChooseType.SetControlFont( aFont );
822 :
823 0 : m_aFT_ChooseType.SetStyle( m_aFT_ChooseType.GetStyle() | WB_NOLABEL );
824 : }
825 :
826 0 : this->SetText( String(SchResId(STR_PAGE_CHARTTYPE)) );
827 :
828 0 : m_aMainTypeList.SetStyle(m_aMainTypeList.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_FLATVALUESET | WB_3DLOOK );
829 0 : m_aMainTypeList.SetSelectHdl( LINK( this, ChartTypeTabPage, SelectMainTypeHdl ) );
830 0 : m_aSubTypeList.SetSelectHdl( LINK( this, ChartTypeTabPage, SelectSubTypeHdl ) );
831 :
832 0 : m_aSubTypeList.SetStyle(m_aSubTypeList.GetStyle() |
833 0 : WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK );
834 0 : m_aSubTypeList.SetColCount(4);
835 0 : m_aSubTypeList.SetLineCount(1);
836 :
837 0 : bool bDisableComplexChartTypes = false;
838 0 : uno::Reference< beans::XPropertySet > xProps( m_xChartModel, uno::UNO_QUERY );
839 0 : if ( xProps.is() )
840 : {
841 : try
842 : {
843 0 : xProps->getPropertyValue( "DisableComplexChartTypes" ) >>= bDisableComplexChartTypes;
844 : }
845 0 : catch( const uno::Exception& e )
846 : {
847 : ASSERT_EXCEPTION( e );
848 : }
849 : }
850 :
851 0 : m_aChartTypeDialogControllerList.push_back(new ColumnChartDialogController() );
852 0 : m_aChartTypeDialogControllerList.push_back(new BarChartDialogController() );
853 0 : m_aChartTypeDialogControllerList.push_back(new PieChartDialogController() );
854 0 : m_aChartTypeDialogControllerList.push_back(new AreaChartDialogController() );
855 0 : m_aChartTypeDialogControllerList.push_back(new LineChartDialogController() );
856 0 : if ( !bDisableComplexChartTypes )
857 : {
858 0 : m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
859 0 : m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
860 : }
861 0 : m_aChartTypeDialogControllerList.push_back(new NetChartDialogController() );
862 0 : if ( !bDisableComplexChartTypes )
863 : {
864 0 : m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
865 : }
866 0 : m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
867 :
868 0 : ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
869 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
870 0 : for( ; aIter != aEnd; ++aIter )
871 : {
872 0 : m_aMainTypeList.InsertEntry( (*aIter)->getName(), (*aIter)->getImage() );
873 0 : (*aIter)->setChangeListener( this );
874 : }
875 :
876 0 : m_nYTopPos = m_pAxisTypeResourceGroup->getPosition().Y();
877 :
878 0 : m_pAxisTypeResourceGroup->setChangeListener( this );
879 0 : m_pDim3DLookResourceGroup->setChangeListener( this );
880 0 : m_pStackingResourceGroup->setChangeListener( this );
881 0 : m_pSplineResourceGroup->setChangeListener( this );
882 0 : m_pGeometryResourceGroup->setChangeListener( this );
883 0 : m_pSortByXValuesResourceGroup->setChangeListener( this );
884 0 : }
885 :
886 0 : ChartTypeTabPage::~ChartTypeTabPage()
887 : {
888 : //delete all dialog controller
889 0 : ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
890 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
891 0 : for( ; aIter != aEnd; ++aIter )
892 : {
893 0 : delete *aIter;
894 : }
895 0 : m_aChartTypeDialogControllerList.clear();
896 :
897 : //delete all resource helper
898 0 : delete m_pAxisTypeResourceGroup;
899 0 : delete m_pDim3DLookResourceGroup;
900 0 : delete m_pStackingResourceGroup;
901 0 : delete m_pSplineResourceGroup;
902 0 : delete m_pGeometryResourceGroup;
903 0 : delete m_pSortByXValuesResourceGroup;
904 0 : }
905 0 : ChartTypeParameter ChartTypeTabPage::getCurrentParamter() const
906 : {
907 0 : ChartTypeParameter aParameter;
908 0 : aParameter.nSubTypeIndex = static_cast<sal_Int32>( m_aSubTypeList.GetSelectItemId() );
909 0 : m_pAxisTypeResourceGroup->fillParameter( aParameter );
910 0 : m_pDim3DLookResourceGroup->fillParameter( aParameter );
911 0 : m_pStackingResourceGroup->fillParameter( aParameter );
912 0 : m_pSplineResourceGroup->fillParameter( aParameter );
913 0 : m_pGeometryResourceGroup->fillParameter( aParameter );
914 0 : m_pSortByXValuesResourceGroup->fillParameter( aParameter );
915 0 : return aParameter;
916 : }
917 0 : void ChartTypeTabPage::commitToModel( const ChartTypeParameter& rParameter )
918 : {
919 0 : if( !m_pCurrentMainType )
920 0 : return;
921 :
922 0 : m_aTimerTriggeredControllerLock.startTimer();
923 0 : ControllerLockGuard aLockedControllers( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) );
924 0 : m_pCurrentMainType->commitToModel( rParameter, m_xChartModel );
925 : }
926 0 : void ChartTypeTabPage::stateChanged( ChangingResource* /*pResource*/ )
927 : {
928 0 : if(m_nChangingCalls)
929 0 : return;
930 0 : m_nChangingCalls++;
931 :
932 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
933 0 : if( m_pCurrentMainType )
934 : {
935 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
936 0 : m_pCurrentMainType->adjustSubTypeAndEnableControls( aParameter );
937 : }
938 0 : if( m_bDoLiveUpdate )
939 0 : commitToModel( aParameter );
940 :
941 : //detect the new ThreeDLookScheme
942 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
943 0 : aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
944 : //the controls have to be enabled/disabled accordingly
945 0 : this->fillAllControls( aParameter );
946 :
947 0 : m_nChangingCalls--;
948 : }
949 0 : ChartTypeDialogController* ChartTypeTabPage::getSelectedMainType()
950 : {
951 0 : ChartTypeDialogController* pTypeController = 0;
952 : ::std::vector< ChartTypeDialogController* >::size_type nM = static_cast< ::std::vector< ChartTypeDialogController* >::size_type >(
953 0 : m_aMainTypeList.GetSelectEntryPos() );
954 0 : if( nM<m_aChartTypeDialogControllerList.size() )
955 0 : pTypeController = m_aChartTypeDialogControllerList[nM];
956 0 : return pTypeController;
957 : }
958 0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl)
959 : {
960 0 : if( m_pCurrentMainType )
961 : {
962 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
963 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
964 0 : this->fillAllControls( aParameter, false );
965 0 : if( m_bDoLiveUpdate )
966 0 : commitToModel( aParameter );
967 : }
968 0 : return 0;
969 : }
970 :
971 0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl)
972 : {
973 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
974 :
975 0 : if( m_pCurrentMainType )
976 : {
977 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
978 0 : m_pCurrentMainType->hideExtraControls();
979 : }
980 :
981 0 : m_pCurrentMainType = this->getSelectedMainType();
982 0 : if( m_pCurrentMainType )
983 : {
984 0 : this->showAllControls(*m_pCurrentMainType);
985 :
986 0 : m_pCurrentMainType->adjustParameterToMainType( aParameter );
987 0 : if( m_bDoLiveUpdate )
988 0 : commitToModel( aParameter );
989 : //detect the new ThreeDLookScheme
990 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
991 0 : if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
992 0 : aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
993 :
994 0 : aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
995 0 : this->fillAllControls( aParameter );
996 0 : uno::Reference< beans::XPropertySet > xTemplateProps( this->getCurrentTemplate(), uno::UNO_QUERY );
997 0 : m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
998 : }
999 0 : return 0;
1000 : }
1001 :
1002 0 : void ChartTypeTabPage::showAllControls( ChartTypeDialogController& rTypeController )
1003 : {
1004 0 : m_aSubTypeList.Show();
1005 :
1006 0 : long nYPos = m_nYTopPos;
1007 :
1008 : //------
1009 0 : bool bShow = rTypeController.shouldShow_XAxisTypeControl();
1010 0 : long nXPos = m_pAxisTypeResourceGroup->getPosition().X();
1011 0 : m_pAxisTypeResourceGroup->showControls( bShow );
1012 0 : if(bShow)
1013 : {
1014 0 : m_pAxisTypeResourceGroup->setPosition( Point( nXPos, nYPos ) );
1015 0 : nYPos += m_pAxisTypeResourceGroup->getHeight() + lcl_getDistance();
1016 : }
1017 : //------
1018 0 : bShow = rTypeController.shouldShow_3DLookControl();
1019 0 : m_pDim3DLookResourceGroup->showControls( bShow );
1020 0 : if(bShow)
1021 : {
1022 0 : m_pDim3DLookResourceGroup->setPosition( Point( nXPos, nYPos ) );
1023 0 : nYPos += m_pDim3DLookResourceGroup->getHeight() + lcl_getDistance();
1024 : }
1025 : //------
1026 0 : bShow = rTypeController.shouldShow_StackingControl();
1027 0 : m_pStackingResourceGroup->showControls( bShow, rTypeController.shouldShow_DeepStackingControl() );
1028 0 : if(bShow)
1029 : {
1030 0 : long nStackingXPos = nXPos;
1031 0 : if( rTypeController.shouldShow_XAxisTypeControl() )
1032 0 : nStackingXPos += this->LogicToPixel( Size(RSC_SP_CHK_TEXTINDENT,0), MapMode(MAP_APPFONT) ).Width();
1033 0 : m_pStackingResourceGroup->setPosition( Point( nStackingXPos, nYPos ) );
1034 0 : nYPos += m_pStackingResourceGroup->getHeight() + lcl_getDistance();
1035 : }
1036 : //------
1037 0 : bShow = rTypeController.shouldShow_SplineControl();
1038 0 : m_pSplineResourceGroup->showControls( bShow );
1039 0 : if(bShow)
1040 : {
1041 0 : m_pSplineResourceGroup->setPosition( Point( nXPos, nYPos ) );
1042 0 : nYPos += m_pSplineResourceGroup->getHeight() + lcl_getDistance();
1043 : }
1044 : //------
1045 0 : bShow = rTypeController.shouldShow_GeometryControl();
1046 0 : m_pGeometryResourceGroup->showControls( bShow );
1047 0 : if(bShow)
1048 : {
1049 0 : m_pGeometryResourceGroup->setPosition( Point( nXPos+17, nYPos ) );
1050 0 : nYPos += m_pGeometryResourceGroup->getHeight() + lcl_getDistance();
1051 : }
1052 : //------
1053 0 : bShow = rTypeController.shouldShow_SortByXValuesResourceGroup();
1054 0 : m_pSortByXValuesResourceGroup->showControls( bShow );
1055 0 : if(bShow)
1056 : {
1057 0 : m_pSortByXValuesResourceGroup->setPosition( Point( nXPos, nYPos ) );
1058 0 : nYPos += m_pSortByXValuesResourceGroup->getHeight() + lcl_getDistance();
1059 : }
1060 : //------
1061 0 : Size aPageSize( this->GetSizePixel() );
1062 0 : Size aRemainingSize = Size( aPageSize.Width()-nXPos, aPageSize.Height()-nYPos );
1063 0 : rTypeController.showExtraControls( this, Point( nXPos, nYPos ), aRemainingSize );
1064 0 : }
1065 :
1066 0 : void ChartTypeTabPage::fillAllControls( const ChartTypeParameter& rParameter, bool bAlsoResetSubTypeList )
1067 : {
1068 0 : m_nChangingCalls++;
1069 0 : if( m_pCurrentMainType && bAlsoResetSubTypeList )
1070 : {
1071 0 : m_pCurrentMainType->fillSubTypeList( m_aSubTypeList, rParameter );
1072 : }
1073 0 : m_aSubTypeList.SelectItem( static_cast<sal_uInt16>( rParameter.nSubTypeIndex) );
1074 0 : m_pAxisTypeResourceGroup->fillControls( rParameter );
1075 0 : m_pDim3DLookResourceGroup->fillControls( rParameter );
1076 0 : m_pStackingResourceGroup->fillControls( rParameter );
1077 0 : m_pSplineResourceGroup->fillControls( rParameter );
1078 0 : m_pGeometryResourceGroup->fillControls( rParameter );
1079 0 : m_pSortByXValuesResourceGroup->fillControls( rParameter );
1080 0 : m_nChangingCalls--;
1081 0 : }
1082 :
1083 0 : void ChartTypeTabPage::initializePage()
1084 : {
1085 0 : if( !m_xChartModel.is() )
1086 0 : return;
1087 0 : uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
1088 0 : uno::Reference< frame::XModel > xModel( m_xChartModel, uno::UNO_QUERY);
1089 0 : uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
1090 : DiagramHelper::tTemplateWithServiceName aTemplate =
1091 0 : DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
1092 0 : OUString aServiceName( aTemplate.second );
1093 :
1094 0 : bool bFound = false;
1095 :
1096 0 : ::std::vector< ChartTypeDialogController* >::iterator aIter = m_aChartTypeDialogControllerList.begin();
1097 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
1098 0 : for( sal_uInt16 nM=0; aIter != aEnd; ++aIter, ++nM )
1099 : {
1100 0 : if( (*aIter)->isSubType(aServiceName) )
1101 : {
1102 0 : bFound = true;
1103 :
1104 0 : m_aMainTypeList.SelectEntryPos( nM );
1105 0 : this->showAllControls( **aIter );
1106 0 : uno::Reference< beans::XPropertySet > xTemplateProps( aTemplate.first, uno::UNO_QUERY );
1107 0 : ChartTypeParameter aParameter = (*aIter)->getChartTypeParameterForService( aServiceName, xTemplateProps );
1108 0 : m_pCurrentMainType = this->getSelectedMainType();
1109 :
1110 : //set ThreeDLookScheme
1111 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( xDiagram );
1112 0 : if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
1113 0 : aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
1114 :
1115 0 : aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
1116 :
1117 0 : this->fillAllControls( aParameter );
1118 0 : if( m_pCurrentMainType )
1119 0 : m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
1120 0 : break;
1121 : }
1122 : }
1123 :
1124 0 : if( !bFound )
1125 : {
1126 0 : m_aSubTypeList.Hide();
1127 0 : m_pAxisTypeResourceGroup->showControls( false );
1128 0 : m_pDim3DLookResourceGroup->showControls( false );
1129 0 : m_pStackingResourceGroup->showControls( false, false );
1130 0 : m_pSplineResourceGroup->showControls( false );
1131 0 : m_pGeometryResourceGroup->showControls( false );
1132 0 : m_pSortByXValuesResourceGroup->showControls( false );
1133 0 : }
1134 : }
1135 :
1136 0 : sal_Bool ChartTypeTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ )
1137 : {
1138 : //commit changes to model
1139 0 : if( !m_bDoLiveUpdate && m_pCurrentMainType )
1140 : {
1141 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
1142 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
1143 0 : commitToModel( aParameter );
1144 : }
1145 :
1146 0 : return sal_True;//return false if this page should not be left
1147 : }
1148 :
1149 0 : uno::Reference< XChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() const
1150 : {
1151 0 : if( m_pCurrentMainType && m_xChartModel.is() )
1152 : {
1153 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
1154 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
1155 0 : uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
1156 0 : return m_pCurrentMainType->getCurrentTemplate( aParameter, xTemplateManager );
1157 : }
1158 0 : return 0;
1159 : }
1160 :
1161 : //.............................................................................
1162 : } //namespace chart
1163 : //.............................................................................
1164 :
1165 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|