Files
C4IT-F4SD-Client/FasdDesktopUi/Basics/UserControls/DataCanvas/DataCanvas.xaml.cs
2025-11-11 11:03:42 +01:00

260 lines
10 KiB
C#

using C4IT.Logging;
using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Pages.DetailsPage.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
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;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class DataCanvas : UserControl
{
#region Properties
private cSupportCaseDataProvider dataProvider;
public cSupportCaseDataProvider DataProvider
{
get => dataProvider;
set
{
if (DataCanvasData.GetDetailedDataAsync != null)
{
if (dataProvider != null)
dataProvider.HealthCardDataHelper.DataRefreshed -= HealthCardDataHelper_DataRefreshed;
value.HealthCardDataHelper.DataRefreshed += HealthCardDataHelper_DataRefreshed;
}
dataProvider = value;
QuickActionStatusUc.DataProvider = value;
}
}
#region DataCanvasData
private static void DataCanvasDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
var oldData = e.OldValue as cDataCanvasDataModel;
var newData = e.NewValue as cDataCanvasDataModel;
if (!(d is DataCanvas _me))
return;
if (_me.dataProvider != null)
{
if (oldData.GetDetailedDataAsync != null)
_me.dataProvider.HealthCardDataHelper.DataRefreshed -= _me.HealthCardDataHelper_DataRefreshed;
if (newData.GetDetailedDataAsync != null)
_me.dataProvider.HealthCardDataHelper.DataRefreshed += _me.HealthCardDataHelper_DataRefreshed;
}
_me.QuickActionStatusUc.CancelQuickAction();
_me.RecommendationUc.RecommendationData = _me.DataCanvasData.RecommendationData;
_me.RecommendationUc.CloseButtonClickedAction = _me.CloseDataCanvas;
if (_me.DataCanvasData.ChartData is null && _me.DataCanvasData.DetailedChartData is null)
{
_me.DetailedDataUc.DetailedInformationData = _me.DataCanvasData.DetailedData;
_me.DetailedDataUc.CloseButtonClickedAction = _me.CloseDataCanvas;
_me.DetailedChartUc.ChartData = null;
_me.DynamicChartUc.ChartData = null;
}
else if (_me.DataCanvasData.ChartData is null)
{
_me.DetailedChartUc.ChartData = _me.DataCanvasData.DetailedChartData;
_me.DynamicChartUc.ChartData = null;
_me.DetailedDataUc.DetailedInformationData = null;
_me.DetailedChartUc.CloseButtonClickedAction = _me.CloseDataCanvas;
}
else
{
_me.DynamicChartUc.ChartData = _me.DataCanvasData.ChartData;
_me.DetailedChartUc.ChartData = null;
_me.DetailedDataUc.DetailedInformationData = null;
_me.DynamicChartUc.CloseButtonClickedAction = _me.CloseDataCanvas;
}
_me.QuickActionStatusUc.QuickActionData = _me.DataCanvasData.QuickActionStatusMonitorData;
_me.QuickActionStatusUc.CloseButtonClickedAction = _me.CloseDataCanvas;
_me.QuickActionStatusUc.QuickActionOutputs.Clear();
_me.QuickActionStatusUc.MeasureValues = null;
}
catch (Exception E)
{
LogException(E);
}
}
public static readonly RoutedEvent DataCanvasWasClosedEvent = EventManager.RegisterRoutedEvent("DataCanvasWasClosed", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DataCanvas));
public event RoutedEventHandler DataCanvasWasClosed
{
add { AddHandler(DataCanvasWasClosedEvent, value); }
remove { RemoveHandler(DataCanvasWasClosedEvent, value); }
}
private void CloseDataCanvas()
{
//Visibility = Visibility.Collapsed;
if (this.Parent is FrameworkElement parentElement)
parentElement.Visibility = Visibility.Collapsed;
QuickActionStatusUc.CancelQuickAction();
RaiseEvent(new RoutedEventArgs(DataCanvasWasClosedEvent));
}
public static readonly DependencyProperty DataCanvasDataProperty =
DependencyProperty.Register("DataCanvasData", typeof(cDataCanvasDataModel), typeof(DataCanvas), new PropertyMetadata(new cDataCanvasDataModel(), new PropertyChangedCallback(DataCanvasDataChangedCallback)));
public cDataCanvasDataModel DataCanvasData
{
get { return (cDataCanvasDataModel)GetValue(DataCanvasDataProperty); }
set { SetValue(DataCanvasDataProperty, value); }
}
#endregion
#region SubMenuData
private static void SubMenuDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is DataCanvas _me))
return;
}
public static readonly DependencyProperty SubMenuDataProperty =
DependencyProperty.Register("SubMenuData", typeof(List<cMenuDataBase>), typeof(DataCanvas), new PropertyMetadata(new List<cMenuDataBase>(), new PropertyChangedCallback(SubMenuDataChangedCallback)));
public List<cMenuDataBase> SubMenuData
{
get { return (List<cMenuDataBase>)GetValue(SubMenuDataProperty); }
set { SetValue(SubMenuDataProperty, value); }
}
#endregion
#region isDetailedLayout
public static readonly DependencyProperty IsDetailedLayoutProperty =
DependencyProperty.Register("IsDetailedLayout", typeof(bool), typeof(DataCanvas), new PropertyMetadata(false));
public bool IsDetailedLayout
{
get { return (bool)GetValue(IsDetailedLayoutProperty); }
set { SetValue(IsDetailedLayoutProperty, value); }
}
#endregion
#endregion
public DataCanvas()
{
InitializeComponent();
DetailedChartUc.Visibility = Visibility.Visible;
}
public DataCanvas(bool drawInScrollViewer)
{
InitializeComponent();
if (!drawInScrollViewer)
return;
var tempDataCanvas = MainStackPanel;
ScrollViewer scrollViewer = new ScrollViewer() { Padding = new Thickness(0, 0, 10, 10), VerticalScrollBarVisibility = ScrollBarVisibility.Auto };
DataCanvasUc.Content = scrollViewer;
scrollViewer.Content = tempDataCanvas;
}
private async void HealthCardDataHelper_DataRefreshed(object sender, EventArgs e)
{
try
{
var detailedData = DataCanvasData.DetailedData;
var detailedChartData = DataCanvasData.DetailedChartData;
var chartData = DataCanvasData.ChartData;
if (DataCanvasData.GetDetailedDataAsync != null)
detailedData = await DataCanvasData.GetDetailedDataAsync.Invoke();
if (DataCanvasData.GetDatailedChartDataAsync != null)
detailedChartData = await DataCanvasData.GetDatailedChartDataAsync.Invoke();
if (DataCanvasData.GetChartDataAsync != null)
chartData = await DataCanvasData.GetChartDataAsync.Invoke();
var tempDataCanvasData = new cDataCanvasDataModel()
{
GetDetailedDataAsync = DataCanvasData.GetDetailedDataAsync,
GetDatailedChartDataAsync = DataCanvasData.GetDatailedChartDataAsync,
GetChartDataAsync = DataCanvasData.GetChartDataAsync,
RecommendationData = DataCanvasData.RecommendationData,
QuickActionStatusMonitorData = DataCanvasData.QuickActionStatusMonitorData,
};
if (detailedChartData is null && chartData is null)
tempDataCanvasData.DetailedData = detailedData;
else if (chartData is null)
tempDataCanvasData.DetailedChartData = detailedChartData;
else
tempDataCanvasData.ChartData = chartData;
DataCanvasData = tempDataCanvasData;
}
catch (Exception E)
{
LogException(E);
}
}
public void InsertNewDetailedData(List<object> newDetailedData)
{
try
{
var tempDetailedData = DetailedDataUc.DetailedInformationData.FullDetailedData;
if (tempDetailedData == null || tempDetailedData.Count <= 0)
return;
tempDetailedData.Insert(1, newDetailedData);
DetailedDataUc.DetailedInformationData = new cDetailedDataModel() { Heading = DetailedDataUc.DetailedInformationData.Heading, FullDetailedData = tempDetailedData };
DetailedDataUc.DetailedDataListView.SelectedItem = DetailedDataUc.DetailedDataListView.Items[0]; // todo: check if best solution with index = 0
}
catch (Exception E)
{
LogException(E);
}
finally
{
}
}
private void QuickActionStatusUc_QuickActionFinished(object sender, QuickActionEventArgs e)
{
if (Window.GetWindow(this) is Pages.DetailsPage.DetailsPageView)
InsertNewDetailedData(e.QuickActionResult);
}
}
}