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 <sfx2/dispatch.hxx>
21 : #include <sfx2/module.hxx>
22 : #include <sfx2/viewfrm.hxx>
23 : #include <svl/eitem.hxx>
24 : #include <svtools/colrdlg.hxx>
25 : #include <vcl/msgbox.hxx>
26 : #include <sfx2/viewsh.hxx>
27 : #include <tools/shl.hxx>
28 : #include <svx/xflclit.hxx>
29 : #include <svx/svdmodel.hxx>
30 : #include <svx/globl3d.hxx>
31 : #include <svx/view3d.hxx>
32 : #include <svx/obj3d.hxx>
33 : #include <svx/sphere3d.hxx>
34 : #include <svx/scene3d.hxx>
35 : #include <svx/camera3d.hxx>
36 : #include <svx/fmmodel.hxx>
37 : #include <svx/fmpage.hxx>
38 : #include <svx/polysc3d.hxx>
39 : #include <editeng/eeitem.hxx>
40 : #include <svl/style.hxx>
41 : #include <svx/dlgutil.hxx>
42 :
43 : #include <svx/dialmgr.hxx>
44 : #include <svx/viewpt3d.hxx> // Projection Type
45 :
46 : #include <svx/svxids.hrc>
47 : #include <svx/dialogs.hrc>
48 :
49 : #include <editeng/colritem.hxx>
50 : #include <svx/e3ditem.hxx>
51 : #include <svx/gallery.hxx>
52 : #include <svl/whiter.hxx>
53 :
54 : #include <svx/float3d.hxx>
55 : #include "float3d.hrc"
56 :
57 9 : SFX_IMPL_DOCKINGWINDOW_WITHID( Svx3DChildWindow, SID_3D_WIN )
58 :
59 : struct Svx3DWinImpl
60 : {
61 : SfxItemPool* pPool;
62 : };
63 :
64 : namespace {
65 : /** Get the dispatcher from the current view frame, or, if that is not
66 : available, from the given bindings.
67 : @param pBindings
68 : May be NULL.
69 : @returns NULL when both the current view frame is NULL and the given
70 : bindings are NULL.
71 : */
72 0 : SfxDispatcher* LocalGetDispatcher (const SfxBindings* pBindings)
73 : {
74 0 : SfxDispatcher* pDispatcher = NULL;
75 :
76 0 : if (SfxViewFrame::Current() != NULL)
77 0 : pDispatcher = SfxViewFrame::Current()->GetDispatcher();
78 0 : else if (pBindings != NULL)
79 0 : pDispatcher = pBindings->GetDispatcher();
80 :
81 0 : return pDispatcher;
82 : }
83 : }
84 :
85 :
86 : /*************************************************************************
87 : |* Svx3DWin - FloatingWindow
88 : \************************************************************************/
89 0 : Svx3DWin::Svx3DWin( SfxBindings* pInBindings,
90 : SfxChildWindow *pCW, Window* pParent ) :
91 : SfxDockingWindow ( pInBindings, pCW, pParent,
92 0 : SVX_RES( RID_SVXFLOAT_3D ) ),
93 0 : aBtnGeo ( this, SVX_RES( BTN_GEO ) ),
94 0 : aBtnRepresentation ( this, SVX_RES( BTN_REPRESENTATION ) ),
95 0 : aBtnLight ( this, SVX_RES( BTN_LIGHT ) ),
96 0 : aBtnTexture ( this, SVX_RES( BTN_TEXTURE ) ),
97 0 : aBtnMaterial ( this, SVX_RES( BTN_MATERIAL ) ),
98 0 : aBtnUpdate ( this, SVX_RES( BTN_UPDATE ) ),
99 0 : aBtnAssign ( this, SVX_RES( BTN_ASSIGN ) ),
100 0 : aFLGeometrie ( this, SVX_RES( FL_GEOMETRIE ) ),
101 :
102 : // Geometry
103 0 : aFtPercentDiagonal ( this, SVX_RES( FT_PERCENT_DIAGONAL ) ),
104 0 : aMtrPercentDiagonal ( this, SVX_RES( MTR_PERCENT_DIAGONAL ) ),
105 0 : aFtBackscale ( this, SVX_RES( FT_BACKSCALE ) ),
106 0 : aMtrBackscale ( this, SVX_RES( MTR_BACKSCALE ) ),
107 0 : aFtEndAngle ( this, SVX_RES( FT_END_ANGLE ) ),
108 0 : aMtrEndAngle ( this, SVX_RES( MTR_END_ANGLE ) ),
109 0 : aFtDepth ( this, SVX_RES( FT_DEPTH ) ),
110 0 : aMtrDepth ( this, SVX_RES( MTR_DEPTH ) ),
111 0 : aFLSegments ( this, SVX_RES( FL_SEGMENTS ) ),
112 :
113 0 : aFtHorizontal ( this, SVX_RES( FT_HORIZONTAL ) ),
114 0 : aNumHorizontal ( this, SVX_RES( NUM_HORIZONTAL ) ),
115 0 : aFtVertical ( this, SVX_RES( FT_VERTICAL ) ),
116 0 : aNumVertical ( this, SVX_RES( NUM_VERTICAL ) ),
117 :
118 0 : aFLNormals ( this, SVX_RES( FL_NORMALS ) ),
119 0 : aBtnNormalsObj ( this, SVX_RES( BTN_NORMALS_OBJ ) ),
120 0 : aBtnNormalsFlat ( this, SVX_RES( BTN_NORMALS_FLAT ) ),
121 0 : aBtnNormalsSphere ( this, SVX_RES( BTN_NORMALS_SPHERE ) ),
122 0 : aBtnNormalsInvert ( this, SVX_RES( BTN_NORMALS_INVERT ) ),
123 0 : aBtnTwoSidedLighting( this, SVX_RES( BTN_TWO_SIDED_LIGHTING ) ),
124 :
125 0 : aBtnDoubleSided ( this, SVX_RES( BTN_DOUBLE_SIDED ) ),
126 :
127 : // Representation
128 0 : aFLRepresentation ( this, SVX_RES( FL_REPRESENTATION ) ),
129 0 : aFtShademode ( this, SVX_RES( FT_SHADEMODE ) ),
130 0 : aLbShademode ( this, SVX_RES( LB_SHADEMODE ) ),
131 0 : aFLShadow ( this, SVX_RES( FL_SHADOW ) ),
132 0 : aBtnShadow3d ( this, SVX_RES( BTN_SHADOW_3D ) ),
133 0 : aFtSlant ( this, SVX_RES( FT_SLANT ) ),
134 0 : aMtrSlant ( this, SVX_RES( MTR_SLANT ) ),
135 0 : aFtDistance ( this, SVX_RES( FT_DISTANCE ) ),
136 0 : aMtrDistance ( this, SVX_RES( MTR_DISTANCE ) ),
137 0 : aFtFocalLeng ( this, SVX_RES( FT_FOCAL_LENGTH ) ),
138 0 : aMtrFocalLength ( this, SVX_RES( MTR_FOCAL_LENGTH ) ),
139 0 : aFLCamera ( this, SVX_RES( FL_CAMERA ) ),
140 0 : aFLLight ( this, SVX_RES( FL_LIGHT ) ),
141 :
142 : // Lighting
143 0 : aBtnLight1 ( this, SVX_RES( BTN_LIGHT_1 ) ),
144 0 : aBtnLight2 ( this, SVX_RES( BTN_LIGHT_2 ) ),
145 0 : aBtnLight3 ( this, SVX_RES( BTN_LIGHT_3 ) ),
146 0 : aBtnLight4 ( this, SVX_RES( BTN_LIGHT_4 ) ),
147 0 : aBtnLight5 ( this, SVX_RES( BTN_LIGHT_5 ) ),
148 0 : aBtnLight6 ( this, SVX_RES( BTN_LIGHT_6 ) ),
149 0 : aBtnLight7 ( this, SVX_RES( BTN_LIGHT_7 ) ),
150 0 : aBtnLight8 ( this, SVX_RES( BTN_LIGHT_8 ) ),
151 0 : aFTLightsource ( this, SVX_RES( FT_LIGHTSOURCE ) ),
152 0 : aLbLight1 ( this, SVX_RES( LB_LIGHT_1 ) ),
153 0 : aLbLight2 ( this, SVX_RES( LB_LIGHT_2 ) ),
154 0 : aLbLight3 ( this, SVX_RES( LB_LIGHT_3 ) ),
155 0 : aLbLight4 ( this, SVX_RES( LB_LIGHT_4 ) ),
156 0 : aLbLight5 ( this, SVX_RES( LB_LIGHT_5 ) ),
157 0 : aLbLight6 ( this, SVX_RES( LB_LIGHT_6 ) ),
158 0 : aLbLight7 ( this, SVX_RES( LB_LIGHT_7 ) ),
159 0 : aLbLight8 ( this, SVX_RES( LB_LIGHT_8 ) ),
160 :
161 0 : aBtnLightColor ( this, SVX_RES( BTN_LIGHT_COLOR ) ),
162 :
163 : // Keyboard shortcuts activate the next control, so the
164 : // order needed to be changed here
165 0 : aFTAmbientlight ( this, SVX_RES( FT_AMBIENTLIGHT ) ), // Text label
166 0 : aLbAmbientlight ( this, SVX_RES( LB_AMBIENTLIGHT ) ), // ListBox
167 0 : aBtnAmbientColor ( this, SVX_RES( BTN_AMBIENT_COLOR ) ), // color button
168 0 : aFLTexture ( this, SVX_RES( FL_TEXTURE ) ),
169 :
170 : // Textures
171 0 : aFtTexKind ( this, SVX_RES( FT_TEX_KIND ) ),
172 0 : aBtnTexLuminance ( this, SVX_RES( BTN_TEX_LUMINANCE ) ),
173 0 : aBtnTexColor ( this, SVX_RES( BTN_TEX_COLOR ) ),
174 0 : aFtTexMode ( this, SVX_RES( FT_TEX_MODE ) ),
175 0 : aBtnTexReplace ( this, SVX_RES( BTN_TEX_REPLACE ) ),
176 0 : aBtnTexModulate ( this, SVX_RES( BTN_TEX_MODULATE ) ),
177 0 : aBtnTexBlend ( this, SVX_RES( BTN_TEX_BLEND ) ),
178 0 : aFtTexProjectionX ( this, SVX_RES( FT_TEX_PROJECTION_X ) ),
179 0 : aBtnTexObjectX ( this, SVX_RES( BTN_TEX_OBJECT_X ) ),
180 0 : aBtnTexParallelX ( this, SVX_RES( BTN_TEX_PARALLEL_X ) ),
181 0 : aBtnTexCircleX ( this, SVX_RES( BTN_TEX_CIRCLE_X ) ),
182 0 : aFtTexProjectionY ( this, SVX_RES( FT_TEX_PROJECTION_Y ) ),
183 0 : aBtnTexObjectY ( this, SVX_RES( BTN_TEX_OBJECT_Y ) ),
184 0 : aBtnTexParallelY ( this, SVX_RES( BTN_TEX_PARALLEL_Y ) ),
185 0 : aBtnTexCircleY ( this, SVX_RES( BTN_TEX_CIRCLE_Y ) ),
186 0 : aFtTexFilter ( this, SVX_RES( FT_TEX_FILTER ) ),
187 0 : aBtnTexFilter ( this, SVX_RES( BTN_TEX_FILTER ) ),
188 0 : aFLMaterial ( this, SVX_RES( FL_MATERIAL ) ),
189 :
190 : // Material
191 0 : aFtMatFavorites ( this, SVX_RES( FT_MAT_FAVORITES ) ),
192 0 : aLbMatFavorites ( this, SVX_RES( LB_MAT_FAVORITES ) ),
193 0 : aFtMatColor ( this, SVX_RES( FT_MAT_COLOR ) ),
194 0 : aLbMatColor ( this, SVX_RES( LB_MAT_COLOR ) ),
195 0 : aBtnMatColor ( this, SVX_RES( BTN_MAT_COLOR ) ),
196 0 : aFtMatEmission ( this, SVX_RES( FT_MAT_EMISSION ) ),
197 0 : aLbMatEmission ( this, SVX_RES( LB_MAT_EMISSION ) ),
198 0 : aBtnEmissionColor ( this, SVX_RES( BTN_EMISSION_COLOR ) ),
199 0 : aFLMatSpecular ( this, SVX_RES( FL_MAT_SPECULAR ) ),
200 0 : aFtMatSpecular ( this, SVX_RES( FT_MAT_SPECULAR ) ),
201 0 : aLbMatSpecular ( this, SVX_RES( LB_MAT_SPECULAR ) ),
202 0 : aBtnSpecularColor ( this, SVX_RES( BTN_SPECULAR_COLOR ) ),
203 0 : aFtMatSpecularIntensity( this, SVX_RES( FT_MAT_SPECULAR_INTENSITY ) ),
204 0 : aMtrMatSpecularIntensity( this, SVX_RES( MTR_MAT_SPECULAR_INTENSITY ) ),
205 0 : aCtlPreview ( this, SVX_RES( CTL_PREVIEW ) ),
206 0 : aCtlLightPreview ( this, SVX_RES( CTL_LIGHT_PREVIEW ) ),
207 :
208 : // Lower Range
209 0 : aBtnConvertTo3D ( this, SVX_RES( BTN_CHANGE_TO_3D ) ),
210 0 : aBtnLatheObject ( this, SVX_RES( BTN_LATHE_OBJ ) ),
211 0 : aBtnPerspective ( this, SVX_RES( BTN_PERSPECTIVE ) ),
212 :
213 0 : aImgLightOn ( SVX_RES( RID_SVXIMAGE_LIGHT_ON ) ),
214 0 : aImgLightOff ( SVX_RES( RID_SVXIMAGE_LIGHT_OFF ) ),
215 :
216 : bUpdate ( sal_False ),
217 : eViewType ( VIEWTYPE_GEO ),
218 :
219 : pModel ( NULL ),
220 : pVDev ( NULL ),
221 : p3DView ( NULL ),
222 :
223 : pBindings ( pInBindings ),
224 : pControllerItem(0L),
225 : pConvertTo3DItem(0L),
226 : pConvertTo3DLatheItem(0L),
227 : mpImpl ( new Svx3DWinImpl() ),
228 : mpRemember2DAttributes(NULL),
229 0 : bOnly3DChanged ( sal_False )
230 : {
231 0 : String accname(SVX_RES(RID_SVXFLOAT3D_COLOR_LIGHT_PRE));
232 0 : aCtlLightPreview.SetAccessibleName(accname);
233 0 : aCtlPreview.SetAccessibleName(accname);
234 0 : aLbAmbientlight.SetAccessibleName(aFTAmbientlight.GetDisplayText());
235 :
236 0 : mpImpl->pPool = NULL;
237 0 : FreeResource();
238 :
239 : // Set Metric
240 0 : eFUnit = pInBindings->GetDispatcher()->GetModule()->GetFieldUnit();
241 :
242 0 : aMtrDepth.SetUnit( eFUnit );
243 0 : aMtrDistance.SetUnit( eFUnit );
244 0 : aMtrFocalLength.SetUnit( eFUnit );
245 :
246 0 : pControllerItem = new Svx3DCtrlItem(SID_3D_STATE, pBindings);
247 0 : pConvertTo3DItem = new SvxConvertTo3DItem(SID_CONVERT_TO_3D, pBindings);
248 0 : pConvertTo3DLatheItem = new SvxConvertTo3DItem(SID_CONVERT_TO_3D_LATHE_FAST, pBindings);
249 :
250 0 : aBtnAssign.SetClickHdl( LINK( this, Svx3DWin, ClickAssignHdl ) );
251 0 : aBtnUpdate.SetClickHdl( LINK( this, Svx3DWin, ClickUpdateHdl ) );
252 :
253 0 : Link aLink( LINK( this, Svx3DWin, ClickViewTypeHdl ) );
254 0 : aBtnGeo.SetClickHdl( aLink );
255 0 : aBtnRepresentation.SetClickHdl( aLink );
256 0 : aBtnLight.SetClickHdl( aLink );
257 0 : aBtnTexture.SetClickHdl( aLink );
258 0 : aBtnMaterial.SetClickHdl( aLink );
259 :
260 0 : aLink = LINK( this, Svx3DWin, ClickHdl );
261 0 : aBtnPerspective.SetClickHdl( aLink );
262 0 : aBtnConvertTo3D.SetClickHdl( aLink );
263 0 : aBtnLatheObject.SetClickHdl( aLink );
264 :
265 : // Geometry
266 0 : aBtnNormalsObj.SetClickHdl( aLink );
267 0 : aBtnNormalsFlat.SetClickHdl( aLink );
268 0 : aBtnNormalsSphere.SetClickHdl( aLink );
269 0 : aBtnTwoSidedLighting.SetClickHdl( aLink );
270 0 : aBtnNormalsInvert.SetClickHdl( aLink );
271 0 : aBtnDoubleSided.SetClickHdl( aLink );
272 :
273 : // Representation
274 0 : aBtnShadow3d.SetClickHdl( aLink );
275 :
276 : // Lighting
277 0 : aBtnLight1.SetClickHdl( aLink );
278 0 : aBtnLight2.SetClickHdl( aLink );
279 0 : aBtnLight3.SetClickHdl( aLink );
280 0 : aBtnLight4.SetClickHdl( aLink );
281 0 : aBtnLight5.SetClickHdl( aLink );
282 0 : aBtnLight6.SetClickHdl( aLink );
283 0 : aBtnLight7.SetClickHdl( aLink );
284 0 : aBtnLight8.SetClickHdl( aLink );
285 :
286 : // Textures
287 0 : aBtnTexLuminance.SetClickHdl( aLink );
288 0 : aBtnTexColor.SetClickHdl( aLink );
289 0 : aBtnTexReplace.SetClickHdl( aLink );
290 0 : aBtnTexModulate.SetClickHdl( aLink );
291 0 : aBtnTexParallelX.SetClickHdl( aLink );
292 0 : aBtnTexCircleX.SetClickHdl( aLink );
293 0 : aBtnTexObjectX.SetClickHdl( aLink );
294 0 : aBtnTexParallelY.SetClickHdl( aLink );
295 0 : aBtnTexCircleY.SetClickHdl( aLink );
296 0 : aBtnTexObjectY.SetClickHdl( aLink );
297 0 : aBtnTexFilter.SetClickHdl( aLink );
298 :
299 : // Material
300 0 : aLink = LINK( this, Svx3DWin, ClickColorHdl );
301 0 : aBtnLightColor.SetClickHdl( aLink );
302 0 : aBtnAmbientColor.SetClickHdl( aLink );
303 0 : aBtnMatColor.SetClickHdl( aLink );
304 0 : aBtnEmissionColor.SetClickHdl( aLink );
305 0 : aBtnSpecularColor.SetClickHdl( aLink );
306 :
307 :
308 0 : aLink = LINK( this, Svx3DWin, SelectHdl );
309 0 : aLbMatFavorites.SetSelectHdl( aLink );
310 0 : aLbMatColor.SetSelectHdl( aLink );
311 0 : aLbMatEmission.SetSelectHdl( aLink );
312 0 : aLbMatSpecular.SetSelectHdl( aLink );
313 0 : aLbLight1.SetSelectHdl( aLink );
314 0 : aLbLight2.SetSelectHdl( aLink );
315 0 : aLbLight3.SetSelectHdl( aLink );
316 0 : aLbLight4.SetSelectHdl( aLink );
317 0 : aLbLight5.SetSelectHdl( aLink );
318 0 : aLbLight6.SetSelectHdl( aLink );
319 0 : aLbLight7.SetSelectHdl( aLink );
320 0 : aLbLight8.SetSelectHdl( aLink );
321 0 : aLbAmbientlight.SetSelectHdl( aLink );
322 0 : aLbShademode.SetSelectHdl( aLink );
323 :
324 0 : aLink = LINK( this, Svx3DWin, ModifyHdl );
325 0 : aMtrMatSpecularIntensity.SetModifyHdl( aLink );
326 0 : aNumHorizontal.SetModifyHdl( aLink );
327 0 : aNumVertical.SetModifyHdl( aLink );
328 0 : aMtrSlant.SetModifyHdl( aLink );
329 :
330 : // Preview callback
331 0 : aLink = LINK( this, Svx3DWin, ChangeLightCallbackHdl );
332 0 : aCtlLightPreview.SetUserInteractiveChangeCallback(aLink);
333 0 : aLink = LINK( this, Svx3DWin, ChangeSelectionCallbackHdl );
334 0 : aCtlLightPreview.SetUserSelectionChangeCallback(aLink);
335 :
336 0 : aSize = GetOutputSizePixel();
337 0 : SetMinOutputSizePixel( aSize );
338 :
339 0 : Construct();
340 :
341 : // Initiation of the initialization of the ColorLBs
342 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(pBindings);
343 0 : if (pDispatcher != NULL)
344 : {
345 0 : SfxBoolItem aItem( SID_3D_INIT, sal_True );
346 : pDispatcher->Execute(
347 0 : SID_3D_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
348 : }
349 :
350 0 : Reset();
351 :
352 0 : aBtnNormalsObj.SetAccessibleRelationMemberOf( &aFLNormals );
353 0 : aBtnNormalsFlat.SetAccessibleRelationMemberOf( &aFLNormals );
354 0 : aBtnNormalsSphere.SetAccessibleRelationMemberOf( &aFLNormals );
355 0 : aBtnNormalsInvert.SetAccessibleRelationMemberOf( &aFLNormals );
356 0 : aBtnTwoSidedLighting.SetAccessibleRelationMemberOf( &aFLNormals );
357 0 : aBtnDoubleSided.SetAccessibleRelationMemberOf( &aFLNormals );
358 :
359 0 : aBtnLight1.SetAccessibleRelationMemberOf( &aFLLight );
360 0 : aBtnLight2.SetAccessibleRelationMemberOf( &aFLLight );
361 0 : aBtnLight3.SetAccessibleRelationMemberOf( &aFLLight );
362 0 : aBtnLight4.SetAccessibleRelationMemberOf( &aFLLight );
363 0 : aBtnLight5.SetAccessibleRelationMemberOf( &aFLLight );
364 0 : aBtnLight6.SetAccessibleRelationMemberOf( &aFLLight );
365 0 : aBtnLight7.SetAccessibleRelationMemberOf( &aFLLight );
366 0 : aBtnLight8.SetAccessibleRelationMemberOf( &aFLLight );
367 :
368 0 : aBtnLight1.SetAccessibleRelationLabeledBy( &aFTLightsource );
369 0 : aBtnLight2.SetAccessibleRelationLabeledBy( &aFTLightsource );
370 0 : aBtnLight3.SetAccessibleRelationLabeledBy( &aFTLightsource );
371 0 : aBtnLight4.SetAccessibleRelationLabeledBy( &aFTLightsource );
372 0 : aBtnLight5.SetAccessibleRelationLabeledBy( &aFTLightsource );
373 0 : aBtnLight6.SetAccessibleRelationLabeledBy( &aFTLightsource );
374 0 : aBtnLight7.SetAccessibleRelationLabeledBy( &aFTLightsource );
375 0 : aBtnLight8.SetAccessibleRelationLabeledBy( &aFTLightsource );
376 0 : aBtnLightColor.SetAccessibleRelationMemberOf( &aFLLight );
377 0 : aBtnLightColor.SetAccessibleRelationLabeledBy( &aFTLightsource );
378 0 : aBtnAmbientColor.SetAccessibleRelationMemberOf( &aFLLight );
379 0 : aBtnAmbientColor.SetAccessibleRelationLabeledBy( &aFTAmbientlight );
380 :
381 0 : aBtnSpecularColor.SetAccessibleRelationLabeledBy( &aFtMatSpecular );
382 0 : aBtnMatColor.SetAccessibleRelationLabeledBy( &aFtMatColor );
383 0 : aBtnEmissionColor.SetAccessibleRelationLabeledBy( &aFtMatEmission );
384 0 : aBtnTexLuminance.SetAccessibleRelationLabeledBy( &aFtTexKind );
385 0 : aBtnTexColor.SetAccessibleRelationLabeledBy( &aFtTexKind );
386 0 : aBtnTexReplace.SetAccessibleRelationLabeledBy( &aFtTexMode );
387 0 : aBtnTexModulate.SetAccessibleRelationLabeledBy( &aFtTexMode );
388 0 : aBtnTexBlend.SetAccessibleRelationLabeledBy( &aFtTexMode );
389 0 : aBtnTexObjectX.SetAccessibleRelationLabeledBy( &aFtTexProjectionX );
390 0 : aBtnTexParallelX.SetAccessibleRelationLabeledBy( &aFtTexProjectionX );
391 0 : aBtnTexCircleX.SetAccessibleRelationLabeledBy( &aFtTexProjectionX );
392 0 : aBtnTexObjectY.SetAccessibleRelationLabeledBy( &aFtTexProjectionY );
393 0 : aBtnTexParallelY.SetAccessibleRelationLabeledBy( &aFtTexProjectionY );
394 0 : aBtnTexCircleY.SetAccessibleRelationLabeledBy( &aFtTexProjectionY );
395 0 : aBtnTexFilter.SetAccessibleRelationLabeledBy( &aFtTexFilter );
396 0 : aCtlLightPreview.SetAccessibleRelationLabeledBy( &aCtlLightPreview );
397 0 : aBtnNormalsObj.SetAccessibleRelationMemberOf(&aFLNormals);
398 0 : aBtnNormalsFlat.SetAccessibleRelationMemberOf(&aFLNormals);
399 0 : aBtnNormalsSphere.SetAccessibleRelationMemberOf(&aFLNormals);
400 0 : aBtnNormalsInvert.SetAccessibleRelationMemberOf(&aFLNormals);
401 0 : aBtnTwoSidedLighting.SetAccessibleRelationMemberOf(&aFLNormals);
402 :
403 0 : aBtnShadow3d.SetAccessibleRelationMemberOf(&aFLShadow);
404 :
405 0 : aBtnLight1.SetAccessibleRelationMemberOf(&aFLLight);
406 0 : aBtnLight2.SetAccessibleRelationMemberOf(&aFLLight);
407 0 : aBtnLight3.SetAccessibleRelationMemberOf(&aFLLight);
408 0 : aBtnLight4.SetAccessibleRelationMemberOf(&aFLLight);
409 0 : aBtnLight5.SetAccessibleRelationMemberOf(&aFLLight);
410 0 : aBtnLight6.SetAccessibleRelationMemberOf(&aFLLight);
411 0 : aBtnLight7.SetAccessibleRelationMemberOf(&aFLLight);
412 0 : aBtnLight8.SetAccessibleRelationMemberOf(&aFLLight);
413 :
414 0 : aBtnTexLuminance.SetAccessibleRelationMemberOf(&aFLTexture);
415 0 : aBtnTexColor.SetAccessibleRelationMemberOf(&aFLTexture);
416 0 : aBtnTexReplace.SetAccessibleRelationMemberOf(&aFLTexture);
417 0 : aBtnTexModulate.SetAccessibleRelationMemberOf(&aFLTexture);
418 0 : aBtnTexBlend.SetAccessibleRelationMemberOf(&aFLTexture);
419 0 : aBtnTexObjectX.SetAccessibleRelationMemberOf(&aFLTexture);
420 0 : aBtnTexParallelX.SetAccessibleRelationMemberOf(&aFLTexture);
421 0 : aBtnTexCircleX.SetAccessibleRelationMemberOf(&aFLTexture);
422 0 : aBtnTexObjectY.SetAccessibleRelationMemberOf(&aFLTexture);
423 0 : aBtnTexParallelY.SetAccessibleRelationMemberOf(&aFLTexture);
424 0 : aBtnTexCircleY.SetAccessibleRelationMemberOf(&aFLTexture);
425 0 : aBtnTexFilter.SetAccessibleRelationMemberOf(&aFLTexture);
426 :
427 0 : aBtnMatColor.SetAccessibleRelationMemberOf(&aFLMaterial);
428 0 : aBtnEmissionColor.SetAccessibleRelationMemberOf(&aFLMaterial);
429 :
430 0 : aBtnSpecularColor.SetAccessibleRelationMemberOf(&aFLMatSpecular);
431 0 : }
432 :
433 : // -----------------------------------------------------------------------
434 0 : Svx3DWin::~Svx3DWin()
435 : {
436 0 : delete p3DView;
437 0 : delete pVDev;
438 0 : delete pModel;
439 :
440 0 : delete pControllerItem;
441 0 : delete pConvertTo3DItem;
442 0 : delete pConvertTo3DLatheItem;
443 :
444 0 : delete mpRemember2DAttributes;
445 :
446 0 : delete mpImpl;
447 0 : }
448 :
449 : // -----------------------------------------------------------------------
450 0 : void Svx3DWin::Construct()
451 : {
452 0 : aBtnGeo.Check();
453 0 : Link aLink( LINK( this, Svx3DWin, ClickViewTypeHdl ) );
454 0 : aLink.Call( &aBtnGeo );
455 0 : aCtlLightPreview.Hide();
456 0 : }
457 :
458 : // -----------------------------------------------------------------------
459 0 : void Svx3DWin::Reset()
460 : {
461 : // Various initializations, default is AllAttributes
462 0 : aLbShademode.SelectEntryPos( 0 );
463 0 : aMtrMatSpecularIntensity.SetValue( 50 );
464 :
465 0 : aBtnLight1.Check();
466 0 : ClickUpdateHdl( NULL );
467 :
468 : // Select nothing, to avoid errors when selecting the first
469 0 : aCtlLightPreview.GetSvx3DLightControl().SelectLight(0);
470 0 : }
471 :
472 0 : bool Svx3DWin::GetUILightState( const ImageButton& rBtn ) const
473 : {
474 0 : return (rBtn.GetModeImage() == aImgLightOn);
475 : }
476 :
477 0 : void Svx3DWin::SetUILightState( ImageButton& aBtn, bool bState )
478 : {
479 0 : aBtn.SetModeImage( bState ? aImgLightOn : aImgLightOff );
480 0 : }
481 :
482 : // -----------------------------------------------------------------------
483 0 : void Svx3DWin::Update( SfxItemSet& rAttrs )
484 : {
485 : // remember 2d attributes
486 0 : if(mpRemember2DAttributes)
487 0 : mpRemember2DAttributes->ClearItem();
488 : else
489 : mpRemember2DAttributes = new SfxItemSet(*rAttrs.GetPool(),
490 : SDRATTR_START, SDRATTR_SHADOW_LAST,
491 : SDRATTR_3D_FIRST, SDRATTR_3D_LAST,
492 0 : 0, 0);
493 :
494 0 : SfxWhichIter aIter(*mpRemember2DAttributes);
495 0 : sal_uInt16 nWhich(aIter.FirstWhich());
496 :
497 0 : while(nWhich)
498 : {
499 0 : SfxItemState eState = rAttrs.GetItemState(nWhich, sal_False);
500 0 : if(SFX_ITEM_DONTCARE == eState)
501 0 : mpRemember2DAttributes->InvalidateItem(nWhich);
502 0 : else if(SFX_ITEM_SET == eState)
503 0 : mpRemember2DAttributes->Put(rAttrs.Get(nWhich, sal_False));
504 :
505 0 : nWhich = aIter.NextWhich();
506 : }
507 :
508 : // construct field values
509 : const SfxPoolItem* pItem;
510 :
511 : // Possible determine PoolUnit
512 0 : if( !mpImpl->pPool )
513 : {
514 0 : mpImpl->pPool = rAttrs.GetPool();
515 : DBG_ASSERT( mpImpl->pPool, "Where is the Pool? ");
516 0 : ePoolUnit = mpImpl->pPool->GetMetric( SID_ATTR_LINE_WIDTH );
517 : }
518 0 : eFUnit = GetModuleFieldUnit( rAttrs );
519 :
520 :
521 : // Segment Number Can be changed? and other states
522 0 : SfxItemState eState = rAttrs.GetItemState( SID_ATTR_3D_INTERN, sal_False, &pItem );
523 0 : if( SFX_ITEM_SET == eState )
524 : {
525 0 : sal_uInt32 nState = ( ( const SfxUInt32Item* )pItem )->GetValue();
526 0 : sal_Bool bExtrude = (sal_Bool) ( nState & 2 );
527 0 : sal_Bool bSphere = (sal_Bool) ( nState & 4 );
528 0 : sal_Bool bCube = (sal_Bool) ( nState & 8 );
529 :
530 0 : sal_Bool bChart = (sal_Bool) ( nState & 32 ); // Chart
531 :
532 0 : if( !bChart )
533 : {
534 : // For cube objects are no segments set
535 0 : aFtHorizontal.Enable( !bCube );
536 0 : aNumHorizontal.Enable( !bCube );
537 0 : aFtVertical.Enable( !bCube );
538 0 : aNumVertical.Enable( !bCube );
539 0 : aFLSegments.Enable( !bCube );
540 :
541 0 : aFtPercentDiagonal.Enable( !bCube && !bSphere );
542 0 : aMtrPercentDiagonal.Enable( !bCube && !bSphere );
543 0 : aFtBackscale.Enable( !bCube && !bSphere );
544 0 : aMtrBackscale.Enable( !bCube && !bSphere );
545 0 : aFtDepth.Enable( !bCube && !bSphere );
546 0 : aMtrDepth.Enable( !bCube && !bSphere );
547 0 : if( bCube )
548 : {
549 0 : aNumHorizontal.SetEmptyFieldValue();
550 0 : aNumVertical.SetEmptyFieldValue();
551 : }
552 0 : if( bCube || bSphere )
553 : {
554 0 : aMtrPercentDiagonal.SetEmptyFieldValue();
555 0 : aMtrBackscale.SetEmptyFieldValue();
556 0 : aMtrDepth.SetEmptyFieldValue();
557 : }
558 :
559 : // There is a final angle only for Lathe objects.
560 0 : aFtEndAngle.Enable( !bExtrude && !bCube && !bSphere );
561 0 : aMtrEndAngle.Enable( !bExtrude && !bCube && !bSphere );
562 0 : if( bExtrude || bCube || bSphere )
563 0 : aMtrEndAngle.SetEmptyFieldValue();
564 : }
565 : else
566 : {
567 : // Geometry
568 0 : aFtHorizontal.Enable( sal_False );
569 0 : aNumHorizontal.Enable( sal_False );
570 0 : aNumHorizontal.SetEmptyFieldValue();
571 0 : aFtVertical.Enable( sal_False );
572 0 : aNumVertical.Enable( sal_False );
573 0 : aNumVertical.SetEmptyFieldValue();
574 0 : aFLSegments.Enable( sal_False );
575 0 : aFtEndAngle.Enable( sal_False );
576 0 : aMtrEndAngle.Enable( sal_False );
577 0 : aMtrEndAngle.SetEmptyFieldValue();
578 0 : aFtDepth.Enable( sal_False );
579 0 : aMtrDepth.Enable( sal_False );
580 0 : aMtrDepth.SetEmptyFieldValue();
581 :
582 : // Representation
583 0 : aBtnShadow3d.Enable( sal_False );
584 0 : aFtSlant.Enable( sal_False );
585 0 : aMtrSlant.Enable( sal_False );
586 0 : aFLShadow.Enable( sal_False );
587 :
588 0 : aFtDistance.Enable( sal_False );
589 0 : aMtrDistance.Enable( sal_False );
590 0 : aMtrDistance.SetEmptyFieldValue();
591 0 : aFtFocalLeng.Enable( sal_False );
592 0 : aMtrFocalLength.Enable( sal_False );
593 0 : aMtrFocalLength.SetEmptyFieldValue();
594 0 : aFLCamera.Enable( sal_False );
595 :
596 : //Lower Range
597 0 : aBtnConvertTo3D.Enable( sal_False );
598 0 : aBtnLatheObject.Enable( sal_False );
599 : }
600 : }
601 : // Bitmap fill ? -> Status
602 0 : sal_Bool bBitmap(sal_False);
603 0 : eState = rAttrs.GetItemState(XATTR_FILLSTYLE);
604 0 : if(eState != SFX_ITEM_DONTCARE)
605 : {
606 0 : XFillStyle eXFS = (XFillStyle)((const XFillStyleItem&)rAttrs.Get(XATTR_FILLSTYLE)).GetValue();
607 0 : bBitmap = (eXFS == XFILL_BITMAP || eXFS == XFILL_GRADIENT || eXFS == XFILL_HATCH);
608 : }
609 :
610 0 : aFtTexKind.Enable( bBitmap );
611 0 : aBtnTexLuminance.Enable( bBitmap );
612 0 : aBtnTexColor.Enable( bBitmap );
613 0 : aFtTexMode.Enable( bBitmap );
614 0 : aBtnTexReplace.Enable( bBitmap );
615 0 : aBtnTexModulate.Enable( bBitmap );
616 0 : aBtnTexBlend.Enable( bBitmap );
617 0 : aFtTexProjectionX.Enable( bBitmap );
618 0 : aBtnTexParallelX.Enable( bBitmap );
619 0 : aBtnTexCircleX.Enable( bBitmap );
620 0 : aBtnTexObjectX.Enable( bBitmap );
621 0 : aFtTexProjectionY.Enable( bBitmap );
622 0 : aBtnTexParallelY.Enable( bBitmap );
623 0 : aBtnTexCircleY.Enable( bBitmap );
624 0 : aBtnTexObjectY.Enable( bBitmap );
625 0 : aFtTexFilter.Enable( bBitmap );
626 0 : aBtnTexFilter.Enable( bBitmap );
627 0 : aFLTexture.Enable( bBitmap );
628 :
629 :
630 : // Geometry
631 : // Number of segments (horizontal)
632 0 : if( aNumHorizontal.IsEnabled() )
633 : {
634 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_HORZ_SEGS);
635 0 : if(eState != SFX_ITEM_DONTCARE)
636 : {
637 0 : sal_uInt32 nValue = ((const Svx3DHorizontalSegmentsItem&)rAttrs.Get(SDRATTR_3DOBJ_HORZ_SEGS)).GetValue();
638 0 : if(nValue != (sal_uInt32 )aNumHorizontal.GetValue())
639 : {
640 0 : aNumHorizontal.SetValue( nValue );
641 0 : bUpdate = sal_True;
642 : }
643 0 : else if( aNumHorizontal.IsEmptyFieldValue() )
644 0 : aNumHorizontal.SetValue( nValue );
645 : }
646 : else
647 : {
648 0 : if( !aNumHorizontal.IsEmptyFieldValue() )
649 : {
650 0 : aNumHorizontal.SetEmptyFieldValue();
651 0 : bUpdate = sal_True;
652 : }
653 : }
654 : }
655 :
656 : //Number of segments (vertical)
657 0 : if( aNumVertical.IsEnabled() )
658 : {
659 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_VERT_SEGS);
660 0 : if( eState != SFX_ITEM_DONTCARE )
661 : {
662 0 : sal_uInt32 nValue = ((const Svx3DVerticalSegmentsItem&)rAttrs.Get(SDRATTR_3DOBJ_VERT_SEGS)).GetValue();
663 0 : if( nValue != (sal_uInt32) aNumVertical.GetValue() )
664 : {
665 0 : aNumVertical.SetValue( nValue );
666 0 : bUpdate = sal_True;
667 : }
668 0 : else if( aNumVertical.IsEmptyFieldValue() )
669 0 : aNumVertical.SetValue( nValue );
670 : }
671 : else
672 : {
673 0 : if( !aNumVertical.IsEmptyFieldValue() )
674 : {
675 0 : aNumVertical.SetEmptyFieldValue();
676 0 : bUpdate = sal_True;
677 : }
678 : }
679 : }
680 :
681 : // Depth
682 0 : if( aMtrDepth.IsEnabled() )
683 : {
684 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_DEPTH);
685 0 : if( eState != SFX_ITEM_DONTCARE )
686 : {
687 0 : sal_uInt32 nValue = ((const Svx3DDepthItem&)rAttrs.Get(SDRATTR_3DOBJ_DEPTH)).GetValue();
688 0 : sal_uInt32 nValue2 = GetCoreValue( aMtrDepth, ePoolUnit );
689 0 : if( nValue != nValue2 )
690 : {
691 0 : if( eFUnit != aMtrDepth.GetUnit() )
692 0 : SetFieldUnit( aMtrDepth, eFUnit );
693 :
694 0 : SetMetricValue( aMtrDepth, nValue, ePoolUnit );
695 0 : bUpdate = sal_True;
696 : }
697 0 : else if( aMtrDepth.IsEmptyFieldValue() )
698 0 : aMtrDepth.SetValue( aMtrDepth.GetValue() );
699 : }
700 : else
701 : {
702 0 : if( !aMtrDepth.IsEmptyFieldValue() )
703 : {
704 0 : aMtrDepth.SetEmptyFieldValue();
705 0 : bUpdate = sal_True;
706 : }
707 : }
708 : }
709 :
710 : // Double walled / Double sided
711 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_DOUBLE_SIDED);
712 0 : if( eState != SFX_ITEM_DONTCARE )
713 : {
714 0 : sal_Bool bValue = ((const Svx3DDoubleSidedItem&)rAttrs.Get(SDRATTR_3DOBJ_DOUBLE_SIDED)).GetValue();
715 0 : if( bValue != aBtnDoubleSided.IsChecked() )
716 : {
717 0 : aBtnDoubleSided.Check( bValue );
718 0 : bUpdate = sal_True;
719 : }
720 0 : else if( aBtnDoubleSided.GetState() == STATE_DONTKNOW )
721 0 : aBtnDoubleSided.Check( bValue );
722 : }
723 : else
724 : {
725 0 : if( aBtnDoubleSided.GetState() != STATE_DONTKNOW )
726 : {
727 0 : aBtnDoubleSided.SetState( STATE_DONTKNOW );
728 0 : bUpdate = sal_True;
729 : }
730 : }
731 :
732 : // Edge rounding
733 0 : if( aMtrPercentDiagonal.IsEnabled() )
734 : {
735 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_PERCENT_DIAGONAL);
736 0 : if( eState != SFX_ITEM_DONTCARE )
737 : {
738 0 : sal_uInt16 nValue = ((const Svx3DPercentDiagonalItem&)rAttrs.Get(SDRATTR_3DOBJ_PERCENT_DIAGONAL)).GetValue();
739 0 : if( nValue != aMtrPercentDiagonal.GetValue() )
740 : {
741 0 : aMtrPercentDiagonal.SetValue( nValue );
742 0 : bUpdate = sal_True;
743 : }
744 0 : else if( aMtrPercentDiagonal.IsEmptyFieldValue() )
745 0 : aMtrPercentDiagonal.SetValue( nValue );
746 : }
747 : else
748 : {
749 0 : if( !aMtrPercentDiagonal.IsEmptyFieldValue() )
750 : {
751 0 : aMtrPercentDiagonal.SetEmptyFieldValue();
752 0 : bUpdate = sal_True;
753 : }
754 : }
755 : }
756 :
757 : // Depth scaling
758 0 : if( aMtrBackscale.IsEnabled() )
759 : {
760 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_BACKSCALE);
761 0 : if( eState != SFX_ITEM_DONTCARE )
762 : {
763 0 : sal_uInt16 nValue = ((const Svx3DBackscaleItem&)rAttrs.Get(SDRATTR_3DOBJ_BACKSCALE)).GetValue();
764 0 : if( nValue != aMtrBackscale.GetValue() )
765 : {
766 0 : aMtrBackscale.SetValue( nValue );
767 0 : bUpdate = sal_True;
768 : }
769 0 : else if( aMtrBackscale.IsEmptyFieldValue() )
770 0 : aMtrBackscale.SetValue( nValue );
771 : }
772 : else
773 : {
774 0 : if( !aMtrBackscale.IsEmptyFieldValue() )
775 : {
776 0 : aMtrBackscale.SetEmptyFieldValue();
777 0 : bUpdate = sal_True;
778 : }
779 : }
780 : }
781 :
782 : // End angle
783 0 : if( aMtrEndAngle.IsEnabled() )
784 : {
785 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_END_ANGLE);
786 0 : if( eState != SFX_ITEM_DONTCARE )
787 : {
788 0 : sal_Int32 nValue = ((const Svx3DEndAngleItem&)rAttrs.Get(SDRATTR_3DOBJ_END_ANGLE)).GetValue();
789 0 : if( nValue != aMtrEndAngle.GetValue() )
790 : {
791 0 : aMtrEndAngle.SetValue( nValue );
792 0 : bUpdate = sal_True;
793 : }
794 : }
795 : else
796 : {
797 0 : if( !aMtrEndAngle.IsEmptyFieldValue() )
798 : {
799 0 : aMtrEndAngle.SetEmptyFieldValue();
800 0 : bUpdate = sal_True;
801 : }
802 : }
803 : }
804 :
805 : // Normal type
806 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_NORMALS_KIND);
807 0 : if( eState != SFX_ITEM_DONTCARE )
808 : {
809 0 : sal_uInt16 nValue = ((const Svx3DNormalsKindItem&)rAttrs.Get(SDRATTR_3DOBJ_NORMALS_KIND)).GetValue();
810 :
811 0 : if( ( !aBtnNormalsObj.IsChecked() && nValue == 0 ) ||
812 0 : ( !aBtnNormalsFlat.IsChecked() && nValue == 1 ) ||
813 0 : ( !aBtnNormalsSphere.IsChecked() && nValue == 2 ) )
814 : {
815 0 : aBtnNormalsObj.Check( nValue == 0 );
816 0 : aBtnNormalsFlat.Check( nValue == 1 );
817 0 : aBtnNormalsSphere.Check( nValue == 2 );
818 0 : bUpdate = sal_True;
819 : }
820 : }
821 : else
822 : {
823 0 : if( aBtnNormalsObj.IsChecked() ||
824 0 : aBtnNormalsFlat.IsChecked() ||
825 0 : aBtnNormalsSphere.IsChecked() )
826 : {
827 0 : aBtnNormalsObj.Check( sal_False );
828 0 : aBtnNormalsFlat.Check( sal_False );
829 0 : aBtnNormalsSphere.Check( sal_False );
830 0 : bUpdate = sal_True;
831 : }
832 : }
833 :
834 : // Normal inverted
835 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_NORMALS_INVERT);
836 0 : if( eState != SFX_ITEM_DONTCARE )
837 : {
838 0 : sal_Bool bValue = ((const Svx3DNormalsInvertItem&)rAttrs.Get(SDRATTR_3DOBJ_NORMALS_INVERT)).GetValue();
839 0 : if( bValue != aBtnNormalsInvert.IsChecked() )
840 : {
841 0 : aBtnNormalsInvert.Check( bValue );
842 0 : bUpdate = sal_True;
843 : }
844 0 : else if( aBtnNormalsInvert.GetState() == STATE_DONTKNOW )
845 0 : aBtnNormalsInvert.Check( bValue );
846 : }
847 : else
848 : {
849 0 : if( aBtnNormalsInvert.GetState() != STATE_DONTKNOW )
850 : {
851 0 : aBtnNormalsInvert.SetState( STATE_DONTKNOW );
852 0 : bUpdate = sal_True;
853 : }
854 : }
855 :
856 : // 2-sided lighting
857 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING);
858 0 : if( eState != SFX_ITEM_DONTCARE )
859 : {
860 0 : sal_Bool bValue = ((const Svx3DTwoSidedLightingItem&)rAttrs.Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING)).GetValue();
861 0 : if( bValue != aBtnTwoSidedLighting.IsChecked() )
862 : {
863 0 : aBtnTwoSidedLighting.Check( bValue );
864 0 : bUpdate = sal_True;
865 : }
866 0 : else if( aBtnTwoSidedLighting.GetState() == STATE_DONTKNOW )
867 0 : aBtnTwoSidedLighting.Check( bValue );
868 : }
869 : else
870 : {
871 0 : if( aBtnTwoSidedLighting.GetState() != STATE_DONTKNOW )
872 : {
873 0 : aBtnTwoSidedLighting.SetState( STATE_DONTKNOW );
874 0 : bUpdate = sal_True;
875 : }
876 : }
877 :
878 : // Representation
879 : // Shademode
880 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_SHADE_MODE);
881 0 : if( eState != SFX_ITEM_DONTCARE )
882 : {
883 0 : sal_uInt16 nValue = ((const Svx3DShadeModeItem&)rAttrs.Get(SDRATTR_3DSCENE_SHADE_MODE)).GetValue();
884 0 : if( nValue != aLbShademode.GetSelectEntryPos() )
885 : {
886 0 : aLbShademode.SelectEntryPos( nValue );
887 0 : bUpdate = sal_True;
888 : }
889 : }
890 : else
891 : {
892 0 : if( aLbShademode.GetSelectEntryCount() != 0 )
893 : {
894 0 : aLbShademode.SetNoSelection();
895 0 : bUpdate = sal_True;
896 : }
897 : }
898 :
899 : // 3D-Shadow
900 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_SHADOW_3D);
901 0 : if( eState != SFX_ITEM_DONTCARE )
902 : {
903 0 : sal_Bool bValue = ((const Svx3DShadow3DItem&)rAttrs.Get(SDRATTR_3DOBJ_SHADOW_3D)).GetValue();
904 0 : if( bValue != aBtnShadow3d.IsChecked() )
905 : {
906 0 : aBtnShadow3d.Check( bValue );
907 0 : aFtSlant.Enable( bValue );
908 0 : aMtrSlant.Enable( bValue );
909 0 : bUpdate = sal_True;
910 : }
911 0 : else if( aBtnShadow3d.GetState() == STATE_DONTKNOW )
912 0 : aBtnShadow3d.Check( bValue );
913 : }
914 : else
915 : {
916 0 : if( aBtnShadow3d.GetState() != STATE_DONTKNOW )
917 : {
918 0 : aBtnShadow3d.SetState( STATE_DONTKNOW );
919 0 : bUpdate = sal_True;
920 : }
921 : }
922 :
923 : // Inclination (Shadow)
924 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_SHADOW_SLANT);
925 0 : if( eState != SFX_ITEM_DONTCARE )
926 : {
927 0 : sal_uInt16 nValue = ((const Svx3DShadowSlantItem&)rAttrs.Get(SDRATTR_3DSCENE_SHADOW_SLANT)).GetValue();
928 0 : if( nValue != aMtrSlant.GetValue() )
929 : {
930 0 : aMtrSlant.SetValue( nValue );
931 0 : bUpdate = sal_True;
932 : }
933 : }
934 : else
935 : {
936 0 : if( !aMtrSlant.IsEmptyFieldValue() )
937 : {
938 0 : aMtrSlant.SetEmptyFieldValue();
939 0 : bUpdate = sal_True;
940 : }
941 : }
942 :
943 : // Distance
944 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_DISTANCE);
945 0 : if( eState != SFX_ITEM_DONTCARE )
946 : {
947 0 : sal_uInt32 nValue = ((const Svx3DDistanceItem&)rAttrs.Get(SDRATTR_3DSCENE_DISTANCE)).GetValue();
948 0 : sal_uInt32 nValue2 = GetCoreValue( aMtrDistance, ePoolUnit );
949 0 : if( nValue != nValue2 )
950 : {
951 0 : if( eFUnit != aMtrDistance.GetUnit() )
952 0 : SetFieldUnit( aMtrDistance, eFUnit );
953 :
954 0 : SetMetricValue( aMtrDistance, nValue, ePoolUnit );
955 0 : bUpdate = sal_True;
956 : }
957 : }
958 : else
959 : {
960 0 : if( !aMtrDepth.IsEmptyFieldValue() )
961 : {
962 0 : aMtrDepth.SetEmptyFieldValue();
963 0 : bUpdate = sal_True;
964 : }
965 : }
966 :
967 : // Focal length
968 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_FOCAL_LENGTH);
969 0 : if( eState != SFX_ITEM_DONTCARE )
970 : {
971 0 : sal_uInt32 nValue = ((const Svx3DFocalLengthItem&)rAttrs.Get(SDRATTR_3DSCENE_FOCAL_LENGTH)).GetValue();
972 0 : sal_uInt32 nValue2 = GetCoreValue( aMtrFocalLength, ePoolUnit );
973 0 : if( nValue != nValue2 )
974 : {
975 0 : if( eFUnit != aMtrFocalLength.GetUnit() )
976 0 : SetFieldUnit( aMtrFocalLength, eFUnit );
977 :
978 0 : SetMetricValue( aMtrFocalLength, nValue, ePoolUnit );
979 0 : bUpdate = sal_True;
980 : }
981 : }
982 : else
983 : {
984 0 : if( !aMtrFocalLength.IsEmptyFieldValue() )
985 : {
986 0 : aMtrFocalLength.SetEmptyFieldValue();
987 0 : bUpdate = sal_True;
988 : }
989 : }
990 :
991 : // Lighting
992 0 : Color aColor;
993 0 : basegfx::B3DVector aVector;
994 : // Light 1 (Color)
995 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_1);
996 0 : if( eState != SFX_ITEM_DONTCARE )
997 : {
998 0 : aColor = ((const Svx3DLightcolor1Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1)).GetValue();
999 0 : ColorLB* pLb = &aLbLight1;
1000 0 : if( aColor != pLb->GetSelectEntryColor() )
1001 : {
1002 0 : LBSelectColor( pLb, aColor );
1003 0 : bUpdate = sal_True;
1004 : }
1005 : }
1006 : else
1007 : {
1008 0 : if( aLbLight1.GetSelectEntryCount() != 0 )
1009 : {
1010 0 : aLbLight1.SetNoSelection();
1011 0 : bUpdate = sal_True;
1012 : }
1013 : }
1014 : // Light 1 (on/off)
1015 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_1);
1016 0 : if( eState != SFX_ITEM_DONTCARE )
1017 : {
1018 0 : bool bOn = ((const Svx3DLightOnOff1Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_1)).GetValue() != 0;
1019 0 : if( ( bOn && !GetUILightState( aBtnLight1 )) ||
1020 0 : ( !bOn && GetUILightState( aBtnLight1 )) )
1021 : {
1022 0 : SetUILightState( aBtnLight1, bOn );
1023 0 : bUpdate = sal_True;
1024 : }
1025 0 : if( aBtnLight1.GetState() == STATE_DONTKNOW )
1026 0 : aBtnLight1.Check( aBtnLight1.IsChecked() );
1027 : }
1028 : else
1029 : {
1030 0 : if( aBtnLight1.GetState() != STATE_DONTKNOW )
1031 : {
1032 0 : aBtnLight1.SetState( STATE_DONTKNOW );
1033 0 : bUpdate = sal_True;
1034 : }
1035 : }
1036 : // Light 1 (direction)
1037 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_1);
1038 0 : if( eState != SFX_ITEM_DONTCARE )
1039 : {
1040 0 : bUpdate = sal_True;
1041 : }
1042 :
1043 : //Light 2 (color)
1044 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_2);
1045 0 : if( eState != SFX_ITEM_DONTCARE )
1046 : {
1047 0 : aColor = ((const Svx3DLightcolor2Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2)).GetValue();
1048 0 : ColorLB* pLb = &aLbLight2;
1049 0 : if( aColor != pLb->GetSelectEntryColor() )
1050 : {
1051 0 : LBSelectColor( pLb, aColor );
1052 0 : bUpdate = sal_True;
1053 : }
1054 : }
1055 : else
1056 : {
1057 0 : if( aLbLight2.GetSelectEntryCount() != 0 )
1058 : {
1059 0 : aLbLight2.SetNoSelection();
1060 0 : bUpdate = sal_True;
1061 : }
1062 : }
1063 : // Light 2 (on/off)
1064 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_2);
1065 0 : if( eState != SFX_ITEM_DONTCARE )
1066 : {
1067 0 : bool bOn = ((const Svx3DLightOnOff2Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_2)).GetValue() != 0;
1068 0 : if( ( bOn && !GetUILightState( aBtnLight2 )) ||
1069 0 : ( !bOn && GetUILightState( aBtnLight2 )) )
1070 : {
1071 0 : SetUILightState( aBtnLight2, bOn );
1072 0 : bUpdate = sal_True;
1073 : }
1074 0 : if( aBtnLight2.GetState() == STATE_DONTKNOW )
1075 0 : aBtnLight2.Check( aBtnLight2.IsChecked() );
1076 : }
1077 : else
1078 : {
1079 0 : if( aBtnLight2.GetState() != STATE_DONTKNOW )
1080 : {
1081 0 : aBtnLight2.SetState( STATE_DONTKNOW );
1082 0 : bUpdate = sal_True;
1083 : }
1084 : }
1085 : //Light 2 (Direction)
1086 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_2);
1087 0 : if( eState != SFX_ITEM_DONTCARE )
1088 : {
1089 0 : bUpdate = sal_True;
1090 : }
1091 :
1092 : //Light 3 (color)
1093 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_3);
1094 0 : if( eState != SFX_ITEM_DONTCARE )
1095 : {
1096 0 : aColor = ((const Svx3DLightcolor3Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3)).GetValue();
1097 0 : ColorLB* pLb = &aLbLight3;
1098 0 : if( aColor != pLb->GetSelectEntryColor() )
1099 : {
1100 0 : LBSelectColor( pLb, aColor );
1101 0 : bUpdate = sal_True;
1102 : }
1103 : }
1104 : else
1105 : {
1106 0 : if( aLbLight3.GetSelectEntryCount() != 0 )
1107 : {
1108 0 : aLbLight3.SetNoSelection();
1109 0 : bUpdate = sal_True;
1110 : }
1111 : }
1112 : // Ligh 3 (on/off)
1113 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_3);
1114 0 : if( eState != SFX_ITEM_DONTCARE )
1115 : {
1116 0 : bool bOn = ((const Svx3DLightOnOff3Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_3)).GetValue() != 0;
1117 0 : if( ( bOn && !GetUILightState( aBtnLight3)) ||
1118 0 : ( !bOn && GetUILightState( aBtnLight3)) )
1119 : {
1120 0 : SetUILightState( aBtnLight3, bOn );
1121 0 : bUpdate = sal_True;
1122 : }
1123 0 : if( aBtnLight3.GetState() == STATE_DONTKNOW )
1124 0 : aBtnLight3.Check( aBtnLight3.IsChecked() );
1125 : }
1126 : else
1127 : {
1128 0 : if( aBtnLight3.GetState() != STATE_DONTKNOW )
1129 : {
1130 0 : aBtnLight3.SetState( STATE_DONTKNOW );
1131 0 : bUpdate = sal_True;
1132 : }
1133 : }
1134 : // Light 3 (Direction)
1135 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_3);
1136 0 : if( eState != SFX_ITEM_DONTCARE )
1137 : {
1138 0 : bUpdate = sal_True;
1139 : }
1140 :
1141 : // Light 4 (Color)
1142 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_4);
1143 0 : if( eState != SFX_ITEM_DONTCARE )
1144 : {
1145 0 : aColor = ((const Svx3DLightcolor4Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4)).GetValue();
1146 0 : ColorLB* pLb = &aLbLight4;
1147 0 : if( aColor != pLb->GetSelectEntryColor() )
1148 : {
1149 0 : LBSelectColor( pLb, aColor );
1150 0 : bUpdate = sal_True;
1151 : }
1152 : }
1153 : else
1154 : {
1155 0 : if( aLbLight4.GetSelectEntryCount() != 0 )
1156 : {
1157 0 : aLbLight4.SetNoSelection();
1158 0 : bUpdate = sal_True;
1159 : }
1160 : }
1161 : // Light 4 (on/off)
1162 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_4);
1163 0 : if( eState != SFX_ITEM_DONTCARE )
1164 : {
1165 0 : bool bOn = ((const Svx3DLightOnOff4Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_4)).GetValue() != 0;
1166 0 : if( ( bOn && !GetUILightState( aBtnLight4 )) ||
1167 0 : ( !bOn && GetUILightState( aBtnLight4 )) )
1168 : {
1169 0 : SetUILightState( aBtnLight4, bOn );
1170 0 : bUpdate = sal_True;
1171 : }
1172 0 : if( aBtnLight4.GetState() == STATE_DONTKNOW )
1173 0 : aBtnLight4.Check( aBtnLight4.IsChecked() );
1174 : }
1175 : else
1176 : {
1177 0 : if( aBtnLight4.GetState() != STATE_DONTKNOW )
1178 : {
1179 0 : aBtnLight4.SetState( STATE_DONTKNOW );
1180 0 : bUpdate = sal_True;
1181 : }
1182 : }
1183 : // Light 4 (direction)
1184 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_4);
1185 0 : if( eState != SFX_ITEM_DONTCARE )
1186 : {
1187 0 : bUpdate = sal_True;
1188 : }
1189 :
1190 : // Light 5 (color)
1191 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_5);
1192 0 : if( eState != SFX_ITEM_DONTCARE )
1193 : {
1194 0 : aColor = ((const Svx3DLightcolor5Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5)).GetValue();
1195 0 : ColorLB* pLb = &aLbLight5;
1196 0 : if( aColor != pLb->GetSelectEntryColor() )
1197 : {
1198 0 : LBSelectColor( pLb, aColor );
1199 0 : bUpdate = sal_True;
1200 : }
1201 : }
1202 : else
1203 : {
1204 0 : if( aLbLight5.GetSelectEntryCount() != 0 )
1205 : {
1206 0 : aLbLight5.SetNoSelection();
1207 0 : bUpdate = sal_True;
1208 : }
1209 : }
1210 : // Light 5 (on/off)
1211 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_5);
1212 0 : if( eState != SFX_ITEM_DONTCARE )
1213 : {
1214 0 : bool bOn = ((const Svx3DLightOnOff5Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_5)).GetValue() != 0;
1215 0 : if( ( bOn && !GetUILightState( aBtnLight5 )) ||
1216 0 : ( !bOn && GetUILightState( aBtnLight5 )) )
1217 : {
1218 0 : SetUILightState( aBtnLight5, bOn );
1219 0 : bUpdate = sal_True;
1220 : }
1221 0 : if( aBtnLight5.GetState() == STATE_DONTKNOW )
1222 0 : aBtnLight5.Check( aBtnLight5.IsChecked() );
1223 : }
1224 : else
1225 : {
1226 0 : if( aBtnLight5.GetState() != STATE_DONTKNOW )
1227 : {
1228 0 : aBtnLight5.SetState( STATE_DONTKNOW );
1229 0 : bUpdate = sal_True;
1230 : }
1231 : }
1232 : // Light 5 (direction)
1233 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_5);
1234 0 : if( eState != SFX_ITEM_DONTCARE )
1235 : {
1236 0 : bUpdate = sal_True;
1237 : }
1238 :
1239 : // Light 6 (color)
1240 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_6);
1241 0 : if( eState != SFX_ITEM_DONTCARE )
1242 : {
1243 0 : aColor = ((const Svx3DLightcolor6Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6)).GetValue();
1244 0 : ColorLB* pLb = &aLbLight6;
1245 0 : if( aColor != pLb->GetSelectEntryColor() )
1246 : {
1247 0 : LBSelectColor( pLb, aColor );
1248 0 : bUpdate = sal_True;
1249 : }
1250 : }
1251 : else
1252 : {
1253 0 : if( aLbLight6.GetSelectEntryCount() != 0 )
1254 : {
1255 0 : aLbLight6.SetNoSelection();
1256 0 : bUpdate = sal_True;
1257 : }
1258 : }
1259 : // Light 6 (on/off)
1260 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_6);
1261 0 : if( eState != SFX_ITEM_DONTCARE )
1262 : {
1263 0 : bool bOn = ((const Svx3DLightOnOff6Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_6)).GetValue() != 0;
1264 0 : if( ( bOn && !GetUILightState( aBtnLight6 )) ||
1265 0 : ( !bOn && GetUILightState( aBtnLight6 )) )
1266 : {
1267 0 : SetUILightState( aBtnLight6, bOn );
1268 0 : bUpdate = sal_True;
1269 : }
1270 0 : if( aBtnLight6.GetState() == STATE_DONTKNOW )
1271 0 : aBtnLight6.Check( aBtnLight6.IsChecked() );
1272 : }
1273 : else
1274 : {
1275 0 : if( aBtnLight6.GetState() != STATE_DONTKNOW )
1276 : {
1277 0 : aBtnLight6.SetState( STATE_DONTKNOW );
1278 0 : bUpdate = sal_True;
1279 : }
1280 : }
1281 : // Light 6 (direction)
1282 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_6);
1283 0 : if( eState != SFX_ITEM_DONTCARE )
1284 : {
1285 0 : bUpdate = sal_True;
1286 : }
1287 :
1288 : // Light 7 (color)
1289 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_7);
1290 0 : if( eState != SFX_ITEM_DONTCARE )
1291 : {
1292 0 : aColor = ((const Svx3DLightcolor7Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7)).GetValue();
1293 0 : ColorLB* pLb = &aLbLight7;
1294 0 : if( aColor != pLb->GetSelectEntryColor() )
1295 : {
1296 0 : LBSelectColor( pLb, aColor );
1297 0 : bUpdate = sal_True;
1298 : }
1299 : }
1300 : else
1301 : {
1302 0 : if( aLbLight7.GetSelectEntryCount() != 0 )
1303 : {
1304 0 : aLbLight7.SetNoSelection();
1305 0 : bUpdate = sal_True;
1306 : }
1307 : }
1308 : // Light 7 (on/off)
1309 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_7);
1310 0 : if( eState != SFX_ITEM_DONTCARE )
1311 : {
1312 0 : bool bOn = ((const Svx3DLightOnOff7Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_7)).GetValue() != 0;
1313 0 : if( ( bOn && !GetUILightState( aBtnLight7 )) ||
1314 0 : ( !bOn && GetUILightState( aBtnLight7 )) )
1315 : {
1316 0 : SetUILightState( aBtnLight7 , bOn );
1317 0 : bUpdate = sal_True;
1318 : }
1319 0 : if( aBtnLight7.GetState() == STATE_DONTKNOW )
1320 0 : aBtnLight7.Check( aBtnLight7.IsChecked() );
1321 : }
1322 : else
1323 : {
1324 0 : if( aBtnLight7.GetState() != STATE_DONTKNOW )
1325 : {
1326 0 : aBtnLight7.SetState( STATE_DONTKNOW );
1327 0 : bUpdate = sal_True;
1328 : }
1329 : }
1330 : // Light 7 (direction)
1331 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_7);
1332 0 : if( eState != SFX_ITEM_DONTCARE )
1333 : {
1334 0 : bUpdate = sal_True;
1335 : }
1336 :
1337 : // Light 8 (color)
1338 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTCOLOR_8);
1339 0 : if( eState != SFX_ITEM_DONTCARE )
1340 : {
1341 0 : aColor = ((const Svx3DLightcolor8Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8)).GetValue();
1342 0 : ColorLB* pLb = &aLbLight8;
1343 0 : if( aColor != pLb->GetSelectEntryColor() )
1344 : {
1345 0 : LBSelectColor( pLb, aColor );
1346 0 : bUpdate = sal_True;
1347 : }
1348 : }
1349 : else
1350 : {
1351 0 : if( aLbLight8.GetSelectEntryCount() != 0 )
1352 : {
1353 0 : aLbLight8.SetNoSelection();
1354 0 : bUpdate = sal_True;
1355 : }
1356 : }
1357 : // Light 8 (on/off)
1358 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTON_8);
1359 0 : if( eState != SFX_ITEM_DONTCARE )
1360 : {
1361 0 : bool bOn = ((const Svx3DLightOnOff8Item&)rAttrs.Get(SDRATTR_3DSCENE_LIGHTON_8)).GetValue() != 0;
1362 0 : if( ( bOn && !GetUILightState( aBtnLight8 )) ||
1363 0 : ( !bOn && GetUILightState( aBtnLight8 )) )
1364 : {
1365 0 : SetUILightState( aBtnLight8, bOn );
1366 0 : bUpdate = sal_True;
1367 : }
1368 0 : if( aBtnLight8.GetState() == STATE_DONTKNOW )
1369 0 : aBtnLight8.Check( aBtnLight8.IsChecked() );
1370 : }
1371 : else
1372 : {
1373 0 : if( aBtnLight8.GetState() != STATE_DONTKNOW )
1374 : {
1375 0 : aBtnLight8.SetState( STATE_DONTKNOW );
1376 0 : bUpdate = sal_True;
1377 : }
1378 : }
1379 : // Light 8 (direction)
1380 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_LIGHTDIRECTION_8);
1381 0 : if( eState != SFX_ITEM_DONTCARE )
1382 : {
1383 0 : bUpdate = sal_True;
1384 : }
1385 :
1386 : // Ambient light
1387 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_AMBIENTCOLOR);
1388 0 : if( eState != SFX_ITEM_DONTCARE )
1389 : {
1390 0 : aColor = ((const Svx3DAmbientcolorItem&)rAttrs.Get(SDRATTR_3DSCENE_AMBIENTCOLOR)).GetValue();
1391 0 : ColorLB* pLb = &aLbAmbientlight;
1392 0 : if( aColor != pLb->GetSelectEntryColor() )
1393 : {
1394 0 : LBSelectColor( pLb, aColor );
1395 0 : bUpdate = sal_True;
1396 : }
1397 : }
1398 : else
1399 : {
1400 0 : if( aLbAmbientlight.GetSelectEntryCount() != 0 )
1401 : {
1402 0 : aLbAmbientlight.SetNoSelection();
1403 0 : bUpdate = sal_True;
1404 : }
1405 : }
1406 :
1407 :
1408 : // Textures
1409 : // Art
1410 0 : if( bBitmap )
1411 : {
1412 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_TEXTURE_KIND);
1413 0 : if( eState != SFX_ITEM_DONTCARE )
1414 : {
1415 0 : sal_uInt16 nValue = ((const Svx3DTextureKindItem&)rAttrs.Get(SDRATTR_3DOBJ_TEXTURE_KIND)).GetValue();
1416 :
1417 0 : if( ( !aBtnTexLuminance.IsChecked() && nValue == 1 ) ||
1418 0 : ( !aBtnTexColor.IsChecked() && nValue == 3 ) )
1419 : {
1420 0 : aBtnTexLuminance.Check( nValue == 1 );
1421 0 : aBtnTexColor.Check( nValue == 3 );
1422 0 : bUpdate = sal_True;
1423 : }
1424 : }
1425 : else
1426 : {
1427 0 : if( aBtnTexLuminance.IsChecked() ||
1428 0 : aBtnTexColor.IsChecked() )
1429 : {
1430 0 : aBtnTexLuminance.Check( sal_False );
1431 0 : aBtnTexColor.Check( sal_False );
1432 0 : bUpdate = sal_True;
1433 : }
1434 : }
1435 :
1436 : // Mode
1437 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_TEXTURE_MODE);
1438 0 : if( eState != SFX_ITEM_DONTCARE )
1439 : {
1440 0 : sal_uInt16 nValue = ((const Svx3DTextureModeItem&)rAttrs.Get(SDRATTR_3DOBJ_TEXTURE_MODE)).GetValue();
1441 :
1442 0 : if( ( !aBtnTexReplace.IsChecked() && nValue == 1 ) ||
1443 0 : ( !aBtnTexModulate.IsChecked() && nValue == 2 ) )
1444 : {
1445 0 : aBtnTexReplace.Check( nValue == 1 );
1446 0 : aBtnTexModulate.Check( nValue == 2 );
1447 0 : bUpdate = sal_True;
1448 : }
1449 : }
1450 : else
1451 : {
1452 0 : if( aBtnTexReplace.IsChecked() ||
1453 0 : aBtnTexModulate.IsChecked() )
1454 : {
1455 0 : aBtnTexReplace.Check( sal_False );
1456 0 : aBtnTexModulate.Check( sal_False );
1457 0 : bUpdate = sal_True;
1458 : }
1459 : }
1460 :
1461 : // Projection X
1462 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_TEXTURE_PROJ_X);
1463 0 : if( eState != SFX_ITEM_DONTCARE )
1464 : {
1465 0 : sal_uInt16 nValue = ((const Svx3DTextureProjectionXItem&)rAttrs.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_X)).GetValue();
1466 :
1467 0 : if( ( !aBtnTexObjectX.IsChecked() && nValue == 0 ) ||
1468 0 : ( !aBtnTexParallelX.IsChecked() && nValue == 1 ) ||
1469 0 : ( !aBtnTexCircleX.IsChecked() && nValue == 2 ) )
1470 : {
1471 0 : aBtnTexObjectX.Check( nValue == 0 );
1472 0 : aBtnTexParallelX.Check( nValue == 1 );
1473 0 : aBtnTexCircleX.Check( nValue == 2 );
1474 0 : bUpdate = sal_True;
1475 : }
1476 : }
1477 : else
1478 : {
1479 0 : if( aBtnTexObjectX.IsChecked() ||
1480 0 : aBtnTexParallelX.IsChecked() ||
1481 0 : aBtnTexCircleX.IsChecked() )
1482 : {
1483 0 : aBtnTexObjectX.Check( sal_False );
1484 0 : aBtnTexParallelX.Check( sal_False );
1485 0 : aBtnTexCircleX.Check( sal_False );
1486 0 : bUpdate = sal_True;
1487 : }
1488 : }
1489 :
1490 : // Projection Y
1491 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_TEXTURE_PROJ_Y);
1492 0 : if( eState != SFX_ITEM_DONTCARE )
1493 : {
1494 0 : sal_uInt16 nValue = ((const Svx3DTextureProjectionYItem&)rAttrs.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_Y)).GetValue();
1495 :
1496 0 : if( ( !aBtnTexObjectY.IsChecked() && nValue == 0 ) ||
1497 0 : ( !aBtnTexParallelY.IsChecked() && nValue == 1 ) ||
1498 0 : ( !aBtnTexCircleY.IsChecked() && nValue == 2 ) )
1499 : {
1500 0 : aBtnTexObjectY.Check( nValue == 0 );
1501 0 : aBtnTexParallelY.Check( nValue == 1 );
1502 0 : aBtnTexCircleY.Check( nValue == 2 );
1503 0 : bUpdate = sal_True;
1504 : }
1505 : }
1506 : else
1507 : {
1508 0 : if( aBtnTexObjectY.IsChecked() ||
1509 0 : aBtnTexParallelY.IsChecked() ||
1510 0 : aBtnTexCircleY.IsChecked() )
1511 : {
1512 0 : aBtnTexObjectY.Check( sal_False );
1513 0 : aBtnTexParallelY.Check( sal_False );
1514 0 : aBtnTexCircleY.Check( sal_False );
1515 0 : bUpdate = sal_True;
1516 : }
1517 : }
1518 :
1519 : // Filter
1520 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_TEXTURE_FILTER);
1521 0 : if( eState != SFX_ITEM_DONTCARE )
1522 : {
1523 0 : sal_Bool bValue = ((const Svx3DTextureFilterItem&)rAttrs.Get(SDRATTR_3DOBJ_TEXTURE_FILTER)).GetValue();
1524 0 : if( bValue != aBtnTexFilter.IsChecked() )
1525 : {
1526 0 : aBtnTexFilter.Check( bValue );
1527 0 : bUpdate = sal_True;
1528 : }
1529 0 : if( aBtnTexFilter.GetState() == STATE_DONTKNOW )
1530 0 : aBtnTexFilter.Check( bValue );
1531 : }
1532 : else
1533 : {
1534 0 : if( aBtnTexFilter.GetState() != STATE_DONTKNOW )
1535 : {
1536 0 : aBtnTexFilter.SetState( STATE_DONTKNOW );
1537 0 : bUpdate = sal_True;
1538 : }
1539 : }
1540 : }
1541 :
1542 :
1543 : // Material Favorites
1544 0 : aLbMatFavorites.SelectEntryPos( 0 );
1545 :
1546 : // Object color
1547 0 : eState = rAttrs.GetItemState(XATTR_FILLCOLOR);
1548 0 : if( eState != SFX_ITEM_DONTCARE )
1549 : {
1550 0 : aColor = ((const XFillColorItem&)rAttrs.Get(XATTR_FILLCOLOR)).GetColorValue();
1551 0 : ColorLB* pLb = &aLbMatColor;
1552 0 : if( aColor != pLb->GetSelectEntryColor() )
1553 : {
1554 0 : LBSelectColor( pLb, aColor );
1555 0 : bUpdate = sal_True;
1556 : }
1557 : }
1558 : else
1559 : {
1560 0 : if( aLbMatColor.GetSelectEntryCount() != 0 )
1561 : {
1562 0 : aLbMatColor.SetNoSelection();
1563 0 : bUpdate = sal_True;
1564 : }
1565 : }
1566 :
1567 : // Self-luminous color
1568 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_MAT_EMISSION);
1569 0 : if( eState != SFX_ITEM_DONTCARE )
1570 : {
1571 0 : aColor = ((const Svx3DMaterialEmissionItem&)rAttrs.Get(SDRATTR_3DOBJ_MAT_EMISSION)).GetValue();
1572 0 : ColorLB* pLb = &aLbMatEmission;
1573 0 : if( aColor != pLb->GetSelectEntryColor() )
1574 : {
1575 0 : LBSelectColor( pLb, aColor );
1576 0 : bUpdate = sal_True;
1577 : }
1578 : }
1579 : else
1580 : {
1581 0 : if( aLbMatEmission.GetSelectEntryCount() != 0 )
1582 : {
1583 0 : aLbMatEmission.SetNoSelection();
1584 0 : bUpdate = sal_True;
1585 : }
1586 : }
1587 :
1588 : // Specular
1589 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_MAT_SPECULAR);
1590 0 : if( eState != SFX_ITEM_DONTCARE )
1591 : {
1592 0 : aColor = ((const Svx3DMaterialSpecularItem&)rAttrs.Get(SDRATTR_3DOBJ_MAT_SPECULAR)).GetValue();
1593 0 : ColorLB* pLb = &aLbMatSpecular;
1594 0 : if( aColor != pLb->GetSelectEntryColor() )
1595 : {
1596 0 : LBSelectColor( pLb, aColor );
1597 0 : bUpdate = sal_True;
1598 : }
1599 : }
1600 : else
1601 : {
1602 0 : if( aLbMatSpecular.GetSelectEntryCount() != 0 )
1603 : {
1604 0 : aLbMatSpecular.SetNoSelection();
1605 0 : bUpdate = sal_True;
1606 : }
1607 : }
1608 :
1609 : // Specular Intensity
1610 0 : eState = rAttrs.GetItemState(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY);
1611 0 : if( eState != SFX_ITEM_DONTCARE )
1612 : {
1613 0 : sal_uInt16 nValue = ((const Svx3DMaterialSpecularIntensityItem&)rAttrs.Get(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY)).GetValue();
1614 0 : if( nValue != aMtrMatSpecularIntensity.GetValue() )
1615 : {
1616 0 : aMtrMatSpecularIntensity.SetValue( nValue );
1617 0 : bUpdate = sal_True;
1618 : }
1619 : }
1620 : else
1621 : {
1622 0 : if( !aMtrMatSpecularIntensity.IsEmptyFieldValue() )
1623 : {
1624 0 : aMtrMatSpecularIntensity.SetEmptyFieldValue();
1625 0 : bUpdate = sal_True;
1626 : }
1627 : }
1628 :
1629 :
1630 : // Other
1631 : // Perspective
1632 0 : eState = rAttrs.GetItemState(SDRATTR_3DSCENE_PERSPECTIVE);
1633 0 : if( eState != SFX_ITEM_DONTCARE )
1634 : {
1635 0 : ProjectionType ePT = (ProjectionType)((const Svx3DPerspectiveItem&)rAttrs.Get(SDRATTR_3DSCENE_PERSPECTIVE)).GetValue();
1636 0 : if( ( !aBtnPerspective.IsChecked() && ePT == PR_PERSPECTIVE ) ||
1637 0 : ( aBtnPerspective.IsChecked() && ePT == PR_PARALLEL ) )
1638 : {
1639 0 : aBtnPerspective.Check( ePT == PR_PERSPECTIVE );
1640 0 : bUpdate = sal_True;
1641 : }
1642 0 : if( aBtnPerspective.GetState() == STATE_DONTKNOW )
1643 0 : aBtnPerspective.Check( ePT == PR_PERSPECTIVE );
1644 : }
1645 : else
1646 : {
1647 0 : if( aBtnPerspective.GetState() != STATE_DONTKNOW )
1648 : {
1649 0 : aBtnPerspective.SetState( STATE_DONTKNOW );
1650 0 : bUpdate = sal_True;
1651 : }
1652 : }
1653 :
1654 0 : if( !bUpdate && !bOnly3DChanged )
1655 : {
1656 : // however the 2D attributes may be different. Compare these and decide
1657 :
1658 0 : bUpdate = sal_True;
1659 : }
1660 :
1661 0 : if( bUpdate || bOnly3DChanged )
1662 : {
1663 : // Update preview
1664 0 : SfxItemSet aSet(rAttrs);
1665 :
1666 : // set LineStyle hard to XLINE_NONE when it's not set so that
1667 : // the default (XLINE_SOLID) is not used for 3d preview
1668 0 : if(SFX_ITEM_SET != aSet.GetItemState(XATTR_LINESTYLE, sal_False))
1669 0 : aSet.Put(XLineStyleItem(XLINE_NONE));
1670 :
1671 : // set FillColor hard to WHITE when it's SFX_ITEM_DONTCARE so that
1672 : // the default (Blue7) is not used for 3d preview
1673 0 : if(SFX_ITEM_DONTCARE == aSet.GetItemState(XATTR_FILLCOLOR, sal_False))
1674 0 : aSet.Put(XFillColorItem(String(), Color(COL_WHITE)));
1675 :
1676 0 : aCtlPreview.Set3DAttributes(aSet);
1677 0 : aCtlLightPreview.GetSvx3DLightControl().Set3DAttributes(aSet);
1678 :
1679 : // try to select light corresponding to active button
1680 0 : sal_uInt32 nNumber(0xffffffff);
1681 :
1682 0 : if(aBtnLight1.IsChecked())
1683 0 : nNumber = 0;
1684 0 : else if(aBtnLight2.IsChecked())
1685 0 : nNumber = 1;
1686 0 : else if(aBtnLight3.IsChecked())
1687 0 : nNumber = 2;
1688 0 : else if(aBtnLight4.IsChecked())
1689 0 : nNumber = 3;
1690 0 : else if(aBtnLight5.IsChecked())
1691 0 : nNumber = 4;
1692 0 : else if(aBtnLight6.IsChecked())
1693 0 : nNumber = 5;
1694 0 : else if(aBtnLight7.IsChecked())
1695 0 : nNumber = 6;
1696 0 : else if(aBtnLight8.IsChecked())
1697 0 : nNumber = 7;
1698 :
1699 0 : if(nNumber != 0xffffffff)
1700 : {
1701 0 : aCtlLightPreview.GetSvx3DLightControl().SelectLight(nNumber);
1702 0 : }
1703 : }
1704 :
1705 : // handle state of converts possible
1706 0 : aBtnConvertTo3D.Enable(pConvertTo3DItem->GetState());
1707 0 : aBtnLatheObject.Enable(pConvertTo3DLatheItem->GetState());
1708 0 : }
1709 :
1710 : // -----------------------------------------------------------------------
1711 0 : void Svx3DWin::GetAttr( SfxItemSet& rAttrs )
1712 : {
1713 : // get remembered 2d attributes from the dialog
1714 0 : if(mpRemember2DAttributes)
1715 : {
1716 0 : SfxWhichIter aIter(*mpRemember2DAttributes);
1717 0 : sal_uInt16 nWhich(aIter.FirstWhich());
1718 :
1719 0 : while(nWhich)
1720 : {
1721 0 : SfxItemState eState = mpRemember2DAttributes->GetItemState(nWhich, sal_False);
1722 0 : if(SFX_ITEM_DONTCARE == eState)
1723 0 : rAttrs.InvalidateItem(nWhich);
1724 0 : else if(SFX_ITEM_SET == eState)
1725 0 : rAttrs.Put(mpRemember2DAttributes->Get(nWhich, sal_False));
1726 :
1727 0 : nWhich = aIter.NextWhich();
1728 0 : }
1729 : }
1730 :
1731 : //Others must stand as the front on all sides
1732 : // Perspective
1733 0 : if( aBtnPerspective.GetState() != STATE_DONTKNOW )
1734 : {
1735 : sal_uInt16 nValue;
1736 0 : if( aBtnPerspective.IsChecked() )
1737 0 : nValue = PR_PERSPECTIVE;
1738 : else
1739 0 : nValue = PR_PARALLEL;
1740 0 : rAttrs.Put(Svx3DPerspectiveItem(nValue));
1741 : }
1742 : else
1743 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_PERSPECTIVE);
1744 :
1745 : // Geometry
1746 : // Possible determine PoolUnit (in this case this haas not happend in Update() )
1747 0 : if( !mpImpl->pPool )
1748 : {
1749 : OSL_FAIL( "No Pool in GetAttr()! May be incompatible to drviewsi.cxx ?" );
1750 0 : mpImpl->pPool = rAttrs.GetPool();
1751 : DBG_ASSERT( mpImpl->pPool, "Where is the Pool?" );
1752 0 : ePoolUnit = mpImpl->pPool->GetMetric( SID_ATTR_LINE_WIDTH );
1753 :
1754 0 : eFUnit = GetModuleFieldUnit( rAttrs );
1755 : }
1756 :
1757 : // Number of segments (horizontal)
1758 0 : if( !aNumHorizontal.IsEmptyFieldValue() )
1759 : {
1760 0 : sal_uInt32 nValue = static_cast<sal_uInt32>(aNumHorizontal.GetValue());
1761 0 : rAttrs.Put(Svx3DHorizontalSegmentsItem(nValue));
1762 : }
1763 : else
1764 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_HORZ_SEGS);
1765 :
1766 : // Number of segments (vertical)
1767 0 : if( !aNumVertical.IsEmptyFieldValue() )
1768 : {
1769 0 : sal_uInt32 nValue = static_cast<sal_uInt32>(aNumVertical.GetValue());
1770 0 : rAttrs.Put(Svx3DVerticalSegmentsItem(nValue));
1771 : }
1772 : else
1773 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_VERT_SEGS);
1774 :
1775 : // Depth
1776 0 : if( !aMtrDepth.IsEmptyFieldValue() )
1777 : {
1778 0 : sal_uInt32 nValue = GetCoreValue( aMtrDepth, ePoolUnit );
1779 0 : rAttrs.Put(Svx3DDepthItem(nValue));
1780 : }
1781 : else
1782 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_DEPTH);
1783 :
1784 : // Double-sided
1785 0 : TriState eState = aBtnDoubleSided.GetState();
1786 0 : if( eState != STATE_DONTKNOW )
1787 : {
1788 0 : sal_Bool bValue = STATE_CHECK == eState;
1789 0 : rAttrs.Put(Svx3DDoubleSidedItem(bValue));
1790 : }
1791 : else
1792 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_DOUBLE_SIDED);
1793 :
1794 : // Edge rounding
1795 0 : if( !aMtrPercentDiagonal.IsEmptyFieldValue() )
1796 : {
1797 0 : sal_uInt16 nValue = (sal_uInt16) aMtrPercentDiagonal.GetValue();
1798 0 : rAttrs.Put(Svx3DPercentDiagonalItem(nValue));
1799 : }
1800 : else
1801 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_PERCENT_DIAGONAL);
1802 :
1803 : // Depth scale
1804 0 : if( !aMtrBackscale.IsEmptyFieldValue() )
1805 : {
1806 0 : sal_uInt16 nValue = (sal_uInt16)aMtrBackscale.GetValue();
1807 0 : rAttrs.Put(Svx3DBackscaleItem(nValue));
1808 : }
1809 : else
1810 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_BACKSCALE);
1811 :
1812 : // End angle
1813 0 : if( !aMtrEndAngle.IsEmptyFieldValue() )
1814 : {
1815 0 : sal_uInt16 nValue = (sal_uInt16)aMtrEndAngle.GetValue();
1816 0 : rAttrs.Put(Svx3DEndAngleItem(nValue));
1817 : }
1818 : else
1819 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_END_ANGLE);
1820 :
1821 : // Normal type
1822 0 : sal_uInt16 nValue = 99;
1823 0 : if( aBtnNormalsObj.IsChecked() )
1824 0 : nValue = 0;
1825 0 : else if( aBtnNormalsFlat.IsChecked() )
1826 0 : nValue = 1;
1827 0 : else if( aBtnNormalsSphere.IsChecked() )
1828 0 : nValue = 2;
1829 :
1830 0 : if( nValue <= 2 )
1831 0 : rAttrs.Put(Svx3DNormalsKindItem(nValue));
1832 : else
1833 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_NORMALS_KIND);
1834 :
1835 : // Normal inverted
1836 0 : eState = aBtnNormalsInvert.GetState();
1837 0 : if( eState != STATE_DONTKNOW )
1838 : {
1839 0 : sal_Bool bValue = STATE_CHECK == eState;
1840 0 : rAttrs.Put(Svx3DNormalsInvertItem(bValue));
1841 : }
1842 : else
1843 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_NORMALS_INVERT);
1844 :
1845 : // 2-sided lighting
1846 0 : eState = aBtnTwoSidedLighting.GetState();
1847 0 : if( eState != STATE_DONTKNOW )
1848 : {
1849 0 : sal_Bool bValue = STATE_CHECK == eState;
1850 0 : rAttrs.Put(Svx3DTwoSidedLightingItem(bValue));
1851 : }
1852 : else
1853 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING);
1854 :
1855 : // Representation
1856 : // Shade mode
1857 0 : if( aLbShademode.GetSelectEntryCount() )
1858 : {
1859 0 : nValue = aLbShademode.GetSelectEntryPos();
1860 0 : rAttrs.Put(Svx3DShadeModeItem(nValue));
1861 : }
1862 : else
1863 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_SHADE_MODE);
1864 :
1865 : // 3D-Shadow
1866 0 : eState = aBtnShadow3d.GetState();
1867 0 : if( eState != STATE_DONTKNOW )
1868 : {
1869 0 : sal_Bool bValue = STATE_CHECK == eState;
1870 0 : rAttrs.Put(Svx3DShadow3DItem(bValue));
1871 0 : rAttrs.Put(SdrShadowItem(bValue));
1872 : }
1873 : else
1874 : {
1875 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_SHADOW_3D);
1876 0 : rAttrs.InvalidateItem(SDRATTR_SHADOW);
1877 : }
1878 :
1879 : // Slant (Shadow)
1880 0 : if( !aMtrSlant.IsEmptyFieldValue() )
1881 : {
1882 0 : sal_uInt16 nValue2 = (sal_uInt16) aMtrSlant.GetValue();
1883 0 : rAttrs.Put(Svx3DShadowSlantItem(nValue2));
1884 : }
1885 : else
1886 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_SHADOW_SLANT);
1887 :
1888 : // Distance
1889 0 : if( !aMtrDistance.IsEmptyFieldValue() )
1890 : {
1891 0 : sal_uInt32 nValue2 = GetCoreValue( aMtrDistance, ePoolUnit );
1892 0 : rAttrs.Put(Svx3DDistanceItem(nValue2));
1893 : }
1894 : else
1895 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_DISTANCE);
1896 :
1897 : // Focal length
1898 0 : if( !aMtrFocalLength.IsEmptyFieldValue() )
1899 : {
1900 0 : sal_uInt32 nValue2 = GetCoreValue( aMtrFocalLength, ePoolUnit );
1901 0 : rAttrs.Put(Svx3DFocalLengthItem(nValue2));
1902 : }
1903 : else
1904 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_FOCAL_LENGTH);
1905 :
1906 : // Lighting
1907 0 : Image aImg;
1908 0 : basegfx::B3DVector aVector;
1909 0 : Color aColor;
1910 0 : const SfxItemSet aLightItemSet(aCtlLightPreview.GetSvx3DLightControl().Get3DAttributes());
1911 :
1912 : // Light 1 color
1913 0 : if( aLbLight1.GetSelectEntryCount() )
1914 : {
1915 0 : aColor = aLbLight1.GetSelectEntryColor();
1916 0 : rAttrs.Put(Svx3DLightcolor1Item(aColor));
1917 : }
1918 : else
1919 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_1);
1920 : // Light 1 (on/off)
1921 0 : eState = aBtnLight1.GetState();
1922 0 : if( eState != STATE_DONTKNOW )
1923 : {
1924 0 : sal_Bool bValue = GetUILightState( aBtnLight1 );
1925 0 : rAttrs.Put(Svx3DLightOnOff1Item(bValue));
1926 :
1927 : // Light 1 (direction)
1928 0 : if( bValue )
1929 : {
1930 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_1));
1931 : }
1932 : }
1933 : else
1934 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_1);
1935 :
1936 :
1937 : // Light 2 color
1938 0 : if( aLbLight2.GetSelectEntryCount() )
1939 : {
1940 0 : aColor = aLbLight2.GetSelectEntryColor();
1941 0 : rAttrs.Put(Svx3DLightcolor2Item(aColor));
1942 : }
1943 : else
1944 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_2);
1945 : // Light 2 (on/off)
1946 0 : eState = aBtnLight2.GetState();
1947 0 : if( eState != STATE_DONTKNOW )
1948 : {
1949 0 : sal_Bool bValue = GetUILightState( aBtnLight2 );
1950 0 : rAttrs.Put(Svx3DLightOnOff2Item(bValue));
1951 :
1952 : // Light 2 (direction)
1953 0 : if( bValue )
1954 : {
1955 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_2));
1956 : }
1957 : }
1958 : else
1959 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_2);
1960 :
1961 : // Light 3 color
1962 0 : if( aLbLight3.GetSelectEntryCount() )
1963 : {
1964 0 : aColor = aLbLight3.GetSelectEntryColor();
1965 0 : rAttrs.Put(Svx3DLightcolor3Item(aColor));
1966 : }
1967 : else
1968 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_3);
1969 : // Light 3 (on/off)
1970 0 : eState = aBtnLight3.GetState();
1971 0 : if( eState != STATE_DONTKNOW )
1972 : {
1973 0 : sal_Bool bValue = GetUILightState( aBtnLight3 );
1974 0 : rAttrs.Put(Svx3DLightOnOff3Item(bValue));
1975 :
1976 : // Light 3 (direction)
1977 0 : if( bValue )
1978 : {
1979 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_3));
1980 : }
1981 : }
1982 : else
1983 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_3);
1984 :
1985 : // Light 4 color
1986 0 : if( aLbLight4.GetSelectEntryCount() )
1987 : {
1988 0 : aColor = aLbLight4.GetSelectEntryColor();
1989 0 : rAttrs.Put(Svx3DLightcolor4Item(aColor));
1990 : }
1991 : else
1992 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_4);
1993 : // Light 4 (on/off)
1994 0 : eState = aBtnLight4.GetState();
1995 0 : if( eState != STATE_DONTKNOW )
1996 : {
1997 0 : sal_Bool bValue = GetUILightState( aBtnLight4 );
1998 0 : rAttrs.Put(Svx3DLightOnOff4Item(bValue));
1999 :
2000 : // Light 4 (direction)
2001 0 : if( bValue )
2002 : {
2003 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_4));
2004 : }
2005 : }
2006 : else
2007 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_4);
2008 :
2009 : // Light 5 color
2010 0 : if( aLbLight5.GetSelectEntryCount() )
2011 : {
2012 0 : aColor = aLbLight5.GetSelectEntryColor();
2013 0 : rAttrs.Put(Svx3DLightcolor5Item(aColor));
2014 : }
2015 : else
2016 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_5);
2017 : // Light 5 (on/off)
2018 0 : eState = aBtnLight5.GetState();
2019 0 : if( eState != STATE_DONTKNOW )
2020 : {
2021 0 : sal_Bool bValue = GetUILightState( aBtnLight5 );
2022 0 : rAttrs.Put(Svx3DLightOnOff5Item(bValue));
2023 :
2024 : // Light 5 (direction)
2025 0 : if( bValue )
2026 : {
2027 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_5));
2028 : }
2029 : }
2030 : else
2031 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_5);
2032 :
2033 : // Light 6 color
2034 0 : if( aLbLight6.GetSelectEntryCount() )
2035 : {
2036 0 : aColor = aLbLight6.GetSelectEntryColor();
2037 0 : rAttrs.Put(Svx3DLightcolor6Item(aColor));
2038 : }
2039 : else
2040 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_6);
2041 : // Light 6 (on/off)
2042 0 : eState = aBtnLight6.GetState();
2043 0 : if( eState != STATE_DONTKNOW )
2044 : {
2045 0 : sal_Bool bValue = GetUILightState( aBtnLight6 );
2046 0 : rAttrs.Put(Svx3DLightOnOff6Item(bValue));
2047 :
2048 : // Light 6 (direction)
2049 0 : if( bValue )
2050 : {
2051 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_6));
2052 : }
2053 : }
2054 : else
2055 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_6);
2056 :
2057 : // Light 7 color
2058 0 : if( aLbLight7.GetSelectEntryCount() )
2059 : {
2060 0 : aColor = aLbLight7.GetSelectEntryColor();
2061 0 : rAttrs.Put(Svx3DLightcolor7Item(aColor));
2062 : }
2063 : else
2064 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_7);
2065 : // Light 7 (on/off)
2066 0 : eState = aBtnLight7.GetState();
2067 0 : if( eState != STATE_DONTKNOW )
2068 : {
2069 0 : sal_Bool bValue = GetUILightState( aBtnLight7 );
2070 0 : rAttrs.Put(Svx3DLightOnOff7Item(bValue));
2071 :
2072 : // Light 7 (direction)
2073 0 : if( bValue )
2074 : {
2075 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_7));
2076 : }
2077 : }
2078 : else
2079 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_7);
2080 :
2081 : // Light 8 color
2082 0 : if( aLbLight8.GetSelectEntryCount() )
2083 : {
2084 0 : aColor = aLbLight8.GetSelectEntryColor();
2085 0 : rAttrs.Put(Svx3DLightcolor8Item(aColor));
2086 : }
2087 : else
2088 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTCOLOR_8);
2089 : // Light 8 (on/off)
2090 0 : eState = aBtnLight8.GetState();
2091 0 : if( eState != STATE_DONTKNOW )
2092 : {
2093 0 : sal_Bool bValue = GetUILightState( aBtnLight8 );
2094 0 : rAttrs.Put(Svx3DLightOnOff8Item(bValue));
2095 :
2096 : // Light 8 (direction)
2097 0 : if( bValue )
2098 : {
2099 0 : rAttrs.Put(aLightItemSet.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_8));
2100 : }
2101 : }
2102 : else
2103 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_LIGHTON_8);
2104 :
2105 : // Ambient light
2106 0 : if( aLbAmbientlight.GetSelectEntryCount() )
2107 : {
2108 0 : aColor = aLbAmbientlight.GetSelectEntryColor();
2109 0 : rAttrs.Put(Svx3DAmbientcolorItem(aColor));
2110 : }
2111 : else
2112 0 : rAttrs.InvalidateItem(SDRATTR_3DSCENE_AMBIENTCOLOR);
2113 :
2114 : // Textures
2115 : // Art
2116 0 : nValue = 3;
2117 0 : if( aBtnTexLuminance.IsChecked() )
2118 0 : nValue = 1;
2119 0 : else if( aBtnTexColor.IsChecked() )
2120 0 : nValue = 3;
2121 :
2122 0 : if( nValue == 1 || nValue == 3 )
2123 0 : rAttrs.Put(Svx3DTextureKindItem(nValue));
2124 : else
2125 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_TEXTURE_KIND);
2126 :
2127 :
2128 : // Mode
2129 0 : nValue = 99;
2130 0 : if( aBtnTexReplace.IsChecked() )
2131 0 : nValue = 1;
2132 0 : else if( aBtnTexModulate.IsChecked() )
2133 0 : nValue = 2;
2134 :
2135 0 : if( nValue == 1 || nValue == 2 )
2136 0 : rAttrs.Put(Svx3DTextureModeItem(nValue));
2137 : else
2138 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_TEXTURE_MODE);
2139 :
2140 : // X projection
2141 0 : nValue = 99;
2142 0 : if( aBtnTexObjectX.IsChecked() )
2143 0 : nValue = 0;
2144 0 : else if( aBtnTexParallelX.IsChecked() )
2145 0 : nValue = 1;
2146 0 : else if( aBtnTexCircleX.IsChecked() )
2147 0 : nValue = 2;
2148 :
2149 0 : if( nValue <= 2 )
2150 0 : rAttrs.Put(Svx3DTextureProjectionXItem(nValue));
2151 : else
2152 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_TEXTURE_PROJ_X);
2153 :
2154 : // Y projection
2155 0 : nValue = 99;
2156 0 : if( aBtnTexObjectY.IsChecked() )
2157 0 : nValue = 0;
2158 0 : else if( aBtnTexParallelY.IsChecked() )
2159 0 : nValue = 1;
2160 0 : else if( aBtnTexCircleY.IsChecked() )
2161 0 : nValue = 2;
2162 :
2163 0 : if( nValue <= 2 )
2164 0 : rAttrs.Put(Svx3DTextureProjectionYItem(nValue));
2165 : else
2166 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_TEXTURE_PROJ_Y);
2167 :
2168 :
2169 : // Filter
2170 0 : eState = aBtnTexFilter.GetState();
2171 0 : if( eState != STATE_DONTKNOW )
2172 : {
2173 0 : sal_Bool bValue = STATE_CHECK == eState;
2174 0 : rAttrs.Put(Svx3DTextureFilterItem(bValue));
2175 : }
2176 : else
2177 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_TEXTURE_FILTER);
2178 :
2179 :
2180 : // Material
2181 : // Object color
2182 0 : if( aLbMatColor.GetSelectEntryCount() )
2183 : {
2184 0 : aColor = aLbMatColor.GetSelectEntryColor();
2185 0 : rAttrs.Put( XFillColorItem( String(), aColor) );
2186 : }
2187 : else
2188 : {
2189 0 : rAttrs.InvalidateItem( XATTR_FILLCOLOR );
2190 : }
2191 :
2192 : // luminous color
2193 0 : if( aLbMatEmission.GetSelectEntryCount() )
2194 : {
2195 0 : aColor = aLbMatEmission.GetSelectEntryColor();
2196 0 : rAttrs.Put(Svx3DMaterialEmissionItem(aColor));
2197 : }
2198 : else
2199 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_MAT_EMISSION);
2200 :
2201 : // Specular
2202 0 : if( aLbMatSpecular.GetSelectEntryCount() )
2203 : {
2204 0 : aColor = aLbMatSpecular.GetSelectEntryColor();
2205 0 : rAttrs.Put(Svx3DMaterialSpecularItem(aColor));
2206 : }
2207 : else
2208 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_MAT_SPECULAR);
2209 :
2210 : // Specular intensity
2211 0 : if( !aMtrMatSpecularIntensity.IsEmptyFieldValue() )
2212 : {
2213 0 : sal_uInt16 nValue2 = (sal_uInt16) aMtrMatSpecularIntensity.GetValue();
2214 0 : rAttrs.Put(Svx3DMaterialSpecularIntensityItem(nValue2));
2215 : }
2216 : else
2217 0 : rAttrs.InvalidateItem(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY);
2218 0 : }
2219 :
2220 : // -----------------------------------------------------------------------
2221 0 : void Svx3DWin::Resize()
2222 : {
2223 0 : if ( !IsFloatingMode() ||
2224 0 : !GetFloatingWindow()->IsRollUp() )
2225 : {
2226 0 : Size aWinSize( GetOutputSizePixel() ); // why rSize in Resizing()?
2227 :
2228 0 : if( aWinSize.Height() >= GetMinOutputSizePixel().Height() &&
2229 0 : aWinSize.Width() >= GetMinOutputSizePixel().Width() )
2230 : {
2231 0 : Size aDiffSize;
2232 0 : aDiffSize.Width() = aWinSize.Width() - aSize.Width();
2233 0 : aDiffSize.Height() = aWinSize.Height() - aSize.Height();
2234 :
2235 0 : Point aXPt;
2236 0 : Point aYPt;
2237 0 : aXPt.X() = aDiffSize.Width();
2238 0 : aYPt.Y() = aDiffSize.Height();
2239 :
2240 0 : Size aObjSize;
2241 :
2242 : // Hide
2243 0 : aBtnUpdate.Hide();
2244 0 : aBtnAssign.Hide();
2245 :
2246 0 : aBtnConvertTo3D.Hide();
2247 0 : aBtnLatheObject.Hide();
2248 0 : aBtnPerspective.Hide();
2249 :
2250 0 : aCtlPreview.Hide();
2251 0 : aCtlLightPreview.Hide();
2252 :
2253 0 : aFLGeometrie.Hide();
2254 0 : aFLRepresentation.Hide();
2255 0 : aFLLight.Hide();
2256 0 : aFLTexture.Hide();
2257 0 : aFLMaterial.Hide();
2258 :
2259 : // Moving / resizing
2260 0 : aBtnUpdate.SetPosPixel( aBtnUpdate.GetPosPixel() + aXPt );
2261 0 : aBtnAssign.SetPosPixel( aBtnAssign.GetPosPixel() + aXPt );
2262 :
2263 : // Preview controls
2264 0 : aObjSize = aCtlPreview.GetOutputSizePixel();
2265 0 : aObjSize.Width() += aDiffSize.Width();
2266 0 : aObjSize.Height() += aDiffSize.Height();
2267 0 : aCtlPreview.SetOutputSizePixel( aObjSize );
2268 0 : aCtlLightPreview.SetOutputSizePixel( aObjSize );
2269 :
2270 : // Groups
2271 0 : aObjSize = aFLGeometrie.GetOutputSizePixel();
2272 0 : aObjSize.Width() += aDiffSize.Width();
2273 0 : aFLGeometrie.SetOutputSizePixel( aObjSize );
2274 0 : aFLSegments.SetOutputSizePixel( aObjSize );
2275 0 : aFLShadow.SetOutputSizePixel( aObjSize );
2276 0 : aFLCamera.SetOutputSizePixel( aObjSize );
2277 0 : aFLRepresentation.SetOutputSizePixel( aObjSize );
2278 0 : aFLLight.SetOutputSizePixel( aObjSize );
2279 0 : aFLTexture.SetOutputSizePixel( aObjSize );
2280 0 : aFLMaterial.SetOutputSizePixel( aObjSize );
2281 :
2282 : // Y-position of the lower buttons
2283 0 : aBtnConvertTo3D.SetPosPixel( aBtnConvertTo3D.GetPosPixel() + aYPt );
2284 0 : aBtnLatheObject.SetPosPixel( aBtnLatheObject.GetPosPixel() + aYPt );
2285 0 : aBtnPerspective.SetPosPixel( aBtnPerspective.GetPosPixel() + aYPt );
2286 :
2287 : // Show
2288 0 : aBtnUpdate.Show();
2289 0 : aBtnAssign.Show();
2290 :
2291 0 : aBtnConvertTo3D.Show();
2292 0 : aBtnLatheObject.Show();
2293 0 : aBtnPerspective.Show();
2294 :
2295 0 : if( aBtnGeo.IsChecked() )
2296 0 : ClickViewTypeHdl( &aBtnGeo );
2297 0 : if( aBtnRepresentation.IsChecked() )
2298 0 : ClickViewTypeHdl( &aBtnRepresentation );
2299 0 : if( aBtnLight.IsChecked() )
2300 0 : ClickViewTypeHdl( &aBtnLight );
2301 0 : if( aBtnTexture.IsChecked() )
2302 0 : ClickViewTypeHdl( &aBtnTexture );
2303 0 : if( aBtnMaterial.IsChecked() )
2304 0 : ClickViewTypeHdl( &aBtnMaterial );
2305 :
2306 0 : aSize = aWinSize;
2307 : }
2308 : }
2309 :
2310 0 : SfxDockingWindow::Resize();
2311 0 : }
2312 :
2313 : // -----------------------------------------------------------------------
2314 0 : IMPL_LINK_NOARG(Svx3DWin, ClickUpdateHdl)
2315 : {
2316 0 : bUpdate = !aBtnUpdate.IsChecked();
2317 0 : aBtnUpdate.Check( bUpdate );
2318 :
2319 0 : if( bUpdate )
2320 : {
2321 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(pBindings);
2322 0 : if (pDispatcher != NULL)
2323 : {
2324 0 : SfxBoolItem aItem( SID_3D_STATE, sal_True );
2325 : pDispatcher->Execute(
2326 0 : SID_3D_STATE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
2327 : }
2328 : }
2329 : else
2330 : {
2331 : // Controls can be disabled during certain circumstances
2332 : }
2333 :
2334 0 : return( 0L );
2335 : }
2336 :
2337 : // -----------------------------------------------------------------------
2338 0 : IMPL_LINK_NOARG(Svx3DWin, ClickAssignHdl)
2339 : {
2340 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(pBindings);
2341 0 : if (pDispatcher != NULL)
2342 : {
2343 0 : SfxBoolItem aItem( SID_3D_ASSIGN, sal_True );
2344 : pDispatcher->Execute(
2345 0 : SID_3D_ASSIGN, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
2346 : }
2347 :
2348 0 : return( 0L );
2349 : }
2350 :
2351 : // -----------------------------------------------------------------------
2352 :
2353 0 : IMPL_LINK( Svx3DWin, ClickViewTypeHdl, void *, pBtn )
2354 : {
2355 :
2356 0 : if( pBtn )
2357 : {
2358 : // Since the permanent updating of the preview would be too expensive
2359 0 : sal_Bool bUpdatePreview = aBtnLight.IsChecked();
2360 :
2361 0 : aBtnGeo.Check( &aBtnGeo == pBtn );
2362 0 : aBtnRepresentation.Check( &aBtnRepresentation == pBtn );
2363 0 : aBtnLight.Check( &aBtnLight == pBtn );
2364 0 : aBtnTexture.Check( &aBtnTexture == pBtn );
2365 0 : aBtnMaterial.Check( &aBtnMaterial == pBtn );
2366 :
2367 0 : if( aBtnGeo.IsChecked() )
2368 0 : eViewType = VIEWTYPE_GEO;
2369 0 : if( aBtnRepresentation.IsChecked() )
2370 0 : eViewType = VIEWTYPE_REPRESENTATION;
2371 0 : if( aBtnLight.IsChecked() )
2372 0 : eViewType = VIEWTYPE_LIGHT;
2373 0 : if( aBtnTexture.IsChecked() )
2374 0 : eViewType = VIEWTYPE_TEXTURE;
2375 0 : if( aBtnMaterial.IsChecked() )
2376 0 : eViewType = VIEWTYPE_MATERIAL;
2377 :
2378 : // Geometry
2379 0 : if( eViewType == VIEWTYPE_GEO )
2380 : {
2381 0 : aFtHorizontal.Show();
2382 0 : aNumHorizontal.Show();
2383 0 : aFtVertical.Show();
2384 0 : aNumVertical.Show();
2385 0 : aFLSegments.Show();
2386 0 : aFtPercentDiagonal.Show();
2387 0 : aMtrPercentDiagonal.Show();
2388 0 : aFtBackscale.Show();
2389 0 : aMtrBackscale.Show();
2390 0 : aFtEndAngle.Show();
2391 0 : aMtrEndAngle.Show();
2392 0 : aFtDepth.Show();
2393 0 : aMtrDepth.Show();
2394 0 : aFLGeometrie.Show();
2395 :
2396 0 : aBtnNormalsObj.Show();
2397 0 : aBtnNormalsFlat.Show();
2398 0 : aBtnNormalsSphere.Show();
2399 0 : aBtnTwoSidedLighting.Show();
2400 0 : aBtnNormalsInvert.Show();
2401 0 : aFLNormals.Show();
2402 0 : aBtnDoubleSided.Show();
2403 : }
2404 : else
2405 : {
2406 0 : aFtHorizontal.Hide();
2407 0 : aNumHorizontal.Hide();
2408 0 : aFtVertical.Hide();
2409 0 : aNumVertical.Hide();
2410 0 : aFLSegments.Hide();
2411 0 : aFtPercentDiagonal.Hide();
2412 0 : aMtrPercentDiagonal.Hide();
2413 0 : aFtBackscale.Hide();
2414 0 : aMtrBackscale.Hide();
2415 0 : aFtEndAngle.Hide();
2416 0 : aMtrEndAngle.Hide();
2417 0 : aFtDepth.Hide();
2418 0 : aMtrDepth.Hide();
2419 0 : aFLGeometrie.Hide();
2420 :
2421 0 : aBtnNormalsObj.Hide();
2422 0 : aBtnNormalsFlat.Hide();
2423 0 : aBtnNormalsSphere.Hide();
2424 0 : aBtnTwoSidedLighting.Hide();
2425 0 : aBtnNormalsInvert.Hide();
2426 0 : aFLNormals.Hide();
2427 0 : aBtnDoubleSided.Hide();
2428 : }
2429 :
2430 : // Representation
2431 0 : if( eViewType == VIEWTYPE_REPRESENTATION )
2432 : {
2433 0 : aFtShademode.Show();
2434 0 : aLbShademode.Show();
2435 0 : aBtnShadow3d.Show();
2436 0 : aFtSlant.Show();
2437 0 : aMtrSlant.Show();
2438 0 : aFLShadow.Show();
2439 0 : aFtDistance.Show();
2440 0 : aMtrDistance.Show();
2441 0 : aFtFocalLeng.Show();
2442 0 : aMtrFocalLength.Show();
2443 0 : aFLCamera.Show();
2444 0 : aFLRepresentation.Show();
2445 : }
2446 : else
2447 : {
2448 0 : aFtShademode.Hide();
2449 0 : aLbShademode.Hide();
2450 0 : aBtnShadow3d.Hide();
2451 0 : aFtSlant.Hide();
2452 0 : aMtrSlant.Hide();
2453 0 : aFLShadow.Hide();
2454 0 : aFtDistance.Hide();
2455 0 : aMtrDistance.Hide();
2456 0 : aFtFocalLeng.Hide();
2457 0 : aMtrFocalLength.Hide();
2458 0 : aFLCamera.Hide();
2459 0 : aFLRepresentation.Hide();
2460 : }
2461 :
2462 : // Lighting
2463 0 : if( eViewType == VIEWTYPE_LIGHT )
2464 : {
2465 0 : aBtnLight1.Show();
2466 0 : aBtnLight2.Show();
2467 0 : aBtnLight3.Show();
2468 0 : aBtnLight4.Show();
2469 0 : aBtnLight5.Show();
2470 0 : aBtnLight6.Show();
2471 0 : aBtnLight7.Show();
2472 0 : aBtnLight8.Show();
2473 0 : aBtnLightColor.Show();
2474 0 : aFTLightsource.Show();
2475 0 : aLbAmbientlight.Show();
2476 0 : aBtnAmbientColor.Show();
2477 0 : aFTAmbientlight.Show();
2478 0 : aFLLight.Show();
2479 :
2480 0 : ColorLB* pLb = GetLbByButton();
2481 0 : if( pLb )
2482 0 : pLb->Show();
2483 :
2484 0 : aCtlLightPreview.Show();
2485 0 : aCtlPreview.Hide();
2486 : }
2487 : else
2488 : {
2489 0 : aBtnLight1.Hide();
2490 0 : aBtnLight2.Hide();
2491 0 : aBtnLight3.Hide();
2492 0 : aBtnLight4.Hide();
2493 0 : aBtnLight5.Hide();
2494 0 : aBtnLight6.Hide();
2495 0 : aBtnLight7.Hide();
2496 0 : aBtnLight8.Hide();
2497 0 : aLbLight1.Hide();
2498 0 : aLbLight2.Hide();
2499 0 : aLbLight3.Hide();
2500 0 : aLbLight4.Hide();
2501 0 : aLbLight5.Hide();
2502 0 : aLbLight6.Hide();
2503 0 : aLbLight7.Hide();
2504 0 : aLbLight8.Hide();
2505 0 : aBtnLightColor.Hide();
2506 0 : aFTLightsource.Hide();
2507 0 : aLbAmbientlight.Hide();
2508 0 : aBtnAmbientColor.Hide();
2509 0 : aFTAmbientlight.Hide();
2510 0 : aFLLight.Hide();
2511 :
2512 0 : if( !aCtlPreview.IsVisible() )
2513 : {
2514 0 : aCtlPreview.Show();
2515 0 : aCtlLightPreview.Hide();
2516 : }
2517 : }
2518 :
2519 : // Textures
2520 0 : if( eViewType == VIEWTYPE_TEXTURE )
2521 : {
2522 0 : aFtTexKind.Show();
2523 0 : aBtnTexLuminance.Show();
2524 0 : aBtnTexColor.Show();
2525 0 : aFtTexMode.Show();
2526 0 : aBtnTexReplace.Show();
2527 0 : aBtnTexModulate.Show();
2528 0 : aFtTexProjectionX.Show();
2529 0 : aBtnTexParallelX.Show();
2530 0 : aBtnTexCircleX.Show();
2531 0 : aBtnTexObjectX.Show();
2532 0 : aFtTexProjectionY.Show();
2533 0 : aBtnTexParallelY.Show();
2534 0 : aBtnTexCircleY.Show();
2535 0 : aBtnTexObjectY.Show();
2536 0 : aFtTexFilter.Show();
2537 0 : aBtnTexFilter.Show();
2538 0 : aFLTexture.Show();
2539 : }
2540 : else
2541 : {
2542 0 : aFtTexKind.Hide();
2543 0 : aBtnTexLuminance.Hide();
2544 0 : aBtnTexColor.Hide();
2545 0 : aFtTexMode.Hide();
2546 0 : aBtnTexReplace.Hide();
2547 0 : aBtnTexModulate.Hide();
2548 0 : aBtnTexBlend.Hide();
2549 0 : aFtTexProjectionX.Hide();
2550 0 : aBtnTexParallelX.Hide();
2551 0 : aBtnTexCircleX.Hide();
2552 0 : aBtnTexObjectX.Hide();
2553 0 : aFtTexProjectionY.Hide();
2554 0 : aBtnTexParallelY.Hide();
2555 0 : aBtnTexCircleY.Hide();
2556 0 : aBtnTexObjectY.Hide();
2557 0 : aFtTexFilter.Hide();
2558 0 : aBtnTexFilter.Hide();
2559 0 : aFLTexture.Hide();
2560 : }
2561 :
2562 : // Material
2563 0 : if( eViewType == VIEWTYPE_MATERIAL )
2564 : {
2565 0 : aFtMatFavorites.Show();
2566 0 : aLbMatFavorites.Show();
2567 0 : aFtMatColor.Show();
2568 0 : aLbMatColor.Show();
2569 0 : aBtnMatColor.Show();
2570 0 : aFtMatEmission.Show();
2571 0 : aLbMatEmission.Show();
2572 0 : aBtnEmissionColor.Show();
2573 0 : aFtMatSpecular.Show();
2574 0 : aLbMatSpecular.Show();
2575 0 : aBtnSpecularColor.Show();
2576 0 : aFtMatSpecularIntensity.Show();
2577 0 : aMtrMatSpecularIntensity.Show();
2578 0 : aFLMatSpecular.Show();
2579 0 : aFLMaterial.Show();
2580 : }
2581 : else
2582 : {
2583 0 : aFtMatFavorites.Hide();
2584 0 : aLbMatFavorites.Hide();
2585 0 : aFtMatColor.Hide();
2586 0 : aLbMatColor.Hide();
2587 0 : aBtnMatColor.Hide();
2588 0 : aFtMatEmission.Hide();
2589 0 : aLbMatEmission.Hide();
2590 0 : aBtnEmissionColor.Hide();
2591 0 : aFtMatSpecular.Hide();
2592 0 : aLbMatSpecular.Hide();
2593 0 : aBtnSpecularColor.Hide();
2594 0 : aFtMatSpecularIntensity.Hide();
2595 0 : aMtrMatSpecularIntensity.Hide();
2596 0 : aFLMatSpecular.Hide();
2597 0 : aFLMaterial.Hide();
2598 : }
2599 0 : if( bUpdatePreview && !aBtnLight.IsChecked() )
2600 0 : UpdatePreview();
2601 :
2602 : }
2603 : else
2604 : {
2605 0 : aBtnGeo.Check( eViewType == VIEWTYPE_GEO );
2606 0 : aBtnRepresentation.Check( eViewType == VIEWTYPE_REPRESENTATION );
2607 0 : aBtnLight.Check( eViewType == VIEWTYPE_LIGHT );
2608 0 : aBtnTexture.Check( eViewType == VIEWTYPE_TEXTURE );
2609 0 : aBtnMaterial.Check( eViewType == VIEWTYPE_MATERIAL );
2610 : }
2611 0 : return( 0L );
2612 : }
2613 :
2614 : // -----------------------------------------------------------------------
2615 0 : IMPL_LINK( Svx3DWin, ClickHdl, PushButton *, pBtn )
2616 : {
2617 0 : sal_Bool bUpdatePreview = sal_False;
2618 :
2619 0 : if( pBtn )
2620 : {
2621 0 : sal_uInt16 nSId = 0;
2622 :
2623 0 : if( pBtn == &aBtnConvertTo3D )
2624 : {
2625 0 : nSId = SID_CONVERT_TO_3D;
2626 : }
2627 0 : else if( pBtn == &aBtnLatheObject )
2628 : {
2629 0 : nSId = SID_CONVERT_TO_3D_LATHE_FAST;
2630 : }
2631 : // Geometry
2632 0 : else if( pBtn == &aBtnNormalsObj ||
2633 : pBtn == &aBtnNormalsFlat ||
2634 : pBtn == &aBtnNormalsSphere )
2635 : {
2636 0 : aBtnNormalsObj.Check( pBtn == &aBtnNormalsObj );
2637 0 : aBtnNormalsFlat.Check( pBtn == &aBtnNormalsFlat );
2638 0 : aBtnNormalsSphere.Check( pBtn == &aBtnNormalsSphere );
2639 0 : bUpdatePreview = sal_True;
2640 : }
2641 0 : else if( pBtn == &aBtnLight1 ||
2642 : pBtn == &aBtnLight2 ||
2643 : pBtn == &aBtnLight3 ||
2644 : pBtn == &aBtnLight4 ||
2645 : pBtn == &aBtnLight5 ||
2646 : pBtn == &aBtnLight6 ||
2647 : pBtn == &aBtnLight7 ||
2648 : pBtn == &aBtnLight8 )
2649 : {
2650 : // Lighting
2651 0 : ColorLB* pLb = GetLbByButton( pBtn );
2652 0 : pLb->Show();
2653 :
2654 0 : if( pBtn->IsChecked() )
2655 : {
2656 0 : SetUILightState( *(ImageButton*)pBtn, !GetUILightState( *(ImageButton*)pBtn ) );
2657 : }
2658 : else
2659 : {
2660 0 : pBtn->Check();
2661 :
2662 0 : if( pBtn != &aBtnLight1 && aBtnLight1.IsChecked() )
2663 : {
2664 0 : aBtnLight1.Check( sal_False );
2665 0 : aLbLight1.Hide();
2666 : }
2667 0 : if( pBtn != &aBtnLight2 && aBtnLight2.IsChecked() )
2668 : {
2669 0 : aBtnLight2.Check( sal_False );
2670 0 : aLbLight2.Hide();
2671 : }
2672 0 : if( pBtn != &aBtnLight3 && aBtnLight3.IsChecked() )
2673 : {
2674 0 : aBtnLight3.Check( sal_False );
2675 0 : aLbLight3.Hide();
2676 : }
2677 0 : if( pBtn != &aBtnLight4 && aBtnLight4.IsChecked() )
2678 : {
2679 0 : aBtnLight4.Check( sal_False );
2680 0 : aLbLight4.Hide();
2681 : }
2682 0 : if( pBtn != &aBtnLight5 && aBtnLight5.IsChecked() )
2683 : {
2684 0 : aBtnLight5.Check( sal_False );
2685 0 : aLbLight5.Hide();
2686 : }
2687 0 : if( pBtn != &aBtnLight6 && aBtnLight6.IsChecked() )
2688 : {
2689 0 : aBtnLight6.Check( sal_False );
2690 0 : aLbLight6.Hide();
2691 : }
2692 0 : if( pBtn != &aBtnLight7 && aBtnLight7.IsChecked() )
2693 : {
2694 0 : aBtnLight7.Check( sal_False );
2695 0 : aLbLight7.Hide();
2696 : }
2697 0 : if( pBtn != &aBtnLight8 && aBtnLight8.IsChecked() )
2698 : {
2699 0 : aBtnLight8.Check( sal_False );
2700 0 : aLbLight8.Hide();
2701 : }
2702 : }
2703 0 : sal_Bool bEnable = GetUILightState( *(ImageButton*)pBtn );
2704 0 : aBtnLightColor.Enable( bEnable );
2705 0 : pLb->Enable( bEnable );
2706 :
2707 0 : ClickLight(*pBtn);
2708 0 : bUpdatePreview = sal_True;
2709 : }
2710 : // Textures
2711 0 : else if( pBtn == &aBtnTexLuminance ||
2712 : pBtn == &aBtnTexColor )
2713 : {
2714 0 : aBtnTexLuminance.Check( pBtn == &aBtnTexLuminance );
2715 0 : aBtnTexColor.Check( pBtn == &aBtnTexColor );
2716 0 : bUpdatePreview = sal_True;
2717 : }
2718 0 : else if( pBtn == &aBtnTexReplace ||
2719 : pBtn == &aBtnTexModulate )
2720 : {
2721 0 : aBtnTexReplace.Check( pBtn == &aBtnTexReplace );
2722 0 : aBtnTexModulate.Check( pBtn == &aBtnTexModulate );
2723 0 : bUpdatePreview = sal_True;
2724 : }
2725 0 : else if( pBtn == &aBtnTexParallelX ||
2726 : pBtn == &aBtnTexCircleX ||
2727 : pBtn == &aBtnTexObjectX )
2728 : {
2729 0 : aBtnTexParallelX.Check( pBtn == &aBtnTexParallelX );
2730 0 : aBtnTexCircleX.Check( pBtn == &aBtnTexCircleX );
2731 0 : aBtnTexObjectX.Check( pBtn == &aBtnTexObjectX );
2732 0 : bUpdatePreview = sal_True;
2733 : }
2734 0 : else if( pBtn == &aBtnTexParallelY ||
2735 : pBtn == &aBtnTexCircleY ||
2736 : pBtn == &aBtnTexObjectY )
2737 : {
2738 0 : aBtnTexParallelY.Check( pBtn == &aBtnTexParallelY );
2739 0 : aBtnTexCircleY.Check( pBtn == &aBtnTexCircleY );
2740 0 : aBtnTexObjectY.Check( pBtn == &aBtnTexObjectY );
2741 0 : bUpdatePreview = sal_True;
2742 : }
2743 0 : else if( pBtn == &aBtnShadow3d )
2744 : {
2745 0 : pBtn->Check( !pBtn->IsChecked() );
2746 0 : aFtSlant.Enable( pBtn->IsChecked() );
2747 0 : aMtrSlant.Enable( pBtn->IsChecked() );
2748 0 : bUpdatePreview = sal_True;
2749 : }
2750 : // Other (no groups)
2751 0 : else if( pBtn != NULL )
2752 : {
2753 0 : pBtn->Check( !pBtn->IsChecked() );
2754 0 : bUpdatePreview = sal_True;
2755 : }
2756 :
2757 0 : if( nSId > 0 )
2758 : {
2759 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(pBindings);
2760 0 : if (pDispatcher != NULL)
2761 : {
2762 0 : SfxBoolItem aItem( nSId, sal_True );
2763 : pDispatcher->Execute(
2764 0 : nSId, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
2765 : }
2766 : }
2767 0 : else if( bUpdatePreview == sal_True )
2768 0 : UpdatePreview();
2769 : }
2770 0 : return( 0L );
2771 : }
2772 :
2773 : //------------------------------------------------------------------------
2774 :
2775 0 : IMPL_LINK( Svx3DWin, ClickColorHdl, PushButton *, pBtn )
2776 : {
2777 0 : SvColorDialog aColorDlg( this );
2778 : ColorLB* pLb;
2779 :
2780 0 : if( pBtn == &aBtnLightColor )
2781 0 : pLb = GetLbByButton();
2782 0 : else if( pBtn == &aBtnAmbientColor )
2783 0 : pLb = &aLbAmbientlight;
2784 0 : else if( pBtn == &aBtnMatColor )
2785 0 : pLb = &aLbMatColor;
2786 0 : else if( pBtn == &aBtnEmissionColor )
2787 0 : pLb = &aLbMatEmission;
2788 : else // if( pBtn == &aBtnSpecularColor )
2789 0 : pLb = &aLbMatSpecular;
2790 :
2791 0 : Color aColor = pLb->GetSelectEntryColor();
2792 :
2793 0 : aColorDlg.SetColor( aColor );
2794 0 : if( aColorDlg.Execute() == RET_OK )
2795 : {
2796 0 : aColor = aColorDlg.GetColor();
2797 0 : if( LBSelectColor( pLb, aColor ) )
2798 0 : SelectHdl( pLb );
2799 : }
2800 0 : return( 0L );
2801 : }
2802 :
2803 : // -----------------------------------------------------------------------
2804 0 : IMPL_LINK( Svx3DWin, SelectHdl, void *, p )
2805 : {
2806 0 : if( p )
2807 : {
2808 0 : Color aColor;
2809 0 : sal_Bool bUpdatePreview = sal_False;
2810 :
2811 : // Material
2812 0 : if( p == &aLbMatFavorites )
2813 : {
2814 0 : Color aColObj( COL_WHITE );
2815 0 : Color aColEmis( COL_BLACK );
2816 0 : Color aColSpec( COL_WHITE );
2817 0 : sal_uInt16 nSpecIntens = 20;
2818 :
2819 0 : sal_uInt16 nPos = aLbMatFavorites.GetSelectEntryPos();
2820 0 : switch( nPos )
2821 : {
2822 : case 1: // Metall
2823 : {
2824 0 : aColObj = Color(230,230,255);
2825 0 : aColEmis = Color(10,10,30);
2826 0 : aColSpec = Color(200,200,200);
2827 0 : nSpecIntens = 20;
2828 : }
2829 0 : break;
2830 :
2831 : case 2: // Gold
2832 : {
2833 0 : aColObj = Color(230,255,0);
2834 0 : aColEmis = Color(51,0,0);
2835 0 : aColSpec = Color(255,255,240);
2836 0 : nSpecIntens = 20;
2837 : }
2838 0 : break;
2839 :
2840 : case 3: // Chrome
2841 : {
2842 0 : aColObj = Color(36,117,153);
2843 0 : aColEmis = Color(18,30,51);
2844 0 : aColSpec = Color(230,230,255);
2845 0 : nSpecIntens = 2;
2846 : }
2847 0 : break;
2848 :
2849 : case 4: // Plastic
2850 : {
2851 0 : aColObj = Color(255,48,57);
2852 0 : aColEmis = Color(35,0,0);
2853 0 : aColSpec = Color(179,202,204);
2854 0 : nSpecIntens = 60;
2855 : }
2856 0 : break;
2857 :
2858 : case 5: // Wood
2859 : {
2860 0 : aColObj = Color(153,71,1);
2861 0 : aColEmis = Color(21,22,0);
2862 0 : aColSpec = Color(255,255,153);
2863 0 : nSpecIntens = 75;
2864 : }
2865 0 : break;
2866 : }
2867 0 : LBSelectColor( &aLbMatColor, aColObj );
2868 0 : LBSelectColor( &aLbMatEmission, aColEmis );
2869 0 : LBSelectColor( &aLbMatSpecular, aColSpec );
2870 0 : aMtrMatSpecularIntensity.SetValue( nSpecIntens );
2871 :
2872 0 : bUpdatePreview = sal_True;
2873 : }
2874 0 : else if( p == &aLbMatColor ||
2875 : p == &aLbMatEmission ||
2876 : p == &aLbMatSpecular )
2877 : {
2878 0 : aLbMatFavorites.SelectEntryPos( 0 );
2879 0 : bUpdatePreview = sal_True;
2880 : }
2881 : // Lighting
2882 0 : else if( p == &aLbAmbientlight )
2883 : {
2884 0 : bUpdatePreview = sal_True;
2885 : }
2886 0 : else if( p == &aLbLight1 ||
2887 : p == &aLbLight2 ||
2888 : p == &aLbLight3 ||
2889 : p == &aLbLight4 ||
2890 : p == &aLbLight5 ||
2891 : p == &aLbLight6 ||
2892 : p == &aLbLight7 ||
2893 : p == &aLbLight8 )
2894 : {
2895 0 : bUpdatePreview = sal_True;
2896 : }
2897 0 : else if( p == &aLbShademode )
2898 0 : bUpdatePreview = sal_True;
2899 :
2900 0 : if( bUpdatePreview == sal_True )
2901 0 : UpdatePreview();
2902 : }
2903 0 : return( 0L );
2904 : }
2905 :
2906 : // -----------------------------------------------------------------------
2907 0 : IMPL_LINK( Svx3DWin, ModifyHdl, void*, pField )
2908 : {
2909 0 : if( pField )
2910 : {
2911 0 : sal_Bool bUpdatePreview = sal_False;
2912 :
2913 : // Material
2914 0 : if( pField == &aMtrMatSpecularIntensity )
2915 : {
2916 0 : bUpdatePreview = sal_True;
2917 : }
2918 0 : else if( pField == &aNumHorizontal )
2919 : {
2920 0 : bUpdatePreview = sal_True;
2921 : }
2922 0 : else if( pField == &aNumVertical )
2923 : {
2924 0 : bUpdatePreview = sal_True;
2925 : }
2926 0 : else if( pField == &aMtrSlant )
2927 : {
2928 0 : bUpdatePreview = sal_True;
2929 : }
2930 :
2931 0 : if( bUpdatePreview == sal_True )
2932 0 : UpdatePreview();
2933 : }
2934 0 : return( 0L );
2935 : }
2936 :
2937 : // -----------------------------------------------------------------------
2938 :
2939 0 : void Svx3DWin::ClickLight(PushButton& rBtn)
2940 : {
2941 0 : sal_uInt16 nLightSource = GetLightSource( &rBtn );
2942 0 : ColorLB* pLb = GetLbByButton( &rBtn );
2943 0 : Color aColor( pLb->GetSelectEntryColor() );
2944 0 : SfxItemSet aLightItemSet(aCtlLightPreview.GetSvx3DLightControl().Get3DAttributes());
2945 0 : const bool bOnOff(GetUILightState( (const ImageButton&)rBtn ));
2946 :
2947 0 : switch(nLightSource)
2948 : {
2949 0 : case 0: aLightItemSet.Put(Svx3DLightcolor1Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff1Item(bOnOff)); break;
2950 0 : case 1: aLightItemSet.Put(Svx3DLightcolor2Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff2Item(bOnOff)); break;
2951 0 : case 2: aLightItemSet.Put(Svx3DLightcolor3Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff3Item(bOnOff)); break;
2952 0 : case 3: aLightItemSet.Put(Svx3DLightcolor4Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff4Item(bOnOff)); break;
2953 0 : case 4: aLightItemSet.Put(Svx3DLightcolor5Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff5Item(bOnOff)); break;
2954 0 : case 5: aLightItemSet.Put(Svx3DLightcolor6Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff6Item(bOnOff)); break;
2955 0 : case 6: aLightItemSet.Put(Svx3DLightcolor7Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff7Item(bOnOff)); break;
2956 : default:
2957 0 : case 7: aLightItemSet.Put(Svx3DLightcolor8Item(aColor)); aLightItemSet.Put(Svx3DLightOnOff8Item(bOnOff)); break;
2958 : }
2959 :
2960 0 : aCtlLightPreview.GetSvx3DLightControl().Set3DAttributes(aLightItemSet);
2961 0 : aCtlLightPreview.GetSvx3DLightControl().SelectLight(nLightSource);
2962 0 : aCtlLightPreview.CheckSelection();
2963 0 : }
2964 :
2965 : // -----------------------------------------------------------------------
2966 :
2967 0 : IMPL_LINK_NOARG(Svx3DWin, ChangeLightCallbackHdl)
2968 : {
2969 0 : return( 0L );
2970 : }
2971 :
2972 :
2973 : // -----------------------------------------------------------------------
2974 :
2975 0 : IMPL_LINK_NOARG(Svx3DWin, ChangeSelectionCallbackHdl)
2976 : {
2977 0 : const sal_uInt32 nLight(aCtlLightPreview.GetSvx3DLightControl().GetSelectedLight());
2978 0 : PushButton* pBtn = 0;
2979 :
2980 0 : switch( nLight )
2981 : {
2982 0 : case 0: pBtn = &aBtnLight1; break;
2983 0 : case 1: pBtn = &aBtnLight2; break;
2984 0 : case 2: pBtn = &aBtnLight3; break;
2985 0 : case 3: pBtn = &aBtnLight4; break;
2986 0 : case 4: pBtn = &aBtnLight5; break;
2987 0 : case 5: pBtn = &aBtnLight6; break;
2988 0 : case 6: pBtn = &aBtnLight7; break;
2989 0 : case 7: pBtn = &aBtnLight8; break;
2990 0 : default: break;
2991 : }
2992 :
2993 0 : if( pBtn )
2994 0 : ClickHdl( pBtn );
2995 : else
2996 : {
2997 : // Status: No lamp selected
2998 0 : if( aBtnLight1.IsChecked() )
2999 : {
3000 0 : aBtnLight1.Check( sal_False );
3001 0 : aLbLight1.Enable( sal_False );
3002 : }
3003 0 : else if( aBtnLight2.IsChecked() )
3004 : {
3005 0 : aBtnLight2.Check( sal_False );
3006 0 : aLbLight2.Enable( sal_False );
3007 : }
3008 0 : else if( aBtnLight3.IsChecked() )
3009 : {
3010 0 : aBtnLight3.Check( sal_False );
3011 0 : aLbLight3.Enable( sal_False );
3012 : }
3013 0 : else if( aBtnLight4.IsChecked() )
3014 : {
3015 0 : aBtnLight4.Check( sal_False );
3016 0 : aLbLight4.Enable( sal_False );
3017 : }
3018 0 : else if( aBtnLight5.IsChecked() )
3019 : {
3020 0 : aBtnLight5.Check( sal_False );
3021 0 : aLbLight5.Enable( sal_False );
3022 : }
3023 0 : else if( aBtnLight6.IsChecked() )
3024 : {
3025 0 : aBtnLight6.Check( sal_False );
3026 0 : aLbLight6.Enable( sal_False );
3027 : }
3028 0 : else if( aBtnLight7.IsChecked() )
3029 : {
3030 0 : aBtnLight7.Check( sal_False );
3031 0 : aLbLight7.Enable( sal_False );
3032 : }
3033 0 : else if( aBtnLight8.IsChecked() )
3034 : {
3035 0 : aBtnLight8.Check( sal_False );
3036 0 : aLbLight8.Enable( sal_False );
3037 : }
3038 0 : aBtnLightColor.Enable( sal_False );
3039 : }
3040 :
3041 0 : return( 0L );
3042 : }
3043 :
3044 : // -----------------------------------------------------------------------
3045 : // Method to ensure that the LB is also associated with a color
3046 : // returns true if color was added
3047 : // -----------------------------------------------------------------------
3048 0 : sal_Bool Svx3DWin::LBSelectColor( ColorLB* pLb, const Color& rColor )
3049 : {
3050 0 : sal_Bool bRet = sal_False;
3051 :
3052 0 : pLb->SetNoSelection();
3053 0 : pLb->SelectEntry( rColor );
3054 0 : if( pLb->GetSelectEntryCount() == 0 )
3055 : {
3056 0 : String aStr(SVX_RES(RID_SVXFLOAT3D_FIX_R));
3057 :
3058 0 : aStr += String::CreateFromInt32((sal_Int32)rColor.GetRed());
3059 0 : aStr += sal_Unicode(' ');
3060 0 : aStr += String(SVX_RES(RID_SVXFLOAT3D_FIX_G));
3061 0 : aStr += String::CreateFromInt32((sal_Int32)rColor.GetGreen());
3062 0 : aStr += sal_Unicode(' ');
3063 0 : aStr += String(SVX_RES(RID_SVXFLOAT3D_FIX_B));
3064 0 : aStr += String::CreateFromInt32((sal_Int32)rColor.GetBlue());
3065 :
3066 0 : sal_uInt16 nPos = pLb->InsertEntry( rColor, aStr );
3067 0 : pLb->SelectEntryPos( nPos );
3068 0 : bRet = sal_True;
3069 : }
3070 0 : return( bRet );
3071 : }
3072 :
3073 : // -----------------------------------------------------------------------
3074 0 : void Svx3DWin::UpdatePreview()
3075 : {
3076 0 : if( pModel == NULL )
3077 0 : pModel = new FmFormModel();
3078 :
3079 0 : if(bOnly3DChanged)
3080 : {
3081 : // Execute slot
3082 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(pBindings);
3083 0 : if (pDispatcher != NULL)
3084 : {
3085 0 : SfxBoolItem aItem( SID_3D_STATE, sal_True );
3086 : pDispatcher->Execute(
3087 0 : SID_3D_STATE, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
3088 : }
3089 : // Reset Flag
3090 0 : bOnly3DChanged = sal_False;
3091 : }
3092 :
3093 : // Get Itemset
3094 0 : SfxItemSet aSet( pModel->GetItemPool(), SDRATTR_START, SDRATTR_END);
3095 :
3096 : // Get Attributes and set the preview
3097 0 : GetAttr( aSet );
3098 0 : aCtlPreview.Set3DAttributes( aSet );
3099 0 : aCtlLightPreview.GetSvx3DLightControl().Set3DAttributes( aSet );
3100 0 : }
3101 :
3102 : //////////////////////////////////////////////////////////////////////////////
3103 : // document is to be reloaded, destroy remembered ItemSet
3104 0 : void Svx3DWin::DocumentReload()
3105 : {
3106 0 : delete mpRemember2DAttributes;
3107 0 : mpRemember2DAttributes = 0L;
3108 0 : }
3109 :
3110 : // -----------------------------------------------------------------------
3111 0 : void Svx3DWin::InitColorLB( const SdrModel* pDoc )
3112 : {
3113 0 : aLbLight1.Fill( pDoc->GetColorList() );
3114 0 : aLbLight2.CopyEntries( aLbLight1 );
3115 0 : aLbLight3.CopyEntries( aLbLight1 );
3116 0 : aLbLight4.CopyEntries( aLbLight1 );
3117 0 : aLbLight5.CopyEntries( aLbLight1 );
3118 0 : aLbLight6.CopyEntries( aLbLight1 );
3119 0 : aLbLight7.CopyEntries( aLbLight1 );
3120 0 : aLbLight8.CopyEntries( aLbLight1 );
3121 0 : aLbAmbientlight.CopyEntries( aLbLight1 );
3122 0 : aLbMatColor.CopyEntries( aLbLight1 );
3123 0 : aLbMatEmission.CopyEntries( aLbLight1 );
3124 0 : aLbMatSpecular.CopyEntries( aLbLight1 );
3125 :
3126 : // First...
3127 0 : Color aColWhite( COL_WHITE );
3128 0 : Color aColBlack( COL_BLACK );
3129 0 : aLbLight1.SelectEntry( aColWhite );
3130 0 : aLbLight2.SelectEntry( aColWhite );
3131 0 : aLbLight3.SelectEntry( aColWhite );
3132 0 : aLbLight4.SelectEntry( aColWhite );
3133 0 : aLbLight5.SelectEntry( aColWhite );
3134 0 : aLbLight6.SelectEntry( aColWhite );
3135 0 : aLbLight7.SelectEntry( aColWhite );
3136 0 : aLbLight8.SelectEntry( aColWhite );
3137 0 : aLbAmbientlight.SelectEntry( aColBlack );
3138 0 : aLbMatColor.SelectEntry( aColWhite );
3139 0 : aLbMatEmission.SelectEntry( aColBlack );
3140 0 : aLbMatSpecular.SelectEntry( aColWhite );
3141 0 : }
3142 :
3143 : // -----------------------------------------------------------------------
3144 0 : sal_uInt16 Svx3DWin::GetLightSource( const PushButton* pBtn )
3145 : {
3146 0 : sal_uInt16 nLight = 8;
3147 :
3148 0 : if( pBtn == NULL )
3149 : {
3150 0 : if( aBtnLight1.IsChecked() )
3151 0 : nLight = 0;
3152 0 : else if( aBtnLight2.IsChecked() )
3153 0 : nLight = 1;
3154 0 : else if( aBtnLight3.IsChecked() )
3155 0 : nLight = 2;
3156 0 : else if( aBtnLight4.IsChecked() )
3157 0 : nLight = 3;
3158 0 : else if( aBtnLight5.IsChecked() )
3159 0 : nLight = 4;
3160 0 : else if( aBtnLight6.IsChecked() )
3161 0 : nLight = 5;
3162 0 : else if( aBtnLight7.IsChecked() )
3163 0 : nLight = 6;
3164 0 : else if( aBtnLight8.IsChecked() )
3165 0 : nLight = 7;
3166 : }
3167 : else
3168 : {
3169 0 : if( pBtn == &aBtnLight1 )
3170 0 : nLight = 0;
3171 0 : else if( pBtn == &aBtnLight2 )
3172 0 : nLight = 1;
3173 0 : else if( pBtn == &aBtnLight3 )
3174 0 : nLight = 2;
3175 0 : else if( pBtn == &aBtnLight4 )
3176 0 : nLight = 3;
3177 0 : else if( pBtn == &aBtnLight5 )
3178 0 : nLight = 4;
3179 0 : else if( pBtn == &aBtnLight6 )
3180 0 : nLight = 5;
3181 0 : else if( pBtn == &aBtnLight7 )
3182 0 : nLight = 6;
3183 0 : else if( pBtn == &aBtnLight8 )
3184 0 : nLight = 7;
3185 : }
3186 0 : return( nLight );
3187 : };
3188 :
3189 : // -----------------------------------------------------------------------
3190 0 : ColorLB* Svx3DWin::GetLbByButton( const PushButton* pBtn )
3191 : {
3192 0 : ColorLB* pLb = NULL;
3193 :
3194 0 : if( pBtn == NULL )
3195 : {
3196 0 : if( aBtnLight1.IsChecked() )
3197 0 : pLb = &aLbLight1;
3198 0 : else if( aBtnLight2.IsChecked() )
3199 0 : pLb = &aLbLight2;
3200 0 : else if( aBtnLight3.IsChecked() )
3201 0 : pLb = &aLbLight3;
3202 0 : else if( aBtnLight4.IsChecked() )
3203 0 : pLb = &aLbLight4;
3204 0 : else if( aBtnLight5.IsChecked() )
3205 0 : pLb = &aLbLight5;
3206 0 : else if( aBtnLight6.IsChecked() )
3207 0 : pLb = &aLbLight6;
3208 0 : else if( aBtnLight7.IsChecked() )
3209 0 : pLb = &aLbLight7;
3210 0 : else if( aBtnLight8.IsChecked() )
3211 0 : pLb = &aLbLight8;
3212 : }
3213 : else
3214 : {
3215 0 : if( pBtn == &aBtnLight1 )
3216 0 : pLb = &aLbLight1;
3217 0 : else if( pBtn == &aBtnLight2 )
3218 0 : pLb = &aLbLight2;
3219 0 : else if( pBtn == &aBtnLight3 )
3220 0 : pLb = &aLbLight3;
3221 0 : else if( pBtn == &aBtnLight4 )
3222 0 : pLb = &aLbLight4;
3223 0 : else if( pBtn == &aBtnLight5 )
3224 0 : pLb = &aLbLight5;
3225 0 : else if( pBtn == &aBtnLight6 )
3226 0 : pLb = &aLbLight6;
3227 0 : else if( pBtn == &aBtnLight7 )
3228 0 : pLb = &aLbLight7;
3229 0 : else if( pBtn == &aBtnLight8 )
3230 0 : pLb = &aLbLight8;
3231 : }
3232 0 : return( pLb );
3233 : };
3234 :
3235 : // Derivation from SfxChildWindow as "containers" for effects
3236 :
3237 0 : Svx3DChildWindow::Svx3DChildWindow( Window* _pParent,
3238 : sal_uInt16 nId,
3239 : SfxBindings* pBindings,
3240 : SfxChildWinInfo* pInfo ) :
3241 0 : SfxChildWindow( _pParent, nId )
3242 : {
3243 0 : Svx3DWin* pWin = new Svx3DWin( pBindings, this, _pParent );
3244 0 : pWindow = pWin;
3245 :
3246 0 : eChildAlignment = SFX_ALIGN_NOALIGNMENT;
3247 :
3248 0 : pWin->Initialize( pInfo );
3249 0 : }
3250 :
3251 0 : Svx3DCtrlItem::Svx3DCtrlItem( sal_uInt16 _nId,
3252 : SfxBindings* _pBindings) :
3253 0 : SfxControllerItem( _nId, *_pBindings )
3254 : {
3255 0 : }
3256 :
3257 : // -----------------------------------------------------------------------
3258 0 : void Svx3DCtrlItem::StateChanged( sal_uInt16 /*nSId*/,
3259 : SfxItemState /*eState*/, const SfxPoolItem* /*pItem*/ )
3260 : {
3261 0 : }
3262 :
3263 : // ControllerItem for Status Slot SID_CONVERT_TO_3D
3264 :
3265 0 : SvxConvertTo3DItem::SvxConvertTo3DItem(sal_uInt16 _nId, SfxBindings* _pBindings)
3266 : : SfxControllerItem(_nId, *_pBindings),
3267 0 : bState(sal_False)
3268 : {
3269 0 : }
3270 :
3271 0 : void SvxConvertTo3DItem::StateChanged(sal_uInt16 /*_nId*/, SfxItemState eState, const SfxPoolItem* /*pState*/)
3272 : {
3273 0 : sal_Bool bNewState = (eState != SFX_ITEM_DISABLED);
3274 0 : if(bNewState != bState)
3275 : {
3276 0 : bState = bNewState;
3277 0 : SfxDispatcher* pDispatcher = LocalGetDispatcher(&GetBindings());
3278 0 : if (pDispatcher != NULL)
3279 : {
3280 0 : SfxBoolItem aItem( SID_3D_STATE, sal_True );
3281 : pDispatcher->Execute(
3282 0 : SID_3D_STATE, SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD, &aItem, 0L);
3283 : }
3284 : }
3285 57 : }
3286 :
3287 :
3288 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|