bc3dee3207
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
2066 lines
63 KiB
C++
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 );
|
|
}
|