xref: /trunk/main/svx/source/inc/docrecovery.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef _SVX_DOCRECOVERY_HXX
25 #define _SVX_DOCRECOVERY_HXX
26 
27 #include <vcl/tabpage.hxx>
28 #ifndef _SV_TABDIALOG_HXX
29 #include <vcl/tabdlg.hxx>
30 #endif
31 #include <vcl/dialog.hxx>
32 #ifndef _SV_BUTTON_HXX
33 #include <vcl/button.hxx>
34 #endif
35 #include <vcl/fixed.hxx>
36 #include <svtools/svmedit2.hxx>
37 #include <svtools/svtreebx.hxx>
38 #include <svx/simptabl.hxx>
39 
40 #include <cppuhelper/implbase1.hxx>
41 #include <cppuhelper/implbase2.hxx>
42 #include <com/sun/star/task/XStatusIndicatorFactory.hpp>
43 #include <com/sun/star/frame/XStatusListener.hpp>
44 #include <com/sun/star/frame/XDispatch.hpp>
45 #include <com/sun/star/lang/XComponent.hpp>
46 
47 //===============================================
48 // const
49 
50 #define RECOVERY_CMDPART_PROTOCOL                       ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:")
51 
52 #define RECOVERY_CMDPART_DO_PREPARE_EMERGENCY_SAVE      ::rtl::OUString::createFromAscii("/doPrepareEmergencySave"  )
53 #define RECOVERY_CMDPART_DO_EMERGENCY_SAVE              ::rtl::OUString::createFromAscii("/doEmergencySave"         )
54 #define RECOVERY_CMDPART_DO_RECOVERY                    ::rtl::OUString::createFromAscii("/doAutoRecovery"          )
55 #define RECOVERY_CMDPART_DO_CRASHREPORT                 ::rtl::OUString::createFromAscii("/doCrashReport"           )
56 #define RECOVERY_CMDPART_DO_ENTRY_BACKUP                ::rtl::OUString::createFromAscii("/doEntryBackup"           )
57 #define RECOVERY_CMDPART_DO_ENTRY_CLEANUP               ::rtl::OUString::createFromAscii("/doEntryCleanUp"          )
58 
59 #define RECOVERY_CMD_DO_PREPARE_EMERGENCY_SAVE          ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doPrepareEmergencySave")
60 #define RECOVERY_CMD_DO_EMERGENCY_SAVE                  ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doEmergencySave"       )
61 #define RECOVERY_CMD_DO_RECOVERY                        ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doAutoRecovery"        )
62 #define RECOVERY_CMD_DO_CRASHREPORT                     ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doCrashReport"         )
63 #define RECOVERY_CMD_DO_ENTRY_BACKUP                    ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doEntryBackup"         )
64 #define RECOVERY_CMD_DO_ENTRY_CLEANUP                   ::rtl::OUString::createFromAscii("vnd.sun.star.autorecovery:/doEntryCleanUp"        )
65 
66 #define SERVICENAME_PROGRESSFACTORY                     ::rtl::OUString::createFromAscii("com.sun.star.task.StatusIndicatorFactory")
67 #define SERVICENAME_URLTRANSFORMER                      ::rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer"        )
68 #define SERVICENAME_RECOVERYCORE                        ::rtl::OUString::createFromAscii("com.sun.star.frame.AutoRecovery"         )
69 #define SERVICENAME_FOLDERPICKER                        ::rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.FolderPicker"    )
70 #define SERVICENAME_DESKTOP                             ::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop"              )
71 
72 #define PROP_PARENTWINDOW                               ::rtl::OUString::createFromAscii("Window"           )
73 #define PROP_STATUSINDICATOR                            ::rtl::OUString::createFromAscii("StatusIndicator"  )
74 #define PROP_DISPATCHASYNCHRON                          ::rtl::OUString::createFromAscii("DispatchAsynchron")
75 #define PROP_SAVEPATH                                   ::rtl::OUString::createFromAscii("SavePath"         )
76 #define PROP_ENTRYID                                    ::rtl::OUString::createFromAscii("EntryID"          )
77 #define PROP_ALLOWPARENTSHOW                            ::rtl::OUString::createFromAscii("AllowParentShow"  )
78 
79 #define STATEPROP_ID                                    ::rtl::OUString::createFromAscii("ID"           )
80 #define STATEPROP_STATE                                 ::rtl::OUString::createFromAscii("DocumentState")
81 #define STATEPROP_ORGURL                                ::rtl::OUString::createFromAscii("OriginalURL"  )
82 #define STATEPROP_TEMPURL                               ::rtl::OUString::createFromAscii("TempURL"      )
83 #define STATEPROP_FACTORYURL                            ::rtl::OUString::createFromAscii("FactoryURL"   )
84 #define STATEPROP_TEMPLATEURL                           ::rtl::OUString::createFromAscii("TemplateURL"  )
85 #define STATEPROP_TITLE                                 ::rtl::OUString::createFromAscii("Title"        )
86 #define STATEPROP_MODULE                                ::rtl::OUString::createFromAscii("Module"       )
87 
88 #define RECOVERY_OPERATIONSTATE_START                   ::rtl::OUString::createFromAscii("start" )
89 #define RECOVERY_OPERATIONSTATE_STOP                    ::rtl::OUString::createFromAscii("stop"  )
90 #define RECOVERY_OPERATIONSTATE_UPDATE                  ::rtl::OUString::createFromAscii("update")
91 
92 #define DLG_RET_UNKNOWN                                  -1
93 #define DLG_RET_OK                                        1
94 #define DLG_RET_CANCEL                                    0
95 #define DLG_RET_BACK                                    100
96 #define DLG_RET_OK_AUTOLUNCH                            101
97 
98 //===============================================
99 // namespace
100 
101 namespace svx{
102     namespace DocRecovery{
103 
104 #ifdef css
105 #   error "Who uses css? I need it as temp. namespace alias!"
106 #else
107 #   define css ::com::sun::star
108 #endif
109 
110 //===============================================
111 enum EDocStates
112 {
113     /* TEMP STATES */
114 
115     /// default state, if a document was new created or loaded
116     E_UNKNOWN = 0,
117     /// modified against the original file
118     E_MODIFIED = 1,
119     /// an active document can be postponed to be saved later.
120     E_POSTPONED = 2,
121     /// was already handled during one AutoSave/Recovery session.
122     E_HANDLED = 4,
123     /** an action was started (saving/loading) ... Can be interesting later if the process may be was interrupted by an exception. */
124     E_TRY_SAVE = 8,
125     E_TRY_LOAD_BACKUP = 16,
126     E_TRY_LOAD_ORIGINAL = 32,
127 
128     /* FINAL STATES */
129 
130     /// the Auto/Emergency saved document isn't useable any longer
131     E_DAMAGED = 64,
132     /// the Auto/Emergency saved document isn't really up-to-date (some changes can be missing)
133     E_INCOMPLETE = 128,
134     /// the Auto/Emergency saved document was processed successfully
135     E_SUCCEDED = 512
136 };
137 
138 //===============================================
139 enum ERecoveryState
140 {
141     E_SUCCESSFULLY_RECOVERED,
142     E_ORIGINAL_DOCUMENT_RECOVERED,
143     E_RECOVERY_FAILED,
144     E_RECOVERY_IS_IN_PROGRESS,
145     E_NOT_RECOVERED_YET
146 };
147 
148 //===============================================
149 struct TURLInfo
150 {
151     public:
152 
153     /// unique ID, which is specified by the underlying autorecovery core!
154     sal_Int32 ID;
155 
156     /// the full qualified document URL
157     ::rtl::OUString OrgURL;
158 
159     /// the full qualified URL of the temp. file (if it's exists)
160     ::rtl::OUString TempURL;
161 
162     /// a may be existing factory URL (e.g. for untitled documents)
163     ::rtl::OUString FactoryURL;
164 
165     /// may be the document base on a template file !?
166     ::rtl::OUString TemplateURL;
167 
168     /// the pure file name, without path, disc etcpp.
169     ::rtl::OUString DisplayName;
170 
171     /// the application module, where this document was loaded
172     ::rtl::OUString Module;
173 
174     /// state info as e.g. VALID, CORRUPTED, NON EXISTING ...
175     sal_Int32 DocState;
176 
177     /// ui representation for DocState!
178     ERecoveryState RecoveryState;
179 
180     /// standard icon
181     Image StandardImage;
182 
183     /// high contrast icon
184     Image HCImage;
185 
186     public:
187 
TURLInfosvx::DocRecovery::TURLInfo188     TURLInfo()
189         : ID           (-1                 )
190         , DocState     (E_UNKNOWN          )
191         , RecoveryState(E_NOT_RECOVERED_YET)
192     {}
193 };
194 
195 //===============================================
196 typedef ::std::vector< TURLInfo > TURLList;
197 
198 //===============================================
199 class IRecoveryUpdateListener
200 {
201     public:
202 
203         // inform listener about changed items, which should be refreshed
204         virtual void updateItems() = 0;
205 
206         // inform listener about starting of the asynchronous recovery operation
207         virtual void start() = 0;
208 
209         // inform listener about ending of the asynchronous recovery operation
210         virtual void end() = 0;
211 
212         // TODO
213         virtual void stepNext(TURLInfo* pItem) = 0;
214 };
215 
216 //===============================================
217 class RecoveryCore : public ::cppu::WeakImplHelper1< css::frame::XStatusListener >
218 {
219     //-------------------------------------------
220     // types, const
221     public:
222 
223     //-------------------------------------------
224     // member
225     private:
226 
227         /// TODO
228         css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR;
229 
230         /// TODO
231         css::uno::Reference< css::frame::XDispatch > m_xRealCore;
232 
233         /// TODO
234         css::uno::Reference< css::task::XStatusIndicator > m_xProgress;
235 
236         /// TODO
237         TURLList m_lURLs;
238 
239         /// TODO
240         IRecoveryUpdateListener* m_pListener;
241 
242         /** @short  knows the reason, why we listen on our internal m_xRealCore
243                     member.
244 
245             @descr  Because we listen for different operations
246                     on the core dispatch implementation, we must know,
247                     which URL we have to use for deregistration!
248          */
249         sal_Bool m_bListenForSaving;
250 
251     //-------------------------------------------
252     // native interface
253     public:
254 
255         //---------------------------------------
256         /** @short  TODO */
257         RecoveryCore(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR         ,
258                            sal_Bool                                                bUsedForSaving);
259 
260         //---------------------------------------
261         /** @short  TODO */
262         virtual ~RecoveryCore();
263 
264         //---------------------------------------
265         /** @short  TODO */
266         virtual css::uno::Reference< css::lang::XMultiServiceFactory > getSMGR();
267 
268         //---------------------------------------
269         /** @short  TODO */
270         virtual TURLList* getURLListAccess();
271 
272         //---------------------------------------
273         /** @short  TODO */
274         virtual sal_Bool existsBrokenTempEntries();
275         virtual sal_Bool existsNonRecoveredEntries();
276         static sal_Bool isBrokenTempEntry(const TURLInfo& rInfo);
277         virtual void saveBrokenTempEntries(const ::rtl::OUString& sSaveDir);
278         virtual void saveAllTempEntries(const ::rtl::OUString& sSaveDir);
279         virtual void forgetBrokenTempEntries();
280         virtual void forgetAllRecoveryEntries();
281         void forgetBrokenRecoveryEntries();
282 
283         //---------------------------------------
284         /** @short  TODO */
285         virtual void setProgressHandler(const css::uno::Reference< css::task::XStatusIndicator >& xProgress);
286 
287         //---------------------------------------
288         /** @short  TODO */
289         virtual void setUpdateListener(IRecoveryUpdateListener* pListener);
290 
291         //---------------------------------------
292         /** @short  TODO */
293         virtual void doEmergencySavePrepare();
294         virtual void doEmergencySave();
295         virtual void doRecovery();
296 
297         //---------------------------------------
298         /** @short  TODO */
299         static ERecoveryState mapDocState2RecoverState(sal_Int32 eDocState);
300 
301     //-------------------------------------------
302     // uno interface
303     public:
304 
305         // css.frame.XStatusListener
306         virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& aEvent);
307 
308         // css.lang.XEventListener
309         virtual void SAL_CALL disposing(const css::lang::EventObject& aEvent);
310 
311     //-------------------------------------------
312     // helper
313     private:
314 
315         //---------------------------------------
316         /** @short  starts listening on the internal EmergencySave/AutoRecovery core.
317          */
318         void impl_startListening();
319 
320         //---------------------------------------
321         /** @short  stop listening on the internal EmergencySave/AutoRecovery core.
322          */
323         void impl_stopListening();
324 
325         //---------------------------------------
326         /** @short  TODO */
327         css::util::URL impl_getParsedURL(const ::rtl::OUString& sURL);
328 };
329 
330 //===============================================
331 class PluginProgressWindow : public Window
332 {
333     private:
334 
335         css::uno::Reference< css::lang::XComponent > m_xProgress;
336 
337     public:
338 
339         PluginProgressWindow(      Window*                                       pParent  ,
340                              const css::uno::Reference< css::lang::XComponent >& xProgress);
341         ~PluginProgressWindow();
342 };
343 
344 class PluginProgress : public ::cppu::WeakImplHelper2< css::task::XStatusIndicator ,
345                                                        css::lang::XComponent       >
346 {
347 
348     //-------------------------------------------
349     // member
350     private:
351 
352         /** @short  TODO */
353         css::uno::Reference< css::task::XStatusIndicatorFactory > m_xProgressFactory;
354 
355         css::uno::Reference< css::task::XStatusIndicator > m_xProgress;
356 
357         PluginProgressWindow* m_pPlugProgressWindow;
358 
359     //-------------------------------------------
360     // native interface
361     public:
362 
363         //---------------------------------------
364         /** @short  TODO */
365         PluginProgress(      Window*                                                 pParent,
366                        const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR  );
367 
368         //---------------------------------------
369         /** @short  TODO */
370         virtual ~PluginProgress();
371 
372         //---------------------------------------
373         /** @short  TODO */
374         Window* getPlugWindow();
375 
376     //-------------------------------------------
377     // uno interface
378     public:
379 
380         //---------------------------------------
381         // XStatusIndicator
382         virtual void SAL_CALL start(const ::rtl::OUString& sText ,
383                                           sal_Int32        nRange);
384 
385         virtual void SAL_CALL end();
386 
387         virtual void SAL_CALL setText(const ::rtl::OUString& sText);
388 
389         virtual void SAL_CALL setValue(sal_Int32 nValue);
390 
391         virtual void SAL_CALL reset();
392 
393         //---------------------------------------
394         // XComponent
395         virtual void SAL_CALL dispose();
396 
397         virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener >& xListener);
398 
399         virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener);
400 };
401 
402 //===============================================
403 class IExtendedTabPage : public TabPage
404 {
405     //-------------------------------------------
406     // member
407     protected:
408 
409         short m_nResult;
410 
411     //-------------------------------------------
412     // interface
413     public:
414 
IExtendedTabPage(Window * pParent,WinBits nStyle=0)415         IExtendedTabPage( Window* pParent, WinBits nStyle = 0 )
416             : TabPage( pParent, nStyle )
417             , m_nResult(DLG_RET_UNKNOWN)
418         {}
419 
IExtendedTabPage(Window * pParent,const ResId & rResId)420         IExtendedTabPage( Window* pParent, const ResId& rResId )
421             : TabPage( pParent, rResId )
422             , m_nResult(DLG_RET_UNKNOWN)
423         {}
424 
~IExtendedTabPage()425         virtual ~IExtendedTabPage()
426         {}
427 
428         virtual short   execute() = 0;
429         virtual void    setDefButton() = 0;
430 };
431 
432 typedef ::std::vector< IExtendedTabPage* > TTabPageList;
433 
434 //===============================================
435 class TabDialog4Recovery : public TabDialog
436 {
437     //-------------------------------------------
438     // member
439     private:
440 
441         TTabPageList m_lTabPages;
442         TTabPageList::iterator m_pActualPage;
443 
444     //-------------------------------------------
445     // interface
446     public:
447 
448         TabDialog4Recovery(Window* pParent);
449         virtual ~TabDialog4Recovery();
450 
451         virtual void addTabPage(IExtendedTabPage* pPage);
452         virtual short Execute();
453 };
454 
455 //===============================================
456 class SaveDialog : public IExtendedTabPage
457 {
458     //-------------------------------------------
459     // member
460     private:
461 
462         Window          m_aTitleWin;
463         FixedText       m_aTitleFT;
464         FixedLine       m_aTitleFL;
465         FixedText       m_aDescrFT;
466         FixedText       m_aFileListFT;
467         ListBox         m_aFileListLB;
468         FixedLine       m_aBottomFL;
469         OKButton        m_aOkBtn;
470 
471         RecoveryCore*   m_pCore;
472 
473     //-------------------------------------------
474     // interface
475     public:
476 
477         //---------------------------------------
478         /** @short  create all child controls of this dialog.
479 
480             @descr  The dialog isn't shown nor it starts any
481                     action by itself!
482 
483             @param  pParent
484                     can point to a parent window.
485                     If its set to 0, the defmodal-dialog-parent
486                     is used automatically.
487 
488             @param  pCore
489                     provides access to the recovery core service
490                     and the current list of open documents,
491                     which should be shown inside this dialog.
492          */
493         SaveDialog(Window*       pParent,
494                    RecoveryCore* pCore  );
495 
496         //---------------------------------------
497         /** @short  free all controls and used memory. */
498         virtual ~SaveDialog();
499 
500         //---------------------------------------
501         /** @short  TODO*/
502         virtual short   execute();
503 
504         //---------------------------------------
505         /** @short  TODO*/
506         virtual void    setDefButton();
507 
508         DECL_LINK(OKButtonHdl, void*);
509 };
510 
511 //===============================================
512 class SaveProgressDialog : public ModalDialog
513                          , public IRecoveryUpdateListener
514 {
515     //-------------------------------------------
516     // member
517     private:
518 
519         FixedText       m_aHintFT;
520         FixedText       m_aProgrFT;
521         String          m_aProgrBaseTxt;
522         Window          m_aProgrParent;
523 
524         // @short   TODO
525         RecoveryCore* m_pCore;
526 
527         // @short   TODO
528         css::uno::Reference< css::task::XStatusIndicator > m_xProgress;
529 
530     //-------------------------------------------
531     // interface
532     public:
533 
534         //---------------------------------------
535         /** @short  create all child controls of this dialog.
536 
537             @descr  The dialog isn't shown nor it starts any
538                     action by itself!
539 
540             @param  pParent
541                     can point to a parent window.
542                     If its set to 0, the defmodal-dialog-parent
543                     is used automatically.
544 
545             @param  pCore
546                     used to start emergency save.
547          */
548         SaveProgressDialog(Window*       pParent,
549                            RecoveryCore* pCore  );
550 
551         //---------------------------------------
552         /** @short  free all controls and used memory. */
553         virtual ~SaveProgressDialog();
554 
555         //---------------------------------------
556         /** @short  start the emergency save operation. */
557         virtual short Execute();
558 
559         // IRecoveryUpdateListener
560         virtual void updateItems();
561         virtual void stepNext(TURLInfo* pItem);
562         virtual void start();
563         virtual void end();
564 };
565 
566 //===============================================
567 class RecovDocListEntry : public SvLBoxString
568 {
569     //-------------------------------------------
570     // interface
571     private:
572 
573     //-------------------------------------------
574     // interface
575     public:
576 
577         //---------------------------------------
578         /** @short TODO */
579         RecovDocListEntry(      SvLBoxEntry* pEntry,
580                                 sal_uInt16       nFlags,
581                           const String&      sText );
582 
583         //---------------------------------------
584         /** @short TODO */
585         virtual void Paint(const Point&       aPos   ,
586                                  SvLBox&      aDevice,
587                                  sal_uInt16       nFlags ,
588                                  SvLBoxEntry* pEntry );
589 };
590 
591 //===============================================
592 class RecovDocList : public SvxSimpleTable
593 {
594     //-------------------------------------------
595     // member
596     public:
597 
598         Image  m_aGreenCheckImg;
599         Image  m_aYellowCheckImg;
600         Image  m_aRedCrossImg;
601         Image  m_aGreenCheckImgHC;
602         Image  m_aYellowCheckImgHC;
603         Image  m_aRedCrossImgHC;
604 
605         String m_aSuccessRecovStr;
606         String m_aOrigDocRecovStr;
607         String m_aRecovFailedStr;
608         String m_aRecovInProgrStr;
609         String m_aNotRecovYetStr;
610 
611     //-------------------------------------------
612     // interface
613     public:
614 
615         //---------------------------------------
616         /** @short TODO */
617         RecovDocList(      Window* pParent,
618                      const ResId&  rResId );
619 
620         //---------------------------------------
621         /** @short TODO */
622         virtual ~RecovDocList();
623 
624         //---------------------------------------
625         /** @short TODO */
626         virtual void InitEntry(      SvLBoxEntry* pEntry ,
627                                const XubString&   sText  ,
628                                const Image&       aImage1,
629                                const Image&       aImage2,
630                                      SvLBoxButtonKind eButtonKind);
631 };
632 
633 //===============================================
634 class RecoveryDialog : public IExtendedTabPage
635                      , public IRecoveryUpdateListener
636 {
637     //-------------------------------------------
638     // member
639     private:
640         Window          m_aTitleWin;
641         FixedText       m_aTitleFT;
642         FixedLine       m_aTitleFL;
643         FixedText       m_aDescrFT;
644         FixedText       m_aProgressFT;
645         Window          m_aProgrParent;
646         FixedText       m_aFileListFT;
647         RecovDocList    m_aFileListLB;
648         FixedLine       m_aBottomFL;
649         PushButton      m_aNextBtn;
650         CancelButton    m_aCancelBtn;
651         String          m_aNextStr;
652         String          m_aTitleRecoveryInProgress;
653         String          m_aTitleRecoveryReport;
654         String          m_aRecoveryOnlyFinish;
655         String          m_aRecoveryOnlyFinishDescr;
656 
657         PushButton*     m_pDefButton;
658         RecoveryCore*   m_pCore;
659         css::uno::Reference< css::task::XStatusIndicator > m_xProgress;
660         enum EInternalRecoveryState
661         {
662             E_RECOVERY_PREPARED,            // dialog started ... recovery prepared
663             E_RECOVERY_IN_PROGRESS,         // recovery core still in progress
664             E_RECOVERY_CORE_DONE,           // recovery core finished it's task
665             E_RECOVERY_DONE,                // user clicked "next" button
666             E_RECOVERY_CANCELED,            // user clicked "cancel" button
667             E_RECOVERY_CANCELED_BEFORE,     // user clicked "cancel" button before recovery was started
668             E_RECOVERY_CANCELED_AFTERWARDS, // user clicked "cancel" button after reovery was finished
669             E_RECOVERY_HANDLED              // the recovery wizard page was shown already ... and will be shown now again ...
670         };
671         sal_Int32 m_eRecoveryState;
672         sal_Bool  m_bWaitForUser;
673         sal_Bool  m_bWaitForCore;
674         sal_Bool  m_bUserDecideNext;
675         sal_Bool  m_bWasRecoveryStarted;
676         sal_Bool  m_bRecoveryOnly;
677 
678     //-------------------------------------------
679     // member
680     public:
681 
682         //---------------------------------------
683         /** @short TODO */
684         RecoveryDialog(Window*       pParent,
685                        RecoveryCore* pCore  );
686 
687         //---------------------------------------
688         /** @short TODO */
689         virtual ~RecoveryDialog();
690 
691         //---------------------------------------
692         // IRecoveryUpdateListener
693         virtual void updateItems();
694         virtual void stepNext(TURLInfo* pItem);
695         virtual void start();
696         virtual void end();
697 
698         //---------------------------------------
699         /** @short TODO */
700         virtual short execute();
701 
702         //---------------------------------------
703         /** @short  TODO*/
704         virtual void    setDefButton();
705 
706     //-------------------------------------------
707     // helper
708     private:
709 
710         //---------------------------------------
711         /** @short TODO */
712         DECL_LINK(NextButtonHdl, void*);
713         DECL_LINK(CancelButtonHdl, void*);
714 
715         //---------------------------------------
716         /** @short TODO */
717         void impl_refreshDocList();
718 
719         //---------------------------------------
720         /** @short TODO */
721         String impl_getStatusString( const TURLInfo& rInfo ) const;
722 };
723 
724 //===============================================
725 class BrokenRecoveryDialog : public ModalDialog
726 {
727     //-------------------------------------------
728     // member
729     private:
730         FixedText       m_aDescrFT;
731         FixedText       m_aFileListFT;
732         ListBox         m_aFileListLB;
733         FixedText       m_aSaveDirFT;
734         Edit            m_aSaveDirED;
735         PushButton      m_aSaveDirBtn;
736         FixedLine       m_aBottomFL;
737         OKButton        m_aOkBtn;
738         CancelButton    m_aCancelBtn;
739 
740         ::rtl::OUString m_sSavePath;
741         RecoveryCore*   m_pCore;
742         sal_Bool        m_bBeforeRecovery;
743         sal_Bool        m_bExecutionNeeded;
744 
745     //-------------------------------------------
746     // interface
747     public:
748 
749         //---------------------------------------
750         /** @short TODO */
751         BrokenRecoveryDialog(Window*       pParent        ,
752                              RecoveryCore* pCore          ,
753                              sal_Bool      bBeforeRecovery);
754 
755         //---------------------------------------
756         /** @short TODO */
757         virtual ~BrokenRecoveryDialog();
758 
759         //---------------------------------------
760         /** @short TODO */
761         virtual sal_Bool isExecutionNeeded();
762 
763         //---------------------------------------
764         /** @short TODO */
765         virtual ::rtl::OUString getSaveDirURL();
766 
767     //-------------------------------------------
768     // helper
769     private:
770 
771         //---------------------------------------
772         /** @short TODO */
773         void impl_refresh();
774 
775         //---------------------------------------
776         /** @short TODO */
777         DECL_LINK(SaveButtonHdl, void*);
778 
779         //---------------------------------------
780         /** @short TODO */
781         DECL_LINK(OkButtonHdl, void*);
782 
783         //---------------------------------------
784         /** @short TODO */
785         DECL_LINK(CancelButtonHdl, void*);
786 
787         //---------------------------------------
788         /** @short TODO */
789         void impl_askForSavePath();
790 };
791 
792 
793 
794         class ErrorRepWelcomeDialog : public IExtendedTabPage
795         {
796         private:
797             Window              maTitleWin;
798             FixedText           maTitleFT;
799             FixedLine           maTitleFL;
800             FixedText           maDescrFT;
801 
802             FixedLine           maBottomFL;
803             PushButton          maPrevBtn;
804             OKButton            maNextBtn;
805             CancelButton        maCancelBtn;
806 
807             DECL_LINK(          PrevBtnHdl, void* );
808             DECL_LINK(          NextBtnHdl, void* );
809             DECL_LINK(          CancelBtnHdl, void* );
810         public:
811                                 ErrorRepWelcomeDialog( Window* _pParent, sal_Bool _bAllowBack = sal_True );
812             virtual             ~ErrorRepWelcomeDialog();
813         /** @short  TODO*/
814         virtual short execute();
815 
816         //---------------------------------------
817         /** @short  TODO*/
818         virtual void    setDefButton();
819         };
820 
821         struct ErrorRepParams
822         {
ErrorRepParamssvx::DocRecovery::ErrorRepParams823             ErrorRepParams()
824 #ifdef WNT
825                 : miHTTPConnectionType( 0 )
826 #else
827                 : miHTTPConnectionType( 1 )
828 #endif
829                 , mbAllowContact( false )
830             {}
831 
832             String              maHTTPProxyServer;
833             String              maHTTPProxyPort;
834             int                 miHTTPConnectionType;
835             bool                mbAllowContact;
836             String              maReturnAddress;
837             String              maSubject;
838             String              maBody;
839         };
840 
841         class ErrorDescriptionEdit : public MultiLineEdit
842         {
843         private:
844                         DECL_LINK( ModifyHdl, void* );
845 
846         public:
847                         ErrorDescriptionEdit( Window* pParent, const ResId& rResId );
848             virtual     ~ErrorDescriptionEdit();
849         };
850 
851         class ErrorRepSendDialog : public IExtendedTabPage
852         {
853         private:
854             Window              maTitleWin;
855             FixedText           maTitleFT;
856             FixedLine           maTitleFL;
857             FixedText           maDescrFT;
858 
859             FixedText           maDocTypeFT;
860             Edit                maDocTypeED;
861             FixedText           maUsingFT;
862             ErrorDescriptionEdit maUsingML;
863             PushButton          maShowRepBtn;
864             PushButton          maOptBtn;
865             CheckBox            maContactCB;
866             FixedText           maEMailAddrFT;
867             Edit                maEMailAddrED;
868 
869             FixedLine           maBottomFL;
870             PushButton          maPrevBtn;
871             OKButton            maNextBtn;
872             CancelButton        maCancelBtn;
873 
874             ErrorRepParams      maParams;
875 
876             DECL_LINK(          ShowRepBtnHdl, void* );
877             DECL_LINK(          OptBtnHdl, void* );
878             DECL_LINK(          ContactCBHdl, void* );
879             DECL_LINK(          PrevBtnHdl, void* );
880             DECL_LINK(          SendBtnHdl, void* );
881             DECL_LINK(          CancelBtnHdl, void* );
882 
883             void                initControls();
884 
885         public:
886                                 ErrorRepSendDialog( Window* _pParent );
887             virtual             ~ErrorRepSendDialog();
888 
889             String              GetDocType( void ) const;
890             String              GetUsing( void ) const;
891             bool                IsContactAllowed( void ) const;
892             String              GetEMailAddress( void ) const;
893 
894             bool                ReadParams();
895             bool                SaveParams();
896             bool                SendReport();
897 
898             /** @short  TODO*/
899             virtual short execute();
900 
901             //---------------------------------------
902             /** @short  TODO*/
903             virtual void    setDefButton();
904         };
905 
906         class ErrorRepOptionsDialog : public ModalDialog
907         {
908         private:
909             FixedLine           maProxyFL;
910             RadioButton         maSystemBtn;
911             RadioButton         maDirectBtn;
912             RadioButton         maManualBtn;
913             FixedText           maProxyServerFT;
914             Edit                maProxyServerEd;
915             FixedText           maProxyPortFT;
916             Edit                maProxyPortEd;
917             FixedText           maDescriptionFT;
918             FixedLine           maButtonsFL;
919             OKButton            maOKBtn;
920             CancelButton        maCancelBtn;
921 
922             ErrorRepParams&     mrParams;
923 
924             DECL_LINK(          CancelBtnHdl, void* );
925             DECL_LINK(          OKBtnHdl, void * );
926             DECL_LINK(          ManualBtnHdl, void * );
927 
928         public:
929                                 ErrorRepOptionsDialog( Window* _pParent, ErrorRepParams& rParams );
930             virtual             ~ErrorRepOptionsDialog();
931         };
932 
933         class ErrorRepEdit : public ExtMultiLineEdit
934         {
935         public:
936                         ErrorRepEdit( Window* pParent, const ResId& rResId );
937             virtual     ~ErrorRepEdit();
938         };
939 
940         class ErrorRepPreviewDialog : public ModalDialog
941         {
942         private:
943             ErrorRepEdit        maContentML;
944             OKButton            maOKBtn;
945 
946             long                mnMinHeight;
947 
948         public:
949                                 ErrorRepPreviewDialog( Window* _pParent );
950             virtual             ~ErrorRepPreviewDialog();
951 
952             virtual void        Resize();
953         };
954     }   // namespace DocRecovery
955 }   // namespace svx
956 
957 #undef css
958 
959 #endif
960