info_stories_widget.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. #include "info/media/info_media_widget.h"
  10. namespace Info::Stories {
  11. class InnerWidget;
  12. enum class Tab;
  13. class Memento final : public ContentMemento {
  14. public:
  15. Memento(not_null<Controller*> controller);
  16. Memento(not_null<PeerData*> peer, Tab tab);
  17. ~Memento();
  18. object_ptr<ContentWidget> createWidget(
  19. QWidget *parent,
  20. not_null<Controller*> controller,
  21. const QRect &geometry) override;
  22. Section section() const override;
  23. [[nodiscard]] Media::Memento &media() {
  24. return _media;
  25. }
  26. [[nodiscard]] const Media::Memento &media() const {
  27. return _media;
  28. }
  29. private:
  30. Media::Memento _media;
  31. };
  32. class Widget final : public ContentWidget {
  33. public:
  34. Widget(QWidget *parent, not_null<Controller*> controller);
  35. void setIsStackBottom(bool isStackBottom) override;
  36. bool showInternal(
  37. not_null<ContentMemento*> memento) override;
  38. void setInternalState(
  39. const QRect &geometry,
  40. not_null<Memento*> memento);
  41. rpl::producer<SelectedItems> selectedListValue() const override;
  42. void selectionAction(SelectionAction action) override;
  43. rpl::producer<QString> title() override;
  44. private:
  45. void saveState(not_null<Memento*> memento);
  46. void restoreState(not_null<Memento*> memento);
  47. std::shared_ptr<ContentMemento> doCreateMemento() override;
  48. InnerWidget *_inner = nullptr;
  49. };
  50. [[nodiscard]] std::shared_ptr<Info::Memento> Make(
  51. not_null<PeerData*> peer,
  52. Tab tab = {});
  53. } // namespace Info::Stories