private static void Run() { Log.Debug("Run: Start"); _current = new StartupScreen(); _current.Show(); _current.Closed += (sender, e) => _current.Dispatcher.InvokeShutdown(); Log.Debug("Run: Set"); _created.Set(); System.Windows.Threading.Dispatcher.Run(); _current = null; _thread = null; }
// Move to another method to avoid loading Zetbox.Objects private void InitializeClient(string[] args, ZetboxConfig config) { InitializeSplashScreenImageResource(); StartupScreen.ShowSplashScreen(Zetbox.Client.Properties.Resources.Startup_Message, Zetbox.Client.Properties.Resources.Startup_InitApp, 6); if (config.Server != null && config.Server.StartServer) { StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Server); serverDomain = new ServerDomainManager(); serverDomain.Start(config); } else { StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_NoServerStart); } container = CreateMasterContainer(config); StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Launcher); // Make Gendarme happy var resources = this.Resources; resources.BeginInit(); resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Zetbox.Client.WPF;component/AppResources.xaml", UriKind.Relative) }); // Create icon converter var iconConverter = new IconConverter(container.Resolve <IFrozenContext>(), container.Resolve <Func <IZetboxContext> >()); resources["IconConverter"] = iconConverter; resources["ImageCtrlConverter"] = new ImageCtrlConverter(iconConverter); // Init all Converter that are not using a Context var templateSelectorFactory = container.Resolve <Zetbox.Client.WPF.Toolkit.VisualTypeTemplateSelector.Factory>(); resources["defaultTemplateSelector"] = templateSelectorFactory(null); resources["listItemTemplateSelector"] = templateSelectorFactory("Zetbox.App.GUI.SingleLineKind"); resources["dashBoardTemplateSelector"] = templateSelectorFactory("Zetbox.App.GUI.DashboardKind"); // Manually add DefaultStyles and DefaultViews // Otherwise converter are unknown resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Zetbox.Client.WPF;component/Styles/DefaultStyles.xaml", UriKind.Relative) }); resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Zetbox.Client.WPF;component/Styles/DefaultHighlightColorDefinitions.xaml", UriKind.Relative) }); // Load registrated dictionaries from autofac foreach (var dict in container.Resolve <IEnumerable <Meta <ResourceDictionary> > >().Where(m => WPFHelper.RESOURCE_DICTIONARY_STYLE.Equals(m.Metadata[WPFHelper.RESOURCE_DICTIONARY_KIND])).Select(m => m.Value)) { resources.MergedDictionaries.Add(dict); } resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Zetbox.Client.WPF;component/Styles/DefaultViews.xaml", UriKind.Relative) }); // Load registrated dictionaries from autofac foreach (var dict in container.Resolve <IEnumerable <Meta <ResourceDictionary> > >().Where(m => WPFHelper.RESOURCE_DICTIONARY_VIEW.Equals(m.Metadata[WPFHelper.RESOURCE_DICTIONARY_KIND])).Select(m => m.Value)) { resources.MergedDictionaries.Add(dict); } resources.EndInit(); // Init credentials explicit StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_EnsuringCredentials); container.Resolve <ICredentialsResolver>().EnsureCredentials(); StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Launcher); // Tell icon converter that everything is initialized iconConverter.Initialized(); // Focus nightmare // http://stackoverflow.com/questions/673536/wpf-cant-set-focus-to-a-child-of-usercontrol/4785124#4785124 EventManager.RegisterClassHandler(typeof(Window), Window.LoadedEvent, new RoutedEventHandler(FocusFixLoaded)); EventManager.RegisterClassHandler(typeof(Zetbox.Client.WPF.View.ZetboxBase.InstanceCollectionBase), UserControl.LoadedEvent, new RoutedEventHandler(FocusFixLoaded)); wpfResourcesInitialized = true; FixupDatabase(container.Resolve <Func <IZetboxContext> >()); IServiceControlManager scm = null; if (container.TryResolve <IServiceControlManager>(out scm)) { Logging.Log.Info("Starting Zetbox Services"); scm.Start(); } else { Logging.Log.Info("Service control manager not registered"); } StartupScreen.CanCloseOnWindowLoaded(); // delegate all business logic into another class, which // allows us to load the Zetbox.Objects assemblies _before_ // they are needed. var launcher = container.Resolve <Launcher>(); launcher.Show(args); }