void Viewer::redo() { if (m_redo.empty()) { Gtk::MessageDialog dialog("Can't redo"); dialog.run(); return; } History record = m_redo.top(); m_redo.pop(); // execute that record SceneNode *node = m_root->find(record.id); assert(node); assert(node->is_joint()); JointNode *joint = dynamic_cast<JointNode*>(node); assert(joint); joint->joint_x() = record.xRot; joint->joint_y() = record.yRot; m_undo.push(record); }