Added ability to show photo from Controller for sections.

This commit is contained in:
23rd 2021-06-16 23:24:35 +03:00 committed by John Preston
parent 7885be4a94
commit eefa7263b5
16 changed files with 91 additions and 12 deletions

View file

@ -478,8 +478,20 @@ PhotoClickHandler::PhotoClickHandler(
, _peer(peer) { , _peer(peer) {
} }
PhotoOpenClickHandler::PhotoOpenClickHandler(
not_null<PhotoData*> photo,
Fn<void()> &&callback)
: PhotoClickHandler(photo)
, _handler(std::move(callback)) {
}
void PhotoOpenClickHandler::onClickImpl() const { void PhotoOpenClickHandler::onClickImpl() const {
Core::App().showPhoto(this); if (_handler) {
_handler();
}
}
void PhotoOpenClickHandlerOld::onClickImpl() const {
} }
void PhotoSaveClickHandler::onClickImpl() const { void PhotoSaveClickHandler::onClickImpl() const {

View file

@ -197,6 +197,18 @@ private:
}; };
class PhotoOpenClickHandler : public PhotoClickHandler { class PhotoOpenClickHandler : public PhotoClickHandler {
public:
PhotoOpenClickHandler(not_null<PhotoData*> photo, Fn<void()> &&callback);
protected:
void onClickImpl() const override;
private:
Fn<void()> _handler;
};
class PhotoOpenClickHandlerOld : public PhotoClickHandler {
public: public:
using PhotoClickHandler::PhotoClickHandler; using PhotoClickHandler::PhotoClickHandler;

View file

@ -602,6 +602,12 @@ void InnerWidget::elementShowPollResults(
FullMsgId context) { FullMsgId context) {
} }
void InnerWidget::elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) {
_controller->openPhoto(photo, context);
}
void InnerWidget::elementShowTooltip( void InnerWidget::elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) { Fn<void()> hiddenCallback) {

View file

@ -108,6 +108,9 @@ public:
void elementShowPollResults( void elementShowPollResults(
not_null<PollData*> poll, not_null<PollData*> poll,
FullMsgId context) override; FullMsgId context) override;
void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) override;
void elementShowTooltip( void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) override; Fn<void()> hiddenCallback) override;

View file

@ -2567,6 +2567,12 @@ void HistoryInner::elementShowPollResults(
_controller->showPollResults(poll, context); _controller->showPollResults(poll, context);
} }
void HistoryInner::elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) {
_controller->openPhoto(photo, context);
}
void HistoryInner::elementShowTooltip( void HistoryInner::elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) { Fn<void()> hiddenCallback) {
@ -3445,6 +3451,13 @@ not_null<HistoryView::ElementDelegate*> HistoryInner::ElementDelegate() {
Instance->elementShowPollResults(poll, context); Instance->elementShowPollResults(poll, context);
} }
} }
void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) override {
if (Instance) {
Instance->elementOpenPhoto(photo, context);
}
}
void elementShowTooltip( void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) override { Fn<void()> hiddenCallback) override {

View file

@ -88,6 +88,9 @@ public:
void elementShowPollResults( void elementShowPollResults(
not_null<PollData*> poll, not_null<PollData*> poll,
FullMsgId context); FullMsgId context);
void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context);
void elementShowTooltip( void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback); Fn<void()> hiddenCallback);

View file

@ -107,6 +107,11 @@ void SimpleElementDelegate::elementShowPollResults(
FullMsgId context) { FullMsgId context) {
} }
void SimpleElementDelegate::elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) {
}
void SimpleElementDelegate::elementShowTooltip( void SimpleElementDelegate::elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) { Fn<void()> hiddenCallback) {

View file

@ -60,6 +60,9 @@ public:
virtual void elementShowPollResults( virtual void elementShowPollResults(
not_null<PollData*> poll, not_null<PollData*> poll,
FullMsgId context) = 0; FullMsgId context) = 0;
virtual void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) = 0;
virtual void elementShowTooltip( virtual void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) = 0; Fn<void()> hiddenCallback) = 0;
@ -97,6 +100,9 @@ public:
void elementShowPollResults( void elementShowPollResults(
not_null<PollData*> poll, not_null<PollData*> poll,
FullMsgId context) override; FullMsgId context) override;
void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) override;
void elementShowTooltip( void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) override; Fn<void()> hiddenCallback) override;

View file

@ -1300,6 +1300,12 @@ void ListWidget::elementShowPollResults(
_controller->showPollResults(poll, context); _controller->showPollResults(poll, context);
} }
void ListWidget::elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) {
_controller->openPhoto(photo, context);
}
void ListWidget::elementShowTooltip( void ListWidget::elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) { Fn<void()> hiddenCallback) {

View file

@ -234,6 +234,9 @@ public:
void elementShowPollResults( void elementShowPollResults(
not_null<PollData*> poll, not_null<PollData*> poll,
FullMsgId context) override; FullMsgId context) override;
void elementOpenPhoto(
not_null<PhotoData*> photo,
FullMsgId context) override;
void elementShowTooltip( void elementShowTooltip(
const TextWithEntities &text, const TextWithEntities &text,
Fn<void()> hiddenCallback) override; Fn<void()> hiddenCallback) override;

View file

@ -39,7 +39,7 @@ void File::clickHandlerPressedChanged(
} }
void File::setLinks( void File::setLinks(
FileClickHandlerPtr &&openl, ClickHandlerPtr &&openl,
FileClickHandlerPtr &&savel, FileClickHandlerPtr &&savel,
FileClickHandlerPtr &&cancell) { FileClickHandlerPtr &&cancell) {
_openl = std::move(openl); _openl = std::move(openl);
@ -49,7 +49,6 @@ void File::setLinks(
void File::refreshParentId(not_null<HistoryItem*> realParent) { void File::refreshParentId(not_null<HistoryItem*> realParent) {
const auto contextId = realParent->fullId(); const auto contextId = realParent->fullId();
_openl->setMessageId(contextId);
_savel->setMessageId(contextId); _savel->setMessageId(contextId);
_cancell->setMessageId(contextId); _cancell->setMessageId(contextId);
} }

View file

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace HistoryView { namespace HistoryView {
class File : public Media { class File : public Media, public base::has_weak_ptr {
public: public:
File( File(
not_null<Element*> parent, not_null<Element*> parent,
@ -44,10 +44,11 @@ protected:
using FileClickHandlerPtr = std::shared_ptr<FileClickHandler>; using FileClickHandlerPtr = std::shared_ptr<FileClickHandler>;
not_null<HistoryItem*> _realParent; not_null<HistoryItem*> _realParent;
FileClickHandlerPtr _openl, _savel, _cancell; ClickHandlerPtr _openl;
FileClickHandlerPtr _savel, _cancell;
void setLinks( void setLinks(
FileClickHandlerPtr &&openl, ClickHandlerPtr &&openl,
FileClickHandlerPtr &&savel, FileClickHandlerPtr &&savel,
FileClickHandlerPtr &&cancell); FileClickHandlerPtr &&cancell);
void setDocumentLinks( void setDocumentLinks(

View file

@ -86,7 +86,9 @@ Photo::~Photo() {
void Photo::create(FullMsgId contextId, PeerData *chat) { void Photo::create(FullMsgId contextId, PeerData *chat) {
setLinks( setLinks(
std::make_shared<PhotoOpenClickHandler>(_data, contextId, chat), std::make_shared<PhotoOpenClickHandler>(_data, crl::guard(this, [=] {
showPhoto();
})),
std::make_shared<PhotoSaveClickHandler>(_data, contextId, chat), std::make_shared<PhotoSaveClickHandler>(_data, contextId, chat),
std::make_shared<PhotoCancelClickHandler>(_data, contextId, chat)); std::make_shared<PhotoCancelClickHandler>(_data, contextId, chat));
if ((_dataMedia = _data->activeMediaView())) { if ((_dataMedia = _data->activeMediaView())) {
@ -771,7 +773,7 @@ void Photo::playAnimation(bool autoplay) {
if (_streamed && autoplay) { if (_streamed && autoplay) {
return; return;
} else if (_streamed && videoAutoplayEnabled()) { } else if (_streamed && videoAutoplayEnabled()) {
Core::App().showPhoto(_data, _parent->data()); showPhoto();
return; return;
} }
if (_streamed) { if (_streamed) {
@ -844,4 +846,10 @@ void Photo::parentTextUpdated() {
history()->owner().requestViewResize(_parent); history()->owner().requestViewResize(_parent);
} }
void Photo::showPhoto() {
_parent->delegate()->elementOpenPhoto(
_data,
_parent->data()->fullId());
}
} // namespace HistoryView } // namespace HistoryView

View file

@ -102,6 +102,8 @@ protected:
private: private:
struct Streamed; struct Streamed;
void showPhoto();
void create(FullMsgId contextId, PeerData *chat = nullptr); void create(FullMsgId contextId, PeerData *chat = nullptr);
void playAnimation(bool autoplay) override; void playAnimation(bool autoplay) override;

View file

@ -272,7 +272,7 @@ Photo::Photo(
not_null<PhotoData*> photo) not_null<PhotoData*> photo)
: ItemBase(delegate, parent) : ItemBase(delegate, parent)
, _data(photo) , _data(photo)
, _link(std::make_shared<PhotoOpenClickHandler>(photo, parent->fullId())) { , _link(std::make_shared<PhotoOpenClickHandlerOld>(photo, parent->fullId())) {
if (_data->inlineThumbnailBytes().isEmpty() if (_data->inlineThumbnailBytes().isEmpty()
&& (_data->hasExact(Data::PhotoSize::Small) && (_data->hasExact(Data::PhotoSize::Small)
|| _data->hasExact(Data::PhotoSize::Thumbnail))) { || _data->hasExact(Data::PhotoSize::Thumbnail))) {
@ -1461,7 +1461,7 @@ Link::Link(
} else if (_page->type == WebPageType::Photo } else if (_page->type == WebPageType::Photo
|| _page->siteName == qstr("Twitter") || _page->siteName == qstr("Twitter")
|| _page->siteName == qstr("Facebook")) { || _page->siteName == qstr("Facebook")) {
_photol = std::make_shared<PhotoOpenClickHandler>( _photol = std::make_shared<PhotoOpenClickHandlerOld>(
_page->photo, _page->photo,
parent->fullId()); parent->fullId());
} else { } else {

View file

@ -293,8 +293,8 @@ void UserpicButton::openPeerPhoto() {
return; return;
} }
const auto photo = _peer->owner().photo(id); const auto photo = _peer->owner().photo(id);
if (photo->date) { if (photo->date && _controller) {
Core::App().showPhoto(photo, _peer); _controller->openPhoto(photo, _peer);
} }
} }