diff --git a/MultiTerm.Core/Common/NewlineSeparatorType.cs b/MultiTerm.Core/Common/NewlineSeparatorType.cs
new file mode 100644
index 0000000..30030ab
--- /dev/null
+++ b/MultiTerm.Core/Common/NewlineSeparatorType.cs
@@ -0,0 +1,30 @@
+using System.ComponentModel;
+
+namespace MultiTerm.Core.Common;
+
+public enum NewlineSeparatorType
+{
+ ///
+ /// No newline separator.
+ ///
+ [Description("None")]
+ None,
+
+ ///
+ /// Carriage return newline separator.
+ ///
+ [Description("CR")]
+ CR,
+
+ ///
+ /// Linefeed newline separator.
+ ///
+ [Description("LF")]
+ LF,
+
+ ///
+ /// Carriage return and linefeed as newline separator.
+ ///
+ [Description("CR+LF")]
+ CR_LF
+}
diff --git a/MultiTerm.Core/ViewModel/ShellViewModel.cs b/MultiTerm.Core/ViewModel/ShellViewModel.cs
index 770fe1a..0d32acb 100644
--- a/MultiTerm.Core/ViewModel/ShellViewModel.cs
+++ b/MultiTerm.Core/ViewModel/ShellViewModel.cs
@@ -1,6 +1,9 @@
using Common.StartupHelpers;
using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using MultiTerm.Core.Common;
using System.Collections.ObjectModel;
+using System.Runtime.CompilerServices;
namespace MultiTerm.Core.ViewModel;
@@ -17,6 +20,21 @@ public partial class ShellViewModel : ObservableObject
[ObservableProperty]
private ITerminalViewModel? selectedTerminalViewModel;
+ #region Settings Menu Bar
+ public IEnumerable NewlineSeparatorTypeValues
+ {
+ get { return Enum.GetValues(typeof(NewlineSeparatorType)).Cast(); }
+ }
+
+ // TODO Initialize from File
+ [ObservableProperty]
+ private NewlineSeparatorType selectedReceiveNewlineSeparator = NewlineSeparatorType.None;
+
+ // TODO Initialize from File
+ [ObservableProperty]
+ private NewlineSeparatorType selectedSendNewlineSeparator = NewlineSeparatorType.None;
+ #endregion
+
public ShellViewModel(IAbstractFactory sendReceiveViewModelFactory)
{
this.sendReceiveViewModelFactory = sendReceiveViewModelFactory;
@@ -34,5 +52,11 @@ public partial class ShellViewModel : ObservableObject
// add to collection and set as selected
this.TerminalViewModels.Add(newTerminal);
this.SelectedTerminalViewModel = newTerminal;
- }
+ }
+
+ partial void OnSelectedReceiveNewlineSeparatorChanged(NewlineSeparatorType value)
+ {
+ Console.WriteLine($"Changed to {value}");
+ }
+
}
diff --git a/MultiTerm.Wpf/Controls/MenuItemExtensions.cs b/MultiTerm.Wpf/Controls/MenuItemExtensions.cs
new file mode 100644
index 0000000..c527315
--- /dev/null
+++ b/MultiTerm.Wpf/Controls/MenuItemExtensions.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace MultiTerm.Wpf.Controls
+{
+ ///
+ /// TODO ueberarbeiten
+ /// FROM:
+ /// https://stackoverflow.com/questions/3652688/mutually-exclusive-checkable-menu-items/11497189#11497189
+ ///
+ public class MenuItemExtensions : MenuItem
+ {
+ private static MenuItem? previouslySelectedMenuItem = null;
+ public static Dictionary