diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index 8515dcff780b106cc646feb8b60e722c5244a0c2..235dcd8cd5524bbdd66a50ea6101c45d21454df4 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -130,6 +130,7 @@ const char * const SAVEASDEFAULT = "QtCreator.SaveAsDefaultLayout"; const char * const RESTOREDEFAULT = "QtCreator.RestoreDefaultLayout"; const char * const CLOSE = "QtCreator.Close"; const char * const CLOSEALL = "QtCreator.CloseAll"; +const char * const CLOSEOTHERS = "QtCreator.CloseOthers"; const char * const GOTONEXT = "QtCreator.GotoNext"; const char * const GOTOPREV = "QtCreator.GotoPrevious"; const char * const GOTONEXTINHISTORY = "QtCreator.GotoNextInHistory"; diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index f084f20080e71157f61404d941b918ea4c79266e..3eb7503ac8aed9dbf788b25c91a15524d8173dad 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -149,6 +149,7 @@ struct EditorManagerPrivate { QAction *m_saveAsAction; QAction *m_closeCurrentEditorAction; QAction *m_closeAllEditorsAction; + QAction *m_closeOtherEditorsAction; QAction *m_gotoNextDocHistoryAction; QAction *m_gotoPreviousDocHistoryAction; QAction *m_goBackAction; @@ -187,6 +188,7 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) : m_saveAsAction(new QAction(parent)), m_closeCurrentEditorAction(new QAction(EditorManager::tr("Close"), parent)), m_closeAllEditorsAction(new QAction(EditorManager::tr("Close All"), parent)), + m_closeOtherEditorsAction(new QAction(EditorManager::tr("Close Others"), parent)), m_gotoNextDocHistoryAction(new QAction(EditorManager::tr("Next Document in History"), parent)), m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Document in History"), parent)), m_goBackAction(new QAction(EditorManager::tr("Go back"), parent)), @@ -292,6 +294,12 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) : mfile->addAction(cmd, Constants::G_FILE_CLOSE); connect(m_d->m_closeAllEditorsAction, SIGNAL(triggered()), this, SLOT(closeAllEditors())); + //Close All Others Action + cmd = am->registerAction(m_d->m_closeOtherEditorsAction, Constants::CLOSEOTHERS, editManagerContext); + mfile->addAction(cmd, Constants::G_FILE_CLOSE); + cmd->setAttribute(Core::Command::CA_UpdateText); + connect(m_d->m_closeOtherEditorsAction, SIGNAL(triggered()), this, SLOT(closeOtherEditors())); + // Goto Previous In History Action cmd = am->registerAction(m_d->m_gotoPreviousDocHistoryAction, Constants::GOTOPREVINHISTORY, editManagerContext); #ifdef Q_WS_MAC @@ -648,6 +656,16 @@ bool EditorManager::closeAllEditors(bool askAboutModifiedEditors) return closeEditors(openedEditors(), askAboutModifiedEditors); } +void EditorManager::closeOtherEditors() +{ + IEditor *current = currentEditor(); + QTC_ASSERT(current, return); + m_d->m_editorModel->removeAllRestoredEditors(); + QList<IEditor*> editors = openedEditors(); + editors.removeAll(current); + closeEditors(editors, true); +} + bool EditorManager::closeEditors(const QList<IEditor*> editorsToClose, bool askAboutModifiedEditors) { if (editorsToClose.isEmpty()) @@ -1331,7 +1349,7 @@ void EditorManager::updateActions() { QString fName; IEditor *curEditor = currentEditor(); - int openedCount = openedEditors().count(); + int openedCount = openedEditors().count() + m_d->m_editorModel->restoredEditorCount(); if (curEditor) { if (!curEditor->file()->fileName().isEmpty()) { QFileInfo fi(curEditor->file()->fileName()); @@ -1367,6 +1385,8 @@ void EditorManager::updateActions() m_d->m_closeCurrentEditorAction->setEnabled(curEditor != 0); m_d->m_closeCurrentEditorAction->setText(tr("Close %1").arg(quotedName)); m_d->m_closeAllEditorsAction->setEnabled(openedCount > 0); + m_d->m_closeOtherEditorsAction->setEnabled(openedCount > 1); + m_d->m_closeOtherEditorsAction->setText((openedCount > 1 ? tr("Close All Except %1").arg(quotedName) : tr("Close Others"))); m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0); m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0); diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 81a1025a4eef5b9763b165a0dcc0ab7673d38360..18290b6ef516809519fff393b944c2bfcd019d6c 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -198,6 +198,7 @@ private slots: bool saveFile(Core::IEditor *editor = 0); bool saveFileAs(Core::IEditor *editor = 0); void closeEditor(); + void closeOtherEditors(); void gotoNextDocHistory(); void gotoPreviousDocHistory(); diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index b9838a8b59585a4f11e2103973b7f83439b8acc6..e61f0fa890133abc6e4f1b875d635876812c8855 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -205,6 +205,17 @@ void EditorModel::removeAllRestoredEditors() } } +int EditorModel::restoredEditorCount() const +{ + int count = 0; + for (int i = m_editors.count()-1; i >= 0; --i) { + if (!m_editors.at(i).editor) { + ++count; + } + } + return count; +} + bool EditorModel::isDuplicate(IEditor *editor) const { return m_duplicateEditors.contains(editor); diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index b62645baaaf45f67889b9aa2f6729d1cfbac18a0..4c0da55ac3f6fdda99229e3a66a3d88a5bccddac 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -89,6 +89,7 @@ public: void removeEditor(const QModelIndex &index); void removeAllRestoredEditors(); + int restoredEditorCount() const; void emitDataChanged(IEditor *editor); QList<IEditor *> editors() const; diff --git a/src/plugins/cppeditor/cppeditor.pro b/src/plugins/cppeditor/cppeditor.pro index 2fbf3b46e489184f8ea506c52eccbc3f84406215..64ee6631957b7fad38bde663305a48c8962e74f1 100644 --- a/src/plugins/cppeditor/cppeditor.pro +++ b/src/plugins/cppeditor/cppeditor.pro @@ -23,4 +23,4 @@ SOURCES += cppplugin.cpp \ cppclasswizard.cpp RESOURCES += cppeditor.qrc -OTHER_FILES += CppEditor.pluginspec +OTHER_FILES += CppEditor.pluginspec CppEditor.mimetypes.xml diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index 73002aaface593425ddebcf70d1dd8cd71f891f7..7528ddc79e482311dff112080495c13ee3dec529 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -41,6 +41,7 @@ const char * const TASK_INDEX = "CppTools.Task.Index"; const char * const C_SOURCE_MIMETYPE = "text/x-csrc"; const char * const C_HEADER_MIMETYPE = "text/x-chdr"; const char * const CPP_SOURCE_MIMETYPE = "text/x-c++src"; +const char * const OBJECTIVE_CPP_SOURCE_MIMETYPE = "text/x-objcsrc"; const char * const CPP_HEADER_MIMETYPE = "text/x-c++hdr"; // QSettings keys for use by the "New Class" wizards. diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index cdfda4c24bd8d2d5fcb584ac542b2d4baf9172dc..4aa16e9e23baafd4ada51a1bb5cd25359f53bd54 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -185,6 +185,7 @@ enum FileType { HeaderFile, C_SourceFile, CPP_SourceFile, + ObjectiveCPP_SourceFile, UnknownType }; @@ -198,6 +199,8 @@ static inline FileType fileType(const Core::MimeDatabase *mimeDatase, const QFi return C_SourceFile; if (typeName == QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)) return CPP_SourceFile; + if (typeName == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)) + return ObjectiveCPP_SourceFile; if (typeName == QLatin1String(CppTools::Constants::C_HEADER_MIMETYPE) || typeName == QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE)) return HeaderFile; @@ -212,11 +215,13 @@ static QStringList matchingCandidateSuffixes(const Core::MimeDatabase *mimeDatas case UnknownType: break; case HeaderFile: // Note that C/C++ headers are undistinguishable - return mimeDatase->findByType(QLatin1String(CppTools::Constants::C_SOURCE_MIMETYPE)).suffixes() + - mimeDatase->findByType(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)).suffixes(); + return mimeDatase->findByType(QLatin1String(CppTools::Constants::C_SOURCE_MIMETYPE)).suffixes() + + mimeDatase->findByType(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)).suffixes() + + mimeDatase->findByType(QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)).suffixes(); case C_SourceFile: return mimeDatase->findByType(QLatin1String(CppTools::Constants::C_HEADER_MIMETYPE)).suffixes(); case CPP_SourceFile: + case ObjectiveCPP_SourceFile: return mimeDatase->findByType(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE)).suffixes(); } return QStringList(); diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 52eb88e9164caa64e43137c32da799c05d7d53b1..6c61fe38e47df2ef8ab84143bc7d41ae6e7e7363 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -698,8 +698,10 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) } else if (m_submode == ReplaceSubMode) { m_submode = NoSubMode; } else if (m_submode == IndentSubMode) { + recordJump(); indentRegion(); m_submode = NoSubMode; + updateMiniBuffer(); } else if (m_submode == ShiftRightSubMode) { recordJump(); shiftRegionRight(1); @@ -908,7 +910,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, setAnchor(); moveDown(count() - 1); m_moveType = MoveLineWise; - setDotCommand("%1>>", count()); + setDotCommand("%1==", count()); finishMovement(); } else if (m_submode == ZSubMode) { //qDebug() << "Z_MODE " << cursorLineInDocument() << linesOnScreen(); @@ -2057,8 +2059,13 @@ void FakeVimHandler::Private::indentRegion(QChar typedChar) int endLine = lineForPosition(position()); if (beginLine > endLine) qSwap(beginLine, endLine); + int amount = 0; emit q->indentRegion(&amount, beginLine, endLine, typedChar); + + setPosition(firstPositionInLine(beginLine)); + moveToFirstNonBlankOnLine(); + setTargetColumn(); setDotCommand("%1==", endLine - beginLine + 1); } @@ -2072,8 +2079,6 @@ void FakeVimHandler::Private::shiftRegionRight(int repeat) QString indent(len, ' '); int firstPos = firstPositionInLine(beginLine); - //setPosition(firstPos); - for (int line = beginLine; line <= endLine; ++line) { setPosition(firstPositionInLine(line)); m_tc.insertText(indent); @@ -2081,6 +2086,7 @@ void FakeVimHandler::Private::shiftRegionRight(int repeat) setPosition(firstPos); moveToFirstNonBlankOnLine(); + setTargetColumn(); setDotCommand("%1>>", endLine - beginLine + 1); } @@ -2094,8 +2100,6 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat) int tab = config(ConfigTabStop).toInt(); int firstPos = firstPositionInLine(beginLine); - //setPosition(firstPos); - for (int line = beginLine; line <= endLine; ++line) { int pos = firstPositionInLine(line); setPosition(pos); @@ -2118,6 +2122,7 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat) setPosition(firstPos); moveToFirstNonBlankOnLine(); + setTargetColumn(); setDotCommand("%1<<", endLine - beginLine + 1); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 0d990a02e3478f09aa18cdc44f822600df9e85b5..459f8114acffba566e841da0c17031f4564e3da7 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -505,3 +505,18 @@ void Project::setDisplayNameFor(const QString &buildConfiguration, const QString } emit buildConfigurationDisplayNameChanged(buildConfiguration); } + +QByteArray Project::predefinedMacros(const QString &fileName) const +{ + return QByteArray(); +} + +QStringList Project::includePaths(const QString &fileName) const +{ + return QStringList(); +} + +QStringList Project::frameworkPaths(const QString &fileName) const +{ + return QStringList(); +} diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index b4be7fa0c1c4257dec55281cf0197f916c358448..e876db675574e6750bbf73cc4cd6e62b96a51783 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -136,6 +136,12 @@ public: enum FilesMode { AllFiles, ExcludeGeneratedFiles }; virtual QStringList files(FilesMode fileMode) const = 0; + // C++ specific + // TODO do a C++ project as a base ? + virtual QByteArray predefinedMacros(const QString &fileName) const; + virtual QStringList includePaths(const QString &fileName) const; + virtual QStringList frameworkPaths(const QString &fileName) const; + signals: void fileListChanged(); void activeBuildConfigurationChanged(); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 0f08672ebe19d4c644951f80392336d05b184b68..87a75f31bf3632fb2930afbbe176bb5e02d11024 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -46,7 +46,6 @@ #include <coreplugin/icore.h> #include <coreplugin/messagemanager.h> #include <coreplugin/coreconstants.h> -#include <cpptools/cppmodelmanagerinterface.h> #include <extensionsystem/pluginmanager.h> #include <projectexplorer/nodesvisitor.h> #include <projectexplorer/project.h> @@ -308,7 +307,7 @@ void Qt4Project::restoreSettingsImpl(PersistentSettingsReader &settingsReader) connect(m_nodesWatcher, SIGNAL(filesAdded()), this, SLOT(updateFileList())); connect(m_nodesWatcher, SIGNAL(filesRemoved()), this, SLOT(updateFileList())); connect(m_nodesWatcher, SIGNAL(proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *)), - this, SLOT(scheduleUpdateCodeModel())); + this, SLOT(scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFileNode *))); update(); @@ -398,9 +397,10 @@ void Qt4Project::addUiFiles() m_uiFilesToAdd.clear(); } -void Qt4Project::scheduleUpdateCodeModel() +void Qt4Project::scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFileNode *pro) { m_updateCodeModelTimer.start(); + m_proFilesForCodeModelUpdate.append(pro); } QString Qt4Project::makeCommand(const QString &buildConfiguration) const @@ -469,15 +469,11 @@ void Qt4Project::updateCodeModel() if (!modelmanager) return; - QStringList allIncludePaths; - QStringList allFrameworkPaths; - - const QHash<QString, QString> versionInfo = qtVersion(activeBuildConfiguration())->versionInfo(); - const QString newQtIncludePath = versionInfo.value(QLatin1String("QT_INSTALL_HEADERS")); - const QString newQtLibsPath = versionInfo.value(QLatin1String("QT_INSTALL_LIBS")); + QStringList predefinedIncludePaths; + QStringList predefinedFrameworkPaths; + QByteArray predefinedMacros; ToolChain *tc = toolChain(activeBuildConfiguration()); - QByteArray predefinedMacros; QList<HeaderPath> allHeaderPaths; if (tc) { predefinedMacros = tc->predefinedMacros(); @@ -491,17 +487,21 @@ void Qt4Project::updateCodeModel() } foreach (HeaderPath headerPath, allHeaderPaths) { if (headerPath.kind() == HeaderPath::FrameworkHeaderPath) - allFrameworkPaths.append(headerPath.path()); + predefinedFrameworkPaths.append(headerPath.path()); else - allIncludePaths.append(headerPath.path()); + predefinedIncludePaths.append(headerPath.path()); } - allIncludePaths.append(newQtIncludePath); + const QHash<QString, QString> versionInfo = qtVersion(activeBuildConfiguration())->versionInfo(); + const QString newQtIncludePath = versionInfo.value(QLatin1String("QT_INSTALL_HEADERS")); + const QString newQtLibsPath = versionInfo.value(QLatin1String("QT_INSTALL_LIBS")); + + predefinedIncludePaths.append(newQtIncludePath); QDir dir(newQtIncludePath); foreach (QFileInfo info, dir.entryInfoList(QDir::Dirs)) { if (! info.fileName().startsWith(QLatin1String("Qt"))) continue; - allIncludePaths.append(info.absoluteFilePath()); + predefinedIncludePaths.append(info.absoluteFilePath()); } #ifdef Q_OS_MAC @@ -517,15 +517,26 @@ void Qt4Project::updateCodeModel() FindQt4ProFiles findQt4ProFiles; QList<Qt4ProFileNode *> proFiles = findQt4ProFiles(rootProjectNode()); - QByteArray definedMacros; + QByteArray definedMacros = predefinedMacros; + QStringList allIncludePaths = predefinedIncludePaths; + QStringList allFrameworkPaths = predefinedFrameworkPaths; foreach (Qt4ProFileNode *pro, proFiles) { + Internal::CodeModelInfo info; + info.defines = predefinedMacros; + info.includes = predefinedIncludePaths; + info.frameworkPaths = predefinedFrameworkPaths; + + // Add custom defines foreach (const QString def, pro->variableValue(DefinesVar)) { definedMacros += "#define "; + info.defines += "#define "; const int index = def.indexOf(QLatin1Char('=')); if (index == -1) { definedMacros += def.toLatin1(); definedMacros += " 1\n"; + info.defines += def.toLatin1(); + info.defines += " 1\n"; } else { const QString name = def.left(index); const QString value = def.mid(index + 1); @@ -533,21 +544,48 @@ void Qt4Project::updateCodeModel() definedMacros += ' '; definedMacros += value.toLocal8Bit(); definedMacros += '\n'; + info.defines += name.toLatin1(); + info.defines += ' '; + info.defines += value.toLocal8Bit(); + info.defines += '\n'; } } const QStringList proIncludePaths = pro->variableValue(IncludePathVar); foreach (QString includePath, proIncludePaths) { - if (allIncludePaths.contains(includePath)) - continue; + if (!allIncludePaths.contains(includePath)) + allIncludePaths.append(includePath); + if (!info.includes.contains(includePath)) + info.includes.append(includePath); + } - allIncludePaths.append(includePath); + // Add mkspec directory + info.includes.append(qtVersion(activeBuildConfiguration())->mkspecPath()); + + info.frameworkPaths = allFrameworkPaths; + + foreach (FileNode *fileNode, pro->fileNodes()) { + const QString path = fileNode->path(); + const int type = fileNode->fileType(); + if (type == HeaderType || type == SourceType) { + m_codeModelInfo.insert(path, info); + } } } // Add mkspec directory allIncludePaths.append(qtVersion(activeBuildConfiguration())->mkspecPath()); + // Dump things out + // This is debugging output... +// qDebug()<<"CodeModel stuff:"; +// QMap<QString, CodeModelInfo>::const_iterator it, end; +// end = m_codeModelInfo.constEnd(); +// for(it = m_codeModelInfo.constBegin(); it != end; ++it) { +// qDebug()<<"File: "<<it.key()<<"\nIncludes:"<<it.value().includes<<"\nDefines"<<it.value().defines<<"\n"; +// } +// qDebug()<<"----------------------------"; + QStringList files; files += m_projectFiles->files[HeaderType]; files += m_projectFiles->generatedFiles[HeaderType]; @@ -562,6 +600,13 @@ void Qt4Project::updateCodeModel() pinfo.sourceFiles == files) { modelmanager->updateProjectInfo(pinfo); } else { + if (pinfo.defines != predefinedMacros || + pinfo.includePaths != allIncludePaths || + pinfo.frameworkPaths != allFrameworkPaths) { + pinfo.sourceFiles.append(QLatin1String("<configuration>")); + } + + pinfo.defines = predefinedMacros; // pinfo->defines += definedMacros; // ### FIXME: me pinfo.includePaths = allIncludePaths; @@ -571,8 +616,41 @@ void Qt4Project::updateCodeModel() modelmanager->updateProjectInfo(pinfo); modelmanager->updateSourceFiles(pinfo.sourceFiles); } + + // TODO use this information + // These are the pro files that were actually changed + // if the list is empty we are at the initial stage + // TODO check that this also works if pro files get added + // and removed + m_proFilesForCodeModelUpdate.clear(); +} + +QByteArray Qt4Project::predefinedMacros(const QString &fileName) const +{ + QMap<QString, CodeModelInfo>::const_iterator it = m_codeModelInfo.constFind(fileName); + if (it == m_codeModelInfo.constEnd()) + return QByteArray(); + else + return (*it).defines; } +QStringList Qt4Project::includePaths(const QString &fileName) const +{ + QMap<QString, CodeModelInfo>::const_iterator it = m_codeModelInfo.constFind(fileName); + if (it == m_codeModelInfo.constEnd()) + return QStringList(); + else + return (*it).includes; +} + +QStringList Qt4Project::frameworkPaths(const QString &fileName) const +{ + QMap<QString, CodeModelInfo>::const_iterator it = m_codeModelInfo.constFind(fileName); + if (it == m_codeModelInfo.constEnd()) + return QStringList(); + else + return (*it).frameworkPaths; +} ///*! // Updates complete project diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index fc1feac3f2970440d932110603ba7aee837bf5ef..7a8ae6d67a2b05744e18758bfa7f5c7b991c2f55 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -39,6 +39,7 @@ #include <projectexplorer/applicationrunconfiguration.h> #include <projectexplorer/projectnodes.h> #include <projectexplorer/toolchain.h> +#include <cpptools/cppmodelmanagerinterface.h> #include <QtCore/QObject> #include <QtCore/QList> @@ -69,6 +70,14 @@ namespace Internal { class Qt4RunConfiguration; class GCCPreprocessor; struct Qt4ProjectFiles; + + class CodeModelInfo + { + public: + QByteArray defines; + QStringList includes; + QStringList frameworkPaths; + }; } class QMakeStep; @@ -185,10 +194,14 @@ public: // the Qt4RunConfigurations will update as soon as asked void invalidateCachedTargetInformation(); + virtual QByteArray predefinedMacros(const QString &fileName) const; + virtual QStringList includePaths(const QString &fileName) const; + virtual QStringList frameworkPaths(const QString &fileName) const; + public slots: void update(); void proFileParseError(const QString &errorMessage); - void scheduleUpdateCodeModel(); + void scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFileNode *); private slots: void updateCodeModel(); @@ -242,6 +255,9 @@ private: QTimer m_updateCodeModelTimer; QTimer m_addUiFilesTimer; QStringList m_uiFilesToAdd; + QList<Qt4ProjectManager::Internal::Qt4ProFileNode *> m_proFilesForCodeModelUpdate; + + QMap<QString, Internal::CodeModelInfo> m_codeModelInfo; friend class Qt4ProjectFile; }; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index a76543e725373af7a8732332be7b89e51c93583b..e7a19f59311c1e2d5a3136901c861692461e98df 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -332,6 +332,13 @@ void Qt4RunConfiguration::updateTarget() //qDebug()<<"updateTarget"; Qt4Project *pro = static_cast<Qt4Project *>(project()); Qt4PriFileNode * priFileNode = static_cast<Qt4Project *>(project())->rootProjectNode()->findProFileFor(m_proFilePath); + if (!priFileNode) { + m_workingDir = QString::null; + m_executable = QString::null; + m_cachedTargetInformationValid = true; + emit effectiveTargetInformationChanged(); + return; + } ProFileReader *reader = priFileNode->createProFileReader(); reader->setCumulative(false); reader->setQtVersion(pro->qtVersion(pro->activeBuildConfiguration())); diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 35376bac9921c868b4db801a1d26e2be2d5eb4b4..12adff1b83337e3d4f53083c0550f9e30f76f0fd 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -76,10 +76,10 @@ uint qHash(const double & f) } -class Foo +class Foo { public: - Foo(int i=0) + Foo(int i = 0) : a(i), b(2) { int s = 1;