Files
BeWoPlaner/BeWo/View/Controls/AI/AiPromptbausteinButton.xaml.cs
2026-05-18 12:03:10 +02:00

188 lines
5.9 KiB
C#

using BeWo.ServiceProxy;
using BeWo.View.Detail.AI;
using BeWo.ViewModel;
using BeWo.ViewModel.View.AI;
using BS.Shared;
using BS.Shared.DataContracts.Feature.AI;
using DevExpress.Mvvm;
using DevExpress.Utils.Mdi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
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 BeWo.View.Controls.AI
{
public enum AiPromptbausteinButtonState
{
Hidden,
Normal,
Loading,
Disabled
}
/// <summary>
/// Interaktionslogik für AiPromptbausteinButton.xaml
/// </summary>
public partial class AiPromptbausteinButton : UserControl
{
public static readonly DependencyProperty CanExecuteProperty =
DependencyProperty.Register("CanExecute", typeof(bool), typeof(AiPromptbausteinButton), new PropertyMetadata(true, OnCanExecuteChanged));
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State", typeof(AiPromptbausteinButtonState), typeof(AiPromptbausteinButton), new PropertyMetadata(AiPromptbausteinButtonState.Normal, OnStateChanged));
public static readonly DependencyProperty ActionTypeProperty =
DependencyProperty.Register("ActionType", typeof(AiActionType), typeof(AiPromptbausteinButton), new PropertyMetadata(AiActionType.ServiceRecord, OnActionTypeChanged));
public event EventHandler<AbstractBaseVM> ItemAccepted;
public AiPromptbausteinSelectionComplexViewModel AllPromptsViewModel { get; set; }
public AiPromptbausteinButton()
{
InitializeComponent();
}
public AiPromptbausteinButtonState State
{
get { return (AiPromptbausteinButtonState)GetValue(StateProperty); }
set { SetValue(StateProperty, value); }
}
public AiActionType ActionType
{
get { return (AiActionType)GetValue(ActionTypeProperty); }
set { SetValue(ActionTypeProperty, value); }
}
public bool CanExecute
{
get { return (bool)GetValue(CanExecuteProperty); }
set { SetValue(CanExecuteProperty, value); }
}
private static void OnStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (AiPromptbausteinButton)d;
var state = (AiPromptbausteinButtonState)e.NewValue;
control.UpdateState(state);
}
private static void OnActionTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (AiPromptbausteinButton)d;
var actionType = (AiActionType)e.NewValue;
control.UpdateActionType(actionType);
}
private static void OnCanExecuteChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (AiPromptbausteinButton)d;
var canExecute = (bool)e.NewValue;
control.UpdateCanExecute(canExecute);
}
public void AiPromptOpenAll()
{
BeWoApp.MainControl.WindowService.Show(AllPromptsViewModel);
}
public void AiPromptOpenFavorite()
{
popup_promptbaustein_favoriten.IsOpen = true;
}
private void btnOpenAi5_Click(object sender, RoutedEventArgs e)
{
AiPromptOpenAll();
}
private void btnOpenAi5_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
AiPromptOpenFavorite();
}
private void InitPromptbausteine(AiActionType actionType, List<AiPromptbausteinFolderDC> folders)
{
VMFactory.CreateAiPromptbausteinFolderListVM(folders, (listvm) =>
{
var viewmodel = new AiPromptbausteinSelectionComplexViewModel(actionType, listvm);
viewmodel.ItemAccepted += ItemAccepted;
viewmodel.RequestClose += (s, e) => viewmodel.ResetSelection();
AllPromptsViewModel = viewmodel;
var viewmodel2 = new AiPromptbausteinSelectionComplexViewModel(actionType, listvm, true);
viewmodel2.ItemAccepted += ItemAccepted;
popup_promptbaustein_favoriten.Closed += (s, e) => viewmodel2.ResetSelection();
var view2 = new AiPromptbausteinComplexSelectionFavoritenView(viewmodel2);
viewmodel2.SelectedFolder = viewmodel2.Folders.VMList[0];
view2.Padding = new Thickness(3);
view2.Background = FindResource("ObjectEditBackgroundBrush") as System.Windows.Media.Brush;
border_promptbaustein_favoriten.Child = view2;
State = AiPromptbausteinButtonState.Normal;
viewmodel.VMListReloaded += (s, e) => viewmodel2.ReloadVMList(false);
});
}
private void UpdateState(AiPromptbausteinButtonState state)
{
if (state == AiPromptbausteinButtonState.Normal && !CanExecute)
state = AiPromptbausteinButtonState.Disabled;
switch (state)
{
case AiPromptbausteinButtonState.Hidden:
root.Visibility = Visibility.Collapsed;
root.IsEnabled = true;
btnOpenAi5.IsEnabled = true;
break;
case AiPromptbausteinButtonState.Normal:
root.Visibility = Visibility.Visible;
root.IsEnabled = true;
btnOpenAi5.IsEnabled = true;
break;
case AiPromptbausteinButtonState.Loading:
root.Visibility = Visibility.Visible;
root.IsEnabled = false;
btnOpenAi5.IsEnabled = false;
break;
case AiPromptbausteinButtonState.Disabled:
root.Visibility = Visibility.Visible;
root.IsEnabled = true;
btnOpenAi5.IsEnabled = false;
break;
default:
throw new NotImplementedException();
break;
}
}
private void UpdateActionType(AiActionType actionType)
{
ActionType = actionType;
if (!BeWoApp.AppSettings.ShowAI || !BeWoApp.HasLoggedOnUserRight(UserRightType.AiModulePromptbausteineView))
{
State = AiPromptbausteinButtonState.Hidden;
return;
}
State = AiPromptbausteinButtonState.Loading;
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.GetAiPromptbausteinFolder(actionType), folders => InitPromptbausteine(actionType, folders));
}
private void UpdateCanExecute(bool canExecute)
{
if (canExecute)
State = AiPromptbausteinButtonState.Normal;
else
State = AiPromptbausteinButtonState.Disabled;
}
}
}