///////////////////// // Execute insertion void ActionModify::Execute() { // Find the section to modify String sectionName = section; if (sectionName.IsEmpty()) sectionName = entry->GetDefaultGroup(); Section sect = GetSection(sectionName); // Modify the line if (delta) { Entry ref = sect->GetEntry(lineNumber); ref->GetDeltaCoder()->ApplyDelta(delta,ref); } else sect->GetEntryRef(lineNumber) = entry; }
///////////////////////////////// // Create anti-action for insert Action ActionModify::GetAntiAction() const { // Get section and original line Section sect = GetSection(section); Entry oldEntry = sect->GetEntry(lineNumber); // Try to get a delta DeltaCoder deltaCoder = oldEntry->GetDeltaCoder(); if (deltaCoder) { VoidPtr _delta; if (entry) _delta = deltaCoder->EncodeDelta(entry,oldEntry,!noTextFields); else _delta = deltaCoder->EncodeReverseDelta(delta,oldEntry); return Action(new ActionModify(GetModel(),_delta,lineNumber,section)); } // Store the whole original line else { return Action(new ActionModify(GetModel(),oldEntry,lineNumber,section,noTextFields)); } }
///////////////////////////////// // Create anti-action for remove Action ActionRemove::GetAntiAction() const { Section sect = GetSection(section); Entry entry = sect->GetEntry(lineNumber); return Action(new ActionInsert(GetModel(),entry,lineNumber,section)); }