mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-01 06:55:58 +00:00
Improve monoforum chat profiles.
This commit is contained in:
@@ -750,9 +750,7 @@ void TopBarWidget::infoClicked() {
|
|||||||
} else if (const auto topic = key.topic()) {
|
} else if (const auto topic = key.topic()) {
|
||||||
_controller->showSection(std::make_shared<Info::Memento>(topic));
|
_controller->showSection(std::make_shared<Info::Memento>(topic));
|
||||||
} else if (const auto sublist = key.sublist()) {
|
} else if (const auto sublist = key.sublist()) {
|
||||||
_controller->showSection(std::make_shared<Info::Memento>(
|
_controller->showSection(std::make_shared<Info::Memento>(sublist));
|
||||||
sublist,
|
|
||||||
Info::Section(Storage::SharedMediaType::Photo)));
|
|
||||||
} else if (key.peer()->savedSublistsInfo()) {
|
} else if (key.peer()->savedSublistsInfo()) {
|
||||||
_controller->showSection(std::make_shared<Info::Memento>(
|
_controller->showSection(std::make_shared<Info::Memento>(
|
||||||
key.peer(),
|
key.peer(),
|
||||||
|
@@ -37,6 +37,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "data/data_forum.h"
|
#include "data/data_forum.h"
|
||||||
#include "data/data_forum_topic.h"
|
#include "data/data_forum_topic.h"
|
||||||
#include "data/data_peer_values.h"
|
#include "data/data_peer_values.h"
|
||||||
|
#include "data/data_saved_sublist.h"
|
||||||
#include "data/data_session.h"
|
#include "data/data_session.h"
|
||||||
#include "data/data_user.h"
|
#include "data/data_user.h"
|
||||||
#include "data/notify/data_notify_settings.h"
|
#include "data/notify/data_notify_settings.h"
|
||||||
@@ -1019,6 +1020,10 @@ public:
|
|||||||
not_null<Ui::RpWidget*> parent,
|
not_null<Ui::RpWidget*> parent,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
Origin origin);
|
Origin origin);
|
||||||
|
DetailsFiller(
|
||||||
|
not_null<Controller*> controller,
|
||||||
|
not_null<Ui::RpWidget*> parent,
|
||||||
|
not_null<Data::SavedSublist*> sublist);
|
||||||
DetailsFiller(
|
DetailsFiller(
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<Ui::RpWidget*> parent,
|
not_null<Ui::RpWidget*> parent,
|
||||||
@@ -1070,6 +1075,7 @@ private:
|
|||||||
not_null<Ui::RpWidget*> _parent;
|
not_null<Ui::RpWidget*> _parent;
|
||||||
not_null<PeerData*> _peer;
|
not_null<PeerData*> _peer;
|
||||||
Data::ForumTopic *_topic = nullptr;
|
Data::ForumTopic *_topic = nullptr;
|
||||||
|
Data::SavedSublist *_sublist = nullptr;
|
||||||
Origin _origin;
|
Origin _origin;
|
||||||
object_ptr<Ui::VerticalLayout> _wrap;
|
object_ptr<Ui::VerticalLayout> _wrap;
|
||||||
|
|
||||||
@@ -1169,6 +1175,17 @@ DetailsFiller::DetailsFiller(
|
|||||||
, _wrap(_parent) {
|
, _wrap(_parent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DetailsFiller::DetailsFiller(
|
||||||
|
not_null<Controller*> controller,
|
||||||
|
not_null<Ui::RpWidget*> parent,
|
||||||
|
not_null<Data::SavedSublist*> sublist)
|
||||||
|
: _controller(controller)
|
||||||
|
, _parent(parent)
|
||||||
|
, _peer(sublist->sublistPeer())
|
||||||
|
, _sublist(sublist)
|
||||||
|
, _wrap(_parent) {
|
||||||
|
}
|
||||||
|
|
||||||
DetailsFiller::DetailsFiller(
|
DetailsFiller::DetailsFiller(
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<Ui::RpWidget*> parent,
|
not_null<Ui::RpWidget*> parent,
|
||||||
@@ -2178,7 +2195,9 @@ Ui::MultiSlideTracker DetailsFiller::fillUserButtons(
|
|||||||
if (!user->isVerifyCodes()) {
|
if (!user->isVerifyCodes()) {
|
||||||
addSendMessageButton();
|
addSendMessageButton();
|
||||||
}
|
}
|
||||||
addReportReaction(tracker);
|
if (!_sublist) {
|
||||||
|
addReportReaction(tracker);
|
||||||
|
}
|
||||||
|
|
||||||
return tracker;
|
return tracker;
|
||||||
}
|
}
|
||||||
@@ -2261,7 +2280,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::fill() {
|
|||||||
} else {
|
} else {
|
||||||
add(object_ptr<Ui::BoxContentDivider>(_wrap));
|
add(object_ptr<Ui::BoxContentDivider>(_wrap));
|
||||||
}
|
}
|
||||||
if (const auto user = _peer->asUser()) {
|
if (const auto user = _sublist ? nullptr : _peer->asUser()) {
|
||||||
add(setupPersonalChannel(user));
|
add(setupPersonalChannel(user));
|
||||||
}
|
}
|
||||||
add(CreateSkipWidget(_wrap));
|
add(CreateSkipWidget(_wrap));
|
||||||
@@ -2276,7 +2295,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::fill() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!_peer->isSelf()) {
|
if (!_sublist && !_peer->isSelf()) {
|
||||||
add(setupMuteToggle());
|
add(setupMuteToggle());
|
||||||
}
|
}
|
||||||
setupMainButtons();
|
setupMainButtons();
|
||||||
@@ -2739,6 +2758,14 @@ object_ptr<Ui::RpWidget> SetupDetails(
|
|||||||
return filler.fill();
|
return filler.fill();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object_ptr<Ui::RpWidget> SetupDetails(
|
||||||
|
not_null<Controller*> controller,
|
||||||
|
not_null<Ui::RpWidget*> parent,
|
||||||
|
not_null<Data::SavedSublist*> sublist) {
|
||||||
|
DetailsFiller filler(controller, parent, sublist);
|
||||||
|
return filler.fill();
|
||||||
|
}
|
||||||
|
|
||||||
object_ptr<Ui::RpWidget> SetupDetails(
|
object_ptr<Ui::RpWidget> SetupDetails(
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<Ui::RpWidget*> parent,
|
not_null<Ui::RpWidget*> parent,
|
||||||
@@ -2988,7 +3015,9 @@ Cover *AddCover(
|
|||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
Data::ForumTopic *topic) {
|
Data::ForumTopic *topic,
|
||||||
|
Data::SavedSublist *sublist) {
|
||||||
|
const auto shown = sublist ? sublist->sublistPeer() : peer;
|
||||||
const auto result = topic
|
const auto result = topic
|
||||||
? container->add(object_ptr<Cover>(
|
? container->add(object_ptr<Cover>(
|
||||||
container,
|
container,
|
||||||
@@ -2997,13 +3026,13 @@ Cover *AddCover(
|
|||||||
: container->add(object_ptr<Cover>(
|
: container->add(object_ptr<Cover>(
|
||||||
container,
|
container,
|
||||||
controller->parentController(),
|
controller->parentController(),
|
||||||
peer,
|
shown,
|
||||||
[=] { return controller->wrapWidget(); }));
|
[=] { return controller->wrapWidget(); }));
|
||||||
result->showSection(
|
result->showSection(
|
||||||
) | rpl::start_with_next([=](Section section) {
|
) | rpl::start_with_next([=](Section section) {
|
||||||
controller->showSection(topic
|
controller->showSection(topic
|
||||||
? std::make_shared<Info::Memento>(topic, section)
|
? std::make_shared<Info::Memento>(topic, section)
|
||||||
: std::make_shared<Info::Memento>(peer, section));
|
: std::make_shared<Info::Memento>(shown, section));
|
||||||
}, result->lifetime());
|
}, result->lifetime());
|
||||||
result->setOnlineCount(rpl::single(0));
|
result->setOnlineCount(rpl::single(0));
|
||||||
return result;
|
return result;
|
||||||
@@ -3014,9 +3043,12 @@ void AddDetails(
|
|||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
Data::ForumTopic *topic,
|
Data::ForumTopic *topic,
|
||||||
|
Data::SavedSublist *sublist,
|
||||||
Origin origin) {
|
Origin origin) {
|
||||||
if (topic) {
|
if (topic) {
|
||||||
container->add(SetupDetails(controller, container, topic));
|
container->add(SetupDetails(controller, container, topic));
|
||||||
|
} else if (sublist) {
|
||||||
|
container->add(SetupDetails(controller, container, sublist));
|
||||||
} else {
|
} else {
|
||||||
container->add(SetupDetails(controller, container, peer, origin));
|
container->add(SetupDetails(controller, container, peer, origin));
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@ class VerticalLayout;
|
|||||||
|
|
||||||
namespace Data {
|
namespace Data {
|
||||||
class ForumTopic;
|
class ForumTopic;
|
||||||
|
class SavedSublist;
|
||||||
} // namespace Data
|
} // namespace Data
|
||||||
|
|
||||||
namespace Info {
|
namespace Info {
|
||||||
@@ -55,12 +56,14 @@ Cover *AddCover(
|
|||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
Data::ForumTopic *topic);
|
Data::ForumTopic *topic,
|
||||||
|
Data::SavedSublist *sublist);
|
||||||
void AddDetails(
|
void AddDetails(
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
Data::ForumTopic *topic,
|
Data::ForumTopic *topic,
|
||||||
|
Data::SavedSublist *sublist,
|
||||||
Origin origin);
|
Origin origin);
|
||||||
|
|
||||||
} // namespace Info::Profile
|
} // namespace Info::Profile
|
||||||
|
@@ -77,12 +77,12 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto result = object_ptr<Ui::VerticalLayout>(parent);
|
auto result = object_ptr<Ui::VerticalLayout>(parent);
|
||||||
_cover = AddCover(result, _controller, _peer, _topic);
|
_cover = AddCover(result, _controller, _peer, _topic, _sublist);
|
||||||
if (_topic && _topic->creating()) {
|
if (_topic && _topic->creating()) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddDetails(result, _controller, _peer, _topic, origin);
|
AddDetails(result, _controller, _peer, _topic, _sublist, origin);
|
||||||
result->add(setupSharedMedia(result.data()));
|
result->add(setupSharedMedia(result.data()));
|
||||||
if (_topic || _sublist) {
|
if (_topic || _sublist) {
|
||||||
return result;
|
return result;
|
||||||
|
@@ -110,6 +110,8 @@ void Widget::setInnerFocus() {
|
|||||||
rpl::producer<QString> Widget::title() {
|
rpl::producer<QString> Widget::title() {
|
||||||
if (controller()->key().topic()) {
|
if (controller()->key().topic()) {
|
||||||
return tr::lng_info_topic_title();
|
return tr::lng_info_topic_title();
|
||||||
|
} else if (controller()->key().sublist()) {
|
||||||
|
return tr::lng_info_user_title();
|
||||||
}
|
}
|
||||||
const auto peer = controller()->key().peer();
|
const auto peer = controller()->key().peer();
|
||||||
if (const auto user = peer->asUser()) {
|
if (const auto user = peer->asUser()) {
|
||||||
|
@@ -135,8 +135,10 @@ void InnerWidget::createProfileTop() {
|
|||||||
const auto peer = key.storiesPeer();
|
const auto peer = key.storiesPeer();
|
||||||
|
|
||||||
startTop();
|
startTop();
|
||||||
Profile::AddCover(_top, _controller, peer, nullptr);
|
|
||||||
Profile::AddDetails(_top, _controller, peer, nullptr, { v::null });
|
using namespace Profile;
|
||||||
|
AddCover(_top, _controller, peer, nullptr, nullptr);
|
||||||
|
AddDetails(_top, _controller, peer, nullptr, nullptr, { v::null });
|
||||||
|
|
||||||
auto tracker = Ui::MultiSlideTracker();
|
auto tracker = Ui::MultiSlideTracker();
|
||||||
const auto dividerWrap = _top->add(
|
const auto dividerWrap = _top->add(
|
||||||
|
Reference in New Issue
Block a user