diff --git a/src/plugins/designer/workbenchintegration.cpp b/src/plugins/designer/workbenchintegration.cpp index bfdef2054438e63c104c77c4b4e65ff29d6ca887..7cf505b4e29d280ef38fce4b503ac4896739595e 100644 --- a/src/plugins/designer/workbenchintegration.cpp +++ b/src/plugins/designer/workbenchintegration.cpp @@ -399,17 +399,17 @@ static void addDeclaration(const QString &docFileName, const Class *cl, const QS if (const Declaration *decl = cl->memberAt(j)->asDeclaration()) if (const Function *fun = decl->type()->asFunctionType()) { // we are only interested in declarations of methods. - // fun->column() returns always 0, what can cause trouble in case in one - // line if there is: "private slots: void foo();" if (fun->isSlot() && fun->isPrivate()) { - const int line = fun->line(); // [1..n] + const int line = fun->line(); // this is the beginning of function name: "void ^foo(...)" const int column = fun->column(); if (ITextEditable *editable = editableAt(docFileName, line, column)) { - // Figure out indentation (symbol - len("void ")) and insert after - editable->gotoLine(line + 1, 1); + unsigned dl, dc; // this position is the beginning of return value: "^void foo(...)" + decl->getStartPosition(&dl, &dc); + dc--; // if the first character in line is 'v' comming from "void" getStartPosition returns 1, not 0, so we always decrement it. + editable->gotoLine(dl, dc); editable->position(ITextEditor::StartOfLine); - const QString indentation = QString(qMax(0, column - 6), QLatin1Char(' ')); - editable->insert(indentation + declaration); + const QString indentation = QString(dc, QLatin1Char(' ')); + editable->insert(declaration + indentation); } return; } diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index c02a10f318bca7d3c6306a2a7e62219d748f2e6f..68b19c54e97c53d2502af52b88d50a7130951379 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -247,13 +247,13 @@ StringLiteral *Symbol::fileId() const return fileId; } -void Symbol::getPosition(unsigned *line, unsigned *column, StringLiteral **fileId) +void Symbol::getPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const { translationUnit()->getPosition(_sourceOffset, line, column, fileId); } -void Symbol::getStartPosition(unsigned *line, unsigned *column, StringLiteral **fileId) +void Symbol::getStartPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const { translationUnit()->getPosition(_startOffset, line, column, fileId); } -void Symbol::getEndPosition(unsigned *line, unsigned *column, StringLiteral **fileId) +void Symbol::getEndPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const { translationUnit()->getPosition(_endOffset, line, column, fileId); } const char *Symbol::fileName() const diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index ac8f0b11cab03026bf7f63bd44643196a99ac318..4db5d297c298384f12198b0dfbabde3b7db3930e 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -115,9 +115,9 @@ public: unsigned endOffset() const; void setEndOffset(unsigned offset); - void getPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0); - void getStartPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0); - void getEndPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0); + void getPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; + void getStartPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; + void getEndPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; /// Returns this Symbol's name. Name *name() const;