Lots of SzGui work
This commit is contained in:
93
SzGui/Windows/SzDataObjectEditorWindow.cs
Normal file
93
SzGui/Windows/SzDataObjectEditorWindow.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user