Error notifications

This commit is contained in:
Federico Cecchetto 2021-12-20 18:58:23 +01:00
parent 776a39f0b3
commit bedc3c94f8
2 changed files with 41 additions and 35 deletions

View File

@ -20,14 +20,13 @@ namespace gui
namespace namespace
{ {
utils::concurrency::container<std::vector<std::function<void()>>> on_frame_callbacks; utils::concurrency::container<std::vector<std::function<void()>>> on_frame_callbacks;
utils::concurrency::container<std::vector<notification_t>> notifications;
ID3D11Device* device; ID3D11Device* device;
ID3D11DeviceContext* device_context; ID3D11DeviceContext* device_context;
bool initialized = false; bool initialized = false;
bool toggled = false; bool toggled = false;
std::vector<notification_t> notifications;
void initialize_gui_context() void initialize_gui_context()
{ {
ImGui::CreateContext(); ImGui::CreateContext();
@ -62,17 +61,19 @@ namespace gui
void show_notifications() void show_notifications()
{ {
static auto window_flags = ImGuiWindowFlags_NoDecoration | static auto window_flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings |
ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav |
ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoMove; ImGuiWindowFlags_NoMove;
notifications.access([](std::vector<notification_t>& notifications_)
{
auto index = 0; auto index = 0;
for (auto i = notifications.begin(); i != notifications.end(); ++i) for (auto i = notifications_.begin(); i != notifications_.end(); ++i)
{ {
const auto now = std::chrono::high_resolution_clock::now(); const auto now = std::chrono::high_resolution_clock::now();
if (now - i->creation_time >= i->duration) if (now - i->creation_time >= i->duration)
{ {
notifications.erase(i--); notifications_.erase(i--);
continue; continue;
} }
@ -97,6 +98,7 @@ namespace gui
index++; index++;
} }
});
} }
void gui_draw() void gui_draw()
@ -231,7 +233,10 @@ namespace gui
notification.duration = duration; notification.duration = duration;
notification.creation_time = std::chrono::high_resolution_clock::now(); notification.creation_time = std::chrono::high_resolution_clock::now();
notifications.insert(notifications.begin(), notification); notifications.access([notification](std::vector<notification_t>& notifications_)
{
notifications_.insert(notifications_.begin(), notification);
});
} }
class component final : public component_interface class component final : public component_interface

View File

@ -466,7 +466,6 @@ namespace entity_list
} }
catch (...) catch (...)
{ {
} }
} }
@ -568,6 +567,7 @@ namespace entity_list
} }
catch (...) catch (...)
{ {
gui::notification("Error", utils::string::va("^1error setting field '%s'!", name.data()));
} }
}); });
} }
@ -589,6 +589,7 @@ namespace entity_list
} }
catch (...) catch (...)
{ {
gui::notification("Error", utils::string::va("^1error setting field '%s'!", name.data()));
} }
}); });
} }