lib/ui/SqlHistoryForm.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-x:Namespace:Fortigi"
        Title="Query History Viewer"
        Width="1000"
        MinWidth="800"
        MinHeight="500"
        Background="{DynamicResource {x:Static SystemColors.ScrollBarBrushKey}}"
        BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}"
        WindowStartupLocation="CenterOwner"
        ShowInTaskbar="False"
        Name="SqlHistoryForm">
 
    <Window.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
            <Setter Property="FontFamily"
                    Value="Consolas"/>
            <Setter Property="FontSize"
                    Value="14"/>
        </Style>
        <Style TargetType="Label">
            <Setter Property="VerticalContentAlignment"
                    Value="Center"/>
            <Setter Property="Height"
                    Value="25"/>
            <Setter Property="Width"
                    Value="100"/>
        </Style>
        <Style TargetType="Separator">
            <Setter Property="Background"
                    Value="Transparent"/>
        </Style>
        <Style TargetType="ComboBox">
            <Setter Property="VerticalContentAlignment"
                    Value="Center"/>
            <Setter Property="HorizontalContentAlignment"
                    Value="Left"/>
            <Setter Property="Height"
                    Value="25"/>
            <Setter Property="Width"
                    Value="300"/>
        </Style>
        <Style TargetType="Button">
            <Setter Property="Height"
                    Value="25"/>
            <Setter Property="MinHeight"
                    Value="25"/>
            <Setter Property="Width"
                    Value="98"/>
            <Setter Property="MinWidth"
                    Value="98"/>
            <Setter Property="Padding"
                    Value="2,3"/>
            <Setter Property="Background"
                    Value="Transparent"/>
        </Style>
        <Style x:Key="ButtonAccessTextStyle"
               TargetType="AccessText">
            <Setter Property="HorizontalAlignment"
                    Value="Center"/>
            <Setter Property="TextAlignment"
                    Value="Center"/>
            <Setter Property="Height"
                    Value="25"/>
            <Setter Property="Width"
                    Value="100"/>
            <Setter Property="MinWidth"
                    Value="100"/>
            <Setter Property="FontSize"
                    Value="11"/>
        </Style>
        <Style TargetType="DataGrid">
            <Setter Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
            <Setter Property="AlternatingRowBackground"
                    Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/>
            <Setter Property="GridLinesVisibility"
                    Value="Horizontal"/>
            <Setter Property="HorizontalGridLinesBrush"
                    Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/>
            <Setter Property="HeadersVisibility"
                    Value="Column"/>
            <Setter Property="CanUserReorderColumns"
                    Value="True"/>
            <Setter Property="CanUserSortColumns"
                    Value="True"/>
            <Setter Property="CanUserResizeColumns"
                    Value="True"/>
            <Setter Property="SelectionMode"
                    Value="Single"/>
            <Setter Property="SelectionUnit"
                    Value="FullRow"/>
        </Style>
        <Style TargetType="TabControl">
            <Setter Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
        </Style>
        <Style TargetType="TabItem">
            <Setter Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
            <Setter Property="Padding"
                    Value="8,4"/>
        </Style>
    </Window.Resources>
 
    <Grid Grid.Row="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="6"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="6"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="6"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="6"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="6"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Row="1"
              Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="400"
                                  MinWidth="300"/>
                <ColumnDefinition Width="6"/>
                <ColumnDefinition Width="*"
                                  MinWidth="400"/>
            </Grid.ColumnDefinitions>
 
            <Border Grid.Column="0"
                    BorderBrush="Gray"
                    BorderThickness="1"
                    Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
                <DataGrid x:Name="DataGridHistory"
                          AutoGenerateColumns="False"
                          IsReadOnly="True">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Change Date"
                                            Binding="{Binding ChangeDate, StringFormat=yyyy-MM-dd HH:mm:ss}"
                                            MinWidth="100"/>
                        <DataGridTextColumn Header="Changed By"
                                            Binding="{Binding ChangedBy}"
                                            MinWidth="100"/>
                    </DataGrid.Columns>
                </DataGrid>
            </Border>
 
            <GridSplitter Grid.Column="1"
                          HorizontalAlignment="Stretch"
                          VerticalAlignment="Stretch"
                          Background="{DynamicResource {x:Static SystemColors.ScrollBarBrushKey}}"
                          Width="6"/>
 
            <Border Grid.Column="2"
                    BorderBrush="Gray"
                    BorderThickness="1"
                    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
                <TabControl x:Name="TabControlContent">
                    <TabItem Header="Old Value"
                             x:Name="TabOldValue">
                        <Border BorderBrush="Gray"
                                BorderThickness="1"
                                Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
                            <TextBox x:Name="TextBoxOldValue"
                                     AcceptsReturn="True"
                                     VerticalScrollBarVisibility="Auto"
                                     HorizontalScrollBarVisibility="Auto"
                                     IsReadOnly="True"
                                     HorizontalAlignment="Stretch"
                                     VerticalAlignment="Stretch"
                                     VerticalContentAlignment="Top"
                                     TextWrapping="NoWrap"/>
                        </Border>
                    </TabItem>
                    <TabItem Header="New Value"
                             x:Name="TabNewValue">
                        <Border BorderBrush="Gray"
                                BorderThickness="1"
                                Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
                            <TextBox x:Name="TextBoxNewValue"
                                     AcceptsReturn="True"
                                     VerticalScrollBarVisibility="Auto"
                                     HorizontalScrollBarVisibility="Auto"
                                     IsReadOnly="True"
                                     HorizontalAlignment="Stretch"
                                     VerticalAlignment="Stretch"
                                     VerticalContentAlignment="Top"
                                     TextWrapping="NoWrap"/>
                        </Border>
                    </TabItem>
                    <TabItem Header="Diff View"
                             x:Name="TabDiffView">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Border Grid.Row="0"
                                    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
                                    BorderBrush="Gray"
                                    BorderThickness="0,0,0,1"
                                    Padding="5">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Legend: "
                                               FontWeight="Bold"
                                               VerticalAlignment="Center"/>
                                    <Rectangle Width="15"
                                               Height="15"
                                               Fill="#FFFFAAAA"
                                               Stroke="Red"
                                               Margin="5,0"/>
                                    <TextBlock Text="Removed"
                                               Margin="2,0,10,0"
                                               VerticalAlignment="Center"/>
                                    <Rectangle Width="15"
                                               Height="15"
                                               Fill="#FFAAFFAA"
                                               Stroke="Green"
                                               Margin="5,0"/>
                                    <TextBlock Text="Added"
                                               Margin="2,0"
                                               VerticalAlignment="Center"/>
                                </StackPanel>
                            </Border>
                            <Grid Grid.Row="1">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="4"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Border Grid.Column="0"
                                        BorderBrush="Gray"
                                        BorderThickness="0,0,1,0">
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="*"/>
                                        </Grid.RowDefinitions>
                                        <Border Grid.Row="0"
                                                Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
                                                BorderBrush="Gray"
                                                BorderThickness="0,0,0,1"
                                                Padding="5">
                                            <TextBlock Text="Old Value"
                                                       FontWeight="Bold"/>
                                        </Border>
                                        <RichTextBox Grid.Row="1"
                                                     x:Name="RichTextBoxOldDiff"
                                                     VerticalScrollBarVisibility="Auto"
                                                     HorizontalScrollBarVisibility="Auto"
                                                     IsReadOnly="True"
                                                     FontFamily="Consolas"
                                                     FontSize="14"
                                                     Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
                                    </Grid>
                                </Border>
                                <GridSplitter Grid.Column="1"
                                              HorizontalAlignment="Stretch"
                                              VerticalAlignment="Stretch"
                                              Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
                                              Width="6"/>
                                <Border Grid.Column="2"
                                        BorderBrush="Gray"
                                        BorderThickness="1,0,0,0">
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="*"/>
                                        </Grid.RowDefinitions>
                                        <Border Grid.Row="0"
                                                Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
                                                BorderBrush="Gray"
                                                BorderThickness="0,0,0,1"
                                                Padding="5">
                                            <TextBlock Text="New Value"
                                                       FontWeight="Bold"/>
                                        </Border>
                                        <RichTextBox Grid.Row="1"
                                                     x:Name="RichTextBoxNewDiff"
                                                     VerticalScrollBarVisibility="Auto"
                                                     HorizontalScrollBarVisibility="Auto"
                                                     IsReadOnly="True"
                                                     FontFamily="Consolas"
                                                     FontSize="14"
                                                     Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
                                    </Grid>
                                </Border>
                            </Grid>
                        </Grid>
                    </TabItem>
                    <TabItem Header="Details"
                             x:Name="TabDetails">
                        <Border BorderBrush="Gray"
                                BorderThickness="1"
                                Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
                            <ScrollViewer VerticalScrollBarVisibility="Auto">
                                <StackPanel Margin="10">
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="120"/>
                                            <ColumnDefinition Width="*"/>
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="Auto"/>
                                        </Grid.RowDefinitions>
 
                                        <TextBlock Grid.Row="0"
                                                   Grid.Column="0"
                                                   Text="Query DoId:"
                                                   FontWeight="Bold"
                                                   Margin="0,0,0,5"/>
                                        <TextBox Grid.Row="0"
                                                 Grid.Column="1"
                                                 x:Name="TextBoxDoId"
                                                 IsReadOnly="True"
                                                 Margin="0,0,0,5"/>
 
                                        <TextBlock Grid.Row="1"
                                                   Grid.Column="0"
                                                   Text="Query Name:"
                                                   FontWeight="Bold"
                                                   Margin="0,0,0,5"/>
                                        <TextBox Grid.Row="1"
                                                 Grid.Column="1"
                                                 x:Name="TextBoxObjectName"
                                                 IsReadOnly="True"
                                                 Margin="0,0,0,5"/>
 
                                        <TextBlock Grid.Row="2"
                                                   Grid.Column="0"
                                                   Text="Changed By:"
                                                   FontWeight="Bold"
                                                   Margin="0,0,0,5"/>
                                        <TextBox Grid.Row="2"
                                                 Grid.Column="1"
                                                 x:Name="TextBoxChangedBy"
                                                 IsReadOnly="True"
                                                 Margin="0,0,0,5"/>
 
                                        <TextBlock Grid.Row="3"
                                                   Grid.Column="0"
                                                   Text="Change Date:"
                                                   FontWeight="Bold"
                                                   Margin="0,0,0,5"/>
                                        <TextBox Grid.Row="3"
                                                 Grid.Column="1"
                                                 x:Name="TextBoxChangeDate"
                                                 IsReadOnly="True"
                                                 Margin="0,0,0,5"/>
                                    </Grid>
                                </StackPanel>
                            </ScrollViewer>
                        </Border>
                    </TabItem>
                </TabControl>
            </Border>
        </Grid>
        <Grid Grid.Row="3"
              Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
 
            <Button Grid.Column="0"
                    x:Name="ButtonRestoreQuery"
                    TabIndex="15"
                    ToolTip="Restore selected query version"
                    IsEnabled="False">
                <Border Background="Transparent"
                        IsHitTestVisible="False">
                    <Grid HorizontalAlignment="Center"
                          VerticalAlignment="Center">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="6"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="4"/>
                            <ColumnDefinition Width="40"/>
                        </Grid.ColumnDefinitions>
                        <Image Grid.Column="1"
                               x:Name="ButtonRestoreQueryImage"
                               Source="/images/history_25x25.png"
                               Tag="/images/history_25x25.png"
                               IsHitTestVisible="False"/>
                        <AccessText Grid.Column="3"
                                    x:Name="ButtonRestoreQueryText"
                                    Text="_Restore"
                                    Style="{StaticResource ButtonAccessTextStyle}"
                                    IsHitTestVisible="False"/>
                    </Grid>
                </Border>
            </Button>
            <Button Grid.Column="4"
                    x:Name="ButtonExportHistory"
                    TabIndex="17"
                    ToolTip="Export history to file"
                    IsEnabled="True">
                <Border Background="Transparent"
                        IsHitTestVisible="False">
                    <Grid HorizontalAlignment="Center"
                          VerticalAlignment="Center">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="6"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="4"/>
                            <ColumnDefinition Width="40"/>
                        </Grid.ColumnDefinitions>
                        <Image Grid.Column="1"
                               x:Name="ButtonExportHistoryImage"
                               Source="/images/content-save_25x25.png"
                               Tag="/images/content-save_25x25.png"
                               IsHitTestVisible="False"/>
                        <AccessText Grid.Column="3"
                                    x:Name="ButtonExportHistoryText"
                                    Text="_Export"
                                    Style="{StaticResource ButtonAccessTextStyle}"
                                    IsHitTestVisible="False"/>
                    </Grid>
                </Border>
            </Button>
        </Grid>
    </Grid>
</Window>