fixed no tab open exception,

worked on formatting,
added icons for protocol types,
worked on status bar messages
master
Jonas Arnold 3 years ago
parent 9ada8868f7
commit eac4757427
  1. 4
      MultiTerm.Core/ViewModel/TerminalViewModel.cs
  2. 2
      MultiTerm.Wpf.CustomControl/MultiFormatDataView/MultiFormatDataView.cs
  3. BIN
      MultiTerm.Wpf/Assets/mdi-keyboard.png
  4. BIN
      MultiTerm.Wpf/Assets/mdi-network.png
  5. BIN
      MultiTerm.Wpf/Assets/mdi-serial-port.png
  6. 11
      MultiTerm.Wpf/MultiTerm.Wpf.csproj
  7. 3
      MultiTerm.Wpf/ValueConverters/MessageImportanceToBrushConverter.cs
  8. 32
      MultiTerm.Wpf/ValueConverters/MessageImportanceToFontWeightConverter.cs
  9. 40
      MultiTerm.Wpf/ValueConverters/ProtocolTypeToIconConverter.cs
  10. 15
      MultiTerm.Wpf/View/SettingsView/UsbHidSettingsView.xaml
  11. 18
      MultiTerm.Wpf/View/ShellView.xaml

@ -48,11 +48,11 @@ public abstract partial class TerminalViewModel : ObservableObject, ITerminalVie
{
if(this.CommunicationProtocol == null)
{
this.Title = $"{ProtocolType}";
this.Title = $"new";
}
else
{
this.Title = $"{ProtocolType} {this.CommunicationProtocol?.InstanceIdentifier}";
this.Title = $"{this.CommunicationProtocol?.InstanceIdentifier}";
}
}
#endregion

@ -155,6 +155,8 @@ public class MultiFormatDataView : Control
{
// extract instance and guard null
if (d is not MultiFormatDataView mfdv) { return; }
// guard DataSource is null
if (mfdv.DataSource == null) { return; }
// manually create collection view
ICollectionView cv = CollectionViewSource.GetDefaultView(mfdv.DataSource.Data);

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

@ -7,6 +7,13 @@
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<None Remove="Assets\mdi-keyboard.png" />
<None Remove="Assets\mdi-network.png" />
<None Remove="Assets\mdi-serial-port.png" />
<None Remove="Assets\mid-serial-port.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Humanizer.Core" Version="2.14.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
@ -21,7 +28,9 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Assets\" />
<Resource Include="Assets\mdi-keyboard.png" />
<Resource Include="Assets\mdi-network.png" />
<Resource Include="Assets\mdi-serial-port.png" />
</ItemGroup>
</Project>

@ -1,7 +1,6 @@
using Common.Messaging;
using System;
using System.Globalization;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
@ -19,7 +18,7 @@ internal class MessageImportanceToBrushConverter : IValueConverter
return msgImportance switch
{
MessageImportance.Normal => Brushes.Black,
MessageImportance.Medium => Brushes.DarkSalmon,
MessageImportance.Medium => Brushes.DarkOrange,
MessageImportance.High => Brushes.Red,
MessageImportance.HighAndRequiresConfirmation => throw new NotImplementedException(),
_ => throw new NotImplementedException(),

@ -0,0 +1,32 @@
using Common.Messaging;
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace MultiTerm.Wpf.ValueConverters;
[ValueConversion(typeof(MessageImportance), typeof(FontWeight))]
internal class MessageImportanceToFontWeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value is not MessageImportance msgImportance)
{ throw new ArgumentException($"Wrong object provided, can only convert from type {nameof(MessageImportance)}"); }
return msgImportance switch
{
MessageImportance.Normal => FontWeights.Normal,
MessageImportance.Medium => FontWeights.Medium,
MessageImportance.High => FontWeights.Bold,
MessageImportance.HighAndRequiresConfirmation => throw new NotImplementedException(),
_ => throw new NotImplementedException(),
};
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

@ -0,0 +1,40 @@
using MultiTerm.Protocols.Types;
using System;
using System.Globalization;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media.Imaging;
namespace MultiTerm.Wpf.ValueConverters;
[ValueConversion(typeof(ProtocolType), typeof(Image))]
internal class ProtocolTypeToIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value is not ProtocolType protocolType)
{ throw new ArgumentException($"Wrong object provided, can only convert from type {nameof(ProtocolType)}"); }
string resourceFolderPath = "pack://application:,,,/Assets/";
//string path = $"{typeof(MainWindow).FullName};component/Assets/";
//string packUri = "pack://application:,,,/Assets/";
string fileName = protocolType switch
{
ProtocolType.Serial => "mdi-serial-port.png",
ProtocolType.UsbHid => "mdi-keyboard.png",
ProtocolType.Tcp => "mdi-network.png",
ProtocolType.Udp => "mdi-network.png",
_ => throw new NotImplementedException(),
};
var uriSource = new Uri(resourceFolderPath + fileName);
return new BitmapImage(uriSource);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

@ -17,7 +17,7 @@
<Label Content="VID:" FontSize="11" VerticalAlignment="Center" Padding="0 0 5 0"/>
<TextBlock Text="0x"/>
<TextBlock Text="{Binding VendorId}" FontWeight="DemiBold"/>
<Label Content="PID:" FontSize="11" VerticalAlignment="Center" Padding="10 0 5 0"/>
<Label Content="PID:" FontSize="11" VerticalAlignment="Center" Padding="15 0 5 0"/>
<TextBlock Text="0x"/>
<TextBlock Text="{Binding ProductId}" FontWeight="DemiBold"/>
</StackPanel>
@ -87,13 +87,16 @@
<Button Margin="5 0" Content="R" VerticalContentAlignment="Center"
Command="{Binding ReloadDevicesCommand}" Width="25"/>
<Label Margin="20 0 10 0" VerticalAlignment="Center">Vendor ID:</Label>
<Label Margin="20 0 10 0" VerticalAlignment="Center" HorizontalAlignment="Center">Vendor ID:</Label>
<TextBox Width="50" VerticalContentAlignment="Center" Text="{Binding Path=VendorIdHex, Mode=TwoWay}" />
<Label Margin="20 0 10 0" VerticalAlignment="Center">Product ID:</Label>
<Label Margin="20 0 10 0" VerticalAlignment="Center" HorizontalAlignment="Center">Product ID:</Label>
<TextBox Width="50" VerticalContentAlignment="Center" Text="{Binding Path=ProductIdHex, Mode=TwoWay}" />
<Label Margin="20 0 10 0" VerticalAlignment="Center">Serial Number:</Label>
<StackPanel Orientation="Horizontal">
<Label Margin="20 0 0 0" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="0">Serial Number:</Label>
<Label Margin="5 0 10 0" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="DarkGray" FontSize="12" Padding="0 0">(optional)</Label>
</StackPanel>
<TextBox Width="Auto" MinWidth="100" VerticalContentAlignment="Center" Text="{Binding Path=SerialNumber, Mode=TwoWay}" />
</StackPanel>

@ -12,13 +12,15 @@
xmlns:types="clr-namespace:MultiTerm.Core.Types;assembly=MultiTerm.Core"
xmlns:protocol_types="clr-namespace:MultiTerm.Protocols.Types;assembly=MultiTerm.Protocols"
xmlns:helpers="clr-namespace:MultiTerm.Wpf.Helpers"
mc:Ignorable="d"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="1200">
<UserControl.Resources>
<!-- Value Converters -->
<conv:EnumDescriptionToMenuItemConverter x:Key="EnumDescriptionConverter"/>
<conv:MessageImportanceToBrushConverter x:Key="MsgImportanceBrushConverter"/>
<conv:MessageImportanceToFontWeightConverter x:Key="MsgImportanceFontWeightConverter"/>
<conv:ProtocolTypeToIconConverter x:Key="ProtocolTypeIconConverter"/>
<!-- Data Sources -->
<ObjectDataProvider x:Key="NewlineSeparatorTypeValues"
ObjectType="{x:Type sys:Enum}"
@ -44,7 +46,7 @@
</UserControl.Resources>
<DockPanel>
<Menu DockPanel.Dock="Top">
<Menu DockPanel.Dock="Top" FontSize="14">
<MenuItem Header="_File"/>
<MenuItem Header="_Edit">
<MenuItem Header="_Copy" InputGestureText="Ctrl + C">
@ -59,7 +61,7 @@
</MenuItem>
</MenuItem>
<MenuItem Header="_Settings">
<controls:SingleSelectSubMenu Title="Default Newline Separator on Receive" HorizontalContentAlignment="Left" VerticalContentAlignment="Top"
<controls:SingleSelectSubMenu Title="Default Data Display Newline Separator" HorizontalContentAlignment="Left" VerticalContentAlignment="Top"
OptionsSource="{Binding Source={StaticResource NewlineSeparatorTypeValues}}"
SelectedMenuItem="{Binding DefaultReceiveNewlineSeparator, Mode=TwoWay, Converter={StaticResource EnumDescriptionConverter}}">
</controls:SingleSelectSubMenu>
@ -75,7 +77,9 @@
<!-- Bottom status bar with separator -->
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Text="{Binding StatusBarMessage}" Foreground="{Binding Path=StatusBarMessageImportance, Converter={StaticResource MsgImportanceBrushConverter}}"/>
<TextBlock Text="{Binding StatusBarMessage}" FontSize="15"
Foreground="{Binding Path=StatusBarMessageImportance, Converter={StaticResource MsgImportanceBrushConverter}}"
FontWeight="{Binding Path=StatusBarMessageImportance, Converter={StaticResource MsgImportanceFontWeightConverter}}"/>
</StatusBarItem>
</StatusBar>
<Separator DockPanel.Dock="Bottom" Margin="0 5 0 5"/>
@ -140,6 +144,10 @@
<!-- Tab Template -->
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Height="20" Stretch="Uniform" Margin="0 0 8 0"
Source="{Binding Path=ProtocolType, Converter={StaticResource ProtocolTypeIconConverter}}"
ToolTip="{Binding Path=ProtocolType,Converter={StaticResource EnumDescriptionConverter}}"
ToolTipService.InitialShowDelay="0"/>
<TextBlock Text="{Binding Title, Mode=OneWay}" />
<Button Command="{Binding CloseRequestCommand}" Width="20" Padding="0" Margin="8 0 0 0" Content="X">
<Button.Style>

Loading…
Cancel
Save