21 #include <svx/strings.hrc>
22 #include <bitmaps.hlst>
32 #include <com/sun/star/util/URL.hpp>
33 #include <com/sun/star/util/XURLTransformer.hpp>
34 #include <com/sun/star/frame/theAutoRecovery.hpp>
35 #include <com/sun/star/ui/dialogs/FolderPicker.hpp>
36 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
37 #include <com/sun/star/util/URLTransformer.hpp>
38 #include <osl/file.hxx>
44 using namespace ::
osl;
50 , m_bListenForSaving(bUsedForSaving)
101 css::uno::Sequence< css::beans::PropertyValue > lCopyArgs(3);
103 lCopyArgs[0].Value <<=
false;
105 lCopyArgs[1].Value <<= rPath;
119 lCopyArgs[2].Value <<= rInfo.ID;
135 css::uno::Sequence< css::beans::PropertyValue > lCopyArgs(3);
137 lCopyArgs[0].Value <<=
false;
139 lCopyArgs[1].Value <<= rPath;
150 if (rInfo.TempURL.isEmpty())
153 lCopyArgs[2].Value <<= rInfo.ID;
165 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
167 lRemoveArgs[0].Value <<=
false;
181 lRemoveArgs[1].Value <<= rInfo.ID;
193 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
195 lRemoveArgs[0].Value <<=
false;
206 lRemoveArgs[1].Value <<= rInfo.ID;
218 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
220 lRemoveArgs[0].Value <<=
false;
234 lRemoveArgs[1].Value <<= rInfo.ID;
259 css::uno::Sequence< css::beans::PropertyValue > lArgs(1);
261 lArgs[0].Value <<=
false;
274 css::uno::Sequence< css::beans::PropertyValue > lArgs(2);
278 lArgs[1].Value <<=
true;
291 css::uno::Sequence< css::beans::PropertyValue > lArgs(2);
295 lArgs[1].Value <<=
true;
367 if (aNew.
OrgURL.isEmpty()) {
383 if (aOld.ID == aNew.
ID)
399 OUString sURL = aNew.
OrgURL;
415 m_lURLs.push_back(aNew);
440 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
441 xParser->parseStrict(aURL);
445 m_xRealCore->addStatusListener(static_cast< css::frame::XStatusListener* >(
this), aURL);
460 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
461 xParser->parseStrict(aURL);
463 m_xRealCore->removeStatusListener(static_cast< css::frame::XStatusListener* >(
this), aURL);
471 aURL.Complete = sURL;
473 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
474 xParser->parseStrict(aURL);
480 : m_pProgressBar(pProgressBar)
534 : GenericDialogController(pParent,
"svx/ui/docrecoverysavedialog.ui",
"DocRecoverySaveDialog")
536 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
537 , m_xOkBtn(m_xBuilder->weld_button(
"ok"))
554 m_xFileListLB->append(
"", rInfo.DisplayName, rInfo.StandardImageId);
566 short nResult = xProgress->run();
578 : GenericDialogController(pParent,
"svx/ui/docrecoveryprogressdialog.ui",
"DocRecoveryProgressDialog")
580 , m_xProgressBar(m_xBuilder->weld_progress_bar(
"progress"))
588 css::uno::Reference<css::lang::XComponent> xComp(
m_xProgress, css::uno::UNO_QUERY);
600 short nRet = DialogController::run();
627 VclMessageType::Question, VclButtonsType::YesNo,
SvxResId(pRes)));
635 : GenericDialogController(pParent,
"svx/ui/docrecoveryrecoverdialog.ui",
"DocRecoveryRecoverDialog")
636 , m_aTitleRecoveryInProgress(
SvxResId(RID_SVXSTR_RECOVERY_INPROGRESS))
637 , m_aRecoveryOnlyFinish (
SvxResId(RID_SVXSTR_RECOVERYONLY_FINISH))
638 , m_aRecoveryOnlyFinishDescr(
SvxResId(RID_SVXSTR_RECOVERYONLY_FINISH_DESCR))
641 , m_bWaitForCore(false)
642 , m_bWasRecoveryStarted(false)
643 , m_aSuccessRecovStr(
SvxResId(RID_SVXSTR_SUCCESSRECOV))
644 , m_aOrigDocRecovStr(
SvxResId(RID_SVXSTR_ORIGDOCRECOV))
645 , m_aRecovFailedStr(
SvxResId(RID_SVXSTR_RECOVFAILED))
646 , m_aRecovInProgrStr(
SvxResId(RID_SVXSTR_RECOVINPROGR))
647 , m_aNotRecovYetStr(
SvxResId(RID_SVXSTR_NOTRECOVYET))
648 , m_xDescrFT(m_xBuilder->weld_label(
"desc"))
649 , m_xProgressBar(m_xBuilder->weld_progress_bar(
"progress"))
650 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
651 , m_xNextBtn(m_xBuilder->weld_button(
"next"))
652 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
654 const auto nWidth =
m_xFileListLB->get_approximate_digit_width() * 70;
659 std::vector<int> aWidths;
660 aWidths.push_back(
m_xFileListLB->get_checkbox_column_width());
661 aWidths.push_back(60 * nWidth / 100);
662 aWidths.push_back(
m_xFileListLB->get_checkbox_column_width());
675 m_xFileListLB->set_id(
i, OUString::number(reinterpret_cast<sal_IntPtr>(&rInfo)));
689 css::uno::Reference<css::lang::XComponent> xComp(
m_xProgress, css::uno::UNO_QUERY);
743 if (aBrokenRecoveryDialog.isExecutionNeeded())
745 nRet = aBrokenRecoveryDialog.run();
746 sSaveDir = aBrokenRecoveryDialog.getSaveDirURL();
814 if (aBrokenRecoveryDialog.isExecutionNeeded())
816 nRet = aBrokenRecoveryDialog.run();
817 sSaveDir = aBrokenRecoveryDialog.getSaveDirURL();
858 OSL_FAIL(
"Should never be reached!");
865 for (
int i = 0;
i < c; ++
i)
873 if (!sStatus.isEmpty())
881 for (
int i=0;
i < c; ++
i)
884 if (pInfo->
ID != pItem->
ID)
900 switch (m_eRecoveryState)
920 switch (m_eRecoveryState)
973 sStatus = RID_SVXBMP_GREENCHECK;
976 sStatus = RID_SVXBMP_YELLOWCHECK;
979 sStatus = RID_SVXBMP_REDCROSS;
989 bool bBeforeRecovery)
990 : GenericDialogController(pParent,
"svx/ui/docrecoverybrokendialog.ui",
"DocRecoveryBrokenDialog")
992 , m_bBeforeRecovery(bBeforeRecovery)
993 , m_bExecutionNeeded(false)
994 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
995 , m_xSaveDirED(m_xBuilder->weld_entry(
"savedir"))
996 , m_xSaveDirBtn(m_xBuilder->weld_button(
"change"))
997 , m_xOkBtn(m_xBuilder->weld_button(
"ok"))
998 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
1021 for (
const TURLInfo& rInfo : rURLList)
1027 if (rInfo.TempURL.isEmpty())
1040 m_xFileListLB->append(OUString::number(reinterpret_cast<sal_IntPtr>(&rInfo)), rInfo.DisplayName, rInfo.StandardImageId);
1060 osl::FileBase::getFileURLFromSystemPath( sPhysicalPath, sURL );
1062 while (m_sSavePath.isEmpty())
1063 impl_askForSavePath();
1075 impl_askForSavePath();
1080 css::uno::Reference< css::ui::dialogs::XFolderPicker2 > xFolderPicker =
1085 short nRet = xFolderPicker->execute();
1086 if (nRet == css::ui::dialogs::ExecutableDialogResults::OK)
1090 osl::FileBase::getSystemPathFromFileURL(
m_sSavePath, sPath);
#define LINK(Instance, Class, Member)
std::shared_ptr< weld::Dialog > m_xDialog
SaveDialog(weld::Window *pParent, RecoveryCore *pCore)
create all child controls of this dialog.
virtual ~RecoveryCore() override
TODO.
virtual void stepNext(TURLInfo *pItem) override
OUString m_aRecoveryOnlyFinish
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent &aEvent) override
#define RECOVERY_CMD_DO_ENTRY_BACKUP
RecoveryDialog(weld::Window *pParent, RecoveryCore *pCore)
TODO.
OUString OrgURL
the full qualified document URL
EDocStates DocState
state info as e.g. VALID, CORRUPTED, NON EXISTING ...
virtual void SAL_CALL setText(const OUString &sText) override
virtual void updateItems()=0
std::unique_ptr< weld::Button > m_xSaveDirBtn
void saveAllTempEntries(const OUString &sSaveDir)
IMPL_LINK_NOARG(SaveDialog, OKButtonHdl, weld::Button &, void)
virtual void updateItems() override
OUString Module
the application module, where this document was loaded
virtual ~PluginProgress() override
weld::ProgressBar * m_pProgressBar
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
TODO.
virtual void SAL_CALL setValue(sal_Int32 nValue) override
OUString StandardImageId
standard icon
virtual ~SaveDialog() override
virtual void SAL_CALL start(const OUString &sText, sal_Int32 nRange) override
#define RECOVERY_OPERATIONSTATE_UPDATE
#define DLG_RET_OK_AUTOLUNCH
bool m_bWasRecoveryStarted
void saveBrokenTempEntries(const OUString &sSaveDir)
OUString SvxResId(const char *pId)
static ERecoveryState mapDocState2RecoverState(EDocStates eDocState)
TODO.
virtual void SAL_CALL disposing(const css::lang::EventObject &aEvent) override
#define STATEPROP_FACTORYURL
::std::vector< TURLInfo > TURLList
void doEmergencySavePrepare()
TODO.
virtual void stepNext(TURLInfo *pItem) override
virtual void SAL_CALL end() override
std::unique_ptr< weld::Button > m_xCancelBtn
OUString impl_getStatusString(const TURLInfo &rInfo) const
#define STATEPROP_TEMPLATEURL
virtual ~RecoveryDialog() override
std::unique_ptr< weld::TreeView > m_xFileListLB
virtual void SAL_CALL dispose() override
sal_Int32 ID
unique ID, which is specified by the underlying autorecovery core!
RecoveryCore(const css::uno::Reference< css::uno::XComponentContext > &rxContext, bool bUsedForSaving)
TODO.
#define STATEPROP_TEMPURL
std::unique_ptr< weld::Entry > m_xSaveDirED
std::unique_ptr< weld::ProgressBar > m_xProgressBar
std::unique_ptr< weld::ProgressBar > m_xProgressBar
TValueType getUnpackedValueOrDefault(const OUString &sKey, const TValueType &aDefault) const
css::uno::Reference< css::uno::XComponentContext > m_xContext
TODO.
OUString FactoryURL
a may be existing factory URL (e.g. for untitled documents)
OUString m_aRecovFailedStr
OUString m_aOrigDocRecovStr
OUString getName(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true, DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
virtual void updateItems() override
const OUString & getSaveDirURL() const
TODO.
OUString TemplateURL
may be the document base on a template file !?
sal_Int32 m_eRecoveryState
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
TODO.
ERecoveryState RecoveryState
ui representation for DocState!
void forgetBrokenRecoveryEntries()
virtual void stepNext(TURLInfo *pItem)=0
SaveProgressDialog(weld::Window *pParent, RecoveryCore *pCore)
create all child controls of this dialog.
std::unique_ptr< weld::Button > m_xNextBtn
static bool isBrokenTempEntry(const TURLInfo &rInfo)
TODO.
bool const m_bBeforeRecovery
void impl_startListening()
starts listening on the internal EmergencySave/AutoRecovery core.
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
virtual ~BrokenRecoveryDialog() override
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
#define RECOVERY_CMD_DO_PREPARE_EMERGENCY_SAVE
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool isExecutionNeeded() const
TODO.
void setUpdateListener(IRecoveryUpdateListener *pListener)
TODO.
const OUString & GetWorkPath() const
virtual void set_text(const OUString &rText)=0
OUString m_aRecoveryOnlyFinishDescr
#define PROP_DISPATCHASYNCHRON
BrokenRecoveryDialog(weld::Window *pParent, RecoveryCore *pCore, bool bBeforeRecovery)
TODO.
OUString m_aSuccessRecovStr
static short impl_askUserForWizardCancel(weld::Widget *pParent, const char *pRes)
virtual short run() override
start the emergency save operation.
virtual ~SaveProgressDialog() override
#define PROP_STATUSINDICATOR
css::util::URL impl_getParsedURL(const OUString &sURL)
TODO.
std::unique_ptr< weld::Button > m_xCancelBtn
OUString m_aNotRecovYetStr
OUString m_aRecovInProgrStr
OString strip(const OString &rIn, char c)
void forgetAllRecoveryEntries()
#define RECOVERY_CMD_DO_EMERGENCY_SAVE
PluginProgress(weld::ProgressBar *pProgressBar)
the Auto/Emergency saved document is not really up-to-date (some changes can be missing) ...
Reference< XExecutableDialog > m_xDialog
an action was started (saving/loading) ...
virtual void end() override
void impl_askForSavePath()
TODO.
OUString TempURL
the full qualified URL of the temp. file (if it's exists)
#define RECOVERY_CMD_DO_RECOVERY
void forgetBrokenTempEntries()
IRecoveryUpdateListener * m_pListener
TODO.
std::unique_ptr< weld::Button > m_xOkBtn
std::unique_ptr< weld::Button > m_xOkBtn
#define RECOVERY_OPERATIONSTATE_START
#define RECOVERY_OPERATIONSTATE_STOP
if(!pCandidateA->getEnd().equal(pCandidateB->getStart()))
std::unique_ptr< weld::Label > m_xDescrFT
OUString m_aTitleRecoveryInProgress
Reference< XComponentContext > m_xContext
static OUString impl_getStatusImage(const TURLInfo &rInfo)
virtual void set_percentage(int value)=0
std::unique_ptr< weld::TreeView > m_xFileListLB
OUString DisplayName
the pure file name, without path, disc etcpp.
virtual void SAL_CALL reset() override
the Auto/Emergency saved document was processed successfully
std::unique_ptr< weld::TreeView > m_xFileListLB
TURLList & getURLListAccess()
TODO.
void impl_stopListening()
stop listening on the internal EmergencySave/AutoRecovery core.
bool m_bListenForSaving
knows the reason, why we listen on our internal m_xRealCore member.
the Auto/Emergency saved document isn't usable any longer
virtual void end() override
::rtl::Reference< comphelper::OPropertyChangeMultiplexer > m_pListener
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
#define RECOVERY_CMD_DO_ENTRY_CLEANUP
void setProgressHandler(const css::uno::Reference< css::task::XStatusIndicator > &xProgress)
TODO.
css::uno::Reference< css::frame::XDispatch > m_xRealCore
TODO.