mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Fixed filling menu with send options for inline bots and autocomplete.
This commit is contained in:
parent
a6e4ac679c
commit
e1017380ec
7 changed files with 46 additions and 2 deletions
|
@ -68,6 +68,7 @@ public:
|
||||||
Api::SendOptions options = Api::SendOptions()) const;
|
Api::SendOptions options = Api::SendOptions()) const;
|
||||||
|
|
||||||
void setRecentInlineBotsInRows(int32 bots);
|
void setRecentInlineBotsInRows(int32 bots);
|
||||||
|
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
|
||||||
void rowsUpdated();
|
void rowsUpdated();
|
||||||
|
|
||||||
rpl::producer<FieldAutocomplete::MentionChosen> mentionChosen() const;
|
rpl::producer<FieldAutocomplete::MentionChosen> mentionChosen() const;
|
||||||
|
@ -121,6 +122,8 @@ private:
|
||||||
|
|
||||||
bool _previewShown = false;
|
bool _previewShown = false;
|
||||||
|
|
||||||
|
Fn<SendMenu::Type()> _sendMenuType;
|
||||||
|
|
||||||
rpl::event_stream<FieldAutocomplete::MentionChosen> _mentionChosen;
|
rpl::event_stream<FieldAutocomplete::MentionChosen> _mentionChosen;
|
||||||
rpl::event_stream<FieldAutocomplete::HashtagChosen> _hashtagChosen;
|
rpl::event_stream<FieldAutocomplete::HashtagChosen> _hashtagChosen;
|
||||||
rpl::event_stream<FieldAutocomplete::BotCommandChosen> _botCommandChosen;
|
rpl::event_stream<FieldAutocomplete::BotCommandChosen> _botCommandChosen;
|
||||||
|
@ -686,6 +689,10 @@ bool FieldAutocomplete::chooseSelected(ChooseMethod method) const {
|
||||||
return _inner->chooseSelected(method);
|
return _inner->chooseSelected(method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FieldAutocomplete::setSendMenuType(Fn<SendMenu::Type()> &&callback) {
|
||||||
|
_inner->setSendMenuType(std::move(callback));
|
||||||
|
}
|
||||||
|
|
||||||
bool FieldAutocomplete::eventFilter(QObject *obj, QEvent *e) {
|
bool FieldAutocomplete::eventFilter(QObject *obj, QEvent *e) {
|
||||||
auto hidden = isHidden();
|
auto hidden = isHidden();
|
||||||
auto moderate = Core::App().settings().moderateModeEnabled();
|
auto moderate = Core::App().settings().moderateModeEnabled();
|
||||||
|
@ -1116,7 +1123,9 @@ void FieldAutocomplete::Inner::contextMenuEvent(QContextMenuEvent *e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto index = _sel;
|
const auto index = _sel;
|
||||||
const auto type = SendMenu::Type::Scheduled;
|
const auto type = _sendMenuType
|
||||||
|
? _sendMenuType()
|
||||||
|
: SendMenu::Type::Disabled;
|
||||||
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);
|
||||||
|
|
||||||
|
@ -1301,6 +1310,11 @@ void FieldAutocomplete::Inner::showPreview() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FieldAutocomplete::Inner::setSendMenuType(
|
||||||
|
Fn<SendMenu::Type()> &&callback) {
|
||||||
|
_sendMenuType = std::move(callback);
|
||||||
|
}
|
||||||
|
|
||||||
auto FieldAutocomplete::Inner::mentionChosen() const
|
auto FieldAutocomplete::Inner::mentionChosen() const
|
||||||
-> rpl::producer<FieldAutocomplete::MentionChosen> {
|
-> rpl::producer<FieldAutocomplete::MentionChosen> {
|
||||||
return _mentionChosen.events();
|
return _mentionChosen.events();
|
||||||
|
|
|
@ -33,6 +33,11 @@ class DocumentMedia;
|
||||||
class CloudImageView;
|
class CloudImageView;
|
||||||
} // namespace Data
|
} // namespace Data
|
||||||
|
|
||||||
|
namespace SendMenu {
|
||||||
|
enum class Type;
|
||||||
|
} // namespace SendMenu
|
||||||
|
|
||||||
|
|
||||||
class FieldAutocomplete final : public Ui::RpWidget {
|
class FieldAutocomplete final : public Ui::RpWidget {
|
||||||
public:
|
public:
|
||||||
FieldAutocomplete(
|
FieldAutocomplete(
|
||||||
|
@ -98,6 +103,7 @@ public:
|
||||||
void setModerateKeyActivateCallback(Fn<bool(int)> callback) {
|
void setModerateKeyActivateCallback(Fn<bool(int)> callback) {
|
||||||
_moderateKeyActivateCallback = std::move(callback);
|
_moderateKeyActivateCallback = std::move(callback);
|
||||||
}
|
}
|
||||||
|
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
|
||||||
|
|
||||||
void hideFast();
|
void hideFast();
|
||||||
|
|
||||||
|
|
|
@ -1120,6 +1120,8 @@ void ComposeControls::initAutocomplete() {
|
||||||
});
|
});
|
||||||
}, _autocomplete->lifetime());
|
}, _autocomplete->lifetime());
|
||||||
|
|
||||||
|
_autocomplete->setSendMenuType([=] { return sendMenuType(); });
|
||||||
|
|
||||||
//_autocomplete->setModerateKeyActivateCallback([=](int key) {
|
//_autocomplete->setModerateKeyActivateCallback([=](int key) {
|
||||||
// return _keyboard->isHidden()
|
// return _keyboard->isHidden()
|
||||||
// ? false
|
// ? false
|
||||||
|
@ -2187,6 +2189,7 @@ void ComposeControls::applyInlineBotQuery(
|
||||||
InlineBots::ResultSelected result) {
|
InlineBots::ResultSelected result) {
|
||||||
_inlineResultChosen.fire_copy(result);
|
_inlineResultChosen.fire_copy(result);
|
||||||
});
|
});
|
||||||
|
_inlineResults->setSendMenuType([=] { return sendMenuType(); });
|
||||||
_inlineResults->requesting(
|
_inlineResults->requesting(
|
||||||
) | rpl::start_with_next([=](bool requesting) {
|
) | rpl::start_with_next([=](bool requesting) {
|
||||||
_tabbedSelectorToggle->setLoading(requesting);
|
_tabbedSelectorToggle->setLoading(requesting);
|
||||||
|
|
|
@ -290,7 +290,9 @@ 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 = SendMenu::Type::Scheduled;
|
const auto type = _sendMenuType
|
||||||
|
? _sendMenuType()
|
||||||
|
: SendMenu::Type::Disabled;
|
||||||
|
|
||||||
_menu = base::make_unique_q<Ui::PopupMenu>(this);
|
_menu = base::make_unique_q<Ui::PopupMenu>(this);
|
||||||
|
|
||||||
|
@ -765,5 +767,9 @@ void Inner::switchPm() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Inner::setSendMenuType(Fn<SendMenu::Type()> &&callback) {
|
||||||
|
_sendMenuType = std::move(callback);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Layout
|
} // namespace Layout
|
||||||
} // namespace InlineBots
|
} // namespace InlineBots
|
||||||
|
|
|
@ -40,6 +40,10 @@ class Result;
|
||||||
struct ResultSelected;
|
struct ResultSelected;
|
||||||
} // namespace InlineBots
|
} // namespace InlineBots
|
||||||
|
|
||||||
|
namespace SendMenu {
|
||||||
|
enum class Type;
|
||||||
|
} // namespace SendMenu
|
||||||
|
|
||||||
namespace InlineBots {
|
namespace InlineBots {
|
||||||
namespace Layout {
|
namespace Layout {
|
||||||
|
|
||||||
|
@ -87,6 +91,7 @@ public:
|
||||||
void setCurrentDialogsEntryState(Dialogs::EntryState state) {
|
void setCurrentDialogsEntryState(Dialogs::EntryState state) {
|
||||||
_currentDialogsEntryState = state;
|
_currentDialogsEntryState = state;
|
||||||
}
|
}
|
||||||
|
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
|
||||||
|
|
||||||
// Ui::AbstractTooltipShower interface.
|
// Ui::AbstractTooltipShower interface.
|
||||||
QString tooltipText() const override;
|
QString tooltipText() const override;
|
||||||
|
@ -179,6 +184,7 @@ private:
|
||||||
bool _previewShown = false;
|
bool _previewShown = false;
|
||||||
|
|
||||||
Fn<void(ResultSelected)> _resultSelectedCallback;
|
Fn<void(ResultSelected)> _resultSelectedCallback;
|
||||||
|
Fn<SendMenu::Type()> _sendMenuType;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -237,6 +237,10 @@ void Widget::setResultSelectedCallback(Fn<void(ResultSelected)> callback) {
|
||||||
_inner->setResultSelectedCallback(std::move(callback));
|
_inner->setResultSelectedCallback(std::move(callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Widget::setSendMenuType(Fn<SendMenu::Type()> &&callback) {
|
||||||
|
_inner->setSendMenuType(std::move(callback));
|
||||||
|
}
|
||||||
|
|
||||||
void Widget::setCurrentDialogsEntryState(Dialogs::EntryState state) {
|
void Widget::setCurrentDialogsEntryState(Dialogs::EntryState state) {
|
||||||
_inner->setCurrentDialogsEntryState(state);
|
_inner->setCurrentDialogsEntryState(state);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,10 @@ class Result;
|
||||||
struct ResultSelected;
|
struct ResultSelected;
|
||||||
} // namespace InlineBots
|
} // namespace InlineBots
|
||||||
|
|
||||||
|
namespace SendMenu {
|
||||||
|
enum class Type;
|
||||||
|
} // namespace SendMenu
|
||||||
|
|
||||||
namespace InlineBots {
|
namespace InlineBots {
|
||||||
namespace Layout {
|
namespace Layout {
|
||||||
|
|
||||||
|
@ -70,6 +74,7 @@ public:
|
||||||
void hideAnimated();
|
void hideAnimated();
|
||||||
|
|
||||||
void setResultSelectedCallback(Fn<void(ResultSelected)> callback);
|
void setResultSelectedCallback(Fn<void(ResultSelected)> callback);
|
||||||
|
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
|
||||||
void setCurrentDialogsEntryState(Dialogs::EntryState state);
|
void setCurrentDialogsEntryState(Dialogs::EntryState state);
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<bool> requesting() const {
|
[[nodiscard]] rpl::producer<bool> requesting() const {
|
||||||
|
|
Loading…
Add table
Reference in a new issue