xref: /aoo42x/main/sd/source/ui/dlg/dlgass.cxx (revision 86e1cf34)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 #ifdef SD_DLLIMPLEMENTATION
28 #undef SD_DLLIMPLEMENTATION
29 #endif
30 #include <com/sun/star/presentation/ClickAction.hpp>
31 #include <vcl/svapp.hxx>
32 #include <vos/mutex.hxx>
33 #include <vcl/msgbox.hxx>
34 #include <vcl/lstbox.hxx>
35 #include <vcl/combobox.hxx>
36 #include <sfx2/doctempl.hxx>
37 #include <svl/lstner.hxx>
38 #include <sfx2/objsh.hxx>
39 #include <svtools/ehdl.hxx>
40 #include <svtools/sfxecode.hxx>
41 #include <tools/urlobj.hxx>
42 #include <com/sun/star/presentation/FadeEffect.hpp>
43 #include <fadedef.h>
44 #include <sfx2/sfxsids.hrc>
45 #include <svl/undo.hxx>
46 #include "DrawDocShell.hxx"
47 #include <vcl/gdimtf.hxx>
48 #include <tools/wintypes.hxx>
49 #include "docprev.hxx"
50 #include <sfx2/app.hxx>
51 #include <sfx2/docfile.hxx>
52 #include <sfx2/dispatch.hxx>
53 #include <sfx2/request.hxx>
54 #include <com/sun/star/sdbc/XResultSet.hpp>
55 #include <com/sun/star/lang/XComponent.hpp>
56 #include <com/sun/star/util/XCloseable.hpp>
57 #include <com/sun/star/uno/RuntimeException.hpp>
58 #include <com/sun/star/frame/XModuleManager.hpp>
59 #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
60 #include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
61 #include <com/sun/star/ui/XImageManager.hpp>
62 #include <unotools/historyoptions.hxx>
63 #include <tools/urlobj.hxx>
64 #include <osl/file.hxx>
65 #include <sfx2/filedlghelper.hxx>
66 
67 #include "sdpage.hxx"
68 #include "helpids.h"
69 #include "assclass.hxx"
70 #include "dlgass.hrc"
71 #include "dlgass.hxx"
72 #include "dlgctrls.hxx"
73 #ifndef _SD_CFGID_HXX
74 #include "strings.hrc"
75 #endif
76 #ifndef _DATETIMEITEM_HXX
77 #include "dlgassim.hxx"
78 #endif
79 #include "TemplateScanner.hxx"
80 #include "WindowUpdater.hxx"
81 
82 #include <comphelper/processfactory.hxx>
83 
84 using namespace ::com::sun::star;
85 using namespace ::com::sun::star::uno;
86 using namespace ::sd;
87 
88 
89 void InterpolateFixedBitmap( FixedBitmap * pBitmap )
90 {
91 	Bitmap aBmp( pBitmap->GetBitmap() );
92 	Size aSize = pBitmap->GetSizePixel();
93 	aBmp.Scale( aSize, BMP_SCALE_INTERPOLATE );
94 	pBitmap->SetBitmap( aBmp );
95 }
96 
97 
98 // ====================================================================
99 // ====================================================================
100 
101 const char* PageHelpIds[] =
102 {
103 	HID_SD_AUTOPILOT_PAGE1,
104 	HID_SD_AUTOPILOT_PAGE2,
105 	HID_SD_AUTOPILOT_PAGE3,
106 	HID_SD_AUTOPILOT_PAGE4,
107 	HID_SD_AUTOPILOT_PAGE5
108 };
109 
110 // ====================================================================
111 
112 class PasswordEntry
113 {
114 public:
115 	String maPassword;
116 	String maPath;
117 };
118 
119 DECLARE_LIST( PasswordEntryList, PasswordEntry * )
120 
121 // ====================================================================
122 
123 /** A simple wrapper that looks like a PushButton and is used to force the
124     broadcasting of focus events primarily for accessibility tools.
125     Forcing focus events is achieved by using two identical PushButtons
126     which, when the focus event is requested, are exchanged and play focus
127     ping-pong by moving the focus from one to the other.
128 */
129 class NextButton
130 {
131 public:
132     NextButton (::Window* pParent, const ResId& rResId);
133 
134     void ForceFocusEventBroadcast (void);
135 	void SetClickHdl (const Link& rLink);
136     bool IsEnabled (void);
137 	void Enable (bool bEnable);
138 
139 private:
140     PushButton maNextButton1;
141     PushButton maNextButton2;
142     bool mbIsFirstButtonActive;
143 };
144 
145 
146 
147 // ====================================================================
148 
149 class AssistentDlgImpl : public SfxListener
150 {
151 public:
152 	AssistentDlgImpl( ::Window* pWindow, const Link& rFinishLink, sal_Bool bAutoPilot  );
153 	~AssistentDlgImpl();
154 
155     /// Local mutex used to serialize concurrent method calls.
156     ::osl::Mutex maMutex;
157 
158 	SfxObjectShellLock GetDocument();
159 
160 	/** closes the current preview docshell */
161 	void CloseDocShell();
162 
163 	/**	Extract form the history list of recently used files the impress
164 		files and insert them into a listbox.
165 	*/
166 	void	ScanDocmenu			(void);
167     /**	Flag that is set to sal_True after the recently used files have been
168         scanned.
169 	*/
170 	sal_Bool mbRecentDocumentsReady;
171 
172 	/**	When the list of templates has not been scanned already this is done
173         when this method is called.  That includes requesting the whole list
174         of templates from UCB and extracting from that list the impress
175         templates and layouts and storing them for later use in
176         <member>maPresentList</member>.  Note that the first call to this
177         method after installing a new Office may take some time.
178 	*/
179 	void ProvideTemplates (void);
180 
181 	/**	This method transfers the template folders from the template scanner
182 		to the internal structures of this class.  On termination it sets
183 		the flag <member>mbTemplatesReady</member> to <TRUE/> to indicate
184 		that the templates are available.
185         @param rTemplateFolders
186             This is a list of template folders.  This method takes ownership
187             of the supplied entries by removing them from the list and
188             transferring them to an internal structure.
189 	*/
190 	void TemplateScanDone (std::vector<TemplateDir*>& rTemplateFolders);
191 
192 	/**	Flag that is set to sal_True after the impress templates have been
193         scanned.
194 	*/
195 	sal_Bool mbTemplatesReady;
196 
197     /** Flag used to prevent nested or concurrent calls to the
198         <member>UpdatePreview</memember> method.  A <TRUE/> value indicates
199         that a preview update is currently active.
200     */
201     sal_Bool mbPreviewUpdating;
202 
203 	::Window* mpWindow;
204 
205 	void SavePassword( SfxObjectShellLock xDoc, const String& rPath );
206 	void RestorePassword( SfxItemSet* pSet, const String& rPath );
207 	String GetPassword( const String rPath );
208 	void DeletePassords();
209 
210 	PasswordEntryList maPasswordList;
211 
212 	String maDocFile;
213 	String maLayoutFile;
214 
215 	String GetDocFileName();
216 	String GetLayoutFileName();
217 
218 	///	List of URLs of recently used impress files.
219 	std::vector<String*> maOpenFilesList;
220 
221 	///	List of folders containing data about impress templates.
222 	std::vector<TemplateDir*> maPresentList;
223 
224 	///	Currently selected template folder.
225 	TemplateDir* mpTemplateRegion;
226 
227 	///	Currently selected layout folder.
228 	TemplateDir* mpLayoutRegion;
229 
230 	// preview
231 	sal_Bool mbUserDataDirty;
232 	Timer maPrevTimer;
233 	Timer maEffectPrevTimer;
234 	Timer maUpdatePageListTimer;
235 	Timer maStartScanTimer;
236 
237 	SfxObjectShellLock xDocShell;
238 
239     ::std::auto_ptr<WindowUpdater> mpWindowUpdater;
240 
241 	sal_Bool mbPreview;
242 	sal_uInt16 mnShowPage;
243 	sal_Bool mbDocPreview;
244 
245 	sal_uLong mnTemplate;
246 
247 	String maPageListFile;
248 
249 	void UpdatePreview( sal_Bool bDocPreview );
250 	void UpdatePageList();
251 	void UpdateUserData();
252 
253 	sal_Bool IsOwnFormat( const String& rPath );
254 
255 	// dlg status
256 	void EndDialog( long nResult = 0 );
257 
258 	void SetStartType( StartType eType );
259 	StartType GetStartType();
260 
261 	void SelectTemplateRegion( const String& rRegion );
262 	void SelectLayoutRegion( const String& rRegion );
263 
264 	void UpdatePage();
265 	void ChangePage();
266 	void LeavePage();
267 
268     String GetUiTextForCommand (const ::rtl::OUString& aCommandURL);
269     Image GetUiIconForCommand (const ::rtl::OUString& aCommandURL);
270 
271 	DECL_LINK( StartScanHdl, void * );
272 	DECL_LINK( SelectFileHdl, ListBox * );
273 	DECL_LINK( SelectRegionHdl, ListBox * );
274 	DECL_LINK( UpdatePreviewHdl, void * );
275 	DECL_LINK( UpdatePageListHdl, void * );
276 	DECL_LINK( StartTypeHdl, RadioButton * );
277 	DECL_LINK( SelectTemplateHdl, ListBox * );
278 	DECL_LINK( NextPageHdl, PushButton * );
279 	DECL_LINK( LastPageHdl, PushButton * );
280 	DECL_LINK( PreviewFlagHdl, CheckBox * );
281 	DECL_LINK( EffectPreviewHdl, Button * );
282 	DECL_LINK( SelectLayoutHdl, ListBox * );
283 	DECL_LINK( PageSelectHdl, Control * );
284 	DECL_LINK( PresTypeHdl, RadioButton * );
285 	DECL_LINK( UpdateUserDataHdl, Edit* );
286 	DECL_LINK( SelectEffectHdl, void* );
287     DECL_LINK( OpenButtonHdl, Button * );
288 
289 	// Common
290 	Assistent			maAssistentFunc;
291 	CheckBox			maPreviewFlag;
292 	CheckBox			maStartWithFlag;
293 	HelpButton			maHelpButton;
294 	CancelButton		maCancelButton;
295 	PushButton			maLastPageButton;
296     NextButton	        maNextPageButton;
297 	OKButton			maFinishButton;
298 	SdDocPreviewWin		maPreview;
299 
300     String				maCreateStr;
301     String				maOpenStr;
302 
303 	// Seite 1
304 	FixedBitmap*		mpPage1FB;
305 	FixedLine*			mpPage1ArtFL;
306 	RadioButton*		mpPage1EmptyRB;
307 	RadioButton*		mpPage1TemplateRB;
308 	ListBox*			mpPage1RegionLB;
309 	ListBox*			mpPage1TemplateLB;
310 	RadioButton*		mpPage1OpenRB;
311 	ListBox*			mpPage1OpenLB;
312     PushButton*         mpPage1OpenPB;
313 
314 	// Seite 2
315 	FixedBitmap*		mpPage2FB;
316 	FixedLine*			mpPage2LayoutFL;
317 	ListBox*			mpPage2RegionLB;
318 	ListBox*			mpPage2LayoutLB;
319 	FixedLine*			mpPage2OutTypesFL;
320 	RadioButton*		mpPage2Medium1RB;
321 	RadioButton*		mpPage2Medium2RB;
322 	RadioButton*		mpPage2Medium3RB;
323 	RadioButton*		mpPage2Medium4RB;
324 	RadioButton*		mpPage2Medium5RB;
325 
326 	// Seite 3
327 	FixedBitmap*		mpPage3FB;
328 	FixedLine*			mpPage3EffectFL;
329 	FixedText*			mpPage3EffectFT;
330 	FadeEffectLB*		mpPage3EffectLB;
331 	FixedText*			mpPage3SpeedFT;
332 	ListBox*			mpPage3SpeedLB;
333 	FixedLine*			mpPage3PresTypeFL;
334 	RadioButton*		mpPage3PresTypeLiveRB;
335 	RadioButton*		mpPage3PresTypeKioskRB;
336 	FixedText*			mpPage3PresTimeFT;
337 	TimeField*			mpPage3PresTimeTMF;
338 	FixedText*			mpPage3BreakFT;
339 	TimeField*			mpPage3BreakTMF;
340 	CheckBox*			mpPage3LogoCB;
341 
342 	// Seite 4
343 	FixedBitmap*		mpPage4FB;
344 	FixedLine*			mpPage4PersonalFL;
345 	FixedText*			mpPage4AskNameFT;
346 	Edit*				mpPage4AskNameEDT;
347 	FixedText*			mpPage4AskTopicFT;
348 	Edit*				mpPage4AskTopicEDT;
349 	FixedText*			mpPage4AskInfoFT;
350 	MultiLineEdit*		mpPage4AskInfoEDT;
351 
352 	// Seite 5
353 	FixedBitmap*		mpPage5FB;
354 	FixedText*			mpPage5PageListFT;
355 	SdPageListControl*	mpPage5PageListCT;
356 	CheckBox*			mpPage5SummaryCB;
357 
358 };
359 
360 
361 
362 // ====================================================================
363 
364 AssistentDlgImpl::AssistentDlgImpl( ::Window* pWindow, const Link& rFinishLink, sal_Bool bAutoPilot ) :
365 	mpTemplateRegion(NULL),
366 	mpLayoutRegion(NULL),
367 	mbUserDataDirty(sal_False),
368 	xDocShell (NULL),
369     mpWindowUpdater (new WindowUpdater()),
370 	mbPreview(sal_True),
371 	mnShowPage(0),
372 	mbDocPreview(sal_False),
373 	maAssistentFunc(5),
374 	maPreviewFlag(pWindow,SdResId(CB_PREVIEW)),
375 	maStartWithFlag(pWindow,SdResId(CB_STARTWITH)),
376 	maHelpButton(pWindow,SdResId(BUT_HELP)),
377 	maCancelButton(pWindow,SdResId(BUT_CANCEL)),
378 	maLastPageButton(pWindow,SdResId(BUT_LAST)),
379 	maNextPageButton(pWindow,SdResId(BUT_NEXT)),
380 	maFinishButton(pWindow,SdResId(BUT_FINISH)),
381 	maPreview(pWindow,SdResId(CT_PREVIEW)),
382     maCreateStr(SdResId(STR_CREATE)),
383     maOpenStr(SdResId(STR_OPEN))
384 {
385 	maPageListFile += sal_Unicode('?'),
386     mbRecentDocumentsReady = sal_False;
387 	mbTemplatesReady = sal_False;
388     mbPreviewUpdating = sal_False;
389 
390 	mpWindow = pWindow;
391 
392 	if(bAutoPilot)
393 		maStartWithFlag.Hide();
394 	else
395 		maAssistentFunc.InsertControl(1, &maStartWithFlag );
396 
397 	//page1 wird initialisiert und an die Assistentenfunktionalitaet
398 	//uebergeben
399 	maAssistentFunc.InsertControl(1, &maPreview );
400 	maAssistentFunc.InsertControl(1, &maPreviewFlag );
401 	maAssistentFunc.InsertControl(1,
402 		mpPage1FB = new FixedBitmap(pWindow,SdResId(FB_PAGE1)));
403 	maAssistentFunc.InsertControl(1,
404 		mpPage1ArtFL = new FixedLine(pWindow,SdResId(FL_PAGE1_ARTGROUP)));
405 	maAssistentFunc.InsertControl(1,
406 		mpPage1EmptyRB=new RadioButton(pWindow,SdResId(RB_PAGE1_EMPTY)));
407 	maAssistentFunc.InsertControl(1,
408 		mpPage1TemplateRB=new RadioButton(pWindow,SdResId(RB_PAGE1_TEMPLATE)));
409 	maAssistentFunc.InsertControl(1,
410 		mpPage1OpenRB=new RadioButton(pWindow,SdResId(RB_PAGE1_OPEN)));
411 	maAssistentFunc.InsertControl(1,
412 		mpPage1RegionLB = new ListBox(pWindow,SdResId(LB_PAGE1_REGION)));
413 	maAssistentFunc.InsertControl(1,
414 		mpPage1TemplateLB=new ListBox(pWindow,SdResId(LB_PAGE1_TEMPLATES)));
415 	maAssistentFunc.InsertControl(1,
416 		mpPage1OpenPB=new PushButton(pWindow,SdResId(PB_PAGE1_OPEN)));
417 	maAssistentFunc.InsertControl(1,
418 		mpPage1OpenLB=new ListBox(pWindow,SdResId(LB_PAGE1_OPEN)));
419 
420     // Align the button and list box displayed for the "open existing file"
421     // radio button with the text of that radio button.
422     {
423         RadioButton aEmptyRB (mpWindow);
424         sal_Int32 nIndent (aEmptyRB.CalcMinimumSize(0).Width());
425         sal_Int32 nLeft (mpPage1OpenRB->GetPosPixel().X() + nIndent);
426         sal_Int32 nWidth (mpPage1OpenRB->GetSizePixel().Width() - nIndent);
427         mpPage1OpenPB->SetPosSizePixel(
428             Point(nLeft, mpPage1OpenPB->GetPosPixel().Y()),
429             Size(mpPage1OpenPB->GetSizePixel()));
430         mpPage1OpenLB->SetPosSizePixel(
431             Point(nLeft, mpPage1OpenLB->GetPosPixel().Y()),
432             Size(nWidth, mpPage1OpenLB->GetSizePixel().Height()));
433     }
434 
435     // Set text and icon of the 'Open...' button.
436     {
437         String sText (GetUiTextForCommand(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Open"))));
438         // Remove the mnemonic and add a leading space so that icon and text
439         // are not too close together.
440         sText.SearchAndReplaceAll(String(RTL_CONSTASCII_STRINGPARAM("~")),String());
441         sText.Insert(String(RTL_CONSTASCII_STRINGPARAM(" ")),0);
442         mpPage1OpenPB->SetText(sText);
443         // Place icon left of text and both centered in the button.
444         mpPage1OpenPB->SetModeImage(
445             GetUiIconForCommand(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Open"))),
446             BMP_COLOR_NORMAL);
447         mpPage1OpenPB->EnableImageDisplay(sal_True);
448         mpPage1OpenPB->EnableTextDisplay(sal_True);
449         mpPage1OpenPB->SetImageAlign(IMAGEALIGN_LEFT);
450         mpPage1OpenPB->SetStyle(mpPage1OpenPB->GetStyle() | WB_CENTER);
451     }
452 
453 	// links&handler
454 	mpPage1RegionLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectRegionHdl));
455 	mpPage1RegionLB->SetDropDownLineCount( 6 );
456 	mpPage1TemplateLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectTemplateHdl));
457 	mpPage1TemplateLB->InsertEntry(String(SdResId(STR_ISLOADING)));
458 
459 	mpPage1EmptyRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
460 	mpPage1TemplateRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
461 	mpPage1OpenRB->SetClickHdl(LINK(this,AssistentDlgImpl,StartTypeHdl));
462 	mpPage1OpenLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectFileHdl));
463 	mpPage1OpenLB->SetDoubleClickHdl(rFinishLink);
464     mpPage1OpenPB->SetClickHdl(LINK(this,AssistentDlgImpl,OpenButtonHdl));
465     //	mpPage1OpenLB->InsertEntry(String(SdResId(STR_WIZARD_POSITION)));
466 
467 	// Seite 2
468 	maAssistentFunc.InsertControl(2, &maPreview );
469 	maAssistentFunc.InsertControl(2, &maPreviewFlag );
470 	maAssistentFunc.InsertControl(2,
471 		mpPage2FB = new FixedBitmap(pWindow,SdResId(FB_PAGE2)));
472 	maAssistentFunc.InsertControl(2,
473 		mpPage2LayoutFL = new FixedLine( pWindow, SdResId(FL_PAGE2_LAYOUT) ));
474 	maAssistentFunc.InsertControl(2,
475 		mpPage2RegionLB = new ListBox(pWindow,SdResId(LB_PAGE2_REGION) ));
476 	maAssistentFunc.InsertControl(2,
477 		mpPage2LayoutLB = new ListBox(pWindow,SdResId(LB_PAGE2_LAYOUT) ));
478 
479 	maAssistentFunc.InsertControl(2,
480 		mpPage2OutTypesFL = new FixedLine( pWindow, SdResId(FL_PAGE2_OUTPUTTYPES) ));
481 	maAssistentFunc.InsertControl(2,
482 		mpPage2Medium5RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM5) ));
483 	maAssistentFunc.InsertControl(2,
484 		mpPage2Medium3RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM3) ));
485 	maAssistentFunc.InsertControl(2,
486 		mpPage2Medium4RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM4) ));
487 	maAssistentFunc.InsertControl(2,
488 		mpPage2Medium1RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM1) ));
489 	maAssistentFunc.InsertControl(2,
490 		mpPage2Medium2RB = new RadioButton( pWindow, SdResId(RB_PAGE2_MEDIUM2) ));
491 	mpPage2Medium5RB->Check();
492 
493 	mpPage2RegionLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectRegionHdl));
494 	mpPage2RegionLB->SetDropDownLineCount( 6 );
495 	mpPage2LayoutLB->SetSelectHdl(LINK(this,AssistentDlgImpl,SelectLayoutHdl));
496 	mpPage2LayoutLB->InsertEntry(String(SdResId(STR_ISLOADING)));
497 
498 	// Seite 3
499 	maAssistentFunc.InsertControl(3, &maPreview );
500 	maAssistentFunc.InsertControl(3, &maPreviewFlag );
501 	maAssistentFunc.InsertControl(3,
502 		mpPage3FB = new FixedBitmap(pWindow,SdResId(FB_PAGE3)));
503 	maAssistentFunc.InsertControl(3,
504 		mpPage3EffectFL = new FixedLine( pWindow, SdResId(FL_PAGE3_EFFECT) ));
505 	maAssistentFunc.InsertControl(3,
506 		mpPage3EffectFT = new FixedText( pWindow, SdResId(FT_PAGE3_EFFECT) ));
507 	maAssistentFunc.InsertControl(3,
508 		mpPage3EffectLB = new FadeEffectLB( pWindow, SdResId(LB_PAGE3_EFFECT) ));
509 	maAssistentFunc.InsertControl(3,
510 		mpPage3SpeedFT = new FixedText( pWindow, SdResId(FT_PAGE3_SPEED) ));
511 	maAssistentFunc.InsertControl(3,
512 		mpPage3SpeedLB = new FadeEffectLB( pWindow, SdResId(LB_PAGE3_SPEED) ));
513 	maAssistentFunc.InsertControl(3,
514 		mpPage3PresTypeFL = new FixedLine( pWindow, SdResId(FL_PAGE3_PRESTYPE) ));
515 	maAssistentFunc.InsertControl(3,
516 		mpPage3PresTypeLiveRB = new RadioButton( pWindow, SdResId(RB_PAGE3_LIVE) ));
517 	maAssistentFunc.InsertControl(3,
518 		mpPage3PresTypeKioskRB = new RadioButton( pWindow, SdResId(RB_PAGE3_KIOSK) ));
519 	maAssistentFunc.InsertControl(3,
520 		mpPage3PresTimeFT = new FixedText( pWindow, SdResId( FT_PAGE3_TIME) ));
521 	maAssistentFunc.InsertControl(3,
522 		mpPage3PresTimeTMF = new TimeField( pWindow, SdResId( TMF_PAGE3_TIME) ));
523 	maAssistentFunc.InsertControl(3,
524 		mpPage3BreakFT = new FixedText( pWindow, SdResId( FT_PAGE3_BREAK) ));
525 	maAssistentFunc.InsertControl(3,
526 		mpPage3BreakTMF = new TimeField( pWindow, SdResId( TMF_PAGE3_BREAK) ));
527 	maAssistentFunc.InsertControl(3,
528 		mpPage3LogoCB = new CheckBox( pWindow, SdResId( CB_PAGE3_LOGO) ));
529 
530 	mpPage3EffectLB->Fill();
531 //	mpPage3EffectLB->SelectEffect( presentation::FadeEffect_NONE );
532 	mpPage3EffectLB->SetSelectHdl( LINK(this,AssistentDlgImpl,SelectEffectHdl ));
533 	mpPage3EffectLB->SetDropDownLineCount( 12 );
534 
535 	mpPage3SpeedLB->InsertEntry( String( SdResId(STR_SLOW) ));
536 	mpPage3SpeedLB->InsertEntry( String( SdResId(STR_MEDIUM) ));
537 	mpPage3SpeedLB->InsertEntry( String( SdResId(STR_FAST) ));
538 	mpPage3SpeedLB->SetDropDownLineCount( 3 );
539 	mpPage3SpeedLB->SetSelectHdl( LINK(this,AssistentDlgImpl,SelectEffectHdl ));
540 	mpPage3SpeedLB->SelectEntryPos( 1 );
541 
542 	mpPage3PresTypeLiveRB->Check();
543 	mpPage3PresTypeLiveRB->SetClickHdl( LINK(this,AssistentDlgImpl, PresTypeHdl ));
544 	mpPage3PresTypeKioskRB->SetClickHdl( LINK(this,AssistentDlgImpl, PresTypeHdl ));
545 	mpPage3PresTimeTMF->SetFormat( TIMEF_SEC );
546 	mpPage3PresTimeTMF->SetTime( Time( 0, 0, 10 ) );
547 	mpPage3BreakTMF->SetFormat( TIMEF_SEC );
548 	mpPage3BreakTMF->SetTime( Time( 0, 0, 10 ) );
549 	mpPage3LogoCB->Check();
550 
551 	// set cursor in timefield
552 	Edit *pEditPage3PresTimeTMF = mpPage3PresTimeTMF->GetField();
553 	Edit *pEditPage3BreakTMF = mpPage3BreakTMF->GetField();
554 	Selection aSel1( pEditPage3PresTimeTMF->GetMaxTextLen(), pEditPage3PresTimeTMF->GetMaxTextLen() );
555 	Selection aSel2( pEditPage3BreakTMF->GetMaxTextLen(), pEditPage3BreakTMF->GetMaxTextLen() );
556 	pEditPage3PresTimeTMF->SetSelection( aSel1 );
557 	pEditPage3BreakTMF->SetSelection( aSel2 );
558 
559 	// Seite 4
560 	maAssistentFunc.InsertControl(4,
561 		mpPage4FB = new FixedBitmap(pWindow,SdResId(FB_PAGE4)));
562 	maAssistentFunc.InsertControl(4,
563 		mpPage4PersonalFL = new FixedLine( pWindow, SdResId(FL_PAGE4_PERSONAL) ));
564 	maAssistentFunc.InsertControl(4,
565 		mpPage4AskNameFT   = new FixedText( pWindow, SdResId(FT_PAGE4_ASKNAME) ));
566 	maAssistentFunc.InsertControl(4,
567 		mpPage4AskNameEDT  = new Edit( pWindow, SdResId(EDT_PAGE4_ASKNAME) ));
568 	maAssistentFunc.InsertControl(4,
569 		mpPage4AskTopicFT= new FixedText( pWindow, SdResId(FT_PAGE4_ASKTOPIC) ));
570 	maAssistentFunc.InsertControl(4,
571 		mpPage4AskTopicEDT = new Edit( pWindow, SdResId(EDT_PAGE4_ASKTOPIC) ));
572 	maAssistentFunc.InsertControl(4,
573 		mpPage4AskInfoFT   = new FixedText( pWindow, SdResId(FT_PAGE4_ASKINFORMATION) ));
574 	maAssistentFunc.InsertControl(4,
575 		mpPage4AskInfoEDT  = new MultiLineEdit( pWindow, SdResId(EDT_PAGE4_ASKINFORMATION) ));
576 
577 	mpPage4AskNameEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
578 	mpPage4AskTopicEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
579 	mpPage4AskInfoEDT->SetModifyHdl(LINK(this,AssistentDlgImpl,UpdateUserDataHdl));
580 
581 	// page 5
582 	maAssistentFunc.InsertControl(5, &maPreview );
583 	maAssistentFunc.InsertControl(5, &maPreviewFlag );
584 	maAssistentFunc.InsertControl(5,
585 		mpPage5FB = new FixedBitmap(pWindow,SdResId(FB_PAGE5)));
586 	maAssistentFunc.InsertControl(5,
587 		mpPage5PageListFT = new FixedText( pWindow, SdResId( FT_PAGE5_PAGELIST ) ));
588 	maAssistentFunc.InsertControl(5,
589 		mpPage5PageListCT = new SdPageListControl( pWindow, SdResId( CT_PAGE5_PAGELIST ) ));
590 	maAssistentFunc.InsertControl(5,
591 		mpPage5SummaryCB  = new CheckBox( pWindow, SdResId( CB_PAGE5_SUMMARY ) ));
592 
593 	mpPage5PageListCT->SetSelectHdl(LINK(this,AssistentDlgImpl, PageSelectHdl));
594 
595 
596 	// generell
597     InterpolateFixedBitmap( mpPage1FB );
598     InterpolateFixedBitmap( mpPage2FB );
599     InterpolateFixedBitmap( mpPage3FB );
600     InterpolateFixedBitmap( mpPage4FB );
601     InterpolateFixedBitmap( mpPage5FB );
602 
603 	maLastPageButton.SetClickHdl(LINK(this,AssistentDlgImpl, LastPageHdl ));
604 	maNextPageButton.SetClickHdl(LINK(this,AssistentDlgImpl, NextPageHdl ));
605 
606 	maPreviewFlag.Check( mbPreview );
607 	maPreviewFlag.SetClickHdl(LINK(this, AssistentDlgImpl, PreviewFlagHdl ));
608 	maPreview.SetClickHdl(LINK(this,AssistentDlgImpl, EffectPreviewHdl ));
609 
610 	//setzt die Ausgangsseite
611 	maAssistentFunc.GotoPage(1);
612 	maLastPageButton.Disable();
613 
614 	maPrevTimer.SetTimeout( 200 );
615 	maPrevTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, UpdatePreviewHdl));
616 
617 	maEffectPrevTimer.SetTimeout( 50 );
618 	maEffectPrevTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, EffectPreviewHdl ));
619 
620 	maUpdatePageListTimer.SetTimeout( 50 );
621 	maUpdatePageListTimer.SetTimeoutHdl( LINK( this, AssistentDlgImpl, UpdatePageListHdl));
622 
623 	SetStartType( ST_EMPTY );
624 
625 	ChangePage();
626 
627     mpWindowUpdater->RegisterWindow (&maPreview);
628 
629 	UpdatePreview( sal_True );
630 
631 	//check wether we should start with a template document initialy and preselect it
632 	const ::rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) );
633     String aStandardTemplate( SfxObjectFactory::GetStandardTemplate( aServiceName ) );
634     if( aStandardTemplate.Len() )
635     {
636         ProvideTemplates();
637 
638         //find aStandardTemplate in maPresentList
639         TemplateDir*   pStandardTemplateDir = 0;
640         TemplateEntry* pStandardTemplateEntry = 0;
641 
642         std::vector<TemplateDir*>::iterator	I;
643 	    for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
644 	    {
645 		    TemplateDir* pDir = *I;
646 		    std::vector<TemplateEntry*>::iterator	J;
647 			for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
648             {
649                 TemplateEntry* pEntry = *J;
650                 if(pEntry->msPath == aStandardTemplate)
651                 {
652                     pStandardTemplateDir = pDir;
653                     pStandardTemplateEntry = pEntry;
654                     break;
655                 }
656             }
657             if(pStandardTemplateDir)
658                 break;
659 	    }
660 
661 		//preselect template
662         if( pStandardTemplateDir && pStandardTemplateEntry )
663         {
664             mpPage1RegionLB->SelectEntry( pStandardTemplateDir->msRegion );
665             SelectTemplateRegion( pStandardTemplateDir->msRegion );
666             mpPage1TemplateLB->SelectEntry( pStandardTemplateEntry->msTitle );
667             SelectTemplateHdl(mpPage1TemplateLB);
668         }
669     }
670 }
671 
672 
673 
674 
675 AssistentDlgImpl::~AssistentDlgImpl()
676 {
677 	CloseDocShell();
678 
679 	DeletePassords();
680 
681 	//	Delete the template file infos.
682 	std::vector<TemplateDir*>::iterator	I;
683 	std::vector<TemplateEntry*>::iterator	J;
684 	for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
685 	{
686 		for (J=(*I)->maEntries.begin(); J!=(*I)->maEntries.end(); J++)
687 			delete (*J);
688 		delete (*I);
689 	}
690 
691 	// Seite 1
692 	delete mpPage1FB;
693 	delete mpPage1ArtFL;
694 	delete mpPage1EmptyRB;
695 	delete mpPage1TemplateRB;
696 	delete mpPage1TemplateLB;
697 	delete mpPage1RegionLB;
698 	delete mpPage1OpenRB;
699 	delete mpPage1OpenLB;
700     delete mpPage1OpenPB;
701 
702 	// Seite 2
703 	delete mpPage2FB;
704 	delete mpPage2LayoutFL;
705 	delete mpPage2RegionLB;
706 	delete mpPage2LayoutLB;
707 	delete mpPage2OutTypesFL;
708 	delete mpPage2Medium1RB;
709 	delete mpPage2Medium2RB;
710 	delete mpPage2Medium3RB;
711 	delete mpPage2Medium4RB;
712 	delete mpPage2Medium5RB;
713 
714 	// Seite 3
715 	delete mpPage3FB;
716 	delete mpPage3EffectFL;
717 	delete mpPage3EffectFT;
718 	delete mpPage3EffectLB;
719 	delete mpPage3SpeedFT;
720 	delete mpPage3SpeedLB;
721 	delete mpPage3PresTypeFL;
722 	delete mpPage3PresTypeLiveRB;
723 	delete mpPage3PresTypeKioskRB;
724 	delete mpPage3PresTimeFT;
725 	delete mpPage3PresTimeTMF;
726 	delete mpPage3BreakFT;
727 	delete mpPage3BreakTMF;
728 	delete mpPage3LogoCB;
729 
730 	// Seite 4
731 	delete mpPage4FB;
732 	delete mpPage4PersonalFL;
733 	delete mpPage4AskNameFT;
734 	delete mpPage4AskNameEDT;
735 	delete mpPage4AskTopicFT;
736 	delete mpPage4AskTopicEDT;
737 	delete mpPage4AskInfoFT;
738 	delete mpPage4AskInfoEDT;
739 
740 	// Seite 5
741 	delete mpPage5FB;
742 	delete mpPage5PageListFT;
743 	delete mpPage5PageListCT;
744 	delete mpPage5SummaryCB;
745 
746 	//	Delete the file history list.
747 	std::vector<String*>::iterator	I2;
748 	for (I2=maOpenFilesList.begin(); I2!=maOpenFilesList.end(); I2++)
749 		delete *I2;
750 }
751 
752 void AssistentDlgImpl::CloseDocShell()
753 {
754 	if(xDocShell.Is())
755 	{
756 		//uno::Reference< lang::XComponent > xModel( xDocShell->GetModel(), uno::UNO_QUERY );
757 		uno::Reference< util::XCloseable > xCloseable( xDocShell->GetModel(), uno::UNO_QUERY );
758 		//if( xModel.is() )
759 		if( xCloseable.is() )
760 		{
761 			xCloseable->close( sal_True );
762 			xDocShell = NULL;
763 			//xModel->dispose();
764 		}
765 		else
766 		{
767 			xDocShell->DoClose();
768 			xDocShell = NULL;
769 		}
770 	}
771 }
772 
773 void AssistentDlgImpl::EndDialog( long )
774 {
775 	mpWindow = NULL;
776 }
777 
778 
779 
780 
781 void	AssistentDlgImpl::ScanDocmenu	(void)
782 {
783     if( mbRecentDocumentsReady )
784         return;
785 
786 	uno::Sequence<uno::Sequence<beans::PropertyValue> > aHistory =
787 		SvtHistoryOptions().GetList (ePICKLIST);
788 
789     uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
790     uno::Reference< container::XNameAccess > xFilterFactory( xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.FilterFactory" ) ) ), uno::UNO_QUERY );
791 
792     Reference< ::com::sun::star::ucb::XSimpleFileAccess > xFileAccess(
793         xFactory->createInstance(
794             ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess"))),
795         UNO_QUERY_THROW);
796 
797 	sal_uInt32 nCount = aHistory.getLength();
798 	for (sal_uInt32 nItem=0; nItem<nCount; ++nItem)
799 	{
800 		//	Get the current history item's properties.
801 		uno::Sequence<beans::PropertyValue> aPropertySet = aHistory[nItem];
802 		rtl::OUString	sURL;
803 		rtl::OUString	sFilter;
804 		rtl::OUString	sTitle;
805 		rtl::OUString	sPassword;
806 		sal_uInt32 nPropertyCount = aPropertySet.getLength();
807 		for (sal_uInt32 nProperty=0; nProperty<nPropertyCount; ++nProperty)
808 			if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_URL)
809 				aPropertySet[nProperty].Value >>= sURL;
810 			else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_FILTER)
811 				aPropertySet[nProperty].Value >>= sFilter;
812 			else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_TITLE)
813 				aPropertySet[nProperty].Value >>= sTitle;
814 			else if (aPropertySet[nProperty].Name == HISTORY_PROPERTYNAME_PASSWORD)
815 				aPropertySet[nProperty].Value >>= sPassword;
816 
817         //	If the entry is an impress file then insert it into the
818         //	history list and the list box.
819         uno::Sequence< beans::PropertyValue > lProps;
820         if (xFilterFactory->hasByName(sFilter))
821         {
822             uno::Any aFilterPropSet = xFilterFactory->getByName( sFilter );
823             aFilterPropSet >>= lProps;
824         }
825 
826         sal_Int32 nPropCount = lProps.getLength();
827         rtl::OUString sFactoryName;
828         for( sal_Int32 i=0; i<nPropCount; ++i )
829         {
830             if( lProps[i].Name.compareToAscii( "DocumentService" ) == 0 &&
831                 (lProps[i].Value >>= sFactoryName) &&
832                 sFactoryName.compareToAscii( "com.sun.star.presentation.PresentationDocument" ) == 0 )
833             {
834                 // yes, it's an impress document
835                 INetURLObject aURL;
836 
837                 // Do not include the file if it does not exist.
838                 if (xFileAccess.is() && ! xFileAccess->exists(sURL))
839                     continue;
840 
841                 aURL.SetSmartURL (sURL);
842                 // The password is set only when it is not empty.
843                 if (sPassword.getLength() > 0)
844 	                aURL.SetPass (sPassword);
845                 maOpenFilesList.push_back (new String (aURL.GetMainURL( INetURLObject::NO_DECODE )));
846                 mpPage1OpenLB->InsertEntry (sTitle);
847                 break;
848             }
849 		}
850 	}
851     mbRecentDocumentsReady = sal_True;
852     try
853     {
854         UpdatePreview(sal_True);
855     }
856     catch (uno::RuntimeException& )
857     {
858         // Ignore all exceptions.
859     }
860 }
861 
862 
863 
864 void AssistentDlgImpl::ProvideTemplates (void)
865 {
866     if ( ! mbTemplatesReady)
867     {
868         TemplateScanner aScanner;
869         aScanner.Scan ();
870         TemplateScanDone (aScanner.GetFolderList());
871 
872         try
873         {
874             UpdatePreview(sal_True);
875         }
876         catch (uno::RuntimeException& e)
877         {
878             // Ignore all exceptions.
879             (void) e;
880         }
881     }
882 }
883 
884 void AssistentDlgImpl::TemplateScanDone (
885     std::vector<TemplateDir*>& rTemplateFolder)
886 {
887 	//	This method is called from a thread.  Therefore we get the solar mutex.
888 	::vos::OGuard aGuard (Application::GetSolarMutex());
889 
890     // Copy the contents of the given template folders to a local list.
891     maPresentList.swap (rTemplateFolder);
892 
893 	//	Fill in the list box on the first page.
894 	int nFirstEntry = 0;
895 	mpPage1RegionLB->Clear();
896 	std::vector<TemplateDir*>::iterator	I;
897 	int	i;
898 	for (i=0,I=maPresentList.begin(); I!=maPresentList.end(); I++,i++)
899 	{
900 		TemplateDir* pDir = *I;
901         if (pDir == NULL)
902             continue;
903 
904         // HACK! presnt directory is always initially selected.
905         // We have to look at the first entry to get a URL.
906         if (!pDir->maEntries.empty() )
907         {
908             TemplateEntry* pEntry = pDir->maEntries.front();
909             if (pEntry != NULL)
910                 if (pEntry->msPath.SearchAscii("presnt") != STRING_NOTFOUND)
911                     nFirstEntry = i;
912         }
913 
914 		mpPage1RegionLB->InsertEntry (pDir->msRegion);
915 	}
916 	mpPage1RegionLB->SelectEntryPos ((sal_uInt16)nFirstEntry);
917 	mpPage1RegionLB->Update();
918 	SelectTemplateRegion (mpPage1RegionLB->GetSelectEntry());
919 
920 	//	Fill in the list box on the second page.
921 	nFirstEntry = 0;
922 	mpPage2RegionLB->Clear();
923 	for (i=0,I=maPresentList.begin(); I!=maPresentList.end(); I++,i++)
924 	{
925 		TemplateDir* pDir = *I;
926         if (pDir == NULL)
927             continue;
928 
929 		// HACK! layout directory is always initially selected.
930         // We have to look at the first entry to get a URL.
931         if (!pDir->maEntries.empty() )
932         {
933             TemplateEntry* pEntry = pDir->maEntries.front();
934             if (pEntry != NULL)
935                 if (pEntry->msPath.SearchAscii("layout") != STRING_NOTFOUND)
936                     nFirstEntry = i;
937         }
938 
939 		mpPage2RegionLB->InsertEntry (pDir->msRegion);
940 	}
941 	mpPage2RegionLB->SelectEntryPos ((sal_uInt16)nFirstEntry);
942 	mpPage2RegionLB->Update();
943 	SelectLayoutRegion (mpPage2RegionLB->GetSelectEntry());
944 
945 	//	Make the changes visible.
946 	mbTemplatesReady = sal_True;
947 	if (mpWindow)
948 		UpdatePage();
949 }
950 
951 
952 
953 
954 // ********************************************************************
955 // Status Methoden
956 // ********************************************************************
957 
958 void AssistentDlgImpl::SetStartType( StartType eType )
959 {
960 	mpPage1EmptyRB->SetState( eType == ST_EMPTY );
961 	mpPage1TemplateRB->SetState( eType == ST_TEMPLATE );
962 	mpPage1OpenRB->SetState( eType == ST_OPEN );
963 	maNextPageButton.Enable( eType != ST_OPEN );
964 
965 	mpPage1RegionLB->Show(eType == ST_TEMPLATE);
966 	mpPage1TemplateLB->Show(eType == ST_TEMPLATE);
967 	mpPage1OpenLB->Show(eType == ST_OPEN);
968 	mpPage1OpenPB->Show(eType == ST_OPEN);
969 
970 	if (eType == ST_OPEN)
971 		maFinishButton.SetText(maOpenStr);
972 	else
973 		maFinishButton.SetText(maCreateStr);
974 }
975 
976 StartType AssistentDlgImpl::GetStartType()
977 {
978 	if( mpPage1EmptyRB->IsChecked() )
979 		return ST_EMPTY;
980 	else if( mpPage1TemplateRB->IsChecked() )
981 		return ST_TEMPLATE;
982 	else
983 		return ST_OPEN;
984 }
985 
986 String AssistentDlgImpl::GetDocFileName()
987 {
988 	String aTitle;
989 	if(mpWindow)
990 	{
991 		aTitle = mpWindow->GetText();
992 		sal_uInt16 nPos = aTitle.Search(sal_Unicode('('));
993 		if(nPos != STRING_NOTFOUND)
994 			aTitle.Erase( nPos-1 );
995 	}
996 
997 	String aDocFile;
998 	if( GetStartType() == ST_TEMPLATE )
999 	{
1000 		const sal_uInt16 nEntry = mpPage1TemplateLB->GetSelectEntryPos();
1001 		TemplateEntry* pEntry = NULL;
1002 		if(nEntry != (sal_uInt16)-1)
1003 			pEntry = mpTemplateRegion->maEntries[nEntry];
1004 
1005 		if(pEntry)
1006 		{
1007 			aDocFile = pEntry->msPath;
1008 
1009 			aTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM(  " (" ) );
1010 			aTitle.Append( pEntry->msTitle );
1011 			aTitle.Append( sal_Unicode(')') );
1012 		}
1013 	}
1014 	else if( GetStartType() == ST_OPEN )
1015 	{
1016 		const sal_uInt16 nEntry = mpPage1OpenLB->GetSelectEntryPos();
1017 		if(nEntry != (sal_uInt16)-1 )
1018 			aDocFile = *maOpenFilesList[nEntry];
1019 	}
1020 
1021 	if(mpWindow)
1022 		mpWindow->SetText(aTitle);
1023 
1024 	return aDocFile;
1025 }
1026 
1027 String AssistentDlgImpl::GetLayoutFileName()
1028 {
1029 	String aFile;
1030 	const sal_uInt16 nEntry = mpPage2LayoutLB->GetSelectEntryPos();
1031 	TemplateEntry* pEntry = NULL;
1032 	if(nEntry != (sal_uInt16)-1 && nEntry > 0)
1033 		pEntry = mpLayoutRegion->maEntries[nEntry-1];
1034 
1035 	if(pEntry)
1036 		aFile = pEntry->msPath;
1037 
1038 	return aFile;
1039 }
1040 
1041 SfxObjectShellLock AssistentDlgImpl::GetDocument()
1042 {
1043 //	mbPreview = sal_False;		// Document nicht anzeigen
1044 	UpdatePreview(sal_False);	// aber komplett laden
1045 	UpdatePageList();
1046 
1047 	SfxObjectShell* pShell = xDocShell;
1048 	::sd::DrawDocShell* pDocShell = PTR_CAST(::sd::DrawDocShell,pShell);
1049 	SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
1050 
1051 	if(pDoc)
1052 	{
1053 		const sal_uInt16 nPageCount = pDoc->GetSdPageCount(PK_STANDARD);
1054 		sal_Bool bKiosk = mpPage3PresTypeKioskRB->IsChecked();
1055 		sal_uInt32 nNewTime = (sal_uInt32)mpPage3PresTimeTMF->GetTime().GetMSFromTime() / 1000;
1056 		if(bKiosk)
1057 		{
1058 			PresentationSettings& rSettings = pDoc->getPresentationSettings();
1059 			rSettings.mbEndless = bKiosk;
1060 			rSettings.mnPauseTimeout = (sal_Int32)mpPage3BreakTMF->GetTime().GetMSFromTime() / 1000;
1061 			rSettings.mbShowPauseLogo = mpPage3LogoCB->IsChecked();
1062 		}
1063 
1064 		sal_uInt16 nPgAbsNum = 0;
1065 		sal_uInt16 nPgRelNum = 0;
1066 		while( nPgAbsNum < nPageCount )
1067 		{
1068 			SdPage* pPage = pDoc->GetSdPage( nPgRelNum, PK_STANDARD );
1069 			if( mpPage5PageListCT->IsPageChecked(nPgAbsNum) )
1070 			{
1071 				mpPage3EffectLB->applySelected(pPage);
1072 				const sal_uInt16 nPos = mpPage3SpeedLB->GetSelectEntryPos();
1073 		        pPage->setTransitionDuration( (nPos == 0) ? 3.0 : (nPos == 1) ? 2.0 : 1.0 );
1074 				if(bKiosk)
1075 				{
1076 					pPage->SetPresChange( PRESCHANGE_AUTO );
1077 					pPage->SetTime(nNewTime);
1078 				}
1079 				nPgRelNum++;
1080 			}
1081 			else
1082 			{
1083 				// diese Seite loeschen
1084 				pDoc->DeletePage( (nPgRelNum << 1) + 2 ); // Notizseite loeschen
1085 				pDoc->DeletePage( (nPgRelNum << 1) + 1 );	// Seite loeschen
1086 			}
1087 
1088 			nPgAbsNum++;
1089 		}
1090 	}
1091 	else
1092 	{
1093 		DBG_ERROR("sd::AssistentDlgImpl::GetDocument(), no template?");
1094 	}
1095 
1096 	SfxObjectShellLock xRet = xDocShell;
1097 	xDocShell = NULL;
1098 
1099 	return xRet;
1100 }
1101 
1102 void AssistentDlgImpl::LeavePage()
1103 {
1104 	int nPage = maAssistentFunc.GetCurrentPage();
1105 
1106 	if( nPage == 4 && mbUserDataDirty )
1107 		maPrevTimer.Start();
1108 }
1109 
1110 void AssistentDlgImpl::ChangePage()
1111 {
1112 	maNextPageButton.Enable(!maAssistentFunc.IsLastPage());
1113 	maLastPageButton.Enable(!maAssistentFunc.IsFirstPage());
1114 
1115 	sal_uInt16 nPage = (sal_uInt16)maAssistentFunc.GetCurrentPage();
1116 
1117 	if( mpWindow )
1118 	{
1119 		mpWindow->SetHelpId( PageHelpIds[nPage-1]);
1120 	}
1121 
1122 	UpdatePage();
1123 
1124 	if( maNextPageButton.IsEnabled() )
1125 	{
1126 	  maNextPageButton.ForceFocusEventBroadcast();
1127 	}
1128 	else
1129 		maFinishButton.GrabFocus();
1130 }
1131 
1132 void AssistentDlgImpl::UpdatePage()
1133 {
1134 	sal_uInt16 nPage = (sal_uInt16)maAssistentFunc.GetCurrentPage();
1135 
1136 	switch(nPage)
1137 	{
1138 	case 1:
1139 		{
1140 			// Elemente auf der ersten Seite abhaengig vom Starttype Zeigen
1141 			SetStartType( GetStartType() );
1142 			mpPage1TemplateRB->Enable(sal_True /*mbTemplatesReady*/);
1143 			break;
1144 		}
1145 
1146 	case 2:
1147 		{
1148 			mpPage2RegionLB->Enable(mbTemplatesReady);
1149 			mpPage2LayoutLB->Enable(mbTemplatesReady);
1150 
1151 			if( GetStartType() != ST_EMPTY )
1152 			{
1153 				mpPage2Medium5RB->Enable( sal_True );
1154 			}
1155 			else
1156 			{
1157 				mpPage2Medium5RB->Enable( sal_False );
1158 				if(mpPage2Medium5RB->IsChecked())
1159 					mpPage2Medium1RB->Check();
1160 			}
1161 
1162 			break;
1163 		}
1164 	case 5:
1165 		{
1166 			if(mbDocPreview || maPageListFile != maDocFile)
1167 				mpPage5PageListCT->Clear();
1168 
1169 			maUpdatePageListTimer.Start();
1170 			break;
1171 		}
1172 
1173 	case 3:
1174 		{
1175 			if(GetStartType() != ST_TEMPLATE)
1176 				maNextPageButton.Enable(false);
1177 
1178 			sal_Bool bKiosk = mpPage3PresTypeKioskRB->IsChecked();
1179 			mpPage3PresTimeFT->Enable(bKiosk);
1180 			mpPage3BreakFT->Enable(bKiosk);
1181 			mpPage3PresTimeTMF->Enable(bKiosk);
1182 			mpPage3BreakTMF->Enable(bKiosk);
1183 			mpPage3LogoCB->Enable(bKiosk);
1184 			break;
1185 		}
1186 	}
1187 }
1188 
1189 // ********************************************************************
1190 // UI-Handler
1191 // ********************************************************************
1192 
1193 IMPL_LINK( AssistentDlgImpl, SelectRegionHdl, ListBox *, pLB )
1194 {
1195 	if( pLB == mpPage1RegionLB )
1196 	{
1197 		SelectTemplateRegion( pLB->GetSelectEntry() );
1198 		SetStartType( ST_TEMPLATE );
1199 		mpPage2Medium5RB->Check();
1200 	}
1201 	else
1202 	{
1203 		SelectLayoutRegion( pLB->GetSelectEntry() );
1204 	}
1205 
1206 	return 0;
1207 }
1208 
1209 IMPL_LINK( AssistentDlgImpl, SelectEffectHdl, void*, EMPTYARG )
1210 {
1211 	maEffectPrevTimer.Start();
1212 	return 0;
1213 }
1214 
1215 IMPL_LINK( AssistentDlgImpl, OpenButtonHdl, Button*, pButton )
1216 {
1217     // Clear the selection and forward the call.
1218     mpPage1OpenLB->SetNoSelection();
1219     return mpPage1OpenLB->GetDoubleClickHdl().Call(pButton);
1220 }
1221 
1222 IMPL_LINK( AssistentDlgImpl, EffectPreviewHdl, Button *, EMPTYARG )
1223 {
1224 	if(mbPreview && xDocShell.Is() )
1225 	{
1226 		SfxObjectShell* pShell = xDocShell;
1227 		DrawDocShell* pDocShell = dynamic_cast< DrawDocShell * >(pShell);
1228 		if( pDocShell )
1229 		{
1230 			SdDrawDocument* pDoc = pDocShell->GetDoc();
1231 			if( pDoc )
1232 			{
1233 				SdPage* pPage = pDoc->GetSdPage( mnShowPage, PK_STANDARD );
1234 				if( pPage )
1235 					mpPage3EffectLB->applySelected(pPage);
1236 			}
1237 		}
1238 		maPreview.startPreview();
1239 	}
1240 	return 0;
1241 }
1242 
1243 IMPL_LINK( AssistentDlgImpl, PreviewFlagHdl, CheckBox *, EMPTYARG )
1244 
1245 {
1246 	if( maPreviewFlag.IsChecked() != mbPreview )
1247 	{
1248 		mbPreview = maPreviewFlag.IsChecked();
1249 		UpdatePreview(sal_True);
1250 	}
1251 	return 0;
1252 }
1253 
1254 IMPL_LINK( AssistentDlgImpl, SelectTemplateHdl, ListBox *, EMPTYARG )
1255 {
1256 	SetStartType( ST_TEMPLATE );
1257 	mpPage2Medium5RB->Check();
1258 	mpPage2LayoutLB->SelectEntryPos(0);
1259 	maPrevTimer.Start();
1260 	return 0;
1261 }
1262 
1263 IMPL_LINK( AssistentDlgImpl, SelectLayoutHdl, ListBox *, EMPTYARG )
1264 {
1265 	maPrevTimer.Start();
1266 	return 0;
1267 }
1268 
1269 IMPL_LINK( AssistentDlgImpl, SelectFileHdl, ListBox *, EMPTYARG )
1270 {
1271 	SetStartType( ST_OPEN );
1272 	maPrevTimer.Start();
1273 	return 0;
1274 }
1275 
1276 IMPL_LINK( AssistentDlgImpl, PageSelectHdl, Control *, EMPTYARG )
1277 {
1278 	sal_uInt16 nPage = mpPage5PageListCT->GetSelectedPage();
1279 	if( mnShowPage != nPage )
1280 	{
1281 		mnShowPage = nPage;
1282 		UpdatePreview(sal_False);
1283 	}
1284 
1285 	return 0;
1286 }
1287 
1288 IMPL_LINK( AssistentDlgImpl, UpdatePageListHdl, void *, EMPTYARG )
1289 {
1290 	UpdatePageList();
1291 	return 0;
1292 }
1293 
1294 IMPL_LINK( AssistentDlgImpl, UpdatePreviewHdl, void *, EMPTYARG )
1295 {
1296 	UpdatePreview( sal_True );
1297 	return 0;
1298 }
1299 
1300 IMPL_LINK( AssistentDlgImpl, StartTypeHdl, RadioButton *, pButton )
1301 {
1302 	StartType eType = pButton == mpPage1EmptyRB?ST_EMPTY:pButton == mpPage1TemplateRB?ST_TEMPLATE:ST_OPEN;
1303 
1304 	if(eType == ST_TEMPLATE)
1305         ProvideTemplates();
1306     else if(eType == ST_OPEN)
1307         ScanDocmenu();
1308 
1309 	SetStartType( eType );
1310 
1311 	if(eType == ST_TEMPLATE)
1312 	{
1313 		mpPage1TemplateLB->SelectEntryPos(0);
1314 		mpPage2Medium5RB->Check();
1315 	}
1316 	else if(eType == ST_OPEN)
1317 		mpPage1OpenLB->SelectEntryPos(0);
1318 
1319 	maPrevTimer.Start();
1320 	return 0;
1321 }
1322 
1323 
1324 IMPL_LINK( AssistentDlgImpl, NextPageHdl, PushButton *, EMPTYARG )
1325 {
1326     // When changing from the first to the second page make sure that the
1327     // templates are present.
1328 	if (maAssistentFunc.GetCurrentPage() == 1)
1329         ProvideTemplates();
1330 
1331     // Change to the next page.
1332 	LeavePage();
1333 	maAssistentFunc.NextPage();
1334 	ChangePage();
1335 	return 0;
1336 }
1337 
1338 IMPL_LINK( AssistentDlgImpl, LastPageHdl, PushButton *, EMPTYARG )
1339 {
1340 	LeavePage();
1341 	maAssistentFunc.PreviousPage();
1342 	ChangePage();
1343 	return 0;
1344 }
1345 
1346 IMPL_LINK( AssistentDlgImpl, PresTypeHdl, RadioButton*, EMPTYARG )
1347 {
1348 	if(maDocFile.Len() == 0)
1349 	  {
1350 		maNextPageButton.Enable(false);
1351 	  }
1352 
1353 	sal_Bool bKiosk = mpPage3PresTypeKioskRB->IsChecked();
1354 	mpPage3PresTimeFT->Enable(bKiosk);
1355 	mpPage3BreakFT->Enable(bKiosk);
1356 	mpPage3PresTimeTMF->Enable(bKiosk);
1357 	mpPage3BreakTMF->Enable(bKiosk);
1358 	mpPage3LogoCB->Enable(bKiosk);
1359 	return 0;
1360 }
1361 
1362 IMPL_LINK( AssistentDlgImpl, UpdateUserDataHdl, Edit*, EMPTYARG )
1363 {
1364 	mbUserDataDirty = sal_True;
1365 	String aTopic = mpPage4AskTopicEDT->GetText();
1366 	String aName  = mpPage4AskNameEDT->GetText();
1367 	String aInfo  = mpPage4AskInfoEDT->GetText();
1368 
1369 	if(aTopic.Len() == 0 && aName.Len() == 0 && aInfo.Len() == 0)
1370 		maDocFile.Erase();
1371 
1372 	return 0;
1373 }
1374 
1375 // ********************************************************************
1376 // ********************************************************************
1377 
1378 void AssistentDlgImpl::SelectTemplateRegion( const String& rRegion )
1379 {
1380 	mpPage1TemplateLB->Clear();
1381 	std::vector<TemplateDir*>::iterator	I;
1382 	for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
1383 	{
1384 		TemplateDir * pDir = *I;
1385 		mpTemplateRegion = *I;
1386 		if (pDir->msRegion.Equals( rRegion ) )
1387 		{
1388 			std::vector<TemplateEntry*>::iterator	J;
1389 			for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
1390 				mpPage1TemplateLB->InsertEntry ((*J)->msTitle);
1391 			mpPage1TemplateLB->Update();
1392 			if(GetStartType() == ST_TEMPLATE)
1393 			{
1394 				mpPage1TemplateLB->SelectEntryPos( 0 );
1395 				SelectTemplateHdl(NULL);
1396 			}
1397 			break;
1398 		}
1399 	}
1400 }
1401 
1402 void AssistentDlgImpl::SelectLayoutRegion( const String& rRegion )
1403 {
1404 	mpPage2LayoutLB->Clear();
1405 	mpPage2LayoutLB->InsertEntry(String(SdResId(STR_WIZARD_ORIGINAL)));
1406 	std::vector<TemplateDir*>::iterator	I;
1407 	for (I=maPresentList.begin(); I!=maPresentList.end(); I++)
1408 	{
1409 		TemplateDir * pDir = *I;
1410 		mpLayoutRegion = *I;
1411 
1412 		if (pDir->msRegion.Equals (rRegion))
1413 		{
1414 			std::vector<TemplateEntry*>::iterator	J;
1415 			for (J=pDir->maEntries.begin(); J!=pDir->maEntries.end(); J++)
1416 				mpPage2LayoutLB->InsertEntry ((*J)->msTitle);
1417 			mpPage2LayoutLB->Update();
1418 			break;
1419 		}
1420 	}
1421 }
1422 
1423 void AssistentDlgImpl::UpdateUserData()
1424 {
1425 	String aTopic = mpPage4AskTopicEDT->GetText();
1426 	String aName  = mpPage4AskNameEDT->GetText();
1427 	String aInfo  = mpPage4AskInfoEDT->GetText();
1428 
1429 	SfxObjectShell* pShell = xDocShell;
1430 	DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
1431 	SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
1432 	SdPage* pPage = pDoc?pDoc->GetSdPage(0, PK_STANDARD):NULL;
1433 
1434 	if(pPage && ( aTopic.Len() != 0 || aName.Len() != 0 || aInfo.Len() != 0 ) )
1435 	{
1436 		if( pPage->GetAutoLayout() == AUTOLAYOUT_NONE )
1437 			pPage->SetAutoLayout(AUTOLAYOUT_TITLE, sal_True);
1438 
1439 		SdrTextObj* pObj;
1440 		String aEmptyString;
1441 
1442 		if( aTopic.Len() )
1443 		{
1444 			pObj  = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_TITLE ) );
1445 			if( pObj )
1446 			{
1447 				pPage->SetObjText( pObj, NULL, PRESOBJ_TITLE, aTopic );
1448 				pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_TITLE ), sal_True );
1449 				pObj->SetEmptyPresObj(sal_False);
1450 			}
1451 
1452 		}
1453 
1454 		if ( aName.Len() || aInfo.Len() )
1455 		{
1456 			String aStrTmp( aName );
1457 			if( aName.Len() )
1458 				aStrTmp.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n\n" ) );
1459 			aStrTmp.Append( aInfo );
1460 
1461 			pObj = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_OUTLINE ) );
1462 			if( pObj )
1463 			{
1464 				pPage->SetObjText( pObj, NULL, PRESOBJ_OUTLINE, aStrTmp );
1465 				pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE ), sal_True );
1466 				pObj->SetEmptyPresObj(sal_False);
1467 			}
1468 			else
1469 			{
1470 				pObj = dynamic_cast<SdrTextObj*>( pPage->GetPresObj( PRESOBJ_TEXT ) );
1471 				if( pObj )
1472 				{
1473 					pPage->SetObjText( pObj, NULL, PRESOBJ_TEXT, aStrTmp );
1474 					pObj->NbcSetStyleSheet( pPage->GetStyleSheetForPresObj( PRESOBJ_TEXT ), sal_True );
1475 					pObj->SetEmptyPresObj(sal_False);
1476 				}
1477 			}
1478 		}
1479 	}
1480 
1481 	mbUserDataDirty = sal_False;
1482 }
1483 
1484 void AssistentDlgImpl::UpdatePageList()
1485 {
1486 	if(mbDocPreview || !mbPreview)
1487 		UpdatePreview(sal_False);
1488 	else if(maPageListFile == maDocFile)
1489 		return;
1490 
1491 	maPageListFile = maDocFile;
1492 
1493 	SfxObjectShell* pShell = xDocShell;
1494 	DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
1495 	SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
1496 
1497 	mpPage5PageListCT->Clear();
1498 
1499 	if(pDoc)
1500 		mpPage5PageListCT->Fill(pDoc);
1501 }
1502 
1503 void AssistentDlgImpl::UpdatePreview( sal_Bool bDocPreview )
1504 {
1505     // Guard against multiple concurrent execution to this method caused either
1506     // by calls from different threads or recursion.
1507     ::osl::MutexGuard aGuard (maMutex);
1508     if (mbPreviewUpdating)
1509         return;
1510     mbPreviewUpdating = sal_True;
1511 
1512 	if(!mbPreview && bDocPreview)
1513 	{
1514 		maPreview.Invalidate();
1515 		maPreview.SetObjectShell(0);
1516         mbPreviewUpdating = sal_False;
1517 		return;
1518 	}
1519 
1520 	String aDocFile = GetDocFileName();
1521 	String aLayoutFile = GetLayoutFileName();
1522 	String aEmptyStr;
1523 
1524 	SfxApplication *pSfxApp = SFX_APP();
1525 	sal_uLong lErr;
1526 	sal_Bool bChangeMaster = aLayoutFile.Len() != 0;
1527 
1528 	if( aDocFile.Len() == 0 )
1529 	{
1530 		if( !xDocShell.Is() || maDocFile.Len() != 0 ||
1531 			(maDocFile.Len() == 0 && maLayoutFile.Len() != 0 && aLayoutFile.Len() == 0 ))
1532 		{
1533 			CloseDocShell();
1534 
1535 			DrawDocShell* pNewDocSh;
1536 			xDocShell = pNewDocSh = new DrawDocShell(SFX_CREATE_MODE_STANDARD, sal_False);
1537 			pNewDocSh->DoInitNew(NULL);
1538 			SdDrawDocument* pDoc = pNewDocSh->GetDoc();
1539 			pDoc->CreateFirstPages();
1540 			pDoc->StopWorkStartupDelay();
1541 			mbDocPreview = sal_False;
1542 
1543 			maDocFile = aDocFile;
1544 			mbUserDataDirty = sal_True;
1545 		}
1546 		else
1547 			bChangeMaster = (aLayoutFile.Len() != 0) && (maLayoutFile != aLayoutFile);
1548 	}
1549 	else if( aDocFile == maDocFile && ( mbDocPreview == bDocPreview || bDocPreview ) )
1550 	{
1551 		if( aLayoutFile != maLayoutFile )
1552 		{
1553 			SfxObjectShell* pShell = xDocShell;
1554 			DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
1555             ::svl::IUndoManager* pUndoMgr = pDocShell?pDocShell->GetUndoManager():NULL;
1556 			if(pUndoMgr)
1557 				pUndoMgr->Undo();
1558 			mbUserDataDirty = sal_True;
1559 		}
1560 		else
1561 			bChangeMaster = sal_False;
1562 	}
1563 	else
1564 	{
1565 		CloseDocShell();
1566 
1567 		::Window *pParent = Application::GetDefDialogParent();
1568 		Application::SetDefDialogParent( mpWindow );
1569 
1570 		SfxErrorContext eEC(ERRCTX_SFX_LOADTEMPLATE,mpWindow);
1571 
1572 		SfxItemSet* pSet = new SfxAllItemSet( pSfxApp->GetPool() );
1573 		if(IsOwnFormat(aDocFile))
1574 		{
1575 			pSet->Put( SfxBoolItem( SID_TEMPLATE, sal_True ) );
1576 			if(bDocPreview)
1577 				pSet->Put( SfxBoolItem( SID_PREVIEW, sal_True ) );
1578 			RestorePassword( pSet, aDocFile );
1579             if( (lErr = pSfxApp->LoadTemplate( xDocShell, aDocFile, sal_True, pSet )) != 0 )
1580 				ErrorHandler::HandleError(lErr);
1581 			else
1582 				SavePassword( xDocShell, aDocFile );
1583 		}
1584 		else
1585 		{
1586 			const String aTargetStr( RTL_CONSTASCII_USTRINGPARAM("_default") );
1587 
1588 			SfxRequest aReq( SID_OPENDOC, SFX_CALLMODE_SYNCHRON, SFX_APP()->GetPool() );
1589 			aReq.AppendItem( SfxStringItem( SID_FILE_NAME, aDocFile ));
1590 			aReq.AppendItem( SfxStringItem( SID_REFERER, aEmptyStr ) );
1591 	        aReq.AppendItem( SfxStringItem( SID_TARGETNAME, aTargetStr ) );
1592 			aReq.AppendItem( SfxBoolItem( SID_HIDDEN, sal_True ) );
1593 			aReq.AppendItem( SfxBoolItem( SID_PREVIEW, bDocPreview ) );
1594 
1595             const SfxViewFrameItem* pRet = PTR_CAST( SfxViewFrameItem, SFX_APP()->ExecuteSlot( aReq ) );
1596 
1597 			if ( pRet && pRet->GetFrame() && pRet->GetFrame()->GetObjectShell() )
1598 				xDocShell = pRet->GetFrame()->GetObjectShell();
1599 		}
1600 
1601 
1602 		Application::SetDefDialogParent( pParent );
1603 
1604 		mnShowPage = 0;
1605 		mbDocPreview = bDocPreview;
1606 		maDocFile = aDocFile;
1607 		mbUserDataDirty = sal_True;
1608 	}
1609 
1610 	if(bChangeMaster && (aLayoutFile != maDocFile))
1611 	{
1612 		// Layoutvorlage laden
1613 		SfxObjectShellLock xLayoutDocShell;
1614 		SfxErrorContext eEC(ERRCTX_SFX_LOADTEMPLATE,mpWindow);
1615 		SfxItemSet* pSet = new SfxAllItemSet( pSfxApp->GetPool() );
1616 
1617 		::Window *pParent = Application::GetDefDialogParent();
1618 		Application::SetDefDialogParent( mpWindow );
1619 
1620 		if(IsOwnFormat(aLayoutFile))
1621 		{
1622 			pSet->Put( SfxBoolItem( SID_TEMPLATE, sal_True ) );
1623 			pSet->Put( SfxBoolItem( SID_PREVIEW, sal_True ) );
1624 
1625 			RestorePassword( pSet, aLayoutFile );
1626             if( (lErr = pSfxApp->LoadTemplate( xLayoutDocShell, aLayoutFile, sal_True, pSet )) != 0 )
1627 				ErrorHandler::HandleError(lErr);
1628 			SavePassword( xLayoutDocShell, aLayoutFile );
1629 		}
1630 
1631 		Application::SetDefDialogParent( pParent );
1632 
1633 		// die Implementierung ermitteln
1634 		SfxObjectShell* pShell = xDocShell;
1635 		DrawDocShell* pDocShell = PTR_CAST(DrawDocShell,pShell);
1636 		SdDrawDocument* pDoc = pDocShell?pDocShell->GetDoc():NULL;
1637 
1638 		pShell = xLayoutDocShell;
1639 		pDocShell = PTR_CAST(DrawDocShell,pShell);
1640 		SdDrawDocument* pLayoutDoc = pDocShell?pDocShell->GetDoc():NULL;
1641 
1642 		if( pDoc && pLayoutDoc )
1643 		{
1644 			pDoc->SetMasterPage(0, aEmptyStr, pLayoutDoc, sal_True,  sal_False );
1645 		}
1646 		else
1647 		{
1648 			DBG_ERROR("sd::AssistentDlgImpl::UpdatePreview(), no document for preview?");
1649 		}
1650 
1651 		mbUserDataDirty = sal_True;
1652 	}
1653 	maLayoutFile = aLayoutFile;
1654 
1655 	if(mbUserDataDirty)
1656 		UpdateUserData();
1657 
1658 	if ( !xDocShell.Is() || !mbPreview )
1659 		maPreview.SetObjectShell( 0 );
1660 	else
1661 	{
1662 		maPreview.SetObjectShell( xDocShell, mnShowPage );
1663 	}
1664 
1665     mbPreviewUpdating = sal_False;
1666 }
1667 
1668 void AssistentDlgImpl::SavePassword( SfxObjectShellLock xDoc, const String& rPath )
1669 {
1670 	if(xDoc.Is())
1671 	{
1672 		SfxMedium * pMedium = xDoc->GetMedium();
1673 		if(pMedium && pMedium->IsStorage())
1674 		{
1675 			SfxItemSet * pSet = pMedium->GetItemSet();
1676           const SfxPoolItem *pItem = 0;
1677           if( pSet->GetItemState(SID_PASSWORD, sal_True, &pItem) == SFX_ITEM_SET )
1678           {
1679             //TODO/MBA: testing
1680             String aPass( ((const SfxStringItem*)pItem)->GetValue());
1681             if(aPass.Len() == 0)
1682                 return;
1683 
1684             PasswordEntry* pEntry = maPasswordList.First();
1685             while(pEntry)
1686             {
1687                 if(pEntry->maPath == rPath)
1688                     break;
1689 
1690                 pEntry = maPasswordList.Next();
1691 
1692             }
1693 
1694             if(pEntry == NULL)
1695             {
1696                 pEntry = new PasswordEntry();
1697                 pEntry->maPath = rPath;
1698                 maPasswordList.Insert( pEntry );
1699             }
1700 
1701             if(pEntry)
1702                 pEntry->maPassword = aPass;
1703           }
1704 		}
1705 	}
1706 }
1707 
1708 void AssistentDlgImpl::RestorePassword( SfxItemSet* pSet, const String& rPath )
1709 {
1710 	String aPassword( GetPassword( rPath ) );
1711 
1712 	if(aPassword.Len())
1713 		pSet->Put( SfxStringItem( SID_PASSWORD, aPassword ) );
1714 }
1715 
1716 String AssistentDlgImpl::GetPassword( const String rPath )
1717 {
1718 	PasswordEntry* pEntry = maPasswordList.First();
1719 	while(pEntry)
1720 	{
1721 		if(pEntry->maPath == rPath)
1722 			return pEntry->maPassword;
1723 
1724 		pEntry = maPasswordList.Next();
1725 	}
1726 
1727 	return String();
1728 }
1729 
1730 void AssistentDlgImpl::DeletePassords()
1731 {
1732 	PasswordEntry* pEntry = maPasswordList.First();
1733 	while(pEntry)
1734 	{
1735 		delete pEntry;
1736 		pEntry = maPasswordList.Next();
1737 	}
1738 }
1739 
1740 sal_Bool AssistentDlgImpl::IsOwnFormat( const String& rPath )
1741 {
1742 	INetURLObject	aURL( rPath );
1743 	String			aExt( aURL.GetFileExtension() );
1744 
1745 	DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
1746 
1747 	return !aExt.EqualsIgnoreCaseAscii( "ppt" );
1748 }
1749 
1750 
1751 
1752 
1753 String AssistentDlgImpl::GetUiTextForCommand (const ::rtl::OUString& sCommandURL)
1754 {
1755     String sLabel;
1756     Reference<container::XNameAccess> xUICommandLabels;
1757 
1758     try
1759     {
1760         do
1761         {
1762             if (sCommandURL.getLength() ==  0)
1763                 break;
1764 
1765             // Retrieve popup menu labels
1766             Reference<lang::XMultiServiceFactory> xFactory (
1767                 ::comphelper::getProcessServiceFactory ());
1768             if ( ! xFactory.is())
1769                 break;
1770 
1771             ::rtl::OUString sModuleIdentifier (
1772                 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.PresentationDocument"));
1773             Reference<container::XNameAccess> xNameAccess (
1774                 xFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1775                     "com.sun.star.frame.UICommandDescription"))),
1776                 UNO_QUERY);
1777             if ( ! xNameAccess.is())
1778                 break;
1779             Any a = xNameAccess->getByName(sModuleIdentifier);
1780             a >>= xUICommandLabels;
1781             if ( ! xUICommandLabels.is())
1782                 break;
1783 
1784             ::rtl::OUString sString;
1785             Sequence<beans::PropertyValue> aProperties;
1786             Any aAny (xUICommandLabels->getByName(sCommandURL));
1787             if (aAny >>= aProperties)
1788             {
1789                 sal_Int32 nCount (aProperties.getLength());
1790                 for (sal_Int32 i=0; i<nCount; i++)
1791                 {
1792                     ::rtl::OUString sPropertyName (aProperties[i].Name);
1793                     if (sPropertyName.equalsAscii("Label"))
1794                     {
1795                         aProperties[i].Value >>= sString;
1796                         break;
1797                     }
1798                 }
1799             }
1800             sLabel = sString;
1801         }
1802         while(false);
1803     }
1804     catch (com::sun::star::uno::Exception& rException)
1805     {
1806         (void)rException;
1807     }
1808 
1809     return sLabel;
1810 }
1811 
1812 
1813 
1814 
1815 Image AssistentDlgImpl::GetUiIconForCommand (const ::rtl::OUString& sCommandURL)
1816 {
1817     Image aIcon;
1818     Reference<container::XNameAccess> xUICommandLabels;
1819 
1820     try
1821     {
1822         do
1823         {
1824             if (sCommandURL.getLength() ==  0)
1825                 break;
1826 
1827             // Retrieve popup menu labels
1828             Reference<lang::XMultiServiceFactory> xFactory (
1829                 ::comphelper::getProcessServiceFactory ());
1830             if ( ! xFactory.is())
1831                 break;
1832 
1833             ::rtl::OUString sModuleIdentifier (
1834                 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.PresentationDocument"));
1835 
1836             Reference<com::sun::star::ui::XModuleUIConfigurationManagerSupplier> xSupplier (
1837                 xFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1838                     "com.sun.star.ui.ModuleUIConfigurationManagerSupplier"))),
1839                 UNO_QUERY_THROW);
1840 
1841             Reference<com::sun::star::ui::XUIConfigurationManager> xManager (
1842                 xSupplier->getUIConfigurationManager(sModuleIdentifier));
1843             if ( ! xManager.is())
1844                 break;
1845 
1846             Reference<com::sun::star::ui::XImageManager> xImageManager (
1847                 xManager->getImageManager(),
1848                 UNO_QUERY_THROW);
1849 
1850             Sequence<rtl::OUString> aCommandList(1);
1851             aCommandList[0] = sCommandURL;
1852             Sequence<Reference<graphic::XGraphic> > xIconList (
1853                 xImageManager->getImages(0,aCommandList));
1854             if ( ! xIconList.hasElements())
1855                 break;
1856 
1857             aIcon = Graphic(xIconList[0]).GetBitmapEx();
1858         }
1859         while(false);
1860     }
1861     catch (com::sun::star::uno::Exception& rException)
1862     {
1863         (void)rException;
1864     }
1865 
1866     return aIcon;
1867 }
1868 
1869 
1870 //////////////////////////////////////////////
1871 
1872 AssistentDlg::AssistentDlg(Window* pParent, sal_Bool bAutoPilot) :
1873 	ModalDialog(pParent,SdResId(DLG_ASS))
1874 {
1875 	Link aFinishLink = LINK(this,AssistentDlg, FinishHdl);
1876 	mpImpl = new AssistentDlgImpl( this, aFinishLink, bAutoPilot );
1877 
1878 	//Buttonbelegung
1879 	mpImpl->maFinishButton.SetClickHdl(LINK(this,AssistentDlg,FinishHdl));
1880 
1881 	FreeResource();
1882 }
1883 
1884 IMPL_LINK( AssistentDlg, FinishHdl, OKButton *, EMPTYARG )
1885 {
1886     if( GetStartType() == ST_OPEN )
1887 	{
1888         //if we do not have a file here asked for one before ending the dialog
1889         String aFileToOpen = GetDocPath();
1890 		if(aFileToOpen.Len() == 0)
1891 		{
1892             sfx2::FileDialogHelper aFileDlg( WB_OPEN, ::String::CreateFromAscii("simpress") );
1893 
1894 			if ( aFileDlg.Execute() == ERRCODE_NONE )
1895 				aFileToOpen = aFileDlg.GetPath();
1896             if( aFileToOpen.Len() == 0)
1897                 return 1;
1898             else
1899             {
1900                 //add the selected file to the recent-file-listbox and select the new entry
1901                 //this is necessary for 'GetDocPath()' returning the selected file after end of dialog
1902 
1903                 INetURLObject aURL;
1904                 aURL.SetSmartURL(aFileToOpen);
1905                 mpImpl->maOpenFilesList.push_back (new String (aURL.GetMainURL( INetURLObject::NO_DECODE )));
1906                 sal_uInt16 nNewPos = mpImpl->mpPage1OpenLB->InsertEntry(aURL.getName());
1907                 mpImpl->mpPage1OpenLB->SelectEntryPos(nNewPos);
1908             }
1909 		}
1910     }
1911 
1912 	//Ende
1913 	mpImpl->EndDialog(RET_OK);
1914 	EndDialog(RET_OK);
1915 	return 0;
1916 }
1917 
1918 AssistentDlg::~AssistentDlg()
1919 {
1920 	delete mpImpl;
1921 }
1922 
1923 
1924 SfxObjectShellLock AssistentDlg::GetDocument()
1925 {
1926 	return mpImpl->GetDocument();
1927 }
1928 
1929 OutputType AssistentDlg::GetOutputMedium() const
1930 {
1931 	if(mpImpl->mpPage2Medium1RB->IsChecked())
1932 		return OUTPUT_PRESENTATION;
1933 	else if(mpImpl->mpPage2Medium2RB->IsChecked())
1934 		return OUTPUT_SLIDE;
1935 	else if(mpImpl->mpPage2Medium3RB->IsChecked())
1936 		return OUTPUT_OVERHEAD;
1937 	else if(mpImpl->mpPage2Medium4RB->IsChecked())
1938 		return OUTPUT_PAGE;
1939 	else
1940 		return OUTPUT_ORIGINAL;
1941 }
1942 
1943 sal_Bool AssistentDlg::IsSummary() const
1944 {
1945 	return mpImpl->mpPage5SummaryCB->IsChecked();
1946 }
1947 
1948 StartType AssistentDlg::GetStartType() const
1949 {
1950 	return mpImpl->GetStartType();
1951 }
1952 
1953 String AssistentDlg::GetDocPath() const
1954 {
1955 	return mpImpl->GetDocFileName();
1956 }
1957 
1958 sal_Bool AssistentDlg::GetStartWithFlag() const
1959 {
1960 	return !mpImpl->maStartWithFlag.IsChecked();
1961 }
1962 
1963 sal_Bool AssistentDlg::IsDocEmpty() const
1964 {
1965 	return mpImpl->GetDocFileName().Len() == 0 &&
1966 		   mpImpl->GetLayoutFileName().Len() == 0;
1967 }
1968 
1969 String AssistentDlg::GetPassword()
1970 {
1971 	return mpImpl->GetPassword( mpImpl->maDocFile );
1972 }
1973 
1974 
1975 
1976 
1977 //===== NextButton ============================================================
1978 
1979 NextButton::NextButton (::Window* pParent, const ResId& rResId)
1980     : maNextButton1(pParent, rResId),
1981       maNextButton2(pParent, rResId),
1982       mbIsFirstButtonActive(true)
1983 {
1984     // Hide the unused button.
1985     maNextButton2.Hide();
1986 }
1987 
1988 
1989 
1990 
1991 void NextButton::ForceFocusEventBroadcast (void)
1992 {
1993     // Hide the currently visible button and show and focus the other one.
1994     if (mbIsFirstButtonActive)
1995     {
1996         mbIsFirstButtonActive = false;
1997         maNextButton2.Show();
1998         maNextButton2.GrabFocus();
1999         maNextButton1.Hide();
2000     }
2001     else
2002     {
2003         mbIsFirstButtonActive = true;
2004         maNextButton1.Show();
2005         maNextButton1.GrabFocus();
2006         maNextButton2.Hide();
2007     }
2008 }
2009 
2010 
2011 
2012 
2013 void NextButton::SetClickHdl (const Link& rLink)
2014 {
2015     // Forward the setting of the click handler to the two buttons
2016     // regardless of which one is currently visible.
2017     maNextButton1.SetClickHdl(rLink);
2018     maNextButton2.SetClickHdl(rLink);
2019 }
2020 
2021 
2022 
2023 
2024 bool NextButton::IsEnabled (void)
2025 {
2026     // Because the buttons are both either enabled or disabled, it is
2027     // sufficient to ask one to determine the state.
2028     return maNextButton1.IsEnabled();
2029 }
2030 
2031 
2032 
2033 
2034 void NextButton::Enable (bool bEnable)
2035 {
2036     // Enable or disable both buttons but do not change visibility or focus.
2037     maNextButton1.Enable(bEnable);
2038     maNextButton2.Enable(bEnable);
2039 }
2040