Files
C4IT-F4SD-Client/FasdDesktopUi/Basics/UiActions/UiQuickAction.cs
2026-01-28 12:08:39 +01:00

117 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Threading;
using FasdCockpitBase.Models;
using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Basics.UserControls;
using FasdDesktopUi.Basics.UserControls.AdaptableIcon;
using C4IT.FASD.Base;
using static C4IT.Logging.cLogManager;
using C4IT.Logging;
using C4IT.F4SD.DisplayFormatting;
namespace FasdDesktopUi.Basics.UiActions
{
public abstract class cUiQuickAction : cUiActionBase
{
private readonly bool shouldRunImmidiate = false;
public cFasdQuickAction QuickActionConfig { get; private set; }
public cSupportCaseDataProvider DataProvider { get; set; }
public QuickActionStatusMonitor StatusMonitor { get; set; }
public cRecommendationDataModel QuickActionRecommendation { get; set; }
public cUiQuickAction(cFasdQuickAction QuickActionConfig)
{
try
{
if (QuickActionConfig is null)
return;
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
shouldRunImmidiate = QuickActionConfig.RunImmediate;
Description = QuickActionConfig.Descriptions?.GetValue(Default: null);
AlternativeDescription = QuickActionConfig.AlternativeDescriptions?.GetValue(Default: null);
this.QuickActionConfig = QuickActionConfig;
}
catch (Exception E)
{
LogException(E);
}
}
public virtual async Task<cQuickActionStatusMonitorModel> GetQuickActionStatusMonitorDataAsync()
{
await Task.CompletedTask;
return new cQuickActionStatusMonitorModel();
}
public abstract Task<cDataCanvasDataModel> GetQuickActionDataAsync(cSupportCaseDataProvider dataProvider, bool isDetailedLayout);
public abstract Task<List<object>> ProcessActionAsync(CancellationToken token, Dictionary<cAdjustableParameter, object> ParameterDictionary = null);
private void DrawUiActionControls(cDataCanvasDataModel quickActionData, UIElement UiLocation, bool isDetailedLayout)
{
if (!(UiLocation is Decorator decorator))
return;
if (decorator.Child is DataCanvas existinDataCanvas)
{
existinDataCanvas.DataCanvasData = quickActionData;
existinDataCanvas.DataProvider = DataProvider;
existinDataCanvas.IsDetailedLayout = isDetailedLayout;
StatusMonitor = existinDataCanvas.QuickActionStatusUc;
existinDataCanvas.Visibility = Visibility.Visible;
}
else
{
DataCanvas dataCanvas = new DataCanvas(isDetailedLayout) { DataCanvasData = quickActionData, IsDetailedLayout = isDetailedLayout, DataProvider = DataProvider };
decorator.Child = dataCanvas;
StatusMonitor = dataCanvas.QuickActionStatusUc;
}
StatusMonitor.ExecuteButton.IsHitTestVisible = true;
decorator.Visibility = Visibility.Visible;
}
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
{
try
{
var quickActionData = await GetQuickActionDataAsync(dataProvider, isDetailedLayout);
DrawUiActionControls(quickActionData, UiLocation, isDetailedLayout);
if (shouldRunImmidiate)
if (UiLocation is Decorator uiDecorator)
if (uiDecorator.Child is DataCanvas dataCanvas)
await dataCanvas.QuickActionStatusUc.RunQuickActionAsync();
return true;
}
catch (Exception E)
{
LogException(E);
}
return false;
}
}
}