static Cashier BuildSelectionOptions(FoodObject[] foodObjects) { Cashier cashierScreen = new Cashier(); const int Y_ITEM_SEPARATION = 120; const int X_ITEM_SEPARATION = 300; const int BUTTON_PICTURE_SEPARATION = 110; const int GROUP_BOX_X_INITIAL = 40; const int GROUP_BOX_Y_INITIAL = 80; const int X_INITIAL_POSITION = 10; const int Y_INITIAL_POSITION = 20; const int Y_LABEL_SEPARATION = 40; int saladStartingX = 0; int saladStartingY = 0; int drinkStartingX = 0; int drinkStartingY = 0; int dessertStartingX = 0; int dessertStartingY = 0; int numOfSalads = 0; int numOfDrinks = 0; int numOfDesserts = 0; for (int i = 0; i < 3; i++) { const int GROUP_BOX_X_SIZE = 230; const int GROUP_BOX_Y_PER_ITEM = X_INITIAL_POSITION + 100 + 15; switch (i) { case 0: { int sizeY = (GROUP_BOX_Y_PER_ITEM * saladCount) + (Y_LABEL_SEPARATION * 3); int sizeX = GROUP_BOX_X_SIZE; int xPos = GROUP_BOX_X_INITIAL; int yPos = GROUP_BOX_Y_INITIAL; cashierScreen.addGroupBoxes(xPos, yPos, "Salads", i, sizeX, sizeY); break; } case 1: { int sizeY = (GROUP_BOX_Y_PER_ITEM * drinkCount) + (Y_LABEL_SEPARATION * 3); int sizeX = GROUP_BOX_X_SIZE; int xPos = GROUP_BOX_X_INITIAL + X_ITEM_SEPARATION; int yPos = GROUP_BOX_Y_INITIAL; cashierScreen.addGroupBoxes(xPos, yPos, "Drinks", i, sizeX, sizeY); break; } case 2: { int sizeY = (GROUP_BOX_Y_PER_ITEM * dessertCount) + (Y_LABEL_SEPARATION * 3); int sizeX = GROUP_BOX_X_SIZE; int xPos = GROUP_BOX_X_INITIAL + (X_ITEM_SEPARATION * 2); int yPos = GROUP_BOX_Y_INITIAL; cashierScreen.addGroupBoxes(xPos, yPos, "Desserts", i, sizeX, sizeY); break; } } } // Create the Dynamic GroupBoxes for (int i = 0; i < foodObjects.Length; i++) { //WriteLine("Object {0} with classification {1} and name {2} is being processed", i, foodObjects[i].Classification, foodObjects[i].Name); switch (foodObjects[i].Classification) { case 1: if (numOfSalads == 0) // If this is the first salad { saladStartingX = X_INITIAL_POSITION; saladStartingY = Y_INITIAL_POSITION; } else { saladStartingY += Y_ITEM_SEPARATION; } cashierScreen.addRadioButton(saladStartingX, saladStartingY, foodObjects[i].Name, 0); cashierScreen.addPictureBox(saladStartingX + BUTTON_PICTURE_SEPARATION, saladStartingY, foodObjects[i].Name, foodObjects[i].PhotoLocation, 0); numOfSalads++; cashierScreen.IncrementCurrentItemCount(); break; case 2: if (numOfDrinks == 0) { drinkStartingX = X_INITIAL_POSITION; drinkStartingY = Y_INITIAL_POSITION; } else { drinkStartingY += Y_ITEM_SEPARATION; } cashierScreen.addRadioButton(drinkStartingX, drinkStartingY, foodObjects[i].Name, 1); cashierScreen.addPictureBox(drinkStartingX + BUTTON_PICTURE_SEPARATION, drinkStartingY, foodObjects[i].Name, foodObjects[i].PhotoLocation, 1); numOfDrinks++; break; case 3: if (numOfDesserts == 0) { dessertStartingX = X_INITIAL_POSITION; dessertStartingY = Y_INITIAL_POSITION; } else { dessertStartingY += Y_ITEM_SEPARATION; } cashierScreen.addRadioButton(dessertStartingX, dessertStartingY, foodObjects[i].Name, 2); cashierScreen.addPictureBox(dessertStartingX + BUTTON_PICTURE_SEPARATION, dessertStartingY, foodObjects[i].Name, foodObjects[i].PhotoLocation, 2); numOfDesserts++; break; default: WriteLine("ERROR: Object {0} of name {1} does not have a classification", i, foodObjects[i].Name); break; } } // Create the Dynamic RadioButtons and PictureBoxes for (int i = 0; i < 3; i++) { switch (i) { case 0: saladStartingY += Y_ITEM_SEPARATION; cashierScreen.AddPriceLabel(saladStartingX, saladStartingY, "Salad Price", 0); saladStartingY += Y_LABEL_SEPARATION; cashierScreen.AddQuantityLabel(saladStartingX, saladStartingY, "Quantity", 0); saladStartingX += BUTTON_PICTURE_SEPARATION; cashierScreen.AddQuantityTextBox(saladStartingX, saladStartingY, 0); saladStartingY -= Y_LABEL_SEPARATION; cashierScreen.AddPriceTextBox(saladStartingX, saladStartingY, 0); saladStartingX -= BUTTON_PICTURE_SEPARATION; saladStartingY += (Y_LABEL_SEPARATION * 2); cashierScreen.AddSelectionLabel(saladStartingX, saladStartingY, 0); break; case 1: drinkStartingY += Y_ITEM_SEPARATION; cashierScreen.AddPriceLabel(drinkStartingX, drinkStartingY, "Drink Price", 1); drinkStartingY += Y_LABEL_SEPARATION; cashierScreen.AddQuantityLabel(drinkStartingX, drinkStartingY, "Quantity", 1); drinkStartingX += BUTTON_PICTURE_SEPARATION; cashierScreen.AddQuantityTextBox(drinkStartingX, drinkStartingY, 1); drinkStartingY -= Y_LABEL_SEPARATION; cashierScreen.AddPriceTextBox(drinkStartingX, drinkStartingY, 1); drinkStartingX -= BUTTON_PICTURE_SEPARATION; drinkStartingY += (Y_LABEL_SEPARATION * 2); cashierScreen.AddSelectionLabel(drinkStartingX, drinkStartingY, 1); break; case 2: dessertStartingY += Y_ITEM_SEPARATION; cashierScreen.AddPriceLabel(dessertStartingX, dessertStartingY, "Salad Price", 2); dessertStartingY += Y_LABEL_SEPARATION; cashierScreen.AddQuantityLabel(dessertStartingX, dessertStartingY, "Quantity", 2); dessertStartingX += BUTTON_PICTURE_SEPARATION; cashierScreen.AddQuantityTextBox(dessertStartingX, dessertStartingY, 2); dessertStartingY -= Y_LABEL_SEPARATION; cashierScreen.AddPriceTextBox(dessertStartingX, dessertStartingY, 2); dessertStartingX -= BUTTON_PICTURE_SEPARATION; dessertStartingY += (Y_LABEL_SEPARATION * 2); cashierScreen.AddSelectionLabel(dessertStartingX, dessertStartingY, 2); break; } } // Create the Dynamic Price and quanitity Labels and TextBoxes return(cashierScreen); }