From 51a33a9f0a0761245cb854f8cf72edf8b85908b5 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 19 Jan 2010 16:36:48 +0100 Subject: [PATCH] Create completion items for the builtin snippets --- src/plugins/qmljseditor/qmlcodecompletion.cpp | 29 ++++++++++++++++++- src/plugins/texteditor/basetexteditor.cpp | 10 +++++-- src/plugins/texteditor/basetexteditor.h | 2 ++ 3 files changed, 37 insertions(+), 4 deletions(-) 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);