2021-03-31 15:31:21 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "util/types.hpp"
|
|
|
|
|
#include "util/atomic.hpp"
|
|
|
|
|
|
|
|
|
|
extern atomic_t<const char*> g_progr;
|
|
|
|
|
extern atomic_t<u32> g_progr_ftotal;
|
|
|
|
|
extern atomic_t<u32> g_progr_fdone;
|
|
|
|
|
extern atomic_t<u32> g_progr_ptotal;
|
|
|
|
|
extern atomic_t<u32> g_progr_pdone;
|
2021-07-29 01:50:54 +02:00
|
|
|
extern atomic_t<bool> g_system_progress_canceled;
|
2021-09-05 13:12:08 +02:00
|
|
|
extern atomic_t<bool> g_system_progress_stopping;
|
2021-03-31 15:31:21 +02:00
|
|
|
|
|
|
|
|
// Initialize progress dialog (can be recursive)
|
|
|
|
|
class scoped_progress_dialog final
|
|
|
|
|
{
|
|
|
|
|
// Saved previous value
|
|
|
|
|
const char* const m_prev;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
scoped_progress_dialog(const char* text)
|
|
|
|
|
: m_prev(g_progr.exchange(text ? text : ""))
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
scoped_progress_dialog(const scoped_progress_dialog&) = delete;
|
|
|
|
|
|
|
|
|
|
scoped_progress_dialog& operator=(const scoped_progress_dialog&) = delete;
|
|
|
|
|
|
|
|
|
|
~scoped_progress_dialog()
|
|
|
|
|
{
|
|
|
|
|
g_progr.release(m_prev);
|
|
|
|
|
}
|
|
|
|
|
};
|
2021-04-21 22:12:21 +02:00
|
|
|
|
|
|
|
|
struct progress_dialog_server
|
|
|
|
|
{
|
|
|
|
|
void operator()();
|
|
|
|
|
~progress_dialog_server();
|
|
|
|
|
|
2021-09-07 21:56:49 +02:00
|
|
|
static constexpr auto thread_name = "Progress Dialog Server"sv;
|
2021-04-21 22:12:21 +02:00
|
|
|
};
|