Open jump-to-date by date click in topics.

This commit is contained in:
John Preston 2022-10-27 11:52:18 +04:00
parent 850746b0ba
commit 46ebbdb547
10 changed files with 42 additions and 14 deletions

View file

@ -3248,7 +3248,7 @@ void ListWidget::mouseActionUpdate() {
dateLeft += (widthForDate - dateWidth) / 2;
if (point.x() >= dateLeft && point.x() < dateLeft + dateWidth) {
_scrollDateLink = _delegate->listDateLink(view);
_delegate->listUpdateDateLink(_scrollDateLink, view);
dragState = TextState(
nullptr,
_scrollDateLink);

View file

@ -106,7 +106,9 @@ public:
virtual MessagesBarData listMessagesBar(
const std::vector<not_null<Element*>> &elements) = 0;
virtual void listContentRefreshed() = 0;
virtual ClickHandlerPtr listDateLink(not_null<Element*> view) = 0;
virtual void listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) = 0;
virtual bool listElementHideReply(not_null<const Element*> view) = 0;
virtual bool listElementShownUnread(not_null<const Element*> view) = 0;
virtual bool listIsGoodForAroundPosition(

View file

@ -544,8 +544,9 @@ MessagesBarData PinnedWidget::listMessagesBar(
void PinnedWidget::listContentRefreshed() {
}
ClickHandlerPtr PinnedWidget::listDateLink(not_null<Element*> view) {
return nullptr;
void PinnedWidget::listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) {
}
bool PinnedWidget::listElementHideReply(not_null<const Element*> view) {

View file

@ -98,7 +98,9 @@ public:
MessagesBarData listMessagesBar(
const std::vector<not_null<Element*>> &elements) override;
void listContentRefreshed() override;
ClickHandlerPtr listDateLink(not_null<Element*> view) override;
void listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) override;
bool listElementHideReply(not_null<const Element*> view) override;
bool listElementShownUnread(not_null<const Element*> view) override;
bool listIsGoodForAroundPosition(not_null<const Element*> view) override;

View file

@ -2010,8 +2010,19 @@ MessagesBarData RepliesWidget::listMessagesBar(
void RepliesWidget::listContentRefreshed() {
}
ClickHandlerPtr RepliesWidget::listDateLink(not_null<Element*> view) {
return nullptr;
void RepliesWidget::listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) {
if (!_topic) {
link = nullptr;
return;
}
const auto date = view->dateTime().date();
if (!link) {
link = std::make_shared<Window::DateClickHandler>(_topic, date);
} else {
static_cast<Window::DateClickHandler*>(link.get())->setDate(date);
}
}
bool RepliesWidget::listElementHideReply(not_null<const Element*> view) {

View file

@ -138,7 +138,9 @@ public:
MessagesBarData listMessagesBar(
const std::vector<not_null<Element*>> &elements) override;
void listContentRefreshed() override;
ClickHandlerPtr listDateLink(not_null<Element*> view) override;
void listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) override;
bool listElementHideReply(not_null<const Element*> view) override;
bool listElementShownUnread(not_null<const Element*> view) override;
bool listIsGoodForAroundPosition(not_null<const Element*> view) override;

View file

@ -1162,8 +1162,9 @@ MessagesBarData ScheduledWidget::listMessagesBar(
void ScheduledWidget::listContentRefreshed() {
}
ClickHandlerPtr ScheduledWidget::listDateLink(not_null<Element*> view) {
return nullptr;
void ScheduledWidget::listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) {
}
bool ScheduledWidget::listElementHideReply(not_null<const Element*> view) {

View file

@ -120,7 +120,9 @@ public:
MessagesBarData listMessagesBar(
const std::vector<not_null<Element*>> &elements) override;
void listContentRefreshed() override;
ClickHandlerPtr listDateLink(not_null<Element*> view) override;
void listUpdateDateLink(
ClickHandlerPtr &link,
not_null<Element*> view) override;
bool listElementHideReply(not_null<const Element*> view) override;
bool listElementShownUnread(not_null<const Element*> view) override;
bool listIsGoodForAroundPosition(

View file

@ -167,8 +167,9 @@ bool operator!=(const PeerThemeOverride &a, const PeerThemeOverride &b) {
}
DateClickHandler::DateClickHandler(Dialogs::Key chat, QDate date)
: _chat(chat)
, _date(date) {
: _chat(chat)
, _weak(chat.topic())
, _date(date) {
}
void DateClickHandler::setDate(QDate date) {
@ -178,7 +179,11 @@ void DateClickHandler::setDate(QDate date) {
void DateClickHandler::onClick(ClickContext context) const {
const auto my = context.other.value<ClickHandlerContext>();
if (const auto window = my.sessionWindow.get()) {
window->showCalendar(_chat, _date);
if (!_chat.topic()) {
window->showCalendar(_chat, _date);
} else if (const auto strong = _weak.get()) {
window->showCalendar(strong, _date);
}
}
}

View file

@ -70,6 +70,7 @@ namespace Data {
struct CloudTheme;
enum class CloudThemeType;
class Thread;
class ForumTopic;
} // namespace Data
namespace HistoryView::Reactions {
@ -119,6 +120,7 @@ public:
private:
Dialogs::Key _chat;
base::weak_ptr<Data::ForumTopic> _weak;
QDate _date;
};