Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 0.9.1-beta
  • 0.9.2-rc1
  • 1.0.0
  • 1.1
  • 1.2
  • 1.2.90
  • 1.3
  • 1.3.0
  • 1.3.0-beta
  • 1.3.1
  • 2.0
  • 2.0.0
  • 2.0.0-beta
  • 2.0.1
  • 2.1
  • 2.1.0
  • 2.2
  • 2.3
  • 2.4
  • 2.5
  • 2.6
  • 2.7
  • 2.8
  • 3.0
  • 3.1
  • 3.2
  • 3.3
  • 3.4
  • 3.5
  • 3.6
  • 4.0
  • 4.1
  • 4.2
  • 4.3
  • 4.4
  • 4.5
  • at-3.4
  • at-3.5
  • at-3.6
  • at-master
  • csa-3.3
  • csa-3.4
  • csa-3.5
  • csa-3.6
  • csa-master
  • master
  • qp-2.8
  • qp-3.0
  • qp-3.1
  • qp-3.2
  • qp-3.3
  • qp-3.4
  • qp-3.5
  • qp-3.6
  • qp-master
  • wip/boostbuildprojectmanager
  • wip/clang-query
  • wip/vcproj
  • at-v3.4.0
  • at-v3.4.0-beta1
  • at-v3.4.0-rc1
  • at-v3.4.1
  • at-v3.4.2
  • at-v3.5.0
  • at-v3.5.0-beta1
  • at-v3.5.0-rc1
  • at-v3.5.1
  • at-v3.6.0
  • at-v3.6.0-beta1
  • at-v3.6.0-rc1
  • csa-v3.3.0
  • csa-v3.3.0-beta1
  • csa-v3.3.0-rc1
  • csa-v3.3.1
  • csa-v3.3.2
  • csa-v3.4.0
  • csa-v3.4.0-beta1
  • csa-v3.4.0-rc1
  • csa-v3.4.1
  • csa-v3.4.2
  • csa-v3.5.0
  • csa-v3.5.0-beta1
  • csa-v3.5.0-rc1
  • csa-v3.5.1
  • csa-v3.6.0
  • csa-v3.6.0-beta1
  • csa-v3.6.0-rc1
  • qp-v3.1.0
  • qp-v3.1.0-beta1
  • qp-v3.2.0
  • qp-v3.2.0-beta1
  • qp-v3.2.1
  • qp-v3.2.2
  • qp-v3.3.0
  • qp-v3.3.0-beta1
  • qp-v3.3.0-rc1
  • qp-v3.3.1
  • qp-v3.3.2
  • qp-v3.4.0
  • qp-v3.4.0-rc1
  • qp-v3.4.1
  • qp-v3.4.2
  • qp-v3.5.0
  • qp-v3.5.0-beta1
  • qp-v3.5.0-rc1
  • qp-v3.5.1
  • qp-v3.6.0
  • qp-v3.6.0-beta1
  • qp-v3.6.0-rc1
  • tqtc/v2.6.0
  • tqtc/v2.6.0-rc
  • tqtc/v2.6.1
  • tqtc/v2.7.0
  • tqtc/v2.7.0-rc
  • tqtc/v2.7.2
  • tqtc/v2.8.0
  • tqtc/v2.8.0-beta
  • v1.0.0
  • v1.1.0
  • v1.1.0-rc1
  • v1.1.1
  • v1.2.0
  • v1.2.1
  • v1.2.90
  • v1.3.0
  • v1.3.0-beta
  • v1.3.0-rc1
  • v1.3.1
  • v2.0.0
  • v2.0.0-alpha
  • v2.0.0-beta
  • v2.0.0-rc1
  • v2.0.1
  • v2.1.0
  • v2.1.0-beta
  • v2.1.0-beta2
  • v2.1.0-rc1
  • v2.2.0
  • v2.2.0-beta
  • v2.2.0-rc1
  • v2.2.1
  • v2.3.0
  • v2.3.0-beta
  • v2.3.0-rc
  • v2.3.1
  • v2.4.0
  • v2.4.0-beta
  • v2.4.0-rc
  • v2.4.1
  • v2.5.0
  • v2.5.0-beta
  • v2.5.0-rc
  • v2.5.1
  • v2.5.2
  • v2.6.0
  • v2.6.0-beta
  • v2.6.0-rc
  • v2.6.1
158 results

Target

Select target project
  • tohunger/qt-creator
1 result
Select Git revision
  • 0.9.1-beta
  • 0.9.2-rc1
  • 1.0.0
  • 1.1
  • 1.2
  • 1.2.90
  • 1.3
  • 1.3.0
  • 1.3.0-beta
  • 1.3.1
  • 2.0
  • 2.0.0
  • 2.0.0-beta
  • 2.0.1
  • 2.1
  • 2.1.0
  • 2.2
  • 2.3
  • 2.4
  • 2.5
  • 2.6
  • 2.7
  • 2.8
  • 3.0
  • 3.1
  • 3.2
  • 3.3
  • 3.4
  • 3.5
  • 3.6
  • 4.0
  • 4.1
  • 4.2
  • 4.3
  • 4.4
  • 4.5
  • at-3.4
  • at-3.5
  • at-3.6
  • at-master
  • csa-3.3
  • csa-3.4
  • csa-3.5
  • csa-3.6
  • csa-master
  • master
  • qp-2.8
  • qp-3.0
  • qp-3.1
  • qp-3.2
  • qp-3.3
  • qp-3.4
  • qp-3.5
  • qp-3.6
  • qp-master
  • wip/boostbuildprojectmanager
  • wip/clang-query
  • wip/vcproj
  • at-v3.4.0
  • at-v3.4.0-beta1
  • at-v3.4.0-rc1
  • at-v3.4.1
  • at-v3.4.2
  • at-v3.5.0
  • at-v3.5.0-beta1
  • at-v3.5.0-rc1
  • at-v3.5.1
  • at-v3.6.0
  • at-v3.6.0-beta1
  • at-v3.6.0-rc1
  • csa-v3.3.0
  • csa-v3.3.0-beta1
  • csa-v3.3.0-rc1
  • csa-v3.3.1
  • csa-v3.3.2
  • csa-v3.4.0
  • csa-v3.4.0-beta1
  • csa-v3.4.0-rc1
  • csa-v3.4.1
  • csa-v3.4.2
  • csa-v3.5.0
  • csa-v3.5.0-beta1
  • csa-v3.5.0-rc1
  • csa-v3.5.1
  • csa-v3.6.0
  • csa-v3.6.0-beta1
  • csa-v3.6.0-rc1
  • qp-v3.1.0
  • qp-v3.1.0-beta1
  • qp-v3.2.0
  • qp-v3.2.0-beta1
  • qp-v3.2.1
  • qp-v3.2.2
  • qp-v3.3.0
  • qp-v3.3.0-beta1
  • qp-v3.3.0-rc1
  • qp-v3.3.1
  • qp-v3.3.2
  • qp-v3.4.0
  • qp-v3.4.0-rc1
  • qp-v3.4.1
  • qp-v3.4.2
  • qp-v3.5.0
  • qp-v3.5.0-beta1
  • qp-v3.5.0-rc1
  • qp-v3.5.1
  • qp-v3.6.0
  • qp-v3.6.0-beta1
  • qp-v3.6.0-rc1
  • tqtc/v2.6.0
  • tqtc/v2.6.0-rc
  • tqtc/v2.6.1
  • tqtc/v2.7.0
  • tqtc/v2.7.0-rc
  • tqtc/v2.7.2
  • tqtc/v2.8.0
  • tqtc/v2.8.0-beta
  • v1.0.0
  • v1.1.0
  • v1.1.0-rc1
  • v1.1.1
  • v1.2.0
  • v1.2.1
  • v1.2.90
  • v1.3.0
  • v1.3.0-beta
  • v1.3.0-rc1
  • v1.3.1
  • v2.0.0
  • v2.0.0-alpha
  • v2.0.0-beta
  • v2.0.0-rc1
  • v2.0.1
  • v2.1.0
  • v2.1.0-beta
  • v2.1.0-beta2
  • v2.1.0-rc1
  • v2.2.0
  • v2.2.0-beta
  • v2.2.0-rc1
  • v2.2.1
  • v2.3.0
  • v2.3.0-beta
  • v2.3.0-rc
  • v2.3.1
  • v2.4.0
  • v2.4.0-beta
  • v2.4.0-rc
  • v2.4.1
  • v2.5.0
  • v2.5.0-beta
  • v2.5.0-rc
  • v2.5.1
  • v2.5.2
  • v2.6.0
  • v2.6.0-beta
  • v2.6.0-rc
  • v2.6.1
158 results
Show changes
Showing
with 242 additions and 93 deletions
...@@ -51,6 +51,10 @@ public: ...@@ -51,6 +51,10 @@ public:
public slots: public slots:
virtual void cancelTasks(const QString &type) = 0; virtual void cancelTasks(const QString &type) = 0;
signals:
void taskStarted(const QString &type);
void allTasksFinished(const QString &type);
}; };
} // namespace Core } // namespace Core
......
...@@ -57,7 +57,8 @@ struct VCSManagerPrivate { ...@@ -57,7 +57,8 @@ struct VCSManagerPrivate {
QMap<QString, IVersionControl *> m_cachedMatches; QMap<QString, IVersionControl *> m_cachedMatches;
}; };
VCSManager::VCSManager() : VCSManager::VCSManager(QObject *parent) :
QObject(parent),
m_d(new VCSManagerPrivate) m_d(new VCSManagerPrivate)
{ {
} }
...@@ -67,6 +68,17 @@ VCSManager::~VCSManager() ...@@ -67,6 +68,17 @@ VCSManager::~VCSManager()
delete m_d; delete m_d;
} }
void VCSManager::extensionsInitialized()
{
// Change signal connections
foreach (IVersionControl *versionControl, allVersionControls()) {
connect(versionControl, SIGNAL(filesChanged(QStringList)),
this, SIGNAL(filesChanged(QStringList)));
connect(versionControl, SIGNAL(repositoryChanged(QString)),
this, SIGNAL(repositoryChanged(QString)));
}
}
void VCSManager::setVCSEnabled(const QString &directory) void VCSManager::setVCSEnabled(const QString &directory)
{ {
if (debug) if (debug)
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "core_global.h" #include "core_global.h"
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QObject>
namespace Core { namespace Core {
...@@ -49,13 +50,16 @@ class IVersionControl; ...@@ -49,13 +50,16 @@ class IVersionControl;
// for the topmost directory it manages. This information is cached and // for the topmost directory it manages. This information is cached and
// VCSManager thus knows pretty fast which IVersionControl * is responsible. // VCSManager thus knows pretty fast which IVersionControl * is responsible.
class CORE_EXPORT VCSManager class CORE_EXPORT VCSManager : public QObject
{ {
Q_OBJECT
Q_DISABLE_COPY(VCSManager) Q_DISABLE_COPY(VCSManager)
public: public:
VCSManager(); explicit VCSManager(QObject *parent = 0);
virtual ~VCSManager(); virtual ~VCSManager();
void extensionsInitialized();
IVersionControl *findVersionControlForDirectory(const QString &directory); IVersionControl *findVersionControlForDirectory(const QString &directory);
// Enable the VCS managing a certain directory only. This should // Enable the VCS managing a certain directory only. This should
...@@ -69,6 +73,10 @@ public: ...@@ -69,6 +73,10 @@ public:
// if a failure occurs // if a failure occurs
bool showDeleteDialog(const QString &fileName); bool showDeleteDialog(const QString &fileName);
signals:
void repositoryChanged(const QString &repository);
void filesChanged(const QStringList &files);
private: private:
VCSManagerPrivate *m_d; VCSManagerPrivate *m_d;
}; };
......
<plugin name="CodePaster" version="1.2.93" compatVersion="1.2.93"> <plugin name="CodePaster" version="1.3.0" compatVersion="1.3.0">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Codepaster plugin for pushing/fetching diff from server</description> <description>Codepaster plugin for pushing/fetching diff from server</description>
<url>http://qt.nokia.com</url> <url>http://qt.nokia.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.93"/> <dependency name="TextEditor" version="1.3.0"/>
<dependency name="ProjectExplorer" version="1.2.93"/> <dependency name="ProjectExplorer" version="1.3.0"/>
<dependency name="Core" version="1.2.93"/> <dependency name="Core" version="1.3.0"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
...@@ -68,6 +68,7 @@ CodepasterPlugin::CodepasterPlugin() ...@@ -68,6 +68,7 @@ CodepasterPlugin::CodepasterPlugin()
CodepasterPlugin::~CodepasterPlugin() CodepasterPlugin::~CodepasterPlugin()
{ {
qDeleteAll(m_protocols);
} }
bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_message) bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_message)
......
<plugin name="CppEditor" version="1.2.93" compatVersion="1.2.93"> <plugin name="CppEditor" version="1.3.0" compatVersion="1.3.0">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>C/C++ editor component.</description> <description>C/C++ editor component.</description>
<url>http://qt.nokia.com</url> <url>http://qt.nokia.com</url>
<dependencyList> <dependencyList>
<dependency name="Core" version="1.2.93"/> <dependency name="Core" version="1.3.0"/>
<dependency name="TextEditor" version="1.2.93"/> <dependency name="TextEditor" version="1.3.0"/>
<dependency name="CppTools" version="1.2.93"/> <dependency name="CppTools" version="1.3.0"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
...@@ -155,7 +155,7 @@ CppClassWizardParameters CppClassWizardDialog::parameters() const ...@@ -155,7 +155,7 @@ CppClassWizardParameters CppClassWizardDialog::parameters() const
rc.sourceFile = ncw->sourceFileName(); rc.sourceFile = ncw->sourceFileName();
rc.baseClass = ncw->baseClassName(); rc.baseClass = ncw->baseClassName();
rc.path = ncw->path(); rc.path = ncw->path();
rc.inheritsQObject = ncw->inheritsQObject(); rc.classType = ncw->classType();
return rc; return rc;
} }
...@@ -217,7 +217,8 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par ...@@ -217,7 +217,8 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
QString *header, QString *source) QString *header, QString *source)
{ {
// TODO: // TODO:
// Quite a bit of this code has been copied from FormClassWizardParameters::generateCpp. // Quite a bit of this code has been copied from FormClassWizardParameters::generateCpp
// and is duplicated in the library wizard.
// Maybe more of it could be merged into Utils. // Maybe more of it could be merged into Utils.
const QString indent = QString(4, QLatin1Char(' ')); const QString indent = QString(4, QLatin1Char(' '));
...@@ -239,10 +240,27 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par ...@@ -239,10 +240,27 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
const QRegExp qtClassExpr(QLatin1String("^Q[A-Z3].+")); const QRegExp qtClassExpr(QLatin1String("^Q[A-Z3].+"));
QTC_ASSERT(qtClassExpr.isValid(), /**/); QTC_ASSERT(qtClassExpr.isValid(), /**/);
const bool superIsQtClass = qtClassExpr.exactMatch(params.baseClass); // Determine parent QObject type for Qt types. Provide base
// class in case the user did not specify one.
QString parentQObjectClass;
bool defineQObjectMacro = false;
switch(params.classType) {
case Utils::NewClassWidget::ClassInheritsQObject:
parentQObjectClass = QLatin1String("QObject");
defineQObjectMacro = true;
break;
case Utils::NewClassWidget::ClassInheritsQWidget:
parentQObjectClass = QLatin1String("QWidget");
defineQObjectMacro = true;
break;
}
const QString baseClass = params.baseClass.isEmpty()
&& params.classType != Utils::NewClassWidget::NoClassType ?
parentQObjectClass : params.baseClass;
const bool superIsQtClass = qtClassExpr.exactMatch(baseClass);
if (superIsQtClass) { if (superIsQtClass) {
headerStr << '\n'; headerStr << '\n';
Utils::writeIncludeFileDirective(params.baseClass, true, headerStr); Utils::writeIncludeFileDirective(baseClass, true, headerStr);
} }
const QString namespaceIndent = Utils::writeOpeningNameSpaces(namespaceList, QString(), headerStr); const QString namespaceIndent = Utils::writeOpeningNameSpaces(namespaceList, QString(), headerStr);
...@@ -250,15 +268,24 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par ...@@ -250,15 +268,24 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
// Class declaration // Class declaration
headerStr << '\n'; headerStr << '\n';
headerStr << namespaceIndent << "class " << unqualifiedClassName; headerStr << namespaceIndent << "class " << unqualifiedClassName;
if (!params.baseClass.isEmpty()) if (!baseClass.isEmpty())
headerStr << " : public " << params.baseClass << "\n"; headerStr << " : public " << baseClass << "\n";
else else
headerStr << "\n"; headerStr << "\n";
headerStr << namespaceIndent << "{\n"; headerStr << namespaceIndent << "{\n";
if (params.inheritsQObject) if (defineQObjectMacro)
headerStr << namespaceIndent << "Q_OBJECT\n"; headerStr << namespaceIndent << "Q_OBJECT\n";
headerStr << namespaceIndent << "public:\n" headerStr << namespaceIndent << "public:\n"
<< namespaceIndent << indent << unqualifiedClassName << "();\n"; << namespaceIndent << indent;
// Constructor
if (parentQObjectClass.isEmpty()) {
headerStr << unqualifiedClassName << "();\n";
} else {
headerStr << "explicit " << unqualifiedClassName << '(' << parentQObjectClass
<< " *parent = 0);\n";
}
if (defineQObjectMacro)
headerStr << '\n' << namespaceIndent << "signals:\n\n" << namespaceIndent << "public slots:\n\n";
headerStr << namespaceIndent << "};\n"; headerStr << namespaceIndent << "};\n";
Utils::writeClosingNameSpaces(namespaceList, QString(), headerStr); Utils::writeClosingNameSpaces(namespaceList, QString(), headerStr);
...@@ -274,7 +301,15 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par ...@@ -274,7 +301,15 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
Utils::writeOpeningNameSpaces(namespaceList, QString(), sourceStr); Utils::writeOpeningNameSpaces(namespaceList, QString(), sourceStr);
// Constructor // Constructor
sourceStr << '\n' << namespaceIndent << unqualifiedClassName << "::" << unqualifiedClassName << "()\n"; sourceStr << '\n' << namespaceIndent ;
if (parentQObjectClass.isEmpty()) {
sourceStr << unqualifiedClassName << "::" << unqualifiedClassName << "()\n";
} else {
sourceStr << unqualifiedClassName << "::" << unqualifiedClassName
<< '(' << parentQObjectClass << " *parent) :\n"
<< namespaceIndent << indent << baseClass << "(parent)\n";
}
sourceStr << namespaceIndent << "{\n" << namespaceIndent << "}\n"; sourceStr << namespaceIndent << "{\n" << namespaceIndent << "}\n";
Utils::writeClosingNameSpaces(namespaceList, QString(), sourceStr); Utils::writeClosingNameSpaces(namespaceList, QString(), sourceStr);
......
...@@ -74,7 +74,7 @@ struct CppClassWizardParameters ...@@ -74,7 +74,7 @@ struct CppClassWizardParameters
QString sourceFile; QString sourceFile;
QString baseClass; QString baseClass;
QString path; QString path;
bool inheritsQObject; int classType;
}; };
class CppClassWizardDialog : public QWizard class CppClassWizardDialog : public QWizard
......
...@@ -1579,7 +1579,8 @@ void CPPEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedCha ...@@ -1579,7 +1579,8 @@ void CPPEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedCha
tabSettings().indentLine(block, indent); tabSettings().indentLine(block, indent);
return; return;
} else if ((firstToken.is(T_PUBLIC) || firstToken.is(T_PROTECTED) || firstToken.is(T_PRIVATE) || } else if ((firstToken.is(T_PUBLIC) || firstToken.is(T_PROTECTED) || firstToken.is(T_PRIVATE) ||
firstToken.is(T_Q_SIGNALS) || firstToken.is(T_Q_SLOTS)) && tk[1].is(T_COLON)) { firstToken.is(T_Q_SIGNALS) || firstToken.is(T_Q_SLOTS)) &&
tk.size() > 1 && tk[1].is(T_COLON)) {
const int startOfBlock = tk.startOfBlock(0); const int startOfBlock = tk.startOfBlock(0);
if (startOfBlock != 0) { if (startOfBlock != 0) {
const int indent = tk.indentation(startOfBlock); const int indent = tk.indentation(startOfBlock);
...@@ -1643,14 +1644,6 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e) ...@@ -1643,14 +1644,6 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
QMenu *menu = new QMenu(); QMenu *menu = new QMenu();
// QMenu *menu = createStandardContextMenu();
//
// // Remove insert unicode control character
// QAction *lastAction = menu->actions().last();
// if (lastAction->menu() && QLatin1String(lastAction->menu()->metaObject()->className()) == QLatin1String("QUnicodeControlCharacterMenu"))
// menu->removeAction(lastAction);
Core::ActionManager *am = Core::ICore::instance()->actionManager(); Core::ActionManager *am = Core::ICore::instance()->actionManager();
Core::ActionContainer *mcontext = am->actionContainer(CppEditor::Constants::M_CONTEXT); Core::ActionContainer *mcontext = am->actionContainer(CppEditor::Constants::M_CONTEXT);
QMenu *contextMenu = mcontext->menu(); QMenu *contextMenu = mcontext->menu();
...@@ -1661,6 +1654,8 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e) ...@@ -1661,6 +1654,8 @@ void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
const QList<QTextEdit::ExtraSelection> selections = const QList<QTextEdit::ExtraSelection> selections =
extraSelections(BaseTextEditor::CodeSemanticsSelection); extraSelections(BaseTextEditor::CodeSemanticsSelection);
appendStandardContextMenuActions(menu);
menu->exec(e->globalPos()); menu->exec(e->globalPos());
delete menu; delete menu;
} }
......
...@@ -41,8 +41,10 @@ const char * const SWITCH_DECLARATION_DEFINITION = "CppEditor.SwitchDeclarationD ...@@ -41,8 +41,10 @@ const char * const SWITCH_DECLARATION_DEFINITION = "CppEditor.SwitchDeclarationD
const char * const RENAME_SYMBOL_UNDER_CURSOR = "CppEditor.RenameSymbolUnderCursor"; const char * const RENAME_SYMBOL_UNDER_CURSOR = "CppEditor.RenameSymbolUnderCursor";
const char * const FIND_USAGES = "CppEditor.FindUsages"; const char * const FIND_USAGES = "CppEditor.FindUsages";
const char * const SEPARATOR = "CppEditor.Separator"; const char * const SEPARATOR = "CppEditor.Separator";
const char * const SEPARATOR2 = "CppEditor.Separator2";
const char * const FIND_REFERENCES = "CppEditor.FindReferences"; const char * const FIND_REFERENCES = "CppEditor.FindReferences";
const char * const JUMP_TO_DEFINITION = "CppEditor.JumpToDefinition"; const char * const JUMP_TO_DEFINITION = "CppEditor.JumpToDefinition";
const char * const UPDATE_CODEMODEL = "CppEditor.UpdateCodeModel";
const char * const HEADER_FILE_TYPE = "CppHeaderFiles"; const char * const HEADER_FILE_TYPE = "CppHeaderFiles";
const char * const SOURCE_FILE_TYPE = "CppSourceFiles"; const char * const SOURCE_FILE_TYPE = "CppSourceFiles";
......
...@@ -48,8 +48,6 @@ CppHighlighter::CppHighlighter(QTextDocument *document) : ...@@ -48,8 +48,6 @@ CppHighlighter::CppHighlighter(QTextDocument *document) :
void CppHighlighter::highlightBlock(const QString &text) void CppHighlighter::highlightBlock(const QString &text)
{ {
QTextCharFormat emptyFormat;
const int previousState = previousBlockState(); const int previousState = previousBlockState();
int state = 0, initialBraceDepth = 0; int state = 0, initialBraceDepth = 0;
if (previousState != -1) { if (previousState != -1) {
...@@ -225,7 +223,7 @@ void CppHighlighter::highlightBlock(const QString &text) ...@@ -225,7 +223,7 @@ void CppHighlighter::highlightBlock(const QString &text)
if (oldState == tokenize.state() && oldBraceDepth != braceDepth) { if (oldState == tokenize.state() && oldBraceDepth != braceDepth) {
int delta = braceDepth - oldBraceDepth; int delta = braceDepth - oldBraceDepth;
QTextBlock block = currentBlock().next(); QTextBlock block = currentBlock().next();
while (block.isValid()) { while (block.isValid() && block.userState() != -1) {
TextEditDocumentLayout::changeBraceDepth(block, delta); TextEditDocumentLayout::changeBraceDepth(block, delta);
block = block.next(); block = block.next();
} }
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/command.h>
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <texteditor/completionsupport.h> #include <texteditor/completionsupport.h>
#include <texteditor/fontsettings.h> #include <texteditor/fontsettings.h>
#include <texteditor/storagesettings.h> #include <texteditor/storagesettings.h>
...@@ -51,11 +52,11 @@ ...@@ -51,11 +52,11 @@
#include <texteditor/texteditorsettings.h> #include <texteditor/texteditorsettings.h>
#include <texteditor/texteditorconstants.h> #include <texteditor/texteditorconstants.h>
#include <cpptools/cpptoolsconstants.h> #include <cpptools/cpptoolsconstants.h>
#include <cpptools/cppmodelmanagerinterface.h>
#include <QtCore/QFileInfo> #include <QtCore/QFileInfo>
#include <QtCore/QSettings> #include <QtCore/QSettings>
#include <QtGui/QMenu> #include <QtGui/QMenu>
#include <QtGui/QAction>
using namespace CppEditor::Internal; using namespace CppEditor::Internal;
...@@ -108,11 +109,26 @@ QStringList CppEditorFactory::mimeTypes() const ...@@ -108,11 +109,26 @@ QStringList CppEditorFactory::mimeTypes() const
///////////////////////////////// CppPlugin ////////////////////////////////// ///////////////////////////////// CppPlugin //////////////////////////////////
static inline
Core::Command *createSeparator(Core::ActionManager *am,
QObject *parent,
const QList<int> &context,
const char *id)
{
QAction *separator = new QAction(parent);
separator->setSeparator(true);
return am->registerAction(separator, QLatin1String(id), context);
}
CppPlugin *CppPlugin::m_instance = 0; CppPlugin *CppPlugin::m_instance = 0;
CppPlugin::CppPlugin() : CppPlugin::CppPlugin() :
m_actionHandler(0), m_actionHandler(0),
m_sortedMethodOverview(false) m_sortedMethodOverview(false),
m_renameSymbolUnderCursorAction(0),
m_findUsagesAction(0),
m_updateCodeModelAction(0)
{ {
m_instance = this; m_instance = this;
} }
...@@ -192,6 +208,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess ...@@ -192,6 +208,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
Core::ActionContainer *contextMenu= am->createMenu(CppEditor::Constants::M_CONTEXT); Core::ActionContainer *contextMenu= am->createMenu(CppEditor::Constants::M_CONTEXT);
Core::Command *cmd; Core::Command *cmd;
Core::ActionContainer *cppToolsMenu = am->actionContainer(QLatin1String(CppTools::Constants::M_TOOLS_CPP));
QAction *jumpToDefinition = new QAction(tr("Follow Symbol under Cursor"), this); QAction *jumpToDefinition = new QAction(tr("Follow Symbol under Cursor"), this);
cmd = am->registerAction(jumpToDefinition, cmd = am->registerAction(jumpToDefinition,
...@@ -200,7 +217,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess ...@@ -200,7 +217,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
connect(jumpToDefinition, SIGNAL(triggered()), connect(jumpToDefinition, SIGNAL(triggered()),
this, SLOT(jumpToDefinition())); this, SLOT(jumpToDefinition()));
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); cppToolsMenu->addAction(cmd);
QAction *switchDeclarationDefinition = new QAction(tr("Switch between Method Declaration/Definition"), this); QAction *switchDeclarationDefinition = new QAction(tr("Switch between Method Declaration/Definition"), this);
cmd = am->registerAction(switchDeclarationDefinition, cmd = am->registerAction(switchDeclarationDefinition,
...@@ -209,22 +226,32 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess ...@@ -209,22 +226,32 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
connect(switchDeclarationDefinition, SIGNAL(triggered()), connect(switchDeclarationDefinition, SIGNAL(triggered()),
this, SLOT(switchDeclarationDefinition())); this, SLOT(switchDeclarationDefinition()));
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); cppToolsMenu->addAction(cmd);
QAction *findUsagesAction = new QAction(tr("Find Usages"), this); m_findUsagesAction = new QAction(tr("Find Usages"), this);
cmd = am->registerAction(findUsagesAction, Constants::FIND_USAGES, context); cmd = am->registerAction(m_findUsagesAction, Constants::FIND_USAGES, context);
cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+U"))); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+U")));
connect(findUsagesAction, SIGNAL(triggered()), this, SLOT(findUsages())); connect(m_findUsagesAction, SIGNAL(triggered()), this, SLOT(findUsages()));
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); cppToolsMenu->addAction(cmd);
QAction *renameSymbolUnderCursorAction = new QAction(tr("Rename Symbol under Cursor"), this); m_renameSymbolUnderCursorAction = new QAction(tr("Rename Symbol under Cursor"), this);
cmd = am->registerAction(renameSymbolUnderCursorAction, cmd = am->registerAction(m_renameSymbolUnderCursorAction,
Constants::RENAME_SYMBOL_UNDER_CURSOR, context); Constants::RENAME_SYMBOL_UNDER_CURSOR, context);
cmd->setDefaultKeySequence(QKeySequence("CTRL+SHIFT+R")); cmd->setDefaultKeySequence(QKeySequence("CTRL+SHIFT+R"));
connect(renameSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(renameSymbolUnderCursor())); connect(m_renameSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(renameSymbolUnderCursor()));
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); cppToolsMenu->addAction(cmd);
// Update context in global context
QList<int> globalContext;
globalContext.append(Core::Constants::C_GLOBAL_ID);
cppToolsMenu->addAction(createSeparator(am, this, globalContext, CppEditor::Constants::SEPARATOR2));
m_updateCodeModelAction = new QAction(tr("Update code model"), this);
cmd = am->registerAction(m_updateCodeModelAction, QLatin1String(Constants::UPDATE_CODEMODEL), globalContext);
CppTools::CppModelManagerInterface *cppModelManager = CppTools::CppModelManagerInterface::instance();
connect(m_updateCodeModelAction, SIGNAL(triggered()), cppModelManager, SLOT(updateModifiedSourceFiles()));
cppToolsMenu->addAction(cmd);
m_actionHandler = new TextEditor::TextEditorActionHandler(CppEditor::Constants::C_CPPEDITOR, m_actionHandler = new TextEditor::TextEditorActionHandler(CppEditor::Constants::C_CPPEDITOR,
TextEditor::TextEditorActionHandler::Format TextEditor::TextEditorActionHandler::Format
...@@ -233,10 +260,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess ...@@ -233,10 +260,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
m_actionHandler->initializeActions(); m_actionHandler->initializeActions();
QAction *separator = new QAction(this); contextMenu->addAction(createSeparator(am, this, context, CppEditor::Constants::SEPARATOR));
separator->setSeparator(true);
cmd = am->registerAction(separator, CppEditor::Constants::SEPARATOR, context);
contextMenu->addAction(cmd);
cmd = am->command(TextEditor::Constants::AUTO_INDENT_SELECTION); cmd = am->command(TextEditor::Constants::AUTO_INDENT_SELECTION);
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
...@@ -244,7 +268,10 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess ...@@ -244,7 +268,10 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION); cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION);
contextMenu->addAction(cmd); contextMenu->addAction(cmd);
connect(core->progressManager(), SIGNAL(taskStarted(QString)),
this, SLOT(onTaskStarted(QString)));
connect(core->progressManager(), SIGNAL(allTasksFinished(QString)),
this, SLOT(onAllTasksFinished(QString)));
readSettings(); readSettings();
return true; return true;
} }
...@@ -300,4 +327,22 @@ void CppPlugin::findUsages() ...@@ -300,4 +327,22 @@ void CppPlugin::findUsages()
editor->findUsages(); editor->findUsages();
} }
void CppPlugin::onTaskStarted(const QString &type)
{
if (type == CppTools::Constants::TASK_INDEX) {
m_renameSymbolUnderCursorAction->setEnabled(false);
m_findUsagesAction->setEnabled(false);
m_updateCodeModelAction->setEnabled(false);
}
}
void CppPlugin::onAllTasksFinished(const QString &type)
{
if (type == CppTools::Constants::TASK_INDEX) {
m_renameSymbolUnderCursorAction->setEnabled(true);
m_findUsagesAction->setEnabled(true);
m_updateCodeModelAction->setEnabled(true);
}
}
Q_EXPORT_PLUGIN(CppPlugin) Q_EXPORT_PLUGIN(CppPlugin)
...@@ -30,12 +30,13 @@ ...@@ -30,12 +30,13 @@
#ifndef CPPPLUGIN_H #ifndef CPPPLUGIN_H
#define CPPPLUGIN_H #define CPPPLUGIN_H
#include <QtCore/QtPlugin>
#include <QtCore/QStringList>
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <coreplugin/editormanager/ieditorfactory.h> #include <coreplugin/editormanager/ieditorfactory.h>
#include <QtCore/QtPlugin>
#include <QtCore/QStringList>
#include <QtGui/QAction>
namespace TextEditor { namespace TextEditor {
class TextEditorActionHandler; class TextEditorActionHandler;
} // namespace TextEditor } // namespace TextEditor
...@@ -74,6 +75,8 @@ private slots: ...@@ -74,6 +75,8 @@ private slots:
void switchDeclarationDefinition(); void switchDeclarationDefinition();
void jumpToDefinition(); void jumpToDefinition();
void renameSymbolUnderCursor(); void renameSymbolUnderCursor();
void onTaskStarted(const QString &type);
void onAllTasksFinished(const QString &type);
void findUsages(); void findUsages();
private: private:
...@@ -85,6 +88,9 @@ private: ...@@ -85,6 +88,9 @@ private:
TextEditor::TextEditorActionHandler *m_actionHandler; TextEditor::TextEditorActionHandler *m_actionHandler;
bool m_sortedMethodOverview; bool m_sortedMethodOverview;
QAction *m_renameSymbolUnderCursorAction;
QAction *m_findUsagesAction;
QAction *m_updateCodeModelAction;
}; };
class CppEditorFactory : public Core::IEditorFactory class CppEditorFactory : public Core::IEditorFactory
......
<plugin name="CppTools" version="1.2.93" compatVersion="1.2.93"> <plugin name="CppTools" version="1.3.0" compatVersion="1.3.0">
<vendor>Nokia Corporation</vendor> <vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright> <copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license> <license>
...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ...@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Tools for analyzing C/C++ code.</description> <description>Tools for analyzing C/C++ code.</description>
<url>http://qt.nokia.com</url> <url>http://qt.nokia.com</url>
<dependencyList> <dependencyList>
<dependency name="TextEditor" version="1.2.93"/> <dependency name="TextEditor" version="1.3.0"/>
<dependency name="ProjectExplorer" version="1.2.93"/> <dependency name="ProjectExplorer" version="1.3.0"/>
<dependency name="Locator" version="1.2.93"/> <dependency name="Locator" version="1.3.0"/>
</dependencyList> </dependencyList>
</plugin> </plugin>
...@@ -862,7 +862,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) ...@@ -862,7 +862,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
if (! resolvedTypes.isEmpty()) { if (! resolvedTypes.isEmpty()) {
if (m_completionOperator == T_LPAREN && if (m_completionOperator == T_LPAREN &&
completeConstructorOrFunction(resolvedTypes, context, endOfExpression)) { completeConstructorOrFunction(resolvedTypes, context, endOfExpression, false)) {
return m_startPosition; return m_startPosition;
} else if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) && } else if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) &&
...@@ -901,7 +901,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) ...@@ -901,7 +901,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
// If it's a class, add completions for the constructors // If it's a class, add completions for the constructors
foreach (const TypeOfExpression::Result &result, results) { foreach (const TypeOfExpression::Result &result, results) {
if (result.first->isClassType()) { if (result.first->isClassType()) {
if (completeConstructorOrFunction(results, context, endOfExpression)) if (completeConstructorOrFunction(results, context, endOfExpression, true))
return m_startPosition; return m_startPosition;
break; break;
} }
...@@ -915,7 +915,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) ...@@ -915,7 +915,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpression::Result> &results, bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpression::Result> &results,
const LookupContext &context, const LookupContext &context,
int endOfExpression) int endOfExpression, bool toolTipOnly)
{ {
QList<Function *> functions; QList<Function *> functions;
...@@ -1004,15 +1004,17 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi ...@@ -1004,15 +1004,17 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
} }
} }
if (! functions.isEmpty()) { // There are two different kinds of completion we want to provide:
// There are two options: // 1. If this is a function call, we want to pop up a tooltip that shows the user
// 1. If this is a function call, we want to pop up a tooltip that shows the user // the possible overloads with their argument types and names.
// the possible overloads with their argument types and names. // 2. If this is a function definition, we want to offer autocompletion of
// 2. If this is a function definition, we want to offer autocompletion of // the function signature.
// the function signature.
// Here we evaluate a first criterion: function definitions will only // check if function signature autocompletion is appropriate
// happen in class or namespace scope. if (! functions.isEmpty() && ! toolTipOnly) {
// function definitions will only happen in class or namespace scope,
// so get the current location's enclosing scope.
// get current line and column // get current line and column
TextEditor::BaseTextEditor *edit = qobject_cast<TextEditor::BaseTextEditor *>(m_editor->widget()); TextEditor::BaseTextEditor *edit = qobject_cast<TextEditor::BaseTextEditor *>(m_editor->widget());
...@@ -1034,16 +1036,16 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi ...@@ -1034,16 +1036,16 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
unsigned endLine, endColumn; unsigned endLine, endColumn;
context.thisDocument()->translationUnit()->getPosition(sc->owner()->endOffset(), &endLine, &endColumn); context.thisDocument()->translationUnit()->getPosition(sc->owner()->endOffset(), &endLine, &endColumn);
if (startLine <= line && line <= endLine) if (startLine <= line && line <= endLine) {
if ((startLine != line || startColumn <= column) if ((startLine != line || startColumn <= column)
&& (endLine != line || column <= endColumn)) && (endLine != line || column <= endColumn))
break; break;
}
sc = sc->enclosingScope(); sc = sc->enclosingScope();
} }
if (sc && (sc->isClassScope() || sc->isNamespaceScope())) if (sc && (sc->isClassScope() || sc->isNamespaceScope())) {
{
// It may still be a function call. If the whole line parses as a function // It may still be a function call. If the whole line parses as a function
// declaration, we should be certain that it isn't. // declaration, we should be certain that it isn't.
bool autocompleteSignature = false; bool autocompleteSignature = false;
...@@ -1058,7 +1060,8 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi ...@@ -1058,7 +1060,8 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
if (doc->parse(Document::ParseDeclaration)) { if (doc->parse(Document::ParseDeclaration)) {
doc->check(); doc->check();
if (SimpleDeclarationAST *sd = doc->translationUnit()->ast()->asSimpleDeclaration()) { if (SimpleDeclarationAST *sd = doc->translationUnit()->ast()->asSimpleDeclaration()) {
if (sd->declarators->declarator->postfix_declarators if (sd->declarators &&
sd->declarators->declarator->postfix_declarators
&& sd->declarators->declarator->postfix_declarators->asFunctionDeclarator()) { && sd->declarators->declarator->postfix_declarators->asFunctionDeclarator()) {
autocompleteSignature = true; autocompleteSignature = true;
} }
...@@ -1087,7 +1090,9 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi ...@@ -1087,7 +1090,9 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
return true; return true;
} }
} }
}
if (! functions.empty()) {
// set up function call tooltip // set up function call tooltip
// Recreate if necessary // Recreate if necessary
...@@ -1117,14 +1122,6 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba ...@@ -1117,14 +1122,6 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba
m_completionOperator, m_completionOperator,
&replacedDotOperator); &replacedDotOperator);
if (replacedDotOperator) {
// Replace . with ->
int length = m_editor->position() - m_startPosition + 1;
m_editor->setCurPos(m_startPosition - 1);
m_editor->replace(length, QLatin1String("->"));
++m_startPosition;
}
QList<Symbol *> classObjectCandidates; QList<Symbol *> classObjectCandidates;
foreach (const TypeOfExpression::Result &r, classObjectResults) { foreach (const TypeOfExpression::Result &r, classObjectResults) {
FullySpecifiedType ty = r.first.simplified(); FullySpecifiedType ty = r.first.simplified();
...@@ -1143,6 +1140,14 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba ...@@ -1143,6 +1140,14 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &ba
} }
} }
if (replacedDotOperator && ! classObjectCandidates.isEmpty()) {
// Replace . with ->
int length = m_editor->position() - m_startPosition + 1;
m_editor->setCurPos(m_startPosition - 1);
m_editor->replace(length, QLatin1String("->"));
++m_startPosition;
}
completeClass(classObjectCandidates, context, /*static lookup = */ false); completeClass(classObjectCandidates, context, /*static lookup = */ false);
if (! m_completions.isEmpty()) if (! m_completions.isEmpty())
return true; return true;
......
...@@ -115,7 +115,7 @@ private: ...@@ -115,7 +115,7 @@ private:
bool completeConstructorOrFunction(const QList<CPlusPlus::TypeOfExpression::Result> &, bool completeConstructorOrFunction(const QList<CPlusPlus::TypeOfExpression::Result> &,
const CPlusPlus::LookupContext &, const CPlusPlus::LookupContext &,
int endOfExpression); int endOfExpression, bool toolTipOnly);
bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &, bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &,
const CPlusPlus::LookupContext &context); const CPlusPlus::LookupContext &context);
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
** **
** If you are unsure which license is appropriate for your use, please ** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://www.qtsoftware.com/contact. ** contact the sales department at http://qt.nokia.com/contact.
** **
**************************************************************************/ **************************************************************************/
...@@ -62,7 +62,8 @@ using namespace CppTools::Internal; ...@@ -62,7 +62,8 @@ using namespace CppTools::Internal;
using namespace CPlusPlus; using namespace CPlusPlus;
CppFindReferences::CppFindReferences(CppTools::CppModelManagerInterface *modelManager) CppFindReferences::CppFindReferences(CppTools::CppModelManagerInterface *modelManager)
: _modelManager(modelManager), : QObject(modelManager),
_modelManager(modelManager),
_resultWindow(ExtensionSystem::PluginManager::instance()->getObject<Find::SearchResultWindow>()) _resultWindow(ExtensionSystem::PluginManager::instance()->getObject<Find::SearchResultWindow>())
{ {
m_watcher.setPendingResultsLimit(1); m_watcher.setPendingResultsLimit(1);
...@@ -109,7 +110,6 @@ static void find_helper(QFutureInterface<Usage> &future, ...@@ -109,7 +110,6 @@ static void find_helper(QFutureInterface<Usage> &future,
Q_ASSERT(symbolId != 0); Q_ASSERT(symbolId != 0);
const QString sourceFile = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength()); const QString sourceFile = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength());
QStringList files(sourceFile); QStringList files(sourceFile);
if (symbol->isClass() || symbol->isForwardClassDeclaration()) { if (symbol->isClass() || symbol->isForwardClassDeclaration()) {
...@@ -125,9 +125,7 @@ static void find_helper(QFutureInterface<Usage> &future, ...@@ -125,9 +125,7 @@ static void find_helper(QFutureInterface<Usage> &future,
} else { } else {
files += snapshot.dependsOn(sourceFile); files += snapshot.dependsOn(sourceFile);
} }
files.removeDuplicates(); files.removeDuplicates();
//qDebug() << "done in:" << tm.elapsed() << "number of files to parse:" << files.size(); //qDebug() << "done in:" << tm.elapsed() << "number of files to parse:" << files.size();
future.setProgressRange(0, files.size()); future.setProgressRange(0, files.size());
...@@ -231,7 +229,6 @@ void CppFindReferences::findAll_helper(Symbol *symbol) ...@@ -231,7 +229,6 @@ void CppFindReferences::findAll_helper(Symbol *symbol)
const QMap<QString, QString> wl = _modelManager->workingCopy(); const QMap<QString, QString> wl = _modelManager->workingCopy();
Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
QFuture<Usage> result = QtConcurrent::run(&find_helper, wl, snapshot, symbol); QFuture<Usage> result = QtConcurrent::run(&find_helper, wl, snapshot, symbol);
m_watcher.setFuture(result); m_watcher.setFuture(result);
...@@ -249,7 +246,21 @@ static void applyChanges(QTextDocument *doc, const QString &text, const QList<Fi ...@@ -249,7 +246,21 @@ static void applyChanges(QTextDocument *doc, const QString &text, const QList<Fi
foreach (const Find::SearchResultItem &item, items) { foreach (const Find::SearchResultItem &item, items) {
const int blockNumber = item.lineNumber - 1; const int blockNumber = item.lineNumber - 1;
QTextCursor tc(doc->findBlockByNumber(blockNumber)); QTextCursor tc(doc->findBlockByNumber(blockNumber));
tc.setPosition(tc.position() + item.searchTermStart);
const int cursorPosition = tc.position() + item.searchTermStart;
int cursorIndex = 0;
for (; cursorIndex < cursors.size(); ++cursorIndex) {
const QTextCursor &tc = cursors.at(cursorIndex);
if (tc.position() == cursorPosition)
break;
}
if (cursorIndex != cursors.size())
continue; // skip this change.
tc.setPosition(cursorPosition);
tc.setPosition(tc.position() + item.searchTermLength, tc.setPosition(tc.position() + item.searchTermLength,
QTextCursor::KeepAnchor); QTextCursor::KeepAnchor);
cursors.append(tc); cursors.append(tc);
...@@ -335,6 +346,7 @@ void CppFindReferences::displayResult(int index) ...@@ -335,6 +346,7 @@ void CppFindReferences::displayResult(int index)
void CppFindReferences::searchFinished() void CppFindReferences::searchFinished()
{ {
_resultWindow->finishSearch();
emit changed(); emit changed();
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
** **
** If you are unsure which license is appropriate for your use, please ** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://www.qtsoftware.com/contact. ** contact the sales department at http://qt.nokia.com/contact.
** **
**************************************************************************/ **************************************************************************/
......
...@@ -532,7 +532,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, ...@@ -532,7 +532,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type,
return; return;
QString contents = tryIncludeFile(fileName, type); QString contents = tryIncludeFile(fileName, type);
fileName = QDir::cleanPath(fileName);
if (m_currentDoc) { if (m_currentDoc) {
m_currentDoc->addIncludeFile(fileName, line); m_currentDoc->addIncludeFile(fileName, line);
...@@ -562,6 +562,10 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, ...@@ -562,6 +562,10 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type,
doc = Document::create(fileName); doc = Document::create(fileName);
doc->setRevision(m_revision); doc->setRevision(m_revision);
QFileInfo info(fileName);
if (info.exists())
doc->setLastModified(info.lastModified());
Document::Ptr previousDoc = switchDocument(doc); Document::Ptr previousDoc = switchDocument(doc);
const QByteArray preprocessedCode = preprocess(fileName, contents); const QByteArray preprocessedCode = preprocess(fileName, contents);
...@@ -588,6 +592,26 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc) ...@@ -588,6 +592,26 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc)
} }
void CppTools::CppModelManagerInterface::updateModifiedSourceFiles()
{
const Snapshot snapshot = this->snapshot();
QStringList sourceFiles;
foreach (const Document::Ptr doc, snapshot) {
const QDateTime lastModified = doc->lastModified();
if (! lastModified.isNull()) {
QFileInfo fileInfo(doc->fileName());
if (fileInfo.exists() && fileInfo.lastModified() != lastModified)
sourceFiles.append(doc->fileName());
}
}
updateSourceFiles(sourceFiles);
}
CppTools::CppModelManagerInterface *CppTools::CppModelManagerInterface::instance() CppTools::CppModelManagerInterface *CppTools::CppModelManagerInterface::instance()
{ {
ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance();
......
...@@ -83,9 +83,6 @@ public: ...@@ -83,9 +83,6 @@ public:
static CppModelManagerInterface *instance(); static CppModelManagerInterface *instance();
virtual void GC() = 0;
virtual void updateSourceFiles(const QStringList &sourceFiles) = 0;
virtual QMap<QString, QString> workingCopy() const = 0; virtual QMap<QString, QString> workingCopy() const = 0;
virtual CPlusPlus::Snapshot snapshot() const = 0; virtual CPlusPlus::Snapshot snapshot() const = 0;
...@@ -104,6 +101,11 @@ public: ...@@ -104,6 +101,11 @@ public:
virtual void renameUsages(CPlusPlus::Symbol *symbol) = 0; virtual void renameUsages(CPlusPlus::Symbol *symbol) = 0;
virtual void findUsages(CPlusPlus::Symbol *symbol) = 0; virtual void findUsages(CPlusPlus::Symbol *symbol) = 0;
public Q_SLOTS:
void updateModifiedSourceFiles();
virtual void updateSourceFiles(const QStringList &sourceFiles) = 0;
virtual void GC() = 0;
}; };
class CPPTOOLS_EXPORT AbstractEditorSupport class CPPTOOLS_EXPORT AbstractEditorSupport
......