xref: /AOO41X/main/sd/source/ui/dlg/dlgass.cxx (revision 79aad27f7f29270c03e208e3d687e8e3850af11d)
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 
InterpolateFixedBitmap(FixedBitmap * pBitmap)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 primarly 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 
AssistentDlgImpl(::Window * pWindow,const Link & rFinishLink,sal_Bool bAutoPilot)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 
~AssistentDlgImpl()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 
CloseDocShell()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 
EndDialog(long)773 void AssistentDlgImpl::EndDialog( long )
774 {
775     mpWindow = NULL;
776 }
777 
778 
779 
780 
ScanDocmenu(void)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 
ProvideTemplates(void)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 
TemplateScanDone(std::vector<TemplateDir * > & rTemplateFolder)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 
SetStartType(StartType eType)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 
GetStartType()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 
GetDocFileName()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 
GetLayoutFileName()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 
GetDocument()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 
LeavePage()1102 void AssistentDlgImpl::LeavePage()
1103 {
1104     int nPage = maAssistentFunc.GetCurrentPage();
1105 
1106     if( nPage == 4 && mbUserDataDirty )
1107         maPrevTimer.Start();
1108 }
1109 
ChangePage()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 
UpdatePage()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 
IMPL_LINK(AssistentDlgImpl,SelectRegionHdl,ListBox *,pLB)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 
IMPL_LINK(AssistentDlgImpl,SelectEffectHdl,void *,EMPTYARG)1209 IMPL_LINK( AssistentDlgImpl, SelectEffectHdl, void*, EMPTYARG )
1210 {
1211     maEffectPrevTimer.Start();
1212     return 0;
1213 }
1214 
IMPL_LINK(AssistentDlgImpl,OpenButtonHdl,Button *,pButton)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 
IMPL_LINK(AssistentDlgImpl,EffectPreviewHdl,Button *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,PreviewFlagHdl,CheckBox *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,SelectTemplateHdl,ListBox *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,SelectLayoutHdl,ListBox *,EMPTYARG)1263 IMPL_LINK( AssistentDlgImpl, SelectLayoutHdl, ListBox *, EMPTYARG )
1264 {
1265     maPrevTimer.Start();
1266     return 0;
1267 }
1268 
IMPL_LINK(AssistentDlgImpl,SelectFileHdl,ListBox *,EMPTYARG)1269 IMPL_LINK( AssistentDlgImpl, SelectFileHdl, ListBox *, EMPTYARG )
1270 {
1271     SetStartType( ST_OPEN );
1272     maPrevTimer.Start();
1273     return 0;
1274 }
1275 
IMPL_LINK(AssistentDlgImpl,PageSelectHdl,Control *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,UpdatePageListHdl,void *,EMPTYARG)1288 IMPL_LINK( AssistentDlgImpl, UpdatePageListHdl, void *, EMPTYARG )
1289 {
1290     UpdatePageList();
1291     return 0;
1292 }
1293 
IMPL_LINK(AssistentDlgImpl,UpdatePreviewHdl,void *,EMPTYARG)1294 IMPL_LINK( AssistentDlgImpl, UpdatePreviewHdl, void *, EMPTYARG )
1295 {
1296     UpdatePreview( sal_True );
1297     return 0;
1298 }
1299 
IMPL_LINK(AssistentDlgImpl,StartTypeHdl,RadioButton *,pButton)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 
IMPL_LINK(AssistentDlgImpl,NextPageHdl,PushButton *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,LastPageHdl,PushButton *,EMPTYARG)1338 IMPL_LINK( AssistentDlgImpl, LastPageHdl, PushButton *, EMPTYARG )
1339 {
1340     LeavePage();
1341     maAssistentFunc.PreviousPage();
1342     ChangePage();
1343     return 0;
1344 }
1345 
IMPL_LINK(AssistentDlgImpl,PresTypeHdl,RadioButton *,EMPTYARG)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 
IMPL_LINK(AssistentDlgImpl,UpdateUserDataHdl,Edit *,EMPTYARG)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 
SelectTemplateRegion(const String & rRegion)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 
SelectLayoutRegion(const String & rRegion)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 
UpdateUserData()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 
UpdatePageList()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 
UpdatePreview(sal_Bool bDocPreview)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 
SavePassword(SfxObjectShellLock xDoc,const String & rPath)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 
RestorePassword(SfxItemSet * pSet,const String & rPath)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 
GetPassword(const String rPath)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 
DeletePassords()1730 void AssistentDlgImpl::DeletePassords()
1731 {
1732     PasswordEntry* pEntry = maPasswordList.First();
1733     while(pEntry)
1734     {
1735         delete pEntry;
1736         pEntry = maPasswordList.Next();
1737     }
1738 }
1739 
IsOwnFormat(const String & rPath)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 
GetUiTextForCommand(const::rtl::OUString & sCommandURL)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 
GetUiIconForCommand(const::rtl::OUString & sCommandURL)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 
AssistentDlg(Window * pParent,sal_Bool bAutoPilot)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 
IMPL_LINK(AssistentDlg,FinishHdl,OKButton *,EMPTYARG)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 
~AssistentDlg()1918 AssistentDlg::~AssistentDlg()
1919 {
1920     delete mpImpl;
1921 }
1922 
1923 
GetDocument()1924 SfxObjectShellLock AssistentDlg::GetDocument()
1925 {
1926     return mpImpl->GetDocument();
1927 }
1928 
GetOutputMedium() const1929 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 
IsSummary() const1943 sal_Bool AssistentDlg::IsSummary() const
1944 {
1945     return mpImpl->mpPage5SummaryCB->IsChecked();
1946 }
1947 
GetStartType() const1948 StartType AssistentDlg::GetStartType() const
1949 {
1950     return mpImpl->GetStartType();
1951 }
1952 
GetDocPath() const1953 String AssistentDlg::GetDocPath() const
1954 {
1955     return mpImpl->GetDocFileName();
1956 }
1957 
GetStartWithFlag() const1958 sal_Bool AssistentDlg::GetStartWithFlag() const
1959 {
1960     return !mpImpl->maStartWithFlag.IsChecked();
1961 }
1962 
IsDocEmpty() const1963 sal_Bool AssistentDlg::IsDocEmpty() const
1964 {
1965     return mpImpl->GetDocFileName().Len() == 0 &&
1966            mpImpl->GetLayoutFileName().Len() == 0;
1967 }
1968 
GetPassword()1969 String AssistentDlg::GetPassword()
1970 {
1971     return mpImpl->GetPassword( mpImpl->maDocFile );
1972 }
1973 
1974 
1975 
1976 
1977 //===== NextButton ============================================================
1978 
NextButton(::Window * pParent,const ResId & rResId)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 
ForceFocusEventBroadcast(void)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 
SetClickHdl(const Link & rLink)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 
IsEnabled(void)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 
Enable(bool bEnable)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