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(); }
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); } } }
/// <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); } }
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 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); } }
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; } }
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(); } } }
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(); } }
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(); } }