25#include <com/sun/star/task/XInteractionAbort.hpp>
26#include <com/sun/star/task/XInteractionApprove.hpp>
27#include <com/sun/star/task/XInteractionDisapprove.hpp>
28#include <com/sun/star/task/XInteractionRetry.hpp>
32#include <osl/diagnose.h>
33#include <rtl/ustrbuf.hxx>
46enum class MessageBoxStyle {
58 task::InteractionClassification eClassification,
59 std::u16string_view rContext,
60 std::u16string_view rMessage,
61 MessageBoxStyle nButtonMask)
65 OUStringBuffer aText(rContext);
66 if (!rContext.empty() && !rMessage.empty())
69 aText.append(rMessage);
71 std::unique_ptr<weld::MessageDialog> xBox;
73 switch (eClassification)
75 case task::InteractionClassification_ERROR:
77 VclMessageType::Error, VclButtonsType::NONE, aText.makeStringAndClear()));
79 case task::InteractionClassification_WARNING:
81 VclMessageType::Warning, VclButtonsType::NONE, aText.makeStringAndClear()));
83 case task::InteractionClassification_INFO:
85 VclMessageType::Info, VclButtonsType::NONE, aText.makeStringAndClear()));
87 case task::InteractionClassification_QUERY:
89 VclMessageType::Question, VclButtonsType::NONE, aText.makeStringAndClear()));
99 case MessageBoxStyle::NONE:
101 case MessageBoxStyle::Ok:
102 xBox->add_button(
GetStandardText(StandardButtonType::OK),
static_cast<int>(DialogMask::ButtonsOk));
104 case MessageBoxStyle::OkCancel:
105 xBox->add_button(
GetStandardText(StandardButtonType::OK),
static_cast<int>(DialogMask::ButtonsOk));
106 xBox->add_button(
GetStandardText(StandardButtonType::Cancel),
static_cast<int>(DialogMask::ButtonsCancel));
108 case MessageBoxStyle::YesNo:
109 xBox->add_button(
GetStandardText(StandardButtonType::Yes),
static_cast<int>(DialogMask::ButtonsYes));
110 xBox->add_button(
GetStandardText(StandardButtonType::No),
static_cast<int>(DialogMask::ButtonsNo));
112 case MessageBoxStyle::YesNoCancel:
113 xBox->add_button(
GetStandardText(StandardButtonType::Yes),
static_cast<int>(DialogMask::ButtonsYes));
114 xBox->add_button(
GetStandardText(StandardButtonType::No),
static_cast<int>(DialogMask::ButtonsNo));
115 xBox->add_button(
GetStandardText(StandardButtonType::Cancel),
static_cast<int>(DialogMask::ButtonsCancel));
117 case MessageBoxStyle::RetryCancel:
118 xBox->add_button(
GetStandardText(StandardButtonType::Retry),
static_cast<int>(DialogMask::ButtonsRetry));
119 xBox->add_button(
GetStandardText(StandardButtonType::Cancel),
static_cast<int>(DialogMask::ButtonsCancel));
130 task::InteractionClassification eClassification,
132 std::vector< OUString >
const & rArguments,
133 uno::Sequence< uno::Reference< task::XInteractionContinuation > >
const &
135 bool bObtainErrorStringOnly,
136 bool & bHasErrorString,
137 OUString & rErrorString)
139 if (bObtainErrorStringOnly)
142 if (!bHasErrorString)
148 enum Source { SOURCE_DEFAULT, SOURCE_SVX, SOURCE_UUI };
149 static char const *
const aManager[3] = {
"svt",
"svx",
"uui" };
156 nErrorArea < ErrCodeArea::Svx ? SOURCE_DEFAULT
157 : nErrorArea == ErrCodeArea::Svx ? SOURCE_SVX : SOURCE_UUI;
161 if (!aErrorResource.
getString(nErrorCode, aMessage))
167 if (bObtainErrorStringOnly)
169 rErrorString = aMessage;
181 uno::Reference< task::XInteractionApprove > xApprove;
182 uno::Reference< task::XInteractionDisapprove > xDisapprove;
183 uno::Reference< task::XInteractionRetry > xRetry;
184 uno::Reference< task::XInteractionAbort > xAbort;
186 rContinuations, &xApprove, &xDisapprove, &xRetry, &xAbort);
209 MessageBoxStyle
const aButtonMask[16]
210 = { MessageBoxStyle::NONE,
211 MessageBoxStyle::Ok ,
212 MessageBoxStyle::NONE,
213 MessageBoxStyle::RetryCancel ,
214 MessageBoxStyle::NONE,
215 MessageBoxStyle::NONE,
216 MessageBoxStyle::NONE,
217 MessageBoxStyle::NONE,
218 MessageBoxStyle::Ok ,
219 MessageBoxStyle::OkCancel ,
220 MessageBoxStyle::NONE,
221 MessageBoxStyle::NONE,
222 MessageBoxStyle::YesNo ,
223 MessageBoxStyle::YesNoCancel ,
225 MessageBoxStyle::NONE,
226 MessageBoxStyle::NONE };
228 MessageBoxStyle nButtonMask = aButtonMask[(xApprove.is() ? 8 : 0)
229 | (xDisapprove.is() ? 4 : 0)
230 | (xRetry.is() ? 2 : 0)
231 | (xAbort.is() ? 1 : 0)];
232 if (nButtonMask == MessageBoxStyle::NONE)
243 OUString aContextString;
244 if (pContext->
GetString(nErrorCode, aContextString))
245 aContext = aContextString;
251 eClassification, aContext, aMessage, nButtonMask );
255 case DialogMask::ButtonsOk:
256 OSL_ENSURE(xApprove.is() || xAbort.is(),
"unexpected situation");
259 else if (xAbort.is())
263 case DialogMask::ButtonsCancel:
264 OSL_ENSURE(xAbort.is(),
"unexpected situation");
269 case DialogMask::ButtonsRetry:
270 OSL_ENSURE(xRetry.is(),
"unexpected situation");
275 case DialogMask::ButtonsNo:
276 OSL_ENSURE(xDisapprove.is(),
"unexpected situation");
277 if (xDisapprove.is())
278 xDisapprove->select();
281 case DialogMask::ButtonsYes:
282 OSL_ENSURE(xApprove.is(),
"unexpected situation");
static weld::Window * GetFrameWeld(const css::uno::Reference< css::awt::XWindow > &rWindow)
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
constexpr ErrCodeArea GetArea() const
virtual bool GetString(ErrCode nErrId, OUString &rCtxStr)=0
static ErrorContext * GetContext()
bool getString(ErrCode nErrorCode, OUString &rString) const
void handleErrorHandlerRequest(css::task::InteractionClassification eClassification, ErrCode nErrorCode, std::vector< OUString > const &rArguments, css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > > const &rContinuations, bool bObtainErrorStringOnly, bool &bHasErrorString, OUString &rErrorString)
static bool isInformationalErrorMessageRequest(css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > > const &rContinuations)
static OUString replaceMessageWithArguments(const OUString &aMessage, std::vector< OUString > const &rArguments)
const css::uno::Reference< css::awt::XWindow > & getParentXWindow() const
SVT_DLLPUBLIC const ErrMsgCode RID_ERRHDL[]
std::pair< TranslateId, ErrCode > ErrMsgCode
void getContinuations(css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > > const &rContinuations, css::uno::Reference< t1 > *pContinuation1, css::uno::Reference< t2 > *pContinuation2)
std::locale Create(std::string_view aPrefixName, const LanguageTag &rLocale)
OUString VCL_DLLPUBLIC GetStandardText(StandardButtonType eButton)
SVX_DLLPUBLIC const ErrMsgCode RID_SVXERRCODE[]