info_common_groups_widget.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 <rpl/producer.h>
  9. #include "info/info_content_widget.h"
  10. struct PeerListState;
  11. namespace Ui {
  12. class SearchFieldController;
  13. } // namespace Ui
  14. namespace Info {
  15. namespace CommonGroups {
  16. class InnerWidget;
  17. class Memento final : public ContentMemento {
  18. public:
  19. explicit Memento(not_null<UserData*> user);
  20. object_ptr<ContentWidget> createWidget(
  21. QWidget *parent,
  22. not_null<Controller*> controller,
  23. const QRect &geometry) override;
  24. Section section() const override;
  25. not_null<UserData*> user() const;
  26. void setListState(std::unique_ptr<PeerListState> state);
  27. std::unique_ptr<PeerListState> listState();
  28. ~Memento();
  29. private:
  30. std::unique_ptr<PeerListState> _listState;
  31. };
  32. class Widget final : public ContentWidget {
  33. public:
  34. Widget(
  35. QWidget *parent,
  36. not_null<Controller*> controller,
  37. not_null<UserData*> user);
  38. not_null<UserData*> user() const;
  39. bool showInternal(
  40. not_null<ContentMemento*> memento) override;
  41. void setInternalState(
  42. const QRect &geometry,
  43. not_null<Memento*> memento);
  44. rpl::producer<QString> title() override;
  45. private:
  46. void saveState(not_null<Memento*> memento);
  47. void restoreState(not_null<Memento*> memento);
  48. std::shared_ptr<ContentMemento> doCreateMemento() override;
  49. InnerWidget *_inner = nullptr;
  50. };
  51. } // namespace CommonGroups
  52. } // namespace Info