mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added right button for bots in dialogs list in filtered mode.
This commit is contained in:
parent
8a3aa660cb
commit
6c62bbe6fb
2 changed files with 67 additions and 27 deletions
|
@ -1596,7 +1596,7 @@ void InnerWidget::clearIrrelevantState() {
|
||||||
setHashtagPressed(-1);
|
setHashtagPressed(-1);
|
||||||
_hashtagDeleteSelected = _hashtagDeletePressed = false;
|
_hashtagDeleteSelected = _hashtagDeletePressed = false;
|
||||||
_filteredSelected = -1;
|
_filteredSelected = -1;
|
||||||
setFilteredPressed(-1, false);
|
setFilteredPressed(-1, false, false);
|
||||||
_peerSearchSelected = -1;
|
_peerSearchSelected = -1;
|
||||||
setPeerSearchPressed(-1);
|
setPeerSearchPressed(-1);
|
||||||
_previewSelected = -1;
|
_previewSelected = -1;
|
||||||
|
@ -1716,15 +1716,24 @@ void InnerWidget::selectByMouse(QPoint globalPosition) {
|
||||||
if (filteredSelected < 0 || filteredSelected >= _filterResults.size()) {
|
if (filteredSelected < 0 || filteredSelected >= _filterResults.size()) {
|
||||||
filteredSelected = -1;
|
filteredSelected = -1;
|
||||||
}
|
}
|
||||||
|
const auto mappedY = (filteredSelected >= 0)
|
||||||
|
? mouseY - skip - _filterResults[filteredSelected].top
|
||||||
|
: 0;
|
||||||
const auto selectedTopicJump = (filteredSelected >= 0)
|
const auto selectedTopicJump = (filteredSelected >= 0)
|
||||||
&& _filterResults[filteredSelected].row->lookupIsInTopicJump(
|
&& _filterResults[filteredSelected].row->lookupIsInTopicJump(
|
||||||
local.x(),
|
local.x(),
|
||||||
mouseY - skip - _filterResults[filteredSelected].top);
|
mappedY);
|
||||||
|
const auto selectedBotApp = (filteredSelected >= 0)
|
||||||
|
&& lookupIsInBotAppButton(
|
||||||
|
_filterResults[filteredSelected].row,
|
||||||
|
QPoint(local.x(), mappedY));
|
||||||
if (_filteredSelected != filteredSelected
|
if (_filteredSelected != filteredSelected
|
||||||
|| _selectedTopicJump != selectedTopicJump) {
|
|| _selectedTopicJump != selectedTopicJump
|
||||||
|
|| _selectedBotApp != selectedBotApp) {
|
||||||
updateSelectedRow();
|
updateSelectedRow();
|
||||||
_filteredSelected = filteredSelected;
|
_filteredSelected = filteredSelected;
|
||||||
_selectedTopicJump = selectedTopicJump;
|
_selectedTopicJump = selectedTopicJump;
|
||||||
|
_selectedBotApp = selectedBotApp;
|
||||||
updateSelectedRow();
|
updateSelectedRow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1813,7 +1822,7 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
setCollapsedPressed(_collapsedSelected);
|
setCollapsedPressed(_collapsedSelected);
|
||||||
setHashtagPressed(_hashtagSelected);
|
setHashtagPressed(_hashtagSelected);
|
||||||
_hashtagDeletePressed = _hashtagDeleteSelected;
|
_hashtagDeletePressed = _hashtagDeleteSelected;
|
||||||
setFilteredPressed(_filteredSelected, _selectedTopicJump);
|
setFilteredPressed(_filteredSelected, _selectedTopicJump, _selectedBotApp);
|
||||||
setPeerSearchPressed(_peerSearchSelected);
|
setPeerSearchPressed(_peerSearchSelected);
|
||||||
setPreviewPressed(_previewSelected);
|
setPreviewPressed(_previewSelected);
|
||||||
setSearchedPressed(_searchedSelected);
|
setSearchedPressed(_searchedSelected);
|
||||||
|
@ -1842,21 +1851,7 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
};
|
};
|
||||||
const auto origin = e->pos()
|
const auto origin = e->pos()
|
||||||
- QPoint(0, dialogsOffset() + _pressed->top());
|
- QPoint(0, dialogsOffset() + _pressed->top());
|
||||||
if (_pressedBotApp && _pressedBotAppData) {
|
if (addBotAppRipple(origin, updateCallback)) {
|
||||||
const auto size = _pressedBotAppData->bg.size()
|
|
||||||
/ style::DevicePixelRatio();
|
|
||||||
if (!_pressedBotAppData->ripple) {
|
|
||||||
const auto r = size.height() / 2;
|
|
||||||
_pressedBotAppData->ripple
|
|
||||||
= std::make_unique<Ui::RippleAnimation>(
|
|
||||||
st::defaultRippleAnimation,
|
|
||||||
Ui::RippleAnimation::RoundRectMask(size, r),
|
|
||||||
updateCallback);
|
|
||||||
}
|
|
||||||
const auto shift = QPoint(
|
|
||||||
width() - size.width() - st::dialogRowOpenBotRight,
|
|
||||||
st::dialogRowOpenBotTop);
|
|
||||||
_pressedBotAppData->ripple->add(origin - shift);
|
|
||||||
} else if (_pressedTopicJump) {
|
} else if (_pressedTopicJump) {
|
||||||
row->addTopicJumpRipple(
|
row->addTopicJumpRipple(
|
||||||
origin,
|
origin,
|
||||||
|
@ -1883,7 +1878,8 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
const auto origin = e->pos()
|
const auto origin = e->pos()
|
||||||
- QPoint(0, filteredOffset() + result.top);
|
- QPoint(0, filteredOffset() + result.top);
|
||||||
const auto updateCallback = [=] { repaintDialogRow(filterId, row); };
|
const auto updateCallback = [=] { repaintDialogRow(filterId, row); };
|
||||||
if (_pressedTopicJump) {
|
if (addBotAppRipple(origin, updateCallback)) {
|
||||||
|
} else if (_pressedTopicJump) {
|
||||||
row->addTopicJumpRipple(
|
row->addTopicJumpRipple(
|
||||||
origin,
|
origin,
|
||||||
_topicJumpCache.get(),
|
_topicJumpCache.get(),
|
||||||
|
@ -1917,6 +1913,25 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool InnerWidget::addBotAppRipple(QPoint origin, Fn<void()> updateCallback) {
|
||||||
|
if (!(_pressedBotApp && _pressedBotAppData)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const auto size = _pressedBotAppData->bg.size()
|
||||||
|
/ style::DevicePixelRatio();
|
||||||
|
if (!_pressedBotAppData->ripple) {
|
||||||
|
_pressedBotAppData->ripple = std::make_unique<Ui::RippleAnimation>(
|
||||||
|
st::defaultRippleAnimation,
|
||||||
|
Ui::RippleAnimation::RoundRectMask(size, size.height() / 2),
|
||||||
|
updateCallback);
|
||||||
|
}
|
||||||
|
const auto shift = QPoint(
|
||||||
|
width() - size.width() - st::dialogRowOpenBotRight,
|
||||||
|
st::dialogRowOpenBotTop);
|
||||||
|
_pressedBotAppData->ripple->add(origin - shift);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<Key> &InnerWidget::pinnedChatsOrder() const {
|
const std::vector<Key> &InnerWidget::pinnedChatsOrder() const {
|
||||||
const auto owner = &session().data();
|
const auto owner = &session().data();
|
||||||
return _savedSublists
|
return _savedSublists
|
||||||
|
@ -2197,7 +2212,7 @@ void InnerWidget::mousePressReleased(
|
||||||
auto hashtagDeletePressed = _hashtagDeletePressed;
|
auto hashtagDeletePressed = _hashtagDeletePressed;
|
||||||
_hashtagDeletePressed = false;
|
_hashtagDeletePressed = false;
|
||||||
auto filteredPressed = _filteredPressed;
|
auto filteredPressed = _filteredPressed;
|
||||||
setFilteredPressed(-1, false);
|
setFilteredPressed(-1, false, false);
|
||||||
auto peerSearchPressed = _peerSearchPressed;
|
auto peerSearchPressed = _peerSearchPressed;
|
||||||
setPeerSearchPressed(-1);
|
setPeerSearchPressed(-1);
|
||||||
auto previewPressed = _previewPressed;
|
auto previewPressed = _previewPressed;
|
||||||
|
@ -2231,8 +2246,11 @@ void InnerWidget::mousePressReleased(
|
||||||
&& searchedPressed == _searchedSelected)
|
&& searchedPressed == _searchedSelected)
|
||||||
|| (pressedMorePosts
|
|| (pressedMorePosts
|
||||||
&& pressedMorePosts == _selectedMorePosts)) {
|
&& pressedMorePosts == _selectedMorePosts)) {
|
||||||
if (pressedBotApp) {
|
if (pressedBotApp && (pressed || filteredPressed >= 0)) {
|
||||||
if (const auto user = MaybeBotWithApp(pressed)) {
|
const auto &row = pressed
|
||||||
|
? pressed
|
||||||
|
: _filterResults[filteredPressed].row.get();
|
||||||
|
if (const auto user = MaybeBotWithApp(row)) {
|
||||||
_openBotMainAppRequests.fire(peerToUser(user->id));
|
_openBotMainAppRequests.fire(peerToUser(user->id));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2303,15 +2321,32 @@ void InnerWidget::setHashtagPressed(int pressed) {
|
||||||
_hashtagPressed = pressed;
|
_hashtagPressed = pressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InnerWidget::setFilteredPressed(int pressed, bool pressedTopicJump) {
|
void InnerWidget::setFilteredPressed(
|
||||||
|
int pressed,
|
||||||
|
bool pressedTopicJump,
|
||||||
|
bool pressedBotApp) {
|
||||||
if (_filteredPressed != pressed
|
if (_filteredPressed != pressed
|
||||||
|| (pressed >= 0 && _pressedTopicJump != pressedTopicJump)) {
|
|| (pressed >= 0 && _pressedTopicJump != pressedTopicJump)
|
||||||
|
|| (pressed >= 0 && _pressedBotApp != pressedBotApp)) {
|
||||||
if (base::in_range(_filteredPressed, 0, _filterResults.size())) {
|
if (base::in_range(_filteredPressed, 0, _filterResults.size())) {
|
||||||
_filterResults[_filteredPressed].row->stopLastRipple();
|
_filterResults[_filteredPressed].row->stopLastRipple();
|
||||||
}
|
}
|
||||||
|
if (_pressedBotAppData && _pressedBotAppData->ripple) {
|
||||||
|
_pressedBotAppData->ripple->lastStop();
|
||||||
|
}
|
||||||
_filteredPressed = pressed;
|
_filteredPressed = pressed;
|
||||||
if (pressed >= 0 || !pressedTopicJump) {
|
if (pressed >= 0 || !pressedTopicJump || !pressedBotApp) {
|
||||||
_pressedTopicJump = pressedTopicJump;
|
_pressedTopicJump = pressedTopicJump;
|
||||||
|
_pressedBotApp = pressedBotApp;
|
||||||
|
if (pressed >= 0 && pressedBotApp) {
|
||||||
|
const auto &row = _filterResults[pressed].row;
|
||||||
|
if (const auto history = row->history()) {
|
||||||
|
const auto it = _rightButtons.find(history->peer->id);
|
||||||
|
if (it != _rightButtons.end()) {
|
||||||
|
_pressedBotAppData = &(it->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
const auto history = pressedTopicJump
|
const auto history = pressedTopicJump
|
||||||
? _filterResults[pressed].row->history()
|
? _filterResults[pressed].row->history()
|
||||||
: nullptr;
|
: nullptr;
|
||||||
|
|
|
@ -292,7 +292,10 @@ private:
|
||||||
void setPressed(Row *pressed, bool pressedTopicJump, bool pressedBotApp);
|
void setPressed(Row *pressed, bool pressedTopicJump, bool pressedBotApp);
|
||||||
void clearPressed();
|
void clearPressed();
|
||||||
void setHashtagPressed(int pressed);
|
void setHashtagPressed(int pressed);
|
||||||
void setFilteredPressed(int pressed, bool pressedTopicJump);
|
void setFilteredPressed(
|
||||||
|
int pressed,
|
||||||
|
bool pressedTopicJump,
|
||||||
|
bool pressedBotApp);
|
||||||
void setPeerSearchPressed(int pressed);
|
void setPeerSearchPressed(int pressed);
|
||||||
void setPreviewPressed(int pressed);
|
void setPreviewPressed(int pressed);
|
||||||
void setSearchedPressed(int pressed);
|
void setSearchedPressed(int pressed);
|
||||||
|
@ -326,6 +329,8 @@ private:
|
||||||
void updateRowCornerStatusShown(not_null<History*> history);
|
void updateRowCornerStatusShown(not_null<History*> history);
|
||||||
void repaintDialogRowCornerStatus(not_null<History*> history);
|
void repaintDialogRowCornerStatus(not_null<History*> history);
|
||||||
|
|
||||||
|
bool addBotAppRipple(QPoint origin, Fn<void()> updateCallback);
|
||||||
|
|
||||||
void setupShortcuts();
|
void setupShortcuts();
|
||||||
RowDescriptor computeJump(
|
RowDescriptor computeJump(
|
||||||
const RowDescriptor &to,
|
const RowDescriptor &to,
|
||||||
|
|
Loading…
Add table
Reference in a new issue