diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index 59d6e5c38f9..942b013e627 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 *completio void QmlCodeCompletion::complete(const TextEditor::CompletionItem &item) { - const QString toInsert = item.text; + QString toInsert = item.text; + + if (QmlJSTextEditor *edit = qobject_cast(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 59f69af6646..7fc9eaf18fa 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 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 aa212c64407..21c5bc803ae 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);