manager: tree view & action set infos editor panel
This commit is contained in:
@@ -7,8 +7,6 @@ using Pilz.Plugins.Advanced;
|
||||
using Pilz.Plugins.Advanced.UI.WinForms.Telerik;
|
||||
using Pilz.UI.Symbols;
|
||||
using Pilz.UI.WinForms.Extensions;
|
||||
using Pilz.UI.WinForms.Telerik.Dialogs;
|
||||
using Pilz.UI.WinForms.Telerik.Extensions;
|
||||
using Telerik.WinControls;
|
||||
using Telerik.WinControls.UI;
|
||||
|
||||
@@ -19,13 +17,14 @@ public partial class MainForm : RadForm, IMainApi
|
||||
private record RecentFilesItemTag(WorkspaceConfig Config, WorkspaceFeature Feature);
|
||||
private record WorkspaceTag(IWorkspace Workspace, WorkspaceFeature Feature);
|
||||
|
||||
private bool loadingMainView;
|
||||
private WorkspaceTag? wsInfo;
|
||||
private InstallAction? tempAction;
|
||||
|
||||
Form IMainApi.MainWindow => this;
|
||||
IWorkspace? IMainApi.CurWorkspace => wsInfo?.Workspace;
|
||||
|
||||
public IActionSetInfos? CurActionSet => radListControl_Updates.SelectedValue as IActionSetInfos;
|
||||
public IActionSetInfos? CurActionSet => radTreeView_Sets.SelectedNode?.Tag as IActionSetInfos;
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
@@ -37,7 +36,6 @@ public partial class MainForm : RadForm, IMainApi
|
||||
//radMenuItem_OpenNewWorkspace.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.new_window, SymbolSize.Small);
|
||||
//radMenuItem_RecentWorkspaces.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.time_machine, SymbolSize.Small);
|
||||
radMenuItem_Updates.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.update_done, SymbolSize.Small);
|
||||
radMenuItem_EditUpdate.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.edit, SymbolSize.Small);
|
||||
radMenuItem_CreateUpdate.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.add, SymbolSize.Small);
|
||||
radMenuItem_RemoveUpdate.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.remove, SymbolSize.Small);
|
||||
radMenuItem_Tools.SvgImage = Program.Symbols.GetSvgImage(AppSymbols.tools, SymbolSize.Small);
|
||||
@@ -119,47 +117,74 @@ public partial class MainForm : RadForm, IMainApi
|
||||
|
||||
radWaitingBar_Updates.StartWaiting();
|
||||
Text = wsInfo.Workspace.Config.DisplayText;
|
||||
radListControl_Updates.BeginUpdate();
|
||||
radListControl_Updates.Items.Clear();
|
||||
radTreeView_Sets.BeginUpdate();
|
||||
radTreeView_Sets.Nodes.Clear();
|
||||
|
||||
AddUpdateItem(wsInfo.Workspace.InstallInfos);
|
||||
wsInfo.Workspace.UpdateInfos.Updates.ForEach(n => AddUpdateItem(n));
|
||||
var nodeUpdates = new RadTreeNode
|
||||
{
|
||||
Text = "Updates",
|
||||
Name = "updates",
|
||||
SvgImage = Program.Symbols.GetSvgImage(AppSymbols.update_done, SymbolSize.Small),
|
||||
};
|
||||
wsInfo.Workspace.UpdateInfos.Updates.ForEach(n => AddUpdateItem(n, nodeUpdates.Nodes));
|
||||
radTreeView_Sets.Nodes.Add(nodeUpdates);
|
||||
|
||||
radListControl_Updates.EndUpdate();
|
||||
radTreeView_Sets.EndUpdate();
|
||||
radWaitingBar_Updates.StopWaiting();
|
||||
}
|
||||
|
||||
private RadListDataItem AddUpdateItem(IActionSetInfos infos)
|
||||
private RadTreeNode AddUpdateItem(IActionSetInfos infos)
|
||||
{
|
||||
return AddUpdateItem(infos, radTreeView_Sets.Nodes);
|
||||
}
|
||||
|
||||
private RadTreeNode AddUpdateItem(IActionSetInfos infos, RadTreeNodeCollection parent)
|
||||
{
|
||||
var item = CreateUpdateItem(infos);
|
||||
radListControl_Updates.Items.Add(item);
|
||||
parent.Add(item);
|
||||
return item;
|
||||
}
|
||||
|
||||
private RadListDataItem InsertUpdateItem(IActionSetInfos infos)
|
||||
private RadTreeNode InsertUpdateItem(IActionSetInfos infos)
|
||||
{
|
||||
var item = CreateUpdateItem(infos);
|
||||
radListControl_Updates.Items.Insert(Math.Min(1, radListControl_Updates.Items.Count), item);
|
||||
var nodeUpdates = radTreeView_Sets.Nodes["updates"];
|
||||
nodeUpdates.Nodes.Insert(Math.Min(1, nodeUpdates.Nodes.Count), item);
|
||||
return item;
|
||||
}
|
||||
|
||||
private RadListDataItem CreateUpdateItem(IActionSetInfos infos)
|
||||
private RadTreeNode CreateUpdateItem(IActionSetInfos infos)
|
||||
{
|
||||
var item = new RadListDataItem();
|
||||
var item = new RadTreeNode();
|
||||
UpdateUpdateItem(item, infos);
|
||||
return item;
|
||||
}
|
||||
|
||||
private void UpdateUpdateItem(RadListDataItem item)
|
||||
private void UpdateUpdateItem(RadTreeNode item)
|
||||
{
|
||||
if (item.Value is IActionSetInfos infos)
|
||||
if (item.Tag is IActionSetInfos infos)
|
||||
UpdateUpdateItem(item, infos);
|
||||
}
|
||||
|
||||
private void UpdateUpdateItem(RadListDataItem item, IActionSetInfos infos)
|
||||
private void SaveActionsSet()
|
||||
{
|
||||
if (item.Value != infos)
|
||||
item.Value = infos;
|
||||
if (loadingMainView || CurActionSet is not IActionSetInfos infos)
|
||||
return;
|
||||
|
||||
if (!Version.TryParse(radTextBoxControl_Version.Text.Trim(), out Version? version))
|
||||
version = new Version("1.0.0.0");
|
||||
|
||||
infos.Version = version;
|
||||
infos.IsPublic = radCheckBox_IsPublic.Checked;
|
||||
|
||||
UpdateUpdateItem(radTreeView_Sets.SelectedNode);
|
||||
}
|
||||
|
||||
private void UpdateUpdateItem(RadTreeNode item, IActionSetInfos infos)
|
||||
{
|
||||
if (item.Tag != infos)
|
||||
item.Tag = infos;
|
||||
|
||||
if (infos is UpdateInfo)
|
||||
item.Text = string.Format(GeneralLangRes.Node_Update, infos.Version?.ToString() ?? "?");
|
||||
@@ -173,9 +198,10 @@ public partial class MainForm : RadForm, IMainApi
|
||||
|
||||
public void UpdateItem(IActionSetInfos actionSetInfos)
|
||||
{
|
||||
RadListDataItem? item = null;
|
||||
RadTreeNode? item = null;
|
||||
var nodeUpdates = radTreeView_Sets.Nodes["updates"];
|
||||
|
||||
foreach (var iitem in radListControl_Updates.Items)
|
||||
foreach (var iitem in nodeUpdates.Nodes)
|
||||
{
|
||||
if (item == null && iitem.Value == actionSetInfos)
|
||||
item = iitem;
|
||||
@@ -184,7 +210,7 @@ public partial class MainForm : RadForm, IMainApi
|
||||
if (item == null)
|
||||
InsertUpdateItem(actionSetInfos);
|
||||
else if (wsInfo?.Workspace.UpdateInfos != null && !wsInfo.Workspace.UpdateInfos.Updates.Contains(actionSetInfos))
|
||||
radListControl_Updates.Items.Remove(item);
|
||||
item.Remove();
|
||||
else
|
||||
UpdateUpdateItem(item);
|
||||
}
|
||||
@@ -198,7 +224,29 @@ public partial class MainForm : RadForm, IMainApi
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadActionSet(IActionSetInfos infos)
|
||||
private void LoadMainView()
|
||||
{
|
||||
loadingMainView = true;
|
||||
|
||||
tableLayoutPanel_ActionSet.Visible = false;
|
||||
tableLayoutPanel_ActionSetInfo.Visible = false;
|
||||
|
||||
if (CurActionSet is IActionSet set)
|
||||
{
|
||||
if (set is IActionSetInfos infos)
|
||||
{
|
||||
radTextBoxControl_Version.Text = infos.Version?.ToString();
|
||||
radCheckBox_IsPublic.Checked = infos.IsPublic;
|
||||
tableLayoutPanel_ActionSetInfo.Visible = true;
|
||||
}
|
||||
tableLayoutPanel_ActionSet.Visible = true;
|
||||
LoadActionSet(set);
|
||||
}
|
||||
|
||||
loadingMainView = false;
|
||||
}
|
||||
|
||||
private void LoadActionSet(IActionSet infos)
|
||||
{
|
||||
radGridView_Actions.BeginUpdate();
|
||||
radGridView_Actions.Rows.Clear();
|
||||
@@ -263,6 +311,12 @@ public partial class MainForm : RadForm, IMainApi
|
||||
Width = 50,
|
||||
IsVisible = infos is UpdateInfo,
|
||||
},
|
||||
new GridViewTextBoxColumn
|
||||
{
|
||||
Name = "destpath",
|
||||
HeaderText = ActionsListLangRes.Col_DestPath,
|
||||
Width = 250,
|
||||
},
|
||||
new GridViewComboBoxColumn
|
||||
{
|
||||
Name = "srctype",
|
||||
@@ -314,12 +368,6 @@ public partial class MainForm : RadForm, IMainApi
|
||||
IsVisible = infos is UpdateInfo,
|
||||
},
|
||||
new GridViewTextBoxColumn
|
||||
{
|
||||
Name = "destpath",
|
||||
HeaderText = ActionsListLangRes.Col_DestPath,
|
||||
Width = 250,
|
||||
},
|
||||
new GridViewTextBoxColumn
|
||||
{
|
||||
Name = "website",
|
||||
HeaderText = ActionsListLangRes.Col_Website,
|
||||
@@ -409,10 +457,9 @@ public partial class MainForm : RadForm, IMainApi
|
||||
func.Execute(new MainApiParameters(this));
|
||||
}
|
||||
|
||||
private void RadListControl_Updates_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
|
||||
private void RadTreeView_Sets_SelectedNodeChanged(object sender, RadTreeViewEventArgs e)
|
||||
{
|
||||
if (radListControl_Updates.Items.ElementAtOrDefault(e.Position)?.Value is IActionSetInfos infos)
|
||||
LoadActionSet(infos);
|
||||
LoadMainView();
|
||||
}
|
||||
|
||||
private void RadGridView_Actions_CellFormatting(object sender, CellFormattingEventArgs e)
|
||||
@@ -537,36 +584,29 @@ public partial class MainForm : RadForm, IMainApi
|
||||
|
||||
private void RadMenuItem_Updates_DropDownOpening(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
radMenuItem_EditUpdate.Enabled = radListControl_Updates.SelectedItem?.Value is IActionSetInfos;
|
||||
radMenuItem_RemoveUpdate.Enabled = radListControl_Updates.SelectedItem?.Value is UpdateInfo;
|
||||
}
|
||||
|
||||
private void RadMenuItem_EditUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (radListControl_Updates.SelectedItem?.Value is IActionSetInfos infos
|
||||
&& RadDialogBase.ShowDialog(new UpdatePropertiesEditorFlyout(infos), TitlesLangRes.EditUpdate, Program.Symbols.GetSvgImage(AppSymbols.edit, SymbolSize.Small)).IsValid())
|
||||
UpdateUpdateItem(radListControl_Updates.SelectedItem);
|
||||
radMenuItem_RemoveUpdate.Enabled = radTreeView_Sets.SelectedNode?.Tag is UpdateInfo;
|
||||
}
|
||||
|
||||
private void RadMenuItem_CreateUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
var infos = new UpdateInfo();
|
||||
if (wsInfo?.Workspace.UpdateInfos is null)
|
||||
return;
|
||||
|
||||
if (wsInfo?.Workspace.UpdateInfos is not null
|
||||
&& RadDialogBase.ShowDialog(new UpdatePropertiesEditorFlyout(infos), TitlesLangRes.EditUpdate, Program.Symbols.GetSvgImage(AppSymbols.edit, SymbolSize.Small)).IsValid())
|
||||
var infos = new UpdateInfo
|
||||
{
|
||||
wsInfo.Workspace.UpdateInfos.Updates.Insert(0, infos);
|
||||
InsertUpdateItem(infos);
|
||||
}
|
||||
Version = wsInfo.Workspace.InstallInfos?.Version,
|
||||
};
|
||||
wsInfo.Workspace.UpdateInfos.Updates.Insert(0, infos);
|
||||
InsertUpdateItem(infos);
|
||||
}
|
||||
|
||||
private void RadMenuItem_RemoveUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (radListControl_Updates.SelectedItem?.Value is UpdateInfo infos && wsInfo?.Workspace.UpdateInfos is not null
|
||||
if (radTreeView_Sets.SelectedNode?.Tag is UpdateInfo infos && wsInfo?.Workspace.UpdateInfos is not null
|
||||
&& RadMessageBox.Show(MsgBoxLangRes.RemoveUpdate, MsgBoxLangRes.RemoveUpdate_Title, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation).IsYes())
|
||||
{
|
||||
wsInfo.Workspace.UpdateInfos.Updates.Remove(infos);
|
||||
radListControl_Updates.Items.Remove(radListControl_Updates.SelectedItem);
|
||||
radTreeView_Sets.SelectedNode.Remove();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -598,4 +638,14 @@ public partial class MainForm : RadForm, IMainApi
|
||||
PluginFeatureController.Instance.Functions.Get(FeatureTypes.ActionsContextMenu).InsertItemsTo(e.ContextMenu.Items, customClickHandler: RadMenuItem_ToolsItem_Click, insertPrioSplitters: true);
|
||||
}
|
||||
}
|
||||
|
||||
private void RadTextBoxControl1_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
SaveActionsSet();
|
||||
}
|
||||
|
||||
private void RadCheckBox1_ToggleStateChanged(object sender, StateChangedEventArgs args)
|
||||
{
|
||||
SaveActionsSet();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user