Lots of SzGui work

This commit is contained in:
2026-02-25 00:08:27 -06:00
parent e6749c51c4
commit dad80e30da
20 changed files with 968 additions and 22 deletions

View File

@@ -0,0 +1,93 @@
using ImGuiNET;
using System.Numerics;
using SzCore;
using SzCore.DataObjects;
namespace SzGui.Windows;
public class SzDataObjectEditorWindow : SzGuiWindowBase
{
private readonly SzDataset _dataset;
private readonly SzDataObject _dataObject;
private bool _isDirty = false;
public SzDataObjectEditorWindow(SzDataset dataset, SzDataObject dataObject)
{
_dataset = dataset;
_dataObject = dataObject;
WindowName = $"Editing: {dataObject.Name} ({dataset.Name})";
}
protected override void RenderContent()
{
ImGui.TextDisabled($"ID: {_dataObject.Id}");
ImGui.SeparatorText("Fields");
foreach (var field in _dataObject.Fields.Values)
{
DrawFieldInput(field);
}
ImGui.Separator();
if (ImGui.Button("Save Object", new Vector2(120, 30)))
{
Save();
}
if (_isDirty)
{
ImGui.SameLine();
ImGui.TextColored(new Vector4(1, 0.5f, 0, 1), "Unsaved changes...");
}
}
private void DrawFieldInput(SzField field)
{
string label = $"{field.Id}##{field.Id}";
string val = field.Value ?? "";
switch (field.FieldType)
{
case SzFieldType.Text:
if (ImGui.InputText(label, ref val, 1024))
{
field.Value = val;
_isDirty = true;
}
break;
case SzFieldType.Bool:
bool bVal = val.ToLower() == "true";
if (ImGui.Checkbox(label, ref bVal))
{
field.Value = bVal.ToString().ToLower();
_isDirty = true;
}
break;
case SzFieldType.Number:
// Handling numbers as strings in the DataObject, but using DragFloat for UX
float.TryParse(val, out float fVal);
if (ImGui.DragFloat(label, ref fVal))
{
field.Value = fVal.ToString();
_isDirty = true;
}
break;
default:
ImGui.Text($"{field.Id}: {val} (Unsupported Type: {field.FieldType})");
break;
}
}
private async void Save()
{
var result = await SZ.DataHandler.SaveDatasetAsync(_dataset);
if (result.IsSuccess)
{
_isDirty = false;
}
}
}