undo_controller.h 859 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. namespace Editor {
  9. enum class Undo {
  10. Undo,
  11. Redo,
  12. };
  13. class UndoController final {
  14. public:
  15. struct EnableRequest {
  16. Undo command = Undo::Undo;
  17. bool enable = true;
  18. };
  19. UndoController();
  20. void setCanPerformChanges(rpl::producer<EnableRequest> &&command);
  21. void setPerformRequestChanges(rpl::producer<Undo> &&command);
  22. [[nodiscard]] rpl::producer<EnableRequest> canPerformChanges() const;
  23. [[nodiscard]] rpl::producer<Undo> performRequestChanges() const;
  24. private:
  25. rpl::event_stream<Undo> _perform;
  26. rpl::event_stream<EnableRequest> _enable;
  27. rpl::lifetime _lifetime;
  28. };
  29. } // namespace Editor