119 lines
2.9 KiB
C++
119 lines
2.9 KiB
C++
/*
|
|
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 "info/feed/info_feed_cover.h"
|
|
|
|
#include "data/data_feed.h"
|
|
#include "data/data_session.h"
|
|
#include "info/info_controller.h"
|
|
#include "info/info_memento.h"
|
|
#include "lang/lang_keys.h"
|
|
#include "ui/widgets/labels.h"
|
|
#include "ui/special_buttons.h"
|
|
#include "auth_session.h"
|
|
#include "styles/style_info.h"
|
|
|
|
namespace Info {
|
|
namespace FeedProfile {
|
|
|
|
Cover::Cover(
|
|
QWidget *parent,
|
|
not_null<Controller*> controller)
|
|
: FixedHeightWidget(
|
|
parent,
|
|
st::infoProfilePhotoTop
|
|
+ st::infoProfilePhoto.size.height()
|
|
+ st::infoProfilePhotoBottom)
|
|
, _controller(controller)
|
|
, _feed(_controller->key().feed())
|
|
, _userpic(
|
|
this,
|
|
controller->parentController(),
|
|
_feed,
|
|
st::infoFeedProfilePhoto)
|
|
, _name(this, st::infoProfileNameLabel)
|
|
, _status(
|
|
this,
|
|
st::infoProfileMegagroupStatusLabel) {
|
|
_userpic->setPointerCursor(false);
|
|
_name->setSelectable(true);
|
|
_name->setContextCopyText(lang(lng_profile_copy_fullname));
|
|
refreshNameText();
|
|
refreshStatusText();
|
|
|
|
initViewers();
|
|
setupChildGeometry();
|
|
}
|
|
|
|
void Cover::setupChildGeometry() {
|
|
widthValue(
|
|
) | rpl::start_with_next([=](int newWidth) {
|
|
_userpic->moveToLeft(
|
|
st::infoProfilePhotoLeft,
|
|
st::infoProfilePhotoTop,
|
|
newWidth);
|
|
refreshNameGeometry(newWidth);
|
|
refreshStatusGeometry(newWidth);
|
|
}, lifetime());
|
|
}
|
|
|
|
void Cover::initViewers() {
|
|
Auth().data().feedUpdated(
|
|
) | rpl::filter([](const Data::FeedUpdate &update) {
|
|
return (update.flag == Data::FeedUpdateFlag::Channels);
|
|
}) | rpl::start_with_next(
|
|
[=] { refreshStatusText(); },
|
|
lifetime());
|
|
}
|
|
|
|
void Cover::refreshNameText() {
|
|
_name->setText(_feed->chatListName());
|
|
refreshNameGeometry(width());
|
|
}
|
|
|
|
void Cover::refreshStatusText() {
|
|
const auto statusText = [&] {
|
|
if (!_feed->channelsLoaded() || _feed->channels().empty()) {
|
|
return QString();
|
|
}
|
|
return lng_feed_channels(lt_count, _feed->channels().size());
|
|
}();
|
|
_status->setRichText(textcmdLink(1, statusText));
|
|
_status->setLink(1, std::make_shared<LambdaClickHandler>([=] {
|
|
_controller->showSection(Info::Memento(
|
|
_feed,
|
|
Section::Type::Channels));
|
|
}));
|
|
refreshStatusGeometry(width());
|
|
}
|
|
|
|
void Cover::refreshNameGeometry(int newWidth) {
|
|
auto nameLeft = st::infoProfileNameLeft;
|
|
auto nameTop = st::infoProfileNameTop;
|
|
auto nameWidth = newWidth
|
|
- nameLeft
|
|
- st::infoProfileNameRight;
|
|
_name->resizeToNaturalWidth(nameWidth);
|
|
_name->moveToLeft(nameLeft, nameTop, newWidth);
|
|
}
|
|
|
|
void Cover::refreshStatusGeometry(int newWidth) {
|
|
auto statusWidth = newWidth
|
|
- st::infoProfileStatusLeft
|
|
- st::infoProfileStatusRight;
|
|
_status->resizeToWidth(statusWidth);
|
|
_status->moveToLeft(
|
|
st::infoProfileStatusLeft,
|
|
st::infoProfileStatusTop,
|
|
newWidth);
|
|
}
|
|
|
|
Cover::~Cover() = default;
|
|
|
|
} // namespace FeedProfile
|
|
} // namespace Info
|