diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 58256611f..6ff40da44 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -94,6 +94,15 @@ + + + + AnimatedBeWoWindow.xaml + + + Designer + MSBuild:Compile + False ..\Lib\Blacklight.Wpf.Controls.dll @@ -324,6 +333,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -332,6 +345,14 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -3467,7 +3488,9 @@ + + diff --git a/BeWo/BeWoApp.xaml b/BeWo/BeWoApp.xaml index e26b672d2..469b9f71c 100644 --- a/BeWo/BeWoApp.xaml +++ b/BeWo/BeWoApp.xaml @@ -82,6 +82,7 @@ + @@ -605,8 +606,12 @@ Grid.RowSpan="1" Grid.Column="0" Grid.ColumnSpan="2" - Padding="5,5,5,5"> + Padding="5,5,5,5" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch"> - - - + + + + @@ -17,27 +27,63 @@ - + - - + + - WICHTIG! Bitte tragen Sie keine echten Daten bei Ihren Tests ein, da es sich um einen öffentlichen Testzugang handelt, auf den jeder Zugriff hat! - + + WICHTIG! Bitte tragen Sie keine echten Daten bei Ihren Tests ein, da es sich um einen öffentlichen Testzugang handelt, auf den jeder Zugriff hat! + + - - + + - - - + + + diff --git a/BeWo/Converter/NewlineConverter.cs b/BeWo/Converter/NewlineConverter.cs new file mode 100644 index 000000000..03f0e7b65 --- /dev/null +++ b/BeWo/Converter/NewlineConverter.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; + +namespace BeWo.Converter +{ + public class NewlineConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return value?.ToString()? + .Replace("\\r\\n", "\r\n") + .Replace("\\n", "\r\n") + .Replace("\\r", "\r\n"); + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/BeWo/EnterTenantDialog.xaml b/BeWo/EnterTenantDialog.xaml index acc081ec9..5d01dc0cf 100644 --- a/BeWo/EnterTenantDialog.xaml +++ b/BeWo/EnterTenantDialog.xaml @@ -1,10 +1,18 @@ - - - - + + + + @@ -17,7 +25,13 @@ - + @@ -25,24 +39,70 @@ - - - - + + + + - Bitte geben Sie Ihre 10-stellige Kundennummer ein: - - - - Demo Zugang nutzen + + Bitte geben Sie Ihre 10-stellige Kundennummer ein: + + + + + + Demo Zugang nutzen + - - + + - - - + + + diff --git a/BeWo/OpenOrSaveDialog.xaml b/BeWo/OpenOrSaveDialog.xaml index c93d6ba5f..08dff80d5 100644 --- a/BeWo/OpenOrSaveDialog.xaml +++ b/BeWo/OpenOrSaveDialog.xaml @@ -1,13 +1,20 @@ - + - + @@ -18,10 +25,35 @@ - - - + - - + + - + - - + + + + + + diff --git a/BeWo/View/MiniChatView.xaml b/BeWo/View/MiniChatView.xaml index f15b2e9e0..92fa883df 100644 --- a/BeWo/View/MiniChatView.xaml +++ b/BeWo/View/MiniChatView.xaml @@ -1,14 +1,31 @@ - + - + - + diff --git a/BeWo/View/PasswortAenderungsView.xaml b/BeWo/View/PasswortAenderungsView.xaml index cd6154acb..bf5593545 100644 --- a/BeWo/View/PasswortAenderungsView.xaml +++ b/BeWo/View/PasswortAenderungsView.xaml @@ -1,44 +1,115 @@ - + - - - - - - - - - - - - - - - - + + + + + + + diff --git a/BeWo/View/Windows/AnimatedBeWoWindow.xaml b/BeWo/View/Windows/AnimatedBeWoWindow.xaml new file mode 100644 index 000000000..27ebff500 --- /dev/null +++ b/BeWo/View/Windows/AnimatedBeWoWindow.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/BeWo/View/Windows/AnimatedBeWoWindow.xaml.cs b/BeWo/View/Windows/AnimatedBeWoWindow.xaml.cs new file mode 100644 index 000000000..03eb6efd3 --- /dev/null +++ b/BeWo/View/Windows/AnimatedBeWoWindow.xaml.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +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.Animation; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Threading; + +namespace BeWo.View.Windows +{ + /// + /// Interaktionslogik für AnimatedBeWoWindow.xaml + /// + public partial class AnimatedBeWoWindow : Window + { + private bool closeStoryBoardCompleted = false; + private WaitLayer2 _WaitLayer; + + private object _GroupBoxContent; + public object GroupBoxContent + { + get { return _GroupBoxContent; } + set + { + _GroupBoxContent = value; + rootGroupBox.Content = value; + } + } + + public bool IsMaximizable = true; + public bool IsWaiting { get; set; } = false; + + public AnimatedBeWoWindow() + { + InitializeComponent(); + + CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (s, e) => Close())); + + StartWaiting(); + + if (BeWoApp.CurrentAnimatedBeWoWindow == null) + { + BeWoApp.CurrentAnimatedBeWoWindow = this; + } + else + { + throw new InvalidOperationException("Opening, BeWoApp.CurrentAnimatedBeWoWindow already set"); + } + } + + public AnimatedBeWoWindow(FrameworkElement fe) : this() + { + rootGroupBox.Content = fe; + } + + public AnimatedBeWoWindow(FrameworkElement fe, string stylestring) : this(fe) + { + rootGroupBox.Style = (Style)FindResource(stylestring); + } + + public void Window_Closing(object sender, CancelEventArgs e) + { + if (!closeStoryBoardCompleted) + { + if (BeWoApp.CurrentAnimatedBeWoWindow == this) + { + BeWoApp.CurrentAnimatedBeWoWindow = null; + } + else + { + throw new InvalidOperationException("Closing, BeWoApp.CurrentAnimatedBeWoWindow not found"); + } + + if (FindResource("WindowClosingAnimation") is Storyboard storyboard) + { + storyboard.Completed += closeStoryBoard_Completed; + Storyboard.SetTarget(storyboard.Children[0], this); + Storyboard.SetTarget(storyboard.Children[1], this); + storyboard.Begin(); + e.Cancel = true; + } + else + { + throw new InvalidOperationException("WindowClosingAnimation not found"); + } + } + } + + private void closeStoryBoard_Completed(object sender, EventArgs e) + { + closeStoryBoardCompleted = true; + + Close(); + } + + private void RootGroupBox_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + try + { + var p = e.GetPosition(this); + if (p.Y <= 40) + { + DragMove(); + } + } + catch (Exception) { } + } + + private void RootGroupBox_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) + { + if (!IsVisible) + { + return; + } + if (!IsMaximizable) + { + return; + } + + var pos = PointToScreen(Mouse.GetPosition(this)); + + if (!(e.OriginalSource is Border) && !(e.OriginalSource is TextBlock) || pos.Y > 200d || e.OriginalSource is TextBlock && Mouse.DirectlyOver is Button) + { + return; + } + + if (WindowState == WindowState.Maximized) + { + WindowState = WindowState.Normal; + return; + } + + if (WindowState == WindowState.Normal) + { + WindowState = WindowState.Maximized; + } + } + + public void Window_Closed(object sender, EventArgs e) + { + + } + + public void StartWaiting() + { + Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)StartWaitingImmediately); + } + + public void StartWaitingImmediately() + { + if (_WaitLayer == null) + { + _WaitLayer = new WaitLayer2(); + Grid.SetColumnSpan(_WaitLayer, 3); + Grid.SetRowSpan(_WaitLayer, 3); + rootGrid.Children.Add(_WaitLayer); + Panel.SetZIndex(_WaitLayer, int.MaxValue); + //_WaitLayer.RefreshUI(); + } + } + + public void EndWaiting() + { + Dispatcher.BeginInvoke( + DispatcherPriority.Normal, + (Action)delegate + { + if (_WaitLayer != null) + { + rootGrid.Children.Remove(_WaitLayer); + _WaitLayer = null; + } + }); + } + } +} diff --git a/BeWo/ViewModel/AiConversationMessageVM.cs b/BeWo/ViewModel/AiConversationMessageVM.cs index 83b79b6d8..3a7056038 100644 --- a/BeWo/ViewModel/AiConversationMessageVM.cs +++ b/BeWo/ViewModel/AiConversationMessageVM.cs @@ -37,11 +37,13 @@ namespace BeWo.ViewModel } [JsonProperty(Order = 2)] - public string Role => DataContract.Role.ToString(); + public string RoleString => DataContract.Role.ToString(); [JsonProperty(Order = 3)] public string Time => DataContract.Created.ToString(); + public AiConversationMessageRole Role => DataContract.Role; + protected override void InitByDataContract(AiConversationMessageDC pDataContract) { _Message = pDataContract.Message; diff --git a/BeWo/ViewModel/AiConversationVM.cs b/BeWo/ViewModel/AiConversationVM.cs index 8cf1f6648..7233b02fb 100644 --- a/BeWo/ViewModel/AiConversationVM.cs +++ b/BeWo/ViewModel/AiConversationVM.cs @@ -7,6 +7,7 @@ using BeWo.ViewModel.ListViewModel; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Feature.AI; +using DevExpress.Mvvm; using Newtonsoft.Json; namespace BeWo.ViewModel @@ -21,7 +22,7 @@ namespace BeWo.ViewModel public AiConversationVM() : this(new AiConversationDC()) { } public AiConversationVM(AiConversationDC dc) : base(dc, dc.Oid is null) { - + } public string Json diff --git a/BeWo/ViewModel/ListViewModel/AiConversationListVM.cs b/BeWo/ViewModel/ListViewModel/AiConversationListVM.cs index 4dca51e37..bd15d53ee 100644 --- a/BeWo/ViewModel/ListViewModel/AiConversationListVM.cs +++ b/BeWo/ViewModel/ListViewModel/AiConversationListVM.cs @@ -171,21 +171,21 @@ namespace BeWo.ViewModel.ListViewModel var message_dc = new AiConversationMessageDC() { Created = DateTime.Now, - Message = "Anweisungen \n\nTest", + Message = "Du bist eine intelligente Einheit mit ganz ganz vielen Eingaben: value1, value2, value3, value4\r\nTest", Role = BS.Shared.AiConversationMessageRole.System }; var message_dc2 = new AiConversationMessageDC() { Created = DateTime.Now, - Message = "Userprompt \n\nTest", + Message = "Dies ist eine Design Frage: Du sollst ganz viele Sachen machen. Dabei sollst du auf ganz viele Sachen achten: Zum Beispiel:\r\nSache 1\r\nSchritt 2", Role = BS.Shared.AiConversationMessageRole.User }; var message_dc3 = new AiConversationMessageDC() { Created = DateTime.Now, - Message = "Antwort\n\nTest", + Message = "Antwort. Dies ist eine Design Antwort. Du hast ganz viele Sachen angefragt. Dabei soll ich auf ganz viele Sachen achten. Wie Test, test, tEst und tesT.\r\nTest\r\nTest\r\nTest", Role = BS.Shared.AiConversationMessageRole.Assistent }; @@ -204,7 +204,7 @@ namespace BeWo.ViewModel.ListViewModel var conversation_dc = new AiConversationDC() { Created = DateTime.Now, - Displayname = "Displayname", + Displayname = "Displayname Megamegalange Deluxe Op 3000", Messages = messages_dc, Modell = model, UIContext = 19, @@ -215,7 +215,33 @@ namespace BeWo.ViewModel.ListViewModel VMList.Add(conversation_vm); + InitDummyConversations(10); + SelectedVM = conversation_vm; } + + private void InitDummyConversations(int count) + { + var model = new AiModelDC() + { + ModelName = "llama3.2" + }; + + for (int i = 0; i < count; i++) + { + var conversation_dc2 = new AiConversationDC() + { + Created = DateTime.Now, + Displayname = "Dummy Num " + i.ToString(), + Modell = model, + UIContext = 19, + Updated = DateTime.Now, + }; + + var conversation_vm2 = new AiConversationVM(conversation_dc2); + + VMList.Add(conversation_vm2); + } + } } } diff --git a/BeWo/ownChat/ChatDokumentationsView.xaml b/BeWo/ownChat/ChatDokumentationsView.xaml index ceae295bf..fc95159d4 100644 --- a/BeWo/ownChat/ChatDokumentationsView.xaml +++ b/BeWo/ownChat/ChatDokumentationsView.xaml @@ -1,14 +1,19 @@ - + - - + + diff --git a/BeWo/ownChat/ChatEmojiView.xaml b/BeWo/ownChat/ChatEmojiView.xaml index edfa1912a..c67dfe7d7 100644 --- a/BeWo/ownChat/ChatEmojiView.xaml +++ b/BeWo/ownChat/ChatEmojiView.xaml @@ -1,13 +1,17 @@ - - - + + + diff --git a/BeWo/ownChat/ChatView.xaml b/BeWo/ownChat/ChatView.xaml index a165a2dff..5f4b6d8ac 100644 --- a/BeWo/ownChat/ChatView.xaml +++ b/BeWo/ownChat/ChatView.xaml @@ -1,18 +1,30 @@ - - + + - - - + + + diff --git a/Host/Web.config b/Host/Web.config index 04c750a65..2dfa67b28 100644 --- a/Host/Web.config +++ b/Host/Web.config @@ -303,8 +303,8 @@ - - + + diff --git a/Service/ServiceImplementations/OperationsEnhancedServiceImp.cs b/Service/ServiceImplementations/OperationsEnhancedServiceImp.cs index 7d1f9b455..494a4abb2 100644 --- a/Service/ServiceImplementations/OperationsEnhancedServiceImp.cs +++ b/Service/ServiceImplementations/OperationsEnhancedServiceImp.cs @@ -14,6 +14,7 @@ using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace BeWo.Service.ServiceImplementations