summaryrefslogtreecommitdiff
path: root/sd/source/ui/dlg/present.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/dlg/present.cxx')
-rw-r--r--sd/source/ui/dlg/present.cxx319
1 files changed, 319 insertions, 0 deletions
diff --git a/sd/source/ui/dlg/present.cxx b/sd/source/ui/dlg/present.cxx
new file mode 100644
index 000000000000..473d2f4b452b
--- /dev/null
+++ b/sd/source/ui/dlg/present.cxx
@@ -0,0 +1,319 @@
+/*************************************************************************
+ *
+ * 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
+ * <http://www.openoffice.org/license.html>
+ * 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 <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <comphelper/processfactory.hxx>
+#include <svl/itemset.hxx>
+
+#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 );
+
+ // Listbox mit Seitennamen fuellen
+ rPageNames.First();
+ for( UINT16 i = 0;
+ i < rPageNames.Count();
+ i++ )
+ {
+ aLbDias.InsertEntry( *( String* ) rPageNames.GetCurObject() );
+ rPageNames.Next();
+ }
+
+ if( pCustomShowList )
+ {
+ USHORT nPosToSelect = (USHORT) 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 BOOL bEndless = ( ( const SfxBoolItem& ) rOutAttrs.Get( ATTR_PRESENT_ENDLESS ) ).GetValue();
+ const 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( TRUE );
+ else if( bEndless )
+ aRbtAuto.Check( TRUE );
+ else
+ aRbtStandard.Check( 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 nPrimaryIndex = 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 ) >>= nPrimaryIndex;
+ }
+ catch( Exception& )
+ {
+ }
+
+ const String sPlaceHolder( RTL_CONSTASCII_USTRINGPARAM( "%1" ) );
+ for( sal_Int32 nDisplay = 0; nDisplay < mnMonitors; nDisplay++ )
+ {
+ String aName( nDisplay == nPrimaryIndex ? msPrimaryMonitor : msMonitor );
+ const String aNumber( String::CreateFromInt32( nDisplay + 1 ) );
+ aName.SearchAndReplace( sPlaceHolder, aNumber );
+ maLBMonitor.InsertEntry( aName );
+ }
+
+ if( !bMultiscreen )
+ maLBMonitor.InsertEntry( msAllMonitors );
+
+ sal_Int32 nSelected = ( ( const SfxInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_DISPLAY ) ).GetValue();
+ if( nSelected <= 0 )
+ nSelected = nPrimaryIndex;
+ else
+ nSelected--;
+
+ maLBMonitor.SelectEntryPos( (USHORT)nSelected );
+ }
+ }
+ 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() ) );
+
+ USHORT nPos = maLBMonitor.GetSelectEntryPos();
+ if( nPos != LISTBOX_ENTRY_NOTFOUND )
+ rAttr.Put( SfxInt32Item ( ATTR_PRESENT_DISPLAY, nPos + 1 ) );
+
+ 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( FALSE );
+ aCbxAlwaysOnTop.Check( 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 );
+}
+
+