info_bot_earn_widget.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. #include "info/bot/earn/info_bot_earn_widget.h"
  8. #include "info/bot/earn/info_bot_earn_list.h"
  9. #include "info/info_controller.h"
  10. #include "info/info_memento.h"
  11. #include "lang/lang_keys.h"
  12. #include "ui/ui_utility.h"
  13. namespace Info::BotEarn {
  14. Memento::Memento(not_null<Controller*> controller)
  15. : ContentMemento(controller->statisticsTag()) {
  16. }
  17. Memento::Memento(not_null<PeerData*> peer)
  18. : ContentMemento(Info::Statistics::Tag{ peer, {}, {} }) {
  19. }
  20. Memento::~Memento() = default;
  21. Section Memento::section() const {
  22. return Section(Section::Type::BotEarn);
  23. }
  24. void Memento::setState(SavedState state) {
  25. _state = std::move(state);
  26. }
  27. Memento::SavedState Memento::state() {
  28. return base::take(_state);
  29. }
  30. object_ptr<ContentWidget> Memento::createWidget(
  31. QWidget *parent,
  32. not_null<Controller*> controller,
  33. const QRect &geometry) {
  34. auto result = object_ptr<Widget>(parent, controller);
  35. result->setInternalState(geometry, this);
  36. return result;
  37. }
  38. Widget::Widget(
  39. QWidget *parent,
  40. not_null<Controller*> controller)
  41. : ContentWidget(parent, controller)
  42. , _inner(setInnerWidget(object_ptr<InnerWidget>(this, controller))) {
  43. _inner->showRequests(
  44. ) | rpl::start_with_next([=](InnerWidget::ShowRequest request) {
  45. }, _inner->lifetime());
  46. _inner->scrollToRequests(
  47. ) | rpl::start_with_next([=](const Ui::ScrollToRequest &request) {
  48. scrollTo(request);
  49. }, _inner->lifetime());
  50. }
  51. not_null<PeerData*> Widget::peer() const {
  52. return _inner->peer();
  53. }
  54. bool Widget::showInternal(not_null<ContentMemento*> memento) {
  55. return (memento->statisticsTag().peer == peer());
  56. }
  57. rpl::producer<QString> Widget::title() {
  58. return tr::lng_bot_earn_title();
  59. }
  60. void Widget::setInternalState(
  61. const QRect &geometry,
  62. not_null<Memento*> memento) {
  63. setGeometry(geometry);
  64. Ui::SendPendingMoveResizeEvents(this);
  65. restoreState(memento);
  66. }
  67. rpl::producer<bool> Widget::desiredShadowVisibility() const {
  68. return rpl::single<bool>(true);
  69. }
  70. void Widget::showFinished() {
  71. _inner->showFinished();
  72. }
  73. void Widget::setInnerFocus() {
  74. _inner->setInnerFocus();
  75. }
  76. std::shared_ptr<ContentMemento> Widget::doCreateMemento() {
  77. auto result = std::make_shared<Memento>(controller());
  78. saveState(result.get());
  79. return result;
  80. }
  81. void Widget::saveState(not_null<Memento*> memento) {
  82. memento->setScrollTop(scrollTopSave());
  83. _inner->saveState(memento);
  84. }
  85. void Widget::restoreState(not_null<Memento*> memento) {
  86. _inner->restoreState(memento);
  87. scrollTopRestore(memento->scrollTop());
  88. }
  89. std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) {
  90. return std::make_shared<Info::Memento>(
  91. std::vector<std::shared_ptr<ContentMemento>>(
  92. 1,
  93. std::make_shared<Memento>(peer)));
  94. }
  95. } // namespace Info::BotEarn