- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/CommandAction/BondLengthTableAction.cpp
rce7fdc rb1ac7a 17 17 #include <config.h> 18 18 #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> 19 23 20 24 #include "CodePatterns/MemDebug.hpp" … … 44 48 45 49 DoLog(0) && (Log() << Verbose(0) << "Using " << params.BondGraphFileName << " as bond length table." << endl); 46 config *configuration = World::getInstance().getConfig(); 47 BondGraph *OldBG = World::getInstance().getBondGraph(); 50 BondGraph *&BG = World::getInstance().getBondGraph(); 48 51 49 BondGraph *BG = new BondGraph(configuration->GetIsAngstroem()); 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(); 50 63 if ((!params.BondGraphFileName.empty()) 51 64 && boost::filesystem::exists(params.BondGraphFileName)) { … … 54 67 DoLog(0) && (Log() << Verbose(0) << "Bond length table parsed successfully." << endl); 55 68 input.close(); 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); 69 return Action::state_ptr(UndoState); 59 70 } else { 60 71 DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table parsing failed." << endl); 61 72 input.close(); 62 return Action::failure;63 73 } 64 74 } else { 65 75 DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl); 66 return Action::failure;67 76 } 77 // recover bond graph 78 boost::archive::text_iarchive ia(undostream); 79 delete BG; 80 ia >> BG; 81 delete UndoState; 82 return Action::failure; 68 83 } 69 84 … … 71 86 CommandBondLengthTableState *state = assert_cast<CommandBondLengthTableState*>(_state.get()); 72 87 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 88 BondGraph *BG; 89 std::stringstream undostream(state->undostring); 90 boost::archive::text_iarchive ia(undostream); 91 ia >> BG; 92 World::getInstance().setBondGraph(BG); 76 93 77 return Action::state_ptr( restate);94 return Action::state_ptr(_state); 78 95 } 79 96 … … 81 98 CommandBondLengthTableState *state = assert_cast<CommandBondLengthTableState*>(_state.get()); 82 99 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 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 } 86 107 87 return Action::state_ptr( restate);108 return Action::state_ptr(_state); 88 109 } 89 110 90 111 bool CommandBondLengthTableAction::canUndo() { 91 return false;112 return true; 92 113 } 93 114 94 115 bool CommandBondLengthTableAction::shouldUndo() { 95 return false;116 return true; 96 117 } 97 118 /** =========== end of function ====================== */
Note:
See TracChangeset
for help on using the changeset viewer.