using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CarManagerV2 { public partial class MainForm : Form { List cars = new List(); public MainForm() { InitializeComponent(); SafeManager.InitializeFile("cars.csv"); List _cars = SafeManager.ReadCars("cars.csv"); refreshCars(_cars); } private void refreshCars(List _cars) { //if cars havent changed, dont refresh //bool changed = false; //foreach (Car car in _cars) //{ // Car existing = cars.FirstOrDefault(c => c.Id == car.Id); // if (existing == null) // { // Console.WriteLine($"Added: {car.Id}"); // changed = true; // break; // } // else if (existing.isChanged(car)) // { // Console.WriteLine($"Modified: {car.Id} / {existing.Id}"); // changed = true; // break; // } //} //if(!changed && cars.Count == _cars.Count) //{ // Console.WriteLine("Cars are the same, not refreshing."); // cars = _cars; // return; //} cars = _cars; //if(cars.SequenceEqual(_cars)) //{ // Console.WriteLine("Cars are the same, not refreshing."); // return; //} //else //{ // Console.WriteLine("Cars have changed, refreshing."); // Console.WriteLine($"Old cars count: {cars.Count}, New cars count: {_cars.Count}"); // //find differences // Console.WriteLine("Saved:"); // foreach (var car in cars) // { // Console.Write($"{car.Id}, {car.Make} {car.Model}, {car.Year} | "); // } // Console.WriteLine("-------------------"); // Console.WriteLine("New:"); // foreach (var car in _cars) // { // Console.Write($"{car.Id}, {car.Make} {car.Model}, {car.Year} | "); // } // Console.WriteLine(); // var addedCars = _cars.Except(cars).ToList(); // var removedCars = cars.Except(_cars).ToList(); // var modifiedCars = _cars.Where(c => cars.Any(c2 => c2.Id == c.Id && !c2.Equals(c))).ToList(); // Console.WriteLine($"Added cars: {addedCars.Count}, Removed cars: {removedCars.Count}, Modified cars: {modifiedCars.Count}"); //} flpCars.Controls.Clear(); foreach (Car car in _cars) { CarCard card = new CarCard(); card.CarName = $"{car.Make} {car.Model}"; card.CarDetails = $"{car.Year}, {car.Mileage} km, ${car.Price}"; card.CarImage = ImageManager.GetImage(car); card.CardClicked += (s, e) => { Console.WriteLine($"Card clicked: {car.Id}"); CarDetailsForm detailsForm = new CarDetailsForm(car); detailsForm.FormClosed += (s2, e2) => { // refresh cars Application.DoEvents(); Console.WriteLine("Refreshing cars..."); List __cars = SafeManager.ReadCars("cars.csv"); refreshCars(__cars); }; detailsForm.ShowDialog(); }; flpCars.Controls.Add(card); } } private void btnNewCar_Click(object sender, EventArgs e) { Car foocar = StateManager.CreateCar("New", "Car", 2020, "White", 0, 20000); CarDetailsForm detailsForm = new CarDetailsForm(foocar); detailsForm.FormClosed += (s2, e2) => { // refresh cars Console.WriteLine("Refreshing cars..."); cars = SafeManager.ReadCars("cars.csv"); refreshCars(cars); }; detailsForm.ShowDialog(); } void searchList(string query) { List results = new List(); foreach (Car car in cars) { if (car.Make.ToLower().Contains(query.ToLower()) || car.Model.ToLower().Contains(query.ToLower()) || car.Year.ToString().Contains(query) || car.Mileage.ToString().Contains(query) || car.Price.ToString().Contains(query)) { results.Add(car); } } refreshCars(results); } private void tbxSearch_TextChanged(object sender, EventArgs e) { string query = tbxSearch.Text; if(string.IsNullOrWhiteSpace(query)) { refreshCars(cars); } else { searchList(query); } } } }