/* * Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved. */ #pragma once #include #include #include #include #include "imguiuitl.hpp" namespace nostalgia::studio { class Popup { private: ox::Vec2 m_size; ox::String m_title; public: // emits path parameter ox::Signal finished; virtual ~Popup() noexcept = default; virtual void open() noexcept = 0; virtual void close() noexcept = 0; [[nodiscard]] virtual bool isOpen() const noexcept = 0; virtual void draw(core::Context *ctx) noexcept = 0; protected: constexpr void setSize(ox::Size sz) noexcept { m_size = {static_cast(sz.width), static_cast(sz.height)}; } constexpr void setTitle(ox::String title) noexcept { m_title = std::move(title); } constexpr const ox::String &title() const noexcept { return m_title; } void drawWindow(core::Context *ctx, bool *open, auto drawContents) { studio::ig::centerNextWindow(ctx); ImGui::SetNextWindowSize(static_cast(m_size)); constexpr auto modalFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize; if (ImGui::BeginPopupModal(m_title.c_str(), open, modalFlags)) { drawContents(); } } }; }