25 this->setAcceptRichText(
false);
31 auto *treePopup =
new QTreeView;
33 treePopup->setRootIsDecorated(
false);
34 treePopup->setMinimumWidth(300);
35 treePopup->setMinimumHeight(50);
36 treePopup->setItemsExpandable(
true);
37 treePopup->setWordWrap(
true);
40 completer->setCompletionMode(QCompleter::PopupCompletion);
41 completer->setCaseSensitivity(Qt::CaseInsensitive);
48 this->horizontalScrollBar()->setObjectName(
"exprTextEdit_horizontalBar");
49 this->verticalScrollBar()->setObjectName(
"exprTextEdit_verticalBar");
64 QTextEdit::focusInEvent(e);
70 QTextEdit::focusInEvent(e);
76 QTextEdit::mousePressEvent(event);
82 QTextEdit::mouseDoubleClickEvent(event);
92 QTextEdit::paintEvent(event);
97 if (event->modifiers() == Qt::ControlModifier) {
98 if (event->delta() > 0)
100 else if (event->delta() < 0)
103 return QTextEdit::wheelEvent(event);
109 if (e->key() == Qt::Key_Return && e->modifiers() == Qt::ControlModifier) {
112 }
else if (e->key() == Qt::Key_F4) {
115 }
else if (e->key() == Qt::Key_Backspace && e->modifiers() == Qt::ControlModifier) {
127 case Qt::Key_Backtab:
136 bool isShortcut = ((e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_E);
138 QTextEdit::keyPressEvent(e);
140 const bool ctrlOrShift = e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier);
141 if (!
completer || (ctrlOrShift && e->text().isEmpty()))
144 bool hasModifier = (e->modifiers() != Qt::NoModifier) && ~(e->modifiers() & Qt::KeypadModifier) && !ctrlOrShift;
147 QTextCursor tc = textCursor();
148 tc.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor);
149 QString line = tc.selectedText();
152 static QRegExp completion(QString::fromLatin1(
"^(?:.*[^A-Za-z0-9_$])?((?:\\$[A-Za-z0-9_]*)|[A-Za-z]+[A-Za-z0-9_]*)$"));
153 int index = completion.indexIn(line);
154 QString completionPrefix;
155 if (index != -1 && !line.contains(QLatin1Char(
'#'))) {
156 completionPrefix = completion.cap(1);
161 if (!isShortcut && (hasModifier || e->text().isEmpty() || completionPrefix.length() < 1 || index == -1)) {
165 if (completionPrefix !=
completer->completionPrefix()) {
166 completer->setCompletionPrefix(completionPrefix);
171 QRect cr = cursorRect();
172 cr.setWidth(
completer->popup()->sizeHintForColumn(0) +
completer->popup()->sizeHintForColumn(1) +
completer->popup()->verticalScrollBar()->sizeHint().width());
180 static QRegExp inFunction(QString::fromLatin1(
"^(?:.*[^A-Za-z0-9_$])?([A-Za-z0-9_]+)\\([^()]*$"));
181 int index2 = inFunction.indexIn(line);
183 QString functionName = inFunction.cap(1);
185 QString tip = QString(tr(
"<b>%1</b>")).arg(tips[0]);
186 for (
int i = 1; i < tips.size(); i++) {
187 tip += QString(tr(
"<br>%1")).arg(tips[i]);
199 QMenu *menu = createStandardContextMenu();
201 if (!menu->actions().empty()) {
202 QAction *f = menu->actions().first();
204 menu->insertSeparator(f);
207 menu->exec(event->globalPos());
214 if (
string.isEmpty())
217 if (QToolTip::isVisible())
220 QRect cr = cursorRect();
222 cr.setWidth(cr.width() * 3);
223 QToolTip::showText(mapToGlobal(cr.bottomLeft()) + QPoint(0, 6),
string);
228 QToolTip::hideText();
235 QTextCursor tc = textCursor();
236 int extra = completion.length() -
completer->completionPrefix().length();
237 tc.movePosition(QTextCursor::Left);
238 tc.movePosition(QTextCursor::EndOfWord);
239 tc.insertText(completion.right(extra));
245 QTextCursor tc = textCursor();
246 tc.movePosition(QTextCursor::Left);
247 tc.movePosition(QTextCursor::EndOfWord);
248 tc.select(QTextCursor::WordUnderCursor);
249 tc.removeSelectedText();
QString getDocString(const QString &s)
void fixStyle(const QPalette &palette)
void paintEvent(QPaintEvent *e) override
void showTip(const QString &string)
void contextMenuEvent(QContextMenuEvent *event) override
void keyPressEvent(QKeyEvent *e) override
void insertCompletion(const QString &completion)
ExprCompletionModel * completionModel
void focusInEvent(QFocusEvent *e) override
QStyle * lastStyleForHighlighter
void wheelEvent(QWheelEvent *e) override
void focusOutEvent(QFocusEvent *e) override
void mouseDoubleClickEvent(QMouseEvent *event) override
QAction * _popupEnabledAction
ExprTextEdit(QWidget *parent=nullptr)
ExprHighlighter * highlighter
void mousePressEvent(QMouseEvent *event) override