/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #ifdef SD_DLLIMPLEMENTATION #undef SD_DLLIMPLEMENTATION #endif #include #include #include #include #include #include "sdattr.hxx" #include "present.hxx" #include "present.hrc" #include "sdresid.hxx" #include "cusshow.hxx" using ::rtl::OUString; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::container; using namespace ::com::sun::star::beans; /************************************************************************* |* Ctor \************************************************************************/ SdStartPresentationDlg::SdStartPresentationDlg( Window* pWindow, const SfxItemSet& rInAttrs, List& rPageNames, List* pCSList ) : ModalDialog ( pWindow, SdResId( DLG_START_PRESENTATION ) ), aGrpRange ( this, SdResId( GRP_RANGE ) ), aRbtAll ( this, SdResId( RBT_ALL ) ), aRbtAtDia ( this, SdResId( RBT_AT_DIA ) ), aRbtCustomshow ( this, SdResId( RBT_CUSTOMSHOW ) ), aLbDias ( this, SdResId( LB_DIAS ) ), aLbCustomshow ( this, SdResId( LB_CUSTOMSHOW ) ), aGrpKind ( this, SdResId( GRP_KIND ) ), aRbtStandard ( this, SdResId( RBT_STANDARD ) ), aRbtWindow ( this, SdResId( RBT_WINDOW ) ), aRbtAuto ( this, SdResId( RBT_AUTO ) ), aTmfPause ( this, SdResId( TMF_PAUSE ) ), aCbxAutoLogo ( this, SdResId( CBX_AUTOLOGO ) ), aGrpOptions ( this, SdResId( GRP_OPTIONS ) ), aCbxManuel ( this, SdResId( CBX_MANUEL ) ), aCbxMousepointer ( this, SdResId( CBX_MOUSEPOINTER ) ), aCbxPen ( this, SdResId( CBX_PEN ) ), aCbxNavigator ( this, SdResId( CBX_NAVIGATOR ) ), aCbxAnimationAllowed ( this, SdResId( CBX_ANIMATION_ALLOWED ) ), aCbxChangePage ( this, SdResId( CBX_CHANGE_PAGE ) ), aCbxAlwaysOnTop ( this, SdResId( CBX_ALWAYS_ON_TOP ) ), maGrpMonitor ( this, SdResId( GRP_MONITOR ) ), maFtMonitor ( this, SdResId( FT_MONITOR ) ), maLBMonitor ( this, SdResId( LB_MONITOR ) ), aBtnOK ( this, SdResId( BTN_OK ) ), aBtnCancel ( this, SdResId( BTN_CANCEL ) ), aBtnHelp ( this, SdResId( BTN_HELP ) ), pCustomShowList ( pCSList ), rOutAttrs ( rInAttrs ), mnMonitors ( 0 ), msPrimaryMonitor( SdResId(STR_PRIMARY_MONITOR ) ), msMonitor( SdResId( STR_MONITOR ) ), msAllMonitors( SdResId( STR_ALL_MONITORS ) ) { FreeResource(); Link aLink( LINK( this, SdStartPresentationDlg, ChangeRangeHdl ) ); aRbtAll.SetClickHdl( aLink ); aRbtAtDia.SetClickHdl( aLink ); aRbtCustomshow.SetClickHdl( aLink ); aLink = LINK( this, SdStartPresentationDlg, ClickWindowPresentationHdl ); aRbtStandard.SetClickHdl( aLink ); aRbtWindow.SetClickHdl( aLink ); aRbtAuto.SetClickHdl( aLink ); aTmfPause.SetModifyHdl( LINK( this, SdStartPresentationDlg, ChangePauseHdl ) ); aTmfPause.SetFormat( TIMEF_SEC ); aLbDias.SetAccessibleRelationLabeledBy( &aRbtAtDia ); aLbDias.SetAccessibleName(aRbtAtDia.GetText()); aLbCustomshow.SetAccessibleRelationLabeledBy( &aRbtCustomshow ); aTmfPause.SetAccessibleRelationLabeledBy( &aRbtAuto ); aTmfPause.SetAccessibleName(aRbtAuto.GetText()); // Listbox mit Seitennamen fuellen rPageNames.First(); for( sal_uInt16 i = 0; i < rPageNames.Count(); i++ ) { aLbDias.InsertEntry( *( String* ) rPageNames.GetCurObject() ); rPageNames.Next(); } if( pCustomShowList ) { sal_uInt16 nPosToSelect = (sal_uInt16) pCustomShowList->GetCurPos(); SdCustomShow* pCustomShow; // Listbox mit CustomShows fuellen for( pCustomShow = (SdCustomShow*) pCustomShowList->First(); pCustomShow != NULL; pCustomShow = (SdCustomShow*) pCustomShowList->Next() ) { aLbCustomshow.InsertEntry( pCustomShow->GetName() ); } aLbCustomshow.SelectEntryPos( nPosToSelect ); pCustomShowList->Seek( nPosToSelect ); } else aRbtCustomshow.Disable(); if( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_CUSTOMSHOW ) ).GetValue() && pCSList ) aRbtCustomshow.Check(); else if( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_ALL ) ).GetValue() ) aRbtAll.Check(); else aRbtAtDia.Check(); aLbDias.SelectEntry( ( ( const SfxStringItem& ) rOutAttrs.Get( ATTR_PRESENT_DIANAME ) ).GetValue() ); aCbxManuel.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_MANUEL ) ).GetValue() ); aCbxMousepointer.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_MOUSE ) ).GetValue() ); aCbxPen.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_PEN ) ).GetValue() ); aCbxNavigator.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_NAVIGATOR ) ).GetValue() ); aCbxAnimationAllowed.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_ANIMATION_ALLOWED ) ).GetValue() ); aCbxChangePage.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_CHANGE_PAGE ) ).GetValue() ); aCbxAlwaysOnTop.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_ALWAYS_ON_TOP ) ).GetValue() ); const sal_Bool bEndless = ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_ENDLESS ) ).GetValue(); const sal_Bool bWindow = !( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_FULLSCREEN ) ).GetValue(); const long nPause = ( ( const SfxUInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_PAUSE_TIMEOUT ) ).GetValue(); aTmfPause.SetTime( Time( 0, 0, nPause ) ); // set cursor in timefield Edit *pEdit = aTmfPause.GetField(); Selection aSel( pEdit->GetMaxTextLen(), pEdit->GetMaxTextLen() ); pEdit->SetSelection( aSel ); aCbxAutoLogo.Check( ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_SHOW_PAUSELOGO ) ).GetValue() ); if( bWindow ) aRbtWindow.Check( sal_True ); else if( bEndless ) aRbtAuto.Check( sal_True ); else aRbtStandard.Check( sal_True ); InitMonitorSettings(); ChangeRangeHdl( this ); ClickWindowPresentationHdl( NULL ); ChangePauseHdl( NULL ); } void SdStartPresentationDlg::InitMonitorSettings() { try { Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW ); Reference< XIndexAccess > xMultiMon( xFactory->createInstance(OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayAccess" ) ) ), UNO_QUERY_THROW ); maGrpMonitor.Show( true ); maFtMonitor.Show( true ); maLBMonitor.Show( true ); mnMonitors = xMultiMon->getCount(); if( mnMonitors <= 1 ) { maFtMonitor.Enable( false ); maLBMonitor.Enable( false ); } else { sal_Bool bMultiscreen = false; sal_Int32 nDefaultDisplay (0); Reference< XPropertySet > xMonProps( xMultiMon, UNO_QUERY ); if( xMonProps.is() ) try { const OUString sPropName1( RTL_CONSTASCII_USTRINGPARAM( "MultiDisplay" ) ); xMonProps->getPropertyValue( sPropName1 ) >>= bMultiscreen; const OUString sPropName2( RTL_CONSTASCII_USTRINGPARAM( "DefaultDisplay" ) ); xMonProps->getPropertyValue( sPropName2 ) >>= nDefaultDisplay; } catch( Exception& ) { } sal_Int32 nSelectedIndex (-1); sal_Int32 nDefaultDisplayIndex (-1); const sal_Int32 nDefaultSelectedDisplay ( ( ( const SfxInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_DISPLAY ) ).GetValue()); const String sPlaceHolder( RTL_CONSTASCII_USTRINGPARAM( "%1" ) ); for( sal_Int32 nDisplay = 0; nDisplay < mnMonitors; nDisplay++ ) { String aName( nDisplay == nDefaultDisplay ? msPrimaryMonitor : msMonitor ); const String aNumber( String::CreateFromInt32( nDisplay + 1 ) ); aName.SearchAndReplace( sPlaceHolder, aNumber ); maLBMonitor.InsertEntry( aName ); // Store display index together with name. const sal_uInt32 nEntryIndex (maLBMonitor.GetEntryCount()-1); maLBMonitor.SetEntryData(nEntryIndex, (void*)nDisplay); // Remember the index of the default selection. if (nDefaultSelectedDisplay == nDisplay) nSelectedIndex = nEntryIndex; // Remember index of the default display. if (nDisplay == nDefaultDisplay) nDefaultDisplayIndex = nEntryIndex; } if( !bMultiscreen ) { maLBMonitor.InsertEntry( msAllMonitors ); const sal_uInt32 nEntryIndex (maLBMonitor.GetEntryCount()-1); maLBMonitor.SetEntryData(nEntryIndex, (void*)-1); if (nDefaultSelectedDisplay == -1) nSelectedIndex = nEntryIndex; } if (nSelectedIndex < 0) { if (nDefaultSelectedDisplay < 0) nSelectedIndex = 0; else nSelectedIndex = nDefaultDisplayIndex; } maLBMonitor.SelectEntryPos((sal_uInt16)nSelectedIndex); } } catch( Exception& ) { } } /************************************************************************* |* Setzt die ausgewaehlten Attribute des Dialogs \************************************************************************/ void SdStartPresentationDlg::GetAttr( SfxItemSet& rAttr ) { rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ALL, aRbtAll.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_CUSTOMSHOW, aRbtCustomshow.IsChecked() ) ); rAttr.Put( SfxStringItem ( ATTR_PRESENT_DIANAME, aLbDias.GetSelectEntry() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_MANUEL, aCbxManuel.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_MOUSE, aCbxMousepointer.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_PEN, aCbxPen.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_NAVIGATOR, aCbxNavigator.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ANIMATION_ALLOWED, aCbxAnimationAllowed.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_CHANGE_PAGE, aCbxChangePage.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ALWAYS_ON_TOP, aCbxAlwaysOnTop.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_FULLSCREEN, !aRbtWindow.IsChecked() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ENDLESS, aRbtAuto.IsChecked() ) ); rAttr.Put( SfxUInt32Item ( ATTR_PRESENT_PAUSE_TIMEOUT, aTmfPause.GetTime().GetMSFromTime() / 1000 ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_SHOW_PAUSELOGO, aCbxAutoLogo.IsChecked() ) ); sal_uInt16 nPos = maLBMonitor.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND ) rAttr.Put( SfxInt32Item ( ATTR_PRESENT_DISPLAY, (sal_Int32)(sal_IntPtr)maLBMonitor.GetEntryData(nPos)) ); nPos = aLbCustomshow.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND ) pCustomShowList->Seek( nPos ); } /************************************************************************* |* Handler: Enabled/Disabled Listbox "Dias" \************************************************************************/ IMPL_LINK( SdStartPresentationDlg, ChangeRangeHdl, void *, EMPTYARG ) { aLbDias.Enable( aRbtAtDia.IsChecked() ); aLbCustomshow.Enable( aRbtCustomshow.IsChecked() ); return( 0L ); } /************************************************************************* |* Handler: Enabled/Disabled Checkbox "AlwaysOnTop" \************************************************************************/ IMPL_LINK( SdStartPresentationDlg, ClickWindowPresentationHdl, void *, EMPTYARG ) { const bool bAuto = aRbtAuto.IsChecked(); const bool bWindow = aRbtWindow.IsChecked(); // aFtPause.Enable( bAuto ); aTmfPause.Enable( bAuto ); aCbxAutoLogo.Enable( bAuto && ( aTmfPause.GetTime().GetMSFromTime() > 0 ) ); const bool bDisplay = !bWindow && ( mnMonitors > 1 ); maFtMonitor.Enable( bDisplay ); maLBMonitor.Enable( bDisplay ); if( bWindow ) { aCbxAlwaysOnTop.Enable( sal_False ); aCbxAlwaysOnTop.Check( sal_False ); } else aCbxAlwaysOnTop.Enable(); return( 0L ); } /************************************************************************* |* Handler: Enabled/Disabled Checkbox "AlwaysOnTop" \************************************************************************/ IMPL_LINK( SdStartPresentationDlg, ChangePauseHdl, void *, EMPTYARG ) { aCbxAutoLogo.Enable( aRbtAuto.IsChecked() && ( aTmfPause.GetTime().GetMSFromTime() > 0 ) ); return( 0L ); }