Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 106 additions & 55 deletions BrowserBatchWriteWindow.xaml
Original file line number Diff line number Diff line change
@@ -1,38 +1,37 @@
<Window x:Class="ArIED61850Tester.BrowserBatchWriteWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Write selected Data Attributes · ARSAS"
Width="760" Height="580" MinWidth="650" MinHeight="420" MaxHeight="690"
Title="Write Data to IED" Width="940" Height="515"
MinWidth="740" MinHeight="390" MaxHeight="790"
WindowStartupLocation="CenterOwner" ResizeMode="CanResize"
Background="#F5F7FA" FontFamily="{StaticResource AppFontFamily}" FontSize="11.5"
Loaded="Window_Loaded" Closed="Window_Closed">
<Grid Margin="14,12,14,12">
Background="#F5F7FB" FontFamily="{StaticResource AppFontFamily}" FontSize="11.5"
Icon="Assets/app-icon.ico" Loaded="Window_Loaded" Closed="Window_Closed">
<Grid Margin="13,10,13,11">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" MinHeight="100"/>
<RowDefinition Height="*" MinHeight="140"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="2,0,2,10">
<TextBlock Text="Write selected Data Attributes" Foreground="#293E56"
FontWeight="SemiBold" FontSize="15"/>
<TextBlock x:Name="IdentityLabel" Foreground="#5F7389" FontSize="11"
TextTrimming="CharacterEllipsis" Margin="0,3,0,0"/>
<TextBlock Text="One verified DO · exact FC/type · no IEC Control Operate"
Foreground="#637990" FontSize="10.5" Margin="0,3,0,0"/>
<TextBlock Text="Write Data to IED" Foreground="#273E58"
FontWeight="SemiBold" FontSize="14"/>
<TextBlock x:Name="IdentityLabel" Foreground="#58708C" FontSize="11"
TextTrimming="CharacterEllipsis" Margin="0,4,0,0"
ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"/>
</StackPanel>
<TextBlock Grid.Row="1" Text="Select individual rows, enter new values and inspect the live MMS type before confirming. Writes are sequential, never atomic."
TextWrapping="Wrap" Foreground="#596D84" FontSize="10.5" Margin="2,0,2,9"/>
<DataGrid x:Name="RowsGrid" Grid.Row="2" ItemsSource="{Binding Rows}"
<!-- Short leaf names and type-aware inline editing; full exact reference on hover. -->
<DataGrid x:Name="RowsGrid" Grid.Row="1" ItemsSource="{Binding Rows}"
Style="{StaticResource ModernDataGrid}" IsReadOnly="False"
AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False"
RowHeight="35" ColumnHeaderHeight="31" MinHeight="0"
HeadersVisibility="Column" RowHeight="34" ColumnHeaderHeight="30"
GridLinesVisibility="Horizontal" BorderBrush="#CCD9E8"
AlternatingRowBackground="#F5F8FC"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"
EnableRowVirtualization="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Write" Width="53">
<DataGridTemplateColumn Header="" Width="40">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" VerticalAlignment="Center"
Expand All @@ -41,50 +40,102 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="DA (exact MMS)" Binding="{Binding ReferenceText}"
IsReadOnly="True" Width="2.4*" MinWidth="220"/>
<DataGridTextColumn Header="FC" Binding="{Binding Fc}" IsReadOnly="True" Width="45"/>
<DataGridTextColumn Header="MMS type" Binding="{Binding Type}" IsReadOnly="True" Width="89"/>
<DataGridTextColumn Header="Before" Binding="{Binding Old}" IsReadOnly="True" Width="90"/>
<DataGridTemplateColumn Header="New value" Width="1.1*" MinWidth="108">
<DataGridTextColumn Header="Data Attribute" Binding="{Binding ShortName}"
IsReadOnly="True" Width="1.55*" MinWidth="133">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="ToolTip" Value="{Binding ReferenceText}"/>
<Setter Property="Foreground" Value="#2D4764"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="FC" Binding="{Binding Fc}" IsReadOnly="True" Width="43"/>
<DataGridTextColumn Header="Current" Binding="{Binding Old}" IsReadOnly="True" Width="1*" MinWidth="90">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="ToolTip" Value="{Binding Old}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="Value" Width="1.35*" MinWidth="118">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding NewValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Eligible}" Padding="5,3" FontSize="11"/>
<Grid VerticalAlignment="Center" Margin="2,0">
<TextBox x:Name="TypedValue" Height="27" Padding="6,3"
Text="{Binding NewValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding TextEditorVisibility}"
IsEnabled="{Binding CanEdit}" VerticalContentAlignment="Center"
FontSize="11" BorderBrush="#B9CCE1"
ToolTip="Edit the current live value; only changed values can be written"/>
<ComboBox x:Name="BooleanValue" Height="27" Padding="4,2"
ItemsSource="{Binding BooleanOptions}"
SelectedItem="{Binding NewValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding BooleanEditorVisibility}"
IsEnabled="{Binding CanEdit}"
ToolTip="Choose true or false"/>
<TextBlock Text="Read to edit" FontSize="10"
Foreground="#8193A7" VerticalAlignment="Center"
Visibility="{Binding PlaceholderVisibility}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Result / reason" Binding="{Binding Status}"
IsReadOnly="True" Width="1.7*" MinWidth="145"/>
<DataGridTextColumn Header="MMS type" Binding="{Binding Type}" IsReadOnly="True" Width="1.1*" MinWidth="95"/>
<DataGridTextColumn Header="Result" Binding="{Binding Status}" IsReadOnly="True" Width="1.8*" MinWidth="145">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="ToolTip" Value="{Binding Status}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="3" Margin="1,10,1,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock x:Name="StatusLabel" Text="No Write sent. Select changed values for read-only inspection."
TextWrapping="Wrap" Foreground="#506780" FontSize="10.5" Margin="0,0,0,8"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="A confirmed Write is not physical feedback."
Foreground="#70849B" FontSize="10" TextWrapping="Wrap"
VerticalAlignment="Center" Margin="0,0,8,0"/>
<Button x:Name="InspectButton" Grid.Column="1" Content="Inspect selected"
Style="{StaticResource SoftButton}" Width="117" Height="31"
Margin="0,0,7,0" Click="Inspect_Click"/>
<Button x:Name="WriteButton" Grid.Column="2" Content="Write selected…"
Width="118" Height="31" IsEnabled="False" Background="#255F99"
Foreground="White" BorderBrush="#255F99"
Margin="0,0,7,0" Click="Write_Click"/>
<Button Grid.Column="3" Content="Close" Width="72" Height="31"
Style="{StaticResource SoftButton}" Click="Close_Click"/>
</Grid>
<Grid Grid.Row="2" Margin="2,9,2,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="StatusLabel" Grid.Column="0" Foreground="#59718E"
VerticalAlignment="Center" FontSize="10.5"
TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"
ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"
Margin="0,0,9,0" Text="Reading typed Data Attributes…"/>
<Button x:Name="InspectButton" Grid.Column="1" Style="{StaticResource SoftButton}"
Width="85" Height="32" Margin="0,0,7,0" Click="Inspect_Click">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Viewbox Width="15" Height="15" Margin="0,0,5,0">
<Path Data="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q94 0 175 45t125 122v-167h80v320H540v-80h191q-29-66-95.5-113T480-760q-116 0-198 82t-82 198q0 116 82 198t198 82q93 0 165-57t91-143h82q-20 119-114.5 199.5T480-120Z" Fill="#45617C"/>
</Viewbox>
<TextBlock Text="Read" VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button x:Name="WriteButton" Grid.Column="2" IsEnabled="False"
Style="{StaticResource PrimaryButton}" Width="94" Height="32"
MinHeight="32" Margin="0,0,7,0" Click="Write_Click">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Viewbox Width="16" Height="16" Margin="0,0,6,0">
<Path Data="M167-120q-21 5-36.5-10.5T120-167l40-191 198 198-191 40Zm191-40L160-358l458-458q23-23 57-23t57 23l84 84q23 23 23 57t-23 57L358-160Zm317-600L261-346l85 85 414-414-85-85Z" Fill="White"/>
</Viewbox>
<TextBlock Text="Write" VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Grid.Column="3" Style="{StaticResource SoftButton}"
Width="82" Height="32" Click="Close_Click">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Viewbox Width="12" Height="12" Margin="0,0,5,0">
<Path Data="M256-200l-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z" Fill="#415771"/>
</Viewbox>
<TextBlock Text="Close" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Grid>
</Window>
Loading
Loading