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