63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
/*
|
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <ox/event/signal.hpp>
|
|
#include <ox/std/string.hpp>
|
|
#include <ox/std/vec.hpp>
|
|
|
|
#include <nostalgia/core/context.hpp>
|
|
|
|
#include "imguiuitl.hpp"
|
|
|
|
namespace nostalgia::studio {
|
|
|
|
|
|
class Popup {
|
|
private:
|
|
ox::Vec2 m_size;
|
|
ox::String m_title;
|
|
public:
|
|
// emits path parameter
|
|
ox::Signal<ox::Error(const ox::String&)> 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<float>(sz.width), static_cast<float>(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<ImVec2>(m_size));
|
|
constexpr auto modalFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
|
|
if (ImGui::BeginPopupModal(m_title.c_str(), open, modalFlags)) {
|
|
drawContents();
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
|
|
}
|