diff --git a/Common/Common.cd b/Common/Common.cd
index 348886f..23eb081 100644
--- a/Common/Common.cd
+++ b/Common/Common.cd
@@ -16,7 +16,7 @@
-
+
@@ -43,7 +43,7 @@
- AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA=
+ AAAAAAAAAAAAEAAAAAAAAAAAAAAAEAgAAAAAAIABAAA=
Helpers\EnumHelpers.cs
@@ -92,8 +92,16 @@
StartupHelpers\ServiceExtensions.cs
+
+
+
+ AAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA=
+ Helpers\RecurringTimer.cs
+
+
+
-
+
AAAAAAAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
IContext.cs
diff --git a/MultiTerm.Core/TerminalViewModel.cd b/MultiTerm.Core/TerminalViewModel.cd
index e138639..9b221d3 100644
--- a/MultiTerm.Core/TerminalViewModel.cd
+++ b/MultiTerm.Core/TerminalViewModel.cd
@@ -15,18 +15,25 @@
- AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAACAAAAgA=
+ AAAAAAKAAAAIIAAAAUAAAAAAAAAAAAAAAQAACAAAAgA=
ViewModel\SendReceiveViewModel.cs
- EAQCUCCAQIAAIgAgEEAGBAgAAAAFRKYAAARgCAAAAAA=
+ EAQAUKIAQIAMAgQgEUAGBAhAAAAFRKYAAQRgCAAAABA=
ViewModel\TerminalViewModel.cs
+
+
+
+ AgAAAAIgBAAIAgACgUAAggAAAACAAEAAAYAQCAAAiAM=
+ ViewModel\ConsoleViewModel.cs
+
+
diff --git a/MultiTerm.Core/ViewModel/MultiFormatDataViewModel.cs b/MultiTerm.Core/ViewModel/MultiFormatDataViewModel.cs
index a5758f9..23b092c 100644
--- a/MultiTerm.Core/ViewModel/MultiFormatDataViewModel.cs
+++ b/MultiTerm.Core/ViewModel/MultiFormatDataViewModel.cs
@@ -150,20 +150,32 @@ public partial class MultiFormatDataViewModel : ObservableObject
}
}
+ ///
+ /// Returns the selected Data as string in the given.
+ /// If nothing is selected, returns the whole content of Data.
+ ///
+ /// format to return data in
+ /// the data in the given format
public string GetSelectedDataAsString(FormatType format)
{
- // nothing selected => return empty string
- if(this.Selected == null || this.Selected.Count == 0) { return string.Empty; }
+ List? dataCopy = new();
- // shallow copy of the selected items
- var selectedCopy = this.Selected.Select(item => (ByteDataViewModel)item.Clone()).ToList();
+ // nothing selected => return whole data
+ if(this.Selected == null || this.Selected.Count == 0)
+ {
+ dataCopy = this.Data.Select(item => (ByteDataViewModel)item.Clone()).ToList();
+ }
+ else // something is selected: shallow copy of the selected items
+ {
+ dataCopy = this.Selected.Select(item => (ByteDataViewModel)item.Clone()).ToList();
+ }
string dataAsString = string.Empty;
dataAsString = format switch
{
- FormatType.Character => ByteDataViewModelHelpers.GetCharacterStringOfBytesDataViewModels(selectedCopy),
- FormatType.Hexadecimal => ByteDataViewModelHelpers.GetHexadecimalStringOfBytesDataViewModels(selectedCopy),
- FormatType.Binary => ByteDataViewModelHelpers.GetBinaryStringOfEBytesDataViewModels(selectedCopy),
+ FormatType.Character => ByteDataViewModelHelpers.GetCharacterStringOfBytesDataViewModels(dataCopy),
+ FormatType.Hexadecimal => ByteDataViewModelHelpers.GetHexadecimalStringOfBytesDataViewModels(dataCopy),
+ FormatType.Binary => ByteDataViewModelHelpers.GetBinaryStringOfEBytesDataViewModels(dataCopy),
_ => throw new ArgumentException($"'{GetSelectedDataAsString}()' does not have handling implemented for {nameof(FormatType)} {format}")
};
diff --git a/MultiTerm.Core/ViewModel/TerminalViewModel.cs b/MultiTerm.Core/ViewModel/TerminalViewModel.cs
index 5ba766d..bb50f1f 100644
--- a/MultiTerm.Core/ViewModel/TerminalViewModel.cs
+++ b/MultiTerm.Core/ViewModel/TerminalViewModel.cs
@@ -345,6 +345,15 @@ public abstract partial class TerminalViewModel : ObservableObject, ITerminalVie
/// element to add to the history
protected void AddToSendHistory(IHistoryElement element)
{
+ // ignore elements that are of zero length
+ if(element.DisplayText.Length <= 0)
+ { return; }
+
+ // do not insert elements that have the same content as the last element
+ if (this.SentMessagesHistory.Count > 0 &&
+ element.DisplayText.Equals(this.SentMessagesHistory.First().DisplayText))
+ { return; }
+
// shallow copy of element (so that element can be changed externally)
var copy = (IHistoryElement)element.Clone();