108 lines
2.2 KiB
C++
108 lines
2.2 KiB
C++
/*
|
|
* Copyright 2016 - 2024 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
|
|
#include <imgui.h>
|
|
|
|
#include <turbine/context.hpp>
|
|
#include <studio/context.hpp>
|
|
|
|
namespace studio::ig {
|
|
|
|
inline constexpr auto BtnSz = ImVec2{52, 22};
|
|
|
|
class ChildStackItem {
|
|
public:
|
|
explicit ChildStackItem(ox::CStringView id, ImVec2 const&sz = {}) noexcept;
|
|
~ChildStackItem() noexcept;
|
|
};
|
|
|
|
class IDStackItem {
|
|
public:
|
|
explicit IDStackItem(int id) noexcept;
|
|
explicit IDStackItem(const char *id) noexcept;
|
|
explicit IDStackItem(ox::CStringView id) noexcept;
|
|
~IDStackItem() noexcept;
|
|
};
|
|
|
|
class IndentStackItem {
|
|
private:
|
|
float m_indent{};
|
|
public:
|
|
explicit IndentStackItem(float id) noexcept;
|
|
~IndentStackItem() noexcept;
|
|
};
|
|
|
|
void centerNextWindow(turbine::Context &ctx) noexcept;
|
|
|
|
bool PushButton(ox::CStringView lbl, ImVec2 const&btnSz = BtnSz) noexcept;
|
|
|
|
enum class PopupResponse {
|
|
None,
|
|
OK,
|
|
Cancel,
|
|
};
|
|
|
|
PopupResponse PopupControlsOkCancel(float popupWidth, bool &popupOpen);
|
|
|
|
[[nodiscard]]
|
|
bool BeginPopup(turbine::Context &ctx, ox::CStringView popupName, bool &show, ImVec2 const&sz = {285, 0});
|
|
|
|
/**
|
|
*
|
|
* @param lbl
|
|
* @param list
|
|
* @param selectedIdx
|
|
* @return true if new value selected, false otherwise
|
|
*/
|
|
bool ComboBox(ox::CStringView lbl, ox::SpanView<ox::String> list, size_t &selectedIdx) noexcept;
|
|
|
|
bool FileComboBox(
|
|
ox::CStringView lbl,
|
|
studio::StudioContext &sctx,
|
|
ox::StringView fileExt,
|
|
size_t &selectedIdx) noexcept;
|
|
|
|
bool ListBox(
|
|
ox::CStringView name,
|
|
std::function<ox::CStringView(size_t)> const&f,
|
|
size_t strCnt,
|
|
size_t &selIdx) noexcept;
|
|
|
|
/**
|
|
*
|
|
* @param name
|
|
* @param list
|
|
* @param selIdx
|
|
* @return true if new value selected, false otherwise
|
|
*/
|
|
bool ListBox(ox::CStringView name, ox::SpanView<ox::String> const&list, size_t &selIdx) noexcept;
|
|
|
|
class FilePicker {
|
|
private:
|
|
bool m_show{};
|
|
studio::StudioContext &m_sctx;
|
|
ox::String const m_title;
|
|
ox::String const m_fileExt;
|
|
ImVec2 const m_size;
|
|
public:
|
|
ox::Signal<ox::Error(ox::StringView)> filePicked;
|
|
|
|
FilePicker(
|
|
studio::StudioContext &sctx,
|
|
ox::String title,
|
|
ox::String fileExt,
|
|
ImVec2 const&size = {}) noexcept;
|
|
|
|
void draw() noexcept;
|
|
|
|
void show() noexcept;
|
|
|
|
};
|
|
|
|
}
|