Merge pull request #349 from Noggog/context-aware-navigation

Context Aware Navigation
This commit is contained in:
Timothy Baldridge 2020-01-04 20:25:47 -08:00 committed by GitHub
commit 7616279766
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 286 additions and 192 deletions

View File

@ -5,11 +5,12 @@ using System.IO;
using System.Reactive;
using System.Reactive.Subjects;
using Wabbajack.Common;
using Wabbajack.Lib;
namespace Wabbajack
{
[JsonObject(MemberSerialization.OptOut)]
public class MainSettings
public class MainSettings : ViewModel
{
private static string _filename = "settings.json";
@ -21,7 +22,7 @@ namespace Wabbajack
public CompilerSettings Compiler { get; set; } = new CompilerSettings();
private Subject<Unit> _saveSignal = new Subject<Unit>();
[JsonIgnoreAttribute]
[JsonIgnore]
public IObservable<Unit> SaveSignal => _saveSignal;
public static bool TryLoadTypicalSettings(out MainSettings settings)

View File

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wabbajack.Common;
namespace Wabbajack.UserInterventions
{
public class ShowLoginManager : AUserIntervention
{
public override string ShortDescription => "User requested to show the login manager";
public override string ExtendedDescription => "User requested to show the UI for managing all the logins supported by Wabbajack";
public override void Cancel()
{
}
}
}

View File

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using ReactiveUI;
using ReactiveUI.Fody.Helpers;
using Wabbajack.Common;
using Wabbajack.Lib;
namespace Wabbajack
{
public interface IBackNavigatingVM : IReactiveObject
{
ViewModel NavigateBackTarget { get; set; }
IReactiveCommand BackCommand { get; }
}
public class BackNavigatingVM : ViewModel, IBackNavigatingVM
{
[Reactive]
public ViewModel NavigateBackTarget { get; set; }
public IReactiveCommand BackCommand { get; protected set; }
public BackNavigatingVM(MainWindowVM mainWindowVM)
{
BackCommand = ReactiveCommand.Create(
execute: () => Utils.CatchAndLog(() => mainWindowVM.NavigateTo(NavigateBackTarget)),
canExecute: this.ConstructCanNavigateBack()
.ObserveOnGuiThread());
}
}
public static class IBackNavigatingVMExt
{
public static IObservable<bool> ConstructCanNavigateBack(this IBackNavigatingVM vm)
{
return vm.WhenAny(x => x.NavigateBackTarget)
.Select(x => x != null);
}
}
}

View File

@ -18,13 +18,16 @@ using Wabbajack.Lib;
namespace Wabbajack
{
public class CompilerVM : ViewModel
public class CompilerVM : ViewModel, IBackNavigatingVM
{
public MainWindowVM MWVM { get; }
private readonly ObservableAsPropertyHelper<BitmapImage> _image;
public BitmapImage Image => _image.Value;
[Reactive]
public ViewModel NavigateBackTarget { get; set; }
[Reactive]
public ModManager SelectedCompilerType { get; set; }
@ -139,12 +142,16 @@ namespace Wabbajack
BackCommand = ReactiveCommand.Create(
execute: () =>
{
mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM;
mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM);
StartedCompilation = false;
Completed = null;
},
canExecute: this.WhenAny(x => x.Compiling)
.Select(x => !x));
canExecute: Observable.CombineLatest(
this.WhenAny(x => x.Compiling)
.Select(x => !x),
this.ConstructCanNavigateBack(),
resultSelector: (i, b) => i && b)
.ObserveOnGuiThread());
// Compile progress updates and populate ObservableCollection
Dictionary<int, CPUDisplayVM> cpuDisplays = new Dictionary<int, CPUDisplayVM>();

View File

@ -20,10 +20,11 @@ using DynamicData.Binding;
using Wabbajack.Common.StatusFeed;
using System.Reactive;
using System.Collections.Generic;
using System.Windows.Input;
namespace Wabbajack
{
public class InstallerVM : ViewModel
public class InstallerVM : ViewModel, IBackNavigatingVM
{
public SlideShow Slideshow { get; }
@ -37,6 +38,9 @@ namespace Wabbajack
public FilePickerVM ModListLocation { get; }
[Reactive]
public ViewModel NavigateBackTarget { get; set; }
private readonly ObservableAsPropertyHelper<ISubInstallerVM> _installer;
public ISubInstallerVM Installer => _installer.Value;
@ -182,10 +186,14 @@ namespace Wabbajack
{
StartedInstallation = false;
Completed = null;
mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM;
mainWindowVM.NavigateTo(mainWindowVM.ModeSelectionVM);
},
canExecute: this.WhenAny(x => x.Installing)
.Select(x => !x));
canExecute: Observable.CombineLatest(
this.WhenAny(x => x.Installing)
.Select(x => !x),
this.ConstructCanNavigateBack(),
resultSelector: (i, b) => i && b)
.ObserveOnGuiThread());
_percentCompleted = this.WhenAny(x => x.Installer.ActiveInstallation)
.StartWith(default(AInstaller))

View File

@ -29,23 +29,21 @@ namespace Wabbajack
public MainSettings Settings { get; }
[Reactive]
public ViewModel ActivePane { get; set; }
public ViewModel ActivePane { get; private set; }
public ObservableCollectionExtended<IStatusMessage> Log { get; } = new ObservableCollectionExtended<IStatusMessage>();
public readonly Lazy<CompilerVM> Compiler;
public readonly Lazy<InstallerVM> Installer;
public readonly Lazy<SettingsVM> SettingsPane;
public readonly Lazy<ModListGalleryVM> Gallery;
public readonly ModeSelectionVM ModeSelectionVM;
public readonly UserInterventionHandlers UserInterventionHandlers;
public readonly LoginManagerVM LoginManagerVM;
public readonly List<ViewModel> NavigationTrail = new List<ViewModel>();
public ICommand CopyVersionCommand { get; }
public ICommand ShowLoginManagerVM { get; }
public ICommand GoBackCommand { get; }
public ICommand OpenSettingsCommand { get; }
public string VersionDisplay { get; }
public MainWindowVM(MainWindow mainWindow, MainSettings settings)
@ -54,10 +52,10 @@ namespace Wabbajack
Settings = settings;
Installer = new Lazy<InstallerVM>(() => new InstallerVM(this));
Compiler = new Lazy<CompilerVM>(() => new CompilerVM(this));
SettingsPane = new Lazy<SettingsVM>(() => new SettingsVM(this));
Gallery = new Lazy<ModListGalleryVM>(() => new ModListGalleryVM(this));
ModeSelectionVM = new ModeSelectionVM(this);
UserInterventionHandlers = new UserInterventionHandlers(this);
LoginManagerVM = new LoginManagerVM(this);
// Set up logging
Utils.LogMessages
@ -103,12 +101,12 @@ namespace Wabbajack
if (IsStartingFromModlist(out var path))
{
Installer.Value.ModListLocation.TargetPath = path;
ActivePane = Installer.Value;
NavigateTo(Installer.Value);
}
else
{
// Start on mode selection
ActivePane = ModeSelectionVM;
NavigateTo(ModeSelectionVM);
}
try
@ -126,6 +124,10 @@ namespace Wabbajack
{
Clipboard.SetText($"Wabbajack {VersionDisplay}\n{ThisAssembly.Git.Sha}");
});
OpenSettingsCommand = ReactiveCommand.Create(
canExecute: this.WhenAny(x => x.ActivePane)
.Select(active => !SettingsPane.IsValueCreated || !object.ReferenceEquals(active, SettingsPane.Value)),
execute: () => NavigateTo(SettingsPane.Value));
}
private static bool IsStartingFromModlist(out string modlistPath)
{
@ -146,20 +148,19 @@ namespace Wabbajack
if (path == null) return;
var installer = Installer.Value;
Settings.Installer.LastInstalledListLocation = path;
ActivePane = installer;
NavigateTo(installer);
installer.ModListLocation.TargetPath = path;
}
public void NavigateBack()
{
var prev = NavigationTrail.Last();
NavigationTrail.RemoveAt(NavigationTrail.Count - 1);
ActivePane = prev;
}
public void NavigateTo(ViewModel vm)
{
NavigationTrail.Add(ActivePane);
ActivePane = vm;
}
public void NavigateTo<T>(T vm)
where T : ViewModel, IBackNavigatingVM
{
vm.NavigateBackTarget = ActivePane;
ActivePane = vm;
}

View File

@ -15,22 +15,20 @@ using Wabbajack.Lib.ModListRegistry;
namespace Wabbajack
{
public class ModListGalleryVM : ViewModel
public class ModListGalleryVM : BackNavigatingVM
{
public MainWindowVM MWVM { get; }
public ObservableCollectionExtended<ModListMetadataVM> ModLists { get; } = new ObservableCollectionExtended<ModListMetadataVM>();
public IReactiveCommand BackCommand { get; }
public IReactiveCommand RefreshCommand { get; }
private int missingHashFallbackCounter;
public ModListGalleryVM(MainWindowVM mainWindowVM)
: base(mainWindowVM)
{
MWVM = mainWindowVM;
BackCommand = ReactiveCommand.Create(
execute: () => mainWindowVM.ActivePane = mainWindowVM.ModeSelectionVM);
RefreshCommand = ReactiveCommand.Create(() => { });
RefreshCommand.StartingExecution()

View File

@ -32,8 +32,8 @@ namespace Wabbajack
_mainVM.OpenInstaller(path);
});
CompileCommand = ReactiveCommand.Create(() => mainVM.ActivePane = mainVM.Compiler.Value);
BrowseCommand = ReactiveCommand.Create(() => mainVM.ActivePane = mainVM.Gallery.Value);
CompileCommand = ReactiveCommand.Create(() => mainVM.NavigateTo(mainVM.Compiler.Value));
BrowseCommand = ReactiveCommand.Create(() => mainVM.NavigateTo(mainVM.Gallery.Value));
}
}
}

View File

@ -4,21 +4,17 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using ReactiveUI;
using Wabbajack.Lib;
using Wabbajack.Lib.Downloaders;
namespace Wabbajack
{
public class LoginManagerVM : ViewModel
public class LoginManagerVM : BackNavigatingVM
{
private MainWindowVM mainWindowVM;
public ICommand BackCommand { get; }
public List<INeedsLogin> Downloaders { get; }
public LoginManagerVM(MainWindowVM mainWindowVM)
public LoginManagerVM(SettingsVM settingsVM)
: base(settingsVM.MWVM)
{
BackCommand = ReactiveCommand.Create(() => mainWindowVM.NavigateBack());
Downloaders = DownloadDispatcher.Downloaders.OfType<INeedsLogin>().ToList();
}
}

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ReactiveUI;
using Wabbajack.Lib;
namespace Wabbajack
{
public class SettingsVM : BackNavigatingVM
{
public MainWindowVM MWVM { get; }
public LoginManagerVM LoginManagerVM { get; }
public SettingsVM(MainWindowVM mainWindowVM)
: base(mainWindowVM)
{
MWVM = mainWindowVM;
LoginManagerVM = new LoginManagerVM(this);
}
}
}

View File

@ -11,7 +11,6 @@ using Wabbajack.Common;
using Wabbajack.Lib.Downloaders;
using Wabbajack.Lib.NexusApi;
using Wabbajack.Lib.WebAutomation;
using Wabbajack.UserInterventions;
namespace Wabbajack
{
@ -29,11 +28,11 @@ namespace Wabbajack
CancellationTokenSource cancel = new CancellationTokenSource();
var oldPane = MainWindow.ActivePane;
var vm = await WebBrowserVM.GetNew();
MainWindow.ActivePane = vm;
MainWindow.NavigateTo(vm);
vm.BackCommand = ReactiveCommand.Create(() =>
{
cancel.Cancel();
MainWindow.ActivePane = oldPane;
MainWindow.NavigateTo(oldPane);
intervention.Cancel();
});
@ -51,7 +50,7 @@ namespace Wabbajack
intervention.Cancel();
}
MainWindow.ActivePane = oldPane;
MainWindow.NavigateTo(oldPane);
}
public async Task Handle(IUserIntervention msg)
@ -76,9 +75,6 @@ namespace Wabbajack
break;
case ConfirmationIntervention c:
break;
case ShowLoginManager c:
MainWindow.NavigateTo(MainWindow.LoginManagerVM);
break;
default:
throw new NotImplementedException($"No handler for {msg}");
}

View File

@ -13,7 +13,7 @@ using Wabbajack.Lib.WebAutomation;
namespace Wabbajack
{
public class WebBrowserVM : ViewModel
public class WebBrowserVM : ViewModel, IBackNavigatingVM
{
[Reactive]
public string Instructions { get; set; }
@ -21,6 +21,9 @@ namespace Wabbajack
public IWebBrowser Browser { get; } = new ChromiumWebBrowser();
public CefSharpWrapper Driver => new CefSharpWrapper(Browser);
[Reactive]
public ViewModel NavigateBackTarget { get; set; }
[Reactive]
public IReactiveCommand BackCommand { get; set; }

View File

@ -12,22 +12,10 @@
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
Width="35"
Height="35"
Click="ConfigureLogins_Click"
Style="{StaticResource IconBareButtonStyle}">
<icon:PackIconMaterial
Width="25"
Height="25"
Kind="Cogs" />
</Button>
<Button
Grid.Column="1"
Width="35"
Width="40"
Height="35"
Click="GitHub_Click"
Style="{StaticResource IconBareButtonStyle}">
@ -37,8 +25,8 @@
Kind="GithubCircle" />
</Button>
<Button
Grid.Column="2"
Width="35"
Grid.Column="1"
Width="40"
Height="35"
Margin="4,0,0,0"
Click="Patreon_Click"
@ -49,8 +37,8 @@
Kind="Patreon" />
</Button>
<Button
Grid.Column="3"
Width="35"
Grid.Column="2"
Width="40"
Height="35"
Click="Discord_Click"
Style="{StaticResource IconBareButtonStyle}">

View File

@ -2,7 +2,6 @@
using System.Windows;
using System.Windows.Controls;
using Wabbajack.Common;
using Wabbajack.UserInterventions;
namespace Wabbajack
{
@ -30,10 +29,5 @@ namespace Wabbajack
{
Process.Start("https://www.patreon.com/user?u=11907933");
}
private void ConfigureLogins_Click(object sender, RoutedEventArgs e)
{
Utils.Log(new ShowLoginManager());
}
}
}

View File

@ -1,89 +0,0 @@
<UserControl x:Class="Wabbajack.LoginManagerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:wabbajack="clr-namespace:Wabbajack"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Color x:Key="TextBackgroundFill">#92000000</Color>
<SolidColorBrush x:Key="TextBackgroundFillBrush" Color="{StaticResource TextBackgroundFill}" />
<Color x:Key="TextBackgroundHoverFill">#DF000000</Color>
<Style x:Key="BackgroundBlurStyle" TargetType="TextBlock">
<Setter Property="Background" Value="{StaticResource TextBackgroundFillBrush}" />
<Setter Property="Foreground" Value="Transparent" />
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"
To="{StaticResource TextBackgroundHoverFill}"
Duration="0:0:0.06" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"
To="{StaticResource TextBackgroundFill}"
Duration="0:0:0.06" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="47" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<wabbajack:TopProgressView
Title="Login Manager"
Grid.Row="0"
Grid.RowSpan="2"
ShadowMargin="False" />
<Button
x:Name="BackButton"
Grid.Row="0"
Width="30"
Height="30"
Margin="7,5,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Command="{Binding BackCommand}"
Style="{StaticResource IconCircleButtonStyle}"
ToolTip="Back to main menu">
<iconPacks:PackIconMaterial Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" Kind="ArrowLeft" />
</Button>
<!-- Do it this way so we can access the browser directly from the VM -->
<ListView Grid.Row="1" ItemsSource="{Binding Downloaders}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="30" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="48"></ColumnDefinition>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{Binding IconUrl, Mode=OneTime}"></Image>
<Label Grid.Column="1" Width="400" Content="{Binding SiteName, Mode=OneTime}" FontSize="14"></Label>
<Label Grid.Column="2" Width="400" Content="{Binding MetaInfo, Mode=OneWay}" FontSize="14"></Label>
<Button Grid.Column="3" Content="Login" Command="{Binding TriggerLogin}" Margin="5"></Button>
<Button Grid.Column="4" Content="Logout" Command="{Binding ClearLogin}" Margin="5"></Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</UserControl>

View File

@ -3,6 +3,7 @@
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:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Wabbajack"
xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@ -39,18 +40,36 @@
<DataTemplate DataType="{x:Type local:WebBrowserVM}">
<local:WebBrowserView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:SettingsVM}">
<local:SettingsView />
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
<mahapps:MetroWindow.RightWindowCommands>
<mahapps:WindowCommands>
<Button Command="{Binding CopyVersionCommand}" Content="{Binding VersionDisplay}">
<mahapps:WindowCommands.Resources>
<Style BasedOn="{StaticResource IconBareButtonStyle}" TargetType="Button" />
</mahapps:WindowCommands.Resources>
<Button
Margin="5,0"
Command="{Binding CopyVersionCommand}"
Content="{Binding VersionDisplay}">
<Button.ToolTip>
<TextBlock>
Wabbajack Version<LineBreak />
Click to copy to clipboard</TextBlock>
</Button.ToolTip>
</Button>
<Button
Grid.Column="1"
Margin="5,0"
Command="{Binding OpenSettingsCommand}">
<icon:PackIconMaterial
Width="17"
Height="17"
Kind="Settings" />
</Button>
</mahapps:WindowCommands>
</mahapps:MetroWindow.RightWindowCommands>
</mahapps:MetroWindow>

View File

@ -0,0 +1,50 @@
<UserControl
x:Class="Wabbajack.LoginManagerView"
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-namespace:Wabbajack"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<Grid>
<!-- Do it this way so we can access the browser directly from the VM -->
<ListView Background="{StaticResource WindowBackgroundBrush}" ItemsSource="{Binding Downloaders}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="30" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="48" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{Binding IconUrl, Mode=OneTime}" />
<Label
Grid.Column="1"
Width="400"
Content="{Binding SiteName, Mode=OneTime}"
FontSize="14" />
<Label
Grid.Column="2"
Width="400"
Content="{Binding MetaInfo, Mode=OneWay}"
FontSize="14" />
<Button
Grid.Column="3"
Margin="5"
Command="{Binding TriggerLogin}"
Content="Login" />
<Button
Grid.Column="4"
Margin="5"
Command="{Binding ClearLogin}"
Content="Logout" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</UserControl>

View File

@ -0,0 +1,37 @@
<UserControl
x:Class="Wabbajack.SettingsView"
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:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Wabbajack"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="47" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<local:TopProgressView
Title="Settings"
Grid.Row="0"
Grid.RowSpan="2"
ShadowMargin="False" />
<Button
x:Name="BackButton"
Grid.Row="0"
Width="30"
Height="30"
Margin="7,5,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Command="{Binding BackCommand}"
Style="{StaticResource IconCircleButtonStyle}"
ToolTip="Back to main menu">
<iconPacks:PackIconMaterial Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" Kind="ArrowLeft" />
</Button>
<local:LoginManagerView Grid.Row="1" DataContext="{Binding LoginManagerVM}" />
</Grid>
</UserControl>

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Wabbajack
{
/// <summary>
/// Interaction logic for SettingsView.xaml
/// </summary>
public partial class SettingsView : UserControl
{
public SettingsView()
{
InitializeComponent();
}
}
}

View File

@ -172,6 +172,11 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="View Models\BackNavigatingVM.cs" />
<Compile Include="View Models\Settings\SettingsVM.cs" />
<Compile Include="Views\Settings\SettingsView.xaml.cs">
<DependentUpon>SettingsView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\AttentionBorder.xaml.cs">
<DependentUpon>AttentionBorder.xaml</DependentUpon>
</Compile>
@ -179,10 +184,9 @@
<Compile Include="Views\Common\UnderMaintenanceOverlay.xaml.cs">
<DependentUpon>UnderMaintenanceOverlay.xaml</DependentUpon>
</Compile>
<Compile Include="UserInterventions\ShowLoginManager.cs" />
<Compile Include="Util\AsyncLazy.cs" />
<Compile Include="View Models\CPUDisplayVM.cs" />
<Compile Include="View Models\LoginManagerVM.cs" />
<Compile Include="View Models\Settings\LoginManagerVM.cs" />
<Compile Include="Views\Compilers\CompilationCompleteView.xaml.cs">
<DependentUpon>CompilationCompleteView.xaml</DependentUpon>
</Compile>
@ -218,9 +222,6 @@
<Compile Include="Views\LinksView.xaml.cs">
<DependentUpon>LinksView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\LoginManagerView.xaml.cs">
<DependentUpon>LoginManagerView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ModeSelectionView.xaml.cs">
<DependentUpon>ModeSelectionView.xaml</DependentUpon>
</Compile>
@ -269,6 +270,9 @@
<Compile Include="Views\ModListGalleryView.xaml.cs">
<DependentUpon>ModListGalleryView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\LoginManagerView.xaml.cs">
<DependentUpon>LoginManagerView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\TextViewer.xaml.cs">
<DependentUpon>TextViewer.xaml</DependentUpon>
</Compile>
@ -282,6 +286,10 @@
<Compile Include="Views\WebBrowserView.xaml.cs">
<DependentUpon>WebBrowserView.xaml</DependentUpon>
</Compile>
<Page Include="Views\Settings\SettingsView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Common\AttentionBorder.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@ -326,10 +334,6 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\LoginManagerView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ModeSelectionView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@ -388,6 +392,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Settings\LoginManagerView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\TextViewer.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@ -573,5 +581,8 @@
<ItemGroup>
<SplashScreen Include="Resources\Wabba_Mouth_Small.png" />
</ItemGroup>
<ItemGroup>
<Folder Include="UserInterventions\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>