Thursday, September 19, 2024 9:06:41 PM
> settings

Customize


Authenticate

> Form1.cs
/*
 * 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;
        }
    }
}
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b