Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/CommandAction/BondLengthTableAction.cpp

    rb1ac7a rce7fdc  
    1717#include <config.h>
    1818#endif
    19 
    20 // include headers that implement a archive in simple text format
    21 #include <boost/archive/text_oarchive.hpp>
    22 #include <boost/archive/text_iarchive.hpp>
    2319
    2420#include "CodePatterns/MemDebug.hpp"
     
    4844
    4945  DoLog(0) && (Log() << Verbose(0) << "Using " << params.BondGraphFileName << " as bond length table." << endl);
    50   BondGraph *&BG = World::getInstance().getBondGraph();
     46  config *configuration = World::getInstance().getConfig();
     47  BondGraph *OldBG = World::getInstance().getBondGraph();
    5148
    52   // create undo state
    53   std::stringstream undostream;
    54   boost::archive::text_oarchive oa(undostream);
    55   oa << BG;
    56   CommandBondLengthTableState *UndoState =
    57       new CommandBondLengthTableState(
    58           undostream.str(),
    59           params
    60       );
    61 
    62   BG->CleanupBondLengthTable();
     49  BondGraph *BG = new BondGraph(configuration->GetIsAngstroem());
    6350  if ((!params.BondGraphFileName.empty())
    6451      && boost::filesystem::exists(params.BondGraphFileName)) {
     
    6754      DoLog(0) && (Log() << Verbose(0) << "Bond length table parsed successfully." << endl);
    6855      input.close();
    69       return Action::state_ptr(UndoState);
     56      CommandBondLengthTableState *state = new CommandBondLengthTableState(*OldBG, params);
     57      World::getInstance().setBondGraph(BG);  // Changes OldBG, hence have to copy beforehand
     58      return Action::state_ptr(state);
    7059    } else {
    7160      DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table parsing failed." << endl);
    7261      input.close();
     62      return Action::failure;
    7363    }
    7464  } else {
    7565    DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
     66    return Action::failure;
    7667  }
    77   // recover bond graph
    78   boost::archive::text_iarchive ia(undostream);
    79   delete BG;
    80   ia >> BG;
    81   delete UndoState;
    82   return Action::failure;
    8368}
    8469
     
    8671  CommandBondLengthTableState *state = assert_cast<CommandBondLengthTableState*>(_state.get());
    8772
    88   BondGraph *BG;
    89   std::stringstream undostream(state->undostring);
    90   boost::archive::text_iarchive ia(undostream);
    91   ia >> BG;
    92   World::getInstance().setBondGraph(BG);
     73  BondGraph *OldBG = World::getInstance().getBondGraph();
     74  CommandBondLengthTableState *restate = new CommandBondLengthTableState(*OldBG, params);
     75  World::getInstance().setBondGraph(new BondGraph(state->OldBG));  // Changes OldBG, hence have to copy beforehand
    9376
    94   return Action::state_ptr(_state);
     77  return Action::state_ptr(restate);
    9578}
    9679
     
    9881  CommandBondLengthTableState *state = assert_cast<CommandBondLengthTableState*>(_state.get());
    9982
    100   BondGraph *&BG = World::getInstance().getBondGraph();
    101   BG->CleanupBondLengthTable();
    102   std::ifstream input(state->params.BondGraphFileName.string().c_str());
    103   if ((input.good()) && (BG->LoadBondLengthTable(input))) {
    104     DoLog(0) && (Log() << Verbose(0) << "Bond length table parsed successfully." << endl);
    105     input.close();
    106   }
     83  BondGraph *OldBG = World::getInstance().getBondGraph();
     84  CommandBondLengthTableState *restate = new CommandBondLengthTableState(*OldBG, params);
     85  World::getInstance().setBondGraph(new BondGraph(state->OldBG));  // Changes OldBG, hence have to copy beforehand
    10786
    108   return Action::state_ptr(_state);
     87  return Action::state_ptr(restate);
    10988}
    11089
    11190bool CommandBondLengthTableAction::canUndo() {
    112   return true;
     91  return false;
    11392}
    11493
    11594bool CommandBondLengthTableAction::shouldUndo() {
    116   return true;
     95  return false;
    11796}
    11897/** =========== end of function ====================== */
Note: See TracChangeset for help on using the changeset viewer.