UndoStack.h 945 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <AK/NonnullOwnPtrVector.h>
  9. #include <AK/Time.h>
  10. #include <LibGUI/Forward.h>
  11. namespace GUI {
  12. class UndoStack {
  13. public:
  14. UndoStack();
  15. ~UndoStack();
  16. void push(NonnullOwnPtr<Command>);
  17. bool can_undo() const;
  18. bool can_redo() const;
  19. void undo();
  20. void redo();
  21. void set_current_unmodified();
  22. bool is_current_modified() const;
  23. Optional<Time> last_unmodified_timestamp() const { return m_last_unmodified_timestamp; }
  24. void clear();
  25. Optional<String> undo_action_text() const;
  26. Optional<String> redo_action_text() const;
  27. Function<void()> on_state_change;
  28. private:
  29. NonnullOwnPtrVector<Command> m_stack;
  30. size_t m_stack_index { 0 };
  31. Optional<size_t> m_clean_index;
  32. Optional<Time> m_last_unmodified_timestamp;
  33. };
  34. }