Add table handling functions: implement AddTableColumn and DrawTable for improved GUI layout
This commit is contained in:
@@ -6,14 +6,9 @@
|
|||||||
|
|
||||||
#include "ImGuiFileDialog/ImGuiFileDialog.h"
|
#include "ImGuiFileDialog/ImGuiFileDialog.h"
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "app/gfx/bitmap.h"
|
|
||||||
#include "app/gfx/snes_palette.h"
|
|
||||||
#include "app/gfx/snes_tile.h"
|
#include "app/gfx/snes_tile.h"
|
||||||
#include "app/gui/canvas.h"
|
|
||||||
#include "app/gui/color.h"
|
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
#include "imgui/imgui_internal.h"
|
#include "imgui/imgui_internal.h"
|
||||||
#include "imgui/misc/cpp/imgui_stdlib.h"
|
|
||||||
|
|
||||||
namespace ImGui {
|
namespace ImGui {
|
||||||
|
|
||||||
@@ -279,7 +274,30 @@ void FileDialogPipeline(absl::string_view display_key,
|
|||||||
ImGuiFileDialog::Instance()->Close();
|
ImGuiFileDialog::Instance()->Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void AddTableColumn(Table &table, const std::string &label, GuiElement element) {
|
||||||
|
table.column_labels.push_back(label);
|
||||||
|
table.column_contents.push_back(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawTable(Table& params) {
|
||||||
|
if (ImGui::BeginTable(params.id, params.num_columns, params.flags, params.size)) {
|
||||||
|
for (int i = 0; i < params.num_columns; ++i)
|
||||||
|
ImGui::TableSetupColumn(params.column_labels[i].c_str());
|
||||||
|
|
||||||
|
for (int i = 0; i < params.num_columns; ++i) {
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
switch (params.column_contents[i].index()) {
|
||||||
|
case 0:
|
||||||
|
std::get<0>(params.column_contents[i])();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ImGui::Text("%s", std::get<1>(params.column_contents[i]).c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace gui
|
} // namespace gui
|
||||||
|
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|||||||
@@ -11,14 +11,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "app/gfx/bitmap.h"
|
|
||||||
#include "app/gfx/snes_palette.h"
|
|
||||||
#include "app/gfx/snes_tile.h"
|
#include "app/gfx/snes_tile.h"
|
||||||
#include "app/gui/canvas.h"
|
|
||||||
#include "app/gui/color.h"
|
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
#include "imgui/misc/cpp/imgui_stdlib.h"
|
|
||||||
#include "imgui_memory_editor.h"
|
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
namespace gui {
|
namespace gui {
|
||||||
@@ -26,26 +20,26 @@ namespace gui {
|
|||||||
constexpr ImVec2 kDefaultModalSize = ImVec2(200, 0);
|
constexpr ImVec2 kDefaultModalSize = ImVec2(200, 0);
|
||||||
constexpr ImVec2 kZeroPos = ImVec2(0, 0);
|
constexpr ImVec2 kZeroPos = ImVec2(0, 0);
|
||||||
|
|
||||||
IMGUI_API bool InputHex(const char* label, uint64_t* data);
|
IMGUI_API bool InputHex(const char *label, uint64_t *data);
|
||||||
IMGUI_API bool InputHex(const char* label, int* data, int num_digits = 4,
|
IMGUI_API bool InputHex(const char *label, int *data, int num_digits = 4,
|
||||||
float input_width = 50.f);
|
float input_width = 50.f);
|
||||||
|
|
||||||
IMGUI_API bool InputHexShort(const char* label, uint32_t* data);
|
IMGUI_API bool InputHexShort(const char *label, uint32_t *data);
|
||||||
IMGUI_API bool InputHexWord(const char* label, uint16_t* data,
|
IMGUI_API bool InputHexWord(const char *label, uint16_t *data,
|
||||||
float input_width = 50.f, bool no_step = false);
|
float input_width = 50.f, bool no_step = false);
|
||||||
IMGUI_API bool InputHexWord(const char* label, int16_t* data,
|
IMGUI_API bool InputHexWord(const char *label, int16_t *data,
|
||||||
float input_width = 50.f, bool no_step = false);
|
float input_width = 50.f, bool no_step = false);
|
||||||
IMGUI_API bool InputHexByte(const char* label, uint8_t* data,
|
IMGUI_API bool InputHexByte(const char *label, uint8_t *data,
|
||||||
float input_width = 50.f, bool no_step = false);
|
float input_width = 50.f, bool no_step = false);
|
||||||
|
|
||||||
IMGUI_API bool InputHexByte(const char* label, uint8_t* data, uint8_t max_value,
|
IMGUI_API bool InputHexByte(const char *label, uint8_t *data, uint8_t max_value,
|
||||||
float input_width = 50.f, bool no_step = false);
|
float input_width = 50.f, bool no_step = false);
|
||||||
|
|
||||||
IMGUI_API bool ListBox(const char* label, int* current_item,
|
IMGUI_API bool ListBox(const char *label, int *current_item,
|
||||||
const std::vector<std::string>& items,
|
const std::vector<std::string> &items,
|
||||||
int height_in_items = -1);
|
int height_in_items = -1);
|
||||||
|
|
||||||
bool InputTileInfo(const char* label, gfx::TileInfo* tile_info);
|
bool InputTileInfo(const char *label, gfx::TileInfo *tile_info);
|
||||||
|
|
||||||
using ItemLabelFlags = enum ItemLabelFlag {
|
using ItemLabelFlags = enum ItemLabelFlag {
|
||||||
Left = 1u << 0u,
|
Left = 1u << 0u,
|
||||||
@@ -55,15 +49,29 @@ using ItemLabelFlags = enum ItemLabelFlag {
|
|||||||
|
|
||||||
IMGUI_API void ItemLabel(absl::string_view title, ItemLabelFlags flags);
|
IMGUI_API void ItemLabel(absl::string_view title, ItemLabelFlags flags);
|
||||||
|
|
||||||
IMGUI_API ImGuiID GetID(const std::string& id);
|
IMGUI_API ImGuiID GetID(const std::string &id);
|
||||||
|
|
||||||
void FileDialogPipeline(absl::string_view display_key,
|
void FileDialogPipeline(absl::string_view display_key,
|
||||||
absl::string_view file_extensions,
|
absl::string_view file_extensions,
|
||||||
std::optional<absl::string_view> button_text,
|
std::optional<absl::string_view> button_text,
|
||||||
std::function<void()> callback);
|
std::function<void()> callback);
|
||||||
|
|
||||||
} // namespace gui
|
using GuiElement = std::variant<std::function<void()>, std::string>;
|
||||||
|
|
||||||
|
struct Table {
|
||||||
|
const char *id;
|
||||||
|
int num_columns;
|
||||||
|
ImGuiTableFlags flags;
|
||||||
|
ImVec2 size;
|
||||||
|
std::vector<std::string> column_labels;
|
||||||
|
std::vector<GuiElement> column_contents;
|
||||||
|
};
|
||||||
|
|
||||||
|
void AddTableColumn(Table &table, const std::string &label, GuiElement element);
|
||||||
|
|
||||||
|
void DrawTable(Table ¶ms);
|
||||||
|
|
||||||
|
} // namespace gui
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user