mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-14 07:17:25 +00:00
85 lines
3.1 KiB
C++
85 lines
3.1 KiB
C++
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
|
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
|
|
|
#pragma once
|
|
|
|
#include "small_string.h"
|
|
#include "types.h"
|
|
|
|
#include "fmt/core.h"
|
|
|
|
#include <string>
|
|
|
|
class ProgressCallback
|
|
{
|
|
public:
|
|
virtual ~ProgressCallback();
|
|
|
|
virtual void PushState();
|
|
virtual void PopState();
|
|
|
|
virtual bool IsCancelled() const;
|
|
virtual bool IsCancellable() const;
|
|
|
|
virtual void SetCancellable(bool cancellable);
|
|
|
|
virtual void SetTitle(const std::string_view title);
|
|
virtual void SetStatusText(const std::string_view text);
|
|
virtual void SetProgressRange(u32 range);
|
|
virtual void SetProgressValue(u32 value);
|
|
virtual void IncrementProgressValue();
|
|
|
|
virtual void DisplayError(const std::string_view message);
|
|
virtual void DisplayWarning(const std::string_view message);
|
|
virtual void DisplayInformation(const std::string_view message);
|
|
virtual void DisplayDebugMessage(const std::string_view message);
|
|
|
|
virtual void ModalError(const std::string_view message);
|
|
virtual bool ModalConfirmation(const std::string_view message);
|
|
virtual void ModalInformation(const std::string_view message);
|
|
|
|
#define MAKE_PROGRESS_CALLBACK_FORWARDER(from, to) \
|
|
template<typename... T> \
|
|
void from(fmt::format_string<T...> fmt, T&&... args) \
|
|
{ \
|
|
TinyString str; \
|
|
fmt::vformat_to(std::back_inserter(str), fmt, fmt::make_format_args(args...)); \
|
|
to(str.view()); \
|
|
}
|
|
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatStatusText, SetStatusText);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatError, DisplayError);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatWarning, DisplayWarning);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatInformation, DisplayInformation);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatDebugMessage, DisplayDebugMessage);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatModalError, ModalError);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatModalConfirmation, ModalConfirmation);
|
|
MAKE_PROGRESS_CALLBACK_FORWARDER(FormatModalInformation, ModalInformation);
|
|
|
|
#undef MAKE_PROGRESS_CALLBACK_FORWARDER
|
|
|
|
protected:
|
|
struct State
|
|
{
|
|
std::unique_ptr<State> next_saved_state;
|
|
std::string status_text;
|
|
u32 progress_range;
|
|
u32 progress_value;
|
|
u32 base_progress_value;
|
|
bool cancellable;
|
|
};
|
|
|
|
bool m_cancellable = false;
|
|
bool m_cancelled = false;
|
|
std::string m_status_text;
|
|
u32 m_progress_range = 1;
|
|
u32 m_progress_value = 0;
|
|
|
|
u32 m_base_progress_value = 0;
|
|
|
|
std::unique_ptr<State> m_saved_state;
|
|
|
|
public:
|
|
static ProgressCallback* NullProgressCallback;
|
|
};
|