/* * Simple program that demonstrates InterViews pull-down menus and pull-right * menus. This version adds and deletes new pull-downs dynamically. */ #include #include #include #include #include #include #include "std-macros.h" static exception Exit; static PulldownMenu *bmenu, *smenu, *dmenu, *cmenu, *emenu, *omenu; static PullrightMenu *brmenu; static MenuBar *menubar1, *menubar2; static VBox* vb; static HBox* hb; static Tray* t; static World* world; class SingleBurgerSelection : public MenuItem { void Do(); }; class DoubleBurgerSelection : public MenuItem { void Do(); }; class ChiliBurgerSelection : public MenuItem { void Do(); }; class FatBurgerSelection : public MenuItem { void Do(); }; class SLOBurgerSelection : public MenuItem { void Do(); }; class FriesSelection : public MenuItem { void Do(); }; class OnionRingsSelection : public MenuItem { void Do(); }; class SmallSideOrderSelection : public MenuItem { void Do(); }; class MediumSideOrderSelection : public MenuItem { void Do(); }; class LargeSideOrderSelection : public MenuItem { void Do(); }; class CokeSelection : public MenuItem { void Do(); }; class DietCokeSelection : public MenuItem { void Do(); }; class SpriteSelection : public MenuItem { void Do(); }; class WaterSelection : public MenuItem { void Do(); }; class ChangeSelection : public MenuItem { void Do(); }; class ChangeBackSelection : public MenuItem { void Do(); }; class YesReallySelection : public MenuItem { void Do(); }; class NoJustKiddingSelection : public MenuItem { void Do(); }; void SingleBurgerSelection::Do() { printf("In RegularSingleBurgerSelection.\n"); } void DoubleBurgerSelection::Do() { printf("In RegularDoubleBurgerSelection.\n"); } void ChiliBurgerSelection::Do() { printf("In ChiliBurgerSelection.\n"); } void FatBurgerSelection::Do() { printf("In FatBurgerSelection.\n"); } void SLOBurgerSelection::Do() { printf("In SLOBurgerSelection.\n"); } void FriesSelection::Do() { printf("In FriesSelection.\n"); } void OnionRingsSelection::Do() { printf("In OnionRingsSelection.\n"); } void SmallSideOrderSelection::Do() { printf("In SmallSideOrderSelection.\n"); } void MediumSideOrderSelection::Do() { printf("In MediumSideOrderSelection.\n"); } void LargeSideOrderSelection::Do() { printf("In LargeSideOrderSelection.\n"); } void CokeSelection::Do() { printf("In CokeSelection.\n"); } void DietCokeSelection::Do() { printf("In DietCokeSelection.\n"); } void SpriteSelection::Do() { printf("In SpriteSelection.\n"); } void WaterSelection::Do() { printf("In WaterSelection.\n"); } void ChangeSelection::Do() { hb->Remove(menubar1); hb->Insert(menubar2); menubar1->Reconfig(); menubar2->Reconfig(); hb->Reconfig(); vb->Reconfig(); /*t->Reconfig();*/ hb->GetWorld()->Reconfig(); world->Reconfig(); menubar1->Config(world); menubar2->Config(world); hb->Config(world); /* vb->Config(world); t->Config(world); hb->GetWorld()->Config(world); world->Config(); */ /* menubar1->Redraw(); menubar2->Redraw(); hb->Redraw(); vb->Redraw(); t->Redraw(); hb->GetWorld()->Redraw(); world->Redraw(); */ /* menubar1->Draw(); menubar2->Draw(); hb->Draw(); vb->Draw(); t->Draw(); hb->GetWorld()->Draw(); world->Draw(); */ /* menubar1->Resize(); menubar2->Resize(); hb->Resize(); vb->Resize(); t->Resize(); hb->GetWorld()->Resize(); world->Resize(); */ } void ChangeBackSelection::Do() { hb->Remove(menubar2); hb->Insert(menubar1); menubar1->Reconfig(); menubar2->Reconfig(); hb->Reconfig(); vb->Reconfig(); /*t->Reconfig();*/ hb->GetWorld()->Reconfig(); hb->GetWorld()->Config(); t->Config(t->GetWorld()); world->Draw(); } void YesReallySelection::Do() { throw(Exit, NULL); } void NoJustKiddingSelection::Do() { } Interactor *BuildMenuBar() { menubar1 = new MenuBar; menubar2 = new MenuBar; bmenu = new PulldownMenu(" Burgers "); brmenu = new PullrightMenu("Regular ==>"); smenu = new PulldownMenu(" Sides "); dmenu = new PulldownMenu(" Drinks "); cmenu = new PulldownMenu(" Change "); emenu = new PulldownMenu(" Exit "); omenu = new PulldownMenu(" Other "); /* * Put a pull-right in the Regular selection, with double, single * selections. */ brmenu->Include(new SingleBurgerSelection("Single")); brmenu->Include(new DoubleBurgerSelection("Double")); bmenu->Include(brmenu); bmenu->Include(new ChiliBurgerSelection("Chili Burger")); bmenu->Include(new FatBurgerSelection("Fat Burger")); bmenu->Include(new SLOBurgerSelection("SLO Burger")); smenu->Include(new FriesSelection("Fries")); smenu->Include(new OnionRingsSelection("OnionRings")); dmenu->Include(new CokeSelection("Coke")); dmenu->Include(new DietCokeSelection("Diet")); dmenu->Include(new SpriteSelection("Sprite")); dmenu->Include(new WaterSelection("Water")); cmenu->Include(new ChangeSelection("Change")); cmenu->Include(new ChangeSelection("Change Back")); emenu->Include(new YesReallySelection("Yes Really")); emenu->Include(new NoJustKiddingSelection("No, Just Kidding")); omenu->Include(new NoJustKiddingSelection("No, Just Kidding")); menubar1->Include(bmenu); menubar1->Include(smenu); menubar1->Include(dmenu); menubar1->Include(cmenu); menubar1->Include(emenu); menubar2->Include(bmenu); menubar2->Include(smenu); menubar2->Include(cmenu); menubar2->Include(omenu); return menubar1; } static PropertyData properties[] = { { "menu*title", "Menu Test" }, { nil } }; static OptionDesc options[] = { { "-title", "menu*title", OptionValueNext }, { nil } }; int main (int argc, char* argv[]) { world = new World("menu", properties, options, argc, argv); t = new Tray(); t-> Insert(menubar1 = BuildMenuBar()); world->InsertApplication(t); if (! catch(Exit)) { world->Run(); } delete world; return 0; }