/// <summary>
        /// If the plug-in settings can be changed by the user,
        /// SDL Trados Studio will display a Settings button.
        /// By clicking this button, users raise the plug-in user interface,
        /// in which they can modify any applicable settings, in our implementation
        /// the delimiter character and the list file name.
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="translationProvider"></param>
        /// <param name="languagePairs"></param>
        /// <param name="credentialStore"></param>
        /// <returns></returns>
        #region "Edit"
        public bool Edit(IWin32Window owner, ITranslationProvider translationProvider, LanguagePair[] languagePairs, ITranslationProviderCredentialStore credentialStore)
        {
            TermInjectorTranslationProvider editProvider = translationProvider as TermInjectorTranslationProvider;

            if (editProvider == null)
            {
                return(false);
            }

            string oldFileName      = editProvider.Options.GlossaryFileName;
            string oldRegexFileName = editProvider.Options.RegexFileName;
            string oldMatchCase     = editProvider.Options.MatchCase;
            string oldDelimiter     = editProvider.Options.Delimiter;
            string oldTMName        = editProvider.Options.TMFileName;

            TermInjectorTranslationProviderConfDialog dialog = new TermInjectorTranslationProviderConfDialog(editProvider.Options, editProvider, owner);

            if (dialog.ShowDialog(owner) == DialogResult.OK)
            {
                if (dialog.Options.TMFileName == "")
                {
                    MessageBox.Show("Translation memory field is empty. Previous translation memory will be used.");
                    return(false);
                }

                //If the TM has been changed, check that the new TM exists and has the correct languages
                if (oldTMName != dialog.Options.TMFileName)
                {
                    if (!File.Exists(dialog.Options.TMFileName))
                    {
                        MessageBox.Show("Specified translation memory does not exist", "TermInjector");
                        return(false);
                    }
                    var fileTM = new FileBasedTranslationMemory(dialog.Options.TMFileName);

                    if (!fileTM.SupportsLanguageDirection(languagePairs[0]))
                    {
                        MessageBox.Show("Selected translation memory does not support the selected language direction ("
                                        + languagePairs[0] + "). Previous translation memory will be used", "TermInjector");
                        return(false);
                    }
                    //The checks passed, so update the TM in the provider
                    editProvider.loadTM();
                }

                //If the glossary file, case matching setting, regex setting or delimiter setting is changed, the tries should be reloaded
                if (oldFileName != dialog.Options.GlossaryFileName ||
                    oldMatchCase != dialog.Options.MatchCase ||
                    oldRegexFileName != dialog.Options.RegexFileName ||
                    oldDelimiter != dialog.Options.Delimiter)
                {
                    try
                    {
                        editProvider.loadTries();
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                    editProvider.initializeVisitors();
                }

                //Everything is fine, so we can update the provider options
                editProvider.Options = dialog.Options;

                return(true);
            }

            return(false);
        }