Ai Promptbaustein SR Conv Popup
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
xmlns:draw="clr-namespace:System.Drawing;assembly=System.Drawing"
|
||||
xmlns:local="clr-namespace:BeWo.View.Controls.AI"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:ai="clr-namespace:BeWo.View.Detail.AI"
|
||||
x:Name="root"
|
||||
mc:Ignorable="d">
|
||||
<Grid>
|
||||
<StackPanel
|
||||
@@ -20,23 +22,31 @@
|
||||
</ResourceDictionary>
|
||||
</StackPanel.Resources>
|
||||
<Button
|
||||
Background="Transparent"
|
||||
x:Name="btnOpenAi4"
|
||||
Height="30"
|
||||
Margin="10,0,0,0"
|
||||
Margin="0"
|
||||
Click="btnOpenAi4_Click"
|
||||
Content="{StaticResource AiDesignsIconKIChatWeissOrange}"
|
||||
Style="{StaticResource NavigationToolbarButtonStyle}"
|
||||
ToolTip="KI Chat öffnen"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
<Button
|
||||
Background="Transparent"
|
||||
x:Name="btnOpenAi5"
|
||||
Height="30"
|
||||
Margin="10,0,0,0"
|
||||
Click="btnOpenAi5_Click"
|
||||
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen}"
|
||||
MouseRightButtonUp="btnOpenAi5_MouseRightButtonUp"
|
||||
Style="{StaticResource NavigationToolbarButtonStyle}"
|
||||
ToolTip="KI Chat mit Prompt-Baustein starten"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
ToolTipService.ShowOnDisabled="True">
|
||||
<!--<Button.InputBindings>
|
||||
<MouseBinding Command="{Binding AiPromptOpenFavoriteCommand, ElementName=root}" Gesture="RightClick" />
|
||||
<MouseBinding Command="{Binding AiPromptOpenAllCommand, ElementName=root}" Gesture="LeftClick" />
|
||||
</Button.InputBindings>-->
|
||||
</Button>
|
||||
<Image
|
||||
x:Name="imgWarning"
|
||||
Height="20"
|
||||
@@ -51,5 +61,25 @@
|
||||
</Image.ToolTip>
|
||||
</Image>
|
||||
</StackPanel>
|
||||
<Popup
|
||||
x:Name="popup_promptbaustein_all"
|
||||
Placement="Top"
|
||||
PlacementTarget="{Binding ElementName=btnOpenAi5}"
|
||||
StaysOpen="False"
|
||||
Width="600"
|
||||
Height="400">
|
||||
<Border BorderThickness="1" x:Name="border_promptbaustein_al">
|
||||
|
||||
</Border>
|
||||
</Popup>
|
||||
<Popup
|
||||
x:Name="popup_promptbaustein_favoriten"
|
||||
Placement="Top"
|
||||
PlacementTarget="{Binding ElementName=btnOpenAi5}"
|
||||
StaysOpen="False">
|
||||
<Border BorderThickness="1" x:Name="border_promptbaustein_favoriten">
|
||||
|
||||
</Border>
|
||||
</Popup>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
using BeWo.ViewModel.View.AI;
|
||||
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.Pdf.Native.BouncyCastle.Asn1.BC;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@@ -30,9 +38,18 @@ namespace BeWo.View.Controls.AI
|
||||
/// </summary>
|
||||
public partial class AiConversationButton : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty StateProperty =
|
||||
DependencyProperty.Register("State", typeof(AiConversationButtonState), typeof(AiConversationButton), new PropertyMetadata(AiConversationButtonState.Normal, OnStateChanged));
|
||||
|
||||
public static readonly DependencyProperty ActionTypeProperty =
|
||||
DependencyProperty.Register("ActionType", typeof(AiActionType), typeof(AiConversationButton), new PropertyMetadata(AiActionType.ServiceRecord, OnActionTypeChanged));
|
||||
|
||||
|
||||
public event RoutedEventHandler OpenAiWindowClick;
|
||||
public event RoutedEventHandler OpenAiPromptClick;
|
||||
|
||||
public event EventHandler<AiPromptbausteinPromptVM> PromptAccepted;
|
||||
|
||||
public AiConversationButton()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -45,16 +62,15 @@ namespace BeWo.View.Controls.AI
|
||||
get { return (AiConversationButtonState)GetValue(StateProperty); }
|
||||
set { SetValue(StateProperty, value); }
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty StateProperty =
|
||||
DependencyProperty.Register("State", typeof(AiConversationButtonState), typeof(AiConversationButton), new PropertyMetadata(AiConversationButtonState.Normal, OnStateChanged));
|
||||
|
||||
private static void OnStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
public AiActionType ActionType
|
||||
{
|
||||
var control = (AiConversationButton)d;
|
||||
control.UpdateState();
|
||||
get { return (AiActionType)GetValue(ActionTypeProperty); }
|
||||
set { SetValue(ActionTypeProperty, value); }
|
||||
}
|
||||
|
||||
public ICommand AiPromptOpenAllCommand { get; set; }
|
||||
public ICommand AiPromptOpenFavoriteCommand { get; set; }
|
||||
|
||||
public string Tooltip { get; set; }
|
||||
public bool IsButtonEnabled { get; set; }
|
||||
public bool IsButton2Enabled { get; set; }
|
||||
@@ -62,6 +78,15 @@ namespace BeWo.View.Controls.AI
|
||||
public bool IsButton2Visible { get; set; }
|
||||
public bool IsWarningSignVisible { get; set; }
|
||||
|
||||
public void AiPromptOpenAll()
|
||||
{
|
||||
popup_promptbaustein_all.IsOpen = true;
|
||||
}
|
||||
public void AiPromptOpenFavorite()
|
||||
{
|
||||
popup_promptbaustein_favoriten.IsOpen = true;
|
||||
}
|
||||
|
||||
private void UpdateState()
|
||||
{
|
||||
switch (State)
|
||||
@@ -111,19 +136,55 @@ namespace BeWo.View.Controls.AI
|
||||
btnOpenAi5.ToolTip = btnOpenAi4.ToolTip = ToolTip;
|
||||
btnOpenAi4.IsEnabled = IsButtonEnabled;
|
||||
btnOpenAi5.IsEnabled = IsButton2Enabled;
|
||||
btnOpenAi4.Visibility = IsButtonVisible ? Visibility.Visible : Visibility.Collapsed;
|
||||
btnOpenAi5.Visibility = IsButton2Visible ? Visibility.Visible : Visibility.Collapsed;
|
||||
btnOpenAi4.Visibility = IsButtonVisible ? Visibility.Visible : Visibility.Collapsed;
|
||||
btnOpenAi5.Visibility = IsButton2Visible ? Visibility.Visible : Visibility.Collapsed;
|
||||
imgWarning.Visibility = IsWarningSignVisible ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private static void OnActionTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var control = (AiConversationButton)d;
|
||||
var actionType = (AiActionType)e.NewValue;
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.GetAiPromptbausteinFolder(actionType), folders => control.InitPromptbausteine(actionType, folders));
|
||||
}
|
||||
private static void OnStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var control = (AiConversationButton)d;
|
||||
control.UpdateState();
|
||||
}
|
||||
private void btnOpenAi4_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
OpenAiWindowClick?.Invoke(this, e);
|
||||
}
|
||||
|
||||
private void btnOpenAi5_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
OpenAiPromptClick?.Invoke(this, e);
|
||||
//OpenAiPromptClick?.Invoke(this, e);
|
||||
AiPromptOpenAll();
|
||||
}
|
||||
private void btnOpenAi5_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
AiPromptOpenFavorite();
|
||||
}
|
||||
private void InitPromptbausteine(AiActionType actionType, List<AiPromptbausteinFolderDC> folders)
|
||||
{
|
||||
var viewmodel = new AiPromptbausteinSelectionComplexViewModel(actionType);
|
||||
viewmodel.PromptAccepted += PromptAccepted;
|
||||
viewmodel.InitVMList();
|
||||
var view = new AiPromptbausteinComplexSelectionView(viewmodel);
|
||||
view.Padding = new Thickness(3);
|
||||
view.Background = FindResource("ObjectEditBackgroundBrush") as System.Windows.Media.Brush;
|
||||
border_promptbaustein_al.Child = view;
|
||||
|
||||
var viewmodel2 = new AiPromptbausteinSelectionComplexViewModel(actionType, viewmodel.Folders);
|
||||
viewmodel2.PromptAccepted += PromptAccepted;
|
||||
viewmodel2.InitVMList();
|
||||
var view2 = new AiPromptbausteinComplexSelectionView(viewmodel2);
|
||||
view2.ReduceSelection();
|
||||
view2.Padding = new Thickness(3);
|
||||
view2.Background = FindResource("ObjectEditBackgroundBrush") as System.Windows.Media.Brush;
|
||||
border_promptbaustein_favoriten.Child = view2;
|
||||
|
||||
AiPromptOpenAllCommand = new DelegateCommand(AiPromptOpenAll);
|
||||
AiPromptOpenFavoriteCommand = new DelegateCommand(AiPromptOpenFavorite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<GroupBox
|
||||
x:Name="groupBox1"
|
||||
Grid.Column="0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Header="Ordner"
|
||||
@@ -58,11 +59,13 @@
|
||||
</TreeView>
|
||||
</GroupBox>
|
||||
<GridSplitter
|
||||
x:Name="splitter"
|
||||
Grid.Column="1"
|
||||
Width="1"
|
||||
HorizontalAlignment="Center"
|
||||
Background="#878890" />
|
||||
<GroupBox
|
||||
x:Name="groupbox2"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="2"
|
||||
HorizontalAlignment="Stretch"
|
||||
|
||||
@@ -31,7 +31,17 @@ namespace BeWo.View.Detail.AI
|
||||
|
||||
DataContext = ViewModel = viewModel;
|
||||
|
||||
Loaded += (s, e) => ViewModel.ReloadVMList();
|
||||
Loaded += (s, e) => ViewModel.InitVMList();
|
||||
}
|
||||
|
||||
public void ReduceSelection()
|
||||
{
|
||||
groupBox1.Visibility = Visibility.Collapsed;
|
||||
splitter.Visibility = Visibility.Collapsed;
|
||||
groupbox2.Header = "Favoriten";
|
||||
Grid.SetColumn(groupbox2, 0);
|
||||
Grid.SetColumnSpan(groupbox2, 3);
|
||||
ViewModel.SelectedFolderId = 0;
|
||||
}
|
||||
|
||||
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
||||
|
||||
@@ -3324,9 +3324,12 @@
|
||||
VerticalAlignment="Center"
|
||||
Orientation="Horizontal">
|
||||
<ai:AiConversationButton
|
||||
OpenAiPromptClick="AiConversationButton_OpenAiPromptClick"
|
||||
x:Name="ai_conversation_btn"
|
||||
Margin="10,0,0,0"
|
||||
ActionType="ServiceRecordConversation"
|
||||
OpenAiWindowClick="AiConversationButton_OpenAiWindowClick"
|
||||
State="{Binding AiConversationButtonState}" />
|
||||
State="{Binding AiConversationButtonState}"
|
||||
PromptAccepted="PromptAccepted"/>
|
||||
</StackPanel>
|
||||
<StackPanel
|
||||
Grid.Column="2"
|
||||
|
||||
@@ -5078,11 +5078,6 @@ namespace BeWo.View.Detail.Zeiterfassung
|
||||
ComboBoxTreeViewControl.TreeViewSourceList = ViewModel.PrototypeVM.GoalTree;
|
||||
}
|
||||
|
||||
private void AiConversationButton_OpenAiPromptClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
OpenAiChatPromptWindow();
|
||||
}
|
||||
|
||||
private void AiConversationButton_OpenAiWindowClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
OpenAiWindow();
|
||||
@@ -5105,15 +5100,6 @@ namespace BeWo.View.Detail.Zeiterfassung
|
||||
MainControl.WindowService.ShowAiConversationWindow(getAiConversationChatViewModel());
|
||||
}
|
||||
|
||||
private void OpenAiChatPromptWindow()
|
||||
{
|
||||
var vm_chat = new AiPromptbausteinSelectionComplexViewModel(AiActionType.ServiceRecordConversation);
|
||||
|
||||
vm_chat.PromptAccepted += PromptAccepted;
|
||||
|
||||
MainControl.WindowService.Show(vm_chat);
|
||||
}
|
||||
|
||||
private void PromptAccepted(object sender, AiPromptbausteinPromptVM prompt)
|
||||
{
|
||||
if (prompt is null)
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace BeWo.ViewModel.View.AI
|
||||
{
|
||||
public class AiPromptbausteinSelectionComplexViewModel : DialogViewModel
|
||||
{
|
||||
public event EventHandler<AiPromptbausteinPromptVM> PromptAccepted;
|
||||
|
||||
private AiPromptbausteinFolderVM _SelectedFolder;
|
||||
|
||||
public AiPromptbausteinSelectionComplexViewModel()
|
||||
@@ -27,18 +29,17 @@ namespace BeWo.ViewModel.View.AI
|
||||
Folders = new AiPromptbausteinFolderListVM();
|
||||
}
|
||||
}
|
||||
|
||||
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType) : this()
|
||||
{
|
||||
AiActionType = aiActionType;
|
||||
}
|
||||
|
||||
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType, AiPromptbausteinFolderListVM viewModel) : this(aiActionType)
|
||||
{
|
||||
LoadedActionType = aiActionType;
|
||||
Folders = viewModel;
|
||||
}
|
||||
|
||||
public event EventHandler<AiPromptbausteinPromptVM> PromptAccepted;
|
||||
public ICommand SendCommand { get; set; }
|
||||
|
||||
public AiActionType AiActionType { get; set; }
|
||||
|
||||
@@ -49,12 +50,17 @@ namespace BeWo.ViewModel.View.AI
|
||||
{
|
||||
_SelectedFolder = value;
|
||||
FirePropertyChanged(nameof(SelectedFolder));
|
||||
|
||||
if (value is null)
|
||||
SelectedFolderId = null;
|
||||
else
|
||||
SelectedFolderId = Folders.VMList.IndexOf(value);
|
||||
}
|
||||
}
|
||||
public AiPromptbausteinPromptVM SelectedPrompt { get; set; }
|
||||
public AiPromptbausteinFolderListVM Folders { get; private set; }
|
||||
|
||||
public ICommand SendCommand { get; set; }
|
||||
public AiActionType LoadedActionType { get; set; }
|
||||
public int? SelectedFolderId { get; set; }
|
||||
|
||||
public void Send()
|
||||
{
|
||||
@@ -62,21 +68,32 @@ namespace BeWo.ViewModel.View.AI
|
||||
|
||||
PromptAccepted?.Invoke(this, SelectedPrompt);
|
||||
}
|
||||
|
||||
public bool CanSend()
|
||||
{
|
||||
return SelectedPrompt is object;
|
||||
}
|
||||
public void InitVMList()
|
||||
{
|
||||
if (Folders is object && LoadedActionType == AiActionType)
|
||||
return;
|
||||
|
||||
LoadedActionType = AiActionType;
|
||||
|
||||
VMFactory.CreateAiPromptbausteinFolderListVMAsync(AiActionType, UpdateVMList);
|
||||
}
|
||||
public void ReloadVMList()
|
||||
{
|
||||
VMFactory.CreateAiPromptbausteinFolderListVMAsync(AiActionType, UpdateVMList);
|
||||
}
|
||||
|
||||
private void UpdateVMList(AiPromptbausteinFolderListVM new_list)
|
||||
{
|
||||
Folders = new_list;
|
||||
FirePropertyChanged(nameof(Folders));
|
||||
|
||||
if(SelectedFolderId is int folder_id)
|
||||
{
|
||||
SelectedFolder = Folders.VMList[folder_id];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user