static void Main(string[] args)
        {
            var diResolver = new DIResolver();

            var shortStayStrategy = diResolver.Get <IParkingChargeStrategy, ShortStayStrategy>();
            var longStayStrategy  = diResolver.Get <IParkingChargeStrategy, LongStayStrategy>();

            var calculator = diResolver.Get <IParkingCostCalculator>();

            calculator.SetStrategy(shortStayStrategy);

            Console.WriteLine(
                calculator.Calculate(DateTime.Parse("01/08/2020 00:00:00"), DateTime.Parse("02/08/2020 23:59:59"))
                );

            Console.WriteLine(
                calculator.Calculate(DateTime.Parse("07/09/2017 16:50:00"), DateTime.Parse("09/09/2017 19:15:00"))
                );

            calculator.SetStrategy(longStayStrategy); // swap strategy

            Console.WriteLine(
                calculator.Calculate(DateTime.Parse("07/09/2017 07:50:00"), DateTime.Parse("07/09/2017 08:20:00"))
                );

            Console.WriteLine(
                calculator.Calculate(DateTime.Parse("07/09/2017 07:50:00"), DateTime.Parse("09/09/2017 05:20:00"))
                );
        }
示例#2
0
        /// <summary>
        /// Resolves the view model.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns>ViewModelBase.</returns>
        public virtual IViewModel ResolveViewModel <T>() where T : Window
        {
            var name = FormatViewModelName <T>();
            var type = AssemblyManager.FindType(name);

            return((IViewModel)DIResolver.Get(type));
        }
示例#3
0
        /// <summary>
        /// Resolves the user control.
        /// </summary>
        /// <param name="obj">The object.</param>
        /// <returns>UserControl.</returns>
        public virtual UserControl ResolveUserControl(object obj)
        {
            var name = FormatUserControlName(obj);
            var type = AssemblyManager.FindType(name);

            return((UserControl)DIResolver.Get(type));
        }
示例#4
0
        /// <summary>
        /// Initializes the themes.
        /// </summary>
        private void InitThemes()
        {
            var currentTheme = DIResolver.Get <IThemeService>().GetSelected();
            var themeManager = DIResolver.Get <IThemeManager>();

            themeManager.ApplyTheme(currentTheme.Type);

            var themeListener = MessageBus.Current.Listen <ThemeChangedEventArgs>();

            themeListener.SubscribeObservable(x =>
            {
                OnThemeChanged().ConfigureAwait(true);
            });
            var idGenerator      = DIResolver.Get <IIDGenerator>();
            var languageListener = MessageBus.Current.Listen <LocaleChangedEventArgs>();

            languageListener.SubscribeObservable(x =>
            {
                var window = (MainWindow)Helpers.GetMainWindow();
                var id     = idGenerator.GetNextId();
                window.ViewModel.TriggerManualOverlay(id, true, string.Empty);
                SetFontFamily(window, x.Locale);
                window.ViewModel.TriggerManualOverlay(id, false, string.Empty);
            });
        }
示例#5
0
        /// <summary>
        /// Initializes the fatal error message.
        /// </summary>
        /// <param name="desktop">The desktop.</param>
        private void InitFatalErrorMessage(IClassicDesktopStyleApplicationLifetime desktop)
        {
            async Task close()
            {
                await Task.Delay(10000);

                var appAction = DIResolver.Get <IAppAction>();
                await Dispatcher.UIThread.SafeInvokeAsync(async() =>
                {
                    await appAction.ExitAppAsync();
                });
            }

            var locManager = DIResolver.Get <ILocalizationManager>();
            var title      = locManager.GetResource(LocalizationResources.FatalError.Title);
            var message    = locManager.GetResource(LocalizationResources.FatalError.Message);
            var header     = locManager.GetResource(LocalizationResources.FatalError.Header);
            var messageBox = MessageBoxes.GetFatalErrorWindow(title, header, message);

            SetFontFamily(messageBox);
            desktop.MainWindow = messageBox;

            var stateService = DIResolver.Get <IWindowStateService>();

            if (!stateService.IsDefined() || stateService.IsMaximized())
            {
                desktop.MainWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            }
            close().ConfigureAwait(false);
        }
示例#6
0
        /// <summary>
        /// Gets the file information.
        /// </summary>
        /// <param name="rootPath">The root path.</param>
        /// <param name="file">The file.</param>
        /// <returns>IFileInfo.</returns>
        public virtual IFileInfo GetFileInfo(string rootPath, string file)
        {
            var fileInfo = GetStreamInternal(rootPath, file);

            using var stream = fileInfo.Item1;
            if (stream != null)
            {
                var info = DIResolver.Get <IFileInfo>();
                info.FileName   = file;
                info.IsReadOnly = fileInfo.Item2;
                info.Size       = stream.Length;
                if (Constants.TextExtensions.Any(s => file.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
                {
                    using var streamReader = new StreamReader(stream, true);
                    var text = streamReader.ReadToEnd();
                    streamReader.Close();
                    info.IsBinary   = false;
                    info.Content    = text.SplitOnNewLine(false);
                    info.ContentSHA = text.CalculateSHA();
                }
                else
                {
                    info.IsBinary   = true;
                    info.ContentSHA = stream.CalculateSHA();
                }
                return(info);
            }
            return(null);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="MergeViewerControlView" /> class.
 /// </summary>
 public MergeViewerControlView()
 {
     logger = DIResolver.Get <ILogger>();
     hotkeyPressedHandler = DIResolver.Get <ConflictSolverViewHotkeyPressedHandler>();
     resourceLoader       = DIResolver.Get <IResourceLoader>();
     InitializeComponent();
 }
示例#8
0
        /// <summary>
        /// Runs the generic double property test.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="prop">The property.</param>
        /// <param name="value">The value.</param>
        /// <param name="prop2">The prop2.</param>
        /// <param name="value2">The value2.</param>
        /// <param name="checkChanged">The check changed.</param>
        private void RunGenericDoublePropTest <T>(string prop, object value, string prop2, object value2, bool checkChanged) where T : class, IModel
        {
            DISetup.SetupContainer();
            var events = new List <string>();
            var model  = DIResolver.Get <T>();

            if (checkChanged)
            {
                model.PropertyChanged += (s, e) =>
                {
                    events.Add(e.PropertyName);
                };
            }
            else
            {
                model.PropertyChanging += (s, e) =>
                {
                    events.Add(e.PropertyName);
                };
            }
            model.GetType().GetProperty(prop).SetValue(model, value);
            model.GetType().GetProperty(prop2).SetValue(model, value2);
            events.Count.Should().Be(2);
            events.First().Should().Be(prop);
            events.Last().Should().Be(prop2);
        }
示例#9
0
        /// <summary>
        /// Logs the error.
        /// </summary>
        /// <param name="e">The e.</param>
        private static void LogError(Exception e)
        {
            if (e != null)
            {
                var logger = DIResolver.Get <ILogger>();
                logger.Error(e);

                var title   = Constants.UnhandledErrorTitle;
                var message = Constants.UnhandledErrorMessage;
                var header  = Constants.UnhandledErrorHeader;
                try
                {
                    var locManager = DIResolver.Get <ILocalizationManager>();
                    title   = locManager.GetResource(LocalizationResources.FatalError.Title);
                    message = locManager.GetResource(LocalizationResources.FatalError.Message);
                    header  = locManager.GetResource(LocalizationResources.FatalError.Header);
                }
                catch
                {
                }
                var messageBox = MessageBoxes.GetFatalErrorWindow(title, header, message);
                // We're deadlocking the thread, so kill the task after x amount of seconds.
                messageBox.ShowAsync().Wait(TimeSpan.FromSeconds(10));
                Dispatcher.UIThread.InvokeAsync(() => Environment.Exit(0));
            }
        }
示例#10
0
 /// <summary>
 /// Converts the specified values.
 /// </summary>
 /// <param name="values">The values.</param>
 /// <param name="targetType">Type of the target.</param>
 /// <param name="parameter">The parameter.</param>
 /// <param name="culture">The culture.</param>
 /// <returns>System.Object.</returns>
 public object Convert(IList <object> values, Type targetType, object parameter, CultureInfo culture)
 {
     if (values != null && values.Count == 2)
     {
         if (values[0] is IEnumerable <IDefinition> col && values[1] is IDefinition definition)
         {
             var service = DIResolver.Get <IModPatchCollectionService>();
             if (service.IsPatchMod(definition.ModName))
             {
                 return("PatchMod");
             }
             var clean = new List <IDefinition>();
             foreach (var item in col)
             {
                 if (!service.IsPatchMod(item.ModName))
                 {
                     clean.Add(item);
                 }
             }
             var priority = service.EvalDefinitionPriority(clean);
             if (priority?.Definition == definition)
             {
                 return("CopiedDefinition");
             }
         }
     }
     return(string.Empty);
 }
 /// <summary>
 /// Initializes the localization manager.
 /// </summary>
 private static void InitLocalizationManager()
 {
     if (localizationManager == null)
     {
         localizationManager = DIResolver.Get <ILocalizationManager>();
     }
 }
示例#12
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader" /> to read from.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var instance = DIResolver.Get(objectType);

            serializer.Populate(reader, instance);
            return(instance);
        }
        /// <summary>
        /// cleanup updater as an asynchronous operation.
        /// </summary>
        private async Task CleanupUpdaterAsync()
        {
            foreach (var path in StaticResources.GetUpdaterPath())
            {
                if (Directory.Exists(path))
                {
                    bool cleanup          = true;
                    var  settingsFileName = Path.Combine(path, Constants.UpdateSettings);
                    if (File.Exists(settingsFileName))
                    {
                        var fileInfo = new FileInfo(settingsFileName);
                        var text     = await File.ReadAllTextAsync(settingsFileName);

                        var settings = JsonConvert.DeserializeObject <UpdateSettings>(text);
                        // At least 72 since last update to cleanup
                        cleanup = (settings.Updated || settings.IsInstaller) && fileInfo.LastWriteTime <= DateTime.Now.AddHours(-72);
                    }
                    if (cleanup)
                    {
                        await Task.Delay(5000);

                        try
                        {
                            Directory.Delete(path, true);
                        }
                        catch (Exception ex)
                        {
                            var logger = DIResolver.Get <ILogger>();
                            logger.Error(ex);
                        }
                    }
                }
            }
        }
示例#14
0
        /// <summary>
        /// Copies the definition.
        /// </summary>
        /// <param name="definition">The definition.</param>
        /// <returns>IDefinition.</returns>
        protected virtual IDefinition CopyDefinition(IDefinition definition)
        {
            var newDefinition = DIResolver.Get <IDefinition>();

            newDefinition.Code                 = definition.Code;
            newDefinition.ContentSHA           = definition.ContentSHA;
            newDefinition.DefinitionSHA        = definition.DefinitionSHA;
            newDefinition.Dependencies         = definition.Dependencies;
            newDefinition.ErrorColumn          = definition.ErrorColumn;
            newDefinition.ErrorLine            = definition.ErrorLine;
            newDefinition.ErrorMessage         = definition.ErrorMessage;
            newDefinition.File                 = definition.File;
            newDefinition.GeneratedFileNames   = definition.GeneratedFileNames;
            newDefinition.OverwrittenFileNames = definition.OverwrittenFileNames;
            newDefinition.AdditionalFileNames  = definition.AdditionalFileNames;
            newDefinition.Id            = definition.Id;
            newDefinition.ModName       = definition.ModName;
            newDefinition.Type          = definition.Type;
            newDefinition.UsedParser    = definition.UsedParser;
            newDefinition.ValueType     = definition.ValueType;
            newDefinition.Tags          = definition.Tags;
            newDefinition.OriginalCode  = definition.OriginalCode;
            newDefinition.CodeSeparator = definition.CodeSeparator;
            newDefinition.CodeTag       = definition.CodeTag;
            newDefinition.Order         = definition.Order;
            return(newDefinition);
        }
        /// <summary>
        /// import as an asynchronous operation.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public async Task <ICollectionImportResult> ImportAsync(ModCollectionExporterParams parameters)
        {
            var path = Path.Combine(Path.GetDirectoryName(parameters.ModDirectory), Constants.DLC_load_path);

            if (File.Exists(path))
            {
                var result  = DIResolver.Get <ICollectionImportResult>();
                var content = await File.ReadAllTextAsync(path);

                if (!string.IsNullOrWhiteSpace(content))
                {
                    try
                    {
                        var model = JsonConvert.DeserializeObject <DLCLoad>(content);
                        if (model.EnabledMods?.Count > 0)
                        {
                            result.Name        = CollectionName;
                            result.Descriptors = model.EnabledMods;
                            return(result);
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex);
                    }
                }
            }
            return(null);
        }
        /// <summary>
        /// Reads the specified path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="allowedPaths">The allowed paths.</param>
        /// <returns>IReadOnlyCollection&lt;IFileInfo&gt;.</returns>
        public virtual IReadOnlyCollection <IFileInfo> Read(string path, IEnumerable <string> allowedPaths = null)
        {
            var files = Directory.GetFiles(path, SearchPattern, SearchOption);

            if (files?.Length > 0)
            {
                var result = new List <IFileInfo>();
                foreach (var file in files)
                {
                    var relativePath = file.Replace(path, string.Empty).Trim(Path.DirectorySeparatorChar);
                    var info         = DIResolver.Get <IFileInfo>();
                    var fileInfo     = new System.IO.FileInfo(file);
                    info.IsReadOnly = fileInfo.IsReadOnly;
                    info.Size       = fileInfo.Length;
                    var content = File.ReadAllText(file);
                    info.FileName   = relativePath;
                    info.IsBinary   = false;
                    info.Content    = content.SplitOnNewLine(false);
                    info.ContentSHA = content.CalculateSHA();
                    result.Add(info);
                }
                return(result);
            }
            return(null);
        }
示例#17
0
        /// <summary>
        /// Database importv3 as an asynchronous operation.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <returns>A Task&lt;ICollectionImportResult&gt; representing the asynchronous operation.</returns>
        protected virtual async Task <ICollectionImportResult> DatabaseImportv3Async(ModCollectionExporterParams parameters)
        {
            try
            {
                using var con = GetConnection(parameters);
                var activeCollection = (await con.QueryAsync <Models.Paradox.v4.Playsets>(p => p.IsActive == true, trace: trace)).FirstOrDefault();
                if (activeCollection != null)
                {
                    var collectionMods = await con.QueryAsync <Models.Paradox.v4.PlaysetsMods>(p => p.PlaysetId == activeCollection.Id.ToString(), trace : trace);

                    if (collectionMods?.Count() > 0)
                    {
                        var mods = await con.QueryAllAsync <Models.Paradox.v4.Mods>(trace : trace);

                        var ordered   = collectionMods.Where(p => p.Enabled).OrderBy(p => p.Position).ToList();
                        var validMods = mods.Where(p => ordered.Any(m => m.ModId.Equals(p.Id))).OrderBy(p => ordered.FindIndex(o => o.ModId == p.Id));
                        if (validMods.Any())
                        {
                            var result = DIResolver.Get <ICollectionImportResult>();
                            result.Name        = activeCollection.Name;
                            result.Descriptors = validMods.Select(p => p.GameRegistryId).ToList();
                            result.ModNames    = validMods.Select(p => p.DisplayName).ToList();
                            return(result);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            return(null);
        }
示例#18
0
        /// <summary>
        /// Handles the closing.
        /// </summary>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        protected override bool HandleClosing()
        {
            var service = DIResolver.Get <IWindowStateService>();
            var state   = service.Get();

            if (WindowState == WindowState.Maximized)
            {
                state.IsMaximized = true;
            }
            else
            {
                var totalScreenX = Screens.All.Sum(p => p.WorkingArea.Width);
                var totalScreenY = Screens.All.Max(p => p.WorkingArea.Height);
                var locX         = Position.X + ClientSize.Width > totalScreenX ? totalScreenX - ClientSize.Width : Position.X;
                var locY         = Position.Y + ClientSize.Height > totalScreenY ? totalScreenY - ClientSize.Height : Position.Y;
                if (locX < 0.0)
                {
                    locX = 0;
                }
                if (locY < 0.0)
                {
                    locY = 0;
                }
                state.Height      = Convert.ToInt32(ClientSize.Height);
                state.Width       = Convert.ToInt32(ClientSize.Width);
                state.IsMaximized = false;
                state.LocationX   = Convert.ToInt32(locX);
                state.LocationY   = Convert.ToInt32(locY);
            }
            service.Save(state);
            return(base.HandleClosing());
        }
示例#19
0
 /// <summary>
 /// Registers the game.
 /// </summary>
 /// <param name="gameType">Type of the game.</param>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 /// <exception cref="InvalidOperationException"></exception>
 public virtual bool RegisterGame(IGameType gameType)
 {
     lock (dbLock)
     {
         if (gameType == null || Database.Games.Any(s => s.Name.Equals(gameType.Name, StringComparison.OrdinalIgnoreCase)))
         {
             throw new InvalidOperationException($"{gameType?.Name} game is already registered or invalid registration.");
         }
         var game = DIResolver.Get <IGameType>();
         game.Name                      = gameType.Name;
         game.UserDirectory             = gameType.UserDirectory ?? string.Empty;
         game.SteamAppId                = gameType.SteamAppId;
         game.WorkshopDirectory         = gameType.WorkshopDirectory ?? new List <string>();
         game.LogLocation               = gameType.LogLocation;
         game.ChecksumFolders           = gameType.ChecksumFolders ?? new List <string>();
         game.GameFolders               = gameType.GameFolders ?? new List <string>();
         game.BaseSteamGameDirectory    = gameType.BaseSteamGameDirectory ?? string.Empty;
         game.ExecutablePath            = gameType.ExecutablePath ?? string.Empty;
         game.ExecutableArgs            = gameType.ExecutableArgs ?? string.Empty;
         game.LauncherSettingsFileName  = gameType.LauncherSettingsFileName ?? string.Empty;
         game.LauncherSettingsPrefix    = gameType.LauncherSettingsPrefix ?? string.Empty;
         game.AdvancedFeaturesSupported = gameType.AdvancedFeaturesSupported;
         game.RemoteSteamUserDirectory  = gameType.RemoteSteamUserDirectory ?? new List <string>();
         game.Abrv                      = gameType.Abrv ?? string.Empty;
         Database.Games.Add(game);
         return(true);
     }
 }
示例#20
0
        /// <summary>
        /// Initializes the avalonia options.
        /// </summary>
        /// <param name="app">The application.</param>
        private static void InitAvaloniaOptions(AppBuilder app)
        {
            void configureLinux()
            {
                var configuration = DIResolver.Get <IPlatformConfiguration>().GetOptions().LinuxOptions;

                if (configuration.UseGPU.HasValue || configuration.UseEGL.HasValue || configuration.UseDBusMenu.HasValue || configuration.UseDeferredRendering.HasValue)
                {
                    var opts = new X11PlatformOptions();
                    if (configuration.UseGPU.HasValue)
                    {
                        opts.UseGpu = configuration.UseGPU.GetValueOrDefault();
                    }
                    if (configuration.UseEGL.HasValue)
                    {
                        opts.UseEGL = configuration.UseEGL.GetValueOrDefault();
                    }
                    if (configuration.UseDBusMenu.HasValue)
                    {
                        opts.UseDBusMenu = configuration.UseDBusMenu.GetValueOrDefault();
                    }
                    if (configuration.UseDeferredRendering.HasValue)
                    {
                        opts.UseDeferredRendering = configuration.UseDeferredRendering.GetValueOrDefault();
                    }
                    app.With(opts);
                }
            }

            configureLinux();
        }
示例#21
0
        /// <summary>
        /// Generates the patch mod descriptor.
        /// </summary>
        /// <param name="allMods">All mods.</param>
        /// <param name="game">The game.</param>
        /// <param name="patchName">Name of the patch.</param>
        /// <returns>IMod.</returns>
        protected virtual IMod GeneratePatchModDescriptor(IEnumerable <IMod> allMods, IGame game, string patchName)
        {
            var mod = DIResolver.Get <IMod>();

            mod.DescriptorFile = $"{Shared.Constants.ModDirectory}/{patchName}{Shared.Constants.ModExtension}";
            mod.FileName       = GetPatchModDirectory(game, patchName).Replace("\\", "/");
            mod.Name           = patchName;
            mod.Source         = ModSource.Local;
            var version = GameService.GetVersion(game);

            if (!string.IsNullOrWhiteSpace(version))
            {
                mod.Version = version;
            }
            else
            {
                mod.Version = allMods.OrderByDescending(p => p.VersionData).FirstOrDefault() != null?allMods.OrderByDescending(p => p.VersionData).FirstOrDefault().Version : string.Empty;
            }
            mod.Tags = new List <string>()
            {
                "Fixes"
            };
            mod.IsValid  = true;
            mod.FullPath = mod.FileName.StandardizeDirectorySeparator();
            return(mod);
        }
示例#22
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader" /> to read from.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.Read();
            var    typeName = reader.ReadAsString();
            object instance;

            if (typeName.StartsWith(nameof(IEnumerable)))
            {
                var splitType    = typeName.Split(Constants.EnumerableOpenTag, StringSplitOptions.RemoveEmptyEntries)[1].Replace(Constants.EnumerableCloseTag, string.Empty).Trim();
                var type         = AssemblyManager.FindType(splitType);
                var resolvedType = DIResolver.GetImplementationType(type);
                instance = Activator.CreateInstance(typeof(List <>).MakeGenericType(resolvedType));
            }
            else
            {
                var type = AssemblyManager.FindType(typeName);
                instance = DIResolver.Get(type);
            }

            reader.Read();
            var propName = reader.ReadAsString();

            reader.Read();
            reader.Read();
            serializer.Populate(reader, instance);

            reader.Read();

            return(new StoreItem()
            {
                Name = propName, Value = instance, Type = typeName
            });
        }
示例#23
0
        /// <summary>
        /// add virtual definition as an asynchronous operation.
        /// </summary>
        /// <param name="definitions">The definitions.</param>
        protected async Task AddVirtualDefinitionAsync(IEnumerable <IDefinition> definitions)
        {
            if (previousDefinitions != definitions)
            {
                if (!IsBinaryConflict)
                {
                    var col = definitions.OrderBy(p => SelectedModsOrder.IndexOf(p.ModName)).ToHashSet();
                    var priorityDefinition = modPatchCollectionService.EvalDefinitionPriority(col);
                    if (priorityDefinition == null || priorityDefinition.Definition == null)
                    {
                        if (priorityDefinition == null)
                        {
                            priorityDefinition = DIResolver.Get <IPriorityDefinitionResult>();
                            priorityDefinition.PriorityType = DefinitionPriorityType.None;
                        }
                        if (priorityDefinition.Definition == null)
                        {
                            priorityDefinition.Definition = col.First();
                        }
                    }
                    var newDefinition = await modPatchCollectionService.CreatePatchDefinitionAsync(priorityDefinition.Definition, CollectionName);

                    if (newDefinition != null)
                    {
                        col.Add(newDefinition);
                    }
                    VirtualDefinitions = col.ToObservableCollection();
                    if (VirtualDefinitions.Count() > 0)
                    {
                        // No reason to anymore not select a default definition on either side, wait a bit first to allow the UI to settle down
                        await Task.Delay(100);

                        LeftSelectedDefinition  = null;
                        RightSelectedDefinition = null;
                        await Task.Delay(50);

                        LeftSelectedDefinition  = VirtualDefinitions.FirstOrDefault(p => p != newDefinition && p != priorityDefinition.Definition);
                        RightSelectedDefinition = newDefinition;
                    }
                }
                else
                {
                    VirtualDefinitions = definitions.OrderBy(p => SelectedModsOrder.IndexOf(p.ModName)).ToHashSet();
                    if (VirtualDefinitions.Count() > 0)
                    {
                        // No reason to anymore not select a default definition on either side, wait a bit first to allow the UI to settle down
                        await Task.Delay(100);

                        LeftSelectedDefinition  = null;
                        RightSelectedDefinition = null;
                        await Task.Delay(50);

                        LeftSelectedDefinition  = definitions.ElementAt(0);
                        RightSelectedDefinition = definitions.ElementAt(1);
                    }
                }
            }
            previousDefinitions = definitions;
        }
示例#24
0
 /// <summary>
 /// Gets the state of the scroll.
 /// </summary>
 /// <returns>IScrollState.</returns>
 private IScrollState GetScrollState()
 {
     if (scrollState == null)
     {
         scrollState = DIResolver.Get <IScrollState>();
     }
     return(scrollState);
 }
示例#25
0
 /// <summary>
 /// Gets the platform configuration.
 /// </summary>
 /// <returns>IPlatformConfiguration.</returns>
 private IPlatformConfiguration GetPlatformConfiguration()
 {
     if (platformConfiguration == null)
     {
         platformConfiguration = DIResolver.Get <IPlatformConfiguration>();
     }
     return(platformConfiguration);
 }
示例#26
0
 /// <summary>
 /// Gets the font family manager.
 /// </summary>
 /// <returns>IFontFamilyManager.</returns>
 private IFontFamilyManager GetFontFamilyManager()
 {
     if (fontFamilyManager == null)
     {
         fontFamilyManager = DIResolver.Get <IFontFamilyManager>();
     }
     return(fontFamilyManager);
 }
示例#27
0
 /// <summary>
 /// Copies the text asynchronous.
 /// </summary>
 /// <param name="text">The text.</param>
 /// <returns>Task.</returns>
 protected virtual Task CopyTextAsync(string text)
 {
     if (appAction == null)
     {
         appAction = DIResolver.Get <IAppAction>();
     }
     return(appAction.CopyAsync(text));
 }
示例#28
0
 /// <summary>
 /// Tooltipses the enabled.
 /// </summary>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 internal static bool TooltipsEnabled()
 {
     if (!tooltipsEnabled.HasValue)
     {
         var config = DIResolver.Get <IPlatformConfiguration>();
         tooltipsEnabled = !config.GetOptions().Tooltips.Disable;
     }
     return(tooltipsEnabled.GetValueOrDefault());
 }
        /// <summary>
        /// Maps the pretty print hierarchy.
        /// </summary>
        /// <param name="definition">The definition.</param>
        private void MapHierarchicalDefinition(IDefinition definition)
        {
            bool shouldAdd              = false;
            var  parentDirectoryCI      = ResolveHierarchalParentDirectory(definition);
            var  hierarchicalDefinition = mainHierarchalDefinitions.GetFirstByNameNoLock(nameof(IHierarchicalDefinitions.Name), parentDirectoryCI);

            if (hierarchicalDefinition == null)
            {
                hierarchicalDefinition      = DIResolver.Get <IHierarchicalDefinitions>();
                hierarchicalDefinition.Name = parentDirectoryCI;
                childHierarchicalDefinitions.TryAdd(parentDirectoryCI, new ConcurrentIndexedList <IHierarchicalDefinitions>(nameof(IHierarchicalDefinitions.Name)));
                shouldAdd = true;
            }
            bool exists = false;
            IHierarchicalDefinitions child = null;

            if (childHierarchicalDefinitions.TryGetValue(hierarchicalDefinition.Name, out var children))
            {
                child  = children.GetFirstByNameNoLock(nameof(IHierarchicalDefinitions.Name), definition.Id);
                exists = child != null;
            }
            if (!exists)
            {
                child      = DIResolver.Get <IHierarchicalDefinitions>();
                child.Name = definition.Id;
                child.Key  = definition.TypeAndId;
                child.FileNames.Add(definition.FileCI);
                children.Add(child);
                if (shouldAdd)
                {
                    mainHierarchalDefinitions.Add(hierarchicalDefinition);
                }
            }
            else
            {
                if (!child.FileNames.Contains(definition.FileCI))
                {
                    child.FileNames.Add(definition.FileCI);
                }
            }
            if (child.Mods == null)
            {
                child.Mods = new List <string>();
            }
            if (!child.Mods.Contains(definition.ModName))
            {
                child.Mods.Add(definition.ModName);
            }
            if (hierarchicalDefinition.Mods == null)
            {
                hierarchicalDefinition.Mods = new List <string>();
            }
            if (!hierarchicalDefinition.Mods.Contains(definition.ModName))
            {
                hierarchicalDefinition.Mods.Add(definition.ModName);
            }
        }
示例#30
0
        /// <summary>
        /// Resolves the font.
        /// </summary>
        /// <returns>IFontFamily.</returns>
        private static IFontFamily ResolveFont()
        {
            var langService  = DIResolver.Get <ILanguagesService>();
            var language     = langService.GetSelected();
            var fontResolver = DIResolver.Get <IFontFamilyManager>();
            var font         = fontResolver.ResolveFontFamily(language.Font);

            return(font);
        }