478 lines
16 KiB
C#
478 lines
16 KiB
C#
//
|
|
// BootstrapScriptEditor.cs
|
|
//
|
|
// Author:
|
|
// Michael Becker <alcexhim@gmail.com>
|
|
//
|
|
// Copyright (c) 2020 Mike Becker's Software
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using MBS.Framework;
|
|
using MBS.Framework.Settings;
|
|
using MBS.Framework.UserInterface;
|
|
using MBS.Framework.UserInterface.Controls;
|
|
using MBS.Framework.UserInterface.Controls.ListView;
|
|
using MBS.Framework.UserInterface.Dialogs;
|
|
using UniversalEditor.ObjectModels.Setup.Microsoft.ACME.BootstrapScript;
|
|
using UniversalEditor.UserInterface;
|
|
|
|
namespace UniversalEditor.Plugins.Setup.UserInterface
|
|
{
|
|
[ContainerLayout("~/Editors/Setup/BootstrapScript/BootstrapScriptEditor.glade")]
|
|
public class BootstrapScriptEditor : Editor
|
|
{
|
|
private ListViewControl tvPlatforms;
|
|
private ListViewControl tvParameters;
|
|
private ListViewControl tvFiles;
|
|
|
|
private Toolbar tbPlatforms;
|
|
private Toolbar tbParameters;
|
|
private Toolbar tbFiles;
|
|
|
|
private static EditorReference _er = null;
|
|
public override EditorReference MakeReference()
|
|
{
|
|
if (_er == null)
|
|
{
|
|
_er = base.MakeReference();
|
|
_er.SupportedObjectModels.Add(typeof(BootstrapScriptObjectModel));
|
|
}
|
|
return _er;
|
|
}
|
|
|
|
[EventHandler(nameof(tvPlatforms), "SelectionChanged")]
|
|
private void tvPlatforms_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
tvParameters.Model.Rows.Clear();
|
|
tvFiles.Model.Rows.Clear();
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
|
|
foreach (KeyValuePair<string, string> kvp in os.Parameters)
|
|
{
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvParameters.Model.Columns[0], kvp.Key),
|
|
new TreeModelRowColumn(tvParameters.Model.Columns[1], kvp.Value)
|
|
});
|
|
row.SetExtraData<KeyValuePair<string, string>>("item", kvp);
|
|
tvParameters.Model.Rows.Add(row);
|
|
}
|
|
foreach (BootstrapFile file in os.Files)
|
|
{
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvFiles.Model.Columns[0], file.SourceFileName),
|
|
new TreeModelRowColumn(tvFiles.Model.Columns[1], file.DestinationFileName)
|
|
});
|
|
row.SetExtraData<BootstrapFile>("item", file);
|
|
tvFiles.Model.Rows.Add(row);
|
|
}
|
|
}
|
|
|
|
[EventHandler(nameof(tvPlatforms), "RowActivated")]
|
|
private void tvPlatforms_RowActivated(object sender, ListViewRowActivatedEventArgs e)
|
|
{
|
|
if (e.Row == null) return;
|
|
tsbPlatformEdit_Click(sender, e);
|
|
}
|
|
|
|
private void tsbPlatformAdd_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
SettingsDialog dlg = new SettingsDialog(new SettingsProvider[]
|
|
{
|
|
new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("Platform", new Setting[]
|
|
{
|
|
new TextSetting("Name", "Platform _name")
|
|
})
|
|
})
|
|
});
|
|
|
|
dlg.Text = "Platform Properties";
|
|
dlg.EnableProfiles = false;
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string platformName = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
|
|
BootstrapOperatingSystem os = new BootstrapOperatingSystem();
|
|
os.Name = platformName;
|
|
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvPlatforms.Model.Columns[0], platformName)
|
|
});
|
|
row.SetExtraData<BootstrapOperatingSystem>("item", os);
|
|
tvPlatforms.Model.Rows.Add(row);
|
|
|
|
BeginEdit();
|
|
setup.OperatingSystems.Add(os);
|
|
EndEdit();
|
|
}
|
|
}
|
|
|
|
private void tsbPlatformEdit_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
SettingsDialog dlg = new SettingsDialog(new SettingsProvider[]
|
|
{
|
|
new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("Platform", new Setting[]
|
|
{
|
|
new TextSetting("Name", "Platform _name")
|
|
})
|
|
})
|
|
});
|
|
dlg.Text = "Platform Properties";
|
|
dlg.EnableProfiles = false;
|
|
|
|
dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].SetValue(os.Name);
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string platformName = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
|
|
BeginEdit();
|
|
os.Name = platformName;
|
|
EndEdit();
|
|
|
|
tvPlatforms.SelectedRows[0].RowColumns[0].Value = platformName;
|
|
}
|
|
}
|
|
|
|
private void tsbPlatformRemove_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
if (MessageDialog.ShowDialog("Removing the selected platform will remove all associated parameters and files. Continue?", "Remove Platform", MessageDialogButtons.YesNo, MessageDialogIcon.Warning) != DialogResult.Yes)
|
|
return;
|
|
|
|
BeginEdit();
|
|
setup.OperatingSystems.Remove(os);
|
|
EndEdit();
|
|
|
|
tvPlatforms.Model.Rows.Remove(tvPlatforms.SelectedRows[0]);
|
|
}
|
|
|
|
[EventHandler(nameof(tvParameters), "RowActivated")]
|
|
private void tvParameters_RowActivated(object sender, ListViewRowActivatedEventArgs e)
|
|
{
|
|
if (e.Row == null) return;
|
|
tsbParameterEdit_Click(sender, e);
|
|
}
|
|
|
|
private void tsbParameterAdd_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
SettingsDialog dlg = new SettingsDialog(new SettingsProvider[]
|
|
{
|
|
new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("Parameter", new Setting[]
|
|
{
|
|
new TextSetting("Name", "Parameter _name"),
|
|
new TextSetting("Value", "_Value")
|
|
})
|
|
})
|
|
});
|
|
dlg.Text = "Parameter Properties";
|
|
dlg.EnableProfiles = false;
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string name = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
string value = dlg.SettingsProviders[0].SettingsGroups[0].Settings[1].GetValue()?.ToString();
|
|
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvParameters.Model.Columns[0], name),
|
|
new TreeModelRowColumn(tvParameters.Model.Columns[1], value)
|
|
});
|
|
row.SetExtraData<KeyValuePair<string, string>>("item", new KeyValuePair<string, string>(name, value));
|
|
tvParameters.Model.Rows.Add(row);
|
|
|
|
BeginEdit();
|
|
os.Parameters.Add(name, value);
|
|
EndEdit();
|
|
}
|
|
}
|
|
|
|
private void tsbParameterEdit_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
string oldname = tvParameters.SelectedRows[0].GetExtraData<KeyValuePair<string, string>>("item").Key;
|
|
|
|
SettingsDialog dlg = new SettingsDialog(new SettingsProvider[]
|
|
{
|
|
new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("Parameter", new Setting[]
|
|
{
|
|
new TextSetting("Name", "Parameter _name"),
|
|
new TextSetting("Value", "_Value")
|
|
})
|
|
})
|
|
});
|
|
dlg.Text = "Parameter Properties";
|
|
dlg.EnableProfiles = false;
|
|
|
|
dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].SetValue(oldname);
|
|
dlg.SettingsProviders[0].SettingsGroups[0].Settings[1].SetValue(os.Parameters[oldname]);
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string name = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
string value = dlg.SettingsProviders[0].SettingsGroups[0].Settings[1].GetValue()?.ToString();
|
|
|
|
if (os.Parameters.ContainsKey(oldname))
|
|
{
|
|
os.Parameters.Remove(oldname);
|
|
}
|
|
|
|
BeginEdit();
|
|
os.Parameters[name] = value;
|
|
EndEdit();
|
|
|
|
tvParameters.SelectedRows[0].RowColumns[0].Value = name;
|
|
tvParameters.SelectedRows[0].RowColumns[1].Value = value;
|
|
}
|
|
}
|
|
|
|
private void tsbParameterRemove_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
string name = tvParameters.SelectedRows[0].GetExtraData<KeyValuePair<string, string>>("item").Key;
|
|
|
|
if (MessageDialog.ShowDialog(String.Format("Are you sure you want to remove the '{0}' parameter?", name), "Remove Parameter", MessageDialogButtons.YesNo, MessageDialogIcon.Warning) != DialogResult.Yes)
|
|
return;
|
|
|
|
BeginEdit();
|
|
os.Parameters.Remove(name);
|
|
EndEdit();
|
|
|
|
tvParameters.Model.Rows.Remove(tvParameters.SelectedRows[0]);
|
|
}
|
|
|
|
[EventHandler(nameof(tvFiles), "RowActivated")]
|
|
private void tvFiles_RowActivated(object sender, ListViewRowActivatedEventArgs e)
|
|
{
|
|
if (e.Row == null) return;
|
|
tsbFileEdit_Click(sender, e);
|
|
}
|
|
|
|
private void tsbFileAdd_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
SettingsDialog dlg = new SettingsDialog();
|
|
dlg.Text = "File Properties";
|
|
dlg.EnableProfiles = false;
|
|
|
|
dlg.SettingsProviders.Clear();
|
|
dlg.SettingsProviders.Add(new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("File", new Setting[]
|
|
{
|
|
new FileSetting("SourceFileName", "_Source", null, false),
|
|
new FileSetting("DestinationFileName", "_Destination", null, false)
|
|
})
|
|
}));
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string name = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
string value = dlg.SettingsProviders[0].SettingsGroups[0].Settings[1].GetValue()?.ToString();
|
|
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvFiles.Model.Columns[0], name),
|
|
new TreeModelRowColumn(tvFiles.Model.Columns[1], value)
|
|
});
|
|
|
|
BootstrapFile file = new BootstrapFile();
|
|
file.SourceFileName = name;
|
|
file.DestinationFileName = value;
|
|
row.SetExtraData<BootstrapFile>("item", file);
|
|
tvFiles.Model.Rows.Add(row);
|
|
|
|
BeginEdit();
|
|
os.Files.Add(file);
|
|
EndEdit();
|
|
}
|
|
}
|
|
|
|
private void tsbFileEdit_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
if (tvFiles.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapFile file = tvFiles.SelectedRows[0].GetExtraData<BootstrapFile>("item");
|
|
|
|
SettingsDialog dlg = new SettingsDialog();
|
|
dlg.Text = "File Properties";
|
|
dlg.EnableProfiles = false;
|
|
|
|
dlg.SettingsProviders.Clear();
|
|
dlg.SettingsProviders.Add(new CustomSettingsProvider(new SettingsGroup[]
|
|
{
|
|
new SettingsGroup("File", new Setting[]
|
|
{
|
|
new FileSetting("SourceFileName", "_Source", file.SourceFileName, false),
|
|
new FileSetting("DestinationFileName", "_Destination", file.DestinationFileName, false)
|
|
})
|
|
}));
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string name = dlg.SettingsProviders[0].SettingsGroups[0].Settings[0].GetValue()?.ToString();
|
|
string value = dlg.SettingsProviders[0].SettingsGroups[0].Settings[1].GetValue()?.ToString();
|
|
|
|
BeginEdit();
|
|
file.SourceFileName = name;
|
|
file.DestinationFileName = value;
|
|
EndEdit();
|
|
|
|
tvFiles.SelectedRows[0].RowColumns[0].Value = name;
|
|
tvFiles.SelectedRows[0].RowColumns[1].Value = value;
|
|
}
|
|
}
|
|
|
|
private void tsbFileRemove_Click(object sender, EventArgs e)
|
|
{
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
if (tvPlatforms.SelectedRows.Count < 1) return;
|
|
|
|
BootstrapOperatingSystem os = tvPlatforms.SelectedRows[0].GetExtraData<BootstrapOperatingSystem>("item");
|
|
if (os == null) return;
|
|
|
|
BootstrapFile file = tvFiles.SelectedRows[0].GetExtraData<BootstrapFile>("item");
|
|
|
|
if (MessageDialog.ShowDialog(String.Format("Are you sure you want to remove the '{0}' file?", file.SourceFileName), "Remove File", MessageDialogButtons.YesNo, MessageDialogIcon.Warning) != DialogResult.Yes)
|
|
return;
|
|
|
|
BeginEdit();
|
|
os.Files.Remove(file);
|
|
EndEdit();
|
|
|
|
tvFiles.Model.Rows.Remove(tvFiles.SelectedRows[0]);
|
|
}
|
|
|
|
protected override void OnCreated(EventArgs e)
|
|
{
|
|
base.OnCreated(e);
|
|
|
|
(tbPlatforms.Items["tsbPlatformAdd"] as ToolbarItemButton).Click += tsbPlatformAdd_Click;
|
|
(tbPlatforms.Items["tsbPlatformEdit"] as ToolbarItemButton).Click += tsbPlatformEdit_Click;
|
|
(tbPlatforms.Items["tsbPlatformRemove"] as ToolbarItemButton).Click += tsbPlatformRemove_Click;
|
|
|
|
(tbParameters.Items["tsbParameterAdd"] as ToolbarItemButton).Click += tsbParameterAdd_Click;
|
|
(tbParameters.Items["tsbParameterEdit"] as ToolbarItemButton).Click += tsbParameterEdit_Click;
|
|
(tbParameters.Items["tsbParameterRemove"] as ToolbarItemButton).Click += tsbParameterRemove_Click;
|
|
|
|
(tbFiles.Items["tsbFileAdd"] as ToolbarItemButton).Click += tsbFileAdd_Click;
|
|
(tbFiles.Items["tsbFileEdit"] as ToolbarItemButton).Click += tsbFileEdit_Click;
|
|
(tbFiles.Items["tsbFileRemove"] as ToolbarItemButton).Click += tsbFileRemove_Click;
|
|
|
|
OnObjectModelChanged(e);
|
|
}
|
|
protected override void OnObjectModelChanged(EventArgs e)
|
|
{
|
|
base.OnObjectModelChanged(e);
|
|
|
|
if (!IsCreated) return;
|
|
|
|
tvPlatforms.Model.Rows.Clear();
|
|
tvParameters.Model.Rows.Clear();
|
|
tvFiles.Model.Rows.Clear();
|
|
|
|
BootstrapScriptObjectModel setup = (ObjectModel as BootstrapScriptObjectModel);
|
|
if (setup == null) return;
|
|
|
|
foreach (BootstrapOperatingSystem os in setup.OperatingSystems)
|
|
{
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn(tvPlatforms.Model.Columns[0], os.Name)
|
|
});
|
|
row.SetExtraData<BootstrapOperatingSystem>("item", os);
|
|
tvPlatforms.Model.Rows.Add(row);
|
|
}
|
|
}
|
|
|
|
protected override Selection CreateSelectionInternal(object content)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
public override void UpdateSelections()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
}
|
|
}
|