lib/ui/MainWindow.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"
        xmlns:Wpf="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
        Title="Fortigi Omada Enterprise Cloud Sql Troubleshooter"
        Background="{DynamicResource {x:Static SystemColors.ScrollBarBrushKey}}"
        x:Name="MainWindow"
        BorderBrush="#FFC8C8C8"
        SizeToContent="Manual"
         Height="800"
         Width="1192"
         MinWidth="1192"
         MinHeight="800"
>
 
    <Window.Style>
        <Style TargetType="Window">
            <Setter Property="MinWidth" Value="1192"/>
            <Setter Property="Width" Value="1192"/>
            <Setter Property="MinHeight" Value="800"/>
        </Style>
    </Window.Style>
 
    <Window.Resources>
        <!-- Default TextBox Style -->
        <Style TargetType="TextBox">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Height" Value="25"/>
            <Setter Property="Width" Value="300"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
        </Style>
        <Style TargetType="PasswordBox">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Height" Value="25"/>
            <Setter Property="Width" Value="300"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
        </Style>
        <Style TargetType="Label">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Height" Value="25"/>
            <Setter Property="Width" Value="100"/>
        </Style>
        <Style x:Key="DefaultSeparatorStyle" TargetType="Separator">
            <Setter Property="Background" Value="Transparent"/>
        </Style>
        <Style x:Key="DefaultWidthSeparatorStyle" TargetType="Separator" BasedOn="{StaticResource DefaultSeparatorStyle}">
            <Setter Property="Width" Value="20"/>
        </Style>
        <Style x:Key="DefaultHeightSeparator" TargetType="Separator" BasedOn="{StaticResource DefaultSeparatorStyle}">
            <Setter Property="Height" Value="5"/>
        </Style>
        <Style x:Key="LeftBorderWidthSeparatorStyle" TargetType="Separator" BasedOn="{StaticResource DefaultSeparatorStyle}">
            <Setter Property="Width" Value="15"/>
        </Style>
        <Style x:Key="ButtontBorderWidthSeparatorStyle" TargetType="Separator" BasedOn="{StaticResource DefaultSeparatorStyle}">
            <Setter Property="Width" Value="19"/>
        </Style>
 
        <Style TargetType="Button">
            <Setter Property="Height" Value="25"/>
            <Setter Property="Width" Value="95"/>
            <Setter Property="IsEnabled" Value="False"/>
        </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>
    </Window.Resources>
 
    <Grid x:Name="MainGrid" KeyboardNavigation.TabNavigation="Continue">
        <Border BorderThickness="6,0,6,6" BorderBrush="#FF293955" >
            <Grid Margin="0" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="30"/>
                </Grid.RowDefinitions>
                <Grid Margin="0" Grid.Row="0" >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="6"/>
                    </Grid.RowDefinitions>
                    <StackPanel Orientation="Vertical" Grid.Row="0">
                        <StackPanel Orientation="Horizontal" >
                            <Separator Style="{StaticResource DefaultSeparatorStyle}" Height="6"/>
                        </StackPanel>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <StackPanel Orientation="Vertical" HorizontalAlignment="Left" Grid.Column="0">
                                <StackPanel Orientation="Horizontal" >
                                    <Separator Style="{StaticResource LeftBorderWidthSeparatorStyle}" />
                                    <Label x:Name="LabelUrl" Content="Tenant:" ToolTip="Omada Tenant url. Enter full URL or tenant name only. Example: Enter 'comp' for 'https://comp.omada.cloud'" HorizontalAlignment="Left"/>
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <TextBox x:Name="TextBoxURL" ToolTip="Enter full URL or tenant name only. Example: Enter 'comp' for 'https://comp.omada.cloud'" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <Label x:Name="LabelUserName" Content="Username:" ToolTip="Username:" Visibility="Hidden" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <TextBox x:Name="TextBoxUserName" Visibility="Hidden" IsEnabled="False" />
                                </StackPanel>
                                <Separator Style="{StaticResource DefaultHeightSeparator}" />
                                <StackPanel Orientation="Horizontal">
                                    <Separator Style="{StaticResource LeftBorderWidthSeparatorStyle}" />
                                    <Label x:Name="LabelAuthenticationOption" Content="Authentication:" ToolTip="Authentication type. This is mandatory." />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <ComboBox x:Name="ComboBoxSelectAuthenticationOption" SelectedIndex="0" >
                                        <ComboBoxItem Content="Browser"/>
                                        <ComboBoxItem Content="OAuth"/>
                                    </ComboBox>
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <Label x:Name="LabelPassword" Content="Password:" Visibility="Hidden" ToolTip="Enter a password" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <PasswordBox x:Name="TextBoxPassword" Visibility="Hidden" ToolTip="Enter a password" />
                                </StackPanel>
                                <Separator Style="{StaticResource DefaultHeightSeparator}" />
                                <StackPanel Orientation="Horizontal">
                                    <Separator Style="{StaticResource LeftBorderWidthSeparatorStyle}" />
                                    <Label x:Name="LabelComboBoxSelectQuery" Content="Queries:" ToolTip="Query list" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <ComboBox x:Name="ComboBoxSelectQuery" TabIndex="5" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <Label x:Name="LabelFilter" Content="Filter my queries:" ToolTip="Filter" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <CheckBox x:Name="CheckboxMyCreatedQueries" Content="Created" TabIndex="6" VerticalAlignment="Center" ToolTip="Check this box to show only SQL queries that are created by you." />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <CheckBox x:Name="CheckboxMyUpdatedQueries" Content="Last updated" TabIndex="7" VerticalAlignment="Center" ToolTip="Check this box to show only SQL queries that are last updated by you." />
                                </StackPanel>
                                <Separator Style="{StaticResource DefaultHeightSeparator}" />
                                <StackPanel Orientation="Horizontal">
                                    <Separator Style="{StaticResource LeftBorderWidthSeparatorStyle}" />
                                    <Label x:Name="LabelDisplayName" Content="Display name:" ToolTip="The Display Name of a a query, the display name can be changed if needed." />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <TextBox x:Name="TextBoxDisplayName" IsEnabled="False" TabIndex="8" />
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <Label x:Name="LabelDataConnection" Content="Connection:" ToolTip="Data Connection"/>
                                    <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                                    <!-- <TextBox x:Name="TextBoxDataConnection" IsEnabled="False" /> -->
                                    <ComboBox x:Name="ComboBoxSelectDataConnection" TabIndex="9"/>
                                </StackPanel>
                            </StackPanel>
                            <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" Grid.Column="1"/>
                            <StackPanel Orientation="Vertical" HorizontalAlignment="Left" Grid.Column="2">
                                <Grid >
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="25" />
                                        <RowDefinition Height="8"/>
                                        <RowDefinition Height="27"/>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="27"/>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="27"/>
                                    </Grid.RowDefinitions>
                                    <StackPanel Orientation="Horizontal" Grid.Row="0"/>
                                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="1" Margin="0,0,0,0"/>
                                    <StackPanel Orientation="Horizontal" Grid.Row="2">
                                        <Button x:Name="ButtonConnect" Content="_Connect" ToolTip="Connect to Omada" VerticalAlignment="Center"/>
                                    </StackPanel>
                                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="3" Margin="0,0,0,0"/>
                                    <StackPanel Orientation="Horizontal" Grid.Row="4"/>
                                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="5" Margin="0,0,0,0"/>
                                    <StackPanel Orientation="Horizontal" Grid.Row="6"/>
                                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="6" Margin="0,0,0,0"/>
                                </Grid>
                            </StackPanel>
                        </Grid>
                    </StackPanel>
                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="1"/>
                    <StackPanel Orientation="Horizontal" Grid.Row="2">
                        <Separator Style="{StaticResource ButtontBorderWidthSeparatorStyle}" />
                        <Button x:Name="ButtonNewQuery" Content="_New" ToolTip="Creates a new query object in Omada" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonRefreshQueries" Content="_Refresh" IsEnabled="True" ToolTip="Refresh query list" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonShowSqlSchema" Content="S_chema" ToolTip="Show Sql Schema" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonSaveQuery" Content="_Save" ToolTip="Save query in Omada" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonExecuteQuery" Content="_Execute" ToolTip="Execute Query" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonShowOutput" Content="_View" ToolTip="View result in a new window" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonSaveOutputFile" Content="E_xport" ToolTip="Export result to a file" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonOpenOutputFile" Content="_Open Export" ToolTip="Open export file" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonReset" Content="_Reset" IsEnabled="True" ToolTip="Reset window" />
                        <Separator Style="{StaticResource DefaultWidthSeparatorStyle}" />
                        <Button x:Name="ButtonShowLog" Content="_Log" IsEnabled="True" ToolTip="Show log window" />
                        <Separator Style="{StaticResource ButtontBorderWidthSeparatorStyle}" />
                    </StackPanel>
                    <Separator Style="{StaticResource DefaultHeightSeparator}" Grid.Row="2"/>
                </Grid>
                <Grid Grid.Row="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="6"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <Grid Grid.Row="0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <StackPanel Orientation="Vertical" Grid.Row="0">
                            <Label x:Name="LabelSqlEditor" Content="Editor" HorizontalAlignment="Left" VerticalAlignment="Center" />
                        </StackPanel>
                        <Border Grid.Row="1" BorderThickness="0" Background="White">
                            <Wpf:WebView2 x:Name="webView21"
                                      VerticalAlignment="Stretch"
                                      HorizontalAlignment="Stretch"
                                      MinHeight="200"
                                      />
                        </Border>
                    </Grid>
                    <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" Background="#FF293955" />
                    <Grid Grid.Row="2" >
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <StackPanel Orientation="Vertical" Grid.Row="0">
                            <Label x:Name="LabelOutputBox" Content="Results" HorizontalAlignment="Left" VerticalAlignment="Center" />
                        </StackPanel>
                        <DataGrid x:Name="DataGridQueryResult"
                          Grid.Row="1"
                                              VerticalScrollBarVisibility="Auto"
                                              HorizontalScrollBarVisibility="Auto"
                                              FontFamily="Consolas"
                                              IsReadOnly="True"
                                              HorizontalAlignment="Stretch"
                                              VerticalAlignment="Stretch"
                                              Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
                                              AlternationCount="{Binding MyObservableCollection.Count}"
                                              MinHeight="200"
                                              Width="Auto"
                              />
                    </Grid>
                </Grid>
                <StatusBar Height="30" Grid.Row="2" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="Khaki">
                    <StatusBar.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="6" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="6" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="6" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="6" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                            </Grid>
                        </ItemsPanelTemplate>
                    </StatusBar.ItemsPanel>
                    <StatusBarItem Grid.Column="0">
                        <TextBlock Name="TextBlockConnectionStatus" Text="Disconnected" />
                    </StatusBarItem>
                    <Separator Grid.Column="1" Background="Gray" Opacity="0.50" Margin="2,5,2,5" />
                    <StatusBarItem Grid.Column="2">
                        <TextBlock Name="TextBlockUrl" Text="-" MinWidth="135" />
                    </StatusBarItem>
                    <Separator Grid.Column="3" Background="Gray" Opacity="0.50" Margin="2,5,2,5" />
                    <StatusBarItem Grid.Column="4">
                        <TextBlock Name="TextBlockDatabaseName" Text="-" MinWidth="135" />
                    </StatusBarItem>
                    <Separator Grid.Column="5" Background="Gray" Opacity="0.50" Margin="2,5,2,5" />
                    <StatusBarItem Grid.Column="6">
                        <TextBlock Name="TextBlockQueryTime" Text="00:00:00.0000000" MinWidth="100" />
                    </StatusBarItem>
                    <Separator Grid.Column="7" Background="Gray" Opacity="0.50" Margin="2,5,2,5" />
                    <StatusBarItem Grid.Column="8">
                        <TextBlock Name="TextBlockRows" Text="0 rows" MinWidth="50" />
                    </StatusBarItem>
                </StatusBar>
 
            </Grid>
        </Border>
    </Grid>
</Window>