diff --git a/src/UniversalValveToolbox/Model/Dto/AddonDtoModel.cs b/src/UniversalValveToolbox/Model/Dto/AddonDtoModel.cs index 2fb68a7..dc2c3bd 100644 --- a/src/UniversalValveToolbox/Model/Dto/AddonDtoModel.cs +++ b/src/UniversalValveToolbox/Model/Dto/AddonDtoModel.cs @@ -8,6 +8,14 @@ namespace UniversalValveToolbox.Model.Dto { private string name; private string category; + public AddonDtoModel() { + this.engines = new int[0]; + this.args = ""; + this.bin = ""; + this.name = ""; + this.category = ""; + } + public int[] Engines { get => engines; set => UpdateField(value, ref engines); diff --git a/src/UniversalValveToolbox/Model/VIewModel/FormAddonViewModel.cs b/src/UniversalValveToolbox/Model/VIewModel/FormAddonViewModel.cs index cd09d37..d946ab3 100644 --- a/src/UniversalValveToolbox/Model/VIewModel/FormAddonViewModel.cs +++ b/src/UniversalValveToolbox/Model/VIewModel/FormAddonViewModel.cs @@ -8,12 +8,63 @@ using UniversalValveToolbox.Model.Dto; namespace UniversalValveToolbox.Model.ViewModel { class FormAddonViewModel: DtoModel { - private AddonDtoModel selectAddon; + private AddonDtoModel[] addons; + private int selectAddonIndex = 0; - public AddonDtoModel SelectAddon { - get => selectAddon; - set => UpdateField(value, ref selectAddon); + private EngineDtoModel[] engines; + private List arraySelectAddonIndex = new List(); + + public FormAddonViewModel(AddonDtoModel[] addons, EngineDtoModel[] engines) { + this.addons = addons; + this.engines = engines; } + public AddonDtoModel[] Addons { + get => addons; + set { + UpdateField(value, ref addons); + + SelectAddonIndex = 0; + } + } + + public int SelectAddonIndex { + get => selectAddonIndex; + set { + ForceUpdateField(value, ref selectAddonIndex); + OnPropertyChanged(nameof(SelectAddon)); + + var indexs = SelectAddon.Engines; + ArraySelectAddonIndex = indexs; + } + } + + public AddonDtoModel SelectAddon => addons[selectAddonIndex]; + + public EngineDtoModel[] Engines { + get => engines; + set { + UpdateField(value, ref engines); + } + } + + public int[] ArraySelectAddonIndex { + get => arraySelectAddonIndex.ToArray(); + set { + ForceUpdateField(value.ToList(), ref arraySelectAddonIndex); + //OnPropertyChanged(nameof(ArraySelectEngine)); + } + } + + //public EngineDtoModel[] ArraySelectEngine { + // get { + // List result = new List(); + // foreach (var index in arraySelectAddonIndex) { + // result.Add(engines[index]); + // } + + // return result.ToArray(); + // } + //} } } diff --git a/src/UniversalValveToolbox/UI/FormAddons.Designer.cs b/src/UniversalValveToolbox/UI/FormAddons.Designer.cs index 86810cf..a3f84ad 100644 --- a/src/UniversalValveToolbox/UI/FormAddons.Designer.cs +++ b/src/UniversalValveToolbox/UI/FormAddons.Designer.cs @@ -70,6 +70,7 @@ this.buttonOK.TabIndex = 7; this.buttonOK.Text = "OK"; this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); // // comboBox_Addon // @@ -92,6 +93,7 @@ this.buttonRemove.TabIndex = 10; this.buttonRemove.Text = "Remove"; this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); // // buttonNew // @@ -102,6 +104,7 @@ this.buttonNew.TabIndex = 9; this.buttonNew.Text = "New"; this.buttonNew.UseVisualStyleBackColor = true; + this.buttonNew.Click += new System.EventHandler(this.buttonNew_Click); // // labelAddon // @@ -223,6 +226,7 @@ this.buttonApply.TabIndex = 27; this.buttonApply.Text = "Apply"; this.buttonApply.UseVisualStyleBackColor = true; + this.buttonApply.Click += new System.EventHandler(this.buttonApply_Click); // // engineListView // @@ -236,6 +240,7 @@ this.engineListView.UseCompatibleStateImageBehavior = false; this.engineListView.View = System.Windows.Forms.View.List; this.engineListView.SelectedIndexChanged += new System.EventHandler(this.engineListView_SelectedIndexChanged); + this.engineListView.ItemChecked += EngineListView_ItemChecked; // // FormAddons // @@ -273,6 +278,7 @@ } + #endregion private System.Windows.Forms.Button buttonCancel; diff --git a/src/UniversalValveToolbox/UI/FormAddons.cs b/src/UniversalValveToolbox/UI/FormAddons.cs index 63ede46..ba1b8ae 100644 --- a/src/UniversalValveToolbox/UI/FormAddons.cs +++ b/src/UniversalValveToolbox/UI/FormAddons.cs @@ -5,6 +5,8 @@ using UniversalValveToolbox.Model.ViewModel; using UniversalValveToolbox.Model.Dto; using kasthack.binding.wf; using System.Linq; +using System.Collections.Generic; +using UniversalValveToolbox.Utils; namespace UniversalValveToolbox { public partial class FormAddons : Form { @@ -17,17 +19,12 @@ namespace UniversalValveToolbox { public FormAddons() { InitializeComponent(); - model = new FormAddonViewModel(); - model.SelectAddon = new AddonDtoModel(); + model = new FormAddonViewModel(dataProvider.Addons, dataProvider.Engines); - var addons = dataProvider.Addons; - arrayAddon = new AddonDtoModel[addons.Length + 1]; - arrayAddon[0] = model.SelectAddon; - Array.Copy(addons, 0, arrayAddon, 1, addons.Length); + UpdateAddonsComboBox(); + InitEnginesListView(); - comboBox_Addon.Items.Clear(); - comboBox_Addon.Items.AddRange(arrayAddon); - comboBox_Addon.SelectedIndex = 0; + comboBox_Addon.Bind(a => a.SelectedIndex, model, a => a.SelectAddonIndex); textBoxName.Bind(a => a.Text, model, a => a.SelectAddon.Name); textBoxPath.Bind(a => a.Text, model, a => a.SelectAddon.Bin); @@ -37,25 +34,49 @@ namespace UniversalValveToolbox { } private void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { - var availableEngines = dataProvider.Engines.Select(engine => { + UpdateEnginesListView(); + } + + + private void EngineListView_ItemChecked(object sender, System.Windows.Forms.ItemCheckedEventArgs e) { + var listCheckedIndex = new List(); + + if (engineListView.Items == null) + return; + + foreach (ListViewItem item in engineListView.Items) { + if (item?.Checked ?? false) { + listCheckedIndex.Add(item.Index); + } + } + + model.ArraySelectAddonIndex = listCheckedIndex.ToArray(); + } + + + private void InitEnginesListView() { + var checkedEngineListItem = dataProvider.Engines.Select(engine => { var item = new ListViewItem(engine.Name); item.Checked = model.SelectAddon.Engines.Contains(engine.Appid); return item; }).ToArray(); - engineListView.Items.Clear(); - engineListView.Items.AddRange(availableEngines); + engineListView.Items.AddRange(checkedEngineListItem); + } - - - //dataGridViewEngines.Rows.add - //var index = availableEngines.ToList().FindIndex(engine => engine.Appid == model.SelectProject.Engine); + private void UpdateAddonsComboBox() { + comboBox_Addon.Items.Clear(); + comboBox_Addon.Items.AddRange(model.Addons); + comboBox_Addon.SelectedIndex = 0; + } - //comboBoxEngine.Items.Clear(); - //comboBoxEngine.Items.AddRange(availableEngines); + private void UpdateEnginesListView() { + var indexs = model.ArraySelectAddonIndex; - //comboBoxEngine.SelectedIndex = index; + for (var i = 0; i < model.Engines.Length; i++) { + engineListView.Items[i].Checked = indexs.Contains(i); + } } private void buttonCancel_Click(object sender, EventArgs e) { @@ -79,18 +100,61 @@ namespace UniversalValveToolbox { } } - private void FormAddons_Load(object sender, EventArgs e) - { + private void FormAddons_Load(object sender, EventArgs e) { } private void comboBox_Addon_SelectedIndexChanged(object sender, EventArgs e) { - var selectAddon = arrayAddon.First(addon => addon.Name == ((AddonDtoModel)comboBox_Addon.SelectedItem).Name); - model.SelectAddon = selectAddon; + model.SelectAddonIndex = comboBox_Addon.SelectedIndex; } private void engineListView_SelectedIndexChanged(object sender, EventArgs e) { } + + private void Remove() { + var newAddonList = new List(model.Addons); + newAddonList.RemoveAt(model.SelectAddonIndex); + + model.Addons = newAddonList.ToArray(); + + UpdateAddonsComboBox(); + } + + private void New() { + var newAddon = new AddonDtoModel(); + newAddon.Name = ""; + + var newAddonList = new List(model.Addons); + newAddonList.Insert(0, newAddon); + + model.Addons = newAddonList.ToArray(); + + UpdateAddonsComboBox(); + } + + private void Save() { + + + JsonFileUtil.SaveValues(DataProvider.AddonsPath, "json", model.Addons.ToList()); + } + + private void buttonRemove_Click(object sender, EventArgs e) { + Remove(); + } + + private void buttonNew_Click(object sender, EventArgs e) { + New(); + } + + private void buttonApply_Click(object sender, EventArgs e) { + Save(); + } + + private void buttonOK_Click(object sender, EventArgs e) { + Save(); + + Close(); + } } } diff --git a/src/UniversalValveToolbox/UI/FormProfiles.cs b/src/UniversalValveToolbox/UI/FormProfiles.cs index aa5c03c..f751c1a 100644 --- a/src/UniversalValveToolbox/UI/FormProfiles.cs +++ b/src/UniversalValveToolbox/UI/FormProfiles.cs @@ -29,16 +29,9 @@ namespace UniversalValveToolbox { comboBox_Mod.Bind(a => a.SelectedIndex, model, a => a.SelectProjectIndex); comboBoxEngine.Bind(a => a.SelectedIndex, model, a => a.SelectEngineIndex); - - //model.PropertyChanged += Model_PropertyChanged; - - UpdateComboBoxEngine(); - - //comboBox_Mod.SelectedIndex = 0; } private void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { - UpdateComboBoxEngine(); } @@ -111,8 +104,6 @@ namespace UniversalValveToolbox { } private void Save() { - var selectProject = model.SelectProject; - JsonFileUtil.SaveValues(DataProvider.ProjectsPath, "json", model.Projects.ToList()); }