private static List<string> GetWritingSystemIdsWithSpellCheckingInstalled()
		{
			List<string> writingSystemIdsWithSpellCheckingInstalled = new List<string>();
			try
			{
				using (Broker broker = new Broker())
				{
					foreach (WritingSystem ws in BasilProject.Project.WritingSystems.Values)
					{
						if (broker.DictionaryExists(ws.Id))
						{
							writingSystemIdsWithSpellCheckingInstalled.Add(ws.Id);
						}
					}
				}
			}
			catch (DllNotFoundException)
			{
				//If Enchant is not installed we expect an exception.
			}
			return writingSystemIdsWithSpellCheckingInstalled;
		}
		public TextBoxSpellChecker()
		{
			_extendees = new Dictionary<Control, string>();
			bool brokerSuccessfullyCreated = false;

			try
			{
				_broker = new Broker();
				brokerSuccessfullyCreated = true;
			}
			catch
			{
				//it's okay if we can't create one.
				// probably because Enchant isn't installed on this machine
			}

			if (brokerSuccessfullyCreated)
			{
				_hotSpotProvider = new HotSpotProvider();
				_hotSpotProvider.RetrieveHotSpots += CheckSpelling;
				_dictionaries = new Dictionary<string, Dictionary>();
			}
		}
        public List<SpellCheckInfo> GetSpellCheckComboBoxItems()
        {
            _spellCheckerItems.Clear();

            // add None option
            _spellCheckerItems.Add(new SpellCheckInfo(""));

            try
            {
                using (Broker broker = new Broker())
                {
                    // add installed dictionaries
                    _spellCheckerItems.AddRange(broker.Dictionaries.Select(dictionaryInfo => new SpellCheckInfo(dictionaryInfo)));

                    // add current dictionary, if not installed
                    if (!string.IsNullOrEmpty(CurrentSpellCheckingId))
                    {
                        if (!broker.DictionaryExists(CurrentSpellCheckingId))
                        {
                            _spellCheckerItems.Add(new SpellCheckInfo(CurrentSpellCheckingId));
                        }
                    }
                }
            }
            catch (DllNotFoundException)
            {
                //If Enchant is not installed we expect an exception.
            }
            catch (Exception e)//there are other errors we can get from the enchant binding
            {
                ErrorReport.NotifyUserOfProblem(new ShowOncePerSessionBasedOnExactMessagePolicy(),
                                                "The Enchant Spelling engine encountered an error: " + e.Message);
            }

            return _spellCheckerItems;
        }