5#include "absl/strings/str_format.h"
7#include "imgui/imgui.h"
8#include "imgui/imgui_internal.h"
18 return GetBaseFontSize() * theme.widget_height_multiplier * theme.compact_factor;
23 return GetBaseFontSize() * 0.5f * theme.spacing_multiplier * theme.compact_factor;
28 return GetBaseFontSize() * theme.toolbar_height_multiplier * theme.compact_factor;
33 return GetBaseFontSize() * 0.5f * theme.panel_padding_multiplier * theme.compact_factor;
38 return GetBaseFontSize() * 8.0f * theme.input_width_multiplier * theme.compact_factor;
43 return GetBaseFontSize() * 0.3f * theme.button_padding_multiplier * theme.compact_factor;
48 return GetBaseFontSize() * theme.table_row_height_multiplier * theme.compact_factor;
53 return GetBaseFontSize() * theme.canvas_toolbar_multiplier * theme.compact_factor;
61 ImGui::BeginChild(label, ImVec2(0, 0),
true);
62 ImGui::Dummy(ImVec2(padding, padding));
65 ImGui::Dummy(ImVec2(0, padding));
77 ImGuiTableFlags flags,
78 const ImVec2& outer_size,
84 ImGui::PushStyleColor(ImGuiCol_TableBorderStrong,
ConvertColorToImVec4(theme.table_border_strong));
85 ImGui::PushStyleColor(ImGuiCol_TableBorderLight,
ConvertColorToImVec4(theme.table_border_light));
90 if (!(flags & ImGuiTableFlags_NoHostExtendY)) {
91 ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,
95 return ImGui::BeginTable(str_id, columns, flags, outer_size, inner_width);
101 ImGui::PopStyleColor(5);
103 ImGui::PopStyleVar(1);
111 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
114 ImGui::BeginChild(label, *canvas_size,
true);
116 ImGui::BeginChild(label, ImVec2(0, 0),
true);
122 ImGui::PopStyleVar(1);
123 ImGui::PopStyleColor(1);
128 size_t buf_size, ImGuiInputTextFlags flags) {
130 return ImGui::InputText(label, buf, buf_size, flags);
134 int step_fast, ImGuiInputTextFlags flags) {
136 return ImGui::InputInt(label, v, step, step_fast, flags);
140 float step_fast,
const char* format,
141 ImGuiInputTextFlags flags) {
143 return ImGui::InputFloat(label, v, step, step_fast, format, flags);
151 ImGui::AlignTextToFramePadding();
152 ImGui::Text(
"%s", label);
156 ImGui::SetNextItemWidth(input_width);
159 snprintf(buf,
sizeof(buf),
"%02X", *data);
161 bool changed = ImGui::InputText(
162 (
"##" + std::string(label)).c_str(), buf,
sizeof(buf),
163 ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_AutoSelectAll);
167 if (sscanf(buf,
"%X", &temp) == 1) {
168 *data =
static_cast<uint8_t
>(temp & 0xFF);
179 ImGui::AlignTextToFramePadding();
180 ImGui::Text(
"%s", label);
184 ImGui::SetNextItemWidth(input_width);
187 snprintf(buf,
sizeof(buf),
"%04X", *data);
189 bool changed = ImGui::InputText(
190 (
"##" + std::string(label)).c_str(), buf,
sizeof(buf),
191 ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_AutoSelectAll);
195 if (sscanf(buf,
"%X", &temp) == 1) {
196 *data =
static_cast<uint16_t
>(temp & 0xFFFF);
207 if (ImGui::BeginTable(label, 2,
208 ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
210 ImGui::TableSetupColumn(
"Property", ImGuiTableColumnFlags_WidthFixed,
212 ImGui::TableSetupColumn(
"Value", ImGuiTableColumnFlags_WidthStretch);
223 ImGui::SetNextItemWidth(compact_width);
225 return ImGui::InputText(label, buf, buf_size,
226 ImGuiInputTextFlags_AutoSelectAll);
233 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,
236 ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
241 ImGui::PopStyleVar(1);
242 ImGui::PopStyleColor(1);
249 ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical);
257 ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,
259 bool result = ImGui::Button(label, size);
260 ImGui::PopStyleVar(1);
266 ImGui::TableNextRow();
267 ImGui::TableSetColumnIndex(0);
268 ImGui::AlignTextToFramePadding();
269 ImGui::Text(
"%s", label);
270 ImGui::TableSetColumnIndex(1);
271 ImGui::SetNextItemWidth(-1);
278 ImGui::SeparatorText(label);
279 ImGui::PopStyleColor(1);
283 ImGui::TextDisabled(
"(?)");
284 if (ImGui::BeginItemTooltip()) {
285 ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
286 ImGui::TextUnformatted(desc);
287 ImGui::PopTextWrapPos();
static void SectionHeader(const char *label)
static float GetPanelPadding()
static void ToolbarSeparator()
static void BeginToolbar(const char *label)
static float GetCanvasToolbarHeight()
static void EndPaddedPanel()
static void EndTableWithTheming()
static void HelpMarker(const char *desc)
static float GetTableRowHeight()
static const EnhancedTheme & GetTheme()
static float GetStandardInputWidth()
static void BeginPropertyGrid(const char *label)
static bool AutoSizedInputFloat(const char *label, float *v, float step=0.0f, float step_fast=0.0f, const char *format="%.3f", ImGuiInputTextFlags flags=0)
static bool AutoSizedInputInt(const char *label, int *v, int step=1, int step_fast=100, ImGuiInputTextFlags flags=0)
static bool InputToolbarField(const char *label, char *buf, size_t buf_size)
static void BeginCanvasPanel(const char *label, ImVec2 *canvas_size=nullptr)
static void PropertyRow(const char *label, std::function< void()> widget_callback)
static float GetBaseFontSize()
static float GetButtonPadding()
static float GetToolbarHeight()
static void BeginPaddedPanel(const char *label, float padding=-1.0f)
static bool ToolbarButton(const char *label, const ImVec2 &size=ImVec2(0, 0))
static bool InputHexRow(const char *label, uint8_t *data)
static float GetStandardWidgetHeight()
static float GetStandardSpacing()
static bool BeginTableWithTheming(const char *str_id, int columns, ImGuiTableFlags flags=0, const ImVec2 &outer_size=ImVec2(0, 0), float inner_width=0.0f)
static void EndCanvasPanel()
static bool AutoSizedInputField(const char *label, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0)
static void EndPropertyGrid()
ImVec4 ConvertColorToImVec4(const Color &color)
Main namespace for the application.