using FastReport.DataVisualization.Charting; using InABox.Core; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace PRSDesktop { /// /// Interaction logic for DashboardContainer.xaml /// public partial class DashboardContainer : UserControl { private ICorePanel _panel; public ICorePanel Panel { get => _panel; } private DashboardContainer(ICorePanel panel, string name) { InitializeComponent(); _panel = panel; DashboardName.Content = name; if(panel is IActionsDashboard) { Settings.Visibility = Visibility.Visible; } else { Settings.Visibility = Visibility.Collapsed; } if(panel is IHeaderDashboard headerDashboard) { RefreshHeader(headerDashboard.Header); headerDashboard.Header.HeaderChanged += Header_HeaderChanged; } } private void RefreshHeader(DashboardHeader header) { if (HeaderItems.Children.Count > 0) { HeaderItems.Children.Clear(); } foreach (var item in header.GetElements()) { HeaderItems.Children.Add(item); } } private void Header_HeaderChanged(DashboardHeader header) { RefreshHeader(header); } public static DashboardContainer Create(DFLayoutElement element, string name) where TWidget : FrameworkElement, IDashboardWidget, new() where TGroup : DashboardWidgetGroup where TProperties : IDashboardProperties, new() { var result = new TWidget(); element.Properties ??= new TProperties(); result.Properties = element.Properties; result.Setup(); var container = new DashboardContainer(result, name); container.Content.Content = result; container._panel = result; return container; } private void Settings_Click(object sender, RoutedEventArgs e) { var menu = new ContextMenu(); if (Panel is IActionsDashboard actions) { actions.BuildActionsMenu(menu); } if (menu.Items[menu.Items.Count - 1] is Separator separator) { menu.Items.Remove(separator); } if (menu.Items.Count == 0) { menu.AddItem("No Actions", null, null, false); } menu.IsOpen = true; } } }