internal static void DeleteGarage(GarageHandler gh, MenuHandler mh) { if (gh.garages.Count > 1) { var beforeC = gh.garages.Count(); var operationOk = gh.TryDeleteGarage(gh.garageId); var afterC = gh.garages.Count(); var minskatMedEtt = afterC == beforeC - 1; if (!operationOk || !minskatMedEtt) { ConsoleHelper.Announce("Ett fel inträffade när garaget skulle raderas"); return; } MenuBuilder.UpdateGarageMenu(gh, mh); MenuBuilder.UpdateVehicleMenu(gh, mh); var firstGarage = gh.garages.FirstOrDefault(); gh.TrySetGarage(firstGarage.Id); mh.GoBack(); } else { ConsoleHelper.Announce("Minst ett garage måste existera"); } }
internal static void UpdateVehicleMenu(GarageHandler gh, MenuHandler mh) { mh.menus.Remove("vehicleIndex"); var items = new List <MenuItem>(); var currentGarage = gh.GetCurrentGarage(); string garageName; if (currentGarage != null) { items = (List <MenuItem>)MenuConverter.VehiclesToMenuItems(currentGarage.Vehicles); garageName = currentGarage.Name; } else { garageName = ""; } var labelRow = Vehicle.ToHeader(); items.Insert(0, new MenuItem(labelRow)); items.Add(new MenuItem("")); items.Add(new MenuItem("Nytt fordon", new MenuAction(Create, "vehicle"))); items.Add(new MenuItem("Byt namn på garage", new MenuAction(Edit, "garage"))); items.Add(new MenuItem("Ta bort garage", new MenuAction(Delete, "garage"))); mh.AddMenu(new Menu("vehicleIndex", garageName + " -> Välj fordon", items)); }
internal static void UpdateAllMenus(GarageHandler gh, MenuHandler mh) { MenuBuilder.UpdateMainMenu(gh, mh); MenuBuilder.UpdateGarageMenu(gh, mh); MenuBuilder.UpdateGroupMenu(gh, mh); MenuBuilder.UpdateVehicleMenu(gh, mh); }
public void Run() { IConsoleUI ui = new ConsoleUI(); GarageHandler gh = new GarageHandler(ui); gh.Run(); }
internal static void UpdateGroupMenu(GarageHandler gh, MenuHandler mh) { mh.menus.Remove("allGroupIndex"); var vehicles = gh.GetCurrentGarage().Vehicles; mh.AddMenu(new Menu("allGroupIndex", "Välj grupp", MenuConverter.VehiclesToMenuItemsByGroup(vehicles))); }
internal static void UpdateGroupResult(GarageHandler gh, MenuHandler mh, string typ) { mh.menus.Remove("groupedVehicleIndex"); var vehicles = gh.AllVehiclesByType(typ); var items = new List <MenuItem>(); items = (List <MenuItem>)MenuConverter.VehiclesToMenuItems(vehicles); mh.AddMenu(new Menu("groupedVehicleIndex", "Fordon inom grupp", items)); }
internal static void CreateGarage(GarageHandler gh, MenuHandler mh) { Console.WriteLine(); ConsoleColor oldFg = Console.ForegroundColor; Console.ForegroundColor = mh.settings.ActiveColor; string name = ConsoleHelper.AskQuestionText("Namn på nytt garage"); Garage <Vehicle> newGarage = new Garage <Vehicle>(name); gh.garages.Add(newGarage); MenuBuilder.UpdateGarageMenu(gh, mh); Console.ForegroundColor = oldFg; }
internal static void RenameGarage(GarageHandler gh, MenuHandler mh) { Console.WriteLine(); ConsoleColor oldFg = Console.ForegroundColor; Console.ForegroundColor = mh.settings.ActiveColor; string name = ConsoleHelper.AskQuestionText("Nytt namn"); gh.GetCurrentGarage().Name = name; MenuBuilder.UpdateGarageMenu(gh, mh); MenuBuilder.UpdateVehicleMenu(gh, mh); Console.ForegroundColor = oldFg; }
internal static void UpdateGarageMenu(GarageHandler gh, MenuHandler mh) { mh.menus.Remove("garageIndex"); var items = (List <MenuItem>)MenuConverter.GaragesToMenuItems(gh.garages); mh.AddMenu(new Menu("garageIndex", "Välj garage", items)); var labelRow = Garage <Vehicle> .ToHeader(); items.Insert(0, new MenuItem(labelRow, false)); items.Add(new MenuItem("", true)); items.Add(new MenuItem("Nytt garage", new MenuAction(Create, "garage"))); }
public static int LoadAllGarages(GarageHandler gh) { try { string jsonData = File.ReadAllText(getPath(fileName)); gh.garages = JsonConvert.DeserializeObject <List <Garage <Vehicle> > >(jsonData, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }); } catch (FileNotFoundException) { // Vi hanterar om antal garage är 0 i garagehandler LoadFromDb } return(gh.garages.Count); }
internal static void DeleteVehicle(int id, GarageHandler gh, MenuHandler mh) { int beforeC = gh.GetCurrentGarage().Vehicles.Count(); Vehicle vehicle = (Vehicle)gh.TryDeleteVehicle(id); int afterC = gh.GetCurrentGarage().Vehicles.Count(); if (vehicle != null && afterC == beforeC - 1) { // ConsoleHelper.Announce("Resultat", "Fordonet har raderats" + beforeC + " " + afterC); MenuBuilder.UpdateVehicleMenu(gh, mh); mh.GoBack(); } else { ConsoleHelper.Announce("Tyvärr, Fordonet kunde inte hittas"); } }
internal static void Search(GarageHandler gh, MenuHandler mh) { ConsoleHelper.PutLabel("Sökning"); var text = ConsoleHelper.AskQuestionText("sökterm"); IEnumerable <Vehicle> found = gh.FindVehicles(text); if (found.Any()) { mh.menus.Remove("searchIndex"); mh.AddMenu(new Menu("searchIndex", "Sökresultat", MenuConverter.VehiclesToMenuItems(found))); mh.TryGotoMenu("searchIndex"); } else { ConsoleHelper.Announce("Tyvärr, kunde inte hitta något fordon."); } }
internal static int AddVehicle(GarageHandler gh, MenuHandler mh) { Vehicle vehicle; ConsoleHelper.PutLabel("Lägg till fordon"); // Todo: Använd en genererad meny-ui istället var typ = ConsoleHelper.AskQuestionText("Car/Motorcycle/OneWheeler/Airplane?").ToLower(); if (typ == "car") { vehicle = new Car(); } else if (typ == "motorcycle") { vehicle = new Motorcycle(); } else if (typ == "onewheeler") { vehicle = new OneWheeler(); } else if (typ == "airplane") { vehicle = new Airplane(); } else { vehicle = new Vehicle(); } gh.AddVehicle(vehicle); // MenuBuilder.UpdateGarageMenu(gh, mh); // MenuBuilder.UpdateGroupMenu(gh, mh); MenuBuilder.UpdateAllMenus(gh, mh); return(vehicle.id); }
internal static void UpdateMainMenu(GarageHandler gh, MenuHandler mh) { mh.menus.Remove("main"); // var mainLabel = "Huvudmeny (" + Vehicle.NextId + ")"; var mainLabel = "Huvudmeny"; var garageLabel = "Garage (" + gh.garages.Count + "st)"; mh.AddMenu(new Menu("main", mainLabel, new List <MenuItem> { new MenuItem(garageLabel, new MenuAction(Route, "garageIndex")), new MenuItem("Grupper", new MenuAction(Route, "allGroupIndex")), // new MenuItem("Lista alla fordon (todo)", new MenuAction(route, "vehicleIndex")), new MenuItem("Sök fordon", new MenuAction(Search, "regnr")), new MenuItem("Databas", new MenuAction(Route, "fileOptions")), new MenuItem("Avsluta utan att spara", new MenuAction(Quit)) })); mh.menus.Remove("fileOptions"); mh.AddMenu(new Menu("fileOptions", "Databasåtgärder", new List <MenuItem> { new MenuItem("Ladda från db", new MenuAction(Route, "load")), new MenuItem("Ladda testData", new MenuAction(Route, "reset")), new MenuItem("Töm", new MenuAction(Route, "clear")), new MenuItem("Spara till db", new MenuAction(Route, "save")) })); }
static void Main(string[] args) { var gh = new GarageHandler(); var mh = new MenuHandler(); var action = new MenuAction(); var lastSelectedVehicle = 0; // var lastAction = action; MenuBuilder.UpdateAllMenus(gh, mh); do { switch (action.type) { case MenuBuilder.ActionType.Edit: switch (action.data) { case "garage": VehicleUI.RenameGarage(gh, mh); break; case "vehicle": VehicleUI.EditVehicle(action.id, gh, mh); break; } break; case MenuBuilder.ActionType.Delete: switch (action.data) { case "garage": VehicleUI.DeleteGarage(gh, mh); break; case "vehicle": VehicleUI.DeleteVehicle(lastSelectedVehicle, gh, mh); break; } break; case MenuBuilder.ActionType.Create: switch (action.data) { case "garage": VehicleUI.CreateGarage(gh, mh); break; case "vehicle": var newId = VehicleUI.AddVehicle(gh, mh); VehicleUI.EditVehicle(newId, gh, mh); break; } break; case MenuBuilder.ActionType.Search: if (action.data == "regnr") { VehicleUI.Search(gh, mh); } break; case MenuBuilder.ActionType.Route: switch (action.data) { case "save": gh.SaveToDb(); mh.current.Pop(); break; case "load": gh.LoadFromDb(); MenuBuilder.UpdateAllMenus(gh, mh); mh.current.Pop(); break; case "reset": gh.LoadFromSample(); MenuBuilder.UpdateAllMenus(gh, mh); mh.current.Pop(); break; case "clear": gh.FactoryEmptyGarage(); MenuBuilder.UpdateAllMenus(gh, mh); mh.current.Pop(); break; case "groupedVehicleIndex": MenuBuilder.UpdateGroupResult(gh, mh, action.extra); break; default: // Om man valt att gå in i en meny? switch (mh.currentMenu.Name) { case "garageIndex": gh.TrySetGarage(action.id); MenuBuilder.UpdateVehicleMenu(gh, mh); // mh.current.Pop(); // Glöm garagemenyn (hoppa direkt till huvudmenyn på tillbakavägen) mh.current.Push("vehicleIndex"); break; } break; } mh.TryGotoMenu(action.data); break; case MenuBuilder.ActionType.Back: if (mh.current.Count > 1) { mh.GoBack(); } else { action = new MenuAction(Quit, "save"); } break; } // lastAction = action; if (action.type != Quit) { action = ConsoleHelper.RenderMenu(mh.currentMenu); } } while (action.type != Quit); if (action.data == "save") { gh.SaveToDb(); } Console.SetCursorPosition(0, Console.WindowHeight - 2); // We're done }
// Todo: Ej klar! (det ska bli direkt-redigering i fordonsmenyn) internal static void EditVehicle(int id, GarageHandler gh, MenuHandler mh) { var vehicle = (Vehicle)gh.TryGetVehicle(id); if (vehicle == null) { ConsoleHelper.Announce("Kunde inte hitta fordonet med id " + id); return; } ; var action = new MenuAction(); // skrivs över int index = 0; do { Menu editMenu = new Menu("vehicleEdit", "Redigerar fordon", new List <MenuItem> { new MenuItem("Namn: " + vehicle.name, new MenuAction(Noop, "namn")), new MenuItem("Färg: " + vehicle.color, new MenuAction(Noop, "color")), new MenuItem("Vikt: " + vehicle.weight, new MenuAction(Noop, "weight")), new MenuItem("Regnr: " + vehicle.regnr, new MenuAction(Noop, "regnr")), new MenuItem(""), new MenuItem("Ta bort!", new MenuAction(Noop, "deleteVehicle")) }); editMenu.lastIndex = index; action = ConsoleHelper.RenderMenu(editMenu); Console.ForegroundColor = ConsoleColor.Cyan; //index = Console.CursorTop; switch (action.data) { case "namn": Console.SetCursorPosition(0, 3); Console.WriteLine("Ändra namn"); Console.ForegroundColor = mh.settings.ActiveColor; vehicle.name = ConsoleHelper.EditQuestionText("Namn", vehicle.name); index = 0; break; case "color": Console.SetCursorPosition(0, 3); Console.WriteLine("Ändra färg"); Console.SetCursorPosition(0, 5); Console.ForegroundColor = mh.settings.ActiveColor; vehicle.color = ConsoleHelper.EditQuestionText("Färg", vehicle.color); index = 1; break; case "weight": Console.SetCursorPosition(0, 3); Console.WriteLine("Ändra vikt"); Console.SetCursorPosition(0, 6); Console.ForegroundColor = mh.settings.ActiveColor; vehicle.weight = ConsoleHelper.EditQuestionInt("Vikt", vehicle.weight); index = 2; break; case "regnr": Console.SetCursorPosition(0, 3); Console.WriteLine("Ändra regnr"); Console.SetCursorPosition(0, 7); Console.ForegroundColor = mh.settings.ActiveColor; vehicle.regnr = ConsoleHelper.EditQuestionText("Regnr", vehicle.regnr); index = 3; break; case "deleteVehicle": gh.TryDeleteVehicle(vehicle.id); MenuBuilder.UpdateAllMenus(gh, mh); return; } Console.ForegroundColor = mh.settings.PassiveColor; // ConsoleHelper.Announce("type(" + action.type + ") (" + action.data + ") "+ action.id); } while (action.type != MenuBuilder.ActionType.Back); MenuBuilder.UpdateVehicleMenu(gh, mh); }