PIBD-14_Boyko_M_S_Cursach_DFS/Cursach/FormCreate.cs

120 lines
3.5 KiB
C#
Raw Normal View History

2024-05-16 00:37:58 +04:00
using Cursach.Parameters;
using Cursach.Realisations;
namespace Cursach
{
public partial class FormCreate : Form
{
private AdjacencyList _adjacencyList;
private Node startNode = new Node(0);
public event Action<BFSParameters>? parameterDelegate;
private VizulizatorGraph? visualizatorGraph;
public FormCreate()
{
InitializeComponent();
_adjacencyList = new AdjacencyList();
visualizatorGraph = new VizulizatorGraph();
Draw();
}
private void buttonAddNode_Click(object sender, EventArgs e)
{
}
private void buttonAddEdge_Click(object sender, EventArgs e)
{
if (!_adjacencyList.AddBind(new Bind(
node1: _adjacencyList.GetByNameNode(comboBoxNode1.SelectedItem.ToString()),
node2: _adjacencyList.GetByNameNode(comboBoxNode2.SelectedItem.ToString())
)))
{
MessageBox.Show("Неверное ребро");
return;
}
treeView.Nodes.Clear();
foreach (var parentNode in _adjacencyList.Keys())
{
TreeNode smartNode = new TreeNode(parentNode.ToString());
foreach (var childNode in _adjacencyList.Values(parentNode))
{
smartNode.Nodes.Add(childNode.ToString());
}
treeView.Nodes.Add(smartNode);
}
treeView.ExpandAll();
Draw();
}
private void buttonStart_Click(object sender, EventArgs e)
{
try
{
_adjacencyList.Mirror();
BFSParameters parameter = new BFSParameters(startNode, _adjacencyList);
parameterDelegate?.Invoke(parameter);
Close();
}
catch (Exception exception)
{
MessageBox.Show("Граф пустой");
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
MouseEventArgs me = (MouseEventArgs)e;
Point coordinates = me.Location;
_adjacencyList.AddNode(new Node(_adjacencyList.Keys().Count(), coordinates));
comboBoxNode1.Items.Clear();
comboBoxNode2.Items.Clear();
foreach (var item in _adjacencyList.Keys())
{
comboBoxNode1.Items.Add(item);
comboBoxNode2.Items.Add(item);
}
EnableAddEdgeButton();
Draw();
}
private void Draw()
{
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height);
Graphics gr = Graphics.FromImage(bmp);
if (visualizatorGraph != null)
{
visualizatorGraph.Draw(gr, _adjacencyList);
}
pictureBox1.Image = bmp;
}
private void treeView_AfterSelect_1(object sender, TreeViewEventArgs e)
{
startNode = _adjacencyList.GetByNameNode(e.Node?.Text);
}
private void comboBoxNode1_SelectedIndexChanged(object sender, EventArgs e)
{
EnableAddEdgeButton();
}
private void comboBoxNode2_SelectedIndexChanged(object sender, EventArgs e)
{
EnableAddEdgeButton();
}
private void EnableAddEdgeButton()
{
buttonAddEdge.Enabled = comboBoxNode1.Text.Length > 0 && comboBoxNode2.Text.Length > 0;
}
}
}