office-gobmx/sd/source/ui/dlg/dlgass.cxx
Kurt Zenker bc3dee3207 INTEGRATION: CWS sdwarningsbegone (1.41.38); FILE MERGED
2006/11/27 13:47:57 cl 1.41.38.2: #i69285# warning free code changes for sd project
2006/11/22 12:41:45 cl 1.41.38.1: #i69285# warning free code changes for unxlngi6.pro
2006-12-12 16:00:33 +00:00

2066 lines
63 KiB
C++

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: dlgass.cxx,v $
*
* $Revision: 1.43 $
*
* last change: $Author: kz $ $Date: 2006-12-12 17:00:33 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
#ifdef SD_DLLIMPLEMENTATION
#undef SD_DLLIMPLEMENTATION
#endif
#ifndef _COM_SUN_STAR_PRESENTATION_CLICKACTION_HPP_
#include <com/sun/star/presentation/ClickAction.hpp>
#endif
#ifndef _SV_SVAPP_HXX
#include <vcl/svapp.hxx>
#endif
#ifndef _VOS_MUTEX_HXX_
#include <vos/mutex.hxx>
#endif
#ifndef _SV_MSGBOX_HXX
#include <vcl/msgbox.hxx>
#endif
#ifndef _SV_LSTBOX_HXX
#include <vcl/lstbox.hxx>
#endif
#ifndef _SV_COMBOBOX_HXX
#include <vcl/combobox.hxx>
#endif
#ifndef _SFXDOCTEMPL_HXX
#include <sfx2/doctempl.hxx>
#endif
#ifndef _SFXLSTNER_HXX
#include <svtools/lstner.hxx>
#endif
#ifndef _SFXDOCINF_HXX
#include <sfx2/docinf.hxx>
#endif
#ifndef _SFX_OBJSH_HXX
#include <sfx2/objsh.hxx>
#endif
#ifndef _EHDL_HXX
#include <svtools/ehdl.hxx>
#endif
#ifndef _SFXECODE_HXX
#include <svtools/sfxecode.hxx>
#endif
#ifndef _URLOBJ_HXX
#include <tools/urlobj.hxx>
#endif
#ifndef _COM_SUN_STAR_PRESENTATION_FADEEFFECT_HPP_
#include <com/sun/star/presentation/FadeEffect.hpp>
#endif
#ifndef _SD_FADEDEF_H
#include <fadedef.h>
#endif
#ifndef _SFXSIDS_HRC
#include <sfx2/sfxsids.hrc>
#endif
#ifndef _UNDO_HXX
#include <svtools/undo.hxx>
#endif
#ifndef SD_DRAW_DOC_SHELL_HXX
#include "DrawDocShell.hxx"
#endif
#ifndef _SV_GDIMTF_HXX
#include <vcl/gdimtf.hxx>
#endif
#include <vcl/wintypes.hxx>
#ifndef _SD_DOCPREV_HXX_
#include "docprev.hxx"
#endif
#ifndef _SFXAPP_HXX
#include <sfx2/app.hxx>
#endif
#ifndef _SFXDOCFILE_HXX
#include <sfx2/docfile.hxx>
#endif
#ifndef _SFXDISPATCH_HXX
#include <sfx2/dispatch.hxx>
#endif
#ifndef _SFXREQUEST_HXX
#include <sfx2/request.hxx>
#endif
#ifndef _COM_SUN_STAR_SDBC_XRESULTSET_HPP_
#include <com/sun/star/sdbc/XResultSet.hpp>
#endif
#ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_
#include <com/sun/star/lang/XComponent.hpp>
#endif
#ifndef _COM_SUN_STAR_UTIL_XCLOSEABLE_HPP_
#include <com/sun/star/util/XCloseable.hpp>
#endif
#ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_
#include <com/sun/star/uno/RuntimeException.hpp>
#endif
#ifndef _COM_SUN_STAR_FRAME_XMODULEMANAGER_HPP_
#include <com/sun/star/frame/XModuleManager.hpp>
#endif
#ifndef _COM_SUN_STAR_UCB_XSIMPLEFILEACCESS_HPP_
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
#endif
#ifndef _COM_SUN_STAR_UI_XMODULEUICONFIGURATIONMANAGERSUPPLIER_HPP_
#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
#endif
#ifndef _COM_SUN_STAR_UI_XIMAGEMANAGER_HPP_
#include <com/sun/star/ui/XImageManager.hpp>
#endif
#ifndef INCLUDED_SVTOOLS_HISTORYOPTIONS_HXX
#include <svtools/historyoptions.hxx>
#endif
#ifndef _URLOBJ_HXX
#include <tools/urlobj.hxx>
#endif
#ifndef _OSL_FILE_HXX_
#include <osl/file.hxx>
#endif
#ifndef _FILEDLGHELPER_HXX
#include <sfx2/filedlghelper.hxx>
#endif
#include "sdpage.hxx"
#include "helpids.h"
#ifndef INC_ASSCLASS
#include "assclass.hxx"
#endif
#include "dlgass.hrc"
#ifndef INC_DLGASS
#include "dlgass.hxx"
#endif
#ifndef SD_DLGCTRLS_HXX
#include "dlgctrls.hxx"
#endif
#ifndef _SD_CFGID_HXX
#include "strings.hrc"
#endif
#ifndef _DATETIMEITEM_HXX
#include "dlgassim.hxx"
#endif
#ifndef _TEMPLATE_SCANNER_HXX
#include "TemplateScanner.hxx"
#endif
#ifndef SD_OUTPUT_DEVICE_UPDATER_HXX
#include "WindowUpdater.hxx"
#endif
#include <comphelper/processfactory.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::sd;
void InterpolateFixedBitmap( FixedBitmap * pBitmap )
{
Bitmap aBmp( pBitmap->GetBitmap() );
Size aSize = pBitmap->GetSizePixel();
aBmp.Scale( aSize, BMP_SCALE_INTERPOLATE );
pBitmap->SetBitmap( aBmp );
}
// ====================================================================
// ====================================================================
UINT32 PageHelpIds[] =
{
HID_SD_AUTOPILOT_PAGE1,
HID_SD_AUTOPILOT_PAGE2,
HID_SD_AUTOPILOT_PAGE3,
HID_SD_AUTOPILOT_PAGE4,
HID_SD_AUTOPILOT_PAGE5
};
// ====================================================================
class PasswordEntry
{
public:
String maPassword;
String maPath;
};
DECLARE_LIST( PasswordEntryList, PasswordEntry * )
// ====================================================================
class AssistentDlgImpl : public SfxListener
{
public:
AssistentDlgImpl( ::Window* pWindow, const Link& rFinishLink, BOOL bAutoPilot );
~AssistentDlgImpl();
/// Local mutex used to serialize concurrent method calls.
::osl::Mutex maMutex;
SfxObjectShellLock GetDocument();
/** closes the current preview docshell */
void CloseDocShell();
/** Extract form the history list of recently used files the impress
files and insert them into a listbox.
*/
void ScanDocmenu (void);
/** Flag that is set to TRUE after the recently used files have been
scanned.
*/
BOOL mbRecentDocumentsReady;
/** When the list of templates has not been scanned already this is done
when this method is called. That includes requesting the whole list
of templates from UCB and extracting from that list the impress
templates and layouts and storing them for later use in
<member>maPresentList</member>. Note that the first call to this
method after installing a new Office may take some time.
*/
void ProvideTemplates (void);
/** This method transfers the template folders from the template scanner
to the internal structures of this class. On termination it sets
the flag <member>mbTemplatesReady</member> to <TRUE/> to indicate
that the templates are available.
@param rTemplateFolders
This is a list of template folders. This method takes ownership
of the supplied entries by removing them from the list and
transferring them to an internal structure.
*/
void TemplateScanDone (std::vector<TemplateDir*>& rTemplateFolders);
/** Flag that is set to TRUE after the impress templates have been
scanned.
*/
BOOL mbTemplatesReady;
/** Flag used to prevent nested or concurrent calls to the
<member>UpdatePreview</memember> method. A <TRUE/> value indicates
that a preview update is currently active.
*/
BOOL mbPreviewUpdating;
::Window* mpWindow;
void SavePassword( SfxObjectShellLock xDoc, const String& rPath );
void RestorePassword( SfxItemSet* pSet, const String& rPath );
String GetPassword( const String rPath );
void DeletePassords();
PasswordEntryList maPasswordList;
String maDocFile;
String maLayoutFile;
String GetDocFileName();
String GetLayoutFileName();
/// List of URLs of recently used impress files.
std::vector<String*> maOpenFilesList;
/// List of folders containing data about impress templates.
std::vector<TemplateDir*> maPresentList;
/// Currently selected template folder.
TemplateDir* mpTemplateRegion;
/// Currently selected layout folder.
TemplateDir* mpLayoutRegion;
// preview
BOOL mbUserDataDirty;
Timer maPrevTimer;
Timer maEffectPrevTimer;
Timer maUpdatePageListTimer;
Timer maStartScanTimer;
SfxObjectShellLock xDocShell;
::std::auto_ptr<WindowUpdater> mpWindowUpdater;
BOOL mbPreview;
USHORT mnShowPage;
BOOL mbDocPreview;
ULONG mnTemplate;
String maPageListFile;
void UpdatePreview( BOOL bDocPreview );
void UpdatePageList();
void UpdateUserData();
BOOL IsOwnFormat( const String& rPath );
// dlg status
void EndDialog( long nResult = 0 );
void SetStartType( StartType eType );
StartType GetStartType();
void SelectTemplateRegion( const String& rRegion );
void SelectLayoutRegion( const String& rRegion );
void UpdatePage();
void ChangePage();
void LeavePage();
String GetUiTextForCommand (const ::rtl::OUString& aCommandURL);
Image GetUiIconForCommand (const ::rtl::OUString& aCommandURL);
DECL_LINK( StartScanHdl, void * );
DECL_LINK( SelectFileHdl, ListBox * );
DECL_LINK( SelectRegionHdl, ListBox * );
DECL_LINK( UpdatePreviewHdl, void * );
DECL_LINK( UpdatePageListHdl, void * );
DECL_LINK( StartTypeHdl, RadioButton * );
DECL_LINK( SelectTemplateHdl, ListBox * );
DECL_LINK( NextPageHdl, PushButton * );
DECL_LINK( LastPageHdl, PushButton * );
DECL_LINK( PreviewFlagHdl, CheckBox * );
DECL_LINK( EffectPreviewHdl, Button * );
DECL_LINK( SelectLayoutHdl, ListBox * );
DECL_LINK( PageSelectHdl, Control * );
DECL_LINK( PresTypeHdl, RadioButton * );
DECL_LINK( UpdateUserDataHdl, Edit* );
DECL_LINK( SelectEffectHdl, void* );
DECL_LINK( OpenButtonHdl, Button * );
// Common
Assistent maAssistentFunc;
CheckBox maPreviewFlag;
CheckBox maStartWithFlag;
HelpButton maHelpButton;
CancelButton maCancelButton;
PushButton maLastPageButton;
PushButton maNextPageButton;
OKButton maFinishButton;
SdDocPreviewWin maPreview;
// Seite 1
FixedBitmap* mpPage1FB;
FixedLine* mpPage1ArtFL;
RadioButton* mpPage1EmptyRB;
RadioButton* mpPage1TemplateRB;
ListBox* mpPage1RegionLB;
ListBox* mpPage1TemplateLB;
RadioButton* mpPage1OpenRB;
ListBox* mpPage1OpenLB;
PushButton* mpPage1OpenPB;
// Seite 2
FixedBitmap* mpPage2FB;
FixedLine* mpPage2LayoutFL;
ListBox* mpPage2RegionLB;
ListBox* mpPage2LayoutLB;
FixedLine* mpPage2OutTypesFL;
RadioButton* mpPage2Medium1RB;
RadioButton* mpPage2Medium2RB;
RadioButton* mpPage2Medium3RB;
RadioButton* mpPage2Medium4RB;
RadioButton* mpPage2Medium5RB;
// Seite 3
FixedBitmap* mpPage3FB;
FixedLine* mpPage3EffectFL;
FixedText* mpPage3EffectFT;
FadeEffectLB* mpPage3EffectLB;
FixedText* mpPage3SpeedFT;
ListBox* mpPage3SpeedLB;
FixedLine* mpPage3PresTypeFL;
RadioButton* mpPage3PresTypeLiveRB;
RadioButton* mpPage3PresTypeKioskRB;
FixedText* mpPage3PresTimeFT;
TimeField* mpPage3PresTimeTMF;
FixedText* mpPage3BreakFT;
TimeField* mpPage3BreakTMF;
CheckBox* mpPage3LogoCB;
// Seite 4
FixedBitmap* mpPage4FB;
FixedLine* mpPage4PersonalFL;
FixedText* mpPage4AskNameFT;
Edit* mpPage4AskNameEDT;
FixedText* mpPage4AskTopicFT;
Edit* mpPage4AskTopicEDT;
FixedText* mpPage4AskInfoFT;
MultiLineEdit* mpPage4AskInfoEDT;
// Seite 5
FixedBitmap* mpPage5FB;
FixedText* mpPage5PageListFT;
SdPageListControl* mpPage5PageListCT;
CheckBox* mpPage5SummaryCB;
};
// ====================================================================
AssistentDlgImpl::AssistentDlgImpl( ::Window* pWindow, const Link& rFinishLink, BOOL bAutoPilot ) :
mpTemplateRegion(NULL),
mpLayoutRegion(NULL),
mbUserDataDirty(FALSE),
xDocShell (NULL),
mpWindowUpdater (new WindowUpdater()),
mbPreview(TRUE),
mnShowPage(0),
mbDocPreview(FALSE),
maAssistentFunc(5),
maPreviewFlag(pWindow,SdResId(CB_PREVIEW)),
maStartWithFlag(pWindow,SdResId(CB_STARTWITH)),
maHelpButton(pWindow,SdResId(BUT_HELP)),
maCancelButton(pWindow,SdResId(BUT_CANCEL)),
maLastPageButton(pWindow,SdResId(BUT_LAST)),
maNextPageButton(pWindow,SdResId(BUT_NEXT)),
maFinishButton(pWindow,SdResId(BUT_FINISH)),
maPreview(pWindow,SdResId(CT_PREVIEW))
{
maPageListFile += sal_Unicode('?'),
mbRecentDocumentsReady = FALSE;
mbTemplatesReady = FALSE;
mbPreviewUpdating = FALSE;
mpWindow = pWindow;
if(bAutoPilot)
maStartWithFlag.Hide();
else
maAssistentFunc.InsertControl(1, &maStartWithFlag );
//page1 wird initialisiert und an die Assistentenfunktionalitaet
//uebergeben
maAssistentFunc.InsertControl(1, &maPreview );
maAssistentFunc.InsertControl(1, &maPreviewFlag );
maAssistentFunc.InsertControl(1,
mpPage1FB = new FixedBitmap(pWindow,SdResId(FB_PAGE1)));
maAssistentFunc.InsertControl(1,
mpPage1ArtFL = new FixedLine(pWindow,SdResId(FL_PAGE1_ARTGROUP)));
maAssistentFunc.InsertControl(1,
mpPage1EmptyRB=new RadioButton(pWindow,SdResId(RB_PAGE1_EMPTY)));
maAssistentFunc.InsertControl(1,
mpPage1TemplateRB=new RadioButton(pWindow,SdResId(RB_PAGE1_TEMPLATE)));
maAssistentFunc.InsertControl(1,
mpPage1OpenRB=new RadioButton(pWindow,SdResId(RB_PAGE1_OPEN)));
maAssistentFunc.InsertControl(1,
mpPage1RegionLB = new ListBox(pWindow,SdResId(LB_PAGE1_REGION)));
maAssistentFunc.InsertControl(1,
mpPage1TemplateLB=new ListBox(pWindow,SdResId(LB_PAGE1_TEMPLATES)));
maAssistentFunc.InsertControl(1,
mpPage1OpenPB=new PushButton(pWindow,SdResId(PB_PAGE1_OPEN)));
maAssistentFunc.InsertControl(1,
mpPage1OpenLB=new ListBox(pWindow,SdResId(LB_PAGE1_OPEN)));
// Align the button and list box displayed for the "open existing file"
// radio button with the text of that radio button.
{
RadioButton aEmptyRB (mpWindow);
sal_Int32 nIndent (aEmptyRB.CalcMinimumSize(0).Width());
sal_Int32 nLeft (mpPage1OpenRB->GetPosPixel().X() + nIndent);
sal_Int32 nWidth (mpPage1OpenRB->GetSizePixel().Width() - nIndent);
mpPage1OpenPB->SetPosSizePixel(
Point(nLeft, mpPage1OpenPB->GetPosPixel().Y()),
Size(mpPage1OpenPB->GetSizePixel()));
mpPage1OpenLB->SetPosSizePixel(
Point(nLeft, mpPage1OpenLB->GetPosPixel().Y()),
Size(nWidth, mpPage1OpenLB->GetSizePixel().Height()));
}
// Set text and icon of the 'Open...' button.
{
String sText (GetUiTextForCommand(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Open"))));
// Remove the mnemonic and add a leading space so that icon and text
// are not too close together.
sText.SearchAndReplaceAll(String(RTL_CONSTASCII_STRINGPARAM("~")),String());
sText.Insert(String(RTL_CONSTASCII_STRINGPARAM(" ")),0);
mpPage1OpenPB->SetText(sText);
// Place icon left of text and both centered in the button.
mpPage1OpenPB->SetModeImage(
GetUiIconForCommand(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Open"))),
BMP_COLOR_NORMAL);
mpPage1OpenPB->EnableImageDisplay(TRUE);
mpPage1OpenPB->EnableTextDisplay(TRUE);
mpPage1OpenPB->SetImageAlign(IMAGEALIGN_LEFT);
mpPage1OpenPB->SetStyle(mpPage1OpenPB->GetStyle() | WB_CENTER);
}
// links&handler
mpPage1RegionLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectRegionHdl));
mpPage1RegionLB->SetDropDownLineCount( 6 );
mpPage1TemplateLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectTemplateHdl));
mpPage1TemplateLB->InsertEntry(String(SdResId(STR_ISLOADING)));
mpPage1EmptyRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
mpPage1TemplateRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
mpPage1OpenRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
mpPage1OpenLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectFileHdl));
mpPage1OpenLB->SetDoubleClickHdl(rFinishLink);
mpPage1OpenPB->SetClickHdl(LINK(this,AssistentDlgImpl,OpenButtonHdl));
// mpPage1OpenLB->InsertEntry(String(SdResId(STR_WIZARD_POSITION)));
// Seite 2
maAssistentFunc.InsertControl(2, &maPreview );
maAssistentFunc.InsertControl(2, &maPreviewFlag );
maAssistentFunc.InsertControl(2,
mpPage2FB = new FixedBitmap(pWindow,SdResId(FB_PAGE2)));
maAssistentFunc.InsertControl(2,
mpPage2LayoutFL = new FixedLine( pWindow, SdResId(FL_PAGE2_LAYOUT) ));
maAssistentFunc.InsertControl(2,
mpPage2RegionLB = new ListBox(pWindow,SdResId(LB_PAGE2_REGION) ));
maAssistentFunc.InsertControl(2,
mpPage2LayoutLB = new ListBox(pWindow,SdResId(LB_PAGE2_LAYOUT) ));
maAssistentFunc.InsertControl(2,
mpPage2OutTypesFL = new FixedLine( pWindow, SdResId(FL_PAGE2_OUTPUTTYPES) ));
maAssistentFunc.InsertControl(2,
mpPage2Medium5RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM5) ));
maAssistentFunc.InsertControl(2,
mpPage2Medium3RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM3) ));
maAssistentFunc.InsertControl(2,
mpPage2Medium4RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM4) ));
maAssistentFunc.InsertControl(2,
mpPage2Medium1RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM1) ));
maAssistentFunc.InsertControl(2,
mpPage2Medium2RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM2) ));
mpPage2Medium5RB->Check();
mpPage2RegionLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectRegionHdl));
mpPage2RegionLB->SetDropDownLineCount( 6 );
mpPage2LayoutLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectLayoutHdl));
mpPage2LayoutLB->InsertEntry(String(SdResId(STR_ISLOADING)));
// Seite 3
maAssistentFunc.InsertControl(3, &maPreview );
maAssistentFunc.InsertControl(3, &maPreviewFlag );
maAssistentFunc.InsertControl(3,
mpPage3FB = new FixedBitmap(pWindow,SdResId(FB_PAGE3)));
maAssistentFunc.InsertControl(3,
mpPage3EffectFL = new FixedLine( pWindow, SdResId(FL_PAGE3_EFFECT) ));
maAssistentFunc.InsertControl(3,
mpPage3EffectFT = new FixedText( pWindow, SdResId(FT_PAGE3_EFFECT) ));
maAssistentFunc.InsertControl(3,
mpPage3EffectLB = new FadeEffectLB( pWindow, SdResId(LB_PAGE3_EFFECT) ));
maAssistentFunc.InsertControl(3,
mpPage3SpeedFT = new FixedText( pWindow, SdResId(FT_PAGE3_SPEED) ));
maAssistentFunc.InsertControl(3,
mpPage3SpeedLB = new FadeEffectLB( pWindow, SdResId(LB_PAGE3_SPEED) ));
maAssistentFunc.InsertControl(3,
mpPage3PresTypeFL = new FixedLine( pWindow, SdResId(FL_PAGE3_PRESTYPE) ));
maAssistentFunc.InsertControl(3,
mpPage3PresTypeLiveRB = new RadioButton( pWindow, SdResId(RB_PAGE3_LIVE) ));
maAssistentFunc.InsertControl(3,
mpPage3PresTypeKioskRB = new RadioButton( pWindow, SdResId(RB_PAGE3_KIOSK) ));
maAssistentFunc.InsertControl(3,
mpPage3PresTimeFT = new FixedText( pWindow, SdResId( FT_PAGE3_TIME) ));
maAssistentFunc.InsertControl(3,
mpPage3PresTimeTMF = new TimeField( pWindow, SdResId( TMF_PAGE3_TIME) ));
maAssistentFunc.InsertControl(3,
mpPage3BreakFT = new FixedText( pWindow, SdResId( FT_PAGE3_BREAK) ));
maAssistentFunc.InsertControl(3,
mpPage3BreakTMF = new TimeField( pWindow, SdResId( TMF_PAGE3_BREAK) ));
maAssistentFunc.InsertControl(3,
mpPage3LogoCB = new CheckBox( pWindow, SdResId( CB_PAGE3_LOGO) ));
mpPage3EffectLB->Fill();
// mpPage3EffectLB->SelectEffect( presentation::FadeEffect_NONE );
mpPage3EffectLB->SetSelectHdl( LINK(this,AssistentDlgImpl,SelectEffectHdl ));
mpPage3EffectLB->SetDropDownLineCount( 12 );
mpPage3SpeedLB->InsertEntry( String( SdResId(STR_SLOW) ));
mpPage3SpeedLB->InsertEntry( String( SdResId(STR_MEDIUM) ));
mpPage3SpeedLB->InsertEntry( String( SdResId(STR_FAST) ));
mpPage3SpeedLB->SetDropDownLineCount( 3 );
mpPage3SpeedLB->SetSelectHdl( LINK(this,AssistentDlgImpl,SelectEffectHdl ));
mpPage3SpeedLB->SelectEntryPos( 1 );
mpPage3PresTypeLiveRB->Check();
mpPage3PresTypeLiveRB->SetClickHdl( LINK(this,AssistentDlgImpl, PresTypeHdl ));
mpPage3PresTypeKioskRB->SetClickHdl( LINK(this,AssistentDlgImpl, PresTypeHdl ));
mpPage3PresTimeTMF->SetFormat( TIMEF_SEC );
mpPage3PresTimeTMF->SetTime( Time( 0, 0, 10 ) );
mpPage3BreakTMF->SetFormat( TIMEF_SEC );
mpPage3BreakTMF->SetTime( Time( 0, 0, 10 ) );
mpPage3LogoCB->Check();
// set cursor in timefield
Edit *pEditPage3PresTimeTMF = mpPage3PresTimeTMF->GetField();
Edit *pEditPage3BreakTMF = mpPage3BreakTMF->GetField();
Selection aSel1( pEditPage3PresTimeTMF->GetMaxTextLen(), pEditPage3PresTimeTMF->GetMaxTextLen() );
Selection aSel2( pEditPage3BreakTMF->GetMaxTextLen(), pEditPage3BreakTMF->GetMaxTextLen() );
pEditPage3PresTimeTMF->SetSelection( aSel1 );
pEditPage3BreakTMF->SetSelection( aSel2 );
// Seite 4
maAssistentFunc.InsertControl(4,
mpPage4FB = new FixedBitmap(pWindow,SdResId(FB_PAGE4)));
maAssistentFunc.InsertControl(4,
mpPage4PersonalFL = new FixedLine( pWindow, SdResId(FL_PAGE4_PERSONAL) ));
maAssistentFunc.InsertControl(4,
mpPage4AskNameFT = new FixedText( pWindow, SdResId(FT_PAGE4_ASKNAME) ));
maAssistentFunc.InsertControl(4,
mpPage4AskNameEDT = new Edit( pWindow, SdResId(EDT_PAGE4_ASKNAME) ));
maAssistentFunc.InsertControl(4,
mpPage4AskTopicFT= new FixedText( pWindow, SdResId(FT_PAGE4_ASKTOPIC) ));
maAssistentFunc.InsertControl(4,
mpPage4AskTopicEDT = new Edit( pWindow, SdResId(EDT_PAGE4_ASKTOPIC) ));
maAssistentFunc.InsertControl(4,
mpPage4AskInfoFT = new FixedText( pWindow, SdResId(FT_PAGE4_ASKINFORMATION) ));
maAssistentFunc.InsertControl(4,
mpPage4AskInfoEDT = new MultiLineEdit( pWindow, SdResId(EDT_PAGE4_ASKINFORMATION) ));
mpPage4AskNameEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
mpPage4AskTopicEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
mpPage4AskInfoEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
// page 5
maAssistentFunc.InsertControl(5, &maPreview );
maAssistentFunc.InsertControl(5, &maPreviewFlag );
maAssistentFunc.InsertControl(5,
mpPage5FB = new FixedBitmap(pWindow,SdResId(FB_PAGE5)));
maAssistentFunc.InsertControl(5,
mpPage5PageListFT = new FixedText( pWindow, SdResId( FT_PAGE5_PAGELIST ) ));
maAssistentFunc.InsertControl(5,
mpPage5PageListCT = new SdPageListControl( pWindow, SdResId( CT_PAGE5_PAGELIST ) ));
maAssistentFunc.InsertControl(5,
mpPage5SummaryCB = new CheckBox( pWindow, SdResId( CB_PAGE5_SUMMARY ) ));
mpPage5PageListCT->SetSelectHdl(LINK(this,AssistentDlgImpl, PageSelectHdl));
// generell
InterpolateFixedBitmap( mpPage1FB );
InterpolateFixedBitmap( mpPage2FB );
InterpolateFixedBitmap( mpPage3FB );
InterpolateFixedBitmap( mpPage4FB );
InterpolateFixedBitmap( mpPage5FB );
maLastPageButton.SetClickHdl(LINK(this,AssistentDlgImpl, LastPageHdl ));
maNextPageButton.SetClickHdl(LINK(this,AssistentDlgImpl, NextPageHdl ));
maPreviewFlag.Check( mbPreview );
maPreviewFlag.SetClickHdl(LINK(this, AssistentDlgImpl, PreviewFlagHdl ));
maPreview.SetClickHdl(LINK(this,AssistentDlgImpl, EffectPreviewHdl ));
//setzt die Ausgangsseite
maAssistentFunc.GotoPage(1);
maLastPageButton.Disable();
maPrevTimer.SetTimeout( 200 );
maPrevTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, UpdatePreviewHdl));
maEffectPrevTimer.SetTimeout( 50 );
maEffectPrevTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, EffectPreviewHdl ));
maUpdatePageListTimer.SetTimeout( 50 );
maUpdatePageListTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, UpdatePageListHdl));
SetStartType( ST_EMPTY );
ChangePage();
mpWindowUpdater->RegisterWindow (&maPreview);
UpdatePreview( TRUE );
//check wether we should start with a template document initialy and preselect it
const ::rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) );
String aStandardTemplate( SfxObjectFactory::GetStandardTemplate( aServiceName ) );
if( aStandardTemplate.Len() )
{
ProvideTemplates();
//find aStandardTemplate in maPresentList
TemplateDir* pStandardTemplateDir = 0;
TemplateEntry* pStandardTemplateEntry = 0;
std::vector<TemplateDir*>::iterator I;
for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
{
TemplateDir* pDir = *I;
std::vector<TemplateEntry*>::iterator J;
for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
{
TemplateEntry* pEntry = *J;
if(pEntry->msPath == aStandardTemplate)
{
pStandardTemplateDir = pDir;
pStandardTemplateEntry = pEntry;
break;
}
}
if(pStandardTemplateDir)
break;
}
//preselect template
if( pStandardTemplateDir && pStandardTemplateEntry )
{
mpPage1RegionLB->SelectEntry( pStandardTemplateDir->msRegion );
SelectTemplateRegion( pStandardTemplateDir->msRegion );
mpPage1TemplateLB->SelectEntry( pStandardTemplateEntry->msTitle );
SelectTemplateHdl(mpPage1TemplateLB);
}
}
}
AssistentDlgImpl::~AssistentDlgImpl()
{
CloseDocShell();
DeletePassords();
// Delete the template file infos.
std::vector<TemplateDir*>::iterator I;
std::vector<TemplateEntry*>::iterator J;
for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
{
for (J=(*I)->maEntries.begin(); J!=(*I)->maEntries.end(); J++)
delete (*J);
delete (*I);
}
// Seite 1
delete mpPage1FB;
delete mpPage1ArtFL;
delete mpPage1EmptyRB;
delete mpPage1TemplateRB;
delete mpPage1TemplateLB;
delete mpPage1RegionLB;
delete mpPage1OpenRB;
delete mpPage1OpenLB;
delete mpPage1OpenPB;
// Seite 2
delete mpPage2FB;
delete mpPage2LayoutFL;
delete mpPage2RegionLB;
delete mpPage2LayoutLB;
delete mpPage2OutTypesFL;
delete mpPage2Medium1RB;
delete mpPage2Medium2RB;
delete mpPage2Medium3RB;
delete mpPage2Medium4RB;
delete mpPage2Medium5RB;
// Seite 3
delete mpPage3FB;
delete mpPage3EffectFL;
delete mpPage3EffectFT;
delete mpPage3EffectLB;
delete mpPage3SpeedFT;
delete mpPage3SpeedLB;
delete mpPage3PresTypeFL;
delete mpPage3PresTypeLiveRB;
delete mpPage3PresTypeKioskRB;
delete mpPage3PresTimeFT;
delete mpPage3PresTimeTMF;
delete mpPage3BreakFT;
delete mpPage3BreakTMF;
delete mpPage3LogoCB;
// Seite 4
delete mpPage4FB;
delete mpPage4PersonalFL;
delete mpPage4AskNameFT;
delete mpPage4AskNameEDT;
delete mpPage4AskTopicFT;
delete mpPage4AskTopicEDT;
delete mpPage4AskInfoFT;
delete mpPage4AskInfoEDT;
// Seite 5
delete mpPage5FB;
delete mpPage5PageListFT;
delete mpPage5PageListCT;
delete mpPage5SummaryCB;
// Delete the file history list.
std::vector<String*>::iterator I2;
for (I2=maOpenFilesList.begin(); I2!=maOpenFilesList.end(); I2++)
delete *I2;
}
void AssistentDlgImpl::CloseDocShell()
{
if(xDocShell.Is())
{
//uno::Reference< lang::XComponent > xModel( xDocShell->GetModel(), uno::UNO_QUERY );
uno::Reference< util::XCloseable > xCloseable( xDocShell->GetModel(), uno::UNO_QUERY );
//if( xModel.is() )
if( xCloseable.is() )
{
xCloseable->close( sal_True );
xDocShell = NULL;
//xModel->dispose();
}
else
{
xDocShell->DoClose();
xDocShell = NULL;
}
}
}
void AssistentDlgImpl::EndDialog( long )
{
mpWindow = NULL;
}
void AssistentDlgImpl::ScanDocmenu (void)
{
if( mbRecentDocumentsReady )
return;
uno::Sequence<uno::Sequence<beans::PropertyValue> > aHistory =
SvtHistoryOptions().GetList (ePICKLIST);
uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
uno::Reference< container::XNameAccess > xFilterFactory( xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.FilterFactory" ) ) ), uno::UNO_QUERY );
Reference< ::com::sun::star::ucb::XSimpleFileAccess > xFileAccess(
xFactory->createInstance(
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess"))),
UNO_QUERY_THROW);
sal_uInt32 nCount = aHistory.getLength();
for (sal_uInt32 nItem=0; nItem<nCount; ++nItem)
{
// Get the current history item's properties.
uno::Sequence<beans::PropertyValue> aPropertySet = aHistory[nItem];
rtl::OUString sURL;
rtl::OUString sFilter;
rtl::OUString sTitle;
rtl::OUString sPassword;
sal_uInt32 nPropertyCount = aPropertySet.getLength();
for (sal_uInt32 nProperty=0; nProperty<nPropertyCount; ++nProperty)
if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_URL)
aPropertySet[nProperty].Value >>= sURL;
else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_FILTER)
aPropertySet[nProperty].Value >>= sFilter;
else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_TITLE)
aPropertySet[nProperty].Value >>= sTitle;
else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_PASSWORD)
aPropertySet[nProperty].Value >>= sPassword;
// If the entry is an impress file then insert it into the
// history list and the list box.
uno::Sequence< beans::PropertyValue > lProps;
if (xFilterFactory->hasByName(sFilter))
{
uno::Any aFilterPropSet = xFilterFactory->getByName( sFilter );
aFilterPropSet >>= lProps;
}
sal_Int32 nPropCount = lProps.getLength();
rtl::OUString sFactoryName;
for( sal_Int32 i=0; i<nPropCount; ++i )
{
if( lProps[i].Name.compareToAscii( "DocumentService" ) == 0 &&
(lProps[i].Value >>= sFactoryName) &&
sFactoryName.compareToAscii( "com.sun.star.presentation.PresentationDocument" ) == 0 )
{
// yes, it's an impress document
INetURLObject aURL;
// Do not include the file if it does not exist.
if (xFileAccess.is() && ! xFileAccess->exists(sURL))
continue;
aURL.SetSmartURL (sURL);
// The password is set only when it is not empty.
if (sPassword.getLength() > 0)
aURL.SetPass (sPassword);
maOpenFilesList.push_back (new String (aURL.GetMainURL( INetURLObject::NO_DECODE )));
mpPage1OpenLB->InsertEntry (sTitle);
break;
}
}
}
mbRecentDocumentsReady = TRUE;
try
{
UpdatePreview(TRUE);
}
catch (uno::RuntimeException& )
{
// Ignore all exceptions.
}
}
void AssistentDlgImpl::ProvideTemplates (void)
{
if ( ! mbTemplatesReady)
{
TemplateScanner aScanner;
aScanner.Scan ();
TemplateScanDone (aScanner.GetFolderList());
try
{
UpdatePreview(TRUE);
}
catch (uno::RuntimeException& e)
{
// Ignore all exceptions.
(void) e;
}
}
}
void AssistentDlgImpl::TemplateScanDone (
std::vector<TemplateDir*>& rTemplateFolder)
{
// This method is called from a thread. Therefore we get the solar mutex.
::vos::OGuard aGuard (Application::GetSolarMutex());
// Copy the contents of the given template folders to a local list.
maPresentList.swap (rTemplateFolder);
// Fill in the list box on the first page.
int nFirstEntry = 0;
mpPage1RegionLB->Clear();
std::vector<TemplateDir*>::iterator I;
int i;
for (i=0,I=maPresentList.begin(); I!=maPresentList.end(); I++,i++)
{
TemplateDir* pDir = *I;
if (pDir == NULL)
continue;
// HACK! presnt directory is always initially selected.
// We have to look at the first entry to get a URL.
if (pDir->maEntries.size() > 0)
{
TemplateEntry* pEntry = pDir->maEntries.front();
if (pEntry != NULL)
if (pEntry->msPath.SearchAscii("presnt") != STRING_NOTFOUND)
nFirstEntry = i;
}
mpPage1RegionLB->InsertEntry (pDir->msRegion);
}
mpPage1RegionLB->SelectEntryPos ((USHORT)nFirstEntry);
mpPage1RegionLB->Update();
SelectTemplateRegion (mpPage1RegionLB->GetSelectEntry());
// Fill in the list box on the second page.
nFirstEntry = 0;
mpPage2RegionLB->Clear();
for (i=0,I=maPresentList.begin(); I!=maPresentList.end(); I++,i++)
{
TemplateDir* pDir = *I;
if (pDir == NULL)
continue;
// HACK! layout directory is always initially selected.
// We have to look at the first entry to get a URL.
if (pDir->maEntries.size() > 0)
{
TemplateEntry* pEntry = pDir->maEntries.front();
if (pEntry != NULL)
if (pEntry->msPath.SearchAscii("layout") != STRING_NOTFOUND)
nFirstEntry = i;
}
mpPage2RegionLB->InsertEntry (pDir->msRegion);
}
mpPage2RegionLB->SelectEntryPos ((USHORT)nFirstEntry);
mpPage2RegionLB->Update();
SelectLayoutRegion (mpPage2RegionLB->GetSelectEntry());
// Make the changes visible.
mbTemplatesReady = TRUE;
if (mpWindow)
UpdatePage();
}
// ********************************************************************
// Status Methoden
// ********************************************************************
void AssistentDlgImpl::SetStartType( StartType eType )
{
mpPage1EmptyRB->SetState( eType == ST_EMPTY );
mpPage1TemplateRB->SetState( eType == ST_TEMPLATE );
mpPage1OpenRB->SetState( eType == ST_OPEN );
maNextPageButton.Enable( eType != ST_OPEN );
mpPage1RegionLB->Show(eType == ST_TEMPLATE);
mpPage1TemplateLB->Show(eType == ST_TEMPLATE);
mpPage1OpenLB->Show(eType == ST_OPEN);
mpPage1OpenPB->Show(eType == ST_OPEN);
}
StartType AssistentDlgImpl::GetStartType()
{
if( mpPage1EmptyRB->IsChecked() )
return ST_EMPTY;
else if( mpPage1TemplateRB->IsChecked() )
return ST_TEMPLATE;
else
return ST_OPEN;
}
String AssistentDlgImpl::GetDocFileName()
{
String aTitle;
if(mpWindow)
{
aTitle = mpWindow->GetText();
USHORT nPos = aTitle.Search(sal_Unicode('('));
if(nPos != STRING_NOTFOUND)
aTitle.Erase( nPos-1 );
}
String aDocFile;
if( GetStartType() == ST_TEMPLATE )
{
const USHORT nEntry = mpPage1TemplateLB->GetSelectEntryPos();
TemplateEntry* pEntry = NULL;
if(nEntry != (USHORT)-1)
pEntry = mpTemplateRegion->maEntries[nEntry];
if(pEntry)
{
aDocFile = pEntry->msPath;
aTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " (" ) );
aTitle.Append( pEntry->msTitle );
aTitle.Append( sal_Unicode(')') );
}
}
else if( GetStartType() == ST_OPEN )
{
const USHORT nEntry = mpPage1OpenLB->GetSelectEntryPos();
if(nEntry != (USHORT)-1 )
aDocFile = *maOpenFilesList[nEntry];
}
if(mpWindow)
mpWindow->SetText(aTitle);
return aDocFile;
}
String AssistentDlgImpl::GetLayoutFileName()
{
String aFile;
const USHORT nEntry = mpPage2LayoutLB->GetSelectEntryPos();
TemplateEntry* pEntry = NULL;
if(nEntry != (USHORT)-1 && nEntry > 0)
pEntry = mpLayoutRegion->maEntries[nEntry-1];
if(pEntry)
aFile = pEntry->msPath;
return aFile;
}
SfxObjectShellLock AssistentDlgImpl::GetDocument()
{
// mbPreview = FALSE; // Document nicht anzeigen
UpdatePreview(FALSE); // aber komplett laden
UpdatePageList();
SfxObjectShell* pShell = xDocShell;
::sd::DrawDocShell* pDocShell = PTR_CAST(::sd::DrawDocShell,pShell);
SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
if(pDoc)
{
const USHORT nPageCount = pDoc->GetSdPageCount(PK_STANDARD);
BOOL bKiosk = mpPage3PresTypeKioskRB->IsChecked();
UINT32 nNewTime = (UINT32)mpPage3PresTimeTMF->GetTime().GetMSFromTime() / 1000;
if(bKiosk)
{
PresentationSettings& rSettings = pDoc->getPresentationSettings();
rSettings.mbEndless = bKiosk;
rSettings.mnPauseTimeout = (sal_Int32)mpPage3BreakTMF->GetTime().GetMSFromTime() / 1000;
rSettings.mbShowPauseLogo = mpPage3LogoCB->IsChecked();
}
USHORT nPgAbsNum = 0;
USHORT nPgRelNum = 0;
while( nPgAbsNum < nPageCount )
{
SdPage* pPage = pDoc->GetSdPage( nPgRelNum, PK_STANDARD );
if( mpPage5PageListCT->IsPageChecked(nPgAbsNum) )
{
mpPage3EffectLB->applySelected(pPage);
const sal_uInt16 nPos = mpPage3SpeedLB->GetSelectEntryPos();
pPage->setTransitionDuration( (nPos == 0) ? 3.0 : (nPos == 1) ? 2.0 : 1.0 );
if(bKiosk)
{
pPage->SetPresChange( PRESCHANGE_AUTO );
pPage->SetTime(nNewTime);
}
nPgRelNum++;
}
else
{
// diese Seite loeschen
pDoc->DeletePage( (nPgRelNum << 1) + 2 ); // Notizseite loeschen
pDoc->DeletePage( (nPgRelNum << 1) + 1 ); // Seite loeschen
}
nPgAbsNum++;
}
}
else
DBG_ERROR("Keine Vorlage fuer den Autopiloten? [CL]");
SfxObjectShellLock xRet = xDocShell;
xDocShell = NULL;
return xRet;
}
void AssistentDlgImpl::LeavePage()
{
int nPage = maAssistentFunc.GetCurrentPage();
if( nPage == 4 && mbUserDataDirty )
maPrevTimer.Start();
}
void AssistentDlgImpl::ChangePage()
{
maNextPageButton.Enable(!maAssistentFunc.IsLastPage());
maLastPageButton.Enable(!maAssistentFunc.IsFirstPage());
USHORT nPage = (USHORT)maAssistentFunc.GetCurrentPage();
if( mpWindow )
mpWindow->SetHelpId( PageHelpIds[nPage-1]);
UpdatePage();
if( maNextPageButton.IsEnabled() )
maNextPageButton.GrabFocus();
else
maFinishButton.GrabFocus();
}
void AssistentDlgImpl::UpdatePage()
{
USHORT nPage = (USHORT)maAssistentFunc.GetCurrentPage();
switch(nPage)
{
case 1:
{
// Elemente auf der ersten Seite abhaengig vom Starttype Zeigen
SetStartType( GetStartType() );
mpPage1TemplateRB->Enable(TRUE /*mbTemplatesReady*/);
break;
}
case 2:
{
mpPage2RegionLB->Enable(mbTemplatesReady);
mpPage2LayoutLB->Enable(mbTemplatesReady);
if( GetStartType() != ST_EMPTY )
{
mpPage2Medium5RB->Enable( TRUE );
}
else
{
mpPage2Medium5RB->Enable( FALSE );
if(mpPage2Medium5RB->IsChecked())
mpPage2Medium1RB->Check();
}
break;
}
case 5:
{
if(mbDocPreview || maPageListFile != maDocFile)
mpPage5PageListCT->Clear();
maUpdatePageListTimer.Start();
break;
}
case 3:
{
if(GetStartType() != ST_TEMPLATE)
maNextPageButton.Disable();
BOOL bKiosk = mpPage3PresTypeKioskRB->IsChecked();
mpPage3PresTimeFT->Enable(bKiosk);
mpPage3BreakFT->Enable(bKiosk);
mpPage3PresTimeTMF->Enable(bKiosk);
mpPage3BreakTMF->Enable(bKiosk);
mpPage3LogoCB->Enable(bKiosk);
break;
}
}
}
// ********************************************************************
// UI-Handler
// ********************************************************************
IMPL_LINK( AssistentDlgImpl, SelectRegionHdl, ListBox *, pLB )
{
if( pLB == mpPage1RegionLB )
{
SelectTemplateRegion( pLB->GetSelectEntry() );
SetStartType( ST_TEMPLATE );
mpPage2Medium5RB->Check();
}
else
{
SelectLayoutRegion( pLB->GetSelectEntry() );
}
return 0;
}
IMPL_LINK( AssistentDlgImpl, SelectEffectHdl, void*, EMPTYARG )
{
maEffectPrevTimer.Start();
return 0;
}
IMPL_LINK( AssistentDlgImpl, OpenButtonHdl, Button*, pButton )
{
// Clear the selection and forward the call.
mpPage1OpenLB->SetNoSelection();
return mpPage1OpenLB->GetDoubleClickHdl().Call(pButton);
}
IMPL_LINK( AssistentDlgImpl, EffectPreviewHdl, Button *, EMPTYARG )
{
if(mbPreview && xDocShell.Is() )
{
SfxObjectShell* pShell = xDocShell;
DrawDocShell* pDocShell = dynamic_cast< DrawDocShell * >(pShell);
if( pDocShell )
{
SdDrawDocument* pDoc = pDocShell->GetDoc();
if( pDoc )
{
SdPage* pPage = pDoc->GetSdPage( mnShowPage, PK_STANDARD );
if( pPage )
mpPage3EffectLB->applySelected(pPage);
}
}
maPreview.startPreview();
}
return 0;
}
IMPL_LINK( AssistentDlgImpl, PreviewFlagHdl, CheckBox *, EMPTYARG )
{
if( maPreviewFlag.IsChecked() != mbPreview )
{
mbPreview = maPreviewFlag.IsChecked();
UpdatePreview(TRUE);
}
return 0;
}
IMPL_LINK( AssistentDlgImpl, SelectTemplateHdl, ListBox *, EMPTYARG )
{
SetStartType( ST_TEMPLATE );
mpPage2Medium5RB->Check();
mpPage2LayoutLB->SelectEntryPos(0);
maPrevTimer.Start();
return 0;
}
IMPL_LINK( AssistentDlgImpl, SelectLayoutHdl, ListBox *, EMPTYARG )
{
maPrevTimer.Start();
return 0;
}
IMPL_LINK( AssistentDlgImpl, SelectFileHdl, ListBox *, EMPTYARG )
{
SetStartType( ST_OPEN );
maPrevTimer.Start();
return 0;
}
IMPL_LINK( AssistentDlgImpl, PageSelectHdl, Control *, EMPTYARG )
{
USHORT nPage = mpPage5PageListCT->GetSelectedPage();
if( mnShowPage != nPage )
{
mnShowPage = nPage;
UpdatePreview(FALSE);
}
return 0;
}
IMPL_LINK( AssistentDlgImpl, UpdatePageListHdl, void *, EMPTYARG )
{
UpdatePageList();
return 0;
}
IMPL_LINK( AssistentDlgImpl, UpdatePreviewHdl, void *, EMPTYARG )
{
UpdatePreview( TRUE );
return 0;
}
IMPL_LINK( AssistentDlgImpl, StartTypeHdl, RadioButton *, pButton )
{
StartType eType = pButton == mpPage1EmptyRB?ST_EMPTY:pButton == mpPage1TemplateRB?ST_TEMPLATE:ST_OPEN;
if(eType == ST_TEMPLATE)
ProvideTemplates();
else if(eType == ST_OPEN)
ScanDocmenu();
SetStartType( eType );
if(eType == ST_TEMPLATE)
{
mpPage1TemplateLB->SelectEntryPos(0);
mpPage2Medium5RB->Check();
}
else if(eType == ST_OPEN)
mpPage1OpenLB->SelectEntryPos(0);
maPrevTimer.Start();
return 0;
}
IMPL_LINK( AssistentDlgImpl, NextPageHdl, PushButton *, EMPTYARG )
{
// When changing from the first to the second page make sure that the
// templates are present.
if (maAssistentFunc.GetCurrentPage() == 1)
ProvideTemplates();
// Change to the next page.
LeavePage();
maAssistentFunc.NextPage();
ChangePage();
return 0;
}
IMPL_LINK( AssistentDlgImpl, LastPageHdl, PushButton *, EMPTYARG )
{
LeavePage();
maAssistentFunc.PreviousPage();
ChangePage();
return 0;
}
IMPL_LINK( AssistentDlgImpl, PresTypeHdl, RadioButton*, EMPTYARG )
{
if(maDocFile.Len() == 0)
maNextPageButton.Disable();
BOOL bKiosk = mpPage3PresTypeKioskRB->IsChecked();
mpPage3PresTimeFT->Enable(bKiosk);
mpPage3BreakFT->Enable(bKiosk);
mpPage3PresTimeTMF->Enable(bKiosk);
mpPage3BreakTMF->Enable(bKiosk);
mpPage3LogoCB->Enable(bKiosk);
return 0;
}
IMPL_LINK( AssistentDlgImpl, UpdateUserDataHdl, Edit*, EMPTYARG )
{
mbUserDataDirty = TRUE;
String aTopic = mpPage4AskTopicEDT->GetText();
String aName = mpPage4AskNameEDT->GetText();
String aInfo = mpPage4AskInfoEDT->GetText();
if(aTopic.Len() == 0 && aName.Len() == 0 && aInfo.Len() == 0)
maDocFile.Erase();
return 0;
}
// ********************************************************************
// ********************************************************************
void AssistentDlgImpl::SelectTemplateRegion( const String& rRegion )
{
mpPage1TemplateLB->Clear();
std::vector<TemplateDir*>::iterator I;
for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
{
TemplateDir * pDir = *I;
mpTemplateRegion = *I;
if (pDir->msRegion.Equals( rRegion ) )
{
std::vector<TemplateEntry*>::iterator J;
for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
mpPage1TemplateLB->InsertEntry ((*J)->msTitle);
mpPage1TemplateLB->Update();
if(GetStartType() == ST_TEMPLATE)
{
mpPage1TemplateLB->SelectEntryPos( 0 );
SelectTemplateHdl(NULL);
}
break;
}
}
}
void AssistentDlgImpl::SelectLayoutRegion( const String& rRegion )
{
mpPage2LayoutLB->Clear();
mpPage2LayoutLB->InsertEntry(String(SdResId(STR_WIZARD_ORIGINAL)));
std::vector<TemplateDir*>::iterator I;
for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
{
TemplateDir * pDir = *I;
mpLayoutRegion = *I;
if (pDir->msRegion.Equals (rRegion))
{
std::vector<TemplateEntry*>::iterator J;
for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
mpPage2LayoutLB->InsertEntry ((*J)->msTitle);
mpPage2LayoutLB->Update();
break;
}
}
}
void AssistentDlgImpl::UpdateUserData()
{
String aTopic = mpPage4AskTopicEDT->GetText();
String aName = mpPage4AskNameEDT->GetText();
String aInfo = mpPage4AskInfoEDT->GetText();
SfxObjectShell* pShell = xDocShell;
DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
SdPage* pPage = pDoc?pDoc->GetSdPage(0, PK_STANDARD):NULL;
if(pPage && ( aTopic.Len() != 0 || aName.Len() != 0 || aInfo.Len() != 0 ) )
{
if( pPage->GetAutoLayout() == AUTOLAYOUT_NONE )
pPage->SetAutoLayout(AUTOLAYOUT_TITLE, TRUE);
SdrTextObj* pObj;
String aEmptyString;
if( aTopic.Len() )
{
pObj = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_TITLE ) );
if( pObj )
{
pPage->SetObjText( pObj, NULL, PRESOBJ_TITLE, aTopic );
pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_TITLE ), TRUE );
pObj->SetEmptyPresObj(FALSE);
}
}
if ( aName.Len() || aInfo.Len() )
{
String aStrTmp( aName );
if( aName.Len() )
aStrTmp.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n\n" ) );
aStrTmp.Append( aInfo );
pObj = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_OUTLINE ) );
if( pObj )
{
pPage->SetObjText( pObj, NULL, PRESOBJ_OUTLINE, aStrTmp );
pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE ), TRUE );
pObj->SetEmptyPresObj(FALSE);
}
else
{
pObj = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_TEXT ) );
if( pObj )
{
pPage->SetObjText( pObj, NULL, PRESOBJ_TEXT, aStrTmp );
pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_TEXT ), TRUE );
pObj->SetEmptyPresObj(FALSE);
}
}
}
}
mbUserDataDirty = FALSE;
}
void AssistentDlgImpl::UpdatePageList()
{
if(mbDocPreview || !mbPreview)
UpdatePreview(FALSE);
else if(maPageListFile == maDocFile)
return;
maPageListFile = maDocFile;
SfxObjectShell* pShell = xDocShell;
DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
mpPage5PageListCT->Clear();
if(pDoc)
mpPage5PageListCT->Fill(pDoc);
}
void AssistentDlgImpl::UpdatePreview( BOOL bDocPreview )
{
// Guard against multiple concurrent execution to this method caused either
// by calls from different threads or recursion.
::osl::MutexGuard aGuard (maMutex);
if (mbPreviewUpdating)
return;
mbPreviewUpdating = TRUE;
if(!mbPreview && bDocPreview)
{
maPreview.Invalidate();
maPreview.SetObjectShell(0);
mbPreviewUpdating = FALSE;
return;
}
String aDocFile = GetDocFileName();
String aLayoutFile = GetLayoutFileName();
String aEmptyStr;
SfxApplication *pSfxApp = SFX_APP();
ULONG lErr;
BOOL bChangeMaster = aLayoutFile.Len() != 0;
if( aDocFile.Len() == 0 )
{
if( !xDocShell.Is() || maDocFile.Len() != 0 ||
(maDocFile.Len() == 0 && maLayoutFile.Len() != 0 && aLayoutFile.Len() == 0 ))
{
CloseDocShell();
DrawDocShell* pNewDocSh;
xDocShell = pNewDocSh = new DrawDocShell(SFX_CREATE_MODE_STANDARD, FALSE);
pNewDocSh->DoInitNew(NULL);
SdDrawDocument* pDoc = pNewDocSh->GetDoc();
pDoc->CreateFirstPages();
pDoc->StopWorkStartupDelay();
mbDocPreview = FALSE;
maDocFile = aDocFile;
mbUserDataDirty = TRUE;
}
else
bChangeMaster = (aLayoutFile.Len() != 0) && (maLayoutFile != aLayoutFile);
}
else if( aDocFile == maDocFile && ( mbDocPreview == bDocPreview || bDocPreview ) )
{
if( aLayoutFile != maLayoutFile )
{
SfxObjectShell* pShell = xDocShell;
DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
SfxUndoManager* pUndoMgr = pDocShell?pDocShell->GetUndoManager():NULL;
if(pUndoMgr)
pUndoMgr->Undo();
mbUserDataDirty = TRUE;
}
else
bChangeMaster = FALSE;
}
else
{
CloseDocShell();
::Window *pParent = Application::GetDefDialogParent();
Application::SetDefDialogParent( mpWindow );
SfxErrorContext eEC(ERRCTX_SFX_LOADTEMPLATE,mpWindow);
SfxItemSet* pSet = new SfxAllItemSet( pSfxApp->GetPool() );
if(IsOwnFormat(aDocFile))
{
pSet->Put( SfxBoolItem( SID_TEMPLATE, TRUE ) );
if(bDocPreview)
pSet->Put( SfxBoolItem( SID_PREVIEW, TRUE ) );
RestorePassword( pSet, aDocFile );
if( (lErr = pSfxApp->LoadTemplate( xDocShell, aDocFile, TRUE, pSet )) != 0 )
ErrorHandler::HandleError(lErr);
else
SavePassword( xDocShell, aDocFile );
}
else
{
const String aTargetStr( RTL_CONSTASCII_USTRINGPARAM("_default") );
SfxRequest aReq( SID_OPENDOC, SFX_CALLMODE_SYNCHRON, SFX_APP()->GetPool() );
aReq.AppendItem( SfxStringItem( SID_FILE_NAME, aDocFile ));
aReq.AppendItem( SfxStringItem( SID_REFERER, aEmptyStr ) );
aReq.AppendItem( SfxStringItem( SID_TARGETNAME, aTargetStr ) );
aReq.AppendItem( SfxBoolItem( SID_VIEW, FALSE ) );
aReq.AppendItem( SfxBoolItem( SID_PREVIEW, bDocPreview ) );
const SfxObjectShellItem* pRet = (SfxObjectShellItem*)
SFX_APP()->ExecuteSlot( aReq );
if( pRet && pRet->GetObjectShell() )
xDocShell = pRet->GetObjectShell();
}
Application::SetDefDialogParent( pParent );
mnShowPage = 0;
mbDocPreview = bDocPreview;
maDocFile = aDocFile;
mbUserDataDirty = TRUE;
}
if(bChangeMaster && (aLayoutFile != maDocFile))
{
// Layoutvorlage laden
SfxObjectShellLock xLayoutDocShell;
SfxErrorContext eEC(ERRCTX_SFX_LOADTEMPLATE,mpWindow);
SfxItemSet* pSet = new SfxAllItemSet( pSfxApp->GetPool() );
::Window *pParent = Application::GetDefDialogParent();
Application::SetDefDialogParent( mpWindow );
if(IsOwnFormat(aLayoutFile))
{
pSet->Put( SfxBoolItem( SID_TEMPLATE, TRUE ) );
pSet->Put( SfxBoolItem( SID_PREVIEW, TRUE ) );
RestorePassword( pSet, aLayoutFile );
if( (lErr = pSfxApp->LoadTemplate( xLayoutDocShell, aLayoutFile, TRUE, pSet )) != 0 )
ErrorHandler::HandleError(lErr);
SavePassword( xLayoutDocShell, aLayoutFile );
}
Application::SetDefDialogParent( pParent );
// die Implementierung ermitteln
SfxObjectShell* pShell = xDocShell;
DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
pShell = xLayoutDocShell;
pDocShell = PTR_CAST(DrawDocShell,pShell);
SdDrawDocument* pLayoutDoc = pDocShell?pDocShell->GetDoc():NULL;
if( pDoc && pLayoutDoc )
pDoc->SetMasterPage(0, aEmptyStr, pLayoutDoc, TRUE, FALSE );
else
DBG_ERROR("Keine gueltigen Impress Documente fuer die Preview? [CL]");
mbUserDataDirty = TRUE;
}
maLayoutFile = aLayoutFile;
if(mbUserDataDirty)
UpdateUserData();
if ( !xDocShell.Is() || !mbPreview )
maPreview.SetObjectShell( 0 );
else
{
maPreview.SetObjectShell( xDocShell, mnShowPage );
}
mbPreviewUpdating = FALSE;
}
void AssistentDlgImpl::SavePassword( SfxObjectShellLock xDoc, const String& rPath )
{
if(xDoc.Is())
{
SfxMedium * pMedium = xDoc->GetMedium();
if(pMedium && pMedium->IsStorage())
{
SfxItemSet * pSet = pMedium->GetItemSet();
const SfxPoolItem *pItem = 0;
if( pSet->GetItemState(SID_PASSWORD, TRUE, &pItem) == SFX_ITEM_SET )
{
//TODO/MBA: testing
String aPass( ((const SfxStringItem*)pItem)->GetValue());
if(aPass.Len() == 0)
return;
PasswordEntry* pEntry = maPasswordList.First();
while(pEntry)
{
if(pEntry->maPath == rPath)
break;
pEntry = maPasswordList.Next();
}
if(pEntry == NULL)
{
pEntry = new PasswordEntry();
pEntry->maPath = rPath;
maPasswordList.Insert( pEntry );
}
if(pEntry)
pEntry->maPassword = aPass;
}
}
}
}
void AssistentDlgImpl::RestorePassword( SfxItemSet* pSet, const String& rPath )
{
String aPassword( GetPassword( rPath ) );
if(aPassword.Len())
pSet->Put( SfxStringItem( SID_PASSWORD, aPassword ) );
}
String AssistentDlgImpl::GetPassword( const String rPath )
{
PasswordEntry* pEntry = maPasswordList.First();
while(pEntry)
{
if(pEntry->maPath == rPath)
return pEntry->maPassword;
pEntry = maPasswordList.Next();
}
return String();
}
void AssistentDlgImpl::DeletePassords()
{
PasswordEntry* pEntry = maPasswordList.First();
while(pEntry)
{
delete pEntry;
pEntry = maPasswordList.Next();
}
}
BOOL AssistentDlgImpl::IsOwnFormat( const String& rPath )
{
INetURLObject aURL( rPath );
String aExt( aURL.GetFileExtension() );
DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
return !aExt.EqualsIgnoreCaseAscii( "ppt" );
}
String AssistentDlgImpl::GetUiTextForCommand (const ::rtl::OUString& sCommandURL)
{
String sLabel;
Reference<container::XNameAccess> xUICommandLabels;
try
{
do
{
if (sCommandURL.getLength() == 0)
break;
// Retrieve popup menu labels
Reference<lang::XMultiServiceFactory> xFactory (
::comphelper::getProcessServiceFactory ());
if ( ! xFactory.is())
break;
::rtl::OUString sModuleIdentifier (
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.PresentationDocument"));
Reference<container::XNameAccess> xNameAccess (
xFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
"com.sun.star.frame.UICommandDescription"))),
UNO_QUERY);
if ( ! xNameAccess.is())
break;
Any a = xNameAccess->getByName(sModuleIdentifier);
a >>= xUICommandLabels;
if ( ! xUICommandLabels.is())
break;
::rtl::OUString sString;
Sequence<beans::PropertyValue> aProperties;
Any aAny (xUICommandLabels->getByName(sCommandURL));
if (aAny >>= aProperties)
{
sal_Int32 nCount (aProperties.getLength());
for (sal_Int32 i=0; i<nCount; i++)
{
::rtl::OUString sPropertyName (aProperties[i].Name);
if (sPropertyName.equalsAscii("Label"))
{
aProperties[i].Value >>= sString;
break;
}
}
}
sLabel = sString;
}
while(false);
}
catch (com::sun::star::uno::Exception& rException)
{
(void)rException;
}
return sLabel;
}
Image AssistentDlgImpl::GetUiIconForCommand (const ::rtl::OUString& sCommandURL)
{
Image aIcon;
Reference<container::XNameAccess> xUICommandLabels;
try
{
do
{
if (sCommandURL.getLength() == 0)
break;
// Retrieve popup menu labels
Reference<lang::XMultiServiceFactory> xFactory (
::comphelper::getProcessServiceFactory ());
if ( ! xFactory.is())
break;
::rtl::OUString sModuleIdentifier (
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.PresentationDocument"));
Reference<com::sun::star::ui::XModuleUIConfigurationManagerSupplier> xSupplier (
xFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
"com.sun.star.ui.ModuleUIConfigurationManagerSupplier"))),
UNO_QUERY_THROW);
Reference<com::sun::star::ui::XUIConfigurationManager> xManager (
xSupplier->getUIConfigurationManager(sModuleIdentifier));
if ( ! xManager.is())
break;
Reference<com::sun::star::ui::XImageManager> xImageManager (
xManager->getImageManager(),
UNO_QUERY_THROW);
Sequence<rtl::OUString> aCommandList(1);
aCommandList[0] = sCommandURL;
Sequence<Reference<graphic::XGraphic> > xIconList (
xImageManager->getImages(0,aCommandList));
if ( ! xIconList.hasElements())
break;
aIcon = Graphic(xIconList[0]).GetBitmapEx();
}
while(false);
}
catch (com::sun::star::uno::Exception& rException)
{
(void)rException;
}
return aIcon;
}
//////////////////////////////////////////////
AssistentDlg::AssistentDlg(Window* pParent, BOOL bAutoPilot) :
ModalDialog(pParent,SdResId(DLG_ASS))
{
Link aFinishLink = LINK(this,AssistentDlg, FinishHdl);
mpImpl = new AssistentDlgImpl( this, aFinishLink, bAutoPilot );
//Buttonbelegung
mpImpl->maFinishButton.SetClickHdl(LINK(this,AssistentDlg,FinishHdl));
FreeResource();
}
IMPL_LINK( AssistentDlg, FinishHdl, OKButton *, EMPTYARG )
{
if( GetStartType() == ST_OPEN )
{
//if we do not have a file here asked for one before ending the dialog
String aFileToOpen = GetDocPath();
if(aFileToOpen.Len() == 0)
{
sfx2::FileDialogHelper aFileDlg( WB_OPEN, ::String::CreateFromAscii("simpress") );
if ( aFileDlg.Execute() == ERRCODE_NONE )
aFileToOpen = aFileDlg.GetPath();
if( aFileToOpen.Len() == 0)
return 1;
else
{
//add the selected file to the recent-file-listbox and select the new entry
//this is necessary for 'GetDocPath()' returning the selected file after end of dialog
INetURLObject aURL;
aURL.SetSmartURL(aFileToOpen);
mpImpl->maOpenFilesList.push_back (new String (aURL.GetMainURL( INetURLObject::NO_DECODE )));
USHORT nNewPos = mpImpl->mpPage1OpenLB->InsertEntry(aURL.getName());
mpImpl->mpPage1OpenLB->SelectEntryPos(nNewPos);
}
}
}
//Ende
mpImpl->EndDialog(RET_OK);
EndDialog(RET_OK);
return 0;
}
AssistentDlg::~AssistentDlg()
{
delete mpImpl;
}
SfxObjectShellLock AssistentDlg::GetDocument()
{
return mpImpl->GetDocument();
}
String AssistentDlg::GetTopic() const
{
return mpImpl->mpPage4AskTopicEDT->GetText();
}
String AssistentDlg::GetUserName() const
{
return mpImpl->mpPage4AskNameEDT->GetText();
}
String AssistentDlg::GetInformation() const
{
return mpImpl->mpPage4AskInfoEDT->GetText();
}
OutputType AssistentDlg::GetOutputMedium() const
{
if(mpImpl->mpPage2Medium1RB->IsChecked())
return OUTPUT_PRESENTATION;
else if(mpImpl->mpPage2Medium2RB->IsChecked())
return OUTPUT_SLIDE;
else if(mpImpl->mpPage2Medium3RB->IsChecked())
return OUTPUT_OVERHEAD;
else if(mpImpl->mpPage2Medium4RB->IsChecked())
return OUTPUT_PAGE;
else
return OUTPUT_ORIGINAL;
}
BOOL AssistentDlg::IsSummary() const
{
return mpImpl->mpPage5SummaryCB->IsChecked();
}
StartType AssistentDlg::GetStartType() const
{
return mpImpl->GetStartType();
}
String AssistentDlg::GetDocPath() const
{
return mpImpl->GetDocFileName();
}
BOOL AssistentDlg::GetStartWithFlag() const
{
return !mpImpl->maStartWithFlag.IsChecked();
}
BOOL AssistentDlg::IsDocEmpty() const
{
return mpImpl->GetDocFileName().Len() == 0 &&
mpImpl->GetLayoutFileName().Len() == 0;
}
String AssistentDlg::GetPassword()
{
return mpImpl->GetPassword( mpImpl->maDocFile );
}