1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: tp_3D_SceneAppearance.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_chart2.hxx"
34 #include "tp_3D_SceneAppearance.hxx"
35 #include "tp_3D_SceneAppearance.hrc"
37 #include "Strings.hrc"
38 #include "NoWarningThisInCTOR.hxx"
39 #include "ChartModelHelper.hxx"
40 #include "ThreeDHelper.hxx"
42 #include <rtl/math.hxx>
43 #include <com/sun/star/beans/XPropertySet.hpp>
45 using namespace ::com::sun::star
;
50 struct lcl_ModelProperties
52 drawing::ShadeMode m_aShadeMode
;
53 sal_Int32 m_nRoundedEdges
;
54 sal_Int32 m_nObjectLines
;
55 ::chart::ThreeDLookScheme m_eScheme
;
57 lcl_ModelProperties() :
60 m_eScheme(::chart::ThreeDLookScheme_Unknown
)
64 lcl_ModelProperties
lcl_getPropertiesFromModel( uno::Reference
< frame::XModel
> & xModel
)
66 lcl_ModelProperties aProps
;
69 uno::Reference
< chart2::XDiagram
> xDiagram( ::chart::ChartModelHelper::findDiagram( xModel
) );
70 uno::Reference
< beans::XPropertySet
> xDiaProp( xDiagram
, uno::UNO_QUERY_THROW
);
71 xDiaProp
->getPropertyValue( C2U("D3DSceneShadeMode")) >>= aProps
.m_aShadeMode
;
72 ::chart::ThreeDHelper::getRoundedEdgesAndObjectLines( xDiagram
, aProps
.m_nRoundedEdges
, aProps
.m_nObjectLines
);
73 aProps
.m_eScheme
= ::chart::ThreeDHelper::detectScheme( xDiagram
);
75 catch( const uno::Exception
& ex
)
77 ASSERT_EXCEPTION( ex
);
82 void lcl_setShadeModeAtModel( uno::Reference
< frame::XModel
> & xModel
, drawing::ShadeMode aShadeMode
)
86 uno::Reference
< beans::XPropertySet
> xDiaProp(
87 ::chart::ChartModelHelper::findDiagram( xModel
), uno::UNO_QUERY_THROW
);
88 xDiaProp
->setPropertyValue( C2U("D3DSceneShadeMode"), uno::makeAny( aShadeMode
));
90 catch( const uno::Exception
& ex
)
92 ASSERT_EXCEPTION( ex
);
96 } // anonymous namespace
98 //.............................................................................
101 //.............................................................................
103 #define POS_3DSCHEME_SIMPLE 0
104 #define POS_3DSCHEME_REALISTIC 1
105 #define POS_3DSCHEME_CUSTOM 2
107 ThreeD_SceneAppearance_TabPage::ThreeD_SceneAppearance_TabPage(
109 , const uno::Reference
< frame::XModel
> & xChartModel
110 , ControllerLockHelper
& rControllerLockHelper
)
111 : TabPage ( pWindow
, SchResId( TP_3D_SCENEAPPEARANCE
) )
112 , m_xChartModel ( xChartModel
)
113 , m_aFT_Scheme ( this, SchResId( FT_SCHEME
) )
114 , m_aLB_Scheme ( this, SchResId( LB_SCHEME
) )
115 , m_aFL_Seperator ( this, SchResId( FL_SEPERATOR
) )
116 , m_aCB_RoundedEdge ( this, SchResId( CB_ROUNDEDEDGE
) )
117 , m_aCB_Shading ( this, SchResId( CB_SHADING
) )
118 , m_aCB_ObjectLines ( this, SchResId( CB_OBJECTLINES
) )
119 , m_bUpdateOtherControls( true )
120 , m_bCommitToModel( true )
121 , m_rControllerLockHelper( rControllerLockHelper
)
124 m_aLB_Scheme
.InsertEntry(String(SchResId(STR_3DSCHEME_SIMPLE
)),POS_3DSCHEME_SIMPLE
);
125 m_aLB_Scheme
.InsertEntry(String(SchResId(STR_3DSCHEME_REALISTIC
)),POS_3DSCHEME_REALISTIC
);
126 m_aLB_Scheme
.SetDropDownLineCount(2);
128 m_aLB_Scheme
.SetSelectHdl( LINK( this, ThreeD_SceneAppearance_TabPage
, SelectSchemeHdl
) );
130 m_aCB_RoundedEdge
.SetToggleHdl( LINK( this, ThreeD_SceneAppearance_TabPage
, SelectRoundedEdgeOrObjectLines
) );
131 m_aCB_Shading
.SetToggleHdl( LINK( this, ThreeD_SceneAppearance_TabPage
, SelectShading
) );
132 m_aCB_ObjectLines
.SetToggleHdl( LINK( this, ThreeD_SceneAppearance_TabPage
, SelectRoundedEdgeOrObjectLines
) );
134 m_aCB_RoundedEdge
.EnableTriState( TRUE
);
135 m_aCB_Shading
.EnableTriState( TRUE
);
136 m_aCB_ObjectLines
.EnableTriState( TRUE
);
138 initControlsFromModel();
141 ThreeD_SceneAppearance_TabPage::~ThreeD_SceneAppearance_TabPage()
144 void ThreeD_SceneAppearance_TabPage::ActivatePage()
149 void ThreeD_SceneAppearance_TabPage::commitPendingChanges()
153 void ThreeD_SceneAppearance_TabPage::applyRoundedEdgeAndObjectLinesToModel()
155 if(!m_bCommitToModel
)
158 sal_Int32 nObjectLines
= -1;
160 switch( m_aCB_ObjectLines
.GetState())
173 sal_Int32 nCurrentRoundedEdges
= -1;
174 switch( m_aCB_RoundedEdge
.GetState() )
177 nCurrentRoundedEdges
= 0;
180 nCurrentRoundedEdges
= 5;
183 nCurrentRoundedEdges
= -1;
187 // /-- locked controllers
188 ControllerLockHelperGuard
aGuard( m_rControllerLockHelper
);
189 ThreeDHelper::setRoundedEdgesAndObjectLines(
190 ::chart::ChartModelHelper::findDiagram( m_xChartModel
), nCurrentRoundedEdges
, nObjectLines
);
191 // \-- locked controllers
194 void ThreeD_SceneAppearance_TabPage::applyShadeModeToModel()
196 if(!m_bCommitToModel
)
199 drawing::ShadeMode aShadeMode
= drawing::ShadeMode_PHONG
;
201 switch( m_aCB_Shading
.GetState())
204 aShadeMode
= drawing::ShadeMode_FLAT
;
207 aShadeMode
= drawing::ShadeMode_SMOOTH
;
214 lcl_setShadeModeAtModel( m_xChartModel
, aShadeMode
);
217 void ThreeD_SceneAppearance_TabPage::initControlsFromModel()
219 m_bCommitToModel
= false;
220 m_bUpdateOtherControls
= false;
222 lcl_ModelProperties
aProps( lcl_getPropertiesFromModel( m_xChartModel
));
224 if(aProps
.m_aShadeMode
== drawing::ShadeMode_FLAT
)
226 m_aCB_Shading
.EnableTriState( FALSE
);
227 m_aCB_Shading
.Check(FALSE
);
229 else if(aProps
.m_aShadeMode
== drawing::ShadeMode_SMOOTH
)
231 m_aCB_Shading
.EnableTriState( FALSE
);
232 m_aCB_Shading
.Check(TRUE
);
236 m_aCB_Shading
.EnableTriState( TRUE
);
237 m_aCB_Shading
.SetState( STATE_DONTKNOW
);
240 if(aProps
.m_nObjectLines
== 0)
242 m_aCB_ObjectLines
.EnableTriState( FALSE
);
243 m_aCB_ObjectLines
.Check(FALSE
);
245 else if(aProps
.m_nObjectLines
==1)
247 m_aCB_ObjectLines
.EnableTriState( FALSE
);
248 m_aCB_ObjectLines
.Check(TRUE
);
252 m_aCB_ObjectLines
.EnableTriState( TRUE
);
253 m_aCB_ObjectLines
.SetState( STATE_DONTKNOW
);
256 if(aProps
.m_nRoundedEdges
>= 5)
258 m_aCB_RoundedEdge
.EnableTriState( FALSE
);
259 m_aCB_RoundedEdge
.Check(TRUE
);
261 else if(aProps
.m_nRoundedEdges
<0)
263 m_aCB_RoundedEdge
.EnableTriState( FALSE
);
264 m_aCB_RoundedEdge
.SetState( STATE_DONTKNOW
);
268 m_aCB_RoundedEdge
.EnableTriState( TRUE
);
269 m_aCB_RoundedEdge
.Check(FALSE
);
271 m_aCB_RoundedEdge
.Enable( !m_aCB_ObjectLines
.IsChecked() );
275 m_bCommitToModel
= true;
276 m_bUpdateOtherControls
= true;
279 void ThreeD_SceneAppearance_TabPage::updateScheme()
281 lcl_ModelProperties
aProps( lcl_getPropertiesFromModel( m_xChartModel
));
283 if( m_aLB_Scheme
.GetEntryCount() == (POS_3DSCHEME_CUSTOM
+1) )
285 m_aLB_Scheme
.RemoveEntry(POS_3DSCHEME_CUSTOM
);
286 m_aLB_Scheme
.SetDropDownLineCount(2);
288 switch( aProps
.m_eScheme
)
290 case ThreeDLookScheme_Simple
:
291 m_aLB_Scheme
.SelectEntryPos( POS_3DSCHEME_SIMPLE
);
293 case ThreeDLookScheme_Realistic
:
294 m_aLB_Scheme
.SelectEntryPos( POS_3DSCHEME_REALISTIC
);
296 case ThreeDLookScheme_Unknown
:
298 m_aLB_Scheme
.InsertEntry(String(SchResId(STR_3DSCHEME_CUSTOM
)),POS_3DSCHEME_CUSTOM
);
299 m_aLB_Scheme
.SelectEntryPos( POS_3DSCHEME_CUSTOM
);
300 m_aLB_Scheme
.SetDropDownLineCount(3);
306 IMPL_LINK( ThreeD_SceneAppearance_TabPage
, SelectSchemeHdl
, void*, EMPTYARG
)
308 if( !m_bUpdateOtherControls
)
312 // /-- locked controllers
313 ControllerLockHelperGuard
aGuard( m_rControllerLockHelper
);
315 uno::Reference
< chart2::XDiagram
> xDiagram( ::chart::ChartModelHelper::findDiagram( m_xChartModel
) );
317 if( m_aLB_Scheme
.GetSelectEntryPos() == POS_3DSCHEME_REALISTIC
)
318 ThreeDHelper::setScheme( xDiagram
, ThreeDLookScheme_Realistic
);
319 else if( m_aLB_Scheme
.GetSelectEntryPos() == POS_3DSCHEME_SIMPLE
)
320 ThreeDHelper::setScheme( xDiagram
, ThreeDLookScheme_Simple
);
323 OSL_ENSURE( false, "Invalid Entry selected" );
325 // \-- locked controllers
328 // update other controls
329 initControlsFromModel();
333 IMPL_LINK( ThreeD_SceneAppearance_TabPage
, SelectShading
, void*, EMPTYARG
)
335 if( !m_bUpdateOtherControls
)
338 m_aCB_Shading
.EnableTriState( FALSE
);
339 applyShadeModeToModel();
343 IMPL_LINK( ThreeD_SceneAppearance_TabPage
, SelectRoundedEdgeOrObjectLines
, CheckBox
*, pCheckBox
)
345 if( !m_bUpdateOtherControls
)
348 if( pCheckBox
== &m_aCB_ObjectLines
)
350 m_aCB_ObjectLines
.EnableTriState( FALSE
);
351 m_bUpdateOtherControls
= false;
352 m_aCB_RoundedEdge
.Enable( !m_aCB_ObjectLines
.IsChecked() );
353 if(!m_aCB_RoundedEdge
.IsEnabled())
354 m_aCB_RoundedEdge
.Check(FALSE
);
355 m_bUpdateOtherControls
= true;
358 m_aCB_RoundedEdge
.EnableTriState( FALSE
);
359 applyRoundedEdgeAndObjectLinesToModel();
364 //.............................................................................
366 //.............................................................................