diff options
Diffstat (limited to 'include/vcl/errinf.hxx')
-rw-r--r-- | include/vcl/errinf.hxx | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/include/vcl/errinf.hxx b/include/vcl/errinf.hxx new file mode 100644 index 000000000000..68e5f08e0840 --- /dev/null +++ b/include/vcl/errinf.hxx @@ -0,0 +1,176 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef __RSC + +#ifndef INCLUDED_VCL_ERRINF_HXX +#define INCLUDED_VCL_ERRINF_HXX + +#include <limits.h> +#include <rtl/ustring.hxx> +#include <tools/errcode.hxx> +#include <vcl/dllapi.h> +#include <o3tl/typed_flags_set.hxx> +#include <memory> + +namespace vcl { class Window; } + +class DynamicErrorInfo_Impl; +class ErrorHandler_Impl; + +enum class ErrorHandlerFlags +{ + NONE = 0x0000, + ButtonsOk = 0x0001, + ButtonsCancel = 0x0002, + ButtonsRetry = 0x0004, + ButtonsOkCancel = 0x0003, + ButtonsNo = 0x0008, + ButtonsYes = 0x0010, + ButtonsYesNo = 0x0018, + ButtonsYesNoCancel = 0x001a, + + ButtonDefaultsOk = 0x0100, + ButtonDefaultsCancel = 0x0200, + ButtonDefaultsYes = 0x0300, + ButtonDefaultsNo = 0x0400, + + MessageError = 0x1000, + MessageWarning = 0x2000, + MessageInfo = 0x3000, + + MAX = USHRT_MAX, +}; +namespace o3tl +{ + template<> struct typed_flags<ErrorHandlerFlags> : is_typed_flags<ErrorHandlerFlags, 0xffff> {}; +} + +class SAL_WARN_UNUSED VCL_DLLPUBLIC ErrorInfo +{ +private: + sal_uIntPtr lUserId; + +public: + + ErrorInfo( sal_uIntPtr lArgUserId ) : + lUserId( lArgUserId ){} + virtual ~ErrorInfo(); + + sal_uIntPtr GetErrorCode() const { return lUserId; } + + static ErrorInfo* GetErrorInfo(sal_uIntPtr); +}; + +class SAL_WARN_UNUSED VCL_DLLPUBLIC DynamicErrorInfo : public ErrorInfo +{ + friend class DynamicErrorInfo_Impl; + +private: + std::unique_ptr<DynamicErrorInfo_Impl> pImpl; + +public: + + DynamicErrorInfo(sal_uIntPtr lUserId, ErrorHandlerFlags nMask); + virtual ~DynamicErrorInfo() override; + + operator sal_uIntPtr() const; + ErrorHandlerFlags GetDialogMask() const; +}; + +class SAL_WARN_UNUSED VCL_DLLPUBLIC StringErrorInfo : public DynamicErrorInfo +{ +private: + OUString aString; + +public: + + StringErrorInfo( sal_uIntPtr lUserId, + const OUString& aStringP, + ErrorHandlerFlags nMask = ErrorHandlerFlags::NONE); + const OUString& GetErrorString() const { return aString; } +}; + +class SAL_WARN_UNUSED VCL_DLLPUBLIC TwoStringErrorInfo: public DynamicErrorInfo +{ +private: + OUString aArg1; + OUString aArg2; + +public: + + TwoStringErrorInfo(sal_uIntPtr nUserID, const OUString & rTheArg1, + const OUString & rTheArg2, ErrorHandlerFlags nMask): + DynamicErrorInfo(nUserID, nMask), aArg1(rTheArg1), aArg2(rTheArg2) {} + + const OUString& GetArg1() const { return aArg1; } + const OUString& GetArg2() const { return aArg2; } +}; + +struct ErrorContextImpl; +class SAL_WARN_UNUSED VCL_DLLPUBLIC ErrorContext +{ + friend class ErrorHandler; + +private: + std::unique_ptr<ErrorContextImpl> pImpl; + +public: + ErrorContext(vcl::Window *pWin); + virtual ~ErrorContext(); + + virtual bool GetString( sal_uIntPtr nErrId, OUString& rCtxStr ) = 0; + vcl::Window* GetParent(); + + static ErrorContext* GetContext(); +}; + +typedef ErrorHandlerFlags WindowDisplayErrorFunc( + vcl::Window *, ErrorHandlerFlags nMask, const OUString &rErr, const OUString &rAction); + +typedef void BasicDisplayErrorFunc( + const OUString &rErr, const OUString &rAction); + +class SAL_WARN_UNUSED VCL_DLLPUBLIC ErrorHandler +{ + friend class ErrorHandler_Impl; + +private: + static ErrorHandlerFlags HandleError_Impl( sal_uIntPtr lId, + ErrorHandlerFlags nFlags, + bool bJustCreateString, + OUString & rError); +protected: + virtual bool CreateString(const ErrorInfo *, OUString &) const = 0; + +public: + ErrorHandler(); + virtual ~ErrorHandler(); + + static ErrorHandlerFlags HandleError ( sal_uIntPtr lId, ErrorHandlerFlags nMask = ErrorHandlerFlags::MAX ); + static bool GetErrorString( sal_uIntPtr lId, OUString& rStr ); + + static void RegisterDisplay( BasicDisplayErrorFunc* ); + static void RegisterDisplay( WindowDisplayErrorFunc* ); +}; + +#endif +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |