Moved code for send context menu to namespace.

This commit is contained in:
23rd 2020-08-10 15:22:54 +03:00 committed by John Preston
parent af9440db38
commit 14cda49db2
22 changed files with 119 additions and 93 deletions

View file

@ -1087,7 +1087,7 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
Ui::show( Ui::show(
HistoryView::PrepareScheduleBox( HistoryView::PrepareScheduleBox(
this, this,
SendMenuType::Scheduled, SendMenu::Type::Scheduled,
send), send),
Ui::LayerOption::KeepOther); Ui::LayerOption::KeepOther);
}; };
@ -1108,9 +1108,11 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
if (_sendType == Api::SendType::Normal) { if (_sendType == Api::SendType::Normal) {
const auto sendMenuType = [=] { const auto sendMenuType = [=] {
collectError(); collectError();
return *error ? SendMenuType::Disabled : SendMenuType::Scheduled; return *error
? SendMenu::Type::Disabled
: SendMenu::Type::Scheduled;
}; };
SetupSendMenuAndShortcuts( SendMenu::SetupMenuAndShortcuts(
submit.data(), submit.data(),
sendMenuType, sendMenuType,
sendSilent, sendSilent,

View file

@ -1667,7 +1667,7 @@ SendFilesBox::SendFilesBox(
CompressConfirm compressed, CompressConfirm compressed,
SendLimit limit, SendLimit limit,
Api::SendType sendType, Api::SendType sendType,
SendMenuType sendMenuType) SendMenu::Type sendMenuType)
: _controller(controller) : _controller(controller)
, _sendType(sendType) , _sendType(sendType)
, _list(std::move(list)) , _list(std::move(list))
@ -1837,7 +1837,7 @@ void SendFilesBox::setupShadows(
void SendFilesBox::prepare() { void SendFilesBox::prepare() {
_send = addButton(tr::lng_send_button(), [=] { send({}); }); _send = addButton(tr::lng_send_button(), [=] { send({}); });
if (_sendType == Api::SendType::Normal) { if (_sendType == Api::SendType::Normal) {
SetupSendMenuAndShortcuts( SendMenu::SetupMenuAndShortcuts(
_send, _send,
[=] { return _sendMenuType; }, [=] { return _sendMenuType; },
[=] { sendSilent(); }, [=] { sendSilent(); },
@ -2418,7 +2418,7 @@ void SendFilesBox::sendSilent() {
void SendFilesBox::sendScheduled() { void SendFilesBox::sendScheduled() {
const auto type = (_sendType == Api::SendType::ScheduledToUser) const auto type = (_sendType == Api::SendType::ScheduledToUser)
? SendMenuType::ScheduledToUser ? SendMenu::Type::ScheduledToUser
: _sendMenuType; : _sendMenuType;
const auto callback = [=](Api::SendOptions options) { send(options); }; const auto callback = [=](Api::SendOptions options) { send(options); };
Ui::show( Ui::show(

View file

@ -40,7 +40,9 @@ namespace Window {
class SessionController; class SessionController;
} // namespace Window } // namespace Window
enum class SendMenuType; namespace SendMenu {
enum class Type;
} // namespace SendMenu
enum class SendFilesWay { enum class SendFilesWay {
Album, Album,
@ -62,7 +64,7 @@ public:
CompressConfirm compressed, CompressConfirm compressed,
SendLimit limit, SendLimit limit,
Api::SendType sendType, Api::SendType sendType,
SendMenuType sendMenuType); SendMenu::Type sendMenuType);
void setConfirmedCallback( void setConfirmedCallback(
Fn<void( Fn<void(
@ -142,7 +144,7 @@ private:
CompressConfirm _compressConfirmInitial = CompressConfirm::None; CompressConfirm _compressConfirmInitial = CompressConfirm::None;
CompressConfirm _compressConfirm = CompressConfirm::None; CompressConfirm _compressConfirm = CompressConfirm::None;
SendLimit _sendLimit = SendLimit::Many; SendLimit _sendLimit = SendLimit::Many;
SendMenuType _sendMenuType = SendMenuType(); SendMenu::Type _sendMenuType = SendMenu::Type();
Fn<void( Fn<void(
Storage::PreparedList &&list, Storage::PreparedList &&list,

View file

@ -409,13 +409,13 @@ void ShareBox::keyPressEvent(QKeyEvent *e) {
} }
} }
SendMenuType ShareBox::sendMenuType() const { SendMenu::Type ShareBox::sendMenuType() const {
const auto selected = _inner->selected(); const auto selected = _inner->selected();
return ranges::all_of(selected, HistoryView::CanScheduleUntilOnline) return ranges::all_of(selected, HistoryView::CanScheduleUntilOnline)
? SendMenuType::ScheduledToUser ? SendMenu::Type::ScheduledToUser
: (selected.size() == 1 && selected.front()->isSelf()) : (selected.size() == 1 && selected.front()->isSelf())
? SendMenuType::Reminder ? SendMenu::Type::Reminder
: SendMenuType::Scheduled; : SendMenu::Type::Scheduled;
} }
void ShareBox::createButtons() { void ShareBox::createButtons() {
@ -424,7 +424,7 @@ void ShareBox::createButtons() {
const auto send = addButton(tr::lng_share_confirm(), [=] { const auto send = addButton(tr::lng_share_confirm(), [=] {
submit({}); submit({});
}); });
SetupSendMenuAndShortcuts( SendMenu::SetupMenuAndShortcuts(
send, send,
[=] { return sendMenuType(); }, [=] { return sendMenuType(); },
[=] { submitSilent(); }, [=] { submitSilent(); },

View file

@ -14,7 +14,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/round_checkbox.h" #include "ui/effects/round_checkbox.h"
#include "mtproto/sender.h" #include "mtproto/sender.h"
enum class SendMenuType; namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace Window { namespace Window {
class SessionNavigation; class SessionNavigation;
@ -82,7 +84,7 @@ private:
void copyLink(); void copyLink();
bool searchByUsername(bool useCache = false); bool searchByUsername(bool useCache = false);
SendMenuType sendMenuType() const; SendMenu::Type sendMenuType() const;
void scrollTo(Ui::ScrollToRequest request); void scrollTo(Ui::ScrollToRequest request);
void needSearchByUsername(); void needSearchByUsername();

View file

@ -16,7 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_file_origin.h" #include "data/data_file_origin.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "data/stickers/data_stickers.h" #include "data/stickers/data_stickers.h"
#include "chat_helpers/send_context_menu.h" // FillSendMenu #include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
#include "chat_helpers/stickers_lottie.h" #include "chat_helpers/stickers_lottie.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "apiwrap.h" #include "apiwrap.h"
@ -1022,18 +1022,18 @@ void FieldAutocompleteInner::contextMenuEvent(QContextMenuEvent *e) {
return; return;
} }
const auto index = _sel; const auto index = _sel;
const auto type = SendMenuType::Scheduled; const auto type = SendMenu::Type::Scheduled;
const auto method = FieldAutocomplete::ChooseMethod::ByClick; const auto method = FieldAutocomplete::ChooseMethod::ByClick;
_menu = base::make_unique_q<Ui::PopupMenu>(this); _menu = base::make_unique_q<Ui::PopupMenu>(this);
const auto send = [=](Api::SendOptions options) { const auto send = [=](Api::SendOptions options) {
chooseAtIndex(method, index, options); chooseAtIndex(method, index, options);
}; };
FillSendMenu( SendMenu::FillSendMenu(
_menu, _menu,
[&] { return type; }, [&] { return type; },
DefaultSilentCallback(send), SendMenu::DefaultSilentCallback(send),
DefaultScheduleCallback(this, type, send)); SendMenu::DefaultScheduleCallback(this, type, send));
if (!_menu->actions().empty()) { if (!_menu->actions().empty()) {
_menu->popup(QCursor::pos()); _menu->popup(QCursor::pos());

View file

@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_photo_media.h" #include "data/data_photo_media.h"
#include "data/data_document_media.h" #include "data/data_document_media.h"
#include "data/stickers/data_stickers.h" #include "data/stickers/data_stickers.h"
#include "chat_helpers/send_context_menu.h" // FillSendMenu #include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/input_fields.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
@ -365,7 +365,7 @@ void GifsListWidget::mousePressEvent(QMouseEvent *e) {
void GifsListWidget::fillContextMenu( void GifsListWidget::fillContextMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
SendMenuType type) { SendMenu::Type type) {
if (_selected < 0 || _pressed >= 0) { if (_selected < 0 || _pressed >= 0) {
return; return;
} }
@ -375,11 +375,11 @@ void GifsListWidget::fillContextMenu(
const auto send = [=](Api::SendOptions options) { const auto send = [=](Api::SendOptions options) {
selectInlineResult(row, column, options, true); selectInlineResult(row, column, options, true);
}; };
FillSendMenu( SendMenu::FillSendMenu(
menu, menu,
[&] { return type; }, [&] { return type; },
DefaultSilentCallback(send), SendMenu::DefaultSilentCallback(send),
DefaultScheduleCallback(this, type, send)); SendMenu::DefaultScheduleCallback(this, type, send));
[&] { [&] {
const auto row = _selected / MatrixRowShift; const auto row = _selected / MatrixRowShift;

View file

@ -34,7 +34,9 @@ namespace Window {
class SessionController; class SessionController;
} // namespace Window } // namespace Window
enum class SendMenuType; namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace ChatHelpers { namespace ChatHelpers {
@ -77,7 +79,7 @@ public:
void fillContextMenu( void fillContextMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
SendMenuType type) override; SendMenu::Type type) override;
~GifsListWidget(); ~GifsListWidget();

View file

@ -17,13 +17,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
namespace SendMenu {
Fn<void()> DefaultSilentCallback(Fn<void(Api::SendOptions)> send) { Fn<void()> DefaultSilentCallback(Fn<void(Api::SendOptions)> send) {
return [=] { send({ .silent = true }); }; return [=] { send({ .silent = true }); };
} }
Fn<void()> DefaultScheduleCallback( Fn<void()> DefaultScheduleCallback(
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
SendMenuType type, Type type,
Fn<void(Api::SendOptions)> send) { Fn<void(Api::SendOptions)> send) {
const auto weak = Ui::MakeWeak(parent); const auto weak = Ui::MakeWeak(parent);
return [=] { return [=] {
@ -38,24 +40,24 @@ Fn<void()> DefaultScheduleCallback(
FillMenuResult FillSendMenu( FillMenuResult FillSendMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
Fn<SendMenuType()> type, Fn<Type()> type,
Fn<void()> silent, Fn<void()> silent,
Fn<void()> schedule) { Fn<void()> schedule) {
if (!silent && !schedule) { if (!silent && !schedule) {
return FillMenuResult::None; return FillMenuResult::None;
} }
const auto now = type(); const auto now = type();
if (now == SendMenuType::Disabled if (now == Type::Disabled
|| (!silent && now == SendMenuType::SilentOnly)) { || (!silent && now == Type::SilentOnly)) {
return FillMenuResult::None; return FillMenuResult::None;
} }
if (silent && now != SendMenuType::Reminder) { if (silent && now != Type::Reminder) {
menu->addAction(tr::lng_send_silent_message(tr::now), silent); menu->addAction(tr::lng_send_silent_message(tr::now), silent);
} }
if (schedule && now != SendMenuType::SilentOnly) { if (schedule && now != Type::SilentOnly) {
menu->addAction( menu->addAction(
(now == SendMenuType::Reminder (now == Type::Reminder
? tr::lng_reminder_message(tr::now) ? tr::lng_reminder_message(tr::now)
: tr::lng_schedule_message(tr::now)), : tr::lng_schedule_message(tr::now)),
schedule); schedule);
@ -63,9 +65,9 @@ FillMenuResult FillSendMenu(
return FillMenuResult::Success; return FillMenuResult::Success;
} }
void SetupSendMenuAndShortcuts( void SetupMenuAndShortcuts(
not_null<Ui::RpWidget*> button, not_null<Ui::RpWidget*> button,
Fn<SendMenuType()> type, Fn<Type()> type,
Fn<void()> silent, Fn<void()> silent,
Fn<void()> schedule) { Fn<void()> schedule) {
if (!silent && !schedule) { if (!silent && !schedule) {
@ -93,12 +95,12 @@ void SetupSendMenuAndShortcuts(
using Command = Shortcuts::Command; using Command = Shortcuts::Command;
const auto now = type(); const auto now = type();
if (now == SendMenuType::Disabled if (now == Type::Disabled
|| (!silent && now == SendMenuType::SilentOnly)) { || (!silent && now == Type::SilentOnly)) {
return; return;
} }
(silent (silent
&& (now != SendMenuType::Reminder) && (now != Type::Reminder)
&& request->check(Command::SendSilentMessage) && request->check(Command::SendSilentMessage)
&& request->handle([=] { && request->handle([=] {
silent(); silent();
@ -106,7 +108,7 @@ void SetupSendMenuAndShortcuts(
})) }))
|| ||
(schedule (schedule
&& (now != SendMenuType::SilentOnly) && (now != Type::SilentOnly)
&& request->check(Command::ScheduleMessage) && request->check(Command::ScheduleMessage)
&& request->handle([=] { && request->handle([=] {
schedule(); schedule();
@ -130,3 +132,5 @@ void SetupSendMenuAndShortcuts(
})); }));
}, button->lifetime()); }, button->lifetime());
} }
} // namespace SendMenu

View file

@ -17,7 +17,9 @@ namespace Ui {
class PopupMenu; class PopupMenu;
} // namespace Ui } // namespace Ui
enum class SendMenuType { namespace SendMenu {
enum class Type {
Disabled, Disabled,
SilentOnly, SilentOnly,
Scheduled, Scheduled,
@ -33,17 +35,19 @@ enum class FillMenuResult {
Fn<void()> DefaultSilentCallback(Fn<void(Api::SendOptions)> send); Fn<void()> DefaultSilentCallback(Fn<void(Api::SendOptions)> send);
Fn<void()> DefaultScheduleCallback( Fn<void()> DefaultScheduleCallback(
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
SendMenuType type, Type type,
Fn<void(Api::SendOptions)> send); Fn<void(Api::SendOptions)> send);
FillMenuResult FillSendMenu( FillMenuResult FillSendMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
Fn<SendMenuType()> type, Fn<Type()> type,
Fn<void()> silent, Fn<void()> silent,
Fn<void()> schedule); Fn<void()> schedule);
void SetupSendMenuAndShortcuts( void SetupMenuAndShortcuts(
not_null<Ui::RpWidget*> button, not_null<Ui::RpWidget*> button,
Fn<SendMenuType()> type, Fn<Type()> type,
Fn<void()> silent, Fn<void()> silent,
Fn<void()> schedule); Fn<void()> schedule);
} // namespace SendMenu

View file

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_file_origin.h" #include "data/data_file_origin.h"
#include "data/data_cloud_file.h" #include "data/data_cloud_file.h"
#include "data/data_changes.h" #include "data/data_changes.h"
#include "chat_helpers/send_context_menu.h" // FillSendMenu #include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
#include "chat_helpers/stickers_lottie.h" #include "chat_helpers/stickers_lottie.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
@ -2055,7 +2055,7 @@ void StickersListWidget::showStickerSetBox(not_null<DocumentData*> document) {
void StickersListWidget::fillContextMenu( void StickersListWidget::fillContextMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
SendMenuType type) { SendMenu::Type type) {
auto selected = _selected; auto selected = _selected;
auto &sets = shownSets(); auto &sets = shownSets();
if (!selected || _pressed) { if (!selected || _pressed) {
@ -2072,11 +2072,11 @@ void StickersListWidget::fillContextMenu(
.document = document, .document = document,
.options = options }); .options = options });
}; };
FillSendMenu( SendMenu::FillSendMenu(
menu, menu,
[&] { return type; }, [&] { return type; },
DefaultSilentCallback(send), SendMenu::DefaultSilentCallback(send),
DefaultScheduleCallback(this, type, send)); SendMenu::DefaultScheduleCallback(this, type, send));
const auto toggleFavedSticker = [=] { const auto toggleFavedSticker = [=] {
document->session().api().toggleFavedSticker( document->session().api().toggleFavedSticker(

View file

@ -85,7 +85,7 @@ public:
void fillContextMenu( void fillContextMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
SendMenuType type) override; SendMenu::Type type) override;
~StickersListWidget(); ~StickersListWidget();

View file

@ -880,7 +880,7 @@ void TabbedSelector::contextMenuEvent(QContextMenuEvent *e) {
_menu = base::make_unique_q<Ui::PopupMenu>(this); _menu = base::make_unique_q<Ui::PopupMenu>(this);
const auto type = _sendMenuType const auto type = _sendMenuType
? _sendMenuType() ? _sendMenuType()
: SendMenuType::Disabled; : SendMenu::Type::Disabled;
currentTab()->widget()->fillContextMenu(_menu, type); currentTab()->widget()->fillContextMenu(_menu, type);
if (!_menu->actions().empty()) { if (!_menu->actions().empty()) {

View file

@ -34,7 +34,9 @@ namespace Window {
class SessionController; class SessionController;
} // namespace Window } // namespace Window
enum class SendMenuType; namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace ChatHelpers { namespace ChatHelpers {
@ -111,7 +113,7 @@ public:
_beforeHidingCallback = std::move(callback); _beforeHidingCallback = std::move(callback);
} }
void setSendMenuType(Fn<SendMenuType()> callback) { void setSendMenuType(Fn<SendMenu::Type()> callback) {
_sendMenuType = std::move(callback); _sendMenuType = std::move(callback);
} }
@ -230,7 +232,7 @@ private:
Fn<void(SelectorTab)> _afterShownCallback; Fn<void(SelectorTab)> _afterShownCallback;
Fn<void(SelectorTab)> _beforeHidingCallback; Fn<void(SelectorTab)> _beforeHidingCallback;
Fn<SendMenuType()> _sendMenuType; Fn<SendMenu::Type()> _sendMenuType;
rpl::event_stream<> _showRequests; rpl::event_stream<> _showRequests;
rpl::event_stream<> _slideFinished; rpl::event_stream<> _slideFinished;
@ -266,7 +268,7 @@ public:
} }
virtual void fillContextMenu( virtual void fillContextMenu(
not_null<Ui::PopupMenu*> menu, not_null<Ui::PopupMenu*> menu,
SendMenuType type) { SendMenu::Type type) {
} }
rpl::producer<int> scrollToRequests() const; rpl::producer<int> scrollToRequests() const;

View file

@ -308,7 +308,7 @@ HistoryWidget::HistoryWidget(
_fieldBarCancel->addClickHandler([=] { cancelFieldAreaState(); }); _fieldBarCancel->addClickHandler([=] { cancelFieldAreaState(); });
_send->addClickHandler([=] { sendButtonClicked(); }); _send->addClickHandler([=] { sendButtonClicked(); });
SetupSendMenuAndShortcuts( SendMenu::SetupMenuAndShortcuts(
_send, _send,
[=] { return sendButtonMenuType(); }, [=] { return sendButtonMenuType(); },
[=] { sendSilent(); }, [=] { sendSilent(); },
@ -3169,14 +3169,14 @@ void HistoryWidget::sendScheduled() {
Ui::LayerOption::KeepOther); Ui::LayerOption::KeepOther);
} }
SendMenuType HistoryWidget::sendMenuType() const { SendMenu::Type HistoryWidget::sendMenuType() const {
return !_peer return !_peer
? SendMenuType::Disabled ? SendMenu::Type::Disabled
: _peer->isSelf() : _peer->isSelf()
? SendMenuType::Reminder ? SendMenu::Type::Reminder
: HistoryView::CanScheduleUntilOnline(_peer) : HistoryView::CanScheduleUntilOnline(_peer)
? SendMenuType::ScheduledToUser ? SendMenu::Type::ScheduledToUser
: SendMenuType::Scheduled; : SendMenu::Type::Scheduled;
} }
auto HistoryWidget::computeSendButtonType() const { auto HistoryWidget::computeSendButtonType() const {
@ -3192,10 +3192,10 @@ auto HistoryWidget::computeSendButtonType() const {
return Type::Send; return Type::Send;
} }
SendMenuType HistoryWidget::sendButtonMenuType() const { SendMenu::Type HistoryWidget::sendButtonMenuType() const {
return (computeSendButtonType() == Ui::SendButton::Type::Send) return (computeSendButtonType() == Ui::SendButton::Type::Send)
? sendMenuType() ? sendMenuType()
: SendMenuType::Disabled; : SendMenu::Type::Disabled;
} }
void HistoryWidget::unblockUser() { void HistoryWidget::unblockUser() {

View file

@ -26,7 +26,10 @@ struct SendingAlbum;
enum class SendMediaType; enum class SendMediaType;
enum class CompressConfirm; enum class CompressConfirm;
class MessageLinksParser; class MessageLinksParser;
enum class SendMenuType;
namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace Api { namespace Api {
struct SendOptions; struct SendOptions;
@ -371,8 +374,8 @@ private:
void sendWithModifiers(Qt::KeyboardModifiers modifiers); void sendWithModifiers(Qt::KeyboardModifiers modifiers);
void sendSilent(); void sendSilent();
void sendScheduled(); void sendScheduled();
[[nodiscard]] SendMenuType sendMenuType() const; [[nodiscard]] SendMenu::Type sendMenuType() const;
[[nodiscard]] SendMenuType sendButtonMenuType() const; [[nodiscard]] SendMenu::Type sendButtonMenuType() const;
void handlePendingHistoryUpdate(); void handlePendingHistoryUpdate();
void fullPeerUpdated(PeerData *peer); void fullPeerUpdated(PeerData *peer);
void toggleTabbedSelectorMode(); void toggleTabbedSelectorMode();

View file

@ -435,12 +435,12 @@ bool AddRescheduleMessageAction(
const auto peer = item->history()->peer; const auto peer = item->history()->peer;
const auto sendMenuType = !peer const auto sendMenuType = !peer
? SendMenuType::Disabled ? SendMenu::Type::Disabled
: peer->isSelf() : peer->isSelf()
? SendMenuType::Reminder ? SendMenu::Type::Reminder
: HistoryView::CanScheduleUntilOnline(peer) : HistoryView::CanScheduleUntilOnline(peer)
? SendMenuType::ScheduledToUser ? SendMenu::Type::ScheduledToUser
: SendMenuType::Scheduled; : SendMenu::Type::Scheduled;
using S = Data::ScheduledMessages; using S = Data::ScheduledMessages;
const auto date = (item->date() == S::kScheduledUntilOnlineTimestamp) const auto date = (item->date() == S::kScheduledUntilOnlineTimestamp)

View file

@ -603,10 +603,10 @@ bool CanScheduleUntilOnline(not_null<PeerData*> peer) {
void ScheduleBox( void ScheduleBox(
not_null<Ui::GenericBox*> box, not_null<Ui::GenericBox*> box,
SendMenuType type, SendMenu::Type type,
Fn<void(Api::SendOptions)> done, Fn<void(Api::SendOptions)> done,
TimeId time) { TimeId time) {
box->setTitle((type == SendMenuType::Reminder) box->setTitle((type == SendMenu::Type::Reminder)
? tr::lng_remind_title() ? tr::lng_remind_title()
: tr::lng_schedule_title()); : tr::lng_schedule_title());
box->setWidth(st::boxWideWidth); box->setWidth(st::boxWideWidth);
@ -742,14 +742,14 @@ void ScheduleBox(
const auto submit = box->addButton(tr::lng_schedule_button(), [=] { const auto submit = box->addButton(tr::lng_schedule_button(), [=] {
save(false); save(false);
}); });
SetupSendMenuAndShortcuts( SendMenu::SetupMenuAndShortcuts(
submit.data(), submit.data(),
[=] { return SendMenuType::SilentOnly; }, [=] { return SendMenu::Type::SilentOnly; },
[=] { save(true); }, [=] { save(true); },
nullptr); nullptr);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
if (type == SendMenuType::ScheduledToUser) { if (type == SendMenu::Type::ScheduledToUser) {
const auto sendUntilOnline = box->addTopButton(st::infoTopBarMenu); const auto sendUntilOnline = box->addTopButton(st::infoTopBarMenu);
FillSendUntilOnlineMenu( FillSendUntilOnlineMenu(
sendUntilOnline.data(), sendUntilOnline.data(),

View file

@ -13,7 +13,9 @@ namespace Api {
struct SendOptions; struct SendOptions;
} // namespace Api } // namespace Api
enum class SendMenuType; namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace HistoryView { namespace HistoryView {
@ -21,14 +23,14 @@ namespace HistoryView {
[[nodiscard]] bool CanScheduleUntilOnline(not_null<PeerData*> peer); [[nodiscard]] bool CanScheduleUntilOnline(not_null<PeerData*> peer);
void ScheduleBox( void ScheduleBox(
not_null<Ui::GenericBox*> box, not_null<Ui::GenericBox*> box,
SendMenuType type, SendMenu::Type type,
Fn<void(Api::SendOptions)> done, Fn<void(Api::SendOptions)> done,
TimeId time); TimeId time);
template <typename Guard, typename Submit> template <typename Guard, typename Submit>
[[nodiscard]] object_ptr<Ui::GenericBox> PrepareScheduleBox( [[nodiscard]] object_ptr<Ui::GenericBox> PrepareScheduleBox(
Guard &&guard, Guard &&guard,
SendMenuType type, SendMenu::Type type,
Submit &&submit, Submit &&submit,
TimeId scheduleTime = DefaultScheduleTime()) { TimeId scheduleTime = DefaultScheduleTime()) {
return Box( return Box(

View file

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history.h" #include "history/history.h"
#include "history/history_drag_area.h" #include "history/history_drag_area.h"
#include "history/history_item.h" #include "history/history_item.h"
#include "chat_helpers/send_context_menu.h" // SendMenuType. #include "chat_helpers/send_context_menu.h" // SendMenu::Type.
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
@ -371,7 +371,7 @@ bool ScheduledWidget::confirmSendingFiles(
CanScheduleUntilOnline(_history->peer) CanScheduleUntilOnline(_history->peer)
? Api::SendType::ScheduledToUser ? Api::SendType::ScheduledToUser
: Api::SendType::Scheduled, : Api::SendType::Scheduled,
SendMenuType::Disabled); SendMenu::Type::Disabled);
//_field->setTextWithTags({}); //_field->setTextWithTags({});
box->setConfirmedCallback(crl::guard(this, [=]( box->setConfirmedCallback(crl::guard(this, [=](
@ -745,12 +745,12 @@ void ScheduledWidget::sendInlineResult(
_composeControls->focus(); _composeControls->focus();
} }
SendMenuType ScheduledWidget::sendMenuType() const { SendMenu::Type ScheduledWidget::sendMenuType() const {
return _history->peer->isSelf() return _history->peer->isSelf()
? SendMenuType::Reminder ? SendMenu::Type::Reminder
: HistoryView::CanScheduleUntilOnline(_history->peer) : HistoryView::CanScheduleUntilOnline(_history->peer)
? SendMenuType::ScheduledToUser ? SendMenu::Type::ScheduledToUser
: SendMenuType::Scheduled; : SendMenu::Type::Scheduled;
} }
void ScheduledWidget::setupScrollDownButton() { void ScheduledWidget::setupScrollDownButton() {

View file

@ -16,7 +16,10 @@ class History;
enum class CompressConfirm; enum class CompressConfirm;
enum class SendMediaType; enum class SendMediaType;
struct SendingAlbum; struct SendingAlbum;
enum class SendMenuType;
namespace SendMenu {
enum class Type;
} // namespace SendMenu
namespace Api { namespace Api {
struct SendOptions; struct SendOptions;
@ -149,7 +152,7 @@ private:
mtpRequestId *const saveEditMsgRequestId); mtpRequestId *const saveEditMsgRequestId);
void highlightSingleNewMessage(const Data::MessagesSlice &slice); void highlightSingleNewMessage(const Data::MessagesSlice &slice);
void chooseAttach(); void chooseAttach();
[[nodiscard]] SendMenuType sendMenuType() const; [[nodiscard]] SendMenu::Type sendMenuType() const;
void uploadFile(const QByteArray &fileContent, SendMediaType type); void uploadFile(const QByteArray &fileContent, SendMediaType type);
bool confirmSendingFiles( bool confirmSendingFiles(

View file

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "inline_bots/inline_results_widget.h" #include "inline_bots/inline_results_widget.h"
#include "api/api_common.h" #include "api/api_common.h"
#include "chat_helpers/send_context_menu.h" // FillSendMenu #include "chat_helpers/send_context_menu.h" // SendMenu::FillSendMenu
#include "data/data_photo.h" #include "data/data_photo.h"
#include "data/data_document.h" #include "data/data_document.h"
#include "data/data_channel.h" #include "data/data_channel.h"
@ -308,18 +308,18 @@ void Inner::contextMenuEvent(QContextMenuEvent *e) {
} }
const auto row = _selected / MatrixRowShift; const auto row = _selected / MatrixRowShift;
const auto column = _selected % MatrixRowShift; const auto column = _selected % MatrixRowShift;
const auto type = SendMenuType::Scheduled; const auto type = SendMenu::Type::Scheduled;
_menu = base::make_unique_q<Ui::PopupMenu>(this); _menu = base::make_unique_q<Ui::PopupMenu>(this);
const auto send = [=](Api::SendOptions options) { const auto send = [=](Api::SendOptions options) {
selectInlineResult(row, column, options); selectInlineResult(row, column, options);
}; };
FillSendMenu( SendMenu::FillSendMenu(
_menu, _menu,
[&] { return type; }, [&] { return type; },
DefaultSilentCallback(send), SendMenu::DefaultSilentCallback(send),
DefaultScheduleCallback(this, type, send)); SendMenu::DefaultScheduleCallback(this, type, send));
if (!_menu->actions().empty()) { if (!_menu->actions().empty()) {
_menu->popup(QCursor::pos()); _menu->popup(QCursor::pos());