Source of test_menu1.cpp


  1: //test_menu1.cpp
  2: //A test driver for the Scobey::Menu class.
  3: //Illustrates the construction and use of several Menu objects.

  5: #include <iostream>
  6: #include <string>
  7: using namespace std;

  9: #include "utilities.h"
 10: using Scobey::Menu;
 11: using Scobey::Pause;

 13: int main()
 14: {
 15:     Pause(0, "\nTesting the Scobey::Menu class ..."
 16:         "\n\nFirst we declare a default Menu object, "
 17:         "and then display it.");
 18:     Menu menu1;
 19:     menu1.display();
 20:     Pause();

 22:     Pause(0, "Next we declare a second menu object, this time "
 23:         "initializing it with a title.\nThen we add several options, "
 24:         "displaying the menu after adding each one.\nAs we do this, "
 25:         "notice how the menu display remains \"centered\".");
 26:     Menu menu2("Main Menu");
 27:     menu2.display();
 28:     Pause();
 29:     menu2.addOption("Quit");
 30:     menu2.display();
 31:     Pause();
 32:     menu2.addOption("Get information");
 33:     menu2.display();
 34:     Pause();
 35:     menu2.addOption("Do something");
 36:     menu2.display();
 37:     Pause();
 38:     menu2.addOption("Do something really, really very long and involved");
 39:     menu2.display();
 40:     Pause();

 42:     Pause(0, "Now we loop while the user does not choose the Quit option, "
 43:         "i.e., while the\nuser does not choose option 1 from the menu, "
 44:         "and while the user does not enter\n3 invalid options in a row.");
 45:     int menuChoice;
 46:     bool finished;
 47:     do
 48:     {
 49:         menu2.display();
 50:         menuChoice = menu2.getChoice();
 51:         finished = (menuChoice == 1  ||  menuChoice == -1);
 52:         switch (menuChoice)
 53:         {
 54:         case -1:
 55:         case  1:
 56:             cout << "Now quitting from this menu.\n";
 57:             break;
 58:         case 2:
 59:             cout << "Now getting information.\n";
 60:             break;
 61:         case 3:
 62:             cout << "Now doing something.\n";
 63:             break;
 64:         case 4:
 65:             cout << "Now doing something really, really "
 66:                 "very long and involved.\n";
 67:             break;
 68:         }
 69:         Pause();
 70:     }
 71:     while (!finished);


 74:     Pause(0, "Now we create a third menu with 20 options (the "
 75:         "maximum number). Note how the\nperiods following the option "
 76:         "numbers line up, and continue to line up when the\noption "
 77:         "number goes from one digit to two digits.");
 78:     Menu menu3("Test Menu");
 79:     menu3.addOption("Option 1 permits you to quit");
 80:     menu3.addOption("Option 2 allows you to do this");
 81:     menu3.addOption("Option 3 lets you do something just a bit longer");
 82:     menu3.addOption("Option 4 just lets you do it");
 83:     menu3.addOption("Option 5 lets you do that");
 84:     menu3.addOption("Option 6 lets you do it now, not later");
 85:     menu3.addOption("Option 7 lets you do whatever");
 86:     menu3.addOption("Option 8 requires you to do it quickly if you can");
 87:     menu3.addOption("Option 9 lets you do it and take your time");
 88:     menu3.addOption("Option 10 lets you do it over and over again");
 89:     menu3.addOption("Option 11 lets you do it with style");
 90:     menu3.addOption("Option 12 requires it to be done by Monday");
 91:     menu3.addOption("Option 13 asks that you do it next week");
 92:     menu3.addOption("Option 14 demands that it be done yesterday");
 93:     menu3.addOption("Option 15 doesn't care if it's done at all");
 94:     menu3.addOption("Option 16 lets you do it whenever you like");
 95:     menu3.addOption("Option 17 requires it to happen every Friday");
 96:     menu3.addOption("Option 18 suggests you do it Sundays and Mondays");
 97:     menu3.addOption("Option 19 asks for a full report in the morning");
 98:     menu3.addOption("Option 20 asks you to undo it");
 99:     menu3.display();
100:     Pause();

102:     Pause(0, "Now we loop again, and once again we continue while "
103:         "the user does not choose\nthe Quit option, and while the user "
104:         "does not enter 2 invalid options in a row\n(last time it was 3, "
105:         "remember). Note that the user prompt is different this\ntime as "
106:         "well. So, observe that the client can change both the maximum "
107:         "number\nof tries the user is allowed when trying to make a valid "
108:         "menu choice, as well\nas the user prompt.");
109:     do
110:     {
111:         menu3.display();
112:         menuChoice = menu3.getChoice(2, "Enter choice here: ");
113:         finished = (menuChoice == 1  ||  menuChoice == -1);
114:         cout << "\nThe menu choice returned was " << menuChoice << ".\n";
115:         Pause();
116:     }
117:     while (!finished);


120:     Pause(0, "Now create a fourth menu, again with 20 options and, "
121:         "on this occasion, a very\nlong title. Note the position of "
122:         "that title on the line. Study the source\ncode to see how the "
123:         "options are created and added, even though the technique\nis "
124:         "not particularly useful, except in situations like this.");
125:     Menu menu4("Another Test Menu with a Very, Very, Very, "
126:         "Very Long Title");
127:     string commonText("Option "), newOption;
128:     for (int i=1; i<=20; i++)
129:     {
130:         newOption = (i>9) ? commonText + char('0' + i/10) : commonText;
131:         newOption = newOption + char('0' + i%10);
132:         menu4.addOption(newOption);
133:     }
134:     menu4.display();
135:     Pause();


138:     Pause(0, "Finally, we create a fifth, rather bizarre menu, "
139:         "as one more example to show\nthat its display is at least "
140:         "reasonable. We show the menu before, and after,\nadding "
141:         "the last option, which is again very long.");
142:     Menu menu5("A Final Test Menu with a Very, Very, Very, Very Long Title");
143:     for (int i=1; i<=19; i++)
144:     {
145:         newOption = (i>9) ? commonText + char('0'+i/10) : commonText;
146:         newOption = newOption + char('0' + i%10);
147:         menu5.addOption(newOption);
148:     }
149:     menu5.display();
150:     Pause();
151:     menu5.addOption("And this of course is a very, very, very long option");
152:     menu5.display();
153:     Pause();

155:     Pause(0, "No more tests to perform."
156:         "\nProgram will now terminate.");
157: }