GLMotif::PopupMenu* NanotechConstructionKit::createMainMenu(void) { GLMotif::PopupMenu* mainMenuPopup=new GLMotif::PopupMenu("MainMenuPopup",Vrui::getWidgetManager()); mainMenuPopup->setTitle("Nanotech Construction Kit"); GLMotif::Menu* mainMenu=new GLMotif::Menu("MainMenu",mainMenuPopup,false); GLMotif::Button* centerDisplayButton=new GLMotif::Button("CenterDisplayButton",mainMenu,"Center Display"); centerDisplayButton->getSelectCallbacks().add(this,&NanotechConstructionKit::centerDisplayCallback); GLMotif::CascadeButton* typeSelectionCascade=new GLMotif::CascadeButton("TypeSelectionCascade",mainMenu,"Structural Unit Types"); typeSelectionCascade->setPopup(createTypeSelectionMenu()); GLMotif::CascadeButton* draggingModeCascade=new GLMotif::CascadeButton("DraggingModeCascade",mainMenu,"Dragging Modes"); draggingModeCascade->setPopup(createDraggingModeMenu()); GLMotif::CascadeButton* unitOperationsCascade=new GLMotif::CascadeButton("UnitOperationsCascade",mainMenu,"Unit Operations"); unitOperationsCascade->setPopup(createUnitOperationsMenu()); GLMotif::ToggleButton* overrideToolsToggle=new GLMotif::ToggleButton("OverrideToolsToggle",mainMenu,"Override Tools"); overrideToolsToggle->setToggle(overrideTools); overrideToolsToggle->getValueChangedCallbacks().add(this,&NanotechConstructionKit::overrideToolsToggleValueChangedCallback); GLMotif::CascadeButton* renderTogglesCascade=new GLMotif::CascadeButton("RenderTogglesCascade",mainMenu,"Rendering Modes"); renderTogglesCascade->setPopup(createRenderTogglesMenu()); GLMotif::CascadeButton* ioMenuCascade=new GLMotif::CascadeButton("IoMenuCascade",mainMenu,"I/O Menus"); ioMenuCascade->setPopup(createIoMenu()); GLMotif::ToggleButton* showStatisticsToggle=new GLMotif::ToggleButton("ShowStatisticsToggle",mainMenu,"Show Statistics Dialog"); showStatisticsToggle->getValueChangedCallbacks().add(this,&NanotechConstructionKit::showStatisticsToggleValueChangedCallback); showStatisticsToggle->setToggle(false); GLMotif::Button* createInputDeviceButton=new GLMotif::Button("CreateInputDeviceButton",mainMenu,"Create Input Device"); createInputDeviceButton->getSelectCallbacks().add(this,&NanotechConstructionKit::createInputDeviceCallback); mainMenu->manageChild(); return mainMenuPopup; }
GLMotif::PopupMenu* HelloVrui::createMainMenu(void) { /* Create a top-level shell for the main menu: */ GLMotif::PopupMenu* mainMenuPopup=new GLMotif::PopupMenu("MainMenuPopup",Vrui::getWidgetManager()); mainMenuPopup->setTitle("Interactive Globe"); /* Create the actual menu inside the top-level shell: */ GLMotif::Menu* mainMenu=new GLMotif::Menu("MainMenu",mainMenuPopup,false); /* Create a cascade button to show the "Rendering Modes" submenu: */ GLMotif::CascadeButton* renderTogglesCascade=new GLMotif::CascadeButton("RenderTogglesCascade",mainMenu,"Rendering Modes"); renderTogglesCascade->setPopup(createRenderTogglesMenu()); /* Create a button to reset the navigation coordinates to the default (showing the entire Earth): */ GLMotif::Button* centerDisplayButton=new GLMotif::Button("CenterDisplayButton",mainMenu,"Center Display"); centerDisplayButton->getSelectCallbacks().add(this,&HelloVrui::centerDisplayCallback); /* Calculate the main menu's proper layout: */ mainMenu->manageChild(); /* Return the created top-level shell: */ return mainMenuPopup; }