Ignore:
File:
1 edited

Legend:

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

    r326bbe r112b09  
    1212#include <boost/bind.hpp>
    1313
     14
     15// TODO: When done with refactoring most of these wont be needed anymore
     16#include "analysis_correlation.hpp"
     17#include "atom.hpp"
     18#include "bond.hpp"
     19#include "bondgraph.hpp"
     20#include "boundary.hpp"
     21#include "config.hpp"
     22#include "element.hpp"
     23#include "ellipsoid.hpp"
     24#include "helpers.hpp"
     25#include "leastsquaremin.hpp"
     26#include "linkedcell.hpp"
     27#include "log.hpp"
     28#include "memoryusageobserver.hpp"
     29#include "molecule.hpp"
     30#include "periodentafel.hpp"
     31#include "World.hpp"
     32
     33#include "Legacy/oldmenu.hpp"
     34
    1435#include "Menu/Menu.hpp"
    1536#include "Menu/TextMenu.hpp"
     
    1940#include "Menu/SubMenuItem.hpp"
    2041#include "TextUI/TextStatusIndicator.hpp"
    21 #include "Actions/MapOfActions.hpp"
    2242#include "Actions/MethodAction.hpp"
     43#include "Actions/MoleculeAction/ChangeNameAction.hpp"
    2344#include "Actions/ErrorAction.hpp"
    2445#include "Actions/ActionRegistry.hpp"
     
    2647#include "Views/MethodStringView.hpp"
    2748
    28 #include "defs.hpp"
    29 #include "log.hpp"
    30 #include "verbose.hpp"
    31 
    32 // all needed due to config::SaveAll()
    33 #include "config.hpp"
    34 #include "periodentafel.hpp"
    35 
    36 // config::SaveAll() and enumerate()
    37 #include "molecule.hpp"
    38 
    3949#include <iostream>
    40 #include <map>
    4150
    4251using namespace std;
     
    4554TextWindow::TextWindow()
    4655{
    47   char ConfigFileName[MAXSTRINGSIZE];
    48   map <std::string, TextMenu *> NametoTextMenuMap;
    49 
    50   // populate all actions
    51   MapOfActions::getInstance().populateActions();
     56  MoleculeListClass *molecules = World::getInstance().getMolecules();
     57  config *configuration = World::getInstance().getConfig();
     58  periodentafel *periode = World::getInstance().getPeriode();
     59  char *ConfigFileName = NULL;
     60  old_menu = new oldmenu;
    5261
    5362  // build the main menu
    5463  main_menu = new TextMenu(Log() << Verbose(0), "Main Menu");
    5564
    56   moleculeView = new StreamStringView(boost::bind(&MoleculeListClass::Enumerate,World::getInstance().getMolecules(),_1));
     65  moleculeView = new StreamStringView(boost::bind(&MoleculeListClass::Enumerate,molecules,_1));
    5766  new DisplayMenuItem(main_menu,moleculeView,"Molecule List");
    5867
     
    6776  new SeperatorItem(main_menu);
    6877
    69   Action *setMoleculeAction = new MethodAction("setMoleculeAction",boost::bind(&MoleculeListClass::flipChosen,World::getInstance().getMolecules()));
     78  Action *setMoleculeAction = new MethodAction("setMoleculeAction",boost::bind(&MoleculeListClass::flipChosen,molecules));
    7079  new ActionMenuItem('a',"set molecule (in)active",main_menu,setMoleculeAction);
    7180
    72   TextMenu *AnalysisMenu = new TextMenu(Log() << Verbose(0), "Analysis");
    73   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("analysis", AnalysisMenu) );
    74   new SubMenuItem('A',"Analysis (pair correlation, volume)",main_menu,AnalysisMenu);
     81  TextMenu *editMoleculesMenu = new TextMenu(Log() << Verbose(0), "Edit Molecules");
     82  new SubMenuItem('e',"edit molecules (load, parse, save)",main_menu,editMoleculesMenu);
    7583
    76   TextMenu *CommandMenu = new TextMenu(Log() << Verbose(0), "Configuration");
    77   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("command", CommandMenu) );
    78   new SubMenuItem('c',"configuration",main_menu,CommandMenu);
     84  Action *manipulateMoleculeAction = new MethodAction("manipulateMoleculeAction",boost::bind(&oldmenu::ManipulateMolecules,old_menu,periode, molecules, configuration));
     85  new ActionMenuItem('g',"globally manipulate atoms in molecule",main_menu,manipulateMoleculeAction);
    7986
    80   TextMenu *AtomMenu = new TextMenu(Log() << Verbose(0), "Atoms");
    81   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("atom", AtomMenu) );
    82   new SubMenuItem('e',"edit atoms",main_menu,AtomMenu);
     87  Action *mergeMoleculeAction = new MethodAction("mergeMoleculeAction",boost::bind(&oldmenu::MergeMolecules,old_menu,periode, molecules));
     88  new ActionMenuItem('M',"Merge molecules",main_menu,mergeMoleculeAction);
    8389
    84   TextMenu *FragmentationMenu = new TextMenu(Log() << Verbose(0), "Fragmentation");
    85   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("fragmentation", FragmentationMenu) );
    86   new SubMenuItem('f',"fragmentation",main_menu,FragmentationMenu);
    87 
    88   TextMenu *ParserMenu = new TextMenu(Log() << Verbose(0), "Parse files");
    89   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("parser", ParserMenu) );
    90   new SubMenuItem('p',"parse files into system",main_menu,ParserMenu);
    91 
    92   TextMenu *MoleculesMenu = new TextMenu(Log() << Verbose(0), "Edit Molecules");
    93   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("analysis", AnalysisMenu) );
    94   new SubMenuItem('m',"edit molecules (load, parse, save)",main_menu,MoleculesMenu);
    95 
    96   TextMenu *TesselationMenu = new TextMenu(Log() << Verbose(0), "Tesselate Molecules");
    97   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("tesselation", TesselationMenu) );
    98   new SubMenuItem('t',"tesselate molecules",main_menu,TesselationMenu);
    99 
    100   TextMenu *WorldMenu = new TextMenu(Log() << Verbose(0), "World");
    101   NametoTextMenuMap.insert( pair <std::string, TextMenu *> ("world", WorldMenu) );
    102   new SubMenuItem('w',"edit world",main_menu,WorldMenu);
     90  Action *manipulateAtomsAction = new MethodAction("manipulateAtomsAction",boost::bind(&oldmenu::ManipulateAtoms,old_menu,periode, molecules, configuration));
     91  new ActionMenuItem('m',"manipulate atoms",main_menu,manipulateAtomsAction);
    10392
    10493  new SeperatorItem(main_menu);
    10594
    106   Action *saveConfigAction = new MethodAction("saveConfigAction",boost::bind(&config::SaveAll,World::getInstance().getConfig(), ConfigFileName, World::getInstance().getPeriode(), World::getInstance().getMolecules()));
     95  Action *editConfigAction = new MethodAction("editConfigAction",boost::bind(&config::Edit,configuration));
     96  new ActionMenuItem('c',"edit the current configuration",main_menu,editConfigAction);
     97
     98  new SeperatorItem(main_menu);
     99
     100  Action *saveConfigAction = new MethodAction("saveConfigAction",boost::bind(&config::SaveAll,configuration, ConfigFileName, periode, molecules));
    107101  new ActionMenuItem('s',"save current setup to config file",main_menu,saveConfigAction);
     102
     103  Action *doTestAction = new MethodAction("doTestAction",boost::bind(&oldmenu::testroutine,old_menu,molecules));
     104  new ActionMenuItem('T',"call the current test routine",main_menu,doTestAction);
    108105
    109106  quitAction = new MethodAction("quitAction",boost::bind(&TextMenu::doQuit,main_menu),false);
    110107  new ActionMenuItem('q',"quit",main_menu,quitAction);
    111108
    112   // go through all menus and create them
    113   for (map <std::string, TextMenu *>::iterator MenuRunner = NametoTextMenuMap.begin(); MenuRunner != NametoTextMenuMap.end(); ++MenuRunner) {
    114     cout << "Creating Menu " << MenuRunner->first << "." << endl;
    115     populateMenu(MenuRunner->second, MenuRunner->first);
    116   }
     109  // call all functions used to build the submenus
     110
     111  populateEditMoleculesMenu(editMoleculesMenu);
     112
     113  Action *returnFromEditMoleculeAction = new TextMenu::LeaveAction(editMoleculesMenu);
     114  MenuItem *returnItem = new ActionMenuItem('q',"return to Main menu",editMoleculesMenu,returnFromEditMoleculeAction);
     115
     116  editMoleculesMenu->addDefault(returnItem);
    117117
    118118  // Add status indicators etc...
     
    123123TextWindow::~TextWindow()
    124124{
     125  delete old_menu;
    125126  delete quitAction;
    126127  delete moleculeView;
     
    133134}
    134135
    135 char TextWindow::getSuitableShortForm(set <char> &ShortcutList, const std::string name) const
     136void TextWindow::populateEditMoleculesMenu(Menu* editMoleculesMenu)
    136137{
    137   for (std::string::const_iterator CharRunner = name.begin(); CharRunner != name.end(); ++CharRunner) {
    138     if (ShortcutList.find(*CharRunner) == ShortcutList.end())
    139       return *CharRunner;
    140   }
    141   DoeLog(1) && (eLog() << Verbose(1) << "Could not find a suitable shortform for TextWindow::getSuitableShortForm()." << endl);
    142   return ((char)(ShortcutList.size() % 10) + '0');
     138  MoleculeListClass *molecules = World::getInstance().getMolecules();
     139  periodentafel *periode = World::getInstance().getPeriode();
     140
     141  // build the EditMoleculesMenu
     142  Action *createMoleculeAction = new MethodAction("createMoleculeAction",boost::bind(&MoleculeListClass::createNewMolecule,molecules,periode));
     143  new ActionMenuItem('c',"create new molecule",editMoleculesMenu,createMoleculeAction);
     144
     145  Action *loadMoleculeAction = new MethodAction("loadMoleculeAction",boost::bind(&MoleculeListClass::loadFromXYZ,molecules,periode));
     146  new ActionMenuItem('l',"load molecule from xyz file",editMoleculesMenu,loadMoleculeAction);
     147
     148  Action *changeFilenameAction = new MoleculeChangeNameAction();
     149  new ActionMenuItem('n',"change molecule's name",editMoleculesMenu,changeFilenameAction);
     150
     151  Action *giveFilenameAction = new MethodAction("giveFilenameAction",boost::bind(&MoleculeListClass::setMoleculeFilename,molecules));
     152  new ActionMenuItem('N',"give molecules filename",editMoleculesMenu,giveFilenameAction);
     153
     154  Action *parseAtomsAction = new MethodAction("parseAtomsAction",boost::bind(&MoleculeListClass::parseXYZIntoMolecule,molecules));
     155  new ActionMenuItem('p',"parse atoms in xyz file into molecule",editMoleculesMenu,parseAtomsAction);
     156
     157  Action *eraseMoleculeAction = new MethodAction("eraseMoleculeAction",boost::bind(&MoleculeListClass::eraseMolecule,molecules));
     158  new ActionMenuItem('r',"remove a molecule",editMoleculesMenu,eraseMoleculeAction);
     159
    143160}
    144 
    145 void TextWindow::populateMenu(TextMenu* Menu, const  std::string &MenuName)
    146 {
    147   Action *ActionItem = NULL;
    148   set <char> ShortcutList;
    149   // through all actions for this menu
    150   pair < multimap <std::string, std::string>::iterator, multimap <std::string, std::string>::iterator > MenuActions = MapOfActions::getInstance().MenuContainsActionMap.equal_range(MenuName);
    151   for (multimap <std::string, std::string>::const_iterator MenuRunner = MenuActions.first; MenuRunner != MenuActions.second; ++MenuRunner) {
    152     cout << " Adding " << MenuRunner->second << " to submenu " << MenuName << endl;
    153     ActionItem = ActionRegistry::getInstance().getActionByName(MenuRunner->second);
    154     new ActionMenuItem(getSuitableShortForm(ShortcutList, MenuRunner->second),MapOfActions::getInstance().getDescription(MenuRunner->second).c_str(),Menu,ActionItem);
    155   }
    156   // finally add default quit item
    157   Action *returnFromAction = new TextMenu::LeaveAction(Menu);
    158   MenuItem *returnFromItem = new ActionMenuItem('q',"return to Main menu",Menu,returnFromAction);
    159   Menu->addDefault(returnFromItem);
    160 }
Note: See TracChangeset for help on using the changeset viewer.