120 lines
3.5 KiB
C#
120 lines
3.5 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|