/// <summary> /// Добавить компоненты в словари /// </summary> private bool AddComponents(ISchemeComp schemeComp, AttrTranslator attrTranslator) { CompLibSpec compLibSpec = schemeComp.CompLibSpec; string errMsg; if (compLibSpec != null) { if (compLibSpec.Validate(out errMsg) && compLibSpec.CompFactory != null) { allSpecs.Add(compLibSpec); factsByPrefix[compLibSpec.XmlPrefix] = compLibSpec.CompFactory; foreach (CompItem compItem in compLibSpec.CompItems) { if (compItem != null && compItem.CompType != null) { specsByType[compItem.CompType.FullName] = compLibSpec; if (attrTranslator != null) { attrTranslator.TranslateAttrs(compItem.CompType); } } } return(true); } else if (!string.IsNullOrEmpty(errMsg)) { LoadErrors.Add(errMsg); } } return(false); }
/// <summary> /// Загрузить компоненты из файлов /// </summary> public void LoadCompFromFiles() { try { lock (syncLock) { log.WriteAction(Localization.UseRussian ? "Загрузка компонентов из файлов" : "Load components from files"); ClearDicts(); AttrTranslator attrTranslator = new AttrTranslator(); DirectoryInfo dirInfo = new DirectoryInfo(appDirs.BinDir); FileInfo[] fileInfoArr = dirInfo.GetFiles(CompLibMask, SearchOption.TopDirectoryOnly); foreach (FileInfo fileInfo in fileInfoArr) { string fileName = fileInfo.FullName; PluginSpec pluginSpec = PluginSpec.CreateFromDll(fileName, out string errMsg); if (pluginSpec == null) { log.WriteError(errMsg); } else if (pluginSpec is ISchemeComp) { pluginSpec.AppDirs = appDirs; pluginSpec.Log = log; pluginSpec.Init(); if (AddComponents((ISchemeComp)pluginSpec, attrTranslator)) { log.WriteAction(string.Format(Localization.UseRussian ? "Загружены компоненты из файла {0}" : "Components are loaded from the file {0}", fileName)); } else { log.WriteAction(string.Format(Localization.UseRussian ? "Не удалось загрузить компоненты из файла {0}" : "Unable to load components from the file {0}", fileName)); } } else { log.WriteError(string.Format(Localization.UseRussian ? "Библиотека {0} не предоставляет компоненты схем" : "The assembly {0} does not provide scheme components", fileName)); } } } } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при загрузке компонентов из файлов" : "Error loading components from files"); } }
/// <summary> /// Loads language dictionaries. /// </summary> public override void LoadDictionaries() { if (!Locale.LoadDictionaries(AppDirs.LangDir, DriverUtils.DriverCode, out string errMsg)) { ScadaUiUtils.ShowError(errMsg); } DriverPhrases.Init(); AttrTranslator.Translate(typeof(DeviceOptions)); AttrTranslator.Translate(typeof(ItemConfig)); }
/// <summary> /// Инициализировать плагин /// </summary> public override void Init() { if (SchemeContext.GetInstance().EditorMode) { // загрузка словарей if (!Localization.LoadDictionaries(Path.Combine(AppDirs.PluginsDir, "SchBasicComp", "lang"), "PlgSchBasicComp", out string errMsg)) { Log.WriteError(errMsg); } // перевод атрибутов классов, которые используются при редактировании, но не являются компонентами схем AttrTranslator attrTranslator = new AttrTranslator(); attrTranslator.TranslateAttrs(typeof(ColorCondition)); attrTranslator.TranslateAttrs(typeof(PopupSize)); } }