/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_chart2.hxx" #include "tp_3D_SceneIllumination.hxx" #include "tp_3D_SceneIllumination.hrc" #include "ResId.hxx" #include "Strings.hrc" #include "Bitmaps.hrc" #include "Bitmaps_HC.hrc" #include "CommonConverters.hxx" #include "NoWarningThisInCTOR.hxx" #ifndef _SVX_DIALOGS_HRC #include "svx/dialogs.hrc" #endif // header for define SVX_RES #include #include // header for class SvColorDialog #include // header for define RET_OK #include #include #include //............................................................................. namespace chart { //............................................................................. using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; LightButton::LightButton( Window* pParent, const ResId& rResId, sal_Int32 nLightNumber ) : ImageButton( pParent, rResId ) , m_bLightOn(false) { SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_OFF) ), BMP_COLOR_NORMAL ); SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_OFF_H) ), BMP_COLOR_HIGHCONTRAST ); String aTipHelpStr( SchResId(STR_TIP_LIGHTSOURCE_X) ); rtl::OUString aTipHelp( aTipHelpStr ); const rtl::OUString aReplacementStr( RTL_CONSTASCII_USTRINGPARAM( "%LIGHTNUMBER" )); sal_Int32 nIndex = aTipHelp.indexOf( aReplacementStr ); if( nIndex != -1 ) { aTipHelp = aTipHelp.replaceAt(nIndex, aReplacementStr.getLength(), rtl::OUString::valueOf( nLightNumber ) ); } this->SetQuickHelpText( String( aTipHelp ) ); } LightButton::~LightButton() { } void LightButton::switchLightOn(bool bOn) { if( m_bLightOn==bOn ) return; m_bLightOn = bOn; if(m_bLightOn) { SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_ON) ), BMP_COLOR_NORMAL ); SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_ON_H) ), BMP_COLOR_HIGHCONTRAST ); } else { SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_OFF) ), BMP_COLOR_NORMAL ); SetModeImage( Image( SVX_RES(RID_SVXIMAGE_LIGHT_OFF_H) ), BMP_COLOR_HIGHCONTRAST ); } } bool LightButton::isLightOn() const { return m_bLightOn; } //----------------------------------------------------------------------------- ColorButton::ColorButton( Window* pParent, const ResId& rResId ) : ImageButton( pParent, rResId ) { SetModeImage( Image( SVX_RES(RID_SVXIMAGE_COLORDLG) ), BMP_COLOR_NORMAL ); SetModeImage( Image( SVX_RES(RID_SVXIMAGE_COLORDLG_H) ), BMP_COLOR_HIGHCONTRAST ); this->SetQuickHelpText( String( SchResId(STR_TIP_CHOOSECOLOR) ) ); } ColorButton::~ColorButton() { } //----------------------------------------------------------------------------- struct LightSource { long nDiffuseColor; ::com::sun::star::drawing::Direction3D aDirection; bool bIsEnabled; LightSource() : nDiffuseColor( 0xcccccc ), aDirection( 1.0, 1.0, -1.0 ), bIsEnabled( false ) {} }; struct LightSourceInfo { LightButton* pButton; LightSource aLightSource; LightSourceInfo(); void initButtonFromSource(); }; LightSourceInfo::LightSourceInfo() : pButton(0) , aLightSource() { aLightSource.nDiffuseColor = 0xffffff; // white aLightSource.aDirection = drawing::Direction3D(1,1,1); aLightSource.bIsEnabled = sal_False; } void LightSourceInfo::initButtonFromSource() { if(!pButton) return; pButton->SetModeImage( Image( SVX_RES( aLightSource.bIsEnabled ? RID_SVXIMAGE_LIGHT_ON : RID_SVXIMAGE_LIGHT_OFF ) ), BMP_COLOR_NORMAL ); pButton->SetModeImage( Image( SVX_RES( aLightSource.bIsEnabled ? RID_SVXIMAGE_LIGHT_ON_H : RID_SVXIMAGE_LIGHT_OFF_H ) ), BMP_COLOR_HIGHCONTRAST ); } //----------------------------------------------------------------------------- namespace { rtl::OUString lcl_makeColorName( Color rColor ) { String aStr(SVX_RES(RID_SVXFLOAT3D_FIX_R)); aStr += String::CreateFromInt32((sal_Int32)rColor.GetRed()); aStr += sal_Unicode(' '); aStr += String(SVX_RES(RID_SVXFLOAT3D_FIX_G)); aStr += String::CreateFromInt32((sal_Int32)rColor.GetGreen()); aStr += sal_Unicode(' '); aStr += String(SVX_RES(RID_SVXFLOAT3D_FIX_B)); aStr += String::CreateFromInt32((sal_Int32)rColor.GetBlue()); return aStr; } void lcl_selectColor( ColorListBox& rListBox, const Color& rColor ) { rListBox.SetNoSelection(); rListBox.SelectEntry( rColor ); if( rListBox.GetSelectEntryCount() == 0 ) { sal_uInt16 nPos = rListBox.InsertEntry( rColor, lcl_makeColorName( rColor ) ); rListBox.SelectEntryPos( nPos ); } } ::chart::LightSource lcl_getLightSourceFromProperties( const uno::Reference< beans::XPropertySet > & xSceneProperties, sal_Int32 nIndex ) { ::chart::LightSource aResult; if( 0 <= nIndex && nIndex < 8 ) { ::rtl::OUString aColorPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor")); ::rtl::OUString aDirectionPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection")); ::rtl::OUString aEnabledPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn")); ::rtl::OUString aIndex( ::rtl::OUString::valueOf( nIndex + 1 )); try { xSceneProperties->getPropertyValue( aColorPropertyPrefix + aIndex ) >>= aResult.nDiffuseColor; xSceneProperties->getPropertyValue( aDirectionPropertyPrefix + aIndex ) >>= aResult.aDirection; xSceneProperties->getPropertyValue( aEnabledPropertyPrefix + aIndex ) >>= aResult.bIsEnabled; } catch( const uno::Exception & ex ) { (void)(ex); // no warning in non-debug builds OSL_ENSURE( false, ::rtl::OUStringToOString( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Property Exception caught. Message: " )) + ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr()); } } return aResult; } void lcl_setLightSource( const uno::Reference< beans::XPropertySet > & xSceneProperties, const ::chart::LightSource & rLightSource, sal_Int32 nIndex ) { if( 0 <= nIndex && nIndex < 8 ) { ::rtl::OUString aColorPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor")); ::rtl::OUString aDirectionPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection")); ::rtl::OUString aEnabledPropertyPrefix( RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn")); ::rtl::OUString aIndex( ::rtl::OUString::valueOf( nIndex + 1 )); try { xSceneProperties->setPropertyValue( aColorPropertyPrefix + aIndex, uno::makeAny( rLightSource.nDiffuseColor )); xSceneProperties->setPropertyValue( aDirectionPropertyPrefix + aIndex, uno::makeAny( rLightSource.aDirection )); xSceneProperties->setPropertyValue( aEnabledPropertyPrefix + aIndex, uno::makeAny( rLightSource.bIsEnabled )); } catch( const uno::Exception & ex ) { (void)(ex); // no warning in non-debug builds OSL_ENSURE( false, ::rtl::OUStringToOString( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Property Exception caught. Message: " )) + ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr()); } } } Color lcl_getAmbientColor( const uno::Reference< beans::XPropertySet > & xSceneProperties ) { sal_Int32 nResult = 0x000000; try { xSceneProperties->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneAmbientColor"))) >>= nResult; } catch( const uno::Exception & ex ) { (void)(ex); // no warning in non-debug builds OSL_ENSURE( false, ::rtl::OUStringToOString( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Property Exception caught. Message: " )) + ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr()); } return Color( nResult ); } void lcl_setAmbientColor( const uno::Reference< beans::XPropertySet > & xSceneProperties, const Color & rColor ) { try { xSceneProperties->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneAmbientColor")), uno::makeAny( rColor.GetColor())); } catch( const uno::Exception & ex ) { (void)(ex); // no warning in non-debug builds OSL_ENSURE( false, ::rtl::OUStringToOString( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Property Exception caught. Message: " )) + ex.Message, RTL_TEXTENCODING_ASCII_US ).getStr()); } } } //----------------------------------------------------------------------------- ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage( Window* pWindow , const uno::Reference< beans::XPropertySet > & xSceneProperties , const uno::Reference< frame::XModel >& xChartModel , XColorListSharedPtr aColorTable ) : TabPage ( pWindow, SchResId( TP_3D_SCENEILLUMINATION ) ) , m_aFT_LightSource( this, SchResId( FT_LIGHTSOURCE ) ) , m_aBtn_Light1( this, SchResId( BTN_LIGHT_1 ), 1 ) , m_aBtn_Light2( this, SchResId( BTN_LIGHT_2 ), 2 ) , m_aBtn_Light3( this, SchResId( BTN_LIGHT_3 ), 3 ) , m_aBtn_Light4( this, SchResId( BTN_LIGHT_4 ), 4 ) , m_aBtn_Light5( this, SchResId( BTN_LIGHT_5 ), 5 ) , m_aBtn_Light6( this, SchResId( BTN_LIGHT_6 ), 6 ) , m_aBtn_Light7( this, SchResId( BTN_LIGHT_7 ), 7 ) , m_aBtn_Light8( this, SchResId( BTN_LIGHT_8 ), 8 ) , m_aLB_LightSource( this, SchResId( LB_LIGHTSOURCE ) ) , m_aBtn_LightSource_Color( this, SchResId( BTN_LIGHTSOURCE_COLOR ) ) , m_aFT_AmbientLight( this, SchResId( FT_AMBIENTLIGHT ) ) , m_aLB_AmbientLight( this, SchResId( LB_AMBIENTLIGHT ) ) , m_aBtn_AmbientLight_Color( this, SchResId( BTN_AMBIENT_COLOR ) ) , m_aCtl_Preview( this, SchResId( CTL_LIGHT_PREVIEW ) ) , m_pLightSourceInfoList(0) , m_xSceneProperties( xSceneProperties ) , m_aTimerTriggeredControllerLock( xChartModel ) , m_bInCommitToModel( false ) , m_aModelChangeListener( LINK( this, ThreeD_SceneIllumination_TabPage, fillControlsFromModel ) ) , m_xChartModel( xChartModel ) { FreeResource(); if(aColorTable.get()) { m_aLB_AmbientLight.Fill( aColorTable ); m_aLB_LightSource.Fill( aColorTable ); } m_aLB_AmbientLight.SetDropDownLineCount(10); m_aLB_LightSource.SetDropDownLineCount(10); m_pLightSourceInfoList = new LightSourceInfo[8]; m_pLightSourceInfoList[0].pButton = &m_aBtn_Light1; m_pLightSourceInfoList[1].pButton = &m_aBtn_Light2; m_pLightSourceInfoList[2].pButton = &m_aBtn_Light3; m_pLightSourceInfoList[3].pButton = &m_aBtn_Light4; m_pLightSourceInfoList[4].pButton = &m_aBtn_Light5; m_pLightSourceInfoList[5].pButton = &m_aBtn_Light6; m_pLightSourceInfoList[6].pButton = &m_aBtn_Light7; m_pLightSourceInfoList[7].pButton = &m_aBtn_Light8; fillControlsFromModel(0); m_aBtn_Light1.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light2.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light3.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light4.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light5.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light6.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light7.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aBtn_Light8.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl ) ); m_aLB_AmbientLight.SetSelectHdl( LINK( this, ThreeD_SceneIllumination_TabPage, SelectColorHdl ) ); m_aLB_LightSource.SetSelectHdl( LINK( this, ThreeD_SceneIllumination_TabPage, SelectColorHdl ) ); m_aBtn_AmbientLight_Color.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ColorDialogHdl ) ); m_aBtn_LightSource_Color.SetClickHdl( LINK( this, ThreeD_SceneIllumination_TabPage, ColorDialogHdl ) ); m_aCtl_Preview.SetUserInteractiveChangeCallback( LINK( this, ThreeD_SceneIllumination_TabPage, PreviewChangeHdl ) ); m_aCtl_Preview.SetUserSelectionChangeCallback( LINK( this, ThreeD_SceneIllumination_TabPage, PreviewSelectHdl ) ); ClickLightSourceButtonHdl(&m_aBtn_Light2); //m_aDelyedModelChangeTimer.SetTimeout( 4*EDIT_UPDATEDATA_TIMEOUT ); m_aModelChangeListener.startListening( uno::Reference< util::XModifyBroadcaster >(m_xSceneProperties, uno::UNO_QUERY) ); m_aBtn_Light1.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light2.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light3.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light4.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light5.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light6.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light7.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aBtn_Light8.SetAccessibleRelationLabeledBy(&m_aFT_LightSource); m_aCtl_Preview.SetAccessibleName(String(SchResId( STR_LIGHT_PREVIEW ))); } ThreeD_SceneIllumination_TabPage::~ThreeD_SceneIllumination_TabPage() { delete[] m_pLightSourceInfoList; } void ThreeD_SceneIllumination_TabPage::commitPendingChanges() { } IMPL_LINK( ThreeD_SceneIllumination_TabPage, fillControlsFromModel, void *, EMPTYARG ) { if( m_bInCommitToModel )//don't read own changes return 0; sal_Int32 nL=0; for( nL=0; nL<8; nL++) m_pLightSourceInfoList[nL].aLightSource = lcl_getLightSourceFromProperties( m_xSceneProperties, nL ); for( nL=0; nL<8; nL++) m_pLightSourceInfoList[nL].initButtonFromSource(); lcl_selectColor( m_aLB_AmbientLight, lcl_getAmbientColor( m_xSceneProperties )); this->updatePreview(); return 0; } void ThreeD_SceneIllumination_TabPage::applyLightSourceToModel( sal_uInt32 nLightNumber ) { ControllerLockGuard aGuard( m_xChartModel ); m_bInCommitToModel = true; sal_Int32 nIndex( nLightNumber ); lcl_setLightSource( m_xSceneProperties, m_pLightSourceInfoList[nIndex].aLightSource, nIndex ); m_bInCommitToModel = false; } void ThreeD_SceneIllumination_TabPage::applyLightSourcesToModel() { m_aTimerTriggeredControllerLock.startTimer(); ControllerLockGuard aGuard( m_xChartModel ); for( sal_Int32 nL=0; nL<8; nL++) applyLightSourceToModel( nL ); m_aTimerTriggeredControllerLock.startTimer(); } IMPL_LINK( ThreeD_SceneIllumination_TabPage, PreviewChangeHdl, void*, EMPTYARG ) { m_aTimerTriggeredControllerLock.startTimer(); //update m_pLightSourceInfoList from preview const SfxItemSet a3DLightAttributes(m_aCtl_Preview.GetSvx3DLightControl().Get3DAttributes()); LightSourceInfo* pInfo = &m_pLightSourceInfoList[0]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor1Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff1Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_1)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection1Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_1)).GetValue()); pInfo = &m_pLightSourceInfoList[1]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor2Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff2Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_2)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection2Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_2)).GetValue()); pInfo = &m_pLightSourceInfoList[2]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor3Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff3Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_3)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection3Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_3)).GetValue()); pInfo = &m_pLightSourceInfoList[3]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor4Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff4Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_4)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection4Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_4)).GetValue()); pInfo = &m_pLightSourceInfoList[4]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor5Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff5Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_5)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection5Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_5)).GetValue()); pInfo = &m_pLightSourceInfoList[5]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor6Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff6Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_6)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection6Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_6)).GetValue()); pInfo = &m_pLightSourceInfoList[6]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor7Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff7Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_7)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection7Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_7)).GetValue()); pInfo = &m_pLightSourceInfoList[7]; pInfo->aLightSource.nDiffuseColor = ((const Svx3DLightcolor8Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8)).GetValue().GetColor(); pInfo->aLightSource.bIsEnabled = ((const Svx3DLightOnOff8Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTON_8)).GetValue(); pInfo->aLightSource.aDirection = B3DVectorToDirection3D(((const Svx3DLightDirection8Item&)a3DLightAttributes.Get(SDRATTR_3DSCENE_LIGHTDIRECTION_8)).GetValue()); applyLightSourcesToModel(); return 0; } IMPL_LINK( ThreeD_SceneIllumination_TabPage, PreviewSelectHdl, void*, EMPTYARG ) { sal_uInt32 nLightNumber = m_aCtl_Preview.GetSvx3DLightControl().GetSelectedLight(); if(nLightNumber<8) { LightButton* pButton = m_pLightSourceInfoList[nLightNumber].pButton; if(!pButton->IsChecked()) ClickLightSourceButtonHdl(pButton); applyLightSourcesToModel(); } return 0; } IMPL_LINK( ThreeD_SceneIllumination_TabPage, ColorDialogHdl, Button*, pButton ) { bool bIsAmbientLight = (pButton==&m_aBtn_AmbientLight_Color); ColorLB* pListBox = ( bIsAmbientLight ? &m_aLB_AmbientLight : &m_aLB_LightSource); SvColorDialog aColorDlg( this ); aColorDlg.SetColor( pListBox->GetSelectEntryColor() ); if( aColorDlg.Execute() == RET_OK ) { Color aColor( aColorDlg.GetColor()); lcl_selectColor( *pListBox, aColor ); if( bIsAmbientLight ) { m_bInCommitToModel = true; lcl_setAmbientColor( m_xSceneProperties, aColor ); m_bInCommitToModel = false; } else { //get active lightsource: LightSourceInfo* pInfo = 0; sal_Int32 nL=0; for( nL=0; nL<8; nL++) { pInfo = &m_pLightSourceInfoList[nL]; if(pInfo->pButton->IsChecked()) break; pInfo = 0; } if(pInfo) applyLightSourceToModel( nL ); } SelectColorHdl( pListBox ); } return 0; } IMPL_LINK( ThreeD_SceneIllumination_TabPage, SelectColorHdl, ColorLB*, pListBox ) { if(pListBox==&m_aLB_AmbientLight) { m_bInCommitToModel = true; lcl_setAmbientColor( m_xSceneProperties, pListBox->GetSelectEntryColor().GetColor()); m_bInCommitToModel = false; } else if(pListBox==&m_aLB_LightSource) { //get active lightsource: LightSourceInfo* pInfo = 0; sal_Int32 nL=0; for( nL=0; nL<8; nL++) { pInfo = &m_pLightSourceInfoList[nL]; if(pInfo->pButton->IsChecked()) break; pInfo = 0; } if(pInfo) { pInfo->aLightSource.nDiffuseColor = pListBox->GetSelectEntryColor().GetColor(); applyLightSourceToModel( nL ); } } this->updatePreview(); return 0; } IMPL_LINK( ThreeD_SceneIllumination_TabPage, ClickLightSourceButtonHdl, LightButton*, pButton ) { if( !pButton ) return 0; LightSourceInfo* pInfo = 0; sal_Int32 nL=0; for( nL=0; nL<8; nL++) { if( m_pLightSourceInfoList[nL].pButton == pButton ) { pInfo = &m_pLightSourceInfoList[nL]; break; } } //update light button bool bIsChecked = pButton->IsChecked(); if(bIsChecked) { pButton->switchLightOn(!pButton->isLightOn()); if(pInfo) { pInfo->aLightSource.bIsEnabled=pButton->isLightOn(); applyLightSourceToModel( nL ); } } else { ControllerLockGuard aGuard( m_xChartModel ); for( nL=0; nL<8; nL++) { LightButton* pLightButton = m_pLightSourceInfoList[nL].pButton; pLightButton->Check( pLightButton == pButton ); } } //update color list box if(pInfo) { lcl_selectColor( m_aLB_LightSource, pInfo->aLightSource.nDiffuseColor ); } this->updatePreview(); return 0; } void ThreeD_SceneIllumination_TabPage::updatePreview() { SfxItemSet aItemSet(m_aCtl_Preview.GetSvx3DLightControl().Get3DAttributes()); LightSourceInfo* pInfo = &m_pLightSourceInfoList[0]; // AmbientColor aItemSet.Put(Svx3DAmbientcolorItem(m_aLB_AmbientLight.GetSelectEntryColor())); aItemSet.Put(Svx3DLightcolor1Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff1Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection1Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[1]; aItemSet.Put(Svx3DLightcolor2Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff2Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection2Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[2]; aItemSet.Put(Svx3DLightcolor3Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff3Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection3Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[3]; aItemSet.Put(Svx3DLightcolor4Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff4Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection4Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[4]; aItemSet.Put(Svx3DLightcolor5Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff5Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection5Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[5]; aItemSet.Put(Svx3DLightcolor6Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff6Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection6Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[6]; aItemSet.Put(Svx3DLightcolor7Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff7Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection7Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); pInfo = &m_pLightSourceInfoList[7]; aItemSet.Put(Svx3DLightcolor8Item(pInfo->aLightSource.nDiffuseColor)); aItemSet.Put(Svx3DLightOnOff8Item(pInfo->aLightSource.bIsEnabled)); aItemSet.Put(Svx3DLightDirection8Item(Direction3DToB3DVector(pInfo->aLightSource.aDirection))); // set lights and ambient light m_aCtl_Preview.GetSvx3DLightControl().Set3DAttributes(aItemSet); // select light for(sal_uInt32 a(0); a < 8; a++) { if(m_pLightSourceInfoList[a].pButton->IsChecked()) { m_aCtl_Preview.GetSvx3DLightControl().SelectLight(a); m_aCtl_Preview.CheckSelection(); break; } } } //............................................................................. } //namespace chart //.............................................................................