From 8a3bbb908702c6b1b710e42104fed7110ea17115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Mon, 18 Dec 2017 18:34:06 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@342 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/widgets/qcodeedit.cpp | 40 +++++++++++++++++++++++++++++++++++---- qad/widgets/qcodeedit.h | 2 +- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/qad/widgets/qcodeedit.cpp b/qad/widgets/qcodeedit.cpp index 7cffc13..9c807f4 100644 --- a/qad/widgets/qcodeedit.cpp +++ b/qad/widgets/qcodeedit.cpp @@ -19,7 +19,7 @@ QCodeEdit::QCodeEdit(QWidget * parent): QWidget(parent) { ui = new Ui::QCodeEdit(); ui->setupUi(this); ui->widgetSearch->hide(); - prev_lc = auto_comp_pl = cur_search_ind = -1; + prev_lc = auto_comp_pl = cur_search_ind = pos_press = pos_el_press = -1; timer = 0; _ignore_focus_out = _destructor = _replacing = false; _first = true; @@ -277,7 +277,7 @@ bool QCodeEdit::eventFilter(QObject * o, QEvent * e) { return QWidget::eventFilter(o, e); } if (ui->textLines) { - if (o == ui->textLines->viewport()) { + if (o == ui->textLines->viewport()) {/* if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease || e->type() == QEvent::MouseMove || e->type() == QEvent::MouseButtonDblClick) { #if (QT_VERSION < 0x050000) @@ -287,10 +287,42 @@ bool QCodeEdit::eventFilter(QObject * o, QEvent * e) { #endif QApplication::sendEvent(ui->textCode->viewport(), e); return true; - } - if (e->type() == QEvent::Wheel) { + }*/ + QTextCursor tc; + int tcpos = 0; + switch (e->type()) { + case QEvent::MouseButtonPress: + tc = ui->textCode->cursorForPosition(((QMouseEvent*)e)->pos()); + tc.movePosition(QTextCursor::EndOfLine); + pos_el_press = tc.anchor(); + tc.movePosition(QTextCursor::StartOfLine); + pos_press = tc.anchor(); + if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) + tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + ui->textCode->setTextCursor(tc); + return true; + case QEvent::MouseMove: + tc = ui->textCode->cursorForPosition(((QMouseEvent*)e)->pos()); + tc.movePosition(QTextCursor::StartOfLine); + if (pos_press == tc.anchor()) { + if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) + tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + ui->textCode->setTextCursor(tc); + return true; + } + if (pos_press < tc.anchor()) { + if (!tc.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor)) + tc.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + } + tcpos = tc.position(); + tc.setPosition(pos_press < tc.anchor() ? pos_press : pos_el_press); + tc.setPosition(tcpos, QTextCursor::KeepAnchor); + ui->textCode->setTextCursor(tc); + return true; + case QEvent::Wheel: QApplication::sendEvent(ui->textCode->viewport(), e); return true; + default: break; } } } diff --git a/qad/widgets/qcodeedit.h b/qad/widgets/qcodeedit.h index 744e347..86096ab 100644 --- a/qad/widgets/qcodeedit.h +++ b/qad/widgets/qcodeedit.h @@ -92,7 +92,7 @@ private: QList es_selected, es_custom, es_brackets, es_search_list; QMap ac_classes; QStringList cursor_scope; - int prev_lc, auto_comp_pl, timer, cur_search_ind; + int prev_lc, auto_comp_pl, timer, cur_search_ind, pos_press, pos_el_press; bool spaces_, _ignore_focus_out, _first, _destructor, _replacing; bool eventFilter(QObject * o, QEvent * e);