update editor addons

This commit is contained in:
Alex Z 2020-02-10 06:30:38 +03:00
parent b563fa5117
commit b745c51b95
5 changed files with 156 additions and 36 deletions

View File

@ -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);

View File

@ -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<int> arraySelectAddonIndex = new List<int>();
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<EngineDtoModel> result = new List<EngineDtoModel>();
// foreach (var index in arraySelectAddonIndex) {
// result.Add(engines[index]);
// }
// return result.ToArray();
// }
//}
}
}

View File

@ -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;

View File

@ -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<int>();
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<AddonDtoModel>(model.Addons);
newAddonList.RemoveAt(model.SelectAddonIndex);
model.Addons = newAddonList.ToArray();
UpdateAddonsComboBox();
}
private void New() {
var newAddon = new AddonDtoModel();
newAddon.Name = "<new addon>";
var newAddonList = new List<AddonDtoModel>(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();
}
}
}

View File

@ -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());
}