info_bot_earn_widget.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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_credits_earn.h"
  9. #include "info/info_content_widget.h"
  10. namespace Info::BotEarn {
  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::CreditsEarnStatistics;
  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. void setInnerFocus() override;
  36. [[nodiscard]] not_null<PeerData*> peer() const;
  37. void setInternalState(
  38. const QRect &geometry,
  39. not_null<Memento*> memento);
  40. private:
  41. void saveState(not_null<Memento*> memento);
  42. void restoreState(not_null<Memento*> memento);
  43. std::shared_ptr<ContentMemento> doCreateMemento() override;
  44. const not_null<InnerWidget*> _inner;
  45. };
  46. [[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer);
  47. } // namespace Info::BotEarn