#pragma once #include #include #include #include #include #include "ui_OBSBasic.h" typedef std::function undo_redo_cb; typedef std::function func; typedef std::unique_ptr &ui_ptr; struct undo_redo_t { QString name; std::string undo_data; std::string redo_data; undo_redo_cb undo; undo_redo_cb redo; func d; }; class undo_stack { private: ui_ptr ui; std::deque undo_items; std::deque redo_items; bool disabled = false; void clear_redo(); public: undo_stack(ui_ptr ui); void enable_undo_redo(); void disable_undo_redo(); void release(); void clear(); void add_action(const QString &name, undo_redo_cb undo, undo_redo_cb redo, std::string undo_data, std::string redo_data, func d); void undo(); void redo(); };