Bearbeiten in der ComplexSelectionView
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ai="clr-namespace:BeWo.ViewModel.View.AI"
|
||||
xmlns:local1="clr-namespace:BeWo.View.Detail.AI"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
|
||||
xmlns:local="clr-namespace:BeWo.View.Detail.AI"
|
||||
@@ -46,16 +47,48 @@
|
||||
x:Name="treeView"
|
||||
MinHeight="100"
|
||||
Padding="4,16,4,16"
|
||||
AllowDrop="True"
|
||||
ContextMenuOpening="treeView_ContextMenuOpening"
|
||||
ItemContainerStyle="{DynamicResource igoal_treeitemstyle}"
|
||||
ItemTemplate="{StaticResource ai_promptbaustein_folder_itemtemplate}"
|
||||
ItemsSource="{Binding Folders.VMList, UpdateSourceTrigger=PropertyChanged}"
|
||||
SelectedItemChanged="treeView_SelectedItemChanged">
|
||||
PreviewMouseDown="Grid_PreviewMouseDown"
|
||||
PreviewMouseRightButtonDown="OnPreviewMouseRightButtonDown"
|
||||
SelectedItemChanged="treeView_SelectedItemChanged"
|
||||
TreeViewItem.Selected="treeView_Selected">
|
||||
<TreeView.Resources>
|
||||
<Style x:Key="igoal_treeitemstyle" TargetType="TreeViewItem">
|
||||
<Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
|
||||
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
|
||||
</Style>
|
||||
</TreeView.Resources>
|
||||
<TreeView.ContextMenu>
|
||||
<ContextMenu>
|
||||
<ContextMenu.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style TargetType="{x:Type Image}">
|
||||
<Setter Property="Height" Value="24" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</ContextMenu.Resources>
|
||||
<MenuItem Command="{Binding OpenAddFolderDialogCommand}" Header="Neu">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Add24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Command="{Binding OpenEditFolderDialogCommand}" Header="Bearbeiten">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Rename24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Command="{Binding DeleteFolderCommand}" Header="Löschen">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Delete24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</TreeView.ContextMenu>
|
||||
</TreeView>
|
||||
</GroupBox>
|
||||
<GridSplitter
|
||||
@@ -76,10 +109,48 @@
|
||||
Padding="4,16,4,16"
|
||||
HorizontalContentAlignment="Stretch"
|
||||
VerticalContentAlignment="Stretch"
|
||||
AllowDrop="False"
|
||||
ContextMenuOpening="ListBox_ContextMenuOpening"
|
||||
EditValue="{Binding SelectedPrompt, Mode=TwoWay}"
|
||||
ItemContainerStyle="{StaticResource PromptListBoxItem}"
|
||||
ItemsSource="{Binding SelectedFolder.Prompts, UpdateSourceTrigger=PropertyChanged}"
|
||||
SelectionMode="Single">
|
||||
<dxe:ListBoxEdit.ContextMenu>
|
||||
<ContextMenu>
|
||||
<ContextMenu.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style TargetType="{x:Type Image}">
|
||||
<Setter Property="Height" Value="24" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</ContextMenu.Resources>
|
||||
<MenuItem Command="{Binding OpenAddPromptDialogCommand}" Header="Neu">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Add24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Command="{Binding OpenEditPromptDialogCommand}" Header="Bearbeiten">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Rename24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem
|
||||
x:Name="favorite"
|
||||
Command="{Binding ChangeFavoritenStatePromptCommand}"
|
||||
Header="Favorit hinzufügen">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Favorites32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Command="{Binding DeletePromptCommand}" Header="Löschen">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="..\..\..\Ressources\Icons\Delete24.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</dxe:ListBoxEdit.ContextMenu>
|
||||
<dxe:ListBoxEdit.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid
|
||||
|
||||
@@ -39,7 +39,6 @@ namespace BeWo.View.Detail.AI
|
||||
if (item != null)
|
||||
{
|
||||
item.IsSelected = true;
|
||||
|
||||
item.IsSelected = false;
|
||||
}
|
||||
listBoxEdit1.UnSelectAll();
|
||||
@@ -54,6 +53,66 @@ namespace BeWo.View.Detail.AI
|
||||
ViewModel.SelectedFolder = treeView.SelectedValue as AiPromptbausteinFolderVM;
|
||||
}
|
||||
|
||||
private void OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (treeViewItem != null)
|
||||
{
|
||||
treeViewItem.Focus();
|
||||
e.Handled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Handled = true;
|
||||
|
||||
if (ViewModel.SelectedFolder == null)
|
||||
return;
|
||||
|
||||
_LastTreeViewItem.IsSelected = false;
|
||||
treeView.Focus();
|
||||
}
|
||||
}
|
||||
|
||||
static TreeViewItem VisualUpwardSearch(DependencyObject source)
|
||||
{
|
||||
while (source != null && !(source is TreeViewItem))
|
||||
source = VisualTreeHelper.GetParent(source);
|
||||
|
||||
return source as TreeViewItem;
|
||||
}
|
||||
|
||||
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject);
|
||||
|
||||
if (treeViewItem is null)
|
||||
return;
|
||||
|
||||
if (e.ClickCount == 2)
|
||||
{
|
||||
ViewModel.OpenEditFolderDialogCommand.Execute(null);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private TreeViewItem _LastTreeViewItem;
|
||||
private void treeView_Selected(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_LastTreeViewItem = e.OriginalSource as TreeViewItem;
|
||||
}
|
||||
|
||||
private void treeView_ContextMenuOpening(object sender, ContextMenuEventArgs e)
|
||||
{
|
||||
ViewModel.UpdateFolderCommands();
|
||||
}
|
||||
|
||||
private void ListBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
|
||||
{
|
||||
ViewModel.UpdatePromptCommands();
|
||||
favorite.Header = (ViewModel.SelectedPrompt?.IsFavorite ?? false) ? "Favorit entfernen" : "Favorit hinzufügen";
|
||||
}
|
||||
|
||||
private void Grid_PreviewMouseDown_1(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (!ViewModel.SendCommand.CanExecute(null))
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using BeWo.ServiceProxy;
|
||||
using BeWo.Services;
|
||||
using BeWo.ViewModel.ListViewModel;
|
||||
using BeWo.ViewModel.View.Administration;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared.DataContracts.Feature.AI;
|
||||
using BS.Shared.Extensions.CustomInterfaces;
|
||||
using DevExpress.Mvvm;
|
||||
using DevExpress.Mvvm.POCO;
|
||||
@@ -10,8 +13,10 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using MessageBox = System.Windows.MessageBox;
|
||||
|
||||
namespace BeWo.ViewModel.View.AI
|
||||
{
|
||||
@@ -22,6 +27,30 @@ namespace BeWo.ViewModel.View.AI
|
||||
private AiPromptbausteinFolderVM _SelectedFolder;
|
||||
private AiPromptbausteinPromptVM _SelectedPrompt;
|
||||
|
||||
private IBeWoWindowService WindowService { get; set; }
|
||||
|
||||
public AiPromptbausteinFolderVM Favoriten { get; set; }
|
||||
public AiPromptbausteinFolderVM CopiedFolder { get; set; }
|
||||
public AiPromptbausteinPromptVM CopiedPrompt { get; set; }
|
||||
|
||||
public DelegateCommand OpenAddFolderDialogCommand { get; private set; }
|
||||
public DelegateCommand OpenEditFolderDialogCommand { get; private set; }
|
||||
public DelegateCommand CopyFolderCommand { get; private set; }
|
||||
public DelegateCommand PasteFolderCommand { get; private set; }
|
||||
public DelegateCommand DeleteFolderCommand { get; private set; }
|
||||
|
||||
public DelegateCommand OpenAddPromptDialogCommand { get; private set; }
|
||||
public DelegateCommand OpenEditPromptDialogCommand { get; private set; }
|
||||
public DelegateCommand CopyPromptCommand { get; private set; }
|
||||
public DelegateCommand PastePromptCommand { get; private set; }
|
||||
public DelegateCommand DeletePromptCommand { get; private set; }
|
||||
public DelegateCommand ChangeFavoritenStatePromptCommand { get; private set; }
|
||||
|
||||
public bool CanEditPromptbausteine { get; set; }
|
||||
public bool HasCopiedFolder => CopiedFolder is object;
|
||||
public bool HasCopiedPrompt => CopiedPrompt is object;
|
||||
public CompactEmployeeDC CurrentEmployee => BeWoApp.CompactLoggedOnEmployee;
|
||||
|
||||
public AiPromptbausteinSelectionComplexViewModel()
|
||||
{
|
||||
SendCommand = new DelegateCommand(Send, CanSend, true);
|
||||
@@ -34,6 +63,8 @@ namespace BeWo.ViewModel.View.AI
|
||||
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType) : this()
|
||||
{
|
||||
AiActionType = aiActionType;
|
||||
WindowService = BeWoApp.MainControl.WindowService;
|
||||
InitCommands();
|
||||
}
|
||||
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType, AiPromptbausteinFolderListVM viewModel, bool isFavorite = false) : this(aiActionType)
|
||||
{
|
||||
@@ -42,6 +73,20 @@ namespace BeWo.ViewModel.View.AI
|
||||
IsFavorite = isFavorite;
|
||||
}
|
||||
|
||||
private void InitCommands()
|
||||
{
|
||||
OpenAddFolderDialogCommand = new DelegateCommand(OpenAddFolderDialog, canOpenAddFolderDialog, false);
|
||||
OpenEditFolderDialogCommand = new DelegateCommand(OpenEditFolderDialog, canOpenEditFolderDialog, false);
|
||||
DeleteFolderCommand = new DelegateCommand(DeleteFolder, canDeleteFolder, false);
|
||||
|
||||
OpenAddPromptDialogCommand = new DelegateCommand(OpenAddPromptDialog, canOpenAddPromptDialog, false);
|
||||
OpenEditPromptDialogCommand = new DelegateCommand(OpenEditPromptDialog, canOpenEditPromptDialog, false);
|
||||
DeletePromptCommand = new DelegateCommand(OpenDeletePromptDialog, canOpenDeletePromptDialog, false);
|
||||
ChangeFavoritenStatePromptCommand = new DelegateCommand(ChangeFavoritenStatePrompt, canChangeFavoritenStatePrompt, false);
|
||||
|
||||
CanEditPromptbausteine = BeWoApp.HasLoggedOnUserRight(UserRightType.AiModulePromptbausteineEdit);
|
||||
}
|
||||
|
||||
public bool IsFavorite { get; set; }
|
||||
|
||||
public DelegateCommand SendCommand { get; set; }
|
||||
@@ -120,7 +165,172 @@ namespace BeWo.ViewModel.View.AI
|
||||
private void UpdateVMList(AiPromptbausteinFolderListVM new_list)
|
||||
{
|
||||
Folders = new_list;
|
||||
if (Folders.VMList.Count > 0 && Folders.VMList[0].DataContract.Oid == -5)
|
||||
Favoriten = Folders.VMList[0];
|
||||
FirePropertyChanged(nameof(Folders));
|
||||
}
|
||||
|
||||
public void UpdateFolderCommands()
|
||||
{
|
||||
OpenAddFolderDialogCommand?.RaiseCanExecuteChanged();
|
||||
OpenEditFolderDialogCommand?.RaiseCanExecuteChanged();
|
||||
CopyFolderCommand?.RaiseCanExecuteChanged();
|
||||
PasteFolderCommand?.RaiseCanExecuteChanged();
|
||||
DeleteFolderCommand?.RaiseCanExecuteChanged();
|
||||
}
|
||||
public void UpdatePromptCommands()
|
||||
{
|
||||
OpenAddPromptDialogCommand?.RaiseCanExecuteChanged();
|
||||
OpenEditPromptDialogCommand?.RaiseCanExecuteChanged();
|
||||
CopyPromptCommand?.RaiseCanExecuteChanged();
|
||||
PastePromptCommand?.RaiseCanExecuteChanged();
|
||||
DeletePromptCommand?.RaiseCanExecuteChanged();
|
||||
ChangeFavoritenStatePromptCommand?.RaiseCanExecuteChanged();
|
||||
}
|
||||
|
||||
// --- Folder Commands ---
|
||||
|
||||
void OpenAddFolderDialog()
|
||||
{
|
||||
var sel_folder = SelectedFolder;
|
||||
var new_vm = sel_folder.SubFolders.CreateNewVM();
|
||||
|
||||
new_vm.Creator = CurrentEmployee;
|
||||
new_vm.Parent = sel_folder;
|
||||
new_vm.ParentFolderOid = sel_folder?.DataContract?.Oid;
|
||||
new_vm.CanAddFolder = true;
|
||||
new_vm.CanAddPrompt = true;
|
||||
new_vm.CanEdit = true;
|
||||
new_vm.ActionType = AiActionType;
|
||||
|
||||
var vm = new AiPromptbausteinFolderViewModel(new_vm, true);
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var new_dc = new_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinFolder(new List<AiPromptbausteinFolderDC> { new_dc }),
|
||||
(new_dcs) => ReloadVMList());
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
}
|
||||
void OpenEditFolderDialog()
|
||||
{
|
||||
var sel_folder = SelectedFolder;
|
||||
var sel_dc = sel_folder.CopyToEmptyDataContract();
|
||||
sel_dc.CanEdit = SelectedFolder.CanEdit;
|
||||
var edit_vm = new AiPromptbausteinFolderVM(sel_dc);
|
||||
|
||||
var vm = new AiPromptbausteinFolderViewModel(edit_vm, false);
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var edit_dc = edit_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinFolder(new List<AiPromptbausteinFolderDC> { edit_dc }),
|
||||
(update_dc) => ReloadVMList());
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
}
|
||||
void DeleteFolder()
|
||||
{
|
||||
var sel_folder = SelectedFolder;
|
||||
var parent = sel_folder.Parent;
|
||||
|
||||
var result = MessageBox.Show("Möchten Sie den ausgewählten Ordner wirklich löschen?", "Hinweis", MessageBoxButton.OKCancel);
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
var oid2version = new Dictionary<long, long>()
|
||||
{
|
||||
{sel_folder.DataContract.Oid.Value, sel_folder.DataContract.Version.Value}
|
||||
};
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinFolder(oid2version),
|
||||
() => ReloadVMList());
|
||||
}
|
||||
|
||||
bool canOpenAddFolderDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddFolder ?? true);
|
||||
bool canOpenEditFolderDialog() => CanEditPromptbausteine && (SelectedFolder?.CanEdit ?? false);
|
||||
bool canDeleteFolder() => CanEditPromptbausteine && (SelectedFolder?.CanEdit ?? false);
|
||||
|
||||
// --- Prompt Commands ---
|
||||
|
||||
void OpenAddPromptDialog()
|
||||
{
|
||||
var sel_folder = SelectedFolder;
|
||||
var new_vm = sel_folder.SubPrompts.CreateNewVM();
|
||||
|
||||
new_vm.Creator = CurrentEmployee;
|
||||
new_vm.ParentFolderOid = sel_folder.DataContract.Oid;
|
||||
new_vm.ShowPrompt = true;
|
||||
new_vm.ShowPromptByTenant = true;
|
||||
new_vm.CanEdit = true;
|
||||
new_vm.ActionType = AiActionType;
|
||||
|
||||
var vm = new AiPromptbausteinPromptViewModel(new_vm, true);
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var new_dc = new_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinPrompt(new List<AiPromptbausteinPromptDC> { new_dc }),
|
||||
(new_dcs) => ReloadVMList());
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
}
|
||||
void OpenEditPromptDialog()
|
||||
{
|
||||
var sel_prompt = SelectedPrompt;
|
||||
var sel_dc = sel_prompt.CopyToEmptyDataContract();
|
||||
sel_dc.CanEdit = SelectedPrompt.CanEdit;
|
||||
var edit_vm = new AiPromptbausteinPromptVM(sel_dc);
|
||||
|
||||
var vm = new AiPromptbausteinPromptViewModel(edit_vm, false);
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var edit_dc = edit_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(new List<AiPromptbausteinPromptDC> { edit_dc }),
|
||||
(update_dc) => ReloadVMList());
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
}
|
||||
void OpenDeletePromptDialog()
|
||||
{
|
||||
var sel_prompt = SelectedPrompt;
|
||||
var folder = SelectedFolder;
|
||||
|
||||
var result = MessageBox.Show("Möchten Sie den ausgewählten Prompt wirklich löschen?", "Hinweis", MessageBoxButton.OKCancel);
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
var oid2version = new Dictionary<long, long>()
|
||||
{
|
||||
{sel_prompt.DataContract.Oid.Value, sel_prompt.DataContract.Version.Value}
|
||||
};
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinPrompt(oid2version),
|
||||
() => ReloadVMList());
|
||||
}
|
||||
void ChangeFavoritenStatePrompt()
|
||||
{
|
||||
var sel_prompt = SelectedPrompt;
|
||||
sel_prompt.IsFavorite = !sel_prompt.IsFavorite;
|
||||
var edit_dc = sel_prompt.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(new List<AiPromptbausteinPromptDC> { edit_dc }),
|
||||
(update_dc) => ReloadVMList());
|
||||
}
|
||||
|
||||
bool canOpenAddPromptDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddPrompt ?? false);
|
||||
bool canOpenEditPromptDialog() => SelectedPrompt is object;
|
||||
bool canOpenDeletePromptDialog() => CanEditPromptbausteine && (SelectedPrompt?.CanEdit ?? false);
|
||||
bool canChangeFavoritenStatePrompt() => SelectedPrompt is object;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user