Changeset b59da6 for src/UIElements/TextUI
- Timestamp:
- Dec 4, 2010, 11:33:47 PM (15 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 0af7ef
- Parents:
- 5813ac
- git-author:
- Frederik Heber <heber@…> (11/08/10 09:36:45)
- git-committer:
- Frederik Heber <heber@…> (12/04/10 23:33:47)
- Location:
- src/UIElements/TextUI
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/TextUI/TextWindow.cpp
r5813ac rb59da6 23 23 #include <boost/shared_ptr.hpp> 24 24 25 #include "Menu/Menu.hpp" 26 #include "Menu/MenuDescription.hpp" 27 #include "Menu/TextMenu.hpp" 28 #include "Menu/ActionMenuItem.hpp" 29 #include "Menu/SeperatorItem.hpp" 30 #include "Menu/DisplayMenuItem.hpp" 31 #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" 32 31 #include "TextUI/TextStatusIndicator.hpp" 33 32 #include "TextUI/TextWindow.hpp" … … 57 56 TextWindow::TextWindow() 58 57 { 59 map <std::string, TextMenu *> NametoTextMenuMap;60 std::set <char> ShortcutList;58 // build the main menu 59 main_menu = new TextMenu<TxMenu>(std::cout, ""); 61 60 // reserve s for save and q for quite 62 ShortcutList.insert('s'); 63 ShortcutList.insert('q'); 64 65 // build the main menu 66 main_menu = new TextMenu(Log() << Verbose(0), "Main Menu"); 61 main_menu->reserveShortcut('s', "output"); 62 main_menu->reserveShortcut('q', "quit"); 67 63 68 64 moleculeView = new StreamStringView(boost::bind(&MoleculeListClass::Enumerate,World::getInstance().getMolecules(),_1)); 69 new DisplayMenuItem(main_menu ,moleculeView,"Molecule List");65 new DisplayMenuItem(main_menu->getMenuInstance(),moleculeView,"Molecule List"); 70 66 71 new SeperatorItem(main_menu );67 new SeperatorItem(main_menu->getMenuInstance()); 72 68 73 Action* undoAction = ActionRegistry::getInstance().getActionByName("undo"); 74 new ActionMenuItem(getSuitableShortForm(ShortcutList,"Undo last operation"),"Undo last operation",main_menu,undoAction); 69 main_menu->init(); 75 70 76 Action* redoAction = ActionRegistry::getInstance().getActionByName("redo"); 77 new ActionMenuItem(getSuitableShortForm(ShortcutList,"Redo last operation"),"Redo last operation",main_menu,redoAction); 78 79 new SeperatorItem(main_menu); 80 81 MenuDescription menudescriptions; 82 for(MenuDescription::const_iterator iter = menudescriptions.getBeginIter(); iter != menudescriptions.getEndIter(); ++iter) { 83 const std::string &MenuName = iter->first; 84 TextMenu *Menu = new TextMenu((ostream &)std::cout, menudescriptions.getDescription(MenuName)); 85 NametoTextMenuMap.insert( pair <std::string, TextMenu *> (MenuName, Menu) ); 86 new SubMenuItem(getSuitableShortForm(ShortcutList,MenuName),menudescriptions.getDescription(MenuName).c_str(),main_menu,Menu); 87 } 88 89 new SeperatorItem(main_menu); 71 new SeperatorItem(main_menu->getMenuInstance()); 90 72 91 73 // save has reserved key 's' 92 Action *saveConfigAction = ActionRegistry::getInstance().getActionByName("output");93 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"); 94 76 95 ActionTraits quitTrait(OptionTrait("quitAction", &typeid(void), "quits the program")); 96 quitAction = new MethodAction(quitTrait,boost::bind(&TextMenu::doQuit,main_menu),false); 97 new ActionMenuItem('q',"quit",main_menu,quitAction); 98 99 // quit has reserved key 'q' 100 // go through all menus and create them 101 for (map <std::string, TextMenu *>::iterator MenuRunner = NametoTextMenuMap.begin(); MenuRunner != NametoTextMenuMap.end(); ++MenuRunner) 102 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"); 103 81 104 82 // Add status indicators etc... 105 106 83 statusIndicator = new TextStatusIndicator(); 107 84 } … … 122 99 } 123 100 124 char TextWindow::getSuitableShortForm(std::set <char> &ShortcutList, const std::string name) const125 {126 for (std::string::const_iterator CharRunner = name.begin(); CharRunner != name.end(); ++CharRunner) {127 if (ShortcutList.find(*CharRunner) == ShortcutList.end()) {128 ShortcutList.insert(*CharRunner);129 return *CharRunner;130 }131 }132 // if no letter matches, take digits133 int i=0;134 for (;i<10;++i) {135 if (ShortcutList.find((char)i + '0') == ShortcutList.end())136 break;137 }138 if (i != 10) {139 ShortcutList.insert((char)i + '0');140 return ((char)i + '0');141 } else {142 DoeLog(1) && (eLog() << Verbose(1) << "Could not find a suitable shortform for " << name << "." << endl);143 return '#';144 }145 }146 147 void TextWindow::populateMenu(TextMenu* Menu, const std::string &MenuName)148 {149 Action *ActionItem = NULL;150 set <char> ShortcutList;151 // reserve 'q' for quit152 ShortcutList.insert('q');153 // through all actions for this menu154 MenuDescription md;155 std::multimap <std::string, std::string> MenuItems = md.getMenuItemsMap();156 std::pair < std::multimap <std::string, std::string>::iterator, std::multimap <std::string, std::string>::iterator > MenuActions = MenuItems.equal_range(MenuName);157 for (std::multimap <std::string, std::string>::const_iterator MenuRunner = MenuActions.first; MenuRunner != MenuActions.second; ++MenuRunner) {158 ActionItem = ActionRegistry::getInstance().getActionByName(MenuRunner->second);159 new ActionMenuItem(getSuitableShortForm(ShortcutList, MenuRunner->second),ActionItem->Traits.getDescription().c_str(),Menu,ActionItem);160 }161 // finally add default quit item162 ActionTraits LeaveActionTraits("Leave menu: "+Menu->getTitle());163 Action *returnFromAction = new TextMenu::LeaveAction(Menu, LeaveActionTraits);164 //returnFromActions.push_back(returnFromAction);165 MenuItem *returnFromItem = new ActionMenuItem('q',"return to Main menu",Menu,returnFromAction);166 Menu->addDefault(returnFromItem);167 } -
src/UIElements/TextUI/TextWindow.hpp
r5813ac rb59da6 14 14 #include <set> 15 15 16 class TextMenu; 16 #include "Menu/TextMenu/TextMenu.hpp" 17 17 18 class Action; 18 19 class StringView; 19 20 class TextStatusIndicator; 21 class TxMenu; 20 22 21 23 … … 29 31 30 32 private: 31 // populaters 32 char getSuitableShortForm(std::set <char> &ShortcutList, const std::string name) const; 33 void populateMenu(TextMenu* Menu, const std::string &name); 34 35 TextMenu *main_menu; 33 TextMenu<TxMenu> *main_menu; 36 34 37 35 // some actions only needed in textMenus
Note:
See TracChangeset
for help on using the changeset viewer.