diff --git a/res/layouts/process.xml b/res/layouts/process.xml
new file mode 100644
index 00000000..ccf631d8
--- /dev/null
+++ b/res/layouts/process.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/layouts/process.xml.lua b/res/layouts/process.xml.lua
new file mode 100644
index 00000000..44e640e8
--- /dev/null
+++ b/res/layouts/process.xml.lua
@@ -0,0 +1,10 @@
+function on_progress(done, total)
+ local progress = done / total
+ document.progress_label.text = string.format(
+ "%s/%s (%s%%)", done, total, math.floor(progress*100)
+ )
+end
+
+function on_open(title)
+ document.title_label.text = title
+end
diff --git a/src/engine.cpp b/src/engine.cpp
index 3fbd1ed6..b6985ac2 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -227,11 +227,7 @@ void Engine::loadAssets() {
}
}
}
- if (assets) {
- assets->extend(*new_assets);
- } else {
- assets.reset(new_assets.release());
- }
+ assets.reset(new_assets.release());
}
void Engine::loadContent() {
diff --git a/src/frontend/UiDocument.h b/src/frontend/UiDocument.h
index b71a1747..57d0b8c2 100644
--- a/src/frontend/UiDocument.h
+++ b/src/frontend/UiDocument.h
@@ -16,6 +16,7 @@ namespace gui {
struct uidocscript {
bool onopen : 1;
+ bool onprogress : 1;
bool onclose : 1;
};
diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp
index b5dea9ca..7c957601 100644
--- a/src/frontend/menu.cpp
+++ b/src/frontend/menu.cpp
@@ -49,7 +49,7 @@ void menus::create_menus(Engine* engine) {
});
}
-void menus::show(Engine* engine, const std::string& name, std::vector> args) {
+UiDocument* menus::show(Engine* engine, const std::string& name, std::vector> args) {
auto menu = engine->getGUI()->getMenu();
auto file = engine->getResPaths()->find("layouts/"+name+".xml");
auto fullname = "core:layouts/"+name;
@@ -59,35 +59,23 @@ void menus::show(Engine* engine, const std::string& name, std::vectoraddPage(name, document->getRoot());
menu->setPage(name);
+ return document;
}
void menus::show_process_panel(Engine* engine, std::shared_ptr task, std::wstring text) {
- auto menu = engine->getGUI()->getMenu();
- auto panel = std::dynamic_pointer_cast(guiutil::create(
- "