// Undo last action // Returns true if everything went fine bool PlayGround::undo() { ToDraw *newObject; Action *undone; int zOrder; if (!(undone = history.at(--currentAction))) return false; zOrder = undone->ZOrderAfter(); if (zOrder != -1) { // Undo an "add" or a "move" action if (!toDraw.remove(zOrder)) return false; } zOrder = undone->ZOrderBefore(); if (zOrder != -1) { // Undo a "delete" or a "move" action newObject = new ToDraw(undone->DrawnBefore()); if (!toDraw.insert(zOrder, newObject)) return false; } return true; }