Single-click change Send As.

This commit is contained in:
John Preston 2021-11-09 20:42:35 +04:00
parent 773755d70e
commit ad52c0cb16

View file

@ -34,13 +34,14 @@ public:
void prepare() override; void prepare() override;
void rowClicked(not_null<PeerListRow*> row) override; void rowClicked(not_null<PeerListRow*> row) override;
[[nodiscard]] not_null<PeerData*> selected() const; [[nodiscard]] rpl::producer<not_null<PeerData*>> clicked() const;
private: private:
std::unique_ptr<PeerListRow> createRow(not_null<PeerData*> peer); std::unique_ptr<PeerListRow> createRow(not_null<PeerData*> peer);
std::vector<not_null<PeerData*>> _list; std::vector<not_null<PeerData*>> _list;
not_null<PeerData*> _selected; not_null<PeerData*> _selected;
rpl::event_stream<not_null<PeerData*>> _clicked;
}; };
@ -92,15 +93,11 @@ void ListController::rowClicked(not_null<PeerListRow*> row) {
if (peer == _selected) { if (peer == _selected) {
return; return;
} }
const auto previous = delegate()->peerListFindRow(_selected->id.value); _clicked.fire_copy(peer);
Assert(previous != nullptr);
delegate()->peerListSetRowChecked(previous, false);
delegate()->peerListSetRowChecked(row, true);
_selected = peer;
} }
not_null<PeerData*> ListController::selected() const { rpl::producer<not_null<PeerData*>> ListController::clicked() const {
return _selected; return _clicked.events();
} }
} // namespace } // namespace
@ -131,19 +128,22 @@ void ChooseSendAsBox(
controller->setStyleOverrides( controller->setStyleOverrides(
&st::peerListJoinAsList, &st::peerListJoinAsList,
nullptr); nullptr);
controller->clicked(
) | rpl::start_with_next([=](not_null<PeerData*> peer) {
const auto weak = MakeWeak(box);
done(peer);
if (weak) {
box->closeBox();
}
}, box->lifetime());
const auto content = box->addRow( const auto content = box->addRow(
object_ptr<PeerListContent>(box, controller), object_ptr<PeerListContent>(box, controller),
style::margins()); style::margins());
delegate->setContent(content); delegate->setContent(content);
controller->setDelegate(delegate); controller->setDelegate(delegate);
box->addButton(tr::lng_settings_save(), [=] { box->addButton(tr::lng_box_done(), [=] { box->closeBox(); });
const auto weak = MakeWeak(box);
done(controller->selected());
if (weak) {
box->closeBox();
}
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
} }
void SetupSendAsButton( void SetupSendAsButton(