| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /*
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- */
- #include "passport/passport_panel_form.h"
- #include "passport/passport_panel_controller.h"
- #include "passport/ui/passport_form_row.h"
- #include "lang/lang_keys.h"
- #include "boxes/abstract_box.h"
- #include "core/click_handler_types.h"
- #include "data/data_user.h"
- #include "ui/controls/userpic_button.h"
- #include "ui/effects/animations.h"
- #include "ui/effects/scroll_content_shadow.h"
- #include "ui/widgets/buttons.h"
- #include "ui/widgets/scroll_area.h"
- #include "ui/widgets/labels.h"
- #include "ui/widgets/box_content_divider.h"
- #include "ui/wrap/vertical_layout.h"
- #include "ui/wrap/padding_wrap.h"
- #include "ui/text/text_utilities.h"
- #include "ui/text/text_options.h"
- #include "ui/ui_utility.h"
- #include "styles/style_passport.h"
- #include "styles/style_layers.h"
- #include "styles/style_boxes.h"
- namespace Passport {
- PanelForm::PanelForm(
- QWidget *parent,
- not_null<PanelController*> controller)
- : RpWidget(parent)
- , _controller(controller)
- , _scroll(this, st::passportPanelScroll)
- , _submit(
- this,
- tr::lng_passport_authorize(),
- st::passportPanelAuthorize) {
- setupControls();
- }
- void PanelForm::setupControls() {
- const auto inner = setupContent();
- _submit->addClickHandler([=] {
- _controller->submitForm();
- });
- SetupShadowsToScrollContent(this, _scroll, inner->heightValue());
- }
- not_null<Ui::RpWidget*> PanelForm::setupContent() {
- const auto bot = _controller->bot();
- const auto inner = _scroll->setOwnedWidget(
- object_ptr<Ui::VerticalLayout>(this));
- _scroll->widthValue(
- ) | rpl::start_with_next([=](int width) {
- inner->resizeToWidth(width);
- }, inner->lifetime());
- const auto userpicWrap = inner->add(
- object_ptr<Ui::FixedHeightWidget>(
- inner,
- st::passportFormUserpic.size.height()),
- st::passportFormUserpicPadding);
- _userpic = Ui::AttachParentChild(
- userpicWrap,
- object_ptr<Ui::UserpicButton>(
- userpicWrap,
- bot,
- st::passportFormUserpic));
- userpicWrap->widthValue(
- ) | rpl::start_with_next([=](int width) {
- _userpic->move((width - _userpic->width()) / 2, _userpic->y());
- }, _userpic->lifetime());
- _about1 = inner->add(
- object_ptr<Ui::CenterWrap<Ui::FlatLabel>>(
- inner,
- object_ptr<Ui::FlatLabel>(
- inner,
- tr::lng_passport_request1(tr::now, lt_bot, bot->name()),
- st::passportPasswordLabelBold)),
- st::passportFormAbout1Padding)->entity();
- _about2 = inner->add(
- object_ptr<Ui::CenterWrap<Ui::FlatLabel>>(
- inner,
- object_ptr<Ui::FlatLabel>(
- inner,
- tr::lng_passport_request2(tr::now),
- st::passportPasswordLabel)),
- st::passportFormAbout2Padding)->entity();
- inner->add(object_ptr<Ui::BoxContentDivider>(
- inner,
- st::passportFormDividerHeight));
- inner->add(
- object_ptr<Ui::FlatLabel>(
- inner,
- tr::lng_passport_header(tr::now),
- st::passportFormHeader),
- st::passportFormHeaderPadding);
- auto index = 0;
- _controller->fillRows([&](
- QString title,
- QString description,
- bool ready,
- bool error) {
- _rows.push_back(inner->add(object_ptr<Row>(this)));
- _rows.back()->addClickHandler([=] {
- _controller->editScope(index);
- });
- _rows.back()->updateContent(
- title,
- description,
- ready,
- error,
- anim::type::instant);
- ++index;
- });
- _controller->refillRows(
- ) | rpl::start_with_next([=] {
- auto index = 0;
- _controller->fillRows([&](
- QString title,
- QString description,
- bool ready,
- bool error) {
- Expects(index < _rows.size());
- _rows[index++]->updateContent(
- title,
- description,
- ready,
- error,
- anim::type::normal);
- });
- }, lifetime());
- const auto policyUrl = _controller->privacyPolicyUrl();
- auto policyLink = tr::lng_passport_policy(
- lt_bot,
- rpl::single(bot->name())
- ) | Ui::Text::ToLink(
- policyUrl
- ) | rpl::map([=](TextWithEntities &&text) {
- return Ui::Text::Wrapped(std::move(text), EntityType::Bold);
- });
- auto text = policyUrl.isEmpty()
- ? tr::lng_passport_allow(
- lt_bot,
- rpl::single('@' + bot->username())
- ) | Ui::Text::ToWithEntities()
- : tr::lng_passport_accept_allow(
- lt_policy,
- std::move(policyLink),
- lt_bot,
- rpl::single('@' + bot->username()) | Ui::Text::ToWithEntities(),
- Ui::Text::WithEntities);
- const auto policy = inner->add(
- object_ptr<Ui::FlatLabel>(
- inner,
- std::move(text),
- st::passportFormPolicy),
- st::passportFormPolicyPadding);
- policy->setLinksTrusted();
- return inner;
- }
- void PanelForm::resizeEvent(QResizeEvent *e) {
- updateControlsGeometry();
- }
- void PanelForm::updateControlsGeometry() {
- const auto submitTop = height() - _submit->height();
- _scroll->setGeometry(0, 0, width(), submitTop);
- _submit->setFullWidth(width());
- _submit->moveToLeft(0, submitTop);
- _scroll->updateBars();
- }
- } // namespace Passport
|