🏡 index : VBASync.git

<Window
    x:Class="VBASync.WPF.MainWindow"
    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:l10n="clr-namespace:VBASync.Localization;assembly=VBASync"
    xmlns:local="clr-namespace:VBASync.WPF"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Name="ThisWindow"
    Title="{x:Static l10n:VBASyncResources.MWTitle}"
    Width="400"
    Height="600"
    MinWidth="375"
    MinHeight="500"
    x:ClassModifier="internal"
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
    Closed="Window_Closed"
    Icon="Icons/VBA Sync Simple.ico"
    Loaded="Window_Loaded"
    mc:Ignorable="d">
    <Window.InputBindings>
        <KeyBinding
            Key="L"
            Command="{Binding LoadLastSessionCommand}"
            Modifiers="Ctrl" />
        <KeyBinding
            Key="O"
            Command="{Binding BrowseForSessionCommand}"
            Modifiers="Ctrl" />
        <KeyBinding
            Key="S"
            Command="{Binding SaveSessionCommand}"
            Modifiers="Ctrl" />
    </Window.InputBindings>
    <Window.Resources>
        <Style x:Key="Level1" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="4,8,0,0" />
        </Style>
        <Style x:Key="Level1Close" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="4,4,0,0" />
        </Style>
        <Style x:Key="Level1VeryClose" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="4,2,0,0" />
        </Style>
        <Style x:Key="Level1Solid" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="4,0,0,0" />
        </Style>
        <Style x:Key="Level2" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="20,4,0,0" />
        </Style>
        <Style x:Key="ExpanderChild" TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="16,4,0,0" />
            <Setter Property="HorizontalAlignment" Value="Stretch" />
        </Style>
    </Window.Resources>
    <DockPanel>
        <Menu Margin="4" DockPanel.Dock="Top">
            <MenuItem Header="{x:Static l10n:VBASyncResources.MWFileMenu}">
                <MenuItem
                    Command="{Binding SaveSessionCommand}"
                    Header="{x:Static l10n:VBASyncResources.MWSaveSessionMenu}"
                    InputGestureText="{x:Static l10n:VBASyncResources.CtrlS}" />
                <MenuItem
                    Command="{Binding BrowseForSessionCommand}"
                    Header="{x:Static l10n:VBASyncResources.MWLoadSessionMenu}"
                    InputGestureText="{x:Static l10n:VBASyncResources.CtrlO}" />
                <MenuItem
                    Command="{Binding LoadLastSessionCommand}"
                    Header="{x:Static l10n:VBASyncResources.MWLoadLastMenu}"
                    InputGestureText="{x:Static l10n:VBASyncResources.CtrlL}" />
                <Separator />
                <MenuItem Click="SettingsMenu_Click" Header="{x:Static l10n:VBASyncResources.MWSettingsMenu}" />
                <Separator Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=1}" />
                <MenuItem
                    Command="{Binding OpenRecentCommand}"
                    CommandParameter="1"
                    Header="{Binding RecentFiles, Converter={x:Static local:WpfStatic.RecentFilesHeader}, ConverterParameter=1}"
                    Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=1}" />
                <MenuItem
                    Command="{Binding OpenRecentCommand}"
                    CommandParameter="2"
                    Header="{Binding RecentFiles, Converter={x:Static local:WpfStatic.RecentFilesHeader}, ConverterParameter=2}"
                    Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=2}" />
                <MenuItem
                    Command="{Binding OpenRecentCommand}"
                    CommandParameter="3"
                    Header="{Binding RecentFiles, Converter={x:Static local:WpfStatic.RecentFilesHeader}, ConverterParameter=3}"
                    Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=3}" />
                <MenuItem
                    Command="{Binding OpenRecentCommand}"
                    CommandParameter="4"
                    Header="{Binding RecentFiles, Converter={x:Static local:WpfStatic.RecentFilesHeader}, ConverterParameter=4}"
                    Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=4}" />
                <MenuItem
                    Command="{Binding OpenRecentCommand}"
                    CommandParameter="5"
                    Header="{Binding RecentFiles, Converter={x:Static local:WpfStatic.RecentFilesHeader}, ConverterParameter=5}"
                    Visibility="{Binding RecentFiles, Converter={x:Static local:WpfStatic.BindingListToVisibleIfHasItemCount}, ConverterParameter=5}" />
                <Separator />
                <MenuItem
                    Click="ExitMenu_Click"
                    Header="{x:Static l10n:VBASyncResources.MWExitMenu}"
                    InputGestureText="{x:Static l10n:VBASyncResources.AltF4}" />
            </MenuItem>
            <MenuItem Header="{x:Static l10n:VBASyncResources.MWEditMenu}">
                <MenuItem Command="ApplicationCommands.Undo" />
                <MenuItem Command="ApplicationCommands.Redo" />
                <Separator />
                <MenuItem Command="ApplicationCommands.Cut" />
                <MenuItem Command="ApplicationCommands.Copy" />
                <MenuItem Command="ApplicationCommands.Paste" />
                <MenuItem Command="ApplicationCommands.Delete" />
                <Separator />
                <MenuItem Command="ApplicationCommands.SelectAll" />
            </MenuItem>
            <MenuItem Header="{x:Static l10n:VBASyncResources.MWHelpMenu}">
                <MenuItem Click="AboutMenu_Click" Header="{x:Static l10n:VBASyncResources.MWAboutMenu}" />
            </MenuItem>
        </Menu>
        <Border
            Height="1"
            Background="DimGray"
            DockPanel.Dock="Top" />
        <Grid Margin="4,8,4,4">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto" />
                <RowDefinition Height="*" />
                <RowDefinition Height="auto" />
                <RowDefinition Height="auto" />
            </Grid.RowDefinitions>
            <local:SessionView
                x:Name="SessionCtl"
                DataContext="{Binding Session}"
                FocusControlOnEnter="{Binding ElementName=OkButton}" />
            <DataGrid
                x:Name="ChangesGrid"
                Grid.Row="1"
                Margin="0,26,0,0"
                AutoGenerateColumns="False"
                BorderBrush="{x:Null}"
                CanUserAddRows="False"
                CanUserDeleteRows="False"
                CanUserResizeRows="False"
                DataContext="{Binding Changes}"
                GridLinesVisibility="None"
                HorizontalScrollBarVisibility="Disabled"
                IsSynchronizedWithCurrentItem="False"
                ItemsSource="{Binding}"
                KeyboardNavigation.TabNavigation="Once"
                MouseDoubleClick="ChangesGrid_MouseDoubleClick"
                SelectionMode="Single"
                SelectionUnit="FullRow">
                <DataGrid.Resources>
                    <local:ChangeTypeToBrushConverter x:Key="ForeColorConverter" />
                    <local:ModuleTypeToIconConverter x:Key="IconConverter" />
                </DataGrid.Resources>
                <DataGrid.Style>
                    <StaticResource ResourceKey="Level1Close" />
                </DataGrid.Style>
                <DataGrid.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridCell}">
                                    <Border
                                        Padding="2,2,3,3"
                                        Background="{TemplateBinding Background}"
                                        KeyboardNavigation.IsTabStop="False">
                                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGrid.CellStyle>
                <DataGrid.RowStyle>
                    <Style TargetType="{x:Type DataGridRow}">
                        <Setter Property="Foreground" Value="{Binding ChangeType, Converter={StaticResource ForeColorConverter}}" />
                    </Style>
                </DataGrid.RowStyle>
                <DataGrid.HorizontalGridLinesBrush>
                    <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ControlLightColorKey}}" />
                </DataGrid.HorizontalGridLinesBrush>
                <DataGrid.Columns>
                    <DataGridTemplateColumn MinWidth="26" IsReadOnly="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox
                                    HorizontalAlignment="Left"
                                    VerticalAlignment="Center"
                                    IsChecked="{Binding Commit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn
                        Header="{x:Static l10n:VBASyncResources.MWChangeType}"
                        IsReadOnly="True"
                        KeyboardNavigation.IsTabStop="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock
                                    KeyboardNavigation.IsTabStop="False"
                                    Text="{Binding ChangeType, Converter={x:Static local:WpfStatic.ChangeTypeToDescriptionOneWay}}"
                                    TextTrimming="CharacterEllipsis" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn
                        MinWidth="120"
                        Header="{x:Static l10n:VBASyncResources.MWModule}"
                        IsReadOnly="True"
                        KeyboardNavigation.IsTabStop="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image KeyboardNavigation.IsTabStop="False" Source="{Binding ModuleType, Converter={StaticResource IconConverter}}" />
                                    <TextBlock
                                        Margin="4,0,0,0"
                                        Padding="0"
                                        KeyboardNavigation.IsTabStop="False"
                                        Text="{Binding ModuleName}"
                                        TextTrimming="CharacterEllipsis" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn
                        Width="*"
                        Header="{x:Static l10n:VBASyncResources.MWDescription}"
                        IsReadOnly="True"
                        KeyboardNavigation.IsTabStop="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock
                                    KeyboardNavigation.IsTabStop="False"
                                    Text="{Binding Description}"
                                    TextTrimming="CharacterEllipsis" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
            <CheckBox
                x:Name="IncludeAllBox"
                Grid.Row="1"
                Margin="8,29,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Click="IncludeAllBox_Click" />
            <Grid Grid.Row="3" Style="{StaticResource Level1}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="3*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="auto" />
                </Grid.ColumnDefinitions>
                <Button
                    x:Name="RefreshButton"
                    Grid.ColumnSpan="2"
                    MinWidth="75"
                    HorizontalAlignment="Left"
                    Click="RefreshButton_Click"
                    Content="{x:Static l10n:VBASyncResources.MWRefreshAction}"
                    Visibility="Visible" />
                <StackPanel Grid.Column="2" Orientation="Horizontal">
                    <StackPanel.Resources>
                        <Style TargetType="{x:Type Button}">
                            <Setter Property="Margin" Value="4,0,0,0" />
                        </Style>
                    </StackPanel.Resources>
                    <Button
                        x:Name="ApplyButton"
                        MinWidth="75"
                        Click="ApplyButton_Click"
                        Content="{x:Static l10n:VBASyncResources.ApplyAction}"
                        IsEnabled="False" />
                    <Button
                        x:Name="CancelButton"
                        MinWidth="75"
                        Click="CancelButton_Click"
                        Content="{x:Static l10n:VBASyncResources.CancelAction}" />
                    <Button
                        x:Name="OkButton"
                        Height="20"
                        MinWidth="75"
                        VerticalAlignment="Top"
                        Click="OkButton_Click"
                        Content="{x:Static l10n:VBASyncResources.OKAction}"
                        IsDefault="True" />
                </StackPanel>
            </Grid>
        </Grid>
    </DockPanel>
</Window>