Changeset f8456c
- Timestamp:
- Aug 10, 2010, 11:44:37 AM (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:
- ea2830
- Parents:
- e41c48
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/AtomAction/ChangeElementAction.cpp
re41c48 rf8456c 10 10 #include "Actions/AtomAction/ChangeElementAction.hpp" 11 11 #include "Actions/ActionRegistry.hpp" 12 #include "Descriptors/AtomIdDescriptor.hpp" 12 13 #include "atom.hpp" 13 14 #include "element.hpp" … … 19 20 20 21 #include <iostream> 22 #include <map> 21 23 #include <string> 22 24 … … 26 28 #include "UIElements/Dialog.hpp" 27 29 #include "Actions/ValueStorage.hpp" 30 31 typedef std::map<int, const element *> ElementMap; 32 33 // memento to remember the state when undoing 34 35 class AtomChangeElementState : public ActionState { 36 public: 37 AtomChangeElementState(ElementMap _Elements, const element *_elemental) : 38 Elements(_Elements), 39 elemental(_elemental) 40 {} 41 ElementMap Elements; 42 const element *elemental; 43 }; 28 44 29 45 const char AtomChangeElementAction::NAME[] = "change-element"; … … 56 72 ValueStorage::getInstance().queryCurrentValue(NAME, elemental); 57 73 74 // create undo state 75 ElementMap Elements; 76 for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) { 77 Elements.insert(std::pair<int, const element *> (iter->second->getId(), iter->second->getType())); 78 } 79 AtomChangeElementState *UndoState = new AtomChangeElementState(Elements, elemental); 80 58 81 for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) { 59 82 first = iter->second; … … 64 87 mol->AddAtom(first); // add atom to ensure correctness of formula 65 88 } 66 return Action::s uccess;89 return Action::state_ptr(UndoState); 67 90 } 68 91 69 92 Action::state_ptr AtomChangeElementAction::performUndo(Action::state_ptr _state) { 70 // ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get()); 93 AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get()); 94 atom *first = NULL; 95 molecule *mol = NULL; 71 96 72 return Action::failure; 73 // string newName = state->mol->getName(); 74 // state->mol->setName(state->lastName); 75 // 76 // return Action::state_ptr(new ParserLoadXyzState(state->mol,newName)); 97 for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) { 98 first = World::getInstance().getAtom(AtomById(iter->first)); 99 mol = first->getMolecule(); 100 first->removeFromMolecule(); // remove atom 101 first->setType(iter->second); 102 mol->AddAtom(first); // add atom to ensure correctness of formula 103 } 104 105 return Action::state_ptr(_state); 77 106 } 78 107 79 108 Action::state_ptr AtomChangeElementAction::performRedo(Action::state_ptr _state){ 80 return Action::failure; 109 AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get()); 110 atom *first = NULL; 111 molecule *mol = NULL; 112 113 for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) { 114 first = World::getInstance().getAtom(AtomById(iter->first)); 115 mol = first->getMolecule(); 116 first->removeFromMolecule(); // remove atom 117 first->setType(state->elemental); 118 mol->AddAtom(first); // add atom to ensure correctness of formula 119 } 120 121 return Action::state_ptr(_state); 81 122 } 82 123 83 124 bool AtomChangeElementAction::canUndo() { 84 return false;125 return true; 85 126 } 86 127 87 128 bool AtomChangeElementAction::shouldUndo() { 88 return false;129 return true; 89 130 } 90 131 -
tests/regression/testsuite-simple_configuration.at
re41c48 rf8456c 37 37 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0) 38 38 AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 ], 0, [ignore], [ignore]) 39 AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore]) 40 AT_CLEANUP 41 AT_SETUP([Simple configuration - Changing element with Undo/Redo]) 42 AT_KEYWORDS([configuration]) 43 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0) 44 AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo], 0, [ignore], [ignore]) 45 AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/$file], 0, [ignore], [ignore]) 46 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0) 47 AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo --redo], 0, [ignore], [ignore]) 39 48 AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore]) 40 49 AT_CLEANUP
Note:
See TracChangeset
for help on using the changeset viewer.