diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index 59d6e5c38f972c5b60c0b739f334c7ffcd4d3f07..942b013e627c9dbe22e0d1c27a49a9550cb5c2cf 100644 --- a/src/plugins/qmljseditor/qmlcodecompletion.cpp +++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp @@ -134,6 +134,17 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) } } + + // snippets completion + TextEditor::CompletionItem item(this); + item.text = QLatin1String("Rectangle - declaration"); + item.data = QVariant::fromValue(QString("Rectangle {\nwidth: $100$;\nheight: 100;\n$$\n}")); + m_completions.append(item); + + item.text = QLatin1String("Item - declaration"); + item.data = QVariant::fromValue(QString("Item {\nwidth: $100$;\nheight: 100;\n$$\n}")); + m_completions.append(item); + return pos; } @@ -188,7 +199,23 @@ void QmlCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio void QmlCodeCompletion::complete(const TextEditor::CompletionItem &item) { - const QString toInsert = item.text; + QString toInsert = item.text; + + if (QmlJSTextEditor *edit = qobject_cast<QmlJSTextEditor *>(m_editor->widget())) { + if (item.data.isValid()) { + QTextCursor tc = edit->textCursor(); + tc.beginEditBlock(); + tc.setPosition(m_startPosition); + tc.setPosition(m_editor->position(), QTextCursor::KeepAnchor); + tc.removeSelectedText(); + + toInsert = item.data.toString(); + edit->insertCodeSnippet(toInsert); + tc.endEditBlock(); + return; + } + } + const int length = m_editor->position() - m_startPosition; m_editor->setCurPos(m_startPosition); m_editor->replace(length, toInsert); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 59f69af66469404f3117c91e1b188d530440c872..7fc9eaf18fa6e83923364a1eb1dc2dbf8301a29e 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1246,7 +1246,7 @@ skip_event: delete e; } -void BaseTextEditor::universalHelper() +void BaseTextEditor::insertCodeSnippet(const QString &snippet) { QList<QTextEdit::ExtraSelection> selections; @@ -1254,8 +1254,6 @@ void BaseTextEditor::universalHelper() const int startCursorPosition = cursor.position(); cursor.beginEditBlock(); - const QString snippet = QLatin1String("for ($initializer$; $condition$; $expresssion$) {\n$$\n}\n"); - if ((snippet.count('$') % 2) != 0) { qWarning() << "invalid snippet"; return; @@ -1326,6 +1324,12 @@ void BaseTextEditor::universalHelper() } } +void BaseTextEditor::universalHelper() +{ + const QString snippet = QLatin1String("for ($initializer$; $condition$; $expresssion$) {\n$$\n}\n"); + insertCodeSnippet(snippet); +} + void BaseTextEditor::setTextCursor(const QTextCursor &cursor) { // workaround for QTextControl bug diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index aa212c64407bbc15e89061ffc33679dc50909b5c..21c5bc803ae31d4f14a06ca5c3f57dd328178df5 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -379,6 +379,8 @@ public: void setTextCursor(const QTextCursor &cursor); + void insertCodeSnippet(const QString &snippet); + public slots: void setDisplayName(const QString &title);