mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added ability to show photo from Controller for sections.
This commit is contained in:
parent
7885be4a94
commit
eefa7263b5
16 changed files with 91 additions and 12 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue