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