/// <summary>
        /// Attempts to retrieve a language option from the <seealso cref="Settingsmodel"/> and
        /// falls back to alternive default options if retrieval of option value fails.
        /// </summary>
        /// <param name="service"></param>
        /// <param name="OptGroup"></param>
        /// <param name="languageOptionName">The name of the option in the SettingsModel eg.: "SourceLanguage"</param>
        /// <param name="defaultLanguageOptionName">The name of the default option in the SettingsModel eg.: "DefaultSourceLanguage"</param>
        /// <param name="defaultLanguageListIndex">Index of default language in list of languages if everything else fails.</param>
        /// <returns></returns>
        private ILanguageCode GetLanguageOptionFromModel(ITranslator service,
                                                         IOptionGroup OptGroup,
                                                         string languageOptionName,
                                                         string defaultLanguageOptionName,
                                                         int defaultLanguageListIndex)
        {
            ILanguageCode ret = null;

            ret = service.LanguageList.SingleOrDefault(
                item => item.Bcp47_LangCode == OptGroup.GetValue <string>(languageOptionName));

            // Select defaults if there was no data to be had
            if (ret == null)
            {
                ret = service.LanguageList.SingleOrDefault(
                    item => item.Bcp47_LangCode == OptGroup.GetValue <string>(defaultLanguageOptionName));
            }

            // Attach to first entry in language list if default source language is not set
            if (ret == null)
            {
                ret = service.LanguageList[defaultLanguageListIndex];
            }

            return(ret);
        }
        /// <summary>
        /// Reset the view model to those options that are going to be presented for editing.
        /// </summary>
        /// <param name="settingData"></param>
        private void LoadOptionsFromModel(IOptionGroup optGroup)
        {
            SecureString securePassword = optGroup.GetValue <SecureString>("MSTranslate.TranslationServicePassword");
            SecureString secureUser     = optGroup.GetValue <SecureString>("MSTranslate.TranslationServiceUser");

            mReloadFilesOnAppStart = optGroup.GetValue <bool>("ReloadOpenFilesFromLastSession");
            mMSTranslateService    = new TranslationService
                                     (
                optGroup.GetValue <string>("MSTranslate.TranslationServiceUri"),
                secureUser, securePassword
                                     );

            var settings = GetService <ISettingsManager>();

            // Initialize localization settings
            Languages = new List <LanguageCollection>(settings.GetSupportedLanguages());

            // Set default language to make sure app neutral is selected and available for sure
            // (this is a fallback if all else fails)
            try
            {
                var langOpt = optGroup.GetValue <string>("LanguageSelected");
                LanguageSelected = Languages.FirstOrDefault(lang => lang.BCP47 == langOpt);

                if (LanguageSelected == null)
                {
                    LanguageSelected = Languages[0];
                }
            }
            catch
            {
            }

            var service = GetService <ITranslator>();

            DefaultSourceLanguageSelected =
                GetLanguageOptionFromModel(service, optGroup, "DefaultSourceLanguage", "DefaultSourceLanguage", 0);

            DefaultTargetLanguageSelected =
                GetLanguageOptionFromModel(service, optGroup, "DefaultTargetLanguage", "DefaultTargetLanguage", 1);

            // get copy of actual value and min, max value definitions from model into viewmodel
            IconSize    = optGroup.GetValue <int>("DefaultIconSize");
            IconSizeMax = settings.IconSizeMax;
            IconSizeMin = settings.IconSizeMin;

            ColorGridOption  = optGroup.GetValue <bool>("ColorGridOption");
            AlternatingColor = optGroup.GetValue <Color>("AlternatingGridColor");
        }