mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-08-12 14:43:54 +00:00
Merge tag 'v7.0.4' into dev
This commit is contained in:
@@ -434,6 +434,8 @@ public:
|
||||
void setQueryChangedCallback(Fn<void(const QString &query)> callback);
|
||||
void setSubmittedCallback(Fn<void(Qt::KeyboardModifiers)> callback);
|
||||
void setCancelledCallback(Fn<void()> callback);
|
||||
void setFocusedChangedCallback(Fn<void(bool focused)> callback);
|
||||
void setCancelButtonShown(bool shown);
|
||||
|
||||
void addItemInBunch(std::unique_ptr<Item> item);
|
||||
void finishItemsBunch(AddItemWay way);
|
||||
@@ -504,6 +506,7 @@ private:
|
||||
int _fieldWidth = 0;
|
||||
object_ptr<Ui::InputField> _field;
|
||||
object_ptr<Ui::CrossButton> _cancel;
|
||||
bool _cancelShown = true;
|
||||
|
||||
int _newHeight = 0;
|
||||
Ui::Animations::Simple _height;
|
||||
@@ -511,6 +514,7 @@ private:
|
||||
Fn<void(const QString &query)> _queryChangedCallback;
|
||||
Fn<void(Qt::KeyboardModifiers)> _submittedCallback;
|
||||
Fn<void()> _cancelledCallback;
|
||||
Fn<void(bool focused)> _focusedChangedCallback;
|
||||
Fn<void(uint64 itemId)> _itemRemovedCallback;
|
||||
Fn<void(int heightDelta)> _resizedCallback;
|
||||
|
||||
@@ -553,7 +557,7 @@ MultiSelect::MultiSelect(
|
||||
}
|
||||
});
|
||||
|
||||
setAttribute(Qt::WA_OpaquePaintEvent);
|
||||
setAttribute(Qt::WA_OpaquePaintEvent, _st.bg->c.alpha() == 255);
|
||||
auto defaultWidth = _st.item.maxWidth + _st.fieldMinWidth + _st.fieldCancelSkip;
|
||||
resizeToWidth(_st.padding.left() + defaultWidth + _st.padding.right());
|
||||
}
|
||||
@@ -589,10 +593,18 @@ void MultiSelect::setCancelledCallback(Fn<void()> callback) {
|
||||
_inner->setCancelledCallback(std::move(callback));
|
||||
}
|
||||
|
||||
void MultiSelect::setFocusedChangedCallback(Fn<void(bool focused)> callback) {
|
||||
_inner->setFocusedChangedCallback(std::move(callback));
|
||||
}
|
||||
|
||||
void MultiSelect::setResizedCallback(Fn<void()> callback) {
|
||||
_resizedCallback = std::move(callback);
|
||||
}
|
||||
|
||||
void MultiSelect::setCancelButtonShown(bool shown) {
|
||||
_inner->setCancelButtonShown(shown);
|
||||
}
|
||||
|
||||
void MultiSelect::setInnerFocus() {
|
||||
if (_inner->setInnerFocus()) {
|
||||
_scroll->scrollToY(_scroll->scrollTopMax());
|
||||
@@ -669,6 +681,12 @@ MultiSelect::Inner::Inner(
|
||||
) | rpl::filter(rpl::mappers::_1) | rpl::on_next([=] {
|
||||
fieldFocused();
|
||||
}, _field->lifetime());
|
||||
_field->focusedChanges(
|
||||
) | rpl::on_next([=](bool focused) {
|
||||
if (_focusedChangedCallback) {
|
||||
_focusedChangedCallback(focused);
|
||||
}
|
||||
}, _field->lifetime());
|
||||
_field->changes(
|
||||
) | rpl::on_next([=] {
|
||||
queryChanged();
|
||||
@@ -692,7 +710,7 @@ MultiSelect::Inner::Inner(
|
||||
|
||||
void MultiSelect::Inner::queryChanged() {
|
||||
auto query = getQuery();
|
||||
_cancel->toggle(!query.isEmpty(), anim::type::normal);
|
||||
_cancel->toggle(_cancelShown && !query.isEmpty(), anim::type::normal);
|
||||
updateFieldGeometry();
|
||||
if (_queryChangedCallback) {
|
||||
_queryChangedCallback(query);
|
||||
@@ -737,6 +755,23 @@ void MultiSelect::Inner::setCancelledCallback(Fn<void()> callback) {
|
||||
_cancelledCallback = std::move(callback);
|
||||
}
|
||||
|
||||
void MultiSelect::Inner::setFocusedChangedCallback(
|
||||
Fn<void(bool focused)> callback) {
|
||||
_focusedChangedCallback = std::move(callback);
|
||||
}
|
||||
|
||||
void MultiSelect::Inner::setCancelButtonShown(bool shown) {
|
||||
if (_cancelShown == shown) {
|
||||
return;
|
||||
}
|
||||
_cancelShown = shown;
|
||||
const auto toggled = _cancelShown && !getQuery().isEmpty();
|
||||
if (_cancel->toggled() != toggled) {
|
||||
_cancel->toggle(toggled, anim::type::instant);
|
||||
updateFieldGeometry();
|
||||
}
|
||||
}
|
||||
|
||||
void MultiSelect::Inner::updateFieldGeometry() {
|
||||
auto fieldFinalWidth = _fieldWidth;
|
||||
if (_cancel->toggled()) {
|
||||
|
||||
Reference in New Issue
Block a user