[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [KDevelop] c66ddd6: When overwriting a tail during code completion, do
From: David Nolden <david.nolden.kdevelop () art-master ! de>
Date: 2010-12-09 21:10:48
Message-ID: 20101209211049.1D8C4A60AE () git ! kde ! org
[Download RAW message or body]
commit c66ddd65d85611a8fdd170874e69e003ad568eeb
branch master
Author: David Nolden <david.nolden.kdevelop@art-master.de>
Date: Thu Dec 9 22:09:24 2010 +0100
When overwriting a tail during code completion, do it in a separate editing step. \
Now the user can push CTRL+Z to get the overwritten tail back.
diff --git a/languages/cpp/codecompletion/item.cpp \
b/languages/cpp/codecompletion/item.cpp index a24abf5..50aaa40 100644
--- a/languages/cpp/codecompletion/item.cpp
+++ b/languages/cpp/codecompletion/item.cpp
@@ -49,10 +49,12 @@ namespace Cpp {
-void NormalDeclarationCompletionItem::execute(KTextEditor::Document* document, const \
KTextEditor::Range& word) { +void \
NormalDeclarationCompletionItem::execute(KTextEditor::Document* document, const \
KTextEditor::Range& _word) { if( completionContext() && completionContext()->depth() \
!= 0 ) return; //Do not replace any text when it is an argument-hint
+ KTextEditor::Range word(_word);
+
if(m_isQtSignalSlotCompletion) {
bool addSignalSlot = true;
{
@@ -121,8 +123,20 @@ void \
NormalDeclarationCompletionItem::execute(KTextEditor::Document* document, c }else{
newText = alternativeText;
}
-
+
+ // Text that will be removed in a separate editing step (so the user can undo it)
+ KTextEditor::Range removeInSecondStep;
+
+ KTextEditor::Cursor cursor = document->activeView()->cursorPosition();
+ if(cursor != word.end())
+ {
+ int removeUntilColumn = word.end().column() + word.start().column() + \
newText.length() - cursor.column(); + word.end() = cursor;
+ removeInSecondStep = KTextEditor::Range(word.start().line(), \
word.start().column() + newText.length(), word.end().line(), removeUntilColumn); + }
+
document->replaceText(word, newText);
+
KTextEditor::Cursor end = word.start();
end.setColumn(end.column() + newText.length());
@@ -130,33 +144,44 @@ void \
NormalDeclarationCompletionItem::execute(KTextEditor::Document* document, c
KDevelop::DUChainReadLocker lock(KDevelop::DUChain::lock());
- if(!m_declaration.data())
- return;
-
- Cpp::TemplateDeclaration* templateDecl = \
dynamic_cast<Cpp::TemplateDeclaration*>(m_declaration.data());
- if(templateDecl) {
- DUContext* context = templateDecl->templateContext(m_declaration->topContext());
- if(context && context->localDeclarations().count() && \
context->localDeclarations()[0]->type<CppTemplateParameterType>()) {
- jumpForbidden = true;
+ if(m_declaration.data())
+ {
+ Cpp::TemplateDeclaration* templateDecl = \
dynamic_cast<Cpp::TemplateDeclaration*>(m_declaration.data()); + if(templateDecl) \
{ + DUContext* context = \
templateDecl->templateContext(m_declaration->topContext()); + if(context && \
context->localDeclarations().count() && \
context->localDeclarations()[0]->type<CppTemplateParameterType>()) { + \
jumpForbidden = true; + lock.unlock();
+ document->insertText( end, "<>" );
+ end.setColumn(end.column() + 2);
+ document->activeView()->setCursorPosition( end - KTextEditor::Cursor(0, 1) \
); + lock.lock();
+ }
+ }
+
+ if(m_declaration.data()->kind() == Declaration::Namespace) {
lock.unlock();
- document->insertText( end, "<>" );
+ document->insertText(end, "::");
end.setColumn(end.column() + 2);
- document->activeView()->setCursorPosition( end - KTextEditor::Cursor(0, 1) );
lock.lock();
}
+
+ if( !useAlternativeText && m_declaration && \
(dynamic_cast<AbstractFunctionDeclaration*>(m_declaration.data()) || \
completionContext()->isConstructorInitialization()) ) { + //Do some intelligent \
stuff for functions with the parens: + lock.unlock();
+ insertFunctionParenText(document, end, m_declaration, jumpForbidden);
+ }
}
- if(m_declaration.data()->kind() == Declaration::Namespace) {
- lock.unlock();
- document->insertText(end, "::");
- end.setColumn(end.column() + 2);
- lock.lock();
- }
-
- if( !useAlternativeText && m_declaration && \
(dynamic_cast<AbstractFunctionDeclaration*>(m_declaration.data()) || \
completionContext()->isConstructorInitialization()) ) {
- //Do some intelligent stuff for functions with the parens:
- lock.unlock();
- insertFunctionParenText(document, end, m_declaration, jumpForbidden);
+ if(!removeInSecondStep.isEmpty() && removeInSecondStep.end() > end && \
removeInSecondStep.end().line() == end.line() && removeInSecondStep.end().column() <= \
document->lineLength(removeInSecondStep.end().line())) + {
+ // We stop the editing sequence, which was initiated by kate, so the user can \
manually undo the removal + bool wasEditing = document->endEditing();
+ if(wasEditing)
+ document->startEditing();
+ else
+ kWarning() << "Was not editing";
+ document->removeText(removeInSecondStep);
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic