ScpDriverInstaller/MainWindow.xaml (220 lines of code) (raw):

<Window x:Class="ScpDriverInstaller.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:viewModels="clr-namespace:ScpDriverInstaller.View_Models" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:Properties="clr-namespace:ScpDriverInstaller.Properties" xmlns:Utilities="clr-namespace:ScpDriverInstaller.Utilities" Title="{x:Static Properties:Resources.Title}" Width="1020" MinWidth="1020" Height="700" MinHeight="700" WindowStartupLocation="CenterScreen" SizeToContent="Height" ResizeMode="CanMinimize" Icon="Usb.ico" Initialized="Window_Initialized" Loaded="Window_Loaded" Closing="MainWindow_OnClosing"> <Window.Resources> <Utilities:BitmapToImageSource x:Key="BitmapToImageSource" /> </Window.Resources> <Grid x:Name="InstallGrid"> <Grid.DataContext> <viewModels:InstallationOptionsViewModel /> </Grid.DataContext> <xctk:BusyIndicator IsBusy="False" DisplayAfter="0" x:Name="MainBusyIndicator"> <!-- A Wizard! --> <xctk:Wizard FinishButtonClosesWindow="True" Help="Wizard_OnHelp" CancelButtonContent="{x:Static Properties:Resources.Cancel}" BackButtonContent="{x:Static Properties:Resources.Back}" FinishButtonContent="{x:Static Properties:Resources.Finish}" HelpButtonContent="{x:Static Properties:Resources.Help}" NextButtonContent="{x:Static Properties:Resources.Next}"> <!-- Welcome page --> <xctk:WizardPage x:Name="IntroPage" NextPage="{Binding ElementName=DsInstPage}" Title="{x:Static Properties:Resources.WelcomeTitle}" Description="{x:Static Properties:Resources.WelcomeDescription}"> <Grid> <StackPanel> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10" Text="{x:Static Properties:Resources.WelcomeGreetings}" /> <!-- Xbox 360 Controller driver --> <Expander IsExpanded="{Binding Path=IsXbox360DriverNeeded, Mode=OneWay}" Header="{x:Static Properties:Resources.Xbox360Driver}"> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.Xbox360DriverNeededBeforeLink}" /> <Hyperlink NavigateUri="https://www.microsoft.com/hardware/en-US/d/xbox-360-controller-for-windows" RequestNavigate="Hyperlink_OnRequestNavigate"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.Xbox360DriverNeededLink}" /> </Hyperlink> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.Xbox360DriverNeededAfterLink}" /> <LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.Xbox360DriverNeededInstallBeforeContinuing}" /> </TextBlock> </Expander> </StackPanel> </Grid> </xctk:WizardPage> <!-- Controller Installation Page --> <xctk:WizardPage x:Name="DsInstPage" PageType="Interior" Title="{x:Static Properties:Resources.DualShockSetupTitle}" Description="{x:Static Properties:Resources.DualShockSetupDescription}" PreviousPage="{Binding ElementName=IntroPage}" NextPage="{Binding ElementName=BthInstPage}"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="500" /> </Grid.ColumnDefinitions> <StackPanel Grid.Row="0" Grid.Column="0"> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.DualShockSetupPleasePlugIn}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.SetupIfNotShowingUp}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.SetupPleaseStartInstall}" /> </TextBlock> <!-- Install button --> <Button IsEnabled="{Binding Path=InstallDs3ButtonEnabled}" Click="InstallDsOnClick" Margin="20,0"> <TextBlock Text="{x:Static Properties:Resources.DualShockSetupStartInstall}" /> </Button> </StackPanel> <!-- Uninitialized --> <GroupBox Grid.Row="0" Grid.Column="1" Margin="10,0,0,5" Header="{x:Static Properties:Resources.DualShockSetupUninitialized}"> <ScrollViewer HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="DualShockStackPanelHidUsb" /> </ScrollViewer> </GroupBox> <!-- Initialized --> <GroupBox Grid.Row="1" Grid.Column="1" Margin="10,5,0,0" Header="{x:Static Properties:Resources.DualShockSetupInitialized}"> <ScrollViewer HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="DualShockStackPanelWinUsb" /> </ScrollViewer> </GroupBox> </Grid> </xctk:WizardPage> <!-- Bluetooth Host Installation Page --> <xctk:WizardPage x:Name="BthInstPage" PageType="Interior" Title="{x:Static Properties:Resources.BluetoothSetupTitle}" Description="{x:Static Properties:Resources.BluetoothSetupDescription}" PreviousPage="{Binding ElementName=DsInstPage}" NextPage="{Binding ElementName=VBusInstPage}"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="500" /> </Grid.ColumnDefinitions> <!-- Main area --> <StackPanel Grid.Row="0" Grid.Column="0"> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.BluetoothSetupPleasePlugIn}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.SetupIfNotShowingUp}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.SetupPleaseStartInstall}" /> </TextBlock> <!-- Install button --> <Button IsEnabled="{Binding Path=InstallBthButtonEnabled}" Click="InstallBthHostOnClick" Margin="20,0"> <TextBlock Text="{x:Static Properties:Resources.BluetoothSetupStartInstall}" /> </Button> </StackPanel> <!-- Uninitialized --> <GroupBox Grid.Row="0" Grid.Column="1" Margin="10,0,0,5" Header="{x:Static Properties:Resources.BluetoothSetupUninitialized}"> <ScrollViewer HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="BluetoothStackPanelDefault" /> </ScrollViewer> </GroupBox> <!-- Initialized --> <GroupBox Grid.Row="1" Grid.Column="1" Margin="10,5,0,0" Header="{x:Static Properties:Resources.BluetoothSetupInitialized}"> <ScrollViewer HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="BluetoothStackPanelWinUsb" /> </ScrollViewer> </GroupBox> <!-- Warning --> <StackPanel Grid.Row="1" Grid.Column="0"> <!-- You can also use a localized warning picture. Simply put it in ScpDriverInstaller\Images\Warning.$Locale.png and add it to your .resx file as "Warning" --> <Image Source="{Binding Source={x:Static Properties:Resources.Warning}, Converter={StaticResource BitmapToImageSource}}" Stretch="UniformToFill" /> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10" Foreground="#FFFF0000" FontWeight="Bold" FontSize="14"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.BluetoothSetupWarningBeforeLink}" /> <Hyperlink NavigateUri="https://github.com/nefarius/ScpToolkit/wiki/Bluetooth-driver-pitfalls" RequestNavigate="Hyperlink_OnRequestNavigate"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.BluetoothSetupWarningLink}" /> </Hyperlink> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.BluetoothSetupWarningAfterLink}" /> </TextBlock> </StackPanel> </Grid> </xctk:WizardPage> <!-- ScpVBus Installation Page --> <xctk:WizardPage x:Name="VBusInstPage" PageType="Interior" Title="{x:Static Properties:Resources.VirtualBusSetupTitle}" Description="{x:Static Properties:Resources.VirtualBusSetupDescription}" PreviousPage="{Binding ElementName=BthInstPage}" NextPage="{Binding ElementName=ServiceInstPage}"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="500" /> </Grid.ColumnDefinitions> <!-- Main area --> <StackPanel> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.VirtualBusSetupWhatWeWillDo}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.VirtualBusSetupIfAlreadyPresent}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.SetupPleaseStartInstall}" /> </TextBlock> <!-- Install button --> <Button Click="InstallVBusOnClick" Margin="20,0"> <TextBlock Text="{x:Static Properties:Resources.VirtualBusSetupStartInstall}" /> </Button> </StackPanel> <StackPanel Grid.Row="1" Grid.Column="0"> <Image Source="{Binding Source={x:Static Properties:Resources.Warning}, Converter={StaticResource BitmapToImageSource}}" Stretch="UniformToFill" /> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10" Foreground="#FFFF0000" FontWeight="Bold" FontSize="14" Text="{x:Static Properties:Resources.VirtualBusSetupToAvoidRestart}" /> </StackPanel> </Grid> </xctk:WizardPage> <!-- Service Installation Page --> <xctk:WizardPage x:Name="ServiceInstPage" PageType="Interior" Title="{x:Static Properties:Resources.ServiceSetupTitle}" Description="{x:Static Properties:Resources.ServiceSetupDescription}" PreviousPage="{Binding ElementName=VBusInstPage}" NextPage="{Binding ElementName=LastPage}"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="500" /> </Grid.ColumnDefinitions> <!-- Main area --> <StackPanel Grid.Row="0" Grid.Column="0"> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.ServiceSetupWhyIsItNeeded}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.ServiceSetupIfAlreadyPresent}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.ServiceSetupInstallationRequired}" /> </TextBlock> <!-- Install button --> <Button Click="InstallWindowsServiceOnClick" Margin="20,0"> <TextBlock Text="{x:Static Properties:Resources.ServiceSetupStartInstall}" /> </Button> </StackPanel> </Grid> </xctk:WizardPage> <!-- Last Page --> <xctk:WizardPage x:Name="LastPage" PageType="Interior" Title="{x:Static Properties:Resources.FinishedTitle}" Description="{x:Static Properties:Resources.FinishedDescription}" CanFinish="True"> <TextBlock TextWrapping="Wrap" TextAlignment="Justify" Margin="10"> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.FinishedThatsIt}" /> <LineBreak /><LineBreak /> <TextBlock TextWrapping="Wrap" Text="{x:Static Properties:Resources.FinishedAutoService}" /> </TextBlock> </xctk:WizardPage> </xctk:Wizard> </xctk:BusyIndicator> </Grid> </Window>