/// <summary> /// Конструктор /// </summary> public CyclogramFile() { // !_curLine = 0; _wasError = false; _availableCommands = null; _curCommand = new CyclogramLine(); commands = new ObservableCollection<CyclogramLine>(); }
/// <summary> /// загружаем файл циклограмм /// Даже в случае ошибки, команда добавляется в список команд, но выставляется признак наличия ошибки /// </summary> /// <param name="cycFName">Путь к файлу циклограмм</param> /// <param name="availableCommands">Список доступных команд</param> public void TryLoad(string cycFName, CyclogramCommands availableCommands) { Debug.Assert(availableCommands != null, "Список доступных команд циклограммы пуст!"); string cycLine; int curLineNum = 0; _availableCommands = availableCommands; _wasError = false; if (!File.Exists(cycFName)) { _wasError = true; CyclogramParsingException exc = new CyclogramParsingException("Файл " + cycFName + " не существует!"); throw exc; } FileName = cycFName; commands.Clear(); using (StreamReader sr = new StreamReader(cycFName)) { // читам файл по строкам while (sr.Peek() >= 0) { cycLine = sr.ReadLine(); try { TryParseString(cycLine); } catch (CyclogramParsingException e) { _wasError = true; _curCommand.ErrorInCommand += e.Message + "\t"; } catch { _wasError = true; _curCommand.ErrorInCommand += " Общая ошибка проверки команды."; } finally { _curCommand.Line = curLineNum; commands.Add(_curCommand); // начинаем "собирать" новую команду _curCommand = new CyclogramLine(); } curLineNum++; } } }
public CyclogramLine SetToLine(int lineNum, bool findFirst = false) { _curCmd = null; foreach (CyclogramLine cl in _cFile.commands.Where(l => (l.IsCommand))) { if (findFirst) { if (cl.Line >= lineNum) { CurCmd = cl; return CurCmd; } } else if (cl.Line == lineNum) { CurCmd = cl; return CurCmd; } } return null; }
private void onNewCmd(CyclogramLine cycCommand) { if (cycCommand == null) return; DG.Dispatcher.Invoke(new Action(delegate { DG.SelectedItem = cycCommand; if (IsTracingMode) { DG.ScrollIntoView(cycCommand); } })); }