/**************************************************************************/1/* progress_dialog.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "scene/gui/box_container.h"33#include "scene/gui/button.h"34#include "scene/gui/center_container.h"35#include "scene/gui/label.h"36#include "scene/gui/progress_bar.h"3738class BackgroundProgress : public HBoxContainer {39GDCLASS(BackgroundProgress, HBoxContainer);4041_THREAD_SAFE_CLASS_4243struct Task {44HBoxContainer *hb = nullptr;45ProgressBar *progress = nullptr;46};4748HashMap<String, Task> tasks;49HashMap<String, int> updates;50void _update();5152protected:53void _add_task(const String &p_task, const String &p_label, int p_steps);54void _task_step(const String &p_task, int p_step = -1);55void _end_task(const String &p_task);5657public:58void add_task(const String &p_task, const String &p_label, int p_steps);59void task_step(const String &p_task, int p_step = -1);60void end_task(const String &p_task);61};6263class PanelContainer;6465class ProgressDialog : public CenterContainer {66GDCLASS(ProgressDialog, CenterContainer);67struct Task {68String task;69VBoxContainer *vb = nullptr;70ProgressBar *progress = nullptr;71Label *state = nullptr;72uint64_t last_progress_tick = 0;73};74HBoxContainer *cancel_hb = nullptr;75Button *cancel = nullptr;7677HashMap<String, Task> tasks;78PanelContainer *center_panel = nullptr;79VBoxContainer *main = nullptr;8081LocalVector<Window *> host_windows;8283Size2 main_border_size;8485static ProgressDialog *singleton;86void _popup();8788void _cancel_pressed();8990void _update_ui();91void _reparent_and_show();92bool canceled = false;9394protected:95void _notification(int p_what);9697public:98static ProgressDialog *get_singleton() { return singleton; }99void add_task(const String &p_task, const String &p_label, int p_steps, bool p_can_cancel = false);100bool task_step(const String &p_task, const String &p_state, int p_step = -1, bool p_force_redraw = true);101void end_task(const String &p_task);102103void add_host_window(Window *p_window);104void remove_host_window(Window *p_window);105106ProgressDialog();107};108109110