Added ability to remove WebPage preview from scheduled messages section.

This commit is contained in:
23rd 2020-06-03 14:24:00 +03:00
parent d98ac33425
commit 3c3ce24675
3 changed files with 71 additions and 49 deletions

View file

@ -74,16 +74,19 @@ public:
bool isEditingMessage() const; bool isEditingMessage() const;
rpl::producer<FullMsgId> editMsgId() const; rpl::producer<FullMsgId> editMsgId() const;
MessageToEdit queryToEdit(); MessageToEdit queryToEdit();
WebPageId webPageId() const;
rpl::producer<bool> visibleChanged(); rpl::producer<bool> visibleChanged();
protected: protected:
void paintEvent(QPaintEvent *e) override;
private: private:
void updateControlsGeometry(QSize size); void updateControlsGeometry(QSize size);
void updateVisible(); void updateVisible();
void paintWebPage(Painter &p);
void paintEditMessage(Painter &p);
struct Preview { struct Preview {
WebPageData *data = nullptr; WebPageData *data = nullptr;
Ui::Text::String title; Ui::Text::String title;
@ -121,6 +124,21 @@ void FieldHeader::init() {
updateControlsGeometry(size); updateControlsGeometry(size);
}, lifetime()); }, lifetime());
paintRequest(
) | rpl::start_with_next([=] {
Painter p(this);
p.fillRect(rect(), st::historyComposeAreaBg);
if (isEditingMessage()) {
const auto position = st::historyReplyIconPosition;
st::historyEditIcon.paint(p, position, width());
}
ShowWebPagePreview(_preview.data)
? paintWebPage(p)
: paintEditMessage(p);
}, lifetime());
const auto checkPreview = [=](not_null<const HistoryItem*> item) { const auto checkPreview = [=](not_null<const HistoryItem*> item) {
_preview = {}; _preview = {};
if (const auto media = item->media()) { if (const auto media = item->media()) {
@ -152,6 +170,7 @@ void FieldHeader::init() {
} else { } else {
_editMsgId = {}; _editMsgId = {};
} }
updateVisible();
}); });
_title.value( _title.value(
@ -198,57 +217,51 @@ void FieldHeader::previewRequested(
} }
void FieldHeader::paintEvent(QPaintEvent *e) { void FieldHeader::paintWebPage(Painter &p) {
Painter p(this); Expects(ShowWebPagePreview(_preview.data));
const auto replySkip = st::historyReplySkip; const auto textTop = st::msgReplyPadding.top();
const auto drawWebPagePreview = ShowWebPagePreview(_preview.data); auto previewLeft = st::historyReplySkip + st::webPageLeft;
p.fillRect(
st::historyReplySkip,
textTop,
st::webPageBar,
st::msgReplyBarSize.height(),
st::msgInReplyBarColor);
p.fillRect(rect(), st::historyComposeAreaBg); const QRect to(
previewLeft,
st::historyEditIcon.paint(p, st::historyReplyIconPosition, width()); textTop,
st::msgReplyBarSize.height(),
if (drawWebPagePreview) { st::msgReplyBarSize.height());
const auto textTop = st::msgReplyPadding.top(); if (HistoryView::DrawWebPageDataPreview(p, _preview.data, to)) {
auto previewLeft = st::historyReplySkip + st::webPageLeft; previewLeft += st::msgReplyBarSize.height()
p.fillRect( + st::msgReplyBarSkip
st::historyReplySkip, - st::msgReplyBarSize.width()
textTop, - st::msgReplyBarPos.x();
st::webPageBar,
st::msgReplyBarSize.height(),
st::msgInReplyBarColor);
const QRect to(
previewLeft,
textTop,
st::msgReplyBarSize.height(),
st::msgReplyBarSize.height());
if (HistoryView::DrawWebPageDataPreview(p, _preview.data, to)) {
previewLeft += st::msgReplyBarSize.height()
+ st::msgReplyBarSkip
- st::msgReplyBarSize.width()
- st::msgReplyBarPos.x();
}
p.setPen(st::historyReplyNameFg);
const auto elidedWidth = width()
- previewLeft
- _cancel->width()
- st::msgReplyPadding.right();
_preview.title.drawElided(
p,
previewLeft,
textTop,
elidedWidth);
p.setPen(st::historyComposeAreaFg);
_preview.description.drawElided(
p,
previewLeft,
textTop + st::msgServiceNameFont->height,
elidedWidth);
return;
} }
const auto elidedWidth = width()
- previewLeft
- _cancel->width()
- st::msgReplyPadding.right();
p.setPen(st::historyReplyNameFg);
_preview.title.drawElided(
p,
previewLeft,
textTop,
elidedWidth);
p.setPen(st::historyComposeAreaFg);
_preview.description.drawElided(
p,
previewLeft,
textTop + st::msgServiceNameFont->height,
elidedWidth);
}
void FieldHeader::paintEditMessage(Painter &p) {
const auto replySkip = st::historyReplySkip;
p.setPen(st::historyReplyNameFg); p.setPen(st::historyReplyNameFg);
p.setFont(st::msgServiceNameFont); p.setFont(st::msgServiceNameFont);
p.drawTextLeft( p.drawTextLeft(
@ -288,6 +301,10 @@ bool FieldHeader::hasPreview() const {
return _preview.data != nullptr; return _preview.data != nullptr;
} }
WebPageId FieldHeader::webPageId() const {
return hasPreview() ? _preview.data->id : CancelledWebPageId;
}
void FieldHeader::updateControlsGeometry(QSize size) { void FieldHeader::updateControlsGeometry(QSize size) {
_cancel->moveToRight(0, 0); _cancel->moveToRight(0, 0);
} }
@ -933,4 +950,8 @@ void ComposeControls::initWebpageProcess() {
} }
WebPageId ComposeControls::webPageId() const {
return _header->webPageId();
}
} // namespace HistoryView } // namespace HistoryView

View file

@ -104,6 +104,7 @@ public:
void cancelEditMessage(); void cancelEditMessage();
[[nodiscard]] TextWithTags getTextWithAppliedMarkdown() const; [[nodiscard]] TextWithTags getTextWithAppliedMarkdown() const;
[[nodiscard]] WebPageId webPageId() const;
void clear(); void clear();
void hidePanelsAnimated(); void hidePanelsAnimated();

View file

@ -484,7 +484,7 @@ void ScheduledWidget::send() {
} }
void ScheduledWidget::send(Api::SendOptions options) { void ScheduledWidget::send(Api::SendOptions options) {
const auto webPageId = 0;/* _previewCancelled const auto webPageId = _composeControls->webPageId();/* _previewCancelled
? CancelledWebPageId ? CancelledWebPageId
: ((_previewData && _previewData->pendingTill >= 0) : ((_previewData && _previewData->pendingTill >= 0)
? _previewData->id ? _previewData->id