public WalletManagerViewModel(NavigationStateViewModel navigationState, WalletManager walletManager, UiConfig uiConfig) { Model = walletManager; _walletDictionary = new Dictionary <Wallet, WalletViewModelBase>(); _items = new ObservableCollection <WalletViewModelBase>(); _navigationState = navigationState; Observable .FromEventPattern <WalletState>(walletManager, nameof(WalletManager.WalletStateChanged)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe( x => { var wallet = x.Sender as Wallet; if (wallet is { } && _walletDictionary.ContainsKey(wallet)) { if (wallet.State == WalletState.Stopping) { RemoveWallet(_walletDictionary[wallet]); } else if (_walletDictionary[wallet] is ClosedWalletViewModel cwvm && wallet.State == WalletState.Started) { OpenClosedWallet(walletManager, uiConfig, cwvm); } } AnyWalletStarted = Items.OfType <WalletViewModelBase>().Any(x => x.WalletState == WalletState.Started); });
public MainViewModel(Global global) { _global = global; _dialogScreen = new DialogScreenViewModel(); var navigationState = new NavigationStateViewModel(() => this, () => _dialogScreen, () => this); Network = global.Network; _currentDialog = null; _isMainContentEnabled = true; _isDialogScreenEnabled = true; _statusBar = new StatusBarViewModel(global.DataDir, global.Network, global.Config, global.HostedServices, global.BitcoinStore.SmartHeaderChain, global.Synchronizer, global.LegalDocuments); var walletManager = new WalletManagerViewModel(navigationState, global.WalletManager, global.UiConfig); var addWalletPage = new AddWalletPageViewModel(navigationState, global.LegalDocuments, global.WalletManager, global.BitcoinStore, global.Network); _navBar = new NavBarViewModel(navigationState, Router, walletManager, addWalletPage); this.WhenAnyValue(x => x.DialogScreen !.IsDialogOpen) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => IsMainContentEnabled = !x); this.WhenAnyValue(x => x.CurrentDialog !.IsDialogOpen) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => IsDialogScreenEnabled = !x); }
protected RoutableViewModel(NavigationStateViewModel navigationState, NavigationTarget navigationTarget) { NavigationState = navigationState; NavigationTarget = navigationTarget; BackCommand = ReactiveCommand.Create(() => GoBack()); CancelCommand = ReactiveCommand.Create(() => ClearNavigation()); }
public HomeViewModel(NavigationStateViewModel navigationState, WalletManagerViewModel walletManager) : base(navigationState, "Home", "Home") { _items = new ObservableCollection <RoutableViewModel> { new WalletExplorerViewModel(navigationState, walletManager), walletManager, new TransactionBroadcasterViewModel(navigationState), new SettingsViewModel(navigationState), new HelpViewModel(navigationState) }; }
public HomePageViewModel(NavigationStateViewModel navigationState, WalletManagerViewModel walletManager, AddWalletPageViewModel addWalletPage) : base(navigationState, NavigationTarget.HomeScreen) { Title = "Home"; var list = new SourceList <NavBarItemViewModel>(); list.Add(addWalletPage); walletManager.Items.ToObservableChangeSet() .Cast(x => x as NavBarItemViewModel) .Sort(SortExpressionComparer <NavBarItemViewModel> .Ascending(i => i.Title)) .Merge(list.Connect()) .ObserveOn(RxApp.MainThreadScheduler) .Bind(out _items) .AsObservableList(); OpenWalletsFolderCommand = ReactiveCommand.Create(() => IoHelpers.OpenFolderInFileExplorer(walletManager.Model.WalletDirectories.WalletsDir)); }
public AddWalletPageViewModel(NavigationStateViewModel navigationState, WalletManager walletManager, BitcoinStore store, Network network) : base(navigationState, NavigationTarget.DialogScreen) { Title = "Add Wallet"; this.WhenAnyValue(x => x.WalletName) .Select(x => !string.IsNullOrWhiteSpace(x)) .Subscribe(x => OptionsEnabled = x && !Validations.Any); RecoverWalletCommand = ReactiveCommand.CreateFromTask(async() => { NavigateTo(new RecoverWalletViewModel(navigationState, WalletName, network, walletManager), NavigationTarget.DialogScreen); }); CreateWalletCommand = ReactiveCommand.CreateFromTask( async() => { var enterPassword = new EnterPasswordViewModel( navigationState, NavigationTarget.DialogScreen, "Type the password of the wallet and click Continue."); NavigateTo(enterPassword, NavigationTarget.DialogScreen); var result = await enterPassword.GetDialogResultAsync(); if (result is { } password) { var(km, mnemonic) = await Task.Run( () => { var walletGenerator = new WalletGenerator( walletManager.WalletDirectories.WalletsDir, network) { TipHeight = store.SmartHeaderChain.TipHeight }; return(walletGenerator.GenerateWallet(WalletName, password)); }); NavigateTo(new RecoveryWordsViewModel(navigationState, km, mnemonic, walletManager), NavigationTarget.DialogScreen, true); }
public MainViewModel() { var navigationState = new NavigationStateViewModel(); _dialog = new DialogViewModel(); _walletManager = new WalletManagerViewModel(navigationState, "Add Wallet"); var helpViewModel = new HelpViewModel(navigationState); var walletExplorerViewModel = new WalletExplorerViewModel(navigationState, _walletManager); var settingsViewModel = new SettingsViewModel(navigationState); HomeCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.NavigateAndReset.Execute(walletExplorerViewModel)); #if !USE_DIALOG HelpCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(helpViewModel)); #else HelpCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(helpViewModel)); #endif #if !USE_DIALOG AddWalletCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(walletManager)); #else AddWalletCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(_walletManager)); #endif #if !USE_DIALOG SettingsCommand = ReactiveCommand.Create(() => navigationState.Screen().Router.Navigate.Execute(settingsViewModel)); #else SettingsCommand = ReactiveCommand.Create(() => navigationState.Dialog().Router.Navigate.Execute(settingsViewModel)); #endif _walletManager.Home = walletExplorerViewModel; navigationState.Screen = () => this; navigationState.Dialog = () => _dialog; navigationState.NextView = () => walletExplorerViewModel; navigationState.CancelView = () => walletExplorerViewModel; Router.NavigateAndReset.Execute(walletExplorerViewModel); // Router.NavigateAndReset.Execute(new HomeViewModel(this)); }
public SettingsPageViewModel(NavigationStateViewModel navigationState) : base(navigationState, NavigationTarget.HomeScreen) { Title = "Settings"; BackCommand = ReactiveCommand.Create(() => ClearNavigation()); NextCommand = ReactiveCommand.Create(() => NavigateTo(new SettingsPageViewModel(navigationState), NavigationTarget.HomeScreen)); OpenDialogCommand = ReactiveCommand.CreateFromTask(async() => await ConfirmSetting.Handle("Please confirm the setting:").ToTask()); OpenDialogScreenCommand = ReactiveCommand.Create(() => NavigateTo(new SettingsPageViewModel(navigationState), NavigationTarget.DialogScreen)); ConfirmSetting = new Interaction <string, bool>(); ConfirmSetting.RegisterHandler( async interaction => { var x = new TestDialogViewModel(navigationState, NavigationTarget.DialogHost, interaction.Input); var result = await x.ShowDialogAsync(navigationState.DialogHost()); interaction.SetOutput(result); }); ChangeThemeCommand = ReactiveCommand.Create(() => { var currentTheme = Application.Current.Styles.Select(x => (StyleInclude)x).FirstOrDefault(x => x.Source is { } && x.Source.AbsolutePath.Contains("Themes")); if (currentTheme?.Source is { } src) { var themeIndex = Application.Current.Styles.IndexOf(currentTheme); var newTheme = new StyleInclude(new Uri("avares://WalletWasabi.Fluent/App.xaml")) { Source = new Uri($"avares://WalletWasabi.Fluent/Styles/Themes/{(src.AbsolutePath.Contains("Light") ? "BaseDark" : "BaseLight")}.xaml") }; Application.Current.Styles[themeIndex] = newTheme; } });
public RoutableViewModel(NavigationStateViewModel navigationState, string urlPathSegment, string title) { _navigationState = navigationState; UrlPathSegment = urlPathSegment; _title = title; }
internal ClosedHardwareWalletViewModel(NavigationStateViewModel navigationState, WalletManager walletManager, Wallet wallet) : base(navigationState, walletManager, wallet) { }