Pibd-14_Eredavkin.R.A_Cours.../CourseWorkEreda копия/FormMain.cs

183 lines
5.7 KiB
C#
Raw Permalink Normal View History

2024-05-27 17:45:42 +04:00
using CourseWork_EredavkinRA;
using System.Windows.Forms;
namespace CourseWorkEreda
{
public partial class FormMain : Form
{
private ArrayManager stackManager;
private Visualizator _Visualizer;
public FormMain()
{
InitializeComponent();
_Visualizer = new Visualizator();
stackManager = new ArrayManager(new ArrayDequeParameters(10));
}
public void ExecuteOperation(Operation operation, int? element = null)
{
if (operation == Operation.pushFront && element.HasValue)
{
FormInput pushForm = new FormInput();
pushForm.PushClicked += HandlePushClicked;
pushForm.Show();
}
else if (operation == Operation.popFront)
{
stackManager.PopFront();
}
else if (operation == Operation.pushBack && element.HasValue)
{
FormInput pushForm = new FormInput();
pushForm.PushClicked += HandleBackPushClicked;
pushForm.Show();
}
else if (operation == Operation.popBack)
{
stackManager.PopBack();
}
UpdateStackView(stackManager.GetStorage());
}
public void HandlePushClicked(int element)
{
stackManager.FrontPush(element);
UpdateStackView(stackManager.GetStorage());
}
public void HandleBackPushClicked(int element)
{
stackManager.BackPush(element);
UpdateStackView(stackManager.GetStorage());
}
private void buttonPushFront_Click(object sender, EventArgs e)
{
int element = 0;
Action<int> pushAction = (element) => ExecuteOperation(Operation.pushFront, element);
pushAction(element);
_Visualizer.SetAddRectangleUp(true);
}
private void buttonpushBack_Click(object sender, EventArgs e)
{
int element = 0; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Action<int> pushAction = (element) => ExecuteOperation(Operation.pushBack, element);
pushAction(element);
_Visualizer.SetAddRectangleUp(false);
}
private void buttonpopFront_Click(object sender, EventArgs e)
{
ExecuteOperation(Operation.popFront);
UpdateStackView(stackManager.GetStorage());
}
private void buttonpopBack_Click(object sender, EventArgs e)
{
ExecuteOperation(Operation.popBack);
UpdateStackView(stackManager.GetStorage());
}
private void buttonEmpty_Click(object sender, EventArgs e)
{
if (stackManager.IsEmpty())
{
MessageBox.Show("<22><><EFBFBD> <20><><EFBFBD><EFBFBD>!");
}
else
{
MessageBox.Show("<22> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.");
}
}
private void buttonInfo_Click(object sender, EventArgs e)
{
FormInfo informationForm = new FormInfo();
informationForm.Show();
UpdateStackView(stackManager.GetStorage());
}
private void buttonSave_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
stackManager.storage.SaveToFile(saveFileDialog.FileName);
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
}
}
private void buttonLoad_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
stackManager.ClearStates();
stackManager.storage.LoadFromFile(openFileDialog.FileName);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ArrayDequeState? lastState = stackManager.storage.GetLastState();
if (lastState != null)
{
//stackManager.SetState(lastState);
//UpdateStackView();
}
MessageBox.Show("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
}
}
public void UpdateStackView(StateStorage stateStorage)
{
ArrayDequeState? currentState = stackManager.GetStates().LastOrDefault();
if (currentState != null)
{
_Visualizer.Visualize(currentState, this);
UpdateStateList();
}
}
private void UpdateStateList()
{
lstStackStates.Items.Clear();
foreach (var state in stackManager.GetStates())
{
lstStackStates.Items.Add(string.Join(",", state.Array));
}
}
private void button1_Click(object sender, EventArgs e)
{
ArrayDequeState? currentState = stackManager.GetStates().LastOrDefault();
if (currentState != null)
{
_Visualizer.Visualize(currentState, this);
}
}
private void buttonStepForward_Click(object sender, EventArgs e)
{
var storage = stackManager.StepForward();
UpdateStackView(storage);
}
private void buttonStepBack_Click(object sender, EventArgs e)
{
var storage = stackManager.StepBackward();
UpdateStackView(storage);
}
}
}