/* * Copyright (c) 2018-2022, Andreas Kling * Copyright (c) 2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace FileSystemAccessServer { class ConnectionFromClient; } namespace GUI { class MessageBox : public Dialog { C_OBJECT_ABSTRACT(MessageBox) public: enum class Type { None, Information, Warning, Error, Question }; enum class InputType { OK, OKCancel, YesNo, YesNoCancel, }; virtual ~MessageBox() override = default; static ExecResult show(Window* parent_window, StringView text, StringView title, Type type = Type::None, InputType input_type = InputType::OK); static ExecResult show_error(Window* parent_window, StringView text); static ExecResult ask_about_unsaved_changes(Window* parent_window, StringView path, Optional last_unmodified_timestamp = {}); static ErrorOr try_show(Badge, i32 window_server_client_id, i32 parent_window_id, StringView text, StringView title); static ErrorOr try_show(Window* parent_window, StringView text, StringView title, Type type = Type::None, InputType input_type = InputType::OK); static ErrorOr try_show_error(Window* parent_window, StringView text); static ErrorOr try_ask_about_unsaved_changes(Window* parent_window, StringView path, Optional last_unmodified_timestamp = {}); static ErrorOr> create(Window* parent_window, StringView text, StringView title, Type type = Type::None, InputType input_type = InputType::OK); void set_text(String); private: MessageBox(Window* parent_window, Type type = Type::None, InputType input_type = InputType::OK); bool should_include_ok_button() const; bool should_include_cancel_button() const; bool should_include_yes_button() const; bool should_include_no_button() const; ErrorOr build(); ErrorOr> icon() const; Type m_type { Type::None }; InputType m_input_type { InputType::OK }; RefPtr m_ok_button; RefPtr m_yes_button; RefPtr m_no_button; RefPtr m_cancel_button; RefPtr