public static bool GetCAOInfo(out TSDictionary info, bool includeCountries = true, bool includeAddOns = true, bool openOnly = false) { info = new TSDictionary(); try { List <Country> caos = new List <Country>(); if (includeCountries) { caos.AddRange(CountryAdministrator.GetCountries()); } if (includeAddOns) { caos.AddRange(CountryAdministrator.GetAddOns()); } Dictionary <string, EM_UI_MainForm> openMainForms = new Dictionary <string, EM_UI_MainForm>(); foreach (EM_UI_MainForm mf in EM_AppContext.Instance.GetOpenCountriesMainForms()) { openMainForms.Add(mf.GetCountryShortName().ToLower(), mf); } List <Form> mainForms = new List <Form>(); List <string> shortNames = new List <string>(); List <string> longNames = new List <string>(); List <bool> isAddOn = new List <bool>(); List <bool> isOpen = new List <bool>(); List <string> mainXMLFileNames = new List <string>(); List <string> dataXMLFileNames = new List <string>(); List <string> filePaths = new List <string>(); foreach (Country cao in caos) { bool open = openMainForms.ContainsKey(cao._shortName.ToLower()); if (openOnly && !open) { continue; } mainForms.Add(open ? openMainForms[cao._shortName.ToLower()] : null); shortNames.Add(cao._shortName); // long name is only availabel through CountryConfig (it doesn't seem appropriate to open the country just to get the long-name) longNames.Add(open ? openMainForms[cao._shortName.ToLower()].GetCountryLongName() : cao._shortName); isAddOn.Add(cao._isAddOn); isOpen.Add(open); mainXMLFileNames.Add(CountryAdministrator.GetCountryFileName(cao._shortName)); dataXMLFileNames.Add(cao._isAddOn ? string.Empty : CountryAdministrator.GetDataFileName(cao._shortName)); filePaths.Add(CountryAdministrator.GetCountryPath(cao._shortName)); } info.SetItem(UISessionInfo.CAO_INFO_MainForms, mainForms); info.SetItem(UISessionInfo.CAO_INFO_ShortNames, shortNames); info.SetItem(UISessionInfo.CAO_INFO_LongNames, longNames); info.SetItem(UISessionInfo.CAO_INFO_IsAddOn, isAddOn); info.SetItem(UISessionInfo.CAO_INFO_IsOpen, isOpen); info.SetItem(UISessionInfo.CAO_INFO_MainXMLFileNames, mainXMLFileNames); info.SetItem(UISessionInfo.CAO_INFO_DataXMLFileNames, dataXMLFileNames); info.SetItem(UISessionInfo.CAO_INFO_FilePaths, filePaths); return(true); } catch { return(false); } }