private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Changing the tab (table) essentially assigns the selectedTable variable

            // trap door the event if we are midway through an order or if the table
            // has already ordered

            if (newOrder != null)
                return;

            selectedSeat = null;

            TabControl selectedTab = (TabControl)sender;

            selectedTable = tables[selectedTab.SelectedIndex];

            // trapdoor the event if the table has already ordered
            // this has to be done after the selectedTable var is
            // updated or a subtle bug is introduced

            if (selectedTable.OrderPlaced == true)
                return;

            // The selected table has its seats added to the 'seated' arraylist
            // for the table object. The seats are disabled in preparation
            // for when the start new order button is hit

            foreach (Control ctrl in tabControl1.SelectedTab.Controls)
            {
                if (ctrl is Seat)
                {
                    if (selectedTable.seated.Count < 4)
                    {
                        selectedTable.seated.Add((Seat)ctrl);
                        ctrl.Enabled = false;
                    }
                }
            }
            selectedTable.Waiter = labelWaiter.Text;

            // a new order may now be raised

            buttonStartOrder.Enabled = true;
        }
        private void initObjects()
        {
            // We create an object to manage all the local database interactions

            ldp = new LocalDataProcessor();
            wsp = new WebServiceProcessor();

            // Create 10 tables

            for (int i = 0; i < 10; i++)
            {
                tables[i] = new Table(i);
            }

            selectedTable = tables[0];

            // to handle seat color changes the table class has a
            // an arraylist called 'seated' full of seat objects
            // they are added here

            foreach (Control ctrl in tabControl1.TabPages[0].Controls)
            {
                if (ctrl is Seat)
                {
                    if (selectedTable.seated.Count <= 4)
                        selectedTable.seated.Add((Seat)ctrl);
                }
            }

            // What meal is unavailable today? We read in the first
            // entry from a flat 'UnavailableMeals.txt' file here

            string getLocation = Directory.GetCurrentDirectory();

            FileStream fs =
                new FileStream(getLocation + "\\UnavailableMeals.txt", FileMode.OpenOrCreate, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);

            string offMeals = sr.ReadLine();
            int offMealNo = int.Parse(offMeals.Substring(0,1));

            sr.Close();

            // write out the stream without the off meal

            fs = new FileStream(getLocation + "\\UnavailableMeals.txt", FileMode.Create, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);

            sw.Write(offMeals.Substring(1));
            sw.Close();
            fs.Close();

            // and notify the user

            listBoxSummary.Items.Add(listBoxMeals.Items[offMealNo] + " is unavailable");

            // The meal must now be taken off the menu

            listBoxMeals.Items.RemoveAt(offMealNo);
        }