- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/Actions/AtomAction/RemoveAction.cpp ¶
re41c48 rbf3817 6 6 */ 7 7 8 // include config.h 9 #ifdef HAVE_CONFIG_H 10 #include <config.h> 11 #endif 12 8 13 #include "Helpers/MemDebug.hpp" 9 14 … … 11 16 #include "Actions/ActionRegistry.hpp" 12 17 #include "atom.hpp" 13 #include "AtomicInfo.hpp"14 18 #include "Descriptors/AtomDescriptor.hpp" 15 19 #include "Helpers/Log.hpp" … … 26 30 #include "UIElements/Dialog.hpp" 27 31 #include "Actions/ValueStorage.hpp" 28 29 // memento to remember the state when undoing30 31 class AtomRemoveState : public ActionState {32 public:33 AtomRemoveState(std::vector<AtomicInfo> _Walkers) :34 Walkers(_Walkers)35 {}36 std::vector<AtomicInfo> Walkers;37 };38 32 39 33 const char AtomRemoveAction::NAME[] = "remove-atom"; … … 61 55 atom *first = NULL; 62 56 63 // create undo state 64 std::vector<AtomicInfo> Walkers; 65 for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) { 66 Walkers.push_back(AtomicInfo(*(iter->second))); 67 } 68 AtomRemoveState *UndoState = new AtomRemoveState(Walkers); 69 70 // remove all selected atoms 71 // std::vector<molecule *> molecules = World::getInstance().getAllMolecules(); 57 std::vector<molecule *> molecules = World::getInstance().getAllMolecules(); 72 58 for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) { 73 59 first = iter->second; 74 60 DoLog(1) && (Log() << Verbose(1) << "Removing atom " << first->getId() << "." << endl); 75 //// TODO: this is not necessary when atoms and their storing to file are handled by the World76 //// simply try to erase in every molecule found77 //for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) {78 //(*iter)->erase(first);79 //}61 // TODO: this is not necessary when atoms and their storing to file are handled by the World 62 // simply try to erase in every molecule found 63 for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) { 64 (*iter)->erase(first); 65 } 80 66 World::getInstance().destroyAtom(first); 81 67 } 82 return Action::s tate_ptr(UndoState);68 return Action::success; 83 69 } 84 70 85 71 Action::state_ptr AtomRemoveAction::performUndo(Action::state_ptr _state) { 86 AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());72 // ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get()); 87 73 88 size_t i=0; 89 for (; i<state->Walkers.size(); ++i) { 90 // re-create the atom 91 DoLog(1) && (Log() << Verbose(1) << "Re-adding atom " << state->Walkers[i].getId() << "." << endl); 92 atom *Walker = World::getInstance().createAtom(); 93 if (!state->Walkers[i].setAtom(*Walker)) { 94 DoeLog(1) && (eLog() << Verbose(1) << "Failed to set id." << endl); 95 World::getInstance().destroyAtom(Walker); 96 break; 97 } 98 } 99 if (i<state->Walkers.size()) { 100 // remove all previous ones, too 101 for (size_t j=0;j<i;++j) 102 World::getInstance().destroyAtom(state->Walkers[j].getId()); 103 // and announce the failure of the undo 104 return Action::failure; 105 } 106 return Action::state_ptr(_state); 74 return Action::failure; 75 // string newName = state->mol->getName(); 76 // state->mol->setName(state->lastName); 77 // 78 // return Action::state_ptr(new ParserLoadXyzState(state->mol,newName)); 107 79 } 108 80 109 81 Action::state_ptr AtomRemoveAction::performRedo(Action::state_ptr _state){ 110 AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get()); 111 112 // simple remove again all previously added atoms 113 for (size_t i=0; i<state->Walkers.size(); ++i) { 114 DoLog(1) && (Log() << Verbose(1) << "Re-removing atom " << state->Walkers[i].getId() << "." << endl); 115 World::getInstance().destroyAtom(state->Walkers[i].getId()); 116 } 117 118 return Action::state_ptr(_state); 82 return Action::failure; 119 83 } 120 84 121 85 bool AtomRemoveAction::canUndo() { 122 return true;86 return false; 123 87 } 124 88 125 89 bool AtomRemoveAction::shouldUndo() { 126 return true;90 return false; 127 91 } 128 92
Note:
See TracChangeset
for help on using the changeset viewer.