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