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 : #include "tp_ChartType.hxx"
21 : #include "Strings.hrc"
22 : #include "ResId.hxx"
23 : #include "ChartModelHelper.hxx"
24 : #include "DiagramHelper.hxx"
25 : #include "res_BarGeometry.hxx"
26 : #include "ControllerLockGuard.hxx"
27 : #include "macros.hxx"
28 : #include "GL3DBarChartDialogController.hxx"
29 : #include <unonames.hxx>
30 :
31 : #include <svtools/controldims.hrc>
32 : #include <svtools/miscopt.hxx>
33 :
34 : #include <vcl/layout.hxx>
35 : #include <vcl/msgbox.hxx>
36 :
37 : namespace chart
38 : {
39 : using namespace ::com::sun::star;
40 : using namespace ::com::sun::star::chart2;
41 :
42 : #define POS_3DSCHEME_SIMPLE 0
43 : #define POS_3DSCHEME_REALISTIC 1
44 :
45 0 : class Dim3DLookResourceGroup : public ChangingResource
46 : {
47 : public:
48 : explicit Dim3DLookResourceGroup(VclBuilderContainer* pWindow);
49 :
50 : void showControls( bool bShow );
51 :
52 : void fillControls( const ChartTypeParameter& rParameter );
53 : void fillParameter( ChartTypeParameter& rParameter );
54 :
55 : private:
56 : DECL_LINK( Dim3DLookCheckHdl, void* );
57 : DECL_LINK( SelectSchemeHdl, void* );
58 :
59 : private:
60 : VclPtr<CheckBox> m_pCB_3DLook;
61 : VclPtr<ListBox> m_pLB_Scheme;
62 : };
63 :
64 0 : Dim3DLookResourceGroup::Dim3DLookResourceGroup(VclBuilderContainer* pWindow)
65 0 : : ChangingResource()
66 : {
67 0 : pWindow->get(m_pCB_3DLook, "3dlook");
68 0 : pWindow->get(m_pLB_Scheme, "3dscheme");
69 :
70 0 : m_pCB_3DLook->SetToggleHdl( LINK( this, Dim3DLookResourceGroup, Dim3DLookCheckHdl ) );
71 0 : m_pLB_Scheme->SetSelectHdl( LINK( this, Dim3DLookResourceGroup, SelectSchemeHdl ) );
72 0 : }
73 :
74 0 : void Dim3DLookResourceGroup::showControls( bool bShow )
75 : {
76 0 : m_pCB_3DLook->Show(bShow);
77 0 : m_pLB_Scheme->Show(bShow);
78 0 : }
79 :
80 0 : void Dim3DLookResourceGroup::fillControls( const ChartTypeParameter& rParameter )
81 : {
82 0 : m_pCB_3DLook->Check(rParameter.b3DLook);
83 0 : m_pLB_Scheme->Enable(rParameter.b3DLook);
84 :
85 0 : if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Simple )
86 0 : m_pLB_Scheme->SelectEntryPos(POS_3DSCHEME_SIMPLE);
87 0 : else if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Realistic )
88 0 : m_pLB_Scheme->SelectEntryPos(POS_3DSCHEME_REALISTIC);
89 : else
90 0 : m_pLB_Scheme->SetNoSelection();
91 0 : }
92 :
93 0 : void Dim3DLookResourceGroup::fillParameter( ChartTypeParameter& rParameter )
94 : {
95 0 : rParameter.b3DLook = m_pCB_3DLook->IsChecked();
96 0 : sal_uInt16 nPos = m_pLB_Scheme->GetSelectEntryPos();
97 0 : if( POS_3DSCHEME_SIMPLE == nPos )
98 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Simple;
99 0 : else if( POS_3DSCHEME_REALISTIC == nPos )
100 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Realistic;
101 : else
102 0 : rParameter.eThreeDLookScheme = ThreeDLookScheme_Unknown;
103 0 : }
104 :
105 0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, Dim3DLookCheckHdl)
106 : {
107 0 : if(m_pChangeListener)
108 0 : m_pChangeListener->stateChanged(this);
109 0 : return 0;
110 : }
111 :
112 0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, SelectSchemeHdl)
113 : {
114 0 : if(m_pChangeListener)
115 0 : m_pChangeListener->stateChanged(this);
116 0 : return 0;
117 : }
118 :
119 0 : class SortByXValuesResourceGroup : public ChangingResource
120 : {
121 : public:
122 : explicit SortByXValuesResourceGroup(VclBuilderContainer* pWindow);
123 :
124 : void showControls( bool bShow );
125 :
126 : void fillControls( const ChartTypeParameter& rParameter );
127 : void fillParameter( ChartTypeParameter& rParameter );
128 :
129 : private:
130 : DECL_LINK( SortByXValuesCheckHdl, void* );
131 :
132 : private:
133 : VclPtr<CheckBox> m_pCB_XValueSorting;
134 : };
135 :
136 0 : SortByXValuesResourceGroup::SortByXValuesResourceGroup(VclBuilderContainer* pWindow )
137 0 : : ChangingResource()
138 : {
139 0 : pWindow->get(m_pCB_XValueSorting, "sort");
140 0 : m_pCB_XValueSorting->SetToggleHdl( LINK( this, SortByXValuesResourceGroup, SortByXValuesCheckHdl ) );
141 0 : }
142 :
143 0 : void SortByXValuesResourceGroup::showControls( bool bShow )
144 : {
145 0 : m_pCB_XValueSorting->Show(bShow);
146 0 : }
147 :
148 0 : void SortByXValuesResourceGroup::fillControls( const ChartTypeParameter& rParameter )
149 : {
150 0 : m_pCB_XValueSorting->Check( rParameter.bSortByXValues );
151 0 : }
152 :
153 0 : void SortByXValuesResourceGroup::fillParameter( ChartTypeParameter& rParameter )
154 : {
155 0 : rParameter.bSortByXValues = m_pCB_XValueSorting->IsChecked();
156 0 : }
157 :
158 0 : IMPL_LINK_NOARG(SortByXValuesResourceGroup, SortByXValuesCheckHdl)
159 : {
160 0 : if(m_pChangeListener)
161 0 : m_pChangeListener->stateChanged(this);
162 0 : return 0;
163 : }
164 :
165 0 : class StackingResourceGroup : public ChangingResource
166 : {
167 : public:
168 : explicit StackingResourceGroup(VclBuilderContainer* pWindow);
169 :
170 : void showControls( bool bShow, bool bShowDeepStacking );
171 :
172 : void fillControls( const ChartTypeParameter& rParameter );
173 : void fillParameter( ChartTypeParameter& rParameter );
174 :
175 : private:
176 : DECL_LINK( StackingChangeHdl, RadioButton* );
177 : DECL_LINK( StackingEnableHdl, void* );
178 :
179 : private:
180 : VclPtr<CheckBox> m_pCB_Stacked;
181 : VclPtr<RadioButton> m_pRB_Stack_Y;
182 : VclPtr<RadioButton> m_pRB_Stack_Y_Percent;
183 : VclPtr<RadioButton> m_pRB_Stack_Z;
184 :
185 : bool m_bShowDeepStacking;
186 : };
187 :
188 0 : StackingResourceGroup::StackingResourceGroup(VclBuilderContainer* pWindow)
189 : : ChangingResource()
190 0 : , m_bShowDeepStacking(true)
191 : {
192 0 : pWindow->get(m_pCB_Stacked, "stack");
193 0 : pWindow->get(m_pRB_Stack_Y, "ontop");
194 0 : pWindow->get(m_pRB_Stack_Y_Percent, "percent");
195 0 : pWindow->get(m_pRB_Stack_Z, "deep");
196 :
197 0 : m_pCB_Stacked->SetToggleHdl( LINK( this, StackingResourceGroup, StackingEnableHdl ) );
198 0 : m_pRB_Stack_Y->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
199 0 : m_pRB_Stack_Y_Percent->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
200 0 : m_pRB_Stack_Z->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
201 0 : }
202 :
203 0 : void StackingResourceGroup::showControls( bool bShow, bool bShowDeepStacking )
204 : {
205 0 : m_bShowDeepStacking = bShowDeepStacking;
206 0 : m_pCB_Stacked->Show(bShow);
207 0 : m_pRB_Stack_Y->Show(bShow);
208 0 : m_pRB_Stack_Y_Percent->Show(bShow);
209 0 : m_pRB_Stack_Z->Show(bShow&&bShowDeepStacking);
210 0 : }
211 :
212 0 : void StackingResourceGroup::fillControls( const ChartTypeParameter& rParameter )
213 : {
214 0 : m_pCB_Stacked->Check( rParameter.eStackMode!=GlobalStackMode_NONE
215 0 : && rParameter.eStackMode!=GlobalStackMode_STACK_Z ); //todo remove this condition if z stacking radio button is really used
216 0 : switch( rParameter.eStackMode )
217 : {
218 : case GlobalStackMode_STACK_Y:
219 0 : m_pRB_Stack_Y->Check();
220 0 : break;
221 : case GlobalStackMode_STACK_Y_PERCENT:
222 0 : m_pRB_Stack_Y_Percent->Check();
223 0 : break;
224 : case GlobalStackMode_STACK_Z:
225 : //todo uncomment this condition if z stacking radio button is really used
226 : /*
227 : if( rParameter.b3DLook )
228 : m_pRB_Stack_Z->Check();
229 : else
230 : */
231 0 : m_pRB_Stack_Y->Check();
232 0 : break;
233 : default:
234 0 : m_pRB_Stack_Y->Check();
235 0 : break;
236 : }
237 : //dis/enabling
238 0 : m_pCB_Stacked->Enable( !rParameter.bXAxisWithValues );
239 0 : m_pRB_Stack_Y->Enable( m_pCB_Stacked->IsChecked() && !rParameter.bXAxisWithValues );
240 0 : m_pRB_Stack_Y_Percent->Enable( m_pCB_Stacked->IsChecked() && !rParameter.bXAxisWithValues );
241 0 : m_pRB_Stack_Z->Enable( m_pCB_Stacked->IsChecked() && rParameter.b3DLook );
242 0 : }
243 0 : void StackingResourceGroup::fillParameter( ChartTypeParameter& rParameter )
244 : {
245 0 : if(!m_pCB_Stacked->IsChecked())
246 0 : rParameter.eStackMode = GlobalStackMode_NONE;
247 0 : else if(m_pRB_Stack_Y->IsChecked())
248 0 : rParameter.eStackMode = GlobalStackMode_STACK_Y;
249 0 : else if(m_pRB_Stack_Y_Percent->IsChecked())
250 0 : rParameter.eStackMode = GlobalStackMode_STACK_Y_PERCENT;
251 0 : else if(m_pRB_Stack_Z->IsChecked())
252 0 : rParameter.eStackMode = GlobalStackMode_STACK_Z;
253 0 : }
254 0 : IMPL_LINK( StackingResourceGroup, StackingChangeHdl, RadioButton*, pRadio )
255 : {
256 : //for each radio click there are coming two change events
257 : //first uncheck of previous button -> ignore that call
258 : //the second call gives the check of the new button
259 0 : if( m_pChangeListener && pRadio && pRadio->IsChecked() )
260 0 : m_pChangeListener->stateChanged(this);
261 0 : return 0;
262 : }
263 0 : IMPL_LINK_NOARG(StackingResourceGroup, StackingEnableHdl)
264 : {
265 0 : if( m_pChangeListener )
266 0 : m_pChangeListener->stateChanged(this);
267 0 : return 0;
268 : }
269 :
270 0 : class GL3DResourceGroup : public ChangingResource
271 : {
272 : public:
273 : explicit GL3DResourceGroup( VclBuilderContainer* pWindow );
274 :
275 : void showControls( bool bShow );
276 : void fillControls( const ChartTypeParameter& rParam );
277 : void fillParameter( ChartTypeParameter& rParam );
278 :
279 : private:
280 : DECL_LINK( SettingChangedHdl, void* );
281 : private:
282 : VclPtr<CheckBox> m_pCB_RoundedEdge;
283 : };
284 :
285 0 : GL3DResourceGroup::GL3DResourceGroup( VclBuilderContainer* pWindow )
286 : {
287 0 : pWindow->get(m_pCB_RoundedEdge, "rounded-edge");
288 0 : m_pCB_RoundedEdge->SetToggleHdl( LINK(this, GL3DResourceGroup, SettingChangedHdl) );
289 0 : }
290 :
291 0 : void GL3DResourceGroup::showControls( bool bShow )
292 : {
293 0 : m_pCB_RoundedEdge->Show(bShow);
294 0 : }
295 :
296 0 : void GL3DResourceGroup::fillControls( const ChartTypeParameter& rParam )
297 : {
298 0 : m_pCB_RoundedEdge->Check(rParam.mbRoundedEdge);
299 0 : }
300 :
301 0 : void GL3DResourceGroup::fillParameter( ChartTypeParameter& rParam )
302 : {
303 0 : rParam.mbRoundedEdge = m_pCB_RoundedEdge->IsChecked();
304 0 : }
305 :
306 0 : IMPL_LINK_NOARG( GL3DResourceGroup, SettingChangedHdl )
307 : {
308 0 : if (m_pChangeListener)
309 0 : m_pChangeListener->stateChanged(this);
310 0 : return 0;
311 : }
312 :
313 : class SplinePropertiesDialog : public ModalDialog
314 : {
315 : public:
316 : explicit SplinePropertiesDialog( vcl::Window* pParent );
317 0 : virtual ~SplinePropertiesDialog() { disposeOnce(); }
318 : virtual void dispose() SAL_OVERRIDE;
319 :
320 : void fillControls( const ChartTypeParameter& rParameter );
321 : void fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines );
322 :
323 : virtual void StateChanged( StateChangedType nType ) SAL_OVERRIDE;
324 :
325 : private:
326 : DECL_LINK( SplineTypeListBoxHdl, void* );
327 :
328 : private:
329 : VclPtr<ListBox> m_pLB_Spline_Type;
330 :
331 : VclPtr<NumericField> m_pMF_SplineResolution;
332 : VclPtr<FixedText> m_pFT_SplineOrder;
333 : VclPtr<NumericField> m_pMF_SplineOrder;
334 : };
335 :
336 : const sal_uInt16 CUBIC_SPLINE_POS = 0;
337 : const sal_uInt16 B_SPLINE_POS = 1;
338 :
339 0 : SplinePropertiesDialog::SplinePropertiesDialog( vcl::Window* pParent )
340 0 : : ModalDialog( pParent, "SmoothLinesDialog", "modules/schart/ui/smoothlinesdlg.ui")
341 : {
342 0 : get(m_pLB_Spline_Type, "SplineTypeComboBox");
343 0 : get(m_pMF_SplineResolution, "ResolutionSpinbutton");
344 0 : get(m_pFT_SplineOrder, "PolynomialsLabel");
345 0 : get(m_pMF_SplineOrder, "PolynomialsSpinButton");
346 :
347 0 : this->SetText( SCH_RESSTR( STR_DLG_SMOOTH_LINE_PROPERTIES ) );
348 :
349 0 : m_pLB_Spline_Type->SetSelectHdl( LINK (this, SplinePropertiesDialog, SplineTypeListBoxHdl ) );
350 0 : }
351 :
352 0 : void SplinePropertiesDialog::dispose()
353 : {
354 0 : m_pLB_Spline_Type.clear();
355 0 : m_pMF_SplineResolution.clear();
356 0 : m_pFT_SplineOrder.clear();
357 0 : m_pMF_SplineOrder.clear();
358 0 : ModalDialog::dispose();
359 0 : }
360 :
361 0 : void SplinePropertiesDialog::StateChanged( StateChangedType nType )
362 : {
363 0 : Dialog::StateChanged( nType );
364 0 : }
365 :
366 0 : void SplinePropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
367 : {
368 0 : switch(rParameter.eCurveStyle)
369 : {
370 : case CurveStyle_CUBIC_SPLINES:
371 0 : m_pLB_Spline_Type->SelectEntryPos(CUBIC_SPLINE_POS);
372 0 : break;
373 : case CurveStyle_B_SPLINES:
374 0 : m_pLB_Spline_Type->SelectEntryPos(B_SPLINE_POS);
375 0 : break;
376 : default:
377 0 : m_pLB_Spline_Type->SelectEntryPos(CUBIC_SPLINE_POS);
378 0 : break;
379 : }
380 0 : m_pMF_SplineOrder->SetValue( rParameter.nSplineOrder );
381 0 : m_pMF_SplineResolution->SetValue( rParameter.nCurveResolution );
382 :
383 : //dis/enabling
384 0 : m_pFT_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
385 0 : m_pMF_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
386 0 : }
387 0 : void SplinePropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines )
388 : {
389 0 : if(!bSmoothLines)
390 0 : rParameter.eCurveStyle=CurveStyle_LINES;
391 0 : else if(CUBIC_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos())
392 0 : rParameter.eCurveStyle=CurveStyle_CUBIC_SPLINES;
393 0 : else if(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos())
394 0 : rParameter.eCurveStyle=CurveStyle_B_SPLINES;
395 :
396 0 : rParameter.nCurveResolution = static_cast< sal_Int32 >( m_pMF_SplineResolution->GetValue());
397 0 : rParameter.nSplineOrder = static_cast< sal_Int32 >( m_pMF_SplineOrder->GetValue());
398 0 : }
399 0 : IMPL_LINK_NOARG(SplinePropertiesDialog, SplineTypeListBoxHdl)
400 : {
401 0 : m_pFT_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
402 0 : m_pMF_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
403 0 : return 0;
404 : }
405 :
406 : class SteppedPropertiesDialog : public ModalDialog
407 : {
408 : public:
409 : explicit SteppedPropertiesDialog( vcl::Window* pParent );
410 0 : virtual ~SteppedPropertiesDialog() { disposeOnce(); }
411 : virtual void dispose() SAL_OVERRIDE;
412 :
413 : void fillControls( const ChartTypeParameter& rParameter );
414 : void fillParameter( ChartTypeParameter& rParameter, bool bSteppedLines );
415 :
416 : virtual void StateChanged( StateChangedType nType ) SAL_OVERRIDE;
417 :
418 : private:
419 :
420 : private:
421 : VclPtr<RadioButton> m_pRB_Start;
422 : VclPtr<RadioButton> m_pRB_End;
423 : VclPtr<RadioButton> m_pRB_CenterX;
424 : VclPtr<RadioButton> m_pRB_CenterY;
425 : };
426 :
427 0 : SteppedPropertiesDialog::SteppedPropertiesDialog( vcl::Window* pParent )
428 0 : : ModalDialog( pParent, "SteppedLinesDialog", "modules/schart/ui/steppedlinesdlg.ui")
429 : {
430 0 : get(m_pRB_Start, "step_start_rb");
431 0 : get(m_pRB_End, "step_end_rb");
432 0 : get(m_pRB_CenterX, "step_center_x_rb");
433 0 : get(m_pRB_CenterY, "step_center_y_rb");
434 :
435 0 : SetText(SCH_RESSTR(STR_DLG_STEPPED_LINE_PROPERTIES));
436 0 : }
437 :
438 0 : void SteppedPropertiesDialog::dispose()
439 : {
440 0 : m_pRB_Start.clear();
441 0 : m_pRB_End.clear();
442 0 : m_pRB_CenterX.clear();
443 0 : m_pRB_CenterY.clear();
444 0 : ModalDialog::dispose();
445 0 : }
446 :
447 0 : void SteppedPropertiesDialog::StateChanged( StateChangedType nType )
448 : {
449 0 : Dialog::StateChanged( nType );
450 0 : }
451 :
452 0 : void SteppedPropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
453 : {
454 0 : switch(rParameter.eCurveStyle)
455 : {
456 : case CurveStyle_STEP_END:
457 0 : m_pRB_End->Check();
458 0 : break;
459 : case CurveStyle_STEP_CENTER_X:
460 0 : m_pRB_CenterX->Check();
461 0 : break;
462 : case CurveStyle_STEP_CENTER_Y:
463 0 : m_pRB_CenterY->Check();
464 0 : break;
465 : default: // includes CurveStyle_STEP_START
466 0 : m_pRB_Start->Check();
467 0 : break;
468 : }
469 0 : }
470 0 : void SteppedPropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSteppedLines )
471 : {
472 0 : if (!bSteppedLines)
473 0 : rParameter.eCurveStyle=CurveStyle_LINES;
474 0 : else if(m_pRB_CenterY->IsChecked())
475 0 : rParameter.eCurveStyle=CurveStyle_STEP_CENTER_Y;
476 0 : else if(m_pRB_Start->IsChecked())
477 0 : rParameter.eCurveStyle=CurveStyle_STEP_START;
478 0 : else if(m_pRB_End->IsChecked())
479 0 : rParameter.eCurveStyle=CurveStyle_STEP_END;
480 0 : else if(m_pRB_CenterX->IsChecked())
481 0 : rParameter.eCurveStyle=CurveStyle_STEP_CENTER_X;
482 0 : }
483 :
484 : #define POS_LINETYPE_STRAIGHT 0
485 : #define POS_LINETYPE_SMOOTH 1
486 : #define POS_LINETYPE_STEPPED 2
487 :
488 0 : class SplineResourceGroup : public ChangingResource
489 : {
490 : public:
491 : explicit SplineResourceGroup(VclBuilderContainer* pWindow);
492 :
493 : void showControls( bool bShow );
494 :
495 : void fillControls( const ChartTypeParameter& rParameter );
496 : void fillParameter( ChartTypeParameter& rParameter );
497 :
498 : private:
499 : DECL_LINK( LineTypeChangeHdl, void* );
500 : DECL_LINK( SplineDetailsDialogHdl, void* );
501 : DECL_LINK( SteppedDetailsDialogHdl, void* );
502 : SplinePropertiesDialog& getSplinePropertiesDialog();
503 : SteppedPropertiesDialog& getSteppedPropertiesDialog();
504 :
505 : private:
506 : VclPtr<FixedText> m_pFT_LineType;
507 : VclPtr<ListBox> m_pLB_LineType;
508 : VclPtr<PushButton> m_pPB_DetailsDialog;
509 : VclPtr< SplinePropertiesDialog > m_pSplinePropertiesDialog;
510 : VclPtr< SteppedPropertiesDialog > m_pSteppedPropertiesDialog;
511 : };
512 :
513 0 : SplineResourceGroup::SplineResourceGroup(VclBuilderContainer* pWindow)
514 0 : : ChangingResource()
515 : {
516 0 : pWindow->get(m_pFT_LineType, "linetypeft");
517 0 : pWindow->get(m_pLB_LineType, "linetype");
518 0 : pWindow->get(m_pPB_DetailsDialog, "properties");
519 :
520 0 : m_pLB_LineType->SetSelectHdl( LINK( this, SplineResourceGroup, LineTypeChangeHdl ) );
521 0 : }
522 :
523 0 : SplinePropertiesDialog& SplineResourceGroup::getSplinePropertiesDialog()
524 : {
525 0 : if( !m_pSplinePropertiesDialog.get() )
526 0 : m_pSplinePropertiesDialog.reset( VclPtr<SplinePropertiesDialog>::Create( m_pPB_DetailsDialog->GetParentDialog() ) );
527 0 : return *m_pSplinePropertiesDialog;
528 : }
529 :
530 0 : SteppedPropertiesDialog& SplineResourceGroup::getSteppedPropertiesDialog()
531 : {
532 0 : if( !m_pSteppedPropertiesDialog.get() )
533 : {
534 0 : m_pSteppedPropertiesDialog.reset( VclPtr<SteppedPropertiesDialog>::Create( m_pPB_DetailsDialog->GetParentDialog() ) );
535 : }
536 0 : return *m_pSteppedPropertiesDialog;
537 : }
538 :
539 0 : void SplineResourceGroup::showControls( bool bShow )
540 : {
541 0 : m_pFT_LineType->Show(bShow);
542 0 : m_pLB_LineType->Show(bShow);
543 0 : m_pPB_DetailsDialog->Show(bShow);
544 0 : }
545 :
546 0 : void SplineResourceGroup::fillControls( const ChartTypeParameter& rParameter )
547 : {
548 0 : switch (rParameter.eCurveStyle)
549 : {
550 : case CurveStyle_LINES:
551 0 : m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STRAIGHT);
552 0 : m_pPB_DetailsDialog->Enable(false);
553 0 : break;
554 : case CurveStyle_CUBIC_SPLINES:
555 : case CurveStyle_B_SPLINES:
556 0 : m_pLB_LineType->SelectEntryPos(POS_LINETYPE_SMOOTH);
557 0 : m_pPB_DetailsDialog->Enable(true);
558 0 : m_pPB_DetailsDialog->SetClickHdl( LINK( this, SplineResourceGroup, SplineDetailsDialogHdl ) );
559 0 : m_pPB_DetailsDialog->SetQuickHelpText( SCH_RESSTR(STR_DLG_SMOOTH_LINE_PROPERTIES) );
560 0 : getSplinePropertiesDialog().fillControls( rParameter );
561 0 : break;
562 : case CurveStyle_STEP_START:
563 : case CurveStyle_STEP_END:
564 : case CurveStyle_STEP_CENTER_X:
565 : case CurveStyle_STEP_CENTER_Y:
566 0 : m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STEPPED);
567 0 : m_pPB_DetailsDialog->Enable(true);
568 0 : m_pPB_DetailsDialog->SetClickHdl( LINK( this, SplineResourceGroup, SteppedDetailsDialogHdl ) );
569 0 : m_pPB_DetailsDialog->SetQuickHelpText( SCH_RESSTR(STR_DLG_STEPPED_LINE_PROPERTIES) );
570 0 : getSteppedPropertiesDialog().fillControls( rParameter );
571 0 : break;
572 : default:
573 0 : m_pLB_LineType->SetNoSelection();
574 0 : m_pPB_DetailsDialog->Enable(false);
575 : }
576 0 : }
577 0 : void SplineResourceGroup::fillParameter( ChartTypeParameter& rParameter )
578 : {
579 0 : switch (m_pLB_LineType->GetSelectEntryPos())
580 : {
581 : case POS_LINETYPE_SMOOTH:
582 0 : getSplinePropertiesDialog().fillParameter( rParameter, true );
583 0 : break;
584 : case POS_LINETYPE_STEPPED:
585 0 : getSteppedPropertiesDialog().fillParameter( rParameter, true );
586 0 : break;
587 : default: // includes POS_LINETYPE_STRAIGHT
588 0 : rParameter.eCurveStyle = CurveStyle_LINES;
589 0 : break;
590 : }
591 0 : }
592 0 : IMPL_LINK_NOARG(SplineResourceGroup, LineTypeChangeHdl)
593 : {
594 0 : if( m_pChangeListener )
595 0 : m_pChangeListener->stateChanged(this);
596 0 : return 0;
597 : }
598 0 : IMPL_LINK_NOARG(SplineResourceGroup, SplineDetailsDialogHdl)
599 : {
600 :
601 0 : ChartTypeParameter aOldParameter;
602 0 : getSplinePropertiesDialog().fillParameter( aOldParameter, POS_LINETYPE_SMOOTH == m_pLB_LineType->GetSelectEntryPos() );
603 :
604 0 : sal_uInt16 iOldLineTypePos = m_pLB_LineType->GetSelectEntryPos();
605 0 : m_pLB_LineType->SelectEntryPos(POS_LINETYPE_SMOOTH);
606 0 : if( RET_OK == getSplinePropertiesDialog().Execute() )
607 : {
608 0 : if( m_pChangeListener )
609 0 : m_pChangeListener->stateChanged(this);
610 : }
611 : else
612 : {
613 : //restore old state:
614 0 : m_pLB_LineType->SelectEntryPos( iOldLineTypePos );
615 0 : getSplinePropertiesDialog().fillControls( aOldParameter );
616 : }
617 0 : return 0;
618 : }
619 0 : IMPL_LINK_NOARG(SplineResourceGroup, SteppedDetailsDialogHdl)
620 : {
621 :
622 0 : ChartTypeParameter aOldParameter;
623 0 : getSteppedPropertiesDialog().fillParameter( aOldParameter, POS_LINETYPE_STEPPED == m_pLB_LineType->GetSelectEntryPos() );
624 :
625 0 : sal_uInt16 iOldLineTypePos = m_pLB_LineType->GetSelectEntryPos();
626 0 : m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STEPPED);
627 0 : if( RET_OK == getSteppedPropertiesDialog().Execute() )
628 : {
629 0 : if( m_pChangeListener )
630 0 : m_pChangeListener->stateChanged(this);
631 : }
632 : else
633 : {
634 : //restore old state:
635 0 : m_pLB_LineType->SelectEntryPos( iOldLineTypePos );
636 0 : getSteppedPropertiesDialog().fillControls( aOldParameter );
637 : }
638 0 : return 0;
639 : }
640 :
641 0 : class GeometryResourceGroup : public ChangingResource
642 : {
643 : public:
644 : explicit GeometryResourceGroup(VclBuilderContainer* pWindow);
645 :
646 : void showControls( bool bShow );
647 :
648 : void fillControls( const ChartTypeParameter& rParameter );
649 : void fillParameter( ChartTypeParameter& rParameter );
650 :
651 : private:
652 : DECL_LINK( GeometryChangeHdl, void* );
653 :
654 : private:
655 : BarGeometryResources m_aGeometryResources;
656 : };
657 :
658 0 : GeometryResourceGroup::GeometryResourceGroup(VclBuilderContainer* pWindow )
659 : : ChangingResource()
660 0 : , m_aGeometryResources( pWindow )
661 : {
662 0 : m_aGeometryResources.SetSelectHdl( LINK( this, GeometryResourceGroup, GeometryChangeHdl ) );
663 0 : }
664 :
665 0 : void GeometryResourceGroup::showControls( bool bShow )
666 : {
667 0 : m_aGeometryResources.Show(bShow);
668 0 : }
669 :
670 0 : void GeometryResourceGroup::fillControls( const ChartTypeParameter& rParameter )
671 : {
672 0 : sal_uInt16 nGeometry3D = static_cast<sal_uInt16>(rParameter.nGeometry3D);
673 0 : m_aGeometryResources.SelectEntryPos(nGeometry3D);
674 0 : m_aGeometryResources.Enable(rParameter.b3DLook);
675 0 : }
676 :
677 0 : void GeometryResourceGroup::fillParameter( ChartTypeParameter& rParameter )
678 : {
679 0 : rParameter.nGeometry3D = 1;
680 0 : if( m_aGeometryResources.GetSelectEntryCount() )
681 0 : rParameter.nGeometry3D = m_aGeometryResources.GetSelectEntryPos();
682 0 : }
683 :
684 0 : IMPL_LINK_NOARG(GeometryResourceGroup, GeometryChangeHdl)
685 : {
686 0 : if( m_pChangeListener )
687 0 : m_pChangeListener->stateChanged(this);
688 0 : return 0;
689 : }
690 :
691 0 : ChartTypeTabPage::ChartTypeTabPage(vcl::Window* pParent
692 : , const uno::Reference< XChartDocument >& xChartModel
693 : , const uno::Reference< uno::XComponentContext >& xContext
694 : , bool bDoLiveUpdate, bool bShowDescription)
695 : : OWizardPage(pParent, "tp_ChartType",
696 : "modules/schart/ui/tp_ChartType.ui")
697 0 : , m_pDim3DLookResourceGroup( new Dim3DLookResourceGroup(this) )
698 0 : , m_pStackingResourceGroup( new StackingResourceGroup(this) )
699 0 : , m_pSplineResourceGroup( new SplineResourceGroup(this) )
700 0 : , m_pGeometryResourceGroup( new GeometryResourceGroup( this ) )
701 0 : , m_pSortByXValuesResourceGroup( new SortByXValuesResourceGroup( this ) )
702 0 : , m_pGL3DResourceGroup(new GL3DResourceGroup(this))
703 : , m_xChartModel( xChartModel )
704 : , m_xCC( xContext )
705 : , m_aChartTypeDialogControllerList(0)
706 : , m_pCurrentMainType(0)
707 : , m_nChangingCalls(0)
708 : , m_bDoLiveUpdate(bDoLiveUpdate)
709 0 : , m_aTimerTriggeredControllerLock( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) )
710 : {
711 0 : get(m_pFT_ChooseType, "FT_CAPTION_FOR_WIZARD");
712 0 : get(m_pMainTypeList, "charttype");
713 0 : get(m_pSubTypeList, "subtype");
714 0 : Size aSize(m_pSubTypeList->LogicToPixel(Size(150, 50), MAP_APPFONT));
715 0 : m_pSubTypeList->set_width_request(aSize.Width());
716 0 : m_pSubTypeList->set_height_request(aSize.Height());
717 :
718 0 : if( bShowDescription )
719 : {
720 0 : m_pFT_ChooseType->Show();
721 : }
722 : else
723 : {
724 0 : m_pFT_ChooseType->SetStyle(m_pFT_ChooseType->GetStyle() | WB_NOLABEL);
725 : }
726 :
727 0 : this->SetText( SCH_RESSTR(STR_PAGE_CHARTTYPE) );
728 :
729 0 : m_pMainTypeList->SetStyle(m_pMainTypeList->GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_FLATVALUESET | WB_3DLOOK );
730 0 : m_pMainTypeList->SetSelectHdl( LINK( this, ChartTypeTabPage, SelectMainTypeHdl ) );
731 0 : m_pSubTypeList->SetSelectHdl( LINK( this, ChartTypeTabPage, SelectSubTypeHdl ) );
732 :
733 0 : m_pSubTypeList->SetStyle(m_pSubTypeList->GetStyle() |
734 0 : WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK );
735 0 : m_pSubTypeList->SetColCount(4);
736 0 : m_pSubTypeList->SetLineCount(1);
737 :
738 0 : bool bEnableComplexChartTypes = true;
739 0 : uno::Reference< beans::XPropertySet > xProps( m_xChartModel, uno::UNO_QUERY );
740 0 : if ( xProps.is() )
741 : {
742 : try
743 : {
744 0 : xProps->getPropertyValue("EnableComplexChartTypes") >>= bEnableComplexChartTypes;
745 : }
746 0 : catch( const uno::Exception& e )
747 : {
748 : ASSERT_EXCEPTION( e );
749 : }
750 : }
751 :
752 0 : m_aChartTypeDialogControllerList.push_back(new ColumnChartDialogController() );
753 0 : m_aChartTypeDialogControllerList.push_back(new BarChartDialogController() );
754 0 : m_aChartTypeDialogControllerList.push_back(new PieChartDialogController() );
755 0 : m_aChartTypeDialogControllerList.push_back(new AreaChartDialogController() );
756 0 : m_aChartTypeDialogControllerList.push_back(new LineChartDialogController() );
757 0 : if (bEnableComplexChartTypes)
758 : {
759 0 : m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
760 0 : m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
761 : }
762 0 : m_aChartTypeDialogControllerList.push_back(new NetChartDialogController() );
763 0 : if (bEnableComplexChartTypes)
764 : {
765 0 : m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
766 : }
767 0 : m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
768 : #if ENABLE_GL3D_BARCHART
769 0 : SvtMiscOptions aOpts;
770 0 : if ( aOpts.IsExperimentalMode() )
771 0 : m_aChartTypeDialogControllerList.push_back(new GL3DBarChartDialogController());
772 : #endif
773 :
774 0 : ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
775 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
776 0 : for( ; aIter != aEnd; ++aIter )
777 : {
778 0 : m_pMainTypeList->InsertEntry( (*aIter)->getName(), (*aIter)->getImage() );
779 0 : (*aIter)->setChangeListener( this );
780 : }
781 :
782 0 : m_pDim3DLookResourceGroup->setChangeListener( this );
783 0 : m_pStackingResourceGroup->setChangeListener( this );
784 0 : m_pSplineResourceGroup->setChangeListener( this );
785 0 : m_pGeometryResourceGroup->setChangeListener( this );
786 0 : m_pSortByXValuesResourceGroup->setChangeListener( this );
787 0 : m_pGL3DResourceGroup->setChangeListener(this);
788 0 : }
789 :
790 0 : ChartTypeTabPage::~ChartTypeTabPage()
791 : {
792 0 : disposeOnce();
793 0 : }
794 :
795 0 : void ChartTypeTabPage::dispose()
796 : {
797 : //delete all dialog controller
798 0 : ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
799 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
800 0 : for( ; aIter != aEnd; ++aIter )
801 : {
802 0 : delete *aIter;
803 : }
804 0 : m_aChartTypeDialogControllerList.clear();
805 :
806 : //delete all resource helper
807 0 : delete m_pDim3DLookResourceGroup;
808 0 : m_pDim3DLookResourceGroup = NULL;
809 0 : delete m_pStackingResourceGroup;
810 0 : m_pStackingResourceGroup = NULL;
811 0 : delete m_pSplineResourceGroup;
812 0 : m_pSplineResourceGroup = NULL;
813 0 : delete m_pGeometryResourceGroup;
814 0 : m_pGeometryResourceGroup = NULL;
815 0 : delete m_pSortByXValuesResourceGroup;
816 0 : m_pSortByXValuesResourceGroup = NULL;
817 0 : delete m_pGL3DResourceGroup;
818 0 : m_pGL3DResourceGroup = NULL;
819 0 : m_pFT_ChooseType.clear();
820 0 : m_pMainTypeList.clear();
821 0 : m_pSubTypeList.clear();
822 0 : svt::OWizardPage::dispose();
823 0 : }
824 :
825 0 : ChartTypeParameter ChartTypeTabPage::getCurrentParamter() const
826 : {
827 0 : ChartTypeParameter aParameter;
828 0 : aParameter.nSubTypeIndex = static_cast<sal_Int32>( m_pSubTypeList->GetSelectItemId() );
829 0 : m_pDim3DLookResourceGroup->fillParameter( aParameter );
830 0 : m_pStackingResourceGroup->fillParameter( aParameter );
831 0 : m_pSplineResourceGroup->fillParameter( aParameter );
832 0 : m_pGeometryResourceGroup->fillParameter( aParameter );
833 0 : m_pSortByXValuesResourceGroup->fillParameter( aParameter );
834 0 : m_pGL3DResourceGroup->fillParameter(aParameter);
835 0 : return aParameter;
836 : }
837 0 : void ChartTypeTabPage::commitToModel( const ChartTypeParameter& rParameter )
838 : {
839 0 : if( !m_pCurrentMainType )
840 0 : return;
841 :
842 0 : m_aTimerTriggeredControllerLock.startTimer();
843 0 : ControllerLockGuardUNO aLockedControllers( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) );
844 0 : m_pCurrentMainType->commitToModel( rParameter, m_xChartModel );
845 : }
846 0 : void ChartTypeTabPage::stateChanged( ChangingResource* /*pResource*/ )
847 : {
848 0 : if(m_nChangingCalls)
849 0 : return;
850 0 : m_nChangingCalls++;
851 :
852 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
853 0 : if( m_pCurrentMainType )
854 : {
855 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
856 0 : m_pCurrentMainType->adjustSubTypeAndEnableControls( aParameter );
857 : }
858 0 : if( m_bDoLiveUpdate )
859 0 : commitToModel( aParameter );
860 :
861 : //detect the new ThreeDLookScheme
862 0 : uno::Reference<XDiagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel);
863 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram);
864 : try
865 : {
866 0 : uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
867 0 : xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
868 : }
869 0 : catch ( const uno::Exception& ex )
870 : {
871 : ASSERT_EXCEPTION(ex);
872 : }
873 : //the controls have to be enabled/disabled accordingly
874 0 : this->fillAllControls( aParameter );
875 :
876 0 : m_nChangingCalls--;
877 : }
878 0 : ChartTypeDialogController* ChartTypeTabPage::getSelectedMainType()
879 : {
880 0 : ChartTypeDialogController* pTypeController = 0;
881 : ::std::vector< ChartTypeDialogController* >::size_type nM = static_cast< ::std::vector< ChartTypeDialogController* >::size_type >(
882 0 : m_pMainTypeList->GetSelectEntryPos() );
883 0 : if( nM<m_aChartTypeDialogControllerList.size() )
884 0 : pTypeController = m_aChartTypeDialogControllerList[nM];
885 0 : return pTypeController;
886 : }
887 0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl)
888 : {
889 0 : if( m_pCurrentMainType )
890 : {
891 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
892 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
893 0 : this->fillAllControls( aParameter, false );
894 0 : if( m_bDoLiveUpdate )
895 0 : commitToModel( aParameter );
896 : }
897 0 : return 0;
898 : }
899 :
900 0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl)
901 : {
902 0 : selectMainType();
903 0 : return 0;
904 : }
905 :
906 0 : void ChartTypeTabPage::selectMainType()
907 : {
908 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
909 :
910 0 : if( m_pCurrentMainType )
911 : {
912 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
913 0 : m_pCurrentMainType->hideExtraControls();
914 : }
915 :
916 0 : m_pCurrentMainType = this->getSelectedMainType();
917 0 : if( m_pCurrentMainType )
918 : {
919 0 : this->showAllControls(*m_pCurrentMainType);
920 :
921 0 : m_pCurrentMainType->adjustParameterToMainType( aParameter );
922 0 : if( m_bDoLiveUpdate )
923 0 : commitToModel( aParameter );
924 : //detect the new ThreeDLookScheme
925 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
926 0 : if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
927 0 : aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
928 :
929 0 : uno::Reference<XDiagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel);
930 : try
931 : {
932 0 : uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
933 0 : xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
934 : }
935 0 : catch ( const uno::Exception& ex )
936 : {
937 : ASSERT_EXCEPTION(ex);
938 : }
939 :
940 0 : this->fillAllControls( aParameter );
941 0 : uno::Reference< beans::XPropertySet > xTemplateProps( this->getCurrentTemplate(), uno::UNO_QUERY );
942 0 : m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
943 0 : }
944 0 : }
945 :
946 0 : void ChartTypeTabPage::showAllControls( ChartTypeDialogController& rTypeController )
947 : {
948 0 : m_pMainTypeList->Show();
949 0 : m_pSubTypeList->Show();
950 :
951 0 : bool bShow = rTypeController.shouldShow_3DLookControl();
952 0 : m_pDim3DLookResourceGroup->showControls( bShow );
953 0 : bShow = rTypeController.shouldShow_StackingControl();
954 0 : m_pStackingResourceGroup->showControls( bShow, rTypeController.shouldShow_DeepStackingControl() );
955 0 : bShow = rTypeController.shouldShow_SplineControl();
956 0 : m_pSplineResourceGroup->showControls( bShow );
957 0 : bShow = rTypeController.shouldShow_GeometryControl();
958 0 : m_pGeometryResourceGroup->showControls( bShow );
959 0 : bShow = rTypeController.shouldShow_SortByXValuesResourceGroup();
960 0 : m_pSortByXValuesResourceGroup->showControls( bShow );
961 0 : bShow = rTypeController.shouldShow_GL3DResourceGroup();
962 0 : m_pGL3DResourceGroup->showControls(bShow);
963 0 : rTypeController.showExtraControls(this);
964 0 : }
965 :
966 0 : void ChartTypeTabPage::fillAllControls( const ChartTypeParameter& rParameter, bool bAlsoResetSubTypeList )
967 : {
968 0 : m_nChangingCalls++;
969 0 : if( m_pCurrentMainType && bAlsoResetSubTypeList )
970 : {
971 0 : m_pCurrentMainType->fillSubTypeList(*m_pSubTypeList, rParameter);
972 : }
973 0 : m_pSubTypeList->SelectItem( static_cast<sal_uInt16>( rParameter.nSubTypeIndex) );
974 0 : m_pDim3DLookResourceGroup->fillControls( rParameter );
975 0 : m_pStackingResourceGroup->fillControls( rParameter );
976 0 : m_pSplineResourceGroup->fillControls( rParameter );
977 0 : m_pGeometryResourceGroup->fillControls( rParameter );
978 0 : m_pSortByXValuesResourceGroup->fillControls( rParameter );
979 0 : m_pGL3DResourceGroup->fillControls(rParameter);
980 0 : m_nChangingCalls--;
981 0 : }
982 :
983 0 : void ChartTypeTabPage::initializePage()
984 : {
985 0 : if( !m_xChartModel.is() )
986 0 : return;
987 0 : uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
988 0 : uno::Reference< frame::XModel > xModel( m_xChartModel, uno::UNO_QUERY);
989 0 : uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
990 : DiagramHelper::tTemplateWithServiceName aTemplate =
991 0 : DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
992 0 : OUString aServiceName( aTemplate.second );
993 :
994 0 : bool bFound = false;
995 :
996 0 : ::std::vector< ChartTypeDialogController* >::iterator aIter = m_aChartTypeDialogControllerList.begin();
997 0 : const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
998 0 : for( sal_uInt16 nM=0; aIter != aEnd; ++aIter, ++nM )
999 : {
1000 0 : if( (*aIter)->isSubType(aServiceName) )
1001 : {
1002 0 : bFound = true;
1003 :
1004 0 : m_pMainTypeList->SelectEntryPos( nM );
1005 0 : this->showAllControls( **aIter );
1006 0 : uno::Reference< beans::XPropertySet > xTemplateProps( aTemplate.first, uno::UNO_QUERY );
1007 0 : ChartTypeParameter aParameter = (*aIter)->getChartTypeParameterForService( aServiceName, xTemplateProps );
1008 0 : m_pCurrentMainType = this->getSelectedMainType();
1009 :
1010 : //set ThreeDLookScheme
1011 0 : aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( xDiagram );
1012 0 : if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
1013 0 : aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
1014 :
1015 : try
1016 : {
1017 0 : uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
1018 0 : xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
1019 : }
1020 0 : catch (const uno::Exception& ex)
1021 : {
1022 : ASSERT_EXCEPTION(ex);
1023 : }
1024 :
1025 0 : this->fillAllControls( aParameter );
1026 0 : if( m_pCurrentMainType )
1027 0 : m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
1028 0 : break;
1029 : }
1030 : }
1031 :
1032 0 : if( !bFound )
1033 : {
1034 0 : m_pSubTypeList->Hide();
1035 0 : m_pDim3DLookResourceGroup->showControls( false );
1036 0 : m_pStackingResourceGroup->showControls( false, false );
1037 0 : m_pSplineResourceGroup->showControls( false );
1038 0 : m_pGeometryResourceGroup->showControls( false );
1039 0 : m_pSortByXValuesResourceGroup->showControls( false );
1040 0 : m_pGL3DResourceGroup->showControls(false);
1041 0 : }
1042 : }
1043 :
1044 0 : bool ChartTypeTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ )
1045 : {
1046 : //commit changes to model
1047 0 : if( !m_bDoLiveUpdate && m_pCurrentMainType )
1048 : {
1049 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
1050 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
1051 0 : commitToModel( aParameter );
1052 : }
1053 :
1054 0 : return true; // return false if this page should not be left
1055 : }
1056 :
1057 0 : uno::Reference< XChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() const
1058 : {
1059 0 : if( m_pCurrentMainType && m_xChartModel.is() )
1060 : {
1061 0 : ChartTypeParameter aParameter( this->getCurrentParamter() );
1062 0 : m_pCurrentMainType->adjustParameterToSubType( aParameter );
1063 0 : uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
1064 0 : return m_pCurrentMainType->getCurrentTemplate( aParameter, xTemplateManager );
1065 : }
1066 0 : return 0;
1067 : }
1068 :
1069 57 : } //namespace chart
1070 :
1071 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|