[studio] Change FilePicker consturctor to take StringParams

This commit is contained in:
Gary Talent 2024-12-15 01:08:30 -06:00
parent fcdcfd10d1
commit dc07f3d58b
2 changed files with 35 additions and 32 deletions

View File

@ -24,7 +24,7 @@ constexpr ImTextureID toImTextureID(ox::Unsigned_c auto id) noexcept
} }
template<typename T> template<typename T>
ox::Result<T> getDragDropPayload(ox::CStringView name) noexcept { ox::Result<T> getDragDropPayload(ox::CStringViewCR name) noexcept {
auto const payload = ImGui::AcceptDragDropPayload(name.c_str()); auto const payload = ImGui::AcceptDragDropPayload(name.c_str());
if (!payload) { if (!payload) {
return ox::Error(1, "No drag/drop payload"); return ox::Error(1, "No drag/drop payload");
@ -34,11 +34,7 @@ ox::Result<T> getDragDropPayload(ox::CStringView name) noexcept {
static_cast<size_t>(payload->DataSize)}); static_cast<size_t>(payload->DataSize)});
} }
ox::Error setDragDropPayload(ox::CStringView name, auto const&obj) noexcept { ox::Error setDragDropPayload(ox::CStringViewCR name, auto const&obj) noexcept;
oxRequire(buff, ox::writeClaw(obj, ox::ClawFormat::Metal));
ImGui::SetDragDropPayload(name.c_str(), buff.data(), buff.size());
return {};
}
class DragDropSource { class DragDropSource {
@ -88,7 +84,7 @@ class DragDropTarget {
} }
}; };
inline auto dragDropTarget(auto const&cb) noexcept { auto dragDropTarget(auto const&cb) noexcept {
if constexpr(ox::is_same_v<decltype(cb()), ox::Error>) { if constexpr(ox::is_same_v<decltype(cb()), ox::Error>) {
if (ig::DragDropTarget const tgt; tgt) [[unlikely]] { if (ig::DragDropTarget const tgt; tgt) [[unlikely]] {
return cb(); return cb();
@ -104,7 +100,7 @@ inline auto dragDropTarget(auto const&cb) noexcept {
class ChildStackItem { class ChildStackItem {
public: public:
explicit ChildStackItem(ox::CStringView id, ImVec2 const&sz = {}) noexcept; explicit ChildStackItem(ox::CStringViewCR id, ImVec2 const&sz = {}) noexcept;
~ChildStackItem() noexcept; ~ChildStackItem() noexcept;
}; };
@ -112,7 +108,7 @@ class IDStackItem {
public: public:
explicit IDStackItem(int id) noexcept; explicit IDStackItem(int id) noexcept;
explicit IDStackItem(const char *id) noexcept; explicit IDStackItem(const char *id) noexcept;
explicit IDStackItem(ox::CStringView id) noexcept; explicit IDStackItem(ox::CStringViewCR id) noexcept;
~IDStackItem() noexcept; ~IDStackItem() noexcept;
}; };
@ -126,7 +122,7 @@ class IndentStackItem {
void centerNextWindow(turbine::Context &ctx) noexcept; void centerNextWindow(turbine::Context &ctx) noexcept;
bool PushButton(ox::CStringView lbl, ImVec2 const&btnSz = BtnSz) noexcept; bool PushButton(ox::CStringViewCR lbl, ImVec2 const&btnSz = BtnSz) noexcept;
template<typename Str> template<typename Str>
struct TextInput { struct TextInput {
@ -180,7 +176,7 @@ PopupResponse PopupControlsOkCancel(float popupWidth, bool &popupOpen);
PopupResponse PopupControlsOkCancel(bool &popupOpen); PopupResponse PopupControlsOkCancel(bool &popupOpen);
[[nodiscard]] [[nodiscard]]
bool BeginPopup(turbine::Context &ctx, ox::CStringView popupName, bool &show, ImVec2 const&sz = {285, 0}); bool BeginPopup(turbine::Context &ctx, ox::CStringViewCR popupName, bool &show, ImVec2 const&sz = {285, 0});
/** /**
* *
@ -199,20 +195,20 @@ bool ComboBox(ox::CStringView lbl, ox::Span<const ox::String> list, size_t &sele
* @return true if new value selected, false otherwise * @return true if new value selected, false otherwise
*/ */
bool ComboBox( bool ComboBox(
ox::CStringView lbl, ox::CStringViewCR lbl,
std::function<ox::CStringView(size_t)> const&f, std::function<ox::CStringView(size_t)> const&f,
size_t strCnt, size_t strCnt,
size_t &selectedIdx) noexcept; size_t &selectedIdx) noexcept;
bool FileComboBox( bool FileComboBox(
ox::CStringView lbl, ox::CStringViewCR lbl,
studio::StudioContext &sctx, StudioContext &sctx,
ox::StringView fileExt, ox::StringViewCR fileExt,
size_t &selectedIdx) noexcept; size_t &selectedIdx) noexcept;
bool ListBox( bool ListBox(
ox::CStringView name, ox::CStringViewCR name,
std::function<ox::CStringView(size_t)> const&f, std::function<ox::CStringViewCR(size_t)> const&f,
size_t strCnt, size_t strCnt,
size_t &selIdx) noexcept; size_t &selIdx) noexcept;
@ -223,7 +219,7 @@ bool ListBox(
* @param selIdx * @param selIdx
* @return true if new value selected, false otherwise * @return true if new value selected, false otherwise
*/ */
bool ListBox(ox::CStringView name, ox::Span<const ox::String> const&list, size_t &selIdx) noexcept; bool ListBox(ox::CStringViewCR name, ox::Span<const ox::String> const&list, size_t &selIdx) noexcept;
class FilePicker { class FilePicker {
private: private:
@ -237,8 +233,8 @@ class FilePicker {
FilePicker( FilePicker(
studio::StudioContext &sctx, studio::StudioContext &sctx,
ox::String title, ox::StringParam title,
ox::String fileExt, ox::StringParam fileExt,
ImVec2 const&size = {}) noexcept; ImVec2 const&size = {}) noexcept;
void draw() noexcept; void draw() noexcept;

View File

@ -10,7 +10,14 @@
namespace studio::ig { namespace studio::ig {
ChildStackItem::ChildStackItem(ox::CStringView id, ImVec2 const&sz) noexcept { ox::Error setDragDropPayload(ox::CStringViewCR name, auto const&obj) noexcept {
oxRequire(buff, ox::writeClaw(obj, ox::ClawFormat::Metal));
ImGui::SetDragDropPayload(name.c_str(), buff.data(), buff.size());
return {};
}
ChildStackItem::ChildStackItem(ox::CStringViewCR id, ImVec2 const&sz) noexcept {
ImGui::BeginChild(id.c_str(), sz); ImGui::BeginChild(id.c_str(), sz);
} }
@ -26,7 +33,7 @@ IDStackItem::IDStackItem(const char *id) noexcept {
ImGui::PushID(id); ImGui::PushID(id);
} }
IDStackItem::IDStackItem(ox::CStringView id) noexcept: IDStackItem(id.c_str()) {} IDStackItem::IDStackItem(ox::CStringViewCR id) noexcept: IDStackItem(id.c_str()) {}
IDStackItem::~IDStackItem() noexcept { IDStackItem::~IDStackItem() noexcept {
ImGui::PopID(); ImGui::PopID();
@ -50,7 +57,7 @@ void centerNextWindow(turbine::Context &ctx) noexcept {
ImGui::SetNextWindowPos(ImVec2(screenW / mod, screenH / mod), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); ImGui::SetNextWindowPos(ImVec2(screenW / mod, screenH / mod), ImGuiCond_Always, ImVec2(0.5f, 0.5f));
} }
bool PushButton(ox::CStringView lbl, ImVec2 const&btnSz) noexcept { bool PushButton(ox::CStringViewCR lbl, ImVec2 const&btnSz) noexcept {
return ImGui::Button(lbl.c_str(), btnSz); return ImGui::Button(lbl.c_str(), btnSz);
} }
@ -77,7 +84,7 @@ PopupResponse PopupControlsOkCancel(bool &popupOpen) {
return PopupControlsOkCancel(ImGui::GetContentRegionAvail().x + 17, popupOpen); return PopupControlsOkCancel(ImGui::GetContentRegionAvail().x + 17, popupOpen);
} }
bool BeginPopup(turbine::Context &ctx, ox::CStringView popupName, bool &show, ImVec2 const&sz) { bool BeginPopup(turbine::Context &ctx, ox::CStringViewCR popupName, bool &show, ImVec2 const&sz) {
constexpr auto modalFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize; constexpr auto modalFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
centerNextWindow(ctx); centerNextWindow(ctx);
ImGui::OpenPopup(popupName.c_str()); ImGui::OpenPopup(popupName.c_str());
@ -105,7 +112,7 @@ bool ComboBox(
} }
bool ComboBox( bool ComboBox(
ox::CStringView lbl, ox::CStringViewCR lbl,
std::function<ox::CStringView(size_t)> const&f, std::function<ox::CStringView(size_t)> const&f,
size_t strCnt, size_t strCnt,
size_t &selectedIdx) noexcept { size_t &selectedIdx) noexcept {
@ -125,17 +132,17 @@ bool ComboBox(
} }
bool FileComboBox( bool FileComboBox(
ox::CStringView lbl, ox::CStringViewCR lbl,
StudioContext &sctx, StudioContext &sctx,
ox::StringView fileExt, ox::StringViewCR fileExt,
size_t &selectedIdx) noexcept { size_t &selectedIdx) noexcept {
auto const&list = sctx.project->fileList(fileExt); auto const&list = sctx.project->fileList(fileExt);
return ComboBox(lbl, list, selectedIdx); return ComboBox(lbl, list, selectedIdx);
} }
bool ListBox( bool ListBox(
ox::CStringView name, ox::CStringViewCR name,
std::function<ox::CStringView(size_t)> const&f, std::function<ox::CStringViewCR(size_t)> const&f,
size_t strCnt, size_t strCnt,
size_t &selIdx) noexcept { size_t &selIdx) noexcept {
auto out = false; auto out = false;
@ -155,7 +162,7 @@ bool ListBox(
return out; return out;
} }
bool ListBox(ox::CStringView name, ox::Span<const ox::String> const&list, size_t &selIdx) noexcept { bool ListBox(ox::CStringViewCR name, ox::Span<const ox::String> const&list, size_t &selIdx) noexcept {
return ListBox(name, [list](size_t i) -> ox::CStringView { return ListBox(name, [list](size_t i) -> ox::CStringView {
return list[i]; return list[i];
}, list.size(), selIdx); }, list.size(), selIdx);
@ -164,8 +171,8 @@ bool ListBox(ox::CStringView name, ox::Span<const ox::String> const&list, size_t
FilePicker::FilePicker( FilePicker::FilePicker(
StudioContext &sctx, StudioContext &sctx,
ox::String title, ox::StringParam title,
ox::String fileExt, ox::StringParam fileExt,
ImVec2 const&size) noexcept: ImVec2 const&size) noexcept:
m_sctx(sctx), m_sctx(sctx),
m_title(std::move(title)), m_title(std::move(title)),