21#include <svx/strings.hrc>
22#include <bitmaps.hlst>
35#include <com/sun/star/util/URL.hpp>
36#include <com/sun/star/util/XURLTransformer.hpp>
37#include <com/sun/star/frame/theAutoRecovery.hpp>
38#include <com/sun/star/ui/dialogs/XFolderPicker2.hpp>
39#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
40#include <com/sun/star/util/URLTransformer.hpp>
41#include <osl/file.hxx>
53 , m_bListenForSaving(bUsedForSaving)
104 css::uno::Sequence< css::beans::PropertyValue > lCopyArgs(3);
105 auto plCopyArgs = lCopyArgs.getArray();
107 plCopyArgs[0].Value <<=
false;
109 plCopyArgs[1].Value <<= rPath;
123 plCopyArgs[2].Value <<= rInfo.ID;
139 css::uno::Sequence< css::beans::PropertyValue > lCopyArgs(3);
140 auto plCopyArgs = lCopyArgs.getArray();
142 plCopyArgs[0].Value <<=
false;
144 plCopyArgs[1].Value <<= rPath;
155 if (rInfo.TempURL.isEmpty())
158 plCopyArgs[2].Value <<= rInfo.ID;
170 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
171 auto plRemoveArgs = lRemoveArgs.getArray();
173 plRemoveArgs[0].Value <<=
false;
187 plRemoveArgs[1].Value <<= rInfo.ID;
199 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
200 auto plRemoveArgs = lRemoveArgs.getArray();
202 plRemoveArgs[0].Value <<=
false;
213 plRemoveArgs[1].Value <<= rInfo.ID;
225 css::uno::Sequence< css::beans::PropertyValue > lRemoveArgs(2);
226 auto plRemoveArgs = lRemoveArgs.getArray();
228 plRemoveArgs[0].Value <<=
false;
242 plRemoveArgs[1].Value <<= rInfo.ID;
281 css::uno::Sequence< css::beans::PropertyValue > lArgs{
297 css::uno::Sequence< css::beans::PropertyValue > lArgs{
372 if (aNew.
OrgURL.isEmpty()) {
388 if (aOld.ID == aNew.
ID)
404 OUString sURL = aNew.
OrgURL;
445 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
446 xParser->parseStrict(
aURL);
450 m_xRealCore->addStatusListener(
static_cast< css::frame::XStatusListener*
>(
this),
aURL);
465 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
466 xParser->parseStrict(
aURL);
468 m_xRealCore->removeStatusListener(
static_cast< css::frame::XStatusListener*
>(
this),
aURL);
476 aURL.Complete = sURL;
478 css::uno::Reference< css::util::XURLTransformer > xParser(css::util::URLTransformer::create(
m_xContext));
479 xParser->parseStrict(
aURL);
485 : m_pProgressBar(pProgressBar)
539 : GenericDialogController(pParent,
"svx/ui/docrecoverysavedialog.ui",
"DocRecoverySaveDialog")
541 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
542 , m_xOkBtn(m_xBuilder->weld_button(
"ok"))
559 m_xFileListLB->append(
"", rInfo.DisplayName, rInfo.StandardImageId);
571 short nResult = xProgress->run();
583 : GenericDialogController(pParent,
"svx/ui/docrecoveryprogressdialog.ui",
"DocRecoveryProgressDialog")
585 , m_xProgressBar(m_xBuilder->weld_progress_bar(
"progress"))
593 css::uno::Reference<css::lang::XComponent> xComp(
m_xProgress, css::uno::UNO_QUERY);
605 short nRet = DialogController::run();
632 VclMessageType::Question, VclButtonsType::YesNo,
SvxResId(pRes)));
640 : GenericDialogController(pParent,
"svx/ui/docrecoveryrecoverdialog.ui",
"DocRecoveryRecoverDialog")
641 , m_aTitleRecoveryInProgress(
SvxResId(RID_SVXSTR_RECOVERY_INPROGRESS))
642 , m_aRecoveryOnlyFinish (
SvxResId(RID_SVXSTR_RECOVERYONLY_FINISH))
643 , m_aRecoveryOnlyFinishDescr(
SvxResId(RID_SVXSTR_RECOVERYONLY_FINISH_DESCR))
646 , m_bWaitForCore(false)
647 , m_bWasRecoveryStarted(false)
648 , m_aSuccessRecovStr(
SvxResId(RID_SVXSTR_SUCCESSRECOV))
649 , m_aOrigDocRecovStr(
SvxResId(RID_SVXSTR_ORIGDOCRECOV))
650 , m_aRecovFailedStr(
SvxResId(RID_SVXSTR_RECOVFAILED))
651 , m_aRecovInProgrStr(
SvxResId(RID_SVXSTR_RECOVINPROGR))
652 , m_aNotRecovYetStr(
SvxResId(RID_SVXSTR_NOTRECOVYET))
653 , m_xDescrFT(m_xBuilder->weld_label(
"desc"))
654 , m_xProgressBar(m_xBuilder->weld_progress_bar(
"progress"))
655 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
656 , m_xNextBtn(m_xBuilder->weld_button(
"next"))
657 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
659 const auto nWidth =
m_xFileListLB->get_approximate_digit_width() * 70;
664 std::vector<int> aWidths
666 o3tl::narrowing<int>(
m_xFileListLB->get_checkbox_column_width()),
667 o3tl::narrowing<int>(60 * nWidth / 100),
668 o3tl::narrowing<int>(
m_xFileListLB->get_checkbox_column_width())
696 css::uno::Reference<css::lang::XComponent> xComp(
m_xProgress, css::uno::UNO_QUERY);
752 nRet = aBrokenRecoveryDialog.
run();
823 nRet = aBrokenRecoveryDialog.
run();
865 OSL_FAIL(
"Should never be reached!");
872 for (
int i = 0;
i < c; ++
i)
880 if (!sStatus.isEmpty())
888 for (
int i=0;
i < c; ++
i)
891 if (pInfo->
ID != pItem->
ID)
907 switch (m_eRecoveryState)
927 switch (m_eRecoveryState)
980 sStatus = RID_SVXBMP_GREENCHECK;
983 sStatus = RID_SVXBMP_YELLOWCHECK;
986 sStatus = RID_SVXBMP_REDCROSS;
996 bool bBeforeRecovery)
997 : GenericDialogController(pParent,
"svx/ui/docrecoverybrokendialog.ui",
"DocRecoveryBrokenDialog")
999 , m_bBeforeRecovery(bBeforeRecovery)
1000 , m_bExecutionNeeded(false)
1001 , m_xFileListLB(m_xBuilder->weld_tree_view(
"filelist"))
1002 , m_xSaveDirED(m_xBuilder->weld_entry(
"savedir"))
1003 , m_xSaveDirBtn(m_xBuilder->weld_button(
"change"))
1004 , m_xOkBtn(m_xBuilder->weld_button(
"ok"))
1005 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
1028 for (
const TURLInfo& rInfo : rURLList)
1034 if (rInfo.TempURL.isEmpty())
1067 osl::FileBase::getFileURLFromSystemPath( sPhysicalPath, sURL );
1069 while (m_sSavePath.isEmpty())
1070 impl_askForSavePath();
1082 impl_askForSavePath();
1087 css::uno::Reference< css::ui::dialogs::XFolderPicker2 > xFolderPicker =
1092 short nRet = xFolderPicker->execute();
1093 if (nRet == css::ui::dialogs::ExecutableDialogResults::OK)
1097 osl::FileBase::getSystemPathFromFileURL(
m_sSavePath, sPath);
::rtl::Reference< comphelper::OPropertyChangeMultiplexer > m_pListener
Reference< XComponentContext > m_xContext
Reference< XExecutableDialog > m_xDialog
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
OUString getName(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true, DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
const OUString & GetWorkPath() const
TValueType getUnpackedValueOrDefault(const OUString &sKey, const TValueType &aDefault) const
virtual ~BrokenRecoveryDialog() override
const OUString & getSaveDirURL() const
TODO.
void impl_askForSavePath()
TODO.
BrokenRecoveryDialog(weld::Window *pParent, RecoveryCore *pCore, bool bBeforeRecovery)
TODO.
std::unique_ptr< weld::Button > m_xSaveDirBtn
std::unique_ptr< weld::Button > m_xCancelBtn
bool isExecutionNeeded() const
TODO.
std::unique_ptr< weld::Entry > m_xSaveDirED
std::unique_ptr< weld::Button > m_xOkBtn
bool const m_bBeforeRecovery
std::unique_ptr< weld::TreeView > m_xFileListLB
virtual void updateItems()=0
virtual void stepNext(TURLInfo *pItem)=0
PluginProgress(weld::ProgressBar *pProgressBar)
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
virtual void SAL_CALL setValue(sal_Int32 nValue) override
virtual void SAL_CALL setText(const OUString &sText) override
virtual void SAL_CALL start(const OUString &sText, sal_Int32 nRange) override
virtual void SAL_CALL reset() override
weld::ProgressBar * m_pProgressBar
virtual void SAL_CALL dispose() override
virtual ~PluginProgress() override
virtual void SAL_CALL end() override
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
IRecoveryUpdateListener * m_pListener
TODO.
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
TODO.
TURLList & getURLListAccess()
TODO.
css::uno::Reference< css::uno::XComponentContext > m_xContext
TODO.
virtual void SAL_CALL disposing(const css::lang::EventObject &aEvent) override
void saveBrokenTempEntries(const OUString &sSaveDir)
RecoveryCore(const css::uno::Reference< css::uno::XComponentContext > &rxContext, bool bUsedForSaving)
TODO.
virtual ~RecoveryCore() override
TODO.
virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent &aEvent) override
void setUpdateListener(IRecoveryUpdateListener *pListener)
TODO.
void impl_stopListening()
stop listening on the internal EmergencySave/AutoRecovery core.
static ERecoveryState mapDocState2RecoverState(EDocStates eDocState)
TODO.
void impl_startListening()
starts listening on the internal EmergencySave/AutoRecovery core.
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
TODO.
void forgetAllRecoveryEntries()
void doEmergencySavePrepare()
TODO.
bool m_bListenForSaving
knows the reason, why we listen on our internal m_xRealCore member.
css::util::URL impl_getParsedURL(const OUString &sURL)
TODO.
void forgetBrokenRecoveryEntries()
void setProgressHandler(const css::uno::Reference< css::task::XStatusIndicator > &xProgress)
TODO.
void saveAllTempEntries(const OUString &sSaveDir)
static bool isBrokenTempEntry(const TURLInfo &rInfo)
TODO.
void forgetBrokenTempEntries()
css::uno::Reference< css::frame::XDispatch > m_xRealCore
TODO.
std::unique_ptr< weld::Button > m_xCancelBtn
std::unique_ptr< weld::TreeView > m_xFileListLB
virtual void stepNext(TURLInfo *pItem) override
OUString m_aTitleRecoveryInProgress
virtual ~RecoveryDialog() override
RecoveryDialog(weld::Window *pParent, RecoveryCore *pCore)
TODO.
OUString impl_getStatusString(const TURLInfo &rInfo) const
@ E_RECOVERY_CANCELED_BEFORE
@ E_RECOVERY_CANCELED_AFTERWARDS
OUString m_aRecovFailedStr
OUString m_aRecovInProgrStr
OUString m_aSuccessRecovStr
virtual void updateItems() override
std::unique_ptr< weld::Button > m_xNextBtn
OUString m_aOrigDocRecovStr
static OUString impl_getStatusImage(const TURLInfo &rInfo)
bool m_bWasRecoveryStarted
std::unique_ptr< weld::ProgressBar > m_xProgressBar
OUString m_aNotRecovYetStr
OUString m_aRecoveryOnlyFinishDescr
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
std::unique_ptr< weld::Label > m_xDescrFT
virtual void end() override
sal_Int32 m_eRecoveryState
OUString m_aRecoveryOnlyFinish
SaveDialog(weld::Window *pParent, RecoveryCore *pCore)
create all child controls of this dialog.
std::unique_ptr< weld::Button > m_xOkBtn
virtual ~SaveDialog() override
std::unique_ptr< weld::TreeView > m_xFileListLB
virtual void updateItems() override
css::uno::Reference< css::task::XStatusIndicator > m_xProgress
virtual void end() override
std::unique_ptr< weld::ProgressBar > m_xProgressBar
SaveProgressDialog(weld::Window *pParent, RecoveryCore *pCore)
create all child controls of this dialog.
virtual short run() override
start the emergency save operation.
virtual ~SaveProgressDialog() override
virtual void stepNext(TURLInfo *pItem) override
std::shared_ptr< weld::Dialog > m_xDialog
virtual void set_text(const OUString &rText)=0
virtual void set_percentage(int value)=0
OUString SvxResId(TranslateId aId)
constexpr OUStringLiteral RECOVERY_CMD_DO_PREPARE_EMERGENCY_SAVE
constexpr OUStringLiteral RECOVERY_CMD_DO_EMERGENCY_SAVE
constexpr OUStringLiteral STATEPROP_ORGURL
constexpr OUStringLiteral STATEPROP_TEMPURL
constexpr OUStringLiteral STATEPROP_TITLE
constexpr OUStringLiteral RECOVERY_CMD_DO_ENTRY_BACKUP
constexpr OUStringLiteral STATEPROP_MODULE
constexpr OUStringLiteral STATEPROP_STATE
constexpr OUStringLiteral RECOVERY_CMD_DO_RECOVERY
constexpr OUStringLiteral STATEPROP_ID
constexpr OUStringLiteral RECOVERY_CMD_DO_ENTRY_CLEANUP
#define DLG_RET_OK_AUTOLUNCH
constexpr OUStringLiteral PROP_DISPATCHASYNCHRON
#define RECOVERY_OPERATIONSTATE_UPDATE
#define RECOVERY_OPERATIONSTATE_START
constexpr OUStringLiteral PROP_SAVEPATH
constexpr OUStringLiteral PROP_STATUSINDICATOR
constexpr OUStringLiteral STATEPROP_TEMPLATEURL
constexpr OUStringLiteral STATEPROP_FACTORYURL
constexpr OUStringLiteral PROP_ENTRYID
#define RECOVERY_OPERATIONSTATE_STOP
@ Incomplete
the Auto/Emergency saved document is not really up-to-date (some changes can be missing)
@ Succeeded
the Auto/Emergency saved document was processed successfully
@ TryLoadBackup
an action was started (saving/loading) ... Can be interesting later if the process may be was interru...
@ Damaged
the Auto/Emergency saved document isn't usable any longer
#define LINK(Instance, Class, Member)
OString strip(const OString &rIn, char c)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
css::uno::Reference< css::ui::dialogs::XFolderPicker2 > createFolderPicker(const css::uno::Reference< css::uno::XComponentContext > &rContext, weld::Window *pPreferredParent)
::std::vector< TURLInfo > TURLList
static short impl_askUserForWizardCancel(weld::Widget *pParent, TranslateId pRes)
IMPL_LINK_NOARG(SaveDialog, OKButtonHdl, weld::Button &, void)
@ E_SUCCESSFULLY_RECOVERED
@ E_RECOVERY_IS_IN_PROGRESS
@ E_ORIGINAL_DOCUMENT_RECOVERED
OUString toId(const void *pValue)
OUString TemplateURL
may be the document base on a template file !?
ERecoveryState RecoveryState
ui representation for DocState!
OUString FactoryURL
a may be existing factory URL (e.g. for untitled documents)
OUString DisplayName
the pure file name, without path, disc etcpp.
OUString TempURL
the full qualified URL of the temp. file (if it's exists)
EDocStates DocState
state info as e.g. VALID, CORRUPTED, NON EXISTING ...
OUString StandardImageId
standard icon
OUString OrgURL
the full qualified document URL
OUString Module
the application module, where this document was loaded
sal_Int32 ID
unique ID, which is specified by the underlying autorecovery core!