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
20 changes: 10 additions & 10 deletions src/PlanViewer.App/Controls/PlanViewerControl.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,39 @@
<Border Grid.Row="0" Background="{DynamicResource BackgroundDarkBrush}" Padding="8,6"
BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left" Spacing="4">
<Button x:Name="PlanConnectButton" Content="Connect" Click="PlanConnect_Click"
Height="28" Padding="10,0" FontSize="12"
Height="28" Padding="8,0" FontSize="12"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Connect to a SQL Server for schema lookups"/>
<TextBlock x:Name="PlanServerLabel" Text=""
VerticalAlignment="Center" FontSize="12"
Foreground="{DynamicResource ForegroundBrush}" Margin="6,0,0,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0,0,0"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="6,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<ComboBox x:Name="PlanDatabaseBox" Width="180" Height="28" FontSize="12"
IsEnabled="False" PlaceholderText="Database"
SelectionChanged="PlanDatabase_SelectionChanged"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="6,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button Content="+" Click="ZoomIn_Click" Width="28" Height="28" Padding="0" FontSize="16"
FontWeight="Bold" ToolTip.Tip="Zoom In"
Theme="{StaticResource AppButton}"/>
<Button Content="&#x2212;" Click="ZoomOut_Click" Width="28" Height="28" Padding="0" FontSize="16"
FontWeight="Bold" Margin="4,0,0,0" ToolTip.Tip="Zoom Out"
FontWeight="Bold" ToolTip.Tip="Zoom Out"
Theme="{StaticResource AppButton}"/>
<Button Content="Fit" Click="ZoomFit_Click" Height="28" Padding="8,0" Margin="4,0,0,0"
<Button Content="Fit" Click="ZoomFit_Click" Height="28" Padding="8,0"
ToolTip.Tip="Zoom to Fit"
Theme="{StaticResource AppButton}"/>
<TextBlock x:Name="ZoomLevelText" Text="100%" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="8,0,0,0" FontSize="11"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0,0,0" FontSize="11"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="12,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="6,0"/>
<Button Content="Save .sqlplan" Click="SavePlan_Click" Height="28" Padding="8,0"
ToolTip.Tip="Save plan as .sqlplan file"
Theme="{StaticResource AppButton}"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="12,0"
Foreground="{DynamicResource ForegroundBrush}" Margin="6,0"
x:Name="StatementsButtonSeparator" IsVisible="False"/>
<Button x:Name="StatementsButton" Content="Statements" Click="ToggleStatements_Click"
Height="28" Padding="8,0" IsVisible="False"
Expand Down
34 changes: 17 additions & 17 deletions src/PlanViewer.App/Controls/QuerySessionControl.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,65 +8,65 @@
<Border Grid.Row="0" Background="{DynamicResource BackgroundDarkBrush}" Padding="8,6"
BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left" Spacing="6">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left" Spacing="4">
<Button x:Name="ConnectButton" Content="Connect" Click="Connect_Click"
Height="28" Padding="10,0" FontSize="12"
Height="28" Padding="8,0" FontSize="12"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Connect to a SQL Server"/>
<TextBlock x:Name="ServerLabel" Text="Not connected"
VerticalAlignment="Center" FontSize="12"
Foreground="{DynamicResource ForegroundBrush}"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0,0,0"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<ComboBox x:Name="DatabaseBox" Width="200" Height="28" FontSize="12"
IsEnabled="False" PlaceholderText="Database"
SelectionChanged="Database_SelectionChanged"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button x:Name="ExecuteButton" Content="&#x25B6; Actual Plan" Click="Execute_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Run query and capture execution plan with runtime stats (F5 / Ctrl+E)"/>
<Button x:Name="ExecuteEstButton" Content="&#x25C7; Estimated Plan" Click="ExecuteEstimated_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Capture estimated plan without executing (Ctrl+L)"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button x:Name="HumanAdviceButton" Content="&#x1F9D1; Human Advice"
Click="HumanAdvice_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Human-readable plan analysis"/>
<Button x:Name="RobotAdviceButton" Content="&#x1F916; Robot Advice"
Click="RobotAdvice_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="JSON analysis for LLMs and automation"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button x:Name="ComparePlansButton" Content="&#x2194; Compare Plans"
Click="ComparePlans_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Compare two plan tabs"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button x:Name="QueryStoreButton" Content="&#x1F4CA; Query Store"
Click="QueryStore_Click"
Height="28" Padding="10,0" FontSize="12"
Height="28" Padding="8,0" FontSize="12"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Analyze top queries from Query Store"/>
<TextBlock Text="|" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundBrush}" Margin="4,0"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="2,0"/>
<Button x:Name="CopyReproButton" Content="&#x1F4CB; Copy Repro"
Click="CopyRepro_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Copy reproduction script to clipboard"/>
<Button x:Name="GetActualPlanButton" Content="&#x25B6; Run Repro"
Click="GetActualPlan_Click"
Height="28" Padding="10,0" FontSize="12" IsEnabled="False"
Height="28" Padding="8,0" FontSize="12" IsEnabled="False"
Theme="{StaticResource AppButton}"
ToolTip.Tip="Execute the repro script and capture actual plan with runtime stats"/>
</StackPanel>
Expand Down
20 changes: 10 additions & 10 deletions src/PlanViewer.App/Controls/QueryStoreGridControl.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,8 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Last Executed (Local)" Binding="{ReflectionBinding LastExecutedLocal}" SortMemberPath="LastExecutedLocal" Width="160"/>
<DataGridTemplateColumn Header="Executions" SortMemberPath="ExecsSort" Width="100">
<DataGridTextColumn Header="Last Executed" Binding="{ReflectionBinding LastExecutedLocal}" SortMemberPath="LastExecutedLocal" Width="160"/>
<DataGridTemplateColumn Header="Executions" SortMemberPath="ExecsSort" Width="105">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding ExecsDisplay}"
Expand All @@ -220,7 +220,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Total CPU (ms)" SortMemberPath="TotalCpuSort" Width="120">
<DataGridTemplateColumn Header="Total CPU (ms)" SortMemberPath="TotalCpuSort" Width="135">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding TotalCpuDisplay}"
Expand All @@ -230,7 +230,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Avg CPU (ms)" SortMemberPath="AvgCpuSort" Width="110">
<DataGridTemplateColumn Header="Avg CPU (ms)" SortMemberPath="AvgCpuSort" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding AvgCpuDisplay}"
Expand All @@ -240,7 +240,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Total Duration (ms)" SortMemberPath="TotalDurSort" Width="150">
<DataGridTemplateColumn Header="Total Duration (ms)" SortMemberPath="TotalDurSort" Width="165">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding TotalDurDisplay}"
Expand All @@ -250,7 +250,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Avg Duration (ms)" SortMemberPath="AvgDurSort" Width="140">
<DataGridTemplateColumn Header="Avg Duration (ms)" SortMemberPath="AvgDurSort" Width="155">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding AvgDurDisplay}"
Expand Down Expand Up @@ -300,7 +300,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Total Physical Reads" SortMemberPath="TotalPhysReadsSort" Width="155">
<DataGridTemplateColumn Header="Total Phys Reads" SortMemberPath="TotalPhysReadsSort" Width="140">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding TotalPhysReadsDisplay}"
Expand All @@ -310,7 +310,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Avg Physical Reads" SortMemberPath="AvgPhysReadsSort" Width="140">
<DataGridTemplateColumn Header="Avg Phys Reads" SortMemberPath="AvgPhysReadsSort" Width="130">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding AvgPhysReadsDisplay}"
Expand All @@ -320,7 +320,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Total Memory (MB)" SortMemberPath="TotalMemSort" Width="140">
<DataGridTemplateColumn Header="Total Memory (MB)" SortMemberPath="TotalMemSort" Width="155">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding TotalMemDisplay}"
Expand All @@ -330,7 +330,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Avg Memory (MB)" SortMemberPath="AvgMemSort" Width="130">
<DataGridTemplateColumn Header="Avg Memory (MB)" SortMemberPath="AvgMemSort" Width="145">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:QueryStoreRow">
<local:BarChartCell DisplayText="{Binding AvgMemDisplay}"
Expand Down
11 changes: 9 additions & 2 deletions src/PlanViewer.App/Themes/DarkTheme.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
<SolidColorBrush x:Key="BorderBrush" Color="#3A3D45"/>
<SolidColorBrush x:Key="AccentBrush" Color="#2eaef1"/>

<!-- Fluent theme accent override: TabItem selected underline, focus rings, etc. -->
<Color x:Key="SystemAccentColor">#2eaef1</Color>
<Color x:Key="SystemAccentColorDark1">#2596d4</Color>
<Color x:Key="SystemAccentColorDark2">#1f80b6</Color>
<Color x:Key="SystemAccentColorLight1">#5bc0f4</Color>
<Color x:Key="SystemAccentColorLight2">#88d1f7</Color>

<!-- Button style: brand blue on hover -->
<ControlTheme x:Key="AppButton" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource BackgroundLightBrush}"/>
Expand Down Expand Up @@ -67,7 +74,7 @@
<!-- Wait Stats category colors (fixed per category) -->
<SolidColorBrush x:Key="WaitCategory.Unknown" Color="#8E8E93"/>
<SolidColorBrush x:Key="WaitCategory.CPU" Color="#00bd23"/>
<SolidColorBrush x:Key="WaitCategory.Worker Thread" Color="#19ff25"/>
<SolidColorBrush x:Key="WaitCategory.Worker Thread" Color="#52E3B5"/>
<SolidColorBrush x:Key="WaitCategory.Lock" Color="#EE5A24"/>
<SolidColorBrush x:Key="WaitCategory.Latch" Color="#F368E0"/>
<SolidColorBrush x:Key="WaitCategory.Buffer Latch" Color="#f5069e"/>
Expand All @@ -80,7 +87,7 @@
<SolidColorBrush x:Key="WaitCategory.Service Broker" Color="#E17055"/>
<SolidColorBrush x:Key="WaitCategory.Tran Log IO" Color="#0984E3"/>
<SolidColorBrush x:Key="WaitCategory.Network IO" Color="#75bbf8"/>
<SolidColorBrush x:Key="WaitCategory.Parallelism" Color="#fd01d3"/>
<SolidColorBrush x:Key="WaitCategory.Parallelism" Color="#7B4FFF"/>
<SolidColorBrush x:Key="WaitCategory.Memory" Color="#FDCB6E"/>
<SolidColorBrush x:Key="WaitCategory.Tracing" Color="#B2BEC3"/>
<SolidColorBrush x:Key="WaitCategory.Full Text Search" Color="#DFE6E9"/>
Expand Down
Loading