Files
FFU/FFUDevelopment/BuildFFUVM_UI.xaml
T
2025-05-26 11:37:43 -07:00

582 lines
30 KiB
XML

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FFU Builder UI"
Height="600" Width="900">
<!-- Define ToolTip Style to offset from mouse pointer -->
<Window.Resources>
<Style TargetType="ToolTip">
<Setter Property="Placement" Value="Mouse"/>
<Setter Property="HorizontalOffset" Value="10"/>
<Setter Property="VerticalOffset" Value="-30"/>
</Style>
</Window.Resources>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TabControl TabStripPlacement="Left"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
FontSize="14"
Padding="10"
Grid.Row="0">
<!-- ================= TAB 1: BASIC ================= -->
<TabItem Header="Basic" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- FFU Name -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="FFU Name:"/>
<Image x:Name="imgFFUNameInfo"
Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow"
ToolTip="Enter a unique name for the FFU. Example: {WindowsRelease}_{WindowsVersion}_{SKU}_{yyyy}-{MM}-{dd}_{HH}{mm}" />
</StackPanel>
<TextBox x:Name="txtFFUName"
Grid.Row="0" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- FFU Dev Path -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="FFU Development Path:"/>
<Image x:Name="imgFFUDevPathInfo"
Width="16" Height="16" Margin="5,0,0,0" Cursor="Arrow"
ToolTip="Defaults to the location the script is run from." />
</StackPanel>
<Grid Grid.Row="1" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtFFUDevPath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseFFUDevPath"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for FFU Development folder."/>
</Grid>
<!-- VM Switch Name -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Switch Name:"/>
<Image x:Name="imgVMSwitchNameInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Name of the Hyper-V virtual switch." />
</StackPanel>
<ComboBox x:Name="cmbVMSwitchName"
Grid.Row="2" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Custom VM Switch Name -->
<TextBox x:Name="txtCustomVMSwitchName"
Grid.Row="3" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Visibility="Collapsed"
ToolTip="Enter your custom VM Switch Name."/>
<!-- VM Host IP Address -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="VM Host IP Address:"/>
<Image x:Name="imgVMHostIPAddressInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="IP address of the Hyper-V host machine." />
</StackPanel>
<TextBox x:Name="txtVMHostIPAddress"
Grid.Row="4" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
</Grid>
</TabItem>
<!-- ============== TAB 2: WINDOWS SETTINGS ============== -->
<TabItem Header="Windows Settings" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ISO Path -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows ISO Path:"/>
<Image x:Name="imgISOPathInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Specify the full path to the Windows ISO file." />
</StackPanel>
<Grid Grid.Row="0" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtISOPath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseISO"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for a Windows ISO file."/>
</Grid>
<!-- Windows Release -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows Release:"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsRelease"
Grid.Row="1" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch" />
<!-- Windows Version (Now a ComboBox) -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows Version:"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsVersion"
Grid.Row="2" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"
IsEnabled="False"
ToolTip="Select the Windows Version." />
<!-- Windows Architecture -->
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows Architecture:"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsArch"
Grid.Row="3" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- Windows Language -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows Language:"/>
</StackPanel>
<ComboBox x:Name="cmbWindowsLang"
Grid.Row="4" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- Windows SKU -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Windows SKU:"/>
<Image x:Name="imgWindowsSKUInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Select the edition of Windows you want to install." />
</StackPanel>
<ComboBox x:Name="cmbWindowsSKU"
Grid.Row="5" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Media Type -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Media Type:"/>
</StackPanel>
<ComboBox x:Name="cmbMediaType"
Grid.Row="6" Grid.Column="1"
Margin="5"
Width="120"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<!-- Product Key -->
<StackPanel Grid.Row="7" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5">
<TextBlock Text="Product Key:"/>
</StackPanel>
<TextBox x:Name="txtProductKey"
Grid.Row="7" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Optional Features Expander -->
<Expander x:Name="expOptionalFeatures"
Grid.Row="8"
Grid.ColumnSpan="2"
Margin="5,5,0,0"
Header="Optional Features"
IsExpanded="False"
ExpandDirection="Down">
<StackPanel Margin="15,5">
<TextBlock Text="Select the optional features you'd like to enable:" FontWeight="SemiBold" Margin="0,0,0,5"/>
<CheckBox x:Name="chkTelnetClient" Content="TelnetClient" Margin="0,2"/>
<CheckBox x:Name="chkNetFx3" Content="NetFx3" Margin="0,2"/>
<CheckBox x:Name="chkDirectPlay" Content="DirectPlay" Margin="0,2"/>
<CheckBox x:Name="chkSMB1Protocol" Content="SMB1Protocol" Margin="0,2"/>
<TextBlock Text="Selected features (semicolon-separated):" Margin="0,10,0,5"/>
<TextBox x:Name="txtOptionalFeatures"
IsReadOnly="True"
Margin="0,0,0,10"
ToolTip="Semicolon-delimited list of optional features"/>
</StackPanel>
</Expander>
</Grid>
</TabItem>
<!-- ============== TAB 3: APPLICATIONS ============== -->
<TabItem Header="Applications" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallApps" Content="Install Apps" Margin="0,0,5,0"/>
<Image x:Name="imgInstallAppsInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Check to include additional applications in the FFU." />
</StackPanel>
</Grid>
</TabItem>
<!-- ============== TAB 4: M365 Apps/Office ============== -->
<TabItem Header="M365 Apps/Office" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Install Office -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,5">
<CheckBox x:Name="chkInstallOffice" Content="Install Office" Margin="0,0,5,0"/>
<Image x:Name="imgInstallOfficeInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Check to install Microsoft Office as part of the FFU."/>
</StackPanel>
<!-- Office Path -->
<StackPanel x:Name="OfficePathStackPanel"
Grid.Row="1" Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center"
Margin="0,5">
<TextBlock Text="Office Path:"/>
<Image x:Name="imgOfficePathInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the Microsoft Office installation."/>
</StackPanel>
<Grid x:Name="OfficePathGrid"
Grid.Row="1" Grid.Column="1"
Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficePath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficePath"
Grid.Column="1"
Content="Browse..."
Width="80"
VerticalAlignment="Center"
ToolTip="Browse for Office installation folder."/>
</Grid>
<!-- Copy Office Configuration XML -->
<StackPanel x:Name="CopyOfficeConfigXMLStackPanel"
Grid.Row="2" Grid.Column="0"
Orientation="Horizontal"
Margin="0,5">
<CheckBox x:Name="chkCopyOfficeConfigXML" Content="Copy Office Configuration XML" Margin="0,0,5,0"/>
<Image x:Name="imgCopyOfficeConfigXMLInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Check to copy the Office Configuration XML."/>
</StackPanel>
<!-- OfficeConfigurationXMLFile -->
<StackPanel x:Name="OfficeConfigurationXMLFileStackPanel"
Grid.Row="3" Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center"
Margin="0,5"
Visibility="Collapsed">
<TextBlock Text="Office Configuration XML File:"/>
<Image x:Name="imgOfficeConfigXMLFileInfo"
Width="16" Height="16"
Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Select the Office Configuration XML file to copy."/>
</StackPanel>
<Grid x:Name="OfficeConfigurationXMLFileGrid"
Grid.Row="3" Grid.Column="1"
Margin="5"
Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtOfficeConfigXMLFilePath"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseOfficeConfigXMLFile"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for an Office Configuration XML file."/>
</Grid>
</Grid>
</TabItem>
<!-- ============== TAB 5: DRIVERS ============== -->
<TabItem Header="Drivers" Padding="20">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Install Drivers -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkInstallDrivers" Content="Install Drivers to FFU" Margin="0,0,5,0"/>
<Image x:Name="imgInstallDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Use DISM to service drivers directly into the FFU."/>
</StackPanel>
<!-- Copy Drivers -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyDrivers" Content="Copy Drivers to USB drive" Margin="0,0,5,0"/>
<Image x:Name="imgCopyDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Copy the drivers folder to the USB deploy partition."/>
</StackPanel>
<!-- Download Drivers -->
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkDownloadDrivers" Content="Download Drivers" Margin="0,0,5,0"/>
<Image x:Name="imgDownloadDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Check to download drivers automatically."/>
</StackPanel>
<!-- Make/Model -->
<StackPanel x:Name="spMakeModelSection"
Grid.Row="3"
Grid.ColumnSpan="2"
Visibility="Collapsed"
Margin="0">
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Make -->
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtMakeLabel" Text="Make: " VerticalAlignment="Center"/>
<Image x:Name="imgMakeInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Select the device manufacturer."/>
</StackPanel>
<ComboBox x:Name="cmbMake"
Grid.Row="0" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<!-- Model -->
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock x:Name="txtModelLabel" Text="Model: " VerticalAlignment="Center"/>
<Image x:Name="imgModelInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Enter the device model."/>
</StackPanel>
<TextBox x:Name="cmbModel"
Grid.Row="1" Grid.Column="1"
Margin="5"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
</Grid>
</StackPanel>
<!-- Drivers Folder -->
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="Drivers Folder:" VerticalAlignment="Center"/>
<Image x:Name="imgDriversFolderInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the Drivers folder."/>
</StackPanel>
<Grid Grid.Row="4" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtDriversFolder"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowseDriversFolder"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for Drivers folder."/>
</Grid>
<!-- Copy PE Drivers -->
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="5">
<CheckBox x:Name="chkCopyPEDrivers" Content="Copy PE Drivers" Margin="0,0,5,0"/>
<Image x:Name="imgCopyPEDriversInfo"
Width="16" Height="16"
Cursor="Arrow"
ToolTip="Copy local PE Drivers folder to the build."/>
</StackPanel>
<!-- PE Drivers Folder -->
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="5">
<TextBlock Text="PE Drivers Folder:" VerticalAlignment="Center"/>
<Image x:Name="imgPEDriversFolderInfo"
Width="16" Height="16" Margin="5,0,0,0"
Cursor="Arrow"
ToolTip="Path to the PE Drivers folder."/>
</StackPanel>
<Grid Grid.Row="6" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtPEDriversFolder"
Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"/>
<Button x:Name="btnBrowsePEDrivers"
Grid.Column="1"
Content="Browse..."
Width="80"
Margin="5,0,0,0"
VerticalAlignment="Center"
ToolTip="Browse for PE Drivers folder."/>
</Grid>
</Grid>
</TabItem>
</TabControl>
<!-- Progress Bar -->
<ProgressBar x:Name="progressBar"
Height="20"
Margin="0,10,0,0"
Grid.Row="1"
Visibility="Collapsed"/>
<!-- Status Text -->
<TextBlock x:Name="txtStatus"
Grid.Row="2"
Margin="0,5,0,0"/>
<!-- Buttons (Build Config File / Build FFU) -->
<StackPanel Grid.Row="3"
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="0,0,20,20">
<Button x:Name="btnBuildConfig"
Content="Build Config File"
Width="150"
Margin="0,0,10,0"
FontSize="14"
Padding="10,5"/>
<Button x:Name="btnRun"
Content="Build FFU"
Width="120"
FontSize="14"
Padding="10,5"/>
</StackPanel>
</Grid>
</Window>