Changeset c82d0c


Ignore:
Timestamp:
Dec 4, 2010, 11:47:35 PM (14 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:
b2151f5
Parents:
d5240d
git-author:
Frederik Heber <heber@…> (11/11/10 18:43:28)
git-committer:
Frederik Heber <heber@…> (12/04/10 23:47:35)
Message:

MenuDescription is now a singleton.

  • also all Maps are static objects, allocated and filled dynamically in the constructor, removed in the destructor.
Location:
src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Menu/Menu.cpp

    rd5240d rc82d0c  
    4141 */
    4242Menu::~Menu()
    43 {}
     43{
     44  DuplicatesList.clear();
     45}
    4446
    4547/** Initialiser for class Menu.
     
    6567    CompleteFlag = true;
    6668    PossibleMissingFlag = false;
    67     for(MenuDescription::const_iterator iter = menudescriptions.getBeginIter();
    68         iter != menudescriptions.getEndIter();
     69    for(MenuDescription::const_iterator iter = MenuDescription::getInstance().getBeginIter();
     70        iter != MenuDescription::getInstance().getEndIter();
    6971        ++iter) {
    7072      // skip when already present
     
    137139  ASSERT (!isPresent(MenuName),
    138140      "Menu::addSubmenu() - trying to add menu "+MenuName+" with already present token!");
    139   addSubmenuItem(MenuName, menudescriptions.getDescription(MenuName));
     141  addSubmenuItem(MenuName, MenuDescription::getInstance().getDescription(MenuName));
    140142  DuplicatesList.insert(MenuName);
    141143  LastItem = MenuItem;
  • src/UIElements/Menu/Menu.hpp

    rd5240d rc82d0c  
    7272
    7373  int TopPosition;  // current position to add
    74   MenuDescription menudescriptions; // contains the menu tree and description to each item
    7574  enum ItemType LastItem;  // check whether separator followed separator
    7675  std::set <std::string> DuplicatesList;  // is used to check for duplicates
  • src/UIElements/Menu/MenuDescription.cpp

    rd5240d rc82d0c  
    2424#include <string>
    2525
    26 #include "Actions/ActionRegistry.hpp"
     26//#include "Actions/ActionRegistry.hpp"
    2727#include "Menu/MenuDescription.hpp"
     28
     29#include "Patterns/Singleton_impl.hpp"
     30
     31MenuDescription::TextMap *MenuDescription::MenuDescriptionsMap = NULL;
     32MenuDescription::IterableMap *MenuDescription::MenuPositionMap = NULL;
     33MenuDescription::TextMap *MenuDescription::MenuNameMap = NULL;
     34
    2835
    2936/** Constructor of class MenuDescription.
     
    3239MenuDescription::MenuDescription()
    3340{
     41  // allocate maps
     42  MenuDescriptionsMap = new TextMap();
     43  MenuPositionMap = new IterableMap();
     44  MenuNameMap = new TextMap();
     45
    3446  // put each menu into its place, "" means top level
    35   MenuPositionMap["analysis"] = TopPosition("tools",1);
    36   MenuPositionMap["atom"] = TopPosition("edit",1);
    37   MenuPositionMap["command"] = TopPosition("",3);
    38   MenuPositionMap["edit"] = TopPosition("",2);
    39   MenuPositionMap["fragmentation"] = TopPosition("tools",3);
    40   MenuPositionMap["molecule"] = TopPosition("edit",2);
    41   MenuPositionMap["parser"] = TopPosition("edit",3);
    42   MenuPositionMap["selection"] = TopPosition("edit",4);
    43   MenuPositionMap["tesselation"] = TopPosition("tools",2);
    44   MenuPositionMap["tools"] = TopPosition("",4);
    45   MenuPositionMap["world"] = TopPosition("",1);
     47  MenuPositionMap->insert(std::make_pair("analysis",TopPosition("tools",1)));
     48  MenuPositionMap->insert(std::make_pair("atom",TopPosition("edit",1)));
     49  MenuPositionMap->insert(std::make_pair("command",TopPosition("",3)));
     50  MenuPositionMap->insert(std::make_pair("edit",TopPosition("",2)));
     51  MenuPositionMap->insert(std::make_pair("fragmentation",TopPosition("tools",3)));
     52  MenuPositionMap->insert(std::make_pair("molecule",TopPosition("edit",2)));
     53  MenuPositionMap->insert(std::make_pair("parser",TopPosition("edit",3)));
     54  MenuPositionMap->insert(std::make_pair("selection",TopPosition("edit",4)));
     55  MenuPositionMap->insert(std::make_pair("tesselation",TopPosition("tools",2)));
     56  MenuPositionMap->insert(std::make_pair("tools",TopPosition("",4)));
     57  MenuPositionMap->insert(std::make_pair("world",TopPosition("",1)));
    4658
    4759  // put menu description into each menu category
    48   MenuDescriptionsMap["analysis"] = "Analysis (pair correlation, volume)";
    49   MenuDescriptionsMap["atom"] = "Edit atoms";
    50   MenuDescriptionsMap["command"] = "Configuration";
    51   MenuDescriptionsMap["edit"] = "Edit";
    52   MenuDescriptionsMap["fragmentation"] = "Fragmentation";
    53   MenuDescriptionsMap["molecule"] = "Parse files into system";
    54   MenuDescriptionsMap["parser"] = "Edit molecules (load, parse, save)";
    55   MenuDescriptionsMap["selection"] = "Select atoms/molecules";
    56   MenuDescriptionsMap["tesselation"] = "Tesselate molecules";
    57   MenuDescriptionsMap["tools"] = "Various tools";
    58   MenuDescriptionsMap["world"] = "Edit world";
     60  MenuDescriptionsMap->insert(std::make_pair("analysis","Analysis (pair correlation, volume)"));
     61  MenuDescriptionsMap->insert(std::make_pair("atom","Edit atoms"));
     62  MenuDescriptionsMap->insert(std::make_pair("command","Configuration"));
     63  MenuDescriptionsMap->insert(std::make_pair("edit","Edit"));
     64  MenuDescriptionsMap->insert(std::make_pair("fragmentation","Fragmentation"));
     65  MenuDescriptionsMap->insert(std::make_pair("molecule","Parse files into system"));
     66  MenuDescriptionsMap->insert(std::make_pair("parser","Edit molecules (load, parse, save)"));
     67  MenuDescriptionsMap->insert(std::make_pair("selection","Select atoms/molecules"));
     68  MenuDescriptionsMap->insert(std::make_pair("tesselation","Tesselate molecules"));
     69  MenuDescriptionsMap->insert(std::make_pair("tools","Various tools"));
     70  MenuDescriptionsMap->insert(std::make_pair("world","Edit world"));
    5971
    6072  // put menu name into each menu category
    61   MenuNameMap["analysis"] = "Analysis";
    62   MenuNameMap["atom"] = "Atoms";
    63   MenuNameMap["command"] = "Configuration";
    64   MenuNameMap["edit"] = "Edit";
    65   MenuNameMap["fragmentation"] = "Fragmentation";
    66   MenuNameMap["molecule"] = "Molecules";
    67   MenuNameMap["parser"] = "Input/Output";
    68   MenuNameMap["selection"] = "Selection";
    69   MenuNameMap["tesselation"] = "Tesselation";
    70   MenuNameMap["tools"] = "Tools";
    71   MenuNameMap["world"] = "Globals";
     73  MenuNameMap->insert(std::make_pair("analysis","Analysis"));
     74  MenuNameMap->insert(std::make_pair("atom","Atoms"));
     75  MenuNameMap->insert(std::make_pair("command","Configuration"));
     76  MenuNameMap->insert(std::make_pair("edit","Edit"));
     77  MenuNameMap->insert(std::make_pair("fragmentation","Fragmentation"));
     78  MenuNameMap->insert(std::make_pair("molecule","Molecules"));
     79  MenuNameMap->insert(std::make_pair("parser","Input/Output"));
     80  MenuNameMap->insert(std::make_pair("selection","Selection"));
     81  MenuNameMap->insert(std::make_pair("tesselation","Tesselation"));
     82  MenuNameMap->insert(std::make_pair("tools","Tools"));
     83  MenuNameMap->insert(std::make_pair("world","Globals"));
    7284}
    7385
     
    7688 */
    7789MenuDescription::~MenuDescription()
    78 {}
     90{
     91  std::cout << "MenuDescription: clearing maps ... " << std::endl;
     92  for (IterableMap::iterator iter = MenuPositionMap->begin(); !MenuPositionMap->empty(); iter = MenuPositionMap->begin())
     93    MenuPositionMap->erase(iter);
     94  delete MenuNameMap;
     95  delete MenuDescriptionsMap;
     96  delete MenuPositionMap;
     97}
    7998
    8099/** Getter for MenuDescriptionsMap.
     
    84103const std::string MenuDescription::getDescription(const std::string &token) const
    85104{
    86   if (MenuDescriptionsMap.find(token) != MenuDescriptionsMap.end())
    87     return MenuDescriptionsMap.find(token)->second;
     105  if (MenuDescriptionsMap->find(token) != MenuDescriptionsMap->end())
     106    return MenuDescriptionsMap->find(token)->second;
    88107  else
    89108    return std::string();
    90109}
    91110
    92 /** Getter for MenuNameMap.
     111/** Getter for MenuNameMap->
    93112 * \param token name of menu
    94113 * \return description string of the menu or empty
     
    96115const std::string MenuDescription::getName(const std::string &token) const
    97116{
    98   if (MenuNameMap.find(token) != MenuNameMap.end())
    99     return MenuNameMap.find(token)->second;
     117  if (MenuNameMap->find(token) != MenuNameMap->end())
     118    return MenuNameMap->find(token)->second;
    100119  else
    101120    return std::string();
    102121}
    103122
    104 /** Constructs a multimap of all menus running over all actions belonging to it.
    105  * \return multimap with which actions belongs to which menu.
    106  */
    107 std::multimap <std::string, std::string> MenuDescription::getMenuItemsMap() const
    108 {
    109   std::multimap <std::string, std::string> result;
    110 
    111   ActionRegistry &AR = ActionRegistry::getInstance();
    112   for (ActionRegistry::const_iterator iter = AR.getBeginIter();iter != AR.getEndIter();++iter) {
    113     std::cout << "Inserting " << (iter->second)->getName() << " into menu " << (iter->second)->Traits.getMenuName() << std::endl;
    114     result.insert( std::pair<std::string, std::string> ((iter->second)->Traits.getMenuName(), (iter->second)->getName()));
    115   }
    116   // TODO: MenuPosition is not yet realized.
    117   return result;
    118 }
     123///** Constructs a multimap of all menus running over all actions belonging to it.
     124// * \return multimap with which actions belongs to which menu.
     125// */
     126//std::multimap <std::string, std::string> MenuDescription::getMenuItemsMap() const
     127//{
     128//  std::multimap <std::string, std::string> result;
     129//
     130//  ActionRegistry &AR = ActionRegistry::getInstance();
     131//  for (ActionRegistry::const_iterator iter = AR.getBeginIter();iter != AR.getEndIter();++iter) {
     132//    std::cout << "Inserting " << (iter->second)->getName() << " into menu " << (iter->second)->Traits.getMenuName() << std::endl;
     133//    result.insert( std::pair<std::string, std::string> ((iter->second)->Traits.getMenuName(), (iter->second)->getName()));
     134//  }
     135//  // TODO: MenuPosition is not yet realized.
     136//  return result;
     137//}
    119138
    120139/** Forward iterator from beginning of list of descriptions.
     
    123142MenuDescription::iterator MenuDescription::getBeginIter()
    124143{
    125   return MenuPositionMap.begin();
     144  return MenuPositionMap->begin();
    126145}
    127146
     
    131150MenuDescription::iterator MenuDescription::getEndIter()
    132151{
    133   return MenuPositionMap.end();
     152  return MenuPositionMap->end();
    134153}
    135154
     
    139158MenuDescription::const_iterator MenuDescription::getBeginIter() const
    140159{
    141   return MenuPositionMap.begin();
     160  return MenuPositionMap->begin();
    142161}
    143162
     
    147166MenuDescription::const_iterator MenuDescription::getEndIter() const
    148167{
    149   return MenuPositionMap.end();
     168  return MenuPositionMap->end();
    150169}
    151170
    152 
     171CONSTRUCT_SINGLETON(MenuDescription)
  • src/UIElements/Menu/MenuDescription.hpp

    rd5240d rc82d0c  
    1313#include <string>
    1414
     15#include "Patterns/Singleton.hpp"
     16
    1517class MenuDescriptionTest;
    1618
     
    1820 *
    1921 */
    20 class MenuDescription
     22class MenuDescription : public Singleton<MenuDescription>
    2123{
    2224  friend class MenuDescriptionTest;
     25  friend class Singleton<MenuDescription>;
    2326public:
    24   MenuDescription();
    25   ~MenuDescription();
    2627
    27   typedef std::pair<std::string, int> TopPosition;
    28   typedef std::map<std::string, TopPosition> IterableMap;
     28  typedef std::pair<std::string const, int const> TopPosition;
     29  typedef std::map<std::string const, TopPosition const> IterableMap;
    2930  typedef IterableMap::iterator iterator;
    3031  typedef IterableMap::const_iterator const_iterator ;
    31   typedef std::map<std::string, std::string> TextMap;
     32  typedef std::map<std::string const, std::string const> TextMap;
    3233
    3334  // getter for description
     
    3536  const std::string getName(const std::string &token) const;
    3637
    37   std::multimap <std::string, std::string> getMenuItemsMap() const;
     38  //std::multimap <std::string, std::string> getMenuItemsMap() const;
    3839
    3940  // iterators
     
    4445
    4546private:
    46   TextMap MenuDescriptionsMap;
    47   IterableMap MenuPositionMap;
    48   TextMap MenuNameMap;
    49   std::multimap <std::string, std::string> MenuItemMap;
     47  MenuDescription();
     48  ~MenuDescription();
     49
     50  static TextMap *MenuDescriptionsMap;
     51  static IterableMap *MenuPositionMap;
     52  static TextMap *MenuNameMap;
    5053};
    5154
  • src/builder.cpp

    rd5240d rc82d0c  
    8282#include "tesselationhelpers.hpp"
    8383#include "UIElements/UIFactory.hpp"
     84#include "UIElements/Menu/MenuDescription.hpp"
    8485#include "UIElements/TextUI/TextUIFactory.hpp"
    8586#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
     
    136137  ChangeTracker::purgeInstance();
    137138  World::purgeInstance();
     139  MenuDescription::purgeInstance();
    138140  UIFactory::purgeInstance();
    139141  ValueStorage::purgeInstance();
  • src/unittests/MenuDescriptionUnitTest.cpp

    rd5240d rc82d0c  
    5151{
    5252  // from MenuSet
    53   for(MenuDescription::const_iterator iter = md.MenuPositionMap.begin(); iter != md.MenuPositionMap.end(); ++iter) {
     53  for(MenuDescription::const_iterator iter = md.MenuPositionMap->begin(); iter != md.MenuPositionMap->end(); ++iter) {
    5454    const std::string &MenuName = iter->first;
    55     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDewscriptionsMap", md.MenuDescriptionsMap.find(MenuName) != md.MenuDescriptionsMap.end());
    56     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap.find(MenuName) != md.MenuNameMap.end());
     55    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDewscriptionsMap", md.MenuDescriptionsMap->find(MenuName) != md.MenuDescriptionsMap->end());
     56    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(MenuName) != md.MenuNameMap->end());
    5757  }
    5858
    5959  // from MenuDescriptionsMap
    60   for(std::map<std::string, std::string>::const_iterator iter = md.MenuDescriptionsMap.begin(); iter != md.MenuDescriptionsMap.end(); ++iter) {
    61     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap.find(iter->first) != md.MenuPositionMap.end());
    62     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap.find(iter->first) != md.MenuNameMap.end());
     60  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuDescriptionsMap->begin(); iter != md.MenuDescriptionsMap->end(); ++iter) {
     61    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
     62    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(iter->first) != md.MenuNameMap->end());
    6363  }
    6464
    6565  // from MenuNameMap
    66   for(std::map<std::string, std::string>::const_iterator iter = md.MenuNameMap.begin(); iter != md.MenuNameMap.end(); ++iter) {
    67     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDescriptionsMap", md.MenuDescriptionsMap.find(iter->first) != md.MenuDescriptionsMap.end());
    68     CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap.find(iter->first) != md.MenuPositionMap.end());
     66  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuNameMap->begin(); iter != md.MenuNameMap->end(); ++iter) {
     67    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDescriptionsMap", md.MenuDescriptionsMap->find(iter->first) != md.MenuDescriptionsMap->end());
     68    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
    6969  }
    7070
Note: See TracChangeset for help on using the changeset viewer.