|
@@ -39,6 +39,8 @@ namespace PRSDesktop
|
|
|
{
|
|
|
public string Name { get; set; }
|
|
|
|
|
|
+ public string Group { get; set; }
|
|
|
+
|
|
|
[NullEditor]
|
|
|
public string Layout { get; set; }
|
|
|
}
|
|
@@ -126,6 +128,16 @@ namespace PRSDesktop
|
|
|
|
|
|
public void CreateToolbarButtons(IPanelHost host)
|
|
|
{
|
|
|
+ host.CreateSetupAction("Manage Custom Dashboards", null, ManageCustomDashboards_Click);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ManageCustomDashboards_Click(PanelAction action)
|
|
|
+ {
|
|
|
+ var config = new GlobalConfiguration<GlobalUtilityDashboardSettings>();
|
|
|
+ var settings = config.Load();
|
|
|
+
|
|
|
+ var grid = new CustomDashboardGrid();
|
|
|
+ grid.Items = settings.CustomDashboards;
|
|
|
}
|
|
|
|
|
|
private void SaveSettings()
|
|
@@ -609,21 +621,21 @@ namespace PRSDesktop
|
|
|
|
|
|
foreach(var widget in GetVisibleDashboardElements())
|
|
|
{
|
|
|
- grid.AddElement(widget.DashboardElement, widget.WidgetCaption, widget.GroupCaption, true);
|
|
|
+ grid.AddElementType(widget.DashboardElement, widget.WidgetCaption, widget.GroupCaption, true);
|
|
|
}
|
|
|
|
|
|
var customDashboards = new GlobalConfiguration<GlobalUtilityDashboardSettings>().Load().CustomDashboards;
|
|
|
- grid.AddElement(typeof(CustomDashboardElement), "Custom", "Custom", visible: false);
|
|
|
foreach(var customDashboard in customDashboards)
|
|
|
{
|
|
|
- grid.AddElementAction(customDashboard.Name, null, "Custom", customDashboard, AddCustom_Click);
|
|
|
+ grid.AddElementType(typeof(CustomDashboardElement), customDashboard.Name, customDashboard.Group.NotWhiteSpaceOr("Custom"), customDashboard, AddCustom_Click, allowduplicate: true);
|
|
|
}
|
|
|
- grid.AddElementAction<object?>("Create New", InABox.Wpf.Resources.add, "Custom", null, CreateNewCustom_Click);
|
|
|
+ grid.AddElementAction<object?>("Create New", InABox.Wpf.Resources.add, "", null, CreateNewCustom_Click);
|
|
|
|
|
|
grid.ShowBorders = false;
|
|
|
grid.OnCreateElement += OnCreateElement;
|
|
|
grid.OnAfterDesign += OnAfterDesign;
|
|
|
grid.OnAfterRender += OnAfterRender;
|
|
|
+ grid.CustomiseElementContextMenu += Grid_CustomiseElementContextMenu;
|
|
|
|
|
|
grid.Mode = FormMode.Preview;
|
|
|
|
|
@@ -644,58 +656,78 @@ namespace PRSDesktop
|
|
|
return border;
|
|
|
}
|
|
|
|
|
|
- private DFLayoutElement? AddCustom_Click(CustomDashboard dashboard)
|
|
|
+ private void Grid_CustomiseElementContextMenu(ContextMenu menu, DFLayoutElement element)
|
|
|
{
|
|
|
- var element = new CustomDashboardElement();
|
|
|
- element.Properties = new CustomDashboardProperties
|
|
|
+ if(element is CustomDashboardElement dashboardElement)
|
|
|
{
|
|
|
- DashboardName = dashboard.Name
|
|
|
- };
|
|
|
- return element;
|
|
|
+ menu.AddItem("Edit Dashboard", null, dashboardElement, EditDashboard_Click);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- private DFLayoutElement? CreateNewCustom_Click(object? tag)
|
|
|
+ private void EditDashboard_Click(CustomDashboardElement element)
|
|
|
{
|
|
|
- var grid = new Grid();
|
|
|
- grid.AddRow(GridUnitType.Auto);
|
|
|
- grid.AddRow(GridUnitType.Auto);
|
|
|
- grid.AddRow(GridUnitType.Star);
|
|
|
-
|
|
|
- grid.AddColumn(GridUnitType.Auto);
|
|
|
- grid.AddColumn(GridUnitType.Star);
|
|
|
+ var config = new GlobalConfiguration<GlobalUtilityDashboardSettings>();
|
|
|
+ var settings = config.Load();
|
|
|
|
|
|
- grid.AddChild(new Label
|
|
|
+ var customDashboard = settings.CustomDashboards.FirstOrDefault(x => x.Name == element.Properties.DashboardName);
|
|
|
+ if(customDashboard is null)
|
|
|
{
|
|
|
- Content = "Dashboard Name:",
|
|
|
- VerticalAlignment = VerticalAlignment.Center
|
|
|
- }, 0, 0);
|
|
|
- var textBox = new TextBox
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var dashboard = DynamicDashboardUtils.Deserialize(customDashboard.Layout);
|
|
|
+ if(dashboard is null)
|
|
|
{
|
|
|
- Background = Colors.LightYellow.ToBrush(),
|
|
|
- Padding = new Thickness(5),
|
|
|
- VerticalContentAlignment = VerticalAlignment.Center
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var editor = new DynamicDashboardEditor(dashboard);
|
|
|
+ editor.DashboardName = customDashboard.Name;
|
|
|
+ editor.DashboardGroup = customDashboard.Group;
|
|
|
+
|
|
|
+ var dlg = new DynamicContentDialog(editor)
|
|
|
+ {
|
|
|
+ Title = "Edit dashboard",
|
|
|
+ SizeToContent = SizeToContent.Height,
|
|
|
+ CanSave = true
|
|
|
};
|
|
|
- grid.AddChild(textBox, 0, 1);
|
|
|
|
|
|
- grid.AddChild(new Separator
|
|
|
+ if(dlg.ShowDialog() == true)
|
|
|
{
|
|
|
- Margin = new(5)
|
|
|
- }, 1, 0, colSpan: 2);
|
|
|
+ customDashboard.Layout = DynamicDashboardUtils.Serialize(editor.GetDashboard());
|
|
|
+ customDashboard.Name = editor.DashboardName;
|
|
|
+ customDashboard.Group = editor.DashboardGroup;
|
|
|
+ config.Save(settings);
|
|
|
|
|
|
+ element.Properties = new CustomDashboardProperties
|
|
|
+ {
|
|
|
+ DashboardName = editor.DashboardName
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private DFLayoutElement AddCustom_Click(CustomDashboard dashboard)
|
|
|
+ {
|
|
|
+ var element = new CustomDashboardElement();
|
|
|
+ element.Properties = new CustomDashboardProperties
|
|
|
+ {
|
|
|
+ DashboardName = dashboard.Name
|
|
|
+ };
|
|
|
+ return element;
|
|
|
+ }
|
|
|
+
|
|
|
+ private DFLayoutElement? CreateNewCustom_Click(object? tag)
|
|
|
+ {
|
|
|
var dashboard = new DynamicDashboard();
|
|
|
|
|
|
var editor = new DynamicDashboardEditor(dashboard);
|
|
|
- grid.AddChild(editor, 2, 0, colSpan: 2);
|
|
|
+ editor.DashboardName = "New Dashboard";
|
|
|
+ editor.DashboardGroup = "Custom";
|
|
|
|
|
|
- var dlg = new DynamicContentDialog(grid)
|
|
|
+ var dlg = new DynamicContentDialog(editor)
|
|
|
{
|
|
|
Title = "Create new dashboard",
|
|
|
- SizeToContent = SizeToContent.Height
|
|
|
- };
|
|
|
-
|
|
|
- textBox.TextChanged += (o, e) =>
|
|
|
- {
|
|
|
- dlg.CanSave = !textBox.Text.IsNullOrWhiteSpace();
|
|
|
+ SizeToContent = SizeToContent.Height,
|
|
|
+ CanSave = true
|
|
|
};
|
|
|
|
|
|
if(dlg.ShowDialog() == true)
|
|
@@ -705,14 +737,15 @@ namespace PRSDesktop
|
|
|
settings.CustomDashboards.Add(new CustomDashboard
|
|
|
{
|
|
|
Layout = DynamicDashboardUtils.Serialize(editor.GetDashboard()),
|
|
|
- Name = textBox.Text
|
|
|
+ Name = editor.DashboardName,
|
|
|
+ Group = editor.DashboardGroup
|
|
|
});
|
|
|
config.Save(settings);
|
|
|
|
|
|
var element = new CustomDashboardElement();
|
|
|
element.Properties = new CustomDashboardProperties
|
|
|
{
|
|
|
- DashboardName = textBox.Text
|
|
|
+ DashboardName = editor.DashboardName
|
|
|
};
|
|
|
return element;
|
|
|
}
|