diff --git a/Pulsar4X/Pulsar4X.Client/ModFileEditing/BluePrintsUI.cs b/Pulsar4X/Pulsar4X.Client/ModFileEditing/BluePrintsUI.cs index 5de60033a..9f505c3b6 100644 --- a/Pulsar4X/Pulsar4X.Client/ModFileEditing/BluePrintsUI.cs +++ b/Pulsar4X/Pulsar4X.Client/ModFileEditing/BluePrintsUI.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; using ImGuiNET; using Pulsar4X.Blueprints; using Pulsar4X.DataStructures; @@ -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; @@ -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) { @@ -63,19 +69,27 @@ 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(); @@ -83,6 +97,7 @@ public void Display(string label) } NewItem("+##"+label, _newEmpty); ImGui.EndChild(); + ImGui.TreePop(); } } @@ -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 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]) @@ -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++; } @@ -277,14 +316,17 @@ public class ComponentBluprintUI : BluePrintsUI public ComponentBluprintUI(ModDataStore modDataStore) : base(modDataStore) { Dictionary 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++; } @@ -397,19 +439,21 @@ public class ArmorBlueprintUI : BluePrintsUI public ArmorBlueprintUI(ModDataStore modDataStore) : base(modDataStore) { Dictionary 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; @@ -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++; } @@ -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] = "?"; @@ -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; diff --git a/Pulsar4X/Pulsar4X.Client/ModFileEditing/EditorWidgets.cs b/Pulsar4X/Pulsar4X.Client/ModFileEditing/EditorWidgets.cs index f0b54f7e7..371c37b4b 100644 --- a/Pulsar4X/Pulsar4X.Client/ModFileEditing/EditorWidgets.cs +++ b/Pulsar4X/Pulsar4X.Client/ModFileEditing/EditorWidgets.cs @@ -170,6 +170,25 @@ public static bool Display(string label, ref Dictionary> 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()); @@ -244,6 +263,13 @@ public static bool Display(string label, ref Dictionary dict) } ImGui.NextColumn(); } + + if (ImGui.Button("+##addkey" + label)) + { + dict.Add("???", 0); + } + + ImGui.Columns(0); ImGui.NewLine(); ImGui.EndChild(); @@ -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)