info_profile_widget.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 "info/info_content_widget.h"
  9. namespace Data {
  10. class ForumTopic;
  11. } // namespace Data
  12. namespace Info::Profile {
  13. class InnerWidget;
  14. struct MembersState;
  15. struct GroupReactionOrigin {
  16. not_null<PeerData*> group;
  17. MsgId messageId = 0;
  18. };
  19. struct Origin {
  20. std::variant<v::null_t, GroupReactionOrigin> data;
  21. };
  22. class Memento final : public ContentMemento {
  23. public:
  24. explicit Memento(not_null<Controller*> controller);
  25. Memento(
  26. not_null<PeerData*> peer,
  27. PeerId migratedPeerId,
  28. Origin origin = { v::null });
  29. explicit Memento(not_null<Data::ForumTopic*> topic);
  30. object_ptr<ContentWidget> createWidget(
  31. QWidget *parent,
  32. not_null<Controller*> controller,
  33. const QRect &geometry) override;
  34. Section section() const override;
  35. [[nodiscard]] Origin origin() const {
  36. return _origin;
  37. }
  38. void setMembersState(std::unique_ptr<MembersState> state);
  39. std::unique_ptr<MembersState> membersState();
  40. ~Memento();
  41. private:
  42. Memento(
  43. not_null<PeerData*> peer,
  44. Data::ForumTopic *topic,
  45. PeerId migratedPeerId,
  46. Origin origin);
  47. std::unique_ptr<MembersState> _membersState;
  48. Origin _origin;
  49. };
  50. class Widget final : public ContentWidget {
  51. public:
  52. Widget(QWidget *parent, not_null<Controller*> controller, Origin origin);
  53. bool showInternal(
  54. not_null<ContentMemento*> memento) override;
  55. void setInternalState(
  56. const QRect &geometry,
  57. not_null<Memento*> memento);
  58. void setInnerFocus() override;
  59. rpl::producer<QString> title() override;
  60. rpl::producer<Dialogs::Stories::Content> titleStories() override;
  61. private:
  62. void saveState(not_null<Memento*> memento);
  63. void restoreState(not_null<Memento*> memento);
  64. std::shared_ptr<ContentMemento> doCreateMemento() override;
  65. InnerWidget *_inner = nullptr;
  66. };
  67. } // namespace Info::Profile