Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
 /// <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;
 }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 7
0
            /// <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));
            }
Exemplo n.º 8
0
        /// <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;
        }
Exemplo n.º 9
0
 /// <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;
     }
 }
Exemplo n.º 10
0
 /// <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);
     }
 }
Exemplo n.º 11
0
        /// <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);
        }