Skip to content
Merged
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
31 changes: 29 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ jobs:
shell: powershell
run: .\ArIED61850Tester\scripts\verify-source-clean.ps1

- name: Verify premium P0 UX invariants
- name: Verify premium P0 and P1 UX invariants
shell: powershell
run: |
$app = Get-Content .\ArIED61850Tester\App.xaml -Raw
$main = Get-Content .\ArIED61850Tester\MainWindow.xaml -Raw
$save = Get-Content .\ArIED61850Tester\SaveSclWindow.xaml -Raw

if ($save -notmatch 'x:Name="EditionIndicator"' -or
$save -notmatch 'Content="Edition 2"' -or
$save -notmatch 'Content="Edition 1"') {
Expand All @@ -37,6 +39,31 @@ jobs:
if ($save -match '<ComboBox' -or $save -match 'Schema V3\.1' -or $save -match 'Schema V1\.6') {
throw "Save SCL still exposes the legacy schema ComboBox or technical schema revision labels."
}

$itemStyleMatch = [regex]::Match(
$main,
'<ListBox\.ItemContainerStyle>(?<body>.*?)</ListBox\.ItemContainerStyle>',
[System.Text.RegularExpressions.RegexOptions]::Singleline)
if (-not $itemStyleMatch.Success) {
throw "IED card item-container style was not found."
}
$itemStyle = $itemStyleMatch.Groups['body'].Value
if ($itemStyle -match 'ScaleTransform\s+ScaleX="1\.012"' -or
$itemStyle -match 'Property="RenderTransform"') {
throw "IED card hover must not resize or transform the card. Hover may change colors only."
}
if ($main -notmatch 'x:Name="ConnectedBadge"' -or
$app -notmatch 'x:Key="IedCardConnected"' -or
$app -notmatch 'x:Key="IedCardConnectedSelected"') {
throw "Premium connected IED-card states were not found."
}

if ($main -notmatch 'Style="\{StaticResource CommandDataGrid\}"' -or
$main -notmatch 'RowStyle="\{StaticResource CommandDataGridRow\}"' -or
$app -notmatch 'x:Key="CommandDataGridRow"' -or
$app -notmatch 'x:Key="LucideSlidersHorizontal"') {
throw "Premium Command Panel hierarchy and row styles were not found."
}
if ($main -notmatch 'ScrollViewer.HorizontalScrollBarVisibility="Disabled"' -or
$main -notmatch 'CanUserResizeColumns="False"') {
throw "IED Command Panel horizontal overflow protection was not found."
Expand Down Expand Up @@ -126,7 +153,7 @@ jobs:

- name: Publish portable x64
shell: powershell
run: .\ArIED61850Tester\scripts\publish-windows-portable.ps1 -Version 1.6.11 -EngineProject "$env:GITHUB_WORKSPACE\ARIEC61850\src\AR.Iec61850\AR.Iec61850.csproj"
run: .\ArIED61850Tester\scripts\publish-windows-portable.ps1 -Version 1.6.12 -EngineProject "$env:GITHUB_WORKSPACE\ARIEC61850\src\AR.Iec61850\AR.Iec61850.csproj"

- name: Upload portable package
uses: actions/upload-artifact@v4
Expand Down
62 changes: 62 additions & 0 deletions App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,24 @@
<GradientStop Color="#F7FBFF" Offset="0"/>
<GradientStop Color="#DCEAFF" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="IedCardConnected" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#FFFFFF" Offset="0"/>
<GradientStop Color="#F0FBF5" Offset="0.68"/>
<GradientStop Color="#E4F7ED" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="IedCardConnectedSelected" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#F8FFFB" Offset="0"/>
<GradientStop Color="#D9F2E5" Offset="0.55"/>
<GradientStop Color="#DCEBFF" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="CommandPanelSurface" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#FFFFFF" Offset="0"/>
<GradientStop Color="#F4F8FE" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="CommandHeaderSurface" StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="#EDF4FF" Offset="0"/>
<GradientStop Color="#F7FAFF" Offset="1"/>
</LinearGradientBrush>

<!-- Lucide-compatible 24 px outline geometries used by every visible application action. -->
<Geometry x:Key="LucidePlay">M8,5 L19,12 L8,19 Z</Geometry>
Expand All @@ -74,6 +92,7 @@
<Geometry x:Key="LucideFileInput">M14,2 V8 H20 M14,2 H6 A2,2 0 0 0 4,4 V20 A2,2 0 0 0 6,22 H18 A2,2 0 0 0 20,20 V8 Z M9,15 H15 M12,12 L15,15 L12,18</Geometry>
<Geometry x:Key="LucideFileOutput">M14,2 V8 H20 M14,2 H6 A2,2 0 0 0 4,4 V20 A2,2 0 0 0 6,22 H18 A2,2 0 0 0 20,20 V8 Z M10,15 H16 M13,12 L16,15 L13,18</Geometry>
<Geometry x:Key="LucidePlus">M12,5 V19 M5,12 H19</Geometry>
<Geometry x:Key="LucideSlidersHorizontal">M21,4 H14 M10,4 H3 M21,12 H12 M8,12 H3 M21,20 H16 M12,20 H3 M14,2 V6 M10,10 V14 M16,18 V22</Geometry>

<Style x:Key="LucideIcon" TargetType="Path">
<Setter Property="Fill" Value="Transparent"/>
Expand Down Expand Up @@ -699,6 +718,49 @@
</Setter>
</Style>

<Style x:Key="CommandDataGrid" TargetType="DataGrid" BasedOn="{StaticResource ModernDataGrid}">
<Setter Property="Background" Value="#FCFDFF"/>
<Setter Property="BorderBrush" Value="#C8D7EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="AlternatingRowBackground" Value="#F7FAFE"/>
<Setter Property="RowHeight" Value="48"/>
<Setter Property="ColumnHeaderHeight" Value="39"/>
<Setter Property="CanUserResizeColumns" Value="False"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
</Style>

<Style x:Key="CommandDataGridHeader" TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
<Setter Property="Background" Value="#EAF1F9"/>
<Setter Property="Foreground" Value="#42526A"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="BorderBrush" Value="#C8D7EA"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>

<Style x:Key="CommandDataGridCell" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Setter Property="Padding" Value="10,4"/>
<Setter Property="BorderBrush" Value="#E5ECF5"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>

<Style x:Key="CommandDataGridRow" TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="#E5ECF5"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#EDF5FF"/>
<Setter Property="BorderBrush" Value="#D2E3FA"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#E4EFFF"/>
<Setter Property="BorderBrush" Value="#8FB4F4"/>
<Setter Property="BorderThickness" Value="3,0,0,1"/>
</Trigger>
</Style.Triggers>
</Style>

<Style x:Key="VerticalScrollBarThumb" TargetType="Thumb">
<Setter Property="MinHeight" Value="34"/>
<Setter Property="Template">
Expand Down
8 changes: 4 additions & 4 deletions ArIED61850Tester.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
<Product>ArIED 61850</Product>
<AssemblyTitle>ArIED 61850 — IEC 61850 Engineering Workstation</AssemblyTitle>
<Description>Windows IEC 61850 engineering workstation for SCL-assisted project setup, interoperable Edition 1/2 SCL export, live MMS model discovery, independent multi-IED monitoring, reporting diagnostics, sequence of events, and guarded Smart Control.</Description>
<Version>1.6.11</Version>
<AssemblyVersion>1.6.11.0</AssemblyVersion>
<FileVersion>1.6.11.0</FileVersion>
<Version>1.6.12</Version>
<AssemblyVersion>1.6.12.0</AssemblyVersion>
<FileVersion>1.6.12.0</FileVersion>
<PackageTags>iec61850;iec-61850;mms;scl;ied-explorer;multi-ied-monitoring;relay-testing;substation-automation;digital-substation;report-control-block;sequence-of-events;smart-control;wpf;dotnet</PackageTags>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<ArIec61850Project Condition="'$(ArIec61850Project)' == '' and '$(ARIEC61850_PROJECT)' != ''">$(ARIEC61850_PROJECT)</ArIec61850Project>
Expand All @@ -39,4 +39,4 @@
<Error Condition="!Exists('$(ArIec61850Project)')"
Text="ARIEC61850 engine project was not found at '$(ArIec61850Project)'. Place this folder beside the ARIEC61850 repository, or build with -p:ArIec61850Project=FULL_PATH_TO_AR.Iec61850.csproj." />
</Target>
</Project>
</Project>
Loading
Loading