Skip to content

Commit

Permalink
More Editor Tweaking.
Browse files Browse the repository at this point in the history
Added Delete Button,
Messed with layout a bit.
  • Loading branch information
se5a committed May 19, 2024
1 parent 84feedd commit c2e5edd
Show file tree
Hide file tree
Showing 2 changed files with 136 additions and 50 deletions.
158 changes: 109 additions & 49 deletions Pulsar4X/Pulsar4X.Client/ModFileEditing/BluePrintsUI.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using ImGuiNET;
using Pulsar4X.Blueprints;
using Pulsar4X.DataStructures;
Expand All @@ -27,6 +28,8 @@ public abstract class BluePrintsUI
private protected string[] _constrGuiHints;
private protected string[] _mountTypes;
private protected string[] _guiHints;

private protected Vector2 _childSize = new Vector2(640, 200);
protected BluePrintsUI(ModDataStore modDataStore)
{
_modDataStore = modDataStore;
Expand All @@ -50,8 +53,11 @@ protected BluePrintsUI(ModDataStore modDataStore)
_constrGuiHints = Enum.GetNames(typeof(ConstructableGuiHints));
_guiHints = Enum.GetNames(typeof(GuiHint));



}


public abstract void Refresh();

public void Display(string label)
{
Expand All @@ -63,26 +69,35 @@ public void Display(string label)
ImGui.Button("SaveAs");
ImGui.SameLine();
ImGui.Button("SaveToMemory");
ImGui.BeginChild(label);

ImGui.BeginChild(label,_childSize, true);

ImGui.Columns(2);
ImGui.SetColumnWidth(0,150);
ImGui.SetColumnWidth(1,500);
//ImGui.NextColumn();

//ImGui.NextColumn();

foreach (var item in _itemBlueprints)
{
ImGui.Text(_itemNames[i]);
ImGui.NextColumn();
if(ImGui.Checkbox("Edit##"+_itemNames[i], ref _isActive[i]));
//if(ImGui.Checkbox("Edit##" + label + item.UniqueID, ref _isActive[i]));
if(ImGui.Button("Edit##" + label + item.UniqueID))
{
_isActive[i] = !_isActive[i];
}
ImGui.SameLine();
if(ImGui.Button("Delete##" + label + item.UniqueID))
{
removeAtIndex(i);
break;
}
DisplayEditorWindow(i);
ImGui.NextColumn();
i++;
}
NewItem("+##"+label, _newEmpty);
ImGui.EndChild();
ImGui.TreePop();
}
}

Expand All @@ -100,32 +115,53 @@ public void NewItem(string label, Blueprint newBlueprint)
_isActive[^1] = true;
}
}

void removeAtIndex(int index)
{
int newlen = _itemBlueprints.Length - 1;
Blueprint[] newArray = new Blueprint[newlen];
int i = 0;
foreach (var item in _itemBlueprints)
{
if(i == index)
{
index = -1;
continue;
}
newArray[i] = item;
i++;
}

_itemBlueprints = newArray;
Refresh();
}
}

public class TechCatBlueprintUI : BluePrintsUI
{

public TechCatBlueprintUI(ModDataStore modDataStore) : base(modDataStore)
{
Dictionary<string, TechCategoryBlueprint> blueprints = _modDataStore.TechCategories;

_itemNames = new string[blueprints.Count];
_itemBlueprints = new Blueprint[blueprints.Count];
_isActive = new bool[blueprints.Count];
_itemBlueprints = blueprints.Values.ToArray();
Refresh();
}

public sealed override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var kvp in blueprints)
foreach (TechCategoryBlueprint item in _itemBlueprints)
{
_itemNames[i] = kvp.Value.Name;
_itemBlueprints[i] = kvp.Value;
_itemNames[i] = item.Name;
_isActive[i] = false;
i++;
}

var newEmpty = new TechCategoryBlueprint();
newEmpty.Name = "New Blueprint";
_newEmpty = newEmpty;
}

public override void DisplayEditorWindow(int selectedIndex)
{
if(!_isActive[selectedIndex])
Expand Down Expand Up @@ -163,15 +199,18 @@ public class TechBlueprintUI : BluePrintsUI
public TechBlueprintUI(ModDataStore modDataStore) : base(modDataStore)
{
var blueprints = modDataStore.Techs;

_itemNames = new string[blueprints.Count];
_itemBlueprints = new Blueprint[blueprints.Count];
_isActive = new bool[blueprints.Count];
_itemBlueprints = blueprints.Values.ToArray();
Refresh();
}

public override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var kvp in blueprints)
foreach (TechBlueprint item in _itemBlueprints)
{
_itemNames[i] = kvp.Value.Name;
_itemBlueprints[i] = kvp.Value;
_itemNames[i] = item.Name;
_isActive[i] = false;
i++;
}
Expand Down Expand Up @@ -277,14 +316,17 @@ public class ComponentBluprintUI : BluePrintsUI
public ComponentBluprintUI(ModDataStore modDataStore) : base(modDataStore)
{
Dictionary<string, ComponentTemplateBlueprint> blueprints = modDataStore.ComponentTemplates;
_itemNames = new string[blueprints.Count];
_itemBlueprints = new Blueprint[blueprints.Count];
_isActive = new bool[blueprints.Count];
_itemBlueprints = blueprints.Values.ToArray();
Refresh();
}
public sealed override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var kvp in blueprints)
foreach (ComponentTemplateBlueprint item in _itemBlueprints)
{
_itemNames[i] = kvp.Value.Name;
_itemBlueprints[i] = kvp.Value;
_itemNames[i] = item.Name;
_isActive[i] = false;
i++;
}
Expand Down Expand Up @@ -397,19 +439,21 @@ public class ArmorBlueprintUI : BluePrintsUI
public ArmorBlueprintUI(ModDataStore modDataStore) : base(modDataStore)
{
Dictionary<string, ArmorBlueprint> blueprints = _modDataStore.Armor;

_itemNames = new string[blueprints.Count];
_itemBlueprints = new Blueprint[blueprints.Count];
_isActive = new bool[blueprints.Count];
_itemBlueprints = blueprints.Values.ToArray();
Refresh();
}

public sealed override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var kvp in blueprints)
foreach (ArmorBlueprint item in _itemBlueprints)
{
_itemNames[i] = kvp.Value.UniqueID;
_itemBlueprints[i] = kvp.Value;
_itemNames[i] = item.UniqueID;
_isActive[i] = false;
i++;
}

var newEmpty = new ArmorBlueprint();
newEmpty.UniqueID = "New Blueprint";
_newEmpty = newEmpty;
Expand Down Expand Up @@ -470,15 +514,18 @@ public class ProcessedMateralsUI : BluePrintsUI
public ProcessedMateralsUI(ModDataStore modDataStore) : base(modDataStore)
{
var blueprints = modDataStore.ProcessedMaterials;

_itemNames = new string[blueprints.Count];
_itemBlueprints = new Blueprint[blueprints.Count];
_isActive = new bool[blueprints.Count];
_itemBlueprints = blueprints.Values.ToArray();
Refresh();
}

public sealed override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var kvp in blueprints)
foreach (ProcessedMaterialBlueprint item in _itemBlueprints)
{
_itemNames[i] = kvp.Value.Name;
_itemBlueprints[i] = kvp.Value;
_itemNames[i] = item.Name;
_isActive[i] = false;
i++;
}
Expand Down Expand Up @@ -638,10 +685,19 @@ public AttributeBlueprintUI(ModDataStore modDataStore, ComponentTemplateBlueprin
else
_blueprints = new ComponentTemplateAttributeBlueprint[1];

_itemNames = new string[_blueprints.Length];
_isActive = new bool[_blueprints.Length];
Refresh();


}



public sealed override void Refresh()
{
_itemNames = new string[_itemBlueprints.Length];
_isActive = new bool[_itemBlueprints.Length];
int i = 0;
foreach (var item in _blueprints)
foreach (TechCategoryBlueprint item in _itemBlueprints)
{
if (item is null)
_itemNames[i] = "?";
Expand All @@ -650,10 +706,14 @@ public AttributeBlueprintUI(ModDataStore modDataStore, ComponentTemplateBlueprin
_isActive[i] = false;
i++;
}
var newEmpty = new TechCategoryBlueprint();
newEmpty.Name = "New Blueprint";
_newEmpty = newEmpty;

var type = typeof(IComponentDesignAttribute);
var attributeTypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
_attributeTypeNames = new string[attributeTypes.Count()];
_attributeFullNames = new string[attributeTypes.Count()];
i = 0;
Expand Down
28 changes: 27 additions & 1 deletion Pulsar4X/Pulsar4X.Client/ModFileEditing/EditorWidgets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,25 @@ public static bool Display(string label, ref Dictionary<int, List<string>> dict,
_editingID = null;
}
}

if (dict.Count == 0)
{
if(_editingID != label+"addKey")
{
if (ImGui.Button("+"))
{
_editingID = label+"addKey";
}
}
else
{
_addnum = dict.Keys.Count;
while (dict.ContainsKey(_addnum))
_addnum++;
_editingID = null;
}
}

if(_addnum > -1) //do this here so we don't add in the middle of foreach
dict.Add(_addnum, new List<string>());

Expand Down Expand Up @@ -244,6 +263,13 @@ public static bool Display(string label, ref Dictionary<string, long> dict)
}
ImGui.NextColumn();
}

if (ImGui.Button("+##addkey" + label))
{
dict.Add("???", 0);
}


ImGui.Columns(0);
ImGui.NewLine();
ImGui.EndChild();
Expand All @@ -262,7 +288,7 @@ public static class SelectFromListWiget
public static bool Display(string label, string[] selectFrom, ref int selected)
{
bool hasChanged = false;
string displayText = "";
string displayText = "null";
if(selected > -1)
displayText = selectFrom[selected];
if (label != _editingID)
Expand Down

0 comments on commit c2e5edd

Please sign in to comment.