private void PruneWorkflow() // set current (displayed) state in stone; resets un-redo parameters { /*if (soft_resetted) this.hardreset(false); // musn't clear else*/ if (backlog > 0) { worksteps -= backlog; backlog = 0; for (int i = Workflow.Count - 1; i >= marker; i--) // cleanup now obsolete Facts { stepnote last = Workflow[i]; if (last.creation // may be zombie && MetaInf[last.Id].workflow_id == i) // remove for good, if original creation gets pruned { this[last.Id].delete(); FactDict.Remove(last.Id); MetaInf.Remove(last.Id); } } // prune Worklfow down to marker Workflow.RemoveRange(marker, Workflow.Count - marker); } }
public stepnote(string Id, bool samestep, bool creation, FactOrganizer that) { this.Id = Id; this.samestep = samestep; this.creation = creation; if (samestep) // steplink = !first_steptail ? previous.steplink : steproot { stepnote prev = that.Workflow[that.marker - 1]; this.steplink = prev.samestep ? prev.steplink : that.marker - 1; } else // steproot sets steplink after itself (end of steptail) this.steplink = that.marker + 1; }
public void redo() { soft_resetted = false; if (backlog > 0) { backlog--; stepnote last = Workflow[marker]; int stop = last.samestep ? Workflow[last.steplink].steplink : last.steplink; for (int i = marker; i < stop; i++) { last = Workflow[i]; InvokeFactEvent(last.creation, last.Id); } marker = stop; } }
public void undo() { if (soft_resetted) fastforward(); // revert softreset else if (backlog < worksteps) { backlog++; stepnote last = Workflow[--marker]; int stop = last.samestep ? last.steplink : marker; for (int i = marker; i >= stop; i--) { last = Workflow[i]; InvokeFactEvent(!last.creation, last.Id); } marker = stop; } }
private void WorkflowAdd(stepnote note) // prunes & adds Workflow; Invokes Events { PruneWorkflow(); if (note.samestep) // update steplink of steproot { stepnote tmp = Workflow[note.steplink]; tmp.steplink = Workflow.Count + 1; Workflow[note.steplink] = tmp; } else worksteps++; Workflow.Add(note); marker = Workflow.Count; InvokeFactEvent(note.creation, note.Id); }