Beispiel #1
0
        private void btnDel_Click(object sender, EventArgs e)
        {
            // удаление изображения из словаря изображений схемы
            ImageInfo imageInfo = lbImages.SelectedItem as ImageInfo;
            int       selInd    = lbImages.SelectedIndex;

            if (imageInfo != null)
            {
                imageDict.Remove(imageInfo.Name);
                lbImages.Items.RemoveAt(selInd);
                int itemCnt = lbImages.Items.Count;
                if (itemCnt > 0)
                {
                    lbImages.SelectedIndex = selInd < itemCnt ? selInd : itemCnt - 1;
                }

                // создание объекта для передачи изменений
                SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ImageDeleted);
                change.ImageOldName = imageInfo.Name;
                editorData.TrySetSchemeChange(change);
                editorData.SetFormTitle();
                StartWaitForChange();
            }

            propGrid.Select();
        }
Beispiel #2
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            // добавление изображения в словарь изображений схемы
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    SchemeView.Image image = new SchemeView.Image();
                    string           name  = Path.GetFileName(openFileDialog.FileName);
                    image.Name = imageDict.ContainsKey(name) ? "image" + (imageDict.Count + 1) : name;

                    using (FileStream fileStream = new FileStream(
                               openFileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        image.Data = new byte[fileStream.Length];
                        fileStream.Read(image.Data, 0, image.Data.Length);
                    }

                    ImageInfo imageInfo = new ImageInfo(image, ImageNameIsUnique);
                    imageDict.Add(image.Name, image);
                    lbImages.SelectedIndex = lbImages.Items.Add(imageInfo);

                    // создание объекта для передачи изменений
                    SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ImageAdded);
                    change.Image = image;
                    editorData.TrySetSchemeChange(change);
                    editorData.SetFormTitle();
                    StartWaitForChange();
                }
                catch (Exception ex)
                {
                    ScadaUtils.ShowError(SchemePhrases.LoadImageError + ":\n" + ex.Message);
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Попытаться установить изменение схемы, выдав сообщение в случае ошибки
 /// </summary>
 public void TrySetSchemeChange(SchemeView.SchemeChange change)
 {
     try
     {
         SchemeChange = change;
     }
     catch (Exception ex)
     {
         SchemeApp.GetSchemeApp().Log.WriteAction(ex.Message, Log.ActTypes.Exception);
         ScadaUiUtils.ShowError(ex.Message);
     }
 }
Beispiel #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;
        }
Beispiel #5
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);
                    }
                }
            }
        }
Beispiel #6
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);
            }
        }
Beispiel #7
0
        private void miSchemeDelElem_Click(object sender, EventArgs e)
        {
            // удаление элемента схемы
            SchemeView.Element elem = propGrid.SelectedObject as SchemeView.Element;

            if (elem != null)
            {
                // удаление элемента из представления
                editorData.SchemeView.ElementList.Remove(elem);
                editorData.SchemeView.ElementDict.Remove(elem.ID);

                // создание объекта для передачи изменений
                SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementDeleted);
                change.ElementID = elem.ID;
                editorData.TrySetSchemeChange(change);

                // очистка таблицы свойств
                propGrid.SelectedObject = null;
            }
        }
Beispiel #8
0
        private void propGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            // обновление наименования изображения
            if (e.ChangedItem.PropertyDescriptor.Name == "Name")
            {
                string oldName = (string)e.OldValue;
                string newName = (string)e.ChangedItem.Value;

                if (oldName != newName)
                {
                    // изменение наименования изображения
                    ImageInfo imageInfo = lbImages.SelectedItem as ImageInfo;
                    imageInfo.Name       = newName;
                    imageInfo.Image.Name = newName;

                    // обновление словаря изображений схемы
                    imageDict.Remove(oldName);
                    imageDict.Add(newName, imageInfo.Image);

                    // обновление списка изображений на форме
                    lbImages.SelectedIndexChanged -= lbImage_SelectedIndexChanged;
                    lbImages.BeginUpdate();

                    lbImages.Items.RemoveAt(lbImages.SelectedIndex);
                    lbImages.SelectedIndex = lbImages.Items.Add(imageInfo);

                    lbImages.EndUpdate();
                    lbImages.SelectedIndexChanged += lbImage_SelectedIndexChanged;

                    // создание объекта для передачи изменений
                    SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ImageRenamed);
                    change.ImageOldName = oldName;
                    change.ImageNewName = newName;
                    editorData.TrySetSchemeChange(change);
                    editorData.SetFormTitle();
                    StartWaitForChange();
                }
            }
        }
Beispiel #9
0
        private void webBrowser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            // переместить выбранный элемент при нажатии стрелок
            SchemeView.Element elem = propGrid.SelectedObject as SchemeView.Element;
            Keys keyCode            = e.KeyCode;

            if (elem != null &&
                (keyCode == Keys.Left || keyCode == Keys.Right || keyCode == Keys.Up || keyCode == Keys.Down))
            {
                // расчёт нового положения
                int x    = elem.Location.X;
                int y    = elem.Location.Y;
                int step = e.Control ? 1 : GridStep;

                if (keyCode == Keys.Left)
                {
                    elem.Location = new SchemeView.Point(x - step, y);
                }
                else if (keyCode == Keys.Right)
                {
                    elem.Location = new SchemeView.Point(x + step, y);
                }
                else if (keyCode == Keys.Up)
                {
                    elem.Location = new SchemeView.Point(x, y - step);
                }
                else if (keyCode == Keys.Down)
                {
                    elem.Location = new SchemeView.Point(x, y + step);
                }

                // установка изменения схемы
                SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementChanged);
                change.ElementData = new SchemeView.ElementData(elem);
                editorData.TrySetSchemeChange(change);
                SetFormTitleModified();
                propGrid.Refresh();
            }
        }
Beispiel #10
0
        private void propGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            // создание объекта для передачи изменений
            object selObj = propGrid.SelectedObject;

            SchemeView.SchemeChange change = null;

            if (selObj is SchemeView.Element)
            {
                change             = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementChanged);
                change.ElementData = new SchemeView.ElementData((SchemeView.Element)selObj);
            }
            else if (selObj is SchemeView.Scheme)
            {
                change = new SchemeView.SchemeChange(SchemeView.ChangeType.SchemeChanged);
                change.SchemeParams = (SchemeView.Scheme)selObj;
            }

            if (change != null)
            {
                editorData.TrySetSchemeChange(change);
                SetFormTitleModified();
            }
        }
Beispiel #11
0
        private void propGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            // создание объекта для передачи изменений
            object selObj = propGrid.SelectedObject;
            SchemeView.SchemeChange change = null;

            if (selObj is SchemeView.Element)
            {
                change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementChanged);
                change.ElementData = new SchemeView.ElementData((SchemeView.Element)selObj);
            }
            else if (selObj is SchemeView.Scheme)
            {
                change = new SchemeView.SchemeChange(SchemeView.ChangeType.SchemeChanged);
                change.SchemeParams = (SchemeView.Scheme)selObj;
            }

            if (change != null)
            {
                editorData.TrySetSchemeChange(change);
                SetFormTitleModified();
            }
        }
Beispiel #12
0
        private void miSchemeDelElem_Click(object sender, EventArgs e)
        {
            // удаление элемента схемы
            SchemeView.Element elem = propGrid.SelectedObject as SchemeView.Element;

            if (elem != null)
            {
                // удаление элемента из представления
                editorData.SchemeView.ElementList.Remove(elem);
                editorData.SchemeView.ElementDict.Remove(elem.ID);

                // создание объекта для передачи изменений
                SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementDeleted);
                change.ElementID = elem.ID;
                editorData.TrySetSchemeChange(change);

                // очистка таблицы свойств
                propGrid.SelectedObject = null;
            }
        }