Ignore:
Timestamp:
Dec 4, 2010, 11:33:47 PM (15 years ago)
Author:
Frederik Heber <heber@…>
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)
Message:

Refactoring of Menu structure for Qt and Text UI done.

  • Menu is now the initialising class for the menu structure.
  • MenuInterface contains virtual declarations of all functions that Menu needs to call.
  • TextMenu and QtMenu are templated classes which contain both Menu and MenuInterface and implement the virtual functions.
  • class TxMenu and its ...MenuItems contain most of the old Menu code for the text-based system. Most of the stuff, such as triggers, are now hidden internally.
  • in ..MainWindow() we basically just construct the desired Menu and call init at the correct time.
Location:
src/UIElements/TextUI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/TextUI/TextWindow.cpp

    r5813ac rb59da6  
    2323#include <boost/shared_ptr.hpp>
    2424
    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"
    3231#include "TextUI/TextStatusIndicator.hpp"
    3332#include "TextUI/TextWindow.hpp"
     
    5756TextWindow::TextWindow()
    5857{
    59   map <std::string, TextMenu *> NametoTextMenuMap;
    60   std::set <char> ShortcutList;
     58  // build the main menu
     59  main_menu = new TextMenu<TxMenu>(std::cout, "");
    6160  // 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");
    6763
    6864  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");
    7066
    71   new SeperatorItem(main_menu);
     67  new SeperatorItem(main_menu->getMenuInstance());
    7268
    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();
    7570
    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());
    9072
    9173  // 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");
    9476
    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");
    10381
    10482  // Add status indicators etc...
    105 
    10683  statusIndicator = new TextStatusIndicator();
    10784}
     
    12299}
    123100
    124 char TextWindow::getSuitableShortForm(std::set <char> &ShortcutList, const std::string name) const
    125 {
    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 digits
    133   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 quit
    152   ShortcutList.insert('q');
    153   // through all actions for this menu
    154   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 item
    162   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  
    1414#include <set>
    1515
    16 class TextMenu;
     16#include "Menu/TextMenu/TextMenu.hpp"
     17
    1718class Action;
    1819class StringView;
    1920class TextStatusIndicator;
     21class TxMenu;
    2022
    2123
     
    2931
    3032private:
    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;
    3634
    3735  // some actions only needed in textMenus
Note: See TracChangeset for help on using the changeset viewer.