LCOV - code coverage report
Current view: top level - svx/source/engine3d - float3d.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 2 1603 0.1 %
Date: 2015-06-13 12:38:46 Functions: 4 46 8.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.11