private void InitToolBarCommands() { ToolBarCommands = new ObservableCollection <ToolBarCommandBase>(); // Перемещение вершин - toogleCommand var moveCommand = new ToolBarToggleCommand( () => { IsMouseVerticesMovingEnabled = true; _state = State.MoveVertex; UserActionsManager.RegisterInfo("Включено перемещение вершин."); }, () => { IsMouseVerticesMovingEnabled = false; _state = State.Nothing; UserActionsManager.RegisterInfo("Отключено перемещение вершин."); }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("Move.png")), Description = "Перемещение вершин" }; // Перемещение вершин var dontTouch = new ToolBarInstantCommand( () => UserActionsManager.RegisterMistake("Сказали же НЕ ТРОГАТЬ!!!", 1), () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("DontTouch.png")), Description = "НЕ ТРОГАТЬ" }; // Завершение работы var finishTask = new ToolBarInstantCommand( () => { UserActionsManager.ReportThatTaskFinished(); }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("Complete.png")), Description = "Завершить задание" }; ToolBarCommands.Add(moveCommand); ToolBarCommands.Add(dontTouch); ToolBarCommands.Add(finishTask); }
private void InitToolBarCommands() { new SimpleDialog("Справка", Strings.Strings_RU.stage3Help).Show(); #region Видимость var vis = true; var phase3VisCommand = new ToolBarInstantCommand( () => { vis = !vis; WorkspaceGraphVisibility = vis ? Visibility.Visible : Visibility.Collapsed; }, () => _state == State.Nothing ) { Description = "Скрыть / Показать слой зелёного графа", Image = new BitmapImage(GetImageUri("HideGreen.png")) }; #endregion #region Справка var phase3HelpCommand = new ToolBarInstantCommand( () => new SimpleDialog("Справка", Strings.Strings_RU.stage3Help).Show(), () => _state == State.Nothing ) { Description = Strings.Strings_RU.buttonHelp, Image = new BitmapImage(GetImageUri("Info.png")) }; #endregion #region Завершить этап var phase3Command = new ToolBarInstantCommand( () => { var dialog = new AnswerDialog(IsomorphismResult); dialog.Closed += (sender, args) => { if (dialog.DialogResult.HasValue && dialog.DialogResult.Value && dialog.Answer) { UserActionsManager.SendReportOnEveryAction = true; UserActionsManager.RegisterInfo("Ответ пользователя: Графы изоморфны"); UserActionsManager.ReportThatTaskFinished(); } if (dialog.DialogResult.HasValue && dialog.DialogResult.Value && !dialog.Answer) { UserActionsManager.SendReportOnEveryAction = true; UserActionsManager.RegisterInfo("Ответ пользователя: Графы неизоморфны.\n" + dialog.Message); UserActionsManager.ReportThatTaskFinished(); } }; dialog.Show(); }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("Check.png")), Description = Strings.Strings_RU.stage3DoneButtonDisc }; #endregion Phase3ToolBarCommands = new ObservableCollection <ToolBarCommandBase> { phase3VisCommand, phase3Command, phase3HelpCommand }; }
private void InitToolBarCommands() { ToolBarCommands = new ObservableCollection <ToolBarCommandBase>(); // Выбор множества External stability var selectDsCommand = new ToolBarToggleCommand( () => { if (_task == Task.TaskSelectDomSets) { VertexClickCmd = new DelegateCommand( o => SelectRMouseClick((IVertex)o), o => true); _state = State.SetEs; IsMouseVerticesMovingEnabled = false; } }, () => { _state = State.Nothing; IsMouseVerticesMovingEnabled = true; }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("es.png")), Description = "Выбор множества внешней устойчивости" }; // Вызов окна со справкой var helpM = new ToolBarInstantCommand( () => MessageBox.Show ( "Лабораторная работа \"Устойчивость графов \"\n " + "Задание \"Множество внешней устойчивости\"\n" + "Цель: найти число внешней устойчивости графа\n" + "\n" + "для перехода к следующему заданию нажмите ОК\n" + "Для изменения матрицы необходимо изменить значение в ячейке и нажать \"Enter\"\n" + "Либо дважды кликнуть мышью по ячейке матрицы\n" + "\n" + "Задания:\n" + "1.1 Заполнить матрицу смежности\n" + "1.2 Измените матрицу смежности под выполнение алгоритма красно-синих вершин\n" + "2.Выделите несколько доминирующих множеств графа\n (выделение множества доступно по кнопке <ES>\nзакрытие множества происходит по кнопке <{}>)\n" + "3.Определить число внешней устойчивости (пометить соответствующее множество вершин)" ), () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("help.png")), Description = "Справка" }; // Проверка задания var checkButton = new ToolBarInstantCommand( () => { var mp = new MatrixPrinter(); var m = Matrix; switch (_task) { case Task.TaskAdjacencyMatrix: UserActionsManager.RegisterInfo("Внешняя устойчивость. Задание 1.1. На проверку отправлена матрица: " + mp.MatrixToString(m)); CheckMatrix(); break; case Task.TaskModifiedAdjMatrix: UserActionsManager.RegisterInfo("Внешняя устойчивость. Задание 1.2. На проверку отправлена матрица: " + mp.MatrixToString(m)); CheckMatrixforAghorithm(); break; case Task.TaskSelectDomSets: MessageBox.Show(string.Format( "Необходимо найти еще {0} множеств(о) внешней устойчивости", _countOfSes)); break; case Task.TaskFindMinDomSets: IsMinDS(); break; case Task.TaskEnd: UserActionsManager.ReportThatTaskFinished(); break; } }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("ok.png")), Description = "Проверить матрицу" }; // Проверка множества и его сохранение var addSetofES = new ToolBarInstantCommand( () => { if (_task == Task.TaskSelectDomSets) { ValidateSet(); } }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("add.png")), Description = "Добавить множество" }; // Проверка задания var debugButton = new ToolBarInstantCommand( () => { var counter = new MatrixErrorCounter(); if (_task == Task.TaskAdjacencyMatrix) { counter.FillInMatrix(Matrix, GivenGraph); } if (_task == Task.TaskModifiedAdjMatrix) { counter.ModifyMatrix(Matrix); } }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("ok.png")), Description = "Автозаполнение" }; ToolBarCommands.Add(checkButton); ToolBarCommands.Add(selectDsCommand); ToolBarCommands.Add(addSetofES); ToolBarCommands.Add(helpM); //ToolBarCommands.Add(debugButton); }
private void InitToolBarCommands() { ToolBarCommands = new ObservableCollection <ToolBarCommandBase>(); // Перемещение вершин - toogleCommand var moveCommand = new ToolBarToggleCommand( () => { IsMouseVerticesMovingEnabled = true; _state = State.MoveVertex; UserActionsManager.RegisterInfo("Включено перемещение вершин."); }, () => { IsMouseVerticesMovingEnabled = false; _state = State.Nothing; UserActionsManager.RegisterInfo("Отключено перемещение вершин."); }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("Move.png")), Description = "Перемещение вершин" }; //удаление вершин var removeVertex = new ToolBarToggleCommand( () => { UserActionsManager.RegisterInfo("Нажмите на вершину для удаления (все ее связи удалятся тоже)"); _state = State.RemoveVertex; }, () => _state = State.Nothing, () => _state == State.Nothing, () => _state == State.RemoveVertex ); removeVertex.Image = new BitmapImage(GetImageUri("DontTouch.png")); removeVertex.Description = "Удаление вершины"; //Добавление вершинки var testBut = new ToolBarToggleCommand( () => { UserActionsManager.RegisterInfo("Нажмите в то место, куда ходите добавить вершину."); _state = State.AddVertex; }, () => { _state = State.Nothing; UserActionsManager.RegisterInfo("Добавление вершины отменено"); }, () => _state == State.Nothing, () => _state == State.AddVertex ); testBut.Image = new BitmapImage(GetImageUri("NewVertex.png")); testBut.Description = "Добавить вершину"; //Добавление ребрышка var addEdgeCommand = new ToolBarToggleCommand( () => { _state = State.AddEdge1; UserActionsManager.RegisterInfo("Добавление ребра: Выберите выходную вершину."); }, () => { UserActionsManager.RegisterInfo("Добавление ребра завершено."); _state = State.Nothing; }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("NewEdge.png")), Description = "Добавление дуги" }; /* // Завершение работы * var finishTask = new ToolBarInstantCommand( * () => * { * UserActionsManager.ReportThatTaskFinished(); * }, * () => _state == State.Nothing * ) * { * Image = new BitmapImage(GetImageUri("Complete.png")), * Description = "Завершить задание" * };*/ var checkGraphBut = new ToolBarInstantCommand( CheckGraph, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("CondReady.png")), Description = "Проверить правильность построения графа" }; var checkAllBut = new ToolBarInstantCommand( CheckPlan, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("CondReady.png")), Description = "Проверить, плоский ли граф" }; ToolBarCommands.Add(moveCommand); ToolBarCommands.Add(removeVertex); // ToolBarCommands.Add(finishTask); ToolBarCommands.Add(testBut); ToolBarCommands.Add(addEdgeCommand); ToolBarCommands.Add(checkGraphBut); ToolBarCommands.Add(checkAllBut); }
private void InitToolBarCommands() { #region Первый этап #region Добавление рёбер var phase1AddEdgeCommand = new ToolBarToggleCommand( () => { IsMouseVerticesMovingEnabled = false; IsEgesAddingEnabled = true; _state = State.EdgesAdding; }, () => { IsMouseVerticesMovingEnabled = true; IsEgesAddingEnabled = false; _state = State.Nothing; }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("Arrow.png")), Description = Strings.Strings_RU.buttonEdges }; #endregion #region Завершить этап var allSubgraphs = new ObservableCollection <IGraph>(); var phase1Command = new ToolBarInstantCommand( () => { var solve = true; var gp = new GraphPrinter(); UserActionsManager.RegisterInfo(Strings.Strings_RU.stage1Check + gp.GraphToString(CurrentGraph)); CurrentGraph.Vertices.ForEach(v1 => CurrentGraph.Vertices.ForEach(v2 => { solve = solve && (v1.Equals(v2) || (CurrentGraph[v1, v2] == null ^ GivenGraph[ GivenGraph.Vertices.Single(v1.Equals), GivenGraph.Vertices.Single(v2.Equals)] == null )); } )); if (solve) { UserActionsManager.RegisterInfo(Strings.Strings_RU.stage1Done); GivenGraph = CurrentGraph; CurrentGraph = new UndirectedGraph(); Phase1ToolBarVisibility = Visibility.Collapsed; Phase2ToolBarVisibility = Visibility.Visible; L1 = Strings.Strings_RU.subgraph; FindAllSubgraphs(GivenGraph, 0, GivenGraph.Vertices.ToList(), allSubgraphs); new SimpleDialog("Справка", Strings.Strings_RU.stage2Help).Show(); } else { UserActionsManager.RegisterMistake(Strings.Strings_RU.stage1Mistake1, 10); } }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("Check.png")), Description = Strings.Strings_RU.stage1DoneButtonDisc }; #endregion #region Справка var phase1HelpCommand = new ToolBarInstantCommand( () => { new SimpleDialog("Справка", Strings.Strings_RU.stage1Help).Show(); }, () => _state == State.Nothing ) { Description = Strings.Strings_RU.buttonHelp, Image = new BitmapImage(GetImageUri("Info.png")) }; #endregion #region Молния var thunderbolt1 = new ToolBarInstantCommand( () => { UserActionsManager.RegisterInfo(Strings.Strings_RU.stage1ThunderCall); CurrentGraph.Vertices.ForEach(v1 => CurrentGraph.Vertices.ForEach(v2 => { if (!v1.Equals(v2) && CurrentGraph[v1, v2] == null && GivenGraph[ GivenGraph.Vertices.Single(v1.Equals), GivenGraph.Vertices.Single(v2.Equals)] == null) { CurrentGraph.AddEdge(new UndirectedEdge((Vertex)v1, (Vertex)v2)); } if (!v1.Equals(v2) && CurrentGraph[v1, v2] != null && GivenGraph[ GivenGraph.Vertices.Single(v1.Equals), GivenGraph.Vertices.Single(v2.Equals)] != null) { CurrentGraph.RemoveEdge(CurrentGraph[v1, v2]); } } )); }, () => _state == State.Nothing ) { Description = "Молния", Image = new BitmapImage(GetImageUri("thunder.png")) }; #endregion #endregion #region Второй этап #region Добавление вершин var vertexDialogCommand = new ToolBarInstantCommand( () => { var dialog = new VertexDialog((UndirectedGraph)CurrentGraph, GivenGraph.Vertices); dialog.Show(); dialog.Closed += (sender, args) => { var buf = CurrentGraph; CurrentGraph = null; CurrentGraph = buf; }; }, () => _state == State.Nothing) { Image = new BitmapImage(GetImageUri("Vertexes.png")), Description = Strings.Strings_RU.buttonVertexDialog }; #endregion #region Добавление рёбер var phase2AddEdgeCommand = new ToolBarToggleCommand( () => { IsMouseVerticesMovingEnabled = false; IsEgesAddingEnabled = true; _state = State.EdgesAdding; }, () => { IsMouseVerticesMovingEnabled = true; IsEgesAddingEnabled = false; _state = State.Nothing; }, () => _state == State.Nothing, () => true ) { Image = new BitmapImage(GetImageUri("Arrow.png")), Description = Strings.Strings_RU.buttonEdges }; #endregion #region Добавление подграфов var subgraphCommand = new ToolBarInstantCommand( () => { var subgraph = true; var unique = Unique((UndirectedGraph)CurrentGraph, GraphLib.Lib); var gp = new GraphPrinter(); UserActionsManager.RegisterInfo(Strings.Strings_RU.stage2Check + gp.GraphToString(CurrentGraph)); CurrentGraph.Vertices.ForEach(v1 => { CurrentGraph.Vertices.ForEach(v2 => { subgraph &= v1.Equals(v2) || (CurrentGraph[v1, v2] == null ^ GivenGraph[ GivenGraph.Vertices.Single(v1.Equals), GivenGraph.Vertices.Single(v2.Equals)] != null); } ); } ); if (CurrentGraph.VerticesCount == 0) { return; } if (!subgraph) { UserActionsManager.RegisterMistake(Strings.Strings_RU.stage2Mistake1, 10); return; } if (!unique) { UserActionsManager.RegisterMistake(Strings.Strings_RU.stage2Mistake2, 10); return; } var newGraph = UndirectedGraph.CreateEmpty(CurrentGraph.VerticesCount); for (var i = 0; i < CurrentGraph.VerticesCount; i++) { for (var j = i + 1; j < CurrentGraph.VerticesCount; j++) { if (CurrentGraph[CurrentGraph.Vertices[i], CurrentGraph.Vertices[j]] != null) { newGraph.AddEdge(new UndirectedEdge(newGraph.Vertices[i], newGraph.Vertices[j])); } } } UserActionsManager.RegisterInfo(Strings.Strings_RU.stage2Subgraph); GraphLib.Lib.Add(newGraph); }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("Collection.png")), Description = Strings.Strings_RU.buttonCheckSubgraph }; #endregion #region Справка var phase2HelpCommand = new ToolBarInstantCommand( () => { new SimpleDialog("Справка", Strings.Strings_RU.stage2Help).Show(); }, () => _state == State.Nothing ) { Description = Strings.Strings_RU.buttonHelp, Image = new BitmapImage(GetImageUri("Info.png")) }; #endregion #region Молния var thunderbolt2 = new ToolBarInstantCommand( () => { UserActionsManager.RegisterInfo(Strings.Strings_RU.stage2ThunderCall); allSubgraphs.ForEach(s => { if (Unique(s, GraphLib.Lib)) { GraphLib.Lib.Add(s); } }); var g = UndirectedGraph.CreateEmpty(GivenGraph.VerticesCount); for (var i = 0; i < g.VerticesCount; i++) { for (var j = i + 1; j < g.VerticesCount; j++) { if (GivenGraph[GivenGraph.Vertices[i], GivenGraph.Vertices[j]] != null) { g.AddEdge(new UndirectedEdge(g.Vertices[i], g.Vertices[j])); } } } GraphLib.Lib.Add(g); }, () => _state == State.Nothing ) { Description = "Молния", Image = new BitmapImage(GetImageUri("thunder.png")) }; #endregion #region Завершить этап var phase2Command = new ToolBarInstantCommand( () => { if (GraphLib.Lib.Count > allSubgraphs.Count) { UserActionsManager.RegisterInfo(Strings.Strings_RU.stage2Done); UserActionsManager.ReportThatTaskFinished(); } else { UserActionsManager.RegisterMistake(Strings.Strings_RU.stage2Mistake3, 10); } }, () => _state == State.Nothing ) { Image = new BitmapImage(GetImageUri("Check.png")), Description = Strings.Strings_RU.stage2DoneButtonDisc }; #endregion #endregion Phase1ToolBarCommands = new ObservableCollection <ToolBarCommandBase> { phase1AddEdgeCommand, phase1Command, phase1HelpCommand #if DEBUG , thunderbolt1 #endif }; Phase2ToolBarCommands = new ObservableCollection <ToolBarCommandBase> { vertexDialogCommand, phase2AddEdgeCommand, subgraphCommand, phase2Command, phase2HelpCommand #if DEBUG , thunderbolt2 #endif }; }