using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Security.AccessControl; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; using GtaVUsersInfo.Helpers; using GtaVUsersInfo.Controls; using Newtonsoft.Json; using System.IO; using System.Data.Common; using GtaVUsersInfo.Forms; namespace GtaVUsersInfo { public partial class MainForm : Form { private List debugControlsList; private List carList; private List parameters; private List cars; public MainForm() { InitializeComponent(); debugControlsList = new List { parserButton, readJsonButton }; this.visible(debugControlsList, false); carList = LoadCarsFromJson(Resources.carJsonPath); parameters = new List { new ParameterControl("Имя"), new ParameterControl("Деньги") }; cars = new List(); carsItems.ContextMenuStrip = new CarPanelMenuStrip(addNewCar).Menu; } private void MainForm_Load(object sender, EventArgs e) { AllPanelCreate(); } private void AllPanelCreate() { ParameterPanelCreate(); CarPanelCreate(); } private void ParameterPanelCreate() { parametersPanel.Controls.Clear(); foreach (Control param in parameters) { param.Dock = DockStyle.Top; parametersPanel.Controls.Add(param); parametersPanel.Controls.SetChildIndex(param, 0); } } private void CarPanelCreate() { carsItems.Controls.Clear(); foreach (CarItem car in cars) { carsItems.Controls.Add(car); } } public static List LoadCarsFromJson(string filePath) { try { string json = File.ReadAllText(filePath); List cars = JsonConvert.DeserializeObject>(json); return cars; } catch (FileNotFoundException) { string message = $"Файл с автомобилями не найден: {filePath}"; Console.WriteLine(message); MessageBox.Show(message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return new List(); } catch (JsonException ex) { ErrorsShow.ShowErrorMessage($"Ошибка при десериализации JSON автомобилей: {ex.Message}"); return new List(); } catch (Exception ex) { ErrorsShow.ShowErrorMessage($"Произошла неожиданная ошибка при открытии файла с автомобилями: {ex.Message}"); return new List(); } } #region Methods private void visible(List controls, bool isVisible) { controls.ForEach(control => { control.Visible = isVisible; control.Enabled = isVisible; }); } #endregion async private void parserButton_Click(object sender, EventArgs e) { using (var parser = new CarParser()) { var cars = await parser.ParseCarsFromPages(25); parser.SaveToJson(cars, Resources.carJsonPath); ErrorsShow.ShowInfoMessage($"Данные сохранены: {Resources.carJsonPath}"); } carList = LoadCarsFromJson(Resources.carJsonPath); } private void readJsonButton_Click(object sender, EventArgs e) { carList = LoadCarsFromJson(Resources.carJsonPath); } private void debugCheck_CheckedChanged(object sender, EventArgs e) { this.visible(debugControlsList, debugCheck.Checked); } private void addCar_Click(object sender, EventArgs e) { if (carList.Count <= 0) { ErrorsShow.ShowErrorMessage($"Список автомобилей пуст, ошибка чтения файла: {Resources.carJsonPath}"); return; } Car car = new Car(); using (AddCars form = new AddCars(carList, car)) { form.ShowDialog(); } if (car.Name != null) { CarItem item = new CarItem(car); item.MenuStrip = new CarItemMenuStrip(addNewCar, editCar, deleteCar, item).Menu; cars.Add(item); CarPanelCreate(); } } private void addNewCar(object sender, EventArgs e) { addCar_Click(sender, e); } private void editCar(object sender, EventArgs e) { if (carList.Count <= 0) { ErrorsShow.ShowErrorMessage($"Список автомобилей пуст, ошибка чтения файла: {Resources.carJsonPath}"); return; } ToolStripMenuItem clickedMenuItem = sender as ToolStripMenuItem; if (clickedMenuItem == null) return; CarItemMenuStrip menu = clickedMenuItem.Tag as CarItemMenuStrip; if (menu == null) return; CarItem carItem = menu.Car as CarItem; if (carItem == null) return; Car car = new Car(); using (AddCars form = new AddCars(carList, car)) { form.ShowDialog(); } if (car.Name != null) { carItem.EditCar(car); } } private void deleteCar(object sender, EventArgs e) { if (carList.Count <= 0) { ErrorsShow.ShowErrorMessage($"Список автомобилей пуст, ошибка чтения файла: {Resources.carJsonPath}"); return; } ToolStripMenuItem clickedMenuItem = sender as ToolStripMenuItem; if (clickedMenuItem == null) return; CarItemMenuStrip menu = clickedMenuItem.Tag as CarItemMenuStrip; if (menu == null) return; CarItem carItem = menu.Car; if (carItem == null) return; if (cars.Contains(carItem)) { cars.Remove(carItem); CarPanelCreate(); } } private void addParameter_Click(object sender, EventArgs e) { ParameterControl parameter = new ParameterControl(); using (AddParameter form = new AddParameter(parameters, parameter)) { form.ShowDialog(); } if (!string.IsNullOrEmpty(parameter.ParamName)) { parameter.Dock = DockStyle.Top; parameters.Add(parameter); ParameterPanelCreate(); } } } }