- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/TextUI/TextWindow.cpp
r0af7ef rd17f3d 21 21 22 22 #include <boost/bind.hpp> 23 #include <boost/shared_ptr.hpp>24 23 25 #include "Menu/ TextMenu/TextMenu.hpp"26 #include "Menu/TextMenu /TxMenu.hpp"27 #include "Menu/ TextMenu/ActionMenuItem.hpp"28 #include "Menu/ TextMenu/SeperatorItem.hpp"29 #include "Menu/ TextMenu/DisplayMenuItem.hpp"30 #include "Menu/ TextMenu/SubMenuItem.hpp"24 #include "Menu/Menu.hpp" 25 #include "Menu/TextMenu.hpp" 26 #include "Menu/ActionMenuItem.hpp" 27 #include "Menu/SeperatorItem.hpp" 28 #include "Menu/DisplayMenuItem.hpp" 29 #include "Menu/SubMenuItem.hpp" 31 30 #include "TextUI/TextStatusIndicator.hpp" 32 31 #include "TextUI/TextWindow.hpp" 32 #include "Actions/MapOfActions.hpp" 33 33 #include "Actions/MethodAction.hpp" 34 34 #include "Actions/ErrorAction.hpp" 35 35 #include "Actions/ActionRegistry.hpp" 36 #include "Actions/ActionTraits.hpp"37 36 #include "Parser/ChangeTracker.hpp" 38 37 #include "Views/StreamStringView.hpp" … … 56 55 TextWindow::TextWindow() 57 56 { 57 map <std::string, TextMenu *> NametoTextMenuMap; 58 std::set <char> ShortcutList; 59 // reserve s for save and q for quite 60 ShortcutList.insert('s'); 61 ShortcutList.insert('q'); 62 63 // populate all actions 64 MapOfActions::getInstance().populateActions(); 65 58 66 // build the main menu 59 main_menu = new TextMenu<TxMenu>(std::cout, ""); 60 // reserve s for save and q for quite 61 main_menu->reserveShortcut('s', "output"); 62 main_menu->reserveShortcut('q', "quit"); 67 main_menu = new TextMenu(Log() << Verbose(0), "Main Menu"); 63 68 64 69 moleculeView = new StreamStringView(boost::bind(&MoleculeListClass::Enumerate,World::getInstance().getMolecules(),_1)); 65 new DisplayMenuItem(main_menu ->getMenuInstance(),moleculeView,"Molecule List");70 new DisplayMenuItem(main_menu,moleculeView,"Molecule List"); 66 71 67 new SeperatorItem(main_menu ->getMenuInstance());72 new SeperatorItem(main_menu); 68 73 69 main_menu->init(); 74 Action* undoAction = ActionRegistry::getInstance().getActionByName("undo"); 75 new ActionMenuItem(getSuitableShortForm(ShortcutList,"Undo last operation"),"Undo last operation",main_menu,undoAction); 70 76 71 new SeperatorItem(main_menu->getMenuInstance()); 77 Action* redoAction = ActionRegistry::getInstance().getActionByName("redo"); 78 new ActionMenuItem(getSuitableShortForm(ShortcutList,"Redo last operation"),"Redo last operation",main_menu,redoAction); 79 80 new SeperatorItem(main_menu); 81 82 for(map<std::string, pair<std::string,std::string> >::iterator iter = MapOfActions::getInstance().MenuDescription.begin(); iter != MapOfActions::getInstance().MenuDescription.end(); ++iter) { 83 TextMenu *Menu = new TextMenu(Log() << Verbose(0), iter->second.second); 84 NametoTextMenuMap.insert( pair <std::string, TextMenu *> (iter->first, Menu) ); 85 new SubMenuItem(getSuitableShortForm(ShortcutList,iter->first),iter->second.first.c_str(),main_menu,Menu); 86 } 87 88 new SeperatorItem(main_menu); 72 89 73 90 // save has reserved key 's' 74 //Action *saveConfigAction = ActionRegistry::getInstance().getActionByName("output");75 new ActionMenuItem('s',"save current setup to config files",main_menu ->getMenuInstance(),"output");91 Action *saveConfigAction = ActionRegistry::getInstance().getActionByName("output"); 92 new ActionMenuItem('s',"save current setup to config files",main_menu,saveConfigAction); 76 93 77 // create a specific quit action for this UI and store in registry 78 ActionTraits quitTrait(OptionTrait("quit", &typeid(void), "quits the program")); 79 quitAction = new MethodAction(quitTrait,boost::bind(&TxMenu::doQuit,main_menu->getMenuInstance()),true); 80 new ActionMenuItem('q',"quit",main_menu->getMenuInstance(),"quit"); 94 quitAction = new MethodAction("quitAction",boost::bind(&TextMenu::doQuit,main_menu),false); 95 new ActionMenuItem('q',"quit",main_menu,quitAction); 96 97 // quit has reserved key 'q' 98 // go through all menus and create them 99 for (map <std::string, TextMenu *>::iterator MenuRunner = NametoTextMenuMap.begin(); MenuRunner != NametoTextMenuMap.end(); ++MenuRunner) 100 populateMenu(MenuRunner->second, MenuRunner->first); 81 101 82 102 // Add status indicators etc... 103 83 104 statusIndicator = new TextStatusIndicator(); 84 105 } … … 86 107 TextWindow::~TextWindow() 87 108 { 88 for (std::list<Action *>::iterator iter = returnFromActions.begin(); !returnFromActions.empty(); ++iter) 89 delete (*iter); 90 returnFromActions.clear(); 109 delete quitAction; 91 110 delete moleculeView; 92 111 delete statusIndicator; … … 98 117 } 99 118 119 char TextWindow::getSuitableShortForm(std::set <char> &ShortcutList, const std::string name) const 120 { 121 for (std::string::const_iterator CharRunner = name.begin(); CharRunner != name.end(); ++CharRunner) { 122 if (ShortcutList.find(*CharRunner) == ShortcutList.end()) { 123 ShortcutList.insert(*CharRunner); 124 return *CharRunner; 125 } 126 } 127 // if no letter matches, take digits 128 int i=0; 129 for (;i<10;++i) { 130 if (ShortcutList.find((char)i + '0') == ShortcutList.end()) 131 break; 132 } 133 if (i != 10) { 134 ShortcutList.insert((char)i + '0'); 135 return ((char)i + '0'); 136 } else { 137 DoeLog(1) && (eLog() << Verbose(1) << "Could not find a suitable shortform for " << name << "." << endl); 138 return '#'; 139 } 140 } 141 142 void TextWindow::populateMenu(TextMenu* Menu, const std::string &MenuName) 143 { 144 Action *ActionItem = NULL; 145 set <char> ShortcutList; 146 // reserve 'q' for quit 147 ShortcutList.insert('q'); 148 // through all actions for this menu 149 pair < multimap <std::string, std::string>::iterator, multimap <std::string, std::string>::iterator > MenuActions = MapOfActions::getInstance().MenuContainsActionMap.equal_range(MenuName); 150 for (multimap <std::string, std::string>::const_iterator MenuRunner = MenuActions.first; MenuRunner != MenuActions.second; ++MenuRunner) { 151 ActionItem = ActionRegistry::getInstance().getActionByName(MenuRunner->second); 152 new ActionMenuItem(getSuitableShortForm(ShortcutList, MenuRunner->second),MapOfActions::getInstance().getDescription(MenuRunner->second).c_str(),Menu,ActionItem); 153 } 154 // finally add default quit item 155 Action *returnFromAction = new TextMenu::LeaveAction(Menu); 156 MenuItem *returnFromItem = new ActionMenuItem('q',"return to Main menu",Menu,returnFromAction); 157 Menu->addDefault(returnFromItem); 158 }
Note:
See TracChangeset
for help on using the changeset viewer.