Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/Actions/AtomAction/RemoveAction.cpp

    re41c48 rbf3817  
    66 */
    77
     8// include config.h
     9#ifdef HAVE_CONFIG_H
     10#include <config.h>
     11#endif
     12
    813#include "Helpers/MemDebug.hpp"
    914
     
    1116#include "Actions/ActionRegistry.hpp"
    1217#include "atom.hpp"
    13 #include "AtomicInfo.hpp"
    1418#include "Descriptors/AtomDescriptor.hpp"
    1519#include "Helpers/Log.hpp"
     
    2630#include "UIElements/Dialog.hpp"
    2731#include "Actions/ValueStorage.hpp"
    28 
    29 // memento to remember the state when undoing
    30 
    31 class AtomRemoveState : public ActionState {
    32 public:
    33   AtomRemoveState(std::vector<AtomicInfo> _Walkers) :
    34     Walkers(_Walkers)
    35   {}
    36   std::vector<AtomicInfo> Walkers;
    37 };
    3832
    3933const char AtomRemoveAction::NAME[] = "remove-atom";
     
    6155  atom *first = NULL;
    6256
    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();
    7258  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
    7359    first = iter->second;
    7460    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 World
    76 //    // simply try to erase in every molecule found
    77 //    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    }
    8066    World::getInstance().destroyAtom(first);
    8167  }
    82   return Action::state_ptr(UndoState);
     68  return Action::success;
    8369}
    8470
    8571Action::state_ptr AtomRemoveAction::performUndo(Action::state_ptr _state) {
    86   AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
     72//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
    8773
    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));
    10779}
    10880
    10981Action::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;
    11983}
    12084
    12185bool AtomRemoveAction::canUndo() {
    122   return true;
     86  return false;
    12387}
    12488
    12589bool AtomRemoveAction::shouldUndo() {
    126   return true;
     90  return false;
    12791}
    12892
Note: See TracChangeset for help on using the changeset viewer.