private void miEditPaste_Click(object sender, EventArgs e) { // вставить элемент из буфера if (elemClipboard != null) { elemClipboard.ID = editorData.SchemeView.GetNextElementID(); editorData.AddedElement = elemClipboard; elemClipboard = (SchemeView.Element)elemClipboard.Clone(); miSchemeCancelAddElem.Enabled = btnSchemeCancelAddElem.Enabled = true; } }
private void miEditCopy_Click(object sender, EventArgs e) { // копировать элемент в буфер SchemeView.Element elem = propGrid.SelectedObject as SchemeView.Element; if (elem != null) { elemClipboard = (SchemeView.Element)elem.Clone(); miEditPaste.Enabled = btnEditPaste.Enabled = true; } }
/// <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); } } } }
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 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 FrmMain_Load(object sender, EventArgs e) { // определение директории исполняемого файла приложения exeDir = ScadaUtils.NormalDir(Path.GetDirectoryName(Application.ExecutablePath)); // локализация приложения string langDir = exeDir + "lang\\"; string errMsg; if (Localization.LoadingRequired(langDir, "ScadaData")) { if (Localization.LoadDictionaries(langDir, "ScadaData", out errMsg)) { CommonPhrases.Init(); } else { ScadaUtils.ShowError(errMsg); } } if (Localization.LoadingRequired(langDir, "ScadaSchemeEditor")) { if (Localization.LoadDictionaries(langDir, "ScadaSchemeEditor", out errMsg)) { Localization.TranslateForm(this, "Scada.Scheme.Editor.FrmMain"); SchemePhrases.InitStatic(); openFileDialog.Filter = saveFileDialog.Filter = SchemePhrases.FileFilter; } else { ScadaUtils.ShowError(errMsg); } } // инициализация данных SchemeApp schemeApp = SchemeApp.InitSchemeApp(SchemeApp.WorkModes.Edit); schemeUrl = exeDir + "web\\ScadaScheme.html?editMode=true"; editorData = schemeApp.EditorData; editorData.SelectElement = SelectElement; editorData.SetFormTitle = SetFormTitle; log = schemeApp.Log; elemClipboard = null; schemeSvcHost = null; domainSvcHost = null; schemeExThread = null; // проверка запуска второй копии программы try { bool createdNew; mutex = new Mutex(true, "ScadaSchemeEditorMutex", out createdNew); if (!createdNew) { ScadaUtils.ShowInfo("SCADA-Редактор схем уже запущен.\nВторая копия будет закрыта."); Close(); return; } } catch (Exception ex) { log.WriteAction("Ошибка при проверке запуска второй копии программы: " + ex.Message, Log.ActTypes.Exception); } // запуск WCF-служб if (StartWCF()) { // создание и запуск потока для обмена данными со схемой schemeExThread = new Thread(SchemeExchange); schemeExThread.Start(); // настройка элементов управления miEditCut.Enabled = btnEditCut.Enabled = false; miEditCopy.Enabled = btnEditCopy.Enabled = false; miEditPaste.Enabled = btnEditPaste.Enabled = false; miSchemeCancelAddElem.Enabled = btnSchemeCancelAddElem.Enabled = false; miSchemeDelElem.Enabled = btnSchemeDelElem.Enabled = false; // создание новой схемы miFileNew_Click(null, null); } else { // блокировка элементов управления foreach (ToolStripItem item in miFile.DropDown.Items) { item.Enabled = item == miFileExit; } foreach (ToolStripItem item in miEdit.DropDown.Items) { item.Enabled = false; } foreach (ToolStripItem item in miScheme.DropDown.Items) { item.Enabled = false; } foreach (ToolStripItem item in toolMain.Items) { item.Enabled = false; } } }
private void FrmMain_Load(object sender, EventArgs e) { // определение директории исполняемого файла приложения exeDir = ScadaUtils.NormalDir(Path.GetDirectoryName(Application.ExecutablePath)); // локализация приложения if (!Localization.UseRussian) { string langDir = exeDir + "lang\\"; string errMsg; if (Localization.LoadDictionaries(langDir, "ScadaData", out errMsg)) CommonPhrases.Init(); else ScadaUtils.ShowError(errMsg); if (Localization.LoadDictionaries(langDir, "ScadaSchemeEditor", out errMsg)) { Localization.TranslateForm(this, "Scada.Scheme.Editor.FrmMain"); SchemePhrases.InitStatic(); openFileDialog.Filter = saveFileDialog.Filter = SchemePhrases.FileFilter; } else { ScadaUtils.ShowError(errMsg); } } // инициализация данных SchemeApp schemeApp = SchemeApp.InitSchemeApp(SchemeApp.WorkModes.Edit); schemeUrl = exeDir + "web\\ScadaScheme.html?editMode=true"; editorData = schemeApp.EditorData; editorData.SelectElement = SelectElement; editorData.SetFormTitle = SetFormTitle; log = schemeApp.Log; elemClipboard = null; schemeSvcHost = null; domainSvcHost = null; schemeExThread = null; // проверка запуска второй копии программы try { bool createdNew; mutex = new Mutex(true, "ScadaSchemeEditorMutex", out createdNew); if (!createdNew) { ScadaUtils.ShowInfo("SCADA-Редактор схем уже запущен.\nВторая копия будет закрыта."); Close(); return; } } catch (Exception ex) { log.WriteAction("Ошибка при проверке запуска второй копии программы: " + ex.Message, Log.ActTypes.Exception); } // запуск WCF-служб if (StartWCF()) { // создание и запуск потока для обмена данными со схемой schemeExThread = new Thread(SchemeExchange); schemeExThread.Start(); // настройка элементов управления miEditCut.Enabled = btnEditCut.Enabled = false; miEditCopy.Enabled = btnEditCopy.Enabled = false; miEditPaste.Enabled = btnEditPaste.Enabled = false; miSchemeCancelAddElem.Enabled = btnSchemeCancelAddElem.Enabled = false; miSchemeDelElem.Enabled = btnSchemeDelElem.Enabled = false; // создание новой схемы miFileNew_Click(null, null); } else { // блокировка элементов управления foreach (ToolStripItem item in miFile.DropDown.Items) item.Enabled = item == miFileExit; foreach (ToolStripItem item in miEdit.DropDown.Items) item.Enabled = false; foreach (ToolStripItem item in miScheme.DropDown.Items) item.Enabled = false; foreach (ToolStripItem item in toolMain.Items) item.Enabled = false; } }