private static void CreateNewProject() { try { Warehouse.Warehouse.CreateDirectories(); } catch (Exception) { UIHelper.ShowMessage(newProjectFailedMessage, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var cr = new CourseRoot { Text = "Учебный курс" }; Warehouse.Warehouse.Instance.CourseTree.Nodes.Add(cr); Warehouse.Warehouse.Instance.CourseTree.LabelEdit = true; if (!cr.IsEditing) { cr.BeginEdit(); } Warehouse.Warehouse.Instance.CourseTree.CurrentNode = cr; EditorObserver.RenderingStyle = Enums.RenderingStyle.NoActiveDocument; Warehouse.Warehouse.IsProjectModified = true; }
public override void Execute(object @object) { if (!Enabled) { return; } var path = Path.Combine(Warehouse.Warehouse.OuterProjectEditorLocation, Warehouse.Warehouse.OuterProjectArchiveName); #region Чтение структуры проекта, закладок, контента контролей var depth = 1; var ocst = AddItemFromOuterCourseDialog.OuterCourseTree; // Узел, в который добавляется следующий создаваемый узел. TreeNode activeNode = null; var xmlReader = new XmlTextReader(path); try { while (xmlReader.Read()) { System.Windows.Forms.Application.DoEvents(); if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name.Equals("project")) { #region Корень учебного курса var cr = new CourseRoot { Text = xmlReader.GetAttribute("name") }; ocst.Nodes.Add(cr); activeNode = cr; #endregion } else if (xmlReader.Name.Equals("module")) { if (xmlReader.GetAttribute("type").Equals("test", StringComparison.OrdinalIgnoreCase) || xmlReader.GetAttribute("type").Equals("training", StringComparison.OrdinalIgnoreCase)) { #region Контроль var tm = new TestModule { Text = xmlReader.GetAttribute("name") }; #region Входной/выходной контроль if (xmlReader.GetAttribute("io") != null) { if (xmlReader.GetAttribute("io").Equals("i", StringComparison.OrdinalIgnoreCase)) { tm.TestType = Enums.TestType.InTest; } else if (xmlReader.GetAttribute("io").Equals("o", StringComparison.OrdinalIgnoreCase)) { tm.TestType = Enums.TestType.OutTest; } } else { tm.TestType = Enums.TestType.OutTest; } #endregion #region Тренажер if (xmlReader.GetAttribute("type").Equals("test", StringComparison.OrdinalIgnoreCase)) { tm.Trainer = false; } else if (xmlReader.GetAttribute("type").Equals("training", StringComparison.OrdinalIgnoreCase)) { tm.Trainer = true; } #endregion #region Последовательность вопросов if (xmlReader.GetAttribute("order").Equals("natural", StringComparison.OrdinalIgnoreCase)) { tm.QuestionSequence = Enums.QuestionSequence.Natural; } else if (xmlReader.GetAttribute("order").Equals("random", StringComparison.OrdinalIgnoreCase)) { tm.QuestionSequence = Enums.QuestionSequence.Random; } else if (xmlReader.GetAttribute("order").Equals("network", StringComparison.OrdinalIgnoreCase)) { tm.QuestionSequence = Enums.QuestionSequence.Network; } #endregion tm.MistakesNumber = int.Parse(xmlReader.GetAttribute("errlimit")); tm.TimeRestriction = int.Parse(xmlReader.GetAttribute("time")); #region Вложенность контролей if (xmlReader.Depth == depth) { activeNode.Nodes.Add(tm); } else if (xmlReader.Depth - depth > 0) { activeNode = activeNode.Nodes[activeNode.Nodes.Count - 1]; activeNode.Nodes.Add(tm); } else if (xmlReader.Depth - depth < 0) { for (var i = 0; i < depth - xmlReader.Depth; i++) { activeNode = activeNode.Parent; } activeNode.Nodes.Add(tm); } depth = xmlReader.Depth; #endregion tm.XmlReader.ReadXml(xmlReader); #region Замена q.NextQuestion на реальные, после того, как все вопросы считаны foreach (var q in tm.Questions) { if (q.NextQuestion != null) { q.NextQuestion = Warehouse.Warehouse.GetQuestionById(q.NextQuestion.Id); } } #endregion #endregion } } } } } catch { } finally { xmlReader.Close(); } #endregion }