info_profile_inner_widget.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 "ui/rp_widget.h"
  9. #include "base/object_ptr.h"
  10. namespace Data {
  11. class ForumTopic;
  12. class PhotoMedia;
  13. } // namespace Data
  14. namespace Window {
  15. class SessionController;
  16. } // namespace Window
  17. namespace Ui {
  18. class VerticalLayout;
  19. template <typename Widget>
  20. class SlideWrap;
  21. struct ScrollToRequest;
  22. class MultiSlideTracker;
  23. } // namespace Ui
  24. namespace Info {
  25. enum class Wrap;
  26. class Controller;
  27. namespace Profile {
  28. class Memento;
  29. class Members;
  30. class Cover;
  31. struct Origin;
  32. class InnerWidget final : public Ui::RpWidget {
  33. public:
  34. InnerWidget(
  35. QWidget *parent,
  36. not_null<Controller*> controller,
  37. Origin origin);
  38. void saveState(not_null<Memento*> memento);
  39. void restoreState(not_null<Memento*> memento);
  40. rpl::producer<Ui::ScrollToRequest> scrollToRequests() const;
  41. rpl::producer<int> desiredHeightValue() const override;
  42. protected:
  43. int resizeGetHeight(int newWidth) override;
  44. void visibleTopBottomUpdated(
  45. int visibleTop,
  46. int visibleBottom) override;
  47. private:
  48. object_ptr<RpWidget> setupContent(
  49. not_null<RpWidget*> parent,
  50. Origin origin);
  51. object_ptr<RpWidget> setupSharedMedia(not_null<RpWidget*> parent);
  52. void setupMembers(not_null<Ui::VerticalLayout*> container);
  53. int countDesiredHeight() const;
  54. void updateDesiredHeight() {
  55. _desiredHeight.fire(countDesiredHeight());
  56. }
  57. const not_null<Controller*> _controller;
  58. const not_null<PeerData*> _peer;
  59. PeerData * const _migrated = nullptr;
  60. Data::ForumTopic * const _topic = nullptr;
  61. PeerData *_reactionGroup = nullptr;
  62. std::shared_ptr<Data::PhotoMedia> _nonPersonalView;
  63. Members *_members = nullptr;
  64. Cover *_cover = nullptr;
  65. Ui::SlideWrap<RpWidget> *_sharedMediaWrap = nullptr;
  66. object_ptr<RpWidget> _content;
  67. bool _inResize = false;
  68. rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests;
  69. rpl::event_stream<int> _desiredHeight;
  70. };
  71. } // namespace Profile
  72. } // namespace Info