/// <summary> /// Записать схему в файл /// </summary> public bool SaveSchemeToFile(out string errMsg) { try { if (string.IsNullOrEmpty(FileName)) { throw new Exception(SchemePhrases.FileNameUndefined); } using (FileStream fileStream = new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.Read)) { SchemeView.SaveToStream(fileStream); } Modified = false; errMsg = ""; return(true); } catch (Exception ex) { errMsg = SchemePhrases.SaveSchemeError + ": " + ex.Message; return(false); } }
/// <summary> /// Загрузить схему из файла /// </summary> public bool LoadSchemeFromFile(out string errMsg) { try { if (string.IsNullOrEmpty(FileName)) { // очистка схемы SchemeView.Clear(); } else { // загрузка схемы using (FileStream fileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { SchemeView.LoadFromStream(fileStream); } } Modified = false; errMsg = ""; return(true); } catch (Exception ex) { errMsg = SchemePhrases.LoadSchemeError + ": " + ex.Message; return(false); } }
/// <summary> /// Конструктор /// </summary> public ImageInfo(SchemeView.Image image, Func<string, bool> nameIsUniqueMethod) { Image = image; Source = null; Name = image.Name; DataSize = 0; ImageSize = new SchemeView.Size(0, 0); Format = ""; NameIsUniqueMethod = nameIsUniqueMethod; }
private volatile SchemeView.SchemeChange schemeChange; // изменение схемы /// <summary> /// Конструктор /// </summary> public EditorData() { schemeChange = null; ClientID = ""; FileName = ""; Modified = false; SchemeView = new SchemeView(); AddedElement = null; CursorPosition = Point.Empty; SelectElement = null; SetFormTitle = null; }
/// <summary> /// Выбрать элемент схемы /// </summary> public void SelectElement(string clientID, int elementID, int clickX, int clickY) { SchemeApp schemeApp = SchemeApp.GetSchemeApp(); EditorData editorData = schemeApp.EditorData; if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit && editorData.ClientID == clientID) { // выбор элемента или схемы в режиме редактирования SchemeView schemeView = editorData.SchemeView; SchemeView.Element addedElement = editorData.AddedElement; if (addedElement == null) { SchemeView.Element elem; if (elementID <= 0) { editorData.SelectElement(schemeView.SchemeParams); } else if (schemeView.ElementDict.TryGetValue(elementID, out elem)) { editorData.SelectElement(elem); } } else { // добавление элемента в заданную позицию в режиме редактирования addedElement.Location = new SchemeView.Point(clickX, clickY); schemeView.ElementList.Add(addedElement); schemeView.ElementDict[addedElement.ID] = addedElement; // создание объекта для передачи изменений SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementAdded); change.ElementData = new SchemeView.ElementData(addedElement); try { // установка изменения, которая может вызвать исключение editorData.SchemeChange = change; // выбор добавленного элемента editorData.SelectElement(addedElement); editorData.AddedElement = null; } catch (Exception ex) { WriteException(ex.Message); } } } }
/// <summary> /// Конструктор /// </summary> public SchemeData(SchemeView schemeView) : this() { CnlList = schemeView.CnlList; SchemeParams = schemeView.SchemeParams; ImageDict = schemeView.ImageDict; foreach (Element elem in schemeView.ElementList) ElementDataList.Add(new ElementData(elem)); }
/// <summary> /// Загрузить схему /// </summary> public bool LoadScheme(string clientID, int viewSetIndex, int viewIndex, out SchemeView.SchemeData schemeData) { bool result = false; schemeData = null; SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit) { // загрузка схемы для SCADA-Редактора схем EditorData editorData = schemeApp.EditorData; SchemeView schemeView = null; if (editorData.ClientID == clientID) schemeView = editorData.SchemeView; else editorData.ClientID = clientID; if (schemeView == null) { string errMsg; if (editorData.LoadSchemeFromFile(out errMsg)) schemeView = editorData.SchemeView; else schemeApp.Log.WriteAction(errMsg, Log.ActTypes.Exception); } if (schemeView != null) { schemeData = new SchemeView.SchemeData(schemeView); schemeData.CnlList = null; result = true; } } else { // загрузка схемы для SCADA-Web UserData userData = UserData.GetUserData(); HttpContext context = HttpContext.Current; if (userData.LoggedOn) { BaseView baseView; MainData.Right right; bool ok = userData.GetView(typeof(SchemeView), viewSetIndex, viewIndex, out baseView, out right); SchemeView schemeView = baseView as SchemeView; if (ok && schemeView != null && right.ViewRight) { schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Загружена схема {0} пользователем {1}" : "Scheme {0} has been loaded by user {1}", schemeView.ItfObjName, userData.UserLogin), Log.ActTypes.Action); // сохранение списка входных каналов схемы в сессии HttpSessionState session = context == null ? null : context.Session; if (session != null && clientID != null) { Dictionary<string, object> schemeClients = session["ScadaSchemeClients"] as Dictionary<string, object>; if (schemeClients == null) { schemeClients = new Dictionary<string, object>(); session.Add("ScadaSchemeClients", schemeClients); } schemeClients[clientID] = schemeView.CnlList; } // получение данных схемы schemeData = new SchemeView.SchemeData(schemeView); schemeData.CtrlRight = right.CtrlRight; result = true; } else { string itfObjName = schemeView == null || string.IsNullOrEmpty(schemeView.ItfObjName) ? "" : " " + schemeView.ItfObjName; schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Не удалось загрузить схему{0} пользователем {1}" : "Unable to load scheme{0} by user {1}", itfObjName, userData.UserLogin), Log.ActTypes.Error); } } else { HttpRequest request = context == null ? null : context.Request; string host = request == null ? "" : (Localization.UseRussian ? ". Хост: " : ". Host: ") + request.UserHostAddress; schemeApp.Log.WriteAction((Localization.UseRussian ? "Невозможно загрузить схему, т.к. пользователь не вошёл в систему" : "Unable to load scheme because user is not logged on") + host, Log.ActTypes.Error); } } return result; }
/// <summary> /// Получить изменение схемы, которое необходимо отобразить, передав позицию указателя мыши /// </summary> public bool GetChange(string clientID, Point cursorPosition, out SchemeView.SchemeChange schemeChange) { SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit && schemeApp.EditorData.ClientID == clientID) { schemeApp.EditorData.CursorPosition = cursorPosition; schemeChange = schemeApp.EditorData.SchemeChange; return schemeChange != null && schemeChange.ChangeType != SchemeView.ChangeType.Unchanged; } else { schemeChange = null; return false; } }
/// <summary> /// Попытаться установить изменение схемы, выдав сообщение в случае ошибки /// </summary> public void TrySetSchemeChange(SchemeView.SchemeChange change) { try { SchemeChange = change; } catch (Exception ex) { SchemeApp.GetSchemeApp().Log.WriteAction(ex.Message, Log.ActTypes.Exception); ScadaUtils.ShowError(ex.Message); } }
/// <summary> /// Загрузить схему /// </summary> public bool LoadScheme(string clientID, int viewSetIndex, int viewIndex, out SchemeView.SchemeData schemeData) { bool result = false; schemeData = null; SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit) { // загрузка схемы для SCADA-Редактора схем EditorData editorData = schemeApp.EditorData; SchemeView schemeView = null; if (editorData.ClientID == clientID) { schemeView = editorData.SchemeView; } else { editorData.ClientID = clientID; } if (schemeView == null) { string errMsg; if (editorData.LoadSchemeFromFile(out errMsg)) { schemeView = editorData.SchemeView; } else { schemeApp.Log.WriteAction(errMsg, Log.ActTypes.Exception); } } if (schemeView != null) { schemeData = new SchemeView.SchemeData(schemeView); schemeData.CnlList = null; result = true; } } else { // загрузка схемы для SCADA-Web UserData userData = UserData.GetUserData(); HttpContext context = HttpContext.Current; if (userData.LoggedOn) { BaseView baseView; MainData.Right right; bool ok = userData.GetView(typeof(SchemeView), viewSetIndex, viewIndex, out baseView, out right); SchemeView schemeView = baseView as SchemeView; if (ok && schemeView != null && right.ViewRight) { schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Загружена схема {0} пользователем {1}" : "Scheme {0} has been loaded by user {1}", schemeView.Path, userData.UserLogin), Log.ActTypes.Action); // сохранение списка входных каналов схемы в сессии HttpSessionState session = context == null ? null : context.Session; if (session != null && clientID != null) { Dictionary <string, object> schemeClients = session["ScadaSchemeClients"] as Dictionary <string, object>; if (schemeClients == null) { schemeClients = new Dictionary <string, object>(); session.Add("ScadaSchemeClients", schemeClients); } schemeClients[clientID] = schemeView.CnlList; } // получение данных схемы schemeData = new SchemeView.SchemeData(schemeView); schemeData.CtrlRight = right.CtrlRight; result = true; } else { string itfObjName = schemeView == null || string.IsNullOrEmpty(schemeView.Path) ? "" : " " + schemeView.Path; schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Не удалось загрузить схему{0} пользователем {1}" : "Unable to load scheme{0} by user {1}", itfObjName, userData.UserLogin), Log.ActTypes.Error); } } else { HttpRequest request = context == null ? null : context.Request; string host = request == null ? "" : (Localization.UseRussian ? ". Хост: " : ". Host: ") + request.UserHostAddress; schemeApp.Log.WriteAction((Localization.UseRussian ? "Невозможно загрузить схему, т.к. пользователь не вошёл в систему" : "Unable to load scheme because user is not logged on") + host, Log.ActTypes.Error); } } return(result); }