GUI/MainWindow.xaml
|
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:r="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon" Title="PSWimToolkit - Provisioning Console" Background="#F5F7FA" FontFamily="Segoe UI" WindowStartupLocation="CenterScreen"> <Window.Style> <Style TargetType="Window"> <Setter Property="MinWidth" Value="0" /> <Setter Property="MinHeight" Value="0" /> <Style.Triggers> <Trigger Property="WindowState" Value="Normal"> <Setter Property="MinWidth" Value="1000" /> <Setter Property="MinHeight" Value="1050" /> </Trigger> </Style.Triggers> </Style> </Window.Style> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- Ribbon --> <r:Ribbon Grid.Row="0"> <r:Ribbon.ApplicationMenu> <r:RibbonApplicationMenu> <r:RibbonApplicationMenuItem x:Name="ExitMenuItem" Header="Exit" /> </r:RibbonApplicationMenu> </r:Ribbon.ApplicationMenu> <r:RibbonTab Header="Tools"> <r:RibbonGroup Header="Provisioning"> <r:RibbonButton x:Name="DownloadUpdatesMenuItem" Label="Download Updates..." /> <r:RibbonButton x:Name="ClearLogsMenuItem" Label="Clear Logs" /> <r:RibbonButton x:Name="ExportLogsMenuItem" Label="Export Logs..." /> </r:RibbonGroup> </r:RibbonTab> <r:RibbonTab Header="View"> <r:RibbonGroup Header="Layout"> <r:RibbonToggleButton x:Name="ToggleLogViewMenuItem" IsChecked="True" Label="Show/Hide Log Viewer" /> </r:RibbonGroup> </r:RibbonTab> <r:RibbonTab Header="Help"> <r:RibbonGroup Header="Resources"> <r:RibbonButton x:Name="AboutMenuItem" Label="About PSWimToolkit" /> <r:RibbonButton x:Name="DocumentationMenuItem" Label="Documentation" /> </r:RibbonGroup> </r:RibbonTab> </r:Ribbon> <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- Add WIM Management --> <GroupBox Grid.Row="1" Margin="5" Header="WIM Management"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <StackPanel Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal"> <!-- Add WIM Buttons --> <Button x:Name="AddWimButton" Margin="5" Content="Import WIM..." /> <!-- Import ISO Button --> <Button x:Name="ImportIsoButton" Margin="5" Content="Import ISO..." /> <!-- WIM Details Button --> <Button x:Name="WimDetailsButton" Margin="5" Content="Details..." /> <!-- Separator --> <Border Width="1" Height="24" Margin="5,0,5,0" VerticalAlignment="Center" Background="#D0D3D9" /> <!-- Remove WIM Buttons --> <Button x:Name="RemoveWimButton" Margin="5" Content="Remove Selected" /> <!-- Delete WIM Button --> <Button x:Name="DeleteWimButton" Margin="5" Content="Delete From Import" /> <!-- Clear All Button --> <Button x:Name="ClearWimButton" Margin="5" Content="Clear All" /> </StackPanel> <Grid Grid.Row="1" Margin="5"> <!-- WIM Data Grid --> <DataGrid x:Name="WimGrid" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" IsReadOnly="False" RowHeight="30" SelectionMode="Extended"> <DataGrid.Style> <Style TargetType="DataGrid"> <Setter Property="Visibility" Value="Visible" /> <Style.Triggers> <DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </DataGrid.Style> <DataGrid.Columns> <DataGridTextColumn Width="180" MinWidth="180" Binding="{Binding Name}" Header="Name" IsReadOnly="True" /> <DataGridTextColumn Width="*" MinWidth="220" Binding="{Binding Path}" Header="Path" IsReadOnly="True" /> <DataGridTextColumn Width="80" MinWidth="80" Binding="{Binding Index}" Header="Index" /> <DataGridTextColumn Width="140" MinWidth="140" Binding="{Binding Status}" Header="Status" IsReadOnly="True" /> <DataGridTextColumn Width="220" MinWidth="220" Binding="{Binding Details}" Header="Details" IsReadOnly="True" /> </DataGrid.Columns> </DataGrid> <!-- No WIMs TextBlock --> <TextBlock Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" FontStyle="Italic" Foreground="#7A869A" Text="No WIM images imported yet. Import a WIM or ISO to get started." TextAlignment="Center"> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Visibility" Value="Collapsed" /> <Style.Triggers> <DataTrigger Binding="{Binding Items.Count, ElementName=WimGrid}" Value="0"> <Setter Property="Visibility" Value="Visible" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </Grid> </GroupBox> <!-- Update Configuration --> <GroupBox Grid.Row="2" Margin="5" Header="Update Configuration"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="160" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <!-- Update folder --> <TextBlock Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="Update folder:" /> <TextBox x:Name="UpdatePathTextBox" Grid.Row="0" Grid.Column="1" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="True" /> <Button x:Name="BrowseUpdateButton" Grid.Row="0" Grid.Column="2" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Open" /> <!-- SxS folder --> <TextBlock Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="SxS folder:" /> <TextBox x:Name="SxSPathTextBox" Grid.Row="1" Grid.Column="1" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="True" /> <Button x:Name="BrowseSxSButton" Grid.Row="1" Grid.Column="2" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Open" /> <!-- Output folder --> <TextBlock Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="Output folder:" /> <TextBox x:Name="OutputPathTextBox" Grid.Row="2" Grid.Column="1" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="True" /> <Button x:Name="BrowseOutputButton" Grid.Row="2" Grid.Column="2" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Open" /> <!-- Options --> <StackPanel Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" Margin="5" Orientation="Horizontal"> <CheckBox x:Name="EnableNetFxCheckBox" Margin="5" VerticalAlignment="Center" Content="Enable .NET Framework 3.5" /> <CheckBox x:Name="ForceCheckBox" Margin="5" VerticalAlignment="Center" Content="Force reapply updates" /> <CheckBox x:Name="VerboseLogCheckBox" Margin="5" VerticalAlignment="Center" Content="Verbose logging" /> <CheckBox x:Name="IncludePreviewCheckBox" Margin="5" VerticalAlignment="Center" Content="Include preview updates" /> <Button x:Name="AutoDetectButton" Margin="5" HorizontalAlignment="Left" VerticalAlignment="Center" Content="Auto Detect..." /> <Button x:Name="SearchCatalogButton" Margin="5" HorizontalAlignment="Left" VerticalAlignment="Center" Content="Search Catalog..." /> </StackPanel> </Grid> </GroupBox> <!-- Provisioning Control --> <GroupBox Grid.Row="3" Margin="5" Header="Provisioning Control"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <!-- Start/Stop Buttons --> <StackPanel Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"> <Button x:Name="StartButton" Margin="5" Content="Start Provisioning" /> <Button x:Name="StopButton" Margin="5" Content="Stop" IsEnabled="False" /> </StackPanel> <!-- Throttle Slider --> <StackPanel Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"> <TextBlock Margin="5" VerticalAlignment="Center" Text="Throttle limit:" /> <Slider x:Name="ThrottleSlider" Width="200" VerticalAlignment="Center" IsSnapToTickEnabled="True" Maximum="20" Minimum="1" TickFrequency="1" Value="10" /> <TextBlock x:Name="ThrottleValueText" Margin="5" VerticalAlignment="Center" Text="10" /> </StackPanel> <!-- Status TextBlock --> <TextBlock x:Name="StatusTextBlock" Grid.Row="2" Margin="5" Foreground="#2B579A" Text="Ready" /> </Grid> </GroupBox> <!-- Progress Viewer --> <GroupBox Grid.Row="4" Margin="5" Header="Progress"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- Overall Progress Bar --> <ProgressBar x:Name="OverallProgressBar" Grid.Row="0" Height="22" Margin="5" IsIndeterminate="False" Maximum="100" Minimum="0" /> <!-- Progress List --> <ListView x:Name="ProgressList" Grid.Row="1" Margin="5"> <ListView.View> <GridView> <GridViewColumn Width="200" DisplayMemberBinding="{Binding Name}" Header="Name" /> <GridViewColumn Width="120" DisplayMemberBinding="{Binding Status}" Header="Status" /> <GridViewColumn Width="400" DisplayMemberBinding="{Binding Details}" Header="Details" /> </GridView> </ListView.View> </ListView> </Grid> </GroupBox> <!-- Log Viewer --> <GroupBox x:Name="LogViewerGroup" Grid.Row="5" Margin="5" Header="Log Viewer"> <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <!-- Log Controls --> <StackPanel Grid.Row="0" Margin="5" HorizontalAlignment="Stretch" Orientation="Horizontal"> <TextBlock Margin="5" VerticalAlignment="Center" Text="Filter:" /> <ComboBox x:Name="LogLevelComboBox" Width="140" Margin="5" SelectedIndex="0"> <ComboBoxItem Content="All" /> <ComboBoxItem Content="Debug" /> <ComboBoxItem Content="Info" /> <ComboBoxItem Content="Stage" /> <ComboBoxItem Content="Success" /> <ComboBoxItem Content="Warning" /> <ComboBoxItem Content="Error" /> </ComboBox> <CheckBox x:Name="AutoScrollCheckBox" Margin="5" VerticalAlignment="Center" Content="Auto-scroll" IsChecked="True" /> <Button x:Name="SaveLogsButton" Margin="5" Content="Save Logs" /> <Button x:Name="ClearLogsButton" Margin="5" Content="Clear Viewer" /> <Button x:Name="OpenLogFolderButton" Margin="5" Content="Open Log Folder" /> </StackPanel> <!-- Log List --> <ListView x:Name="LogList" Grid.Row="1" MinHeight="150" Margin="5" ItemsPanel="{DynamicResource LogItemsPanel}"> <ListView.View> <GridView> <GridViewColumn Width="160" DisplayMemberBinding="{Binding Timestamp}" Header="Time" /> <GridViewColumn Width="90" DisplayMemberBinding="{Binding Level}" Header="Level" /> <GridViewColumn Width="120" DisplayMemberBinding="{Binding Source}" Header="Source" /> <GridViewColumn Width="520" DisplayMemberBinding="{Binding Message}" Header="Message" /> </GridView> </ListView.View> </ListView> <!-- Log Path TextBlock --> <TextBlock x:Name="LogPathTextBlock" Grid.Row="2" Margin="5" Foreground="#666666" Text="Logs folder: (auto)" /> </Grid> </GroupBox> </Grid> </ScrollViewer> </Grid> </Window> |