public TabFwToolsViewModel(IDialogCoordinator _coordinator, DialogFwToolsConvertView convertView, DialogFwToolsCombineView combineView, DialogFwToolsValidateView validateView, DialogFwToolsGetPasswordView getpwView, IThemeProvider _themeProvider, HexViewModel hex_vm, Dictionary <string, string> _args) { this.dialogSettings = new MetroDialogSettings() { AnimateShow = false, AnimateHide = false }; this.coordinator = _coordinator; this.dialogConvert = convertView; this.dialogCombine = combineView; this.dialogValidate = validateView; this.dialogGetPassword = getpwView; this.dialogConvert.DataContext = this; this.dialogCombine.DataContext = this; this.dialogValidate.DataContext = this; this.dialogGetPassword.DataContext = this; this.args = _args; this.themeProvider = _themeProvider; this.themeProvider.ThemeChanged += OnThemeChanged; this.hexViewModel = hex_vm; }
public ShellViewModel() { AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(ErrHandler); #region Model this.model = new ShellModel(this); this.model.SelfCopyToAppLocal(); #endregion #region Args var args = this.model.HandleArgs(this.model.ParseArgs()); bool reset = false; if (args.ContainsKey($"{ShellModel.ARG_KEY_RESET}")) { reset = true; } #endregion #region Views var upload_v = new TabUploadView(); var download_v = new TabDownloadView(); var erase_v = new TabEraseView(); var fwtools_v = new TabFwToolsView(); var bsl430_v = new TabBSL430NETView(); var convert_v = new DialogFwToolsConvertView(); var combine_v = new DialogFwToolsCombineView(); var validate_v = new DialogFwToolsValidateView(); var getpw_v = new DialogFwToolsGetPasswordView(); this.convert_v_res = convert_v; this.combine_v_res = combine_v; this.validate_v_res = validate_v; this.getpw_v_res = getpw_v; #endregion #region ViewModels var log_vm = new LogViewModel(this); var hex_vm = new HexViewModel(); var processctl_vm = new ControlProcessViewModel(log_vm, this); AppReadyEvent += processctl_vm.AppReadyHandler; var upload_vm = new TabUploadViewModel(processctl_vm, args); var download_vm = new TabDownloadViewModel(processctl_vm); var erase_vm = new TabEraseViewModel(processctl_vm); var ftwtools_vm = new TabFwToolsViewModel(DialogCoordinator.Instance, convert_v, combine_v, validate_v, getpw_v, this, hex_vm, args); this.Ifwtools_vm = ftwtools_vm; var bsl430_vm = new TabBSL430NETViewModel(); #endregion #region TabItems Style s = (Style)Application.Current.Resources["CustomMetroTabItem"]; var tabs = new List <MetroTabItem>() { new MetroTabItem() { Content = upload_v, Header = "Upload", Tag = "Install", Style = s, DataContext = upload_vm }, new MetroTabItem() { Content = download_v, Header = "Download", Tag = "Upload", Style = s, DataContext = download_vm }, new MetroTabItem() { Content = erase_v, Header = "Erase", Tag = "Uninstall", Style = s, DataContext = erase_vm }, new MetroTabItem() { Content = fwtools_v, Header = "FW Tools", Tag = "Labflask", Style = s, DataContext = ftwtools_vm }, new MetroTabItem() { Content = bsl430_v, Header = "BSL430.NET", Tag = "Help", Style = s, DataContext = bsl430_vm } }; #endregion #region Theme bool darkMode = BslSettings.Instance.GeneralDarkMode; bool wasFirstRun = false; if (this.FirstRun) { darkMode = this.model.IsWinDarkMode(); BslSettings.Instance.GeneralDarkMode = darkMode; this.FirstRun = false; wasFirstRun = true; } this.SetTheme(darkMode); #endregion #region Shell Integration if (reset || BslSettings.Instance.GeneralShellAssocInstallForce) { BslSettings.Instance.GeneralShellAssocInstallForce = false; this.model.ShellAssocInstall(BslSettings.Instance.GeneralShellAssociation, this.model.AppDataShellPath); } if (reset || BslSettings.Instance.GeneralShellExtInstallForce) { BslSettings.Instance.GeneralShellExtInstallForce = false; this.model.ShellExtInstall(BslSettings.Instance.GeneralShellExtension, this.model.AppDataShellPath); } #endregion #region MainViewModel Activate var main_vm = new MainViewModel(this, tabs, processctl_vm, download_vm, darkMode); Imain_vm = main_vm; this.ActivateItem(main_vm); #endregion ShowWindow(); AppReadyEvent?.Invoke(); if (wasFirstRun) { Task.Delay(1000).ContinueWith(t => this.model.AskForShellIntegration()); } }