93 lines
2.5 KiB
C#
93 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
} |