mirror of https://github.com/procxx/kepka.git
Scroll suggestions by dragging.
This commit is contained in:
parent
9ba65e9ca0
commit
1da9385fe2
|
@ -56,6 +56,7 @@ void SuggestionsWidget::showWithQuery(const QString &query, bool force) {
|
||||||
_toggleAnimated.fire(false);
|
_toggleAnimated.fire(false);
|
||||||
}
|
}
|
||||||
clearSelection();
|
clearSelection();
|
||||||
|
setPressed(-1);
|
||||||
_rows = std::move(rows);
|
_rows = std::move(rows);
|
||||||
resizeToRows();
|
resizeToRows();
|
||||||
update();
|
update();
|
||||||
|
@ -318,6 +319,9 @@ void SuggestionsWidget::setPressed(int pressed) {
|
||||||
}
|
}
|
||||||
if (_pressed != pressed) {
|
if (_pressed != pressed) {
|
||||||
_pressed = pressed;
|
_pressed = pressed;
|
||||||
|
if (_pressed >= 0) {
|
||||||
|
_mousePressPosition = QCursor::pos();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,6 +365,24 @@ QPoint SuggestionsWidget::mapToInner(QPoint globalPosition) const {
|
||||||
|
|
||||||
void SuggestionsWidget::mouseMoveEvent(QMouseEvent *e) {
|
void SuggestionsWidget::mouseMoveEvent(QMouseEvent *e) {
|
||||||
const auto globalPosition = e->globalPos();
|
const auto globalPosition = e->globalPos();
|
||||||
|
if (_dragScrollStart >= 0) {
|
||||||
|
const auto delta = (_mousePressPosition.x() - globalPosition.x());
|
||||||
|
const auto scroll = snap(
|
||||||
|
_dragScrollStart + (rtl() ? -1 : 1) * delta,
|
||||||
|
0,
|
||||||
|
_scrollMax);
|
||||||
|
if (_scroll != scroll) {
|
||||||
|
_scroll = scroll;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
} else if ((_pressed >= 0)
|
||||||
|
&& (_scrollMax > 0)
|
||||||
|
&& ((_mousePressPosition - globalPosition).manhattanLength()
|
||||||
|
>= QApplication::startDragDistance())) {
|
||||||
|
_dragScrollStart = _scroll;
|
||||||
|
_mousePressPosition = globalPosition;
|
||||||
|
}
|
||||||
if (inner().contains(mapToInner(globalPosition))) {
|
if (inner().contains(mapToInner(globalPosition))) {
|
||||||
if (!_lastMousePosition) {
|
if (!_lastMousePosition) {
|
||||||
_lastMousePosition = globalPosition;
|
_lastMousePosition = globalPosition;
|
||||||
|
@ -385,23 +407,25 @@ void SuggestionsWidget::selectByMouse(QPoint globalPosition) {
|
||||||
|
|
||||||
void SuggestionsWidget::mousePressEvent(QMouseEvent *e) {
|
void SuggestionsWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
selectByMouse(e->globalPos());
|
selectByMouse(e->globalPos());
|
||||||
if (_selected >= 0 && _selected < _rows.size()) {
|
if (_selected >= 0) {
|
||||||
setPressed(_selected);
|
setPressed(_selected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuggestionsWidget::mouseReleaseEvent(QMouseEvent *e) {
|
void SuggestionsWidget::mouseReleaseEvent(QMouseEvent *e) {
|
||||||
if (_pressed >= 0 && _pressed < _rows.size()) {
|
if (_pressed >= 0) {
|
||||||
auto pressed = _pressed;
|
const auto pressed = _pressed;
|
||||||
setPressed(-1);
|
setPressed(-1);
|
||||||
if (pressed == _selected) {
|
if (_dragScrollStart >= 0) {
|
||||||
|
_dragScrollStart = -1;
|
||||||
|
} else if (pressed == _selected) {
|
||||||
triggerRow(_rows[_selected]);
|
triggerRow(_rows[_selected]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SuggestionsWidget::triggerSelectedRow() const {
|
bool SuggestionsWidget::triggerSelectedRow() const {
|
||||||
if (_selected >= 0 && _selected < _rows.size()) {
|
if (_selected >= 0) {
|
||||||
triggerRow(_rows[_selected]);
|
triggerRow(_rows[_selected]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,9 @@ private:
|
||||||
int _oneWidth = 0;
|
int _oneWidth = 0;
|
||||||
QMargins _padding;
|
QMargins _padding;
|
||||||
|
|
||||||
|
QPoint _mousePressPosition;
|
||||||
|
int _dragScrollStart = -1;
|
||||||
|
|
||||||
rpl::event_stream<bool> _toggleAnimated;
|
rpl::event_stream<bool> _toggleAnimated;
|
||||||
rpl::event_stream<QString> _triggered;
|
rpl::event_stream<QString> _triggered;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue