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