/* * Bryan * Fitness Menu */ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace bryan_FitnessMenu { public partial class MainForm : Form { private List<Order> Orders = new List<Order>(); private Order CurrentOrder; private Drink CurrentDrink; private bool Resetting = false; /// <summary> /// Constructor /// </summary> public MainForm() { InitializeComponent(); ToggleOptions(false); // Create a new order CreateNewOrder(); // Create a new drink CreateNewDrink(); // Toggle the Buttons ToggleButtons(); } /// <summary> /// Creates a new order /// </summary> private void CreateNewOrder() { CurrentOrder = new Order(); DisplayOrderTotal(); } /// <summary> /// Creates a new drink /// </summary> private void CreateNewDrink() { CurrentDrink = new Drink(); DisplayDrinkPrice(); } /// <summary> /// Resets all the options and does not trigger the EHs /// </summary> private void Reset() { // Block the EH Resetting = true; // Flavors rb_Fruit.Checked = false; rb_Veggie.Checked = false; rb_Pomegranate.Checked = false; rb_Strawberry.Checked = false; rb_Banana.Checked = false; rb_WheatBerry.Checked = false; // Sizes rb_Size_12oz.Checked = false; rb_Size_16oz.Checked = false; rb_Size_20oz.Checked = false; // Extras chk_Extra_CoolDownRemedy.Checked = false; chk_Extra_EnergyBoost.Checked = false; chk_Extra_VitaminPack.Checked = false; // Disable these ToggleOptions(false); // Unblock the EH Resetting = false; } /// <summary> /// Toggles the panels based on bool /// </summary> /// <param name="_option"></param> private void ToggleOptions(bool _option) { panel_Extras.Enabled = _option; panel_Flavors.Enabled = _option; } /// <summary> /// Toggles the buttons based on drinks and orders /// </summary> private void ToggleButtons() { // Buttons btn_AddToOrder.Enabled = CurrentDrink.Flavor != null && CurrentDrink.Size != null; btn_CompleteOrder.Enabled = CurrentOrder.NumberOfDrinks != 0; btn_SummaryReport.Enabled = Orders.Count > 0; // Menu bar smi_AddToOrder.Enabled = CurrentDrink.Flavor != null && CurrentDrink.Size != null; smi_CompleteOrder.Enabled = CurrentOrder.NumberOfDrinks != 0; smi_SummaryReport.Enabled = Orders.Count > 0; } /// <summary> /// Displays the order total on the GUI /// </summary> private void DisplayOrderTotal() { tb_OrderTotal.Text = $"{CurrentOrder.TotalPrice:c}"; } /// <summary> /// Displays the drink total on the GUI /// </summary> private void DisplayDrinkPrice() { tb_Price.Text = $"{CurrentDrink.Price:c}"; } /// <summary> /// Changes the size of the drink based on selection /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SizeCheckedChanged(object sender, EventArgs e) { // Do not fire if we are resetting the board if (Resetting) return; RadioButton rb_Sender = sender as RadioButton; switch (rb_Sender.Name) { case "rb_Size_20oz": CurrentDrink.Size = "20oz"; break; case "rb_Size_16oz": CurrentDrink.Size = "16oz"; break; default: CurrentDrink.Size = "12oz"; break; } // Update the price CurrentDrink.CalculatePrice(); // Update the GUI DisplayDrinkPrice(); // Enable the rest of the options ToggleOptions(true); // Toggle the Buttons ToggleButtons(); } /// <summary> /// Changes the flavor of the drink based on selected option /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FlavorCheckedChanged(object sender, EventArgs e) { // Do not fire if we are resetting the board if (Resetting) return; RadioButton rb_Sender = sender as RadioButton; switch (rb_Sender.Name) { case "rb_Fruit": CurrentDrink.Flavor = "Fruit"; break; case "rb_Veggie": CurrentDrink.Flavor = "Veggie"; break; case "rb_Pomegranate": CurrentDrink.Flavor = "Pomegranate"; break; case "rb_Strawberry": CurrentDrink.Flavor = "Strawberry"; break; case "rb_Banana": CurrentDrink.Flavor = "Banana"; break; default: CurrentDrink.Flavor = "Wheat Berry"; break; } // Toggle the Buttons ToggleButtons(); } /// <summary> /// Adds or Removes a extra based on selected checkbox /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ExtrasCheckedChanged(object sender, EventArgs e) { // Do not fire if we are resetting the board if (Resetting) return; CheckBox rb_Sender = sender as CheckBox; switch (rb_Sender.Name) { case "chk_Extra_VitaminPack": if (rb_Sender.Checked) CurrentDrink.Extras.Add("Vitamin Pack"); else CurrentDrink.Extras.Remove("Vitamin Pack"); break; case "chk_Extra_EnergyBoost": if (rb_Sender.Checked) CurrentDrink.Extras.Add("Energy Boost"); else CurrentDrink.Extras.Remove("Energy Boost"); break; default: if (rb_Sender.Checked) CurrentDrink.Extras.Add("Cool Down Remedy"); else CurrentDrink.Extras.Remove("Cool Down Remedy"); break; } // Update the price CurrentDrink.CalculatePrice(); // Update the GUI DisplayDrinkPrice(); // Toggle the Buttons ToggleButtons(); } /// <summary> /// Exits the application /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Exit(object sender, EventArgs e) { Application.Exit(); } /// <summary> /// Adds a drink to the order and resets the board /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AddToOrder(object sender, EventArgs e) { // Add the drink to our order CurrentOrder.Drinks.Add(CurrentDrink); // Update the order CurrentOrder.CalculatePrice(); // Display it DisplayOrderTotal(); // Reset the board Reset(); // Create a new drink CreateNewDrink(); // Reset these ToggleButtons(); } /// <summary> /// Completes the order and resets the board /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CompleteOrder(object sender, EventArgs e) { // Handle if we started a drink if (CurrentDrink.Size != null) { DialogResult result = MessageBox.Show($"You have an unsaved drink.{Environment.NewLine}If you complete this order, this item will be not included.{Environment.NewLine}Are you sure you want to complete this order?", "Unsaved Drink", MessageBoxButtons.YesNo); // Just exit if this is the case if (result == DialogResult.No) return; } // Add the drink to our order Orders.Add(CurrentOrder); // Create a new order CreateNewOrder(); // Reset the board Reset(); // Create a new drink CreateNewDrink(); // Reset these ToggleButtons(); } /// <summary> /// Creates an order summary report and displays in a message box /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SummaryReport(object sender, EventArgs e) { string formatted = $"SUMMARY REPORT{Environment.NewLine}"; string ordersStr = ""; int numberOfDrinks = 0; double total = 0.00; // Loop through each order foreach (Order _order in Orders) { ordersStr += $"{_order.ToString()}{Environment.NewLine}____________________{Environment.NewLine}"; numberOfDrinks += _order.NumberOfDrinks; total += _order.TotalPrice; } // Add the counts, totals and orders formatted += $"# of Orders: {Orders.Count}{Environment.NewLine}# of Drinks: {numberOfDrinks}{Environment.NewLine}Total: {total:c}{Environment.NewLine}{Environment.NewLine}____________________{Environment.NewLine}{ordersStr}"; // Show the summary report MessageBox.Show(formatted); // Reset the board Reset(); // Create a new drink CreateNewDrink(); // Reset these ToggleButtons(); } /// <summary> /// Changes the font of the title based on selected option /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChangeFont(object sender, EventArgs e) { ToolStripItem tsi_Sender = sender as ToolStripItem; Font newFont; switch (tsi_Sender.Name) { case "smi_Font_Ariel": newFont = new Font("Ariel", 18F); break; case "smi_Font_TimesNewRoman": newFont = new Font("Times New Roman", 18F); break; case "smi_Font_CourierNew": newFont = new Font("Courier New", 18F); break; case "smi_Font_Veranda": newFont = new Font("Veranda", 18F); break; default: newFont = new Font("Segoe UI", 18F); break; } // Change the font of the title lb_Title.Font = newFont; } /// <summary> /// Changes the forecolor based on color selected /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChangeColor(object sender, EventArgs e) { ToolStripItem tsi_Sender = sender as ToolStripItem; Color newColor; switch (tsi_Sender.Name) { case "smi_Color_Yellow": newColor = Color.Yellow; break; case "smi_Color_Red": newColor = Color.Red; break; case "smi_Color_Blue": newColor = Color.Blue; break; case "smi_Color_Green": newColor = Color.Green; break; default: newColor = Color.Black; break; } // Flavors rb_Fruit.ForeColor = newColor; rb_Veggie.ForeColor = newColor; rb_Pomegranate.ForeColor = newColor; rb_Strawberry.ForeColor = newColor; rb_Banana.ForeColor = newColor; rb_WheatBerry.ForeColor = newColor; // Sizes rb_Size_12oz.ForeColor = newColor; rb_Size_16oz.ForeColor = newColor; rb_Size_20oz.ForeColor = newColor; // Extras chk_Extra_CoolDownRemedy.ForeColor = newColor; chk_Extra_EnergyBoost.ForeColor = newColor; chk_Extra_VitaminPack.ForeColor = newColor; } } }