- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/TextUI/TextWindow.cpp
rd17f3d r0af7ef 21 21 22 22 #include <boost/bind.hpp> 23 #include <boost/shared_ptr.hpp> 23 24 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"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" 30 31 #include "TextUI/TextStatusIndicator.hpp" 31 32 #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" 36 37 #include "Parser/ChangeTracker.hpp" 37 38 #include "Views/StreamStringView.hpp" … … 55 56 TextWindow::TextWindow() 56 57 { 57 map <std::string, TextMenu *> NametoTextMenuMap;58 std::set <char> ShortcutList;58 // build the main menu 59 main_menu = new TextMenu<TxMenu>(std::cout, ""); 59 60 // 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 66 // build the main menu 67 main_menu = new TextMenu(Log() << Verbose(0), "Main Menu"); 61 main_menu->reserveShortcut('s', "output"); 62 main_menu->reserveShortcut('q', "quit"); 68 63 69 64 moleculeView = new StreamStringView(boost::bind(&MoleculeListClass::Enumerate,World::getInstance().getMolecules(),_1)); 70 new DisplayMenuItem(main_menu ,moleculeView,"Molecule List");65 new DisplayMenuItem(main_menu->getMenuInstance(),moleculeView,"Molecule List"); 71 66 72 new SeperatorItem(main_menu );67 new SeperatorItem(main_menu->getMenuInstance()); 73 68 74 Action* undoAction = ActionRegistry::getInstance().getActionByName("undo"); 75 new ActionMenuItem(getSuitableShortForm(ShortcutList,"Undo last operation"),"Undo last operation",main_menu,undoAction); 69 main_menu->init(); 76 70 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); 71 new SeperatorItem(main_menu->getMenuInstance()); 89 72 90 73 // save has reserved key 's' 91 Action *saveConfigAction = ActionRegistry::getInstance().getActionByName("output");92 new ActionMenuItem('s',"save current setup to config files",main_menu ,saveConfigAction);74 // Action *saveConfigAction = ActionRegistry::getInstance().getActionByName("output"); 75 new ActionMenuItem('s',"save current setup to config files",main_menu->getMenuInstance(),"output"); 93 76 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); 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"); 101 81 102 82 // Add status indicators etc... 103 104 83 statusIndicator = new TextStatusIndicator(); 105 84 } … … 107 86 TextWindow::~TextWindow() 108 87 { 109 delete quitAction; 88 for (std::list<Action *>::iterator iter = returnFromActions.begin(); !returnFromActions.empty(); ++iter) 89 delete (*iter); 90 returnFromActions.clear(); 110 91 delete moleculeView; 111 92 delete statusIndicator; … … 117 98 } 118 99 119 char TextWindow::getSuitableShortForm(std::set <char> &ShortcutList, const std::string name) const120 {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 digits128 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 quit147 ShortcutList.insert('q');148 // through all actions for this menu149 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 item155 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.