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();