info_boosts_widget.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #include "data/data_boosts.h"
  9. #include "info/info_content_widget.h"
  10. namespace Info::Boosts {
  11. class InnerWidget;
  12. class Memento final : public ContentMemento {
  13. public:
  14. Memento(not_null<Controller*> controller);
  15. Memento(not_null<PeerData*> peer);
  16. ~Memento();
  17. object_ptr<ContentWidget> createWidget(
  18. QWidget *parent,
  19. not_null<Controller*> controller,
  20. const QRect &geometry) override;
  21. Section section() const override;
  22. using SavedState = Data::BoostStatus;
  23. void setState(SavedState states);
  24. [[nodiscard]] SavedState state();
  25. private:
  26. SavedState _state;
  27. };
  28. class Widget final : public ContentWidget {
  29. public:
  30. Widget(QWidget *parent, not_null<Controller*> controller);
  31. bool showInternal(not_null<ContentMemento*> memento) override;
  32. rpl::producer<QString> title() override;
  33. rpl::producer<bool> desiredShadowVisibility() const override;
  34. void showFinished() override;
  35. [[nodiscard]] not_null<PeerData*> peer() const;
  36. void setInternalState(
  37. const QRect &geometry,
  38. not_null<Memento*> memento);
  39. private:
  40. void saveState(not_null<Memento*> memento);
  41. void restoreState(not_null<Memento*> memento);
  42. std::shared_ptr<ContentMemento> doCreateMemento() override;
  43. const not_null<InnerWidget*> _inner;
  44. };
  45. [[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer);
  46. } // namespace Info::Boosts