diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 6d836388f025220554a703b084b117d52e885ae0..070aec39d62c08420691d34f7ff57953d51c268c 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -40,6 +40,7 @@ #include "cmakestep.h" #include "makestep.h" +#include <projectexplorer/projectexplorerconstants.h> #include <cpptools/cppmodelmanagerinterface.h> #include <extensionsystem/pluginmanager.h> #include <utils/qtcassert.h> @@ -103,7 +104,7 @@ void CMakeProject::parseCMakeLists() } else { // TODO hmm? } - if (newToolChain == m_toolChain) { + if (ProjectExplorer::ToolChain::equals(newToolChain, m_toolChain)) { delete newToolChain; newToolChain = 0; } else { @@ -158,6 +159,21 @@ void CMakeProject::parseCMakeLists() } } +QString CMakeProject::buildParser(const QString &buildConfiguration) const +{ + if (!m_toolChain) + return QString::null; + if (m_toolChain->type() == ProjectExplorer::ToolChain::GCC + || m_toolChain->type() == ProjectExplorer::ToolChain::LinuxICC + || m_toolChain->type() == ProjectExplorer::ToolChain::MinGW) { + return ProjectExplorer::Constants::BUILD_PARSER_GCC; + } else if (m_toolChain->type() == ProjectExplorer::ToolChain::MSVC + || m_toolChain->type() == ProjectExplorer::ToolChain::WINCE) { + return ProjectExplorer::Constants::BUILD_PARSER_MSVC; + } + return QString::null; +} + QStringList CMakeProject::targets() const { QStringList results; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 3494441489ef9be686fd14b1a25af23fcd97fb00..4c9b2e1d529c3241f2d2238cf694f3441ed217c7 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -105,6 +105,7 @@ public: MakeStep *makeStep() const; CMakeStep *cmakeStep() const; QStringList targets() const; + QString buildParser(const QString &buildConfiguration) const; private: void parseCMakeLists(); diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 60f5d04903ebd5398b481d91ef70f5231678b335..44476f6fbe7b2860ae64c70d12bd264dd14e7d40 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -34,6 +34,7 @@ #include "makestep.h" #include "cmakeprojectconstants.h" #include "cmakeproject.h" +#include <extensionsystem/pluginmanager.h> #include <utils/qtcassert.h> #include <QtGui/QFormLayout> @@ -42,6 +43,11 @@ #include <QtGui/QLineEdit> #include <QtGui/QListWidget> +namespace { +bool debug = false; +} + + using namespace CMakeProjectManager; using namespace CMakeProjectManager::Internal; @@ -52,10 +58,42 @@ MakeStep::MakeStep(CMakeProject *pro) MakeStep::~MakeStep() { + delete m_buildParser; + m_buildParser = 0; } bool MakeStep::init(const QString &buildConfiguration) { + // TODO figure out the correct build parser + delete m_buildParser; + m_buildParser = 0; + QString buildParser = m_pro->buildParser(buildConfiguration); + QList<ProjectExplorer::IBuildParserFactory *> buildParserFactories = + ExtensionSystem::PluginManager::instance()->getObjects<ProjectExplorer::IBuildParserFactory>(); + + foreach (ProjectExplorer::IBuildParserFactory * factory, buildParserFactories) + if (factory->canCreate(buildParser)) { + m_buildParser = factory->create(buildParser); + break; + } + if (m_buildParser) { + connect(m_buildParser, SIGNAL(addToOutputWindow(const QString &)), + this, SIGNAL(addToOutputWindow(const QString &)), + Qt::DirectConnection); + connect(m_buildParser, SIGNAL(addToTaskWindow(const QString &, int, int, const QString &)), + this, SLOT(slotAddToTaskWindow(const QString &, int, int, const QString &)), + Qt::DirectConnection); + connect(m_buildParser, SIGNAL(enterDirectory(const QString &)), + this, SLOT(addDirectory(const QString &)), + Qt::DirectConnection); + connect(m_buildParser, SIGNAL(leaveDirectory(const QString &)), + this, SLOT(removeDirectory(const QString &)), + Qt::DirectConnection); + } + + m_openDirectories.clear(); + addDirectory(m_pro->buildDirectory(buildConfiguration)); + setEnabled(buildConfiguration, true); setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration)); setCommand(buildConfiguration, "make"); // TODO give full path here? @@ -89,6 +127,79 @@ bool MakeStep::immutable() const return true; } +void MakeStep::stdOut(const QString &line) +{ + if (m_buildParser) + m_buildParser->stdOutput(line); + AbstractProcessStep::stdOut(line); +} + +void MakeStep::stdError(const QString &line) +{ + if (m_buildParser) + m_buildParser->stdError(line); + AbstractProcessStep::stdError(line); +} + +void MakeStep::slotAddToTaskWindow(const QString & fn, int type, int linenumber, const QString & description) +{ + QString filePath = fn; + if (!filePath.isEmpty() && !QDir::isAbsolutePath(filePath)) { + // We have no save way to decide which file in which subfolder + // is meant. Therefore we apply following heuristics: + // 1. Search for unique file in directories currently indicated as open by GNU make + // (Enter directory xxx, Leave directory xxx...) + current directory + // 3. Check if file is unique in whole project + // 4. Otherwise give up + + filePath = filePath.trimmed(); + + QList<QFileInfo> possibleFiles; + foreach (const QString &dir, m_openDirectories) { + QFileInfo candidate(dir + QLatin1Char('/') + filePath); + if (debug) + qDebug() << "Checking path " << candidate.filePath(); + if (candidate.exists() + && !possibleFiles.contains(candidate)) { + if (debug) + qDebug() << candidate.filePath() << "exists!"; + possibleFiles << candidate; + } + } + if (possibleFiles.count() == 0) { + if (debug) + qDebug() << "No success. Trying all files in project ..."; + QString fileName = QFileInfo(filePath).fileName(); + foreach (const QString &file, project()->files(ProjectExplorer::Project::AllFiles)) { + QFileInfo candidate(file); + if (candidate.fileName() == fileName) { + if (debug) + qDebug() << "Found " << file; + possibleFiles << candidate; + } + } + } + if (possibleFiles.count() == 1) + filePath = possibleFiles.first().filePath(); + else + qWarning() << "Could not find absolute location of file " << filePath; + } + emit addToTaskWindow(filePath, type, linenumber, description); +} + +void MakeStep::addDirectory(const QString &dir) +{ + if (!m_openDirectories.contains(dir)) + m_openDirectories.insert(dir); +} + +void MakeStep::removeDirectory(const QString &dir) +{ + if (m_openDirectories.contains(dir)) + m_openDirectories.remove(dir); +} + + CMakeProject *MakeStep::project() const { return m_pro; @@ -154,7 +265,6 @@ void MakeBuildStepConfigWidget::init(const QString &buildConfiguration) } // and connect again connect(m_targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*))); - } // diff --git a/src/plugins/cmakeprojectmanager/makestep.h b/src/plugins/cmakeprojectmanager/makestep.h index fbfc007dbe44362154e5ee06e05a41b6115254cc..012fb837bc61fd8f6516374c6510c7cf6376acbb 100644 --- a/src/plugins/cmakeprojectmanager/makestep.h +++ b/src/plugins/cmakeprojectmanager/makestep.h @@ -64,8 +64,17 @@ public: CMakeProject *project() const; bool buildsTarget(const QString &buildConfiguration, const QString &target) const; void setBuildTarget(const QString &buildConfiguration, const QString &target, bool on); +private slots: + void slotAddToTaskWindow(const QString & fn, int type, int linenumber, const QString & description); + void addDirectory(const QString &dir); + void removeDirectory(const QString &dir); +protected: + virtual void stdOut(const QString &line); + virtual void stdError(const QString &line); private: CMakeProject *m_pro; + ProjectExplorer::BuildParserInterface *m_buildParser; + QSet<QString> m_openDirectories; }; class MakeBuildStepConfigWidget :public ProjectExplorer::BuildStepConfigWidget diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 97380484c3e688850331a7eaed002a9738041b28..dfc52d29d4025ad4bc665eb2a7188620ae0e47b9 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -475,10 +475,12 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto setCurrentView(0); if (m_d->m_currentEditor == editor) return; + if (m_d->m_currentEditor) + updateCurrentPositionInNavigationHistory(); m_d->m_currentEditor = editor; if (editor) { - bool addToHistory = (!ignoreNavigationHistory && editor != currentEditor()); + bool addToHistory = (!ignoreNavigationHistory); if (addToHistory) addCurrentPositionToNavigationHistory(true); @@ -678,8 +680,6 @@ bool EditorManager::closeEditors(const QList<IEditor*> editorsToClose, bool askA QList<EditorView*> currentViews; EditorView *currentView = 0; - if (currentEditor()) - addCurrentPositionToNavigationHistory(true); // remove the editors foreach (IEditor *editor, acceptedEditors) { @@ -812,11 +812,7 @@ void EditorManager::activateEditor(Core::Internal::EditorView *view, Core::IEdit return; } - bool hasCurrent = (view->currentEditor() != 0); - editor = placeEditor(view, editor); - if (!(flags & NoActivate) || !hasCurrent) - view->setCurrentEditor(editor); if (!(flags & NoActivate)) { setCurrentEditor(editor, (flags & IgnoreNavigationHistory)); @@ -1349,6 +1345,7 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress) return; if (!editor->file()) return; + QString fileName = editor->file()->fileName(); QByteArray state = editor->saveState(); // cut existing @@ -1383,8 +1380,18 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress) updateActions(); } +void EditorManager::updateCurrentPositionInNavigationHistory() +{ + if (!m_d->m_currentEditor + || m_d->currentNavigationHistoryPosition < 0 + || m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->editor != m_d->m_currentEditor) + return; + m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->state = m_d->m_currentEditor->saveState(); +} + void EditorManager::goBackInNavigationHistory() { + updateCurrentPositionInNavigationHistory(); while (m_d->currentNavigationHistoryPosition > 0) { --m_d->currentNavigationHistoryPosition; EditorManagerPrivate::EditLocation *location = m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition); @@ -1408,6 +1415,7 @@ void EditorManager::goBackInNavigationHistory() void EditorManager::goForwardInNavigationHistory() { + updateCurrentPositionInNavigationHistory(); if (m_d->currentNavigationHistoryPosition >= m_d->m_navigationHistory.size()-1) return; ++m_d->currentNavigationHistoryPosition; diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 2d02512b2dfb3326bf294d3333d5cddd9ff4ccc9..25a05adc24588fc41d0264f5ef98de4bac76e619 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -229,6 +229,8 @@ private: void emptyView(Core::Internal::EditorView *view); IEditor *pickUnusedEditor() const; + void updateCurrentPositionInNavigationHistory(); + static EditorManager *m_instance; EditorManagerPrivate *m_d; diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 98224d9f82d3f0b7045dc706973a0bb2fe29c8a3..31d72247d6ed71eccdb45fd120491bb3d42d9af4 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -329,9 +329,11 @@ EditorView::~EditorView() void EditorView::addEditor(IEditor *editor) { - if (m_container->indexOf(editor->widget()) != -1) + if (m_editors.contains(editor)) return; + m_editors.append(editor); + m_container->addWidget(editor->widget()); m_widgetEditorMap.insert(editor->widget(), editor); @@ -348,7 +350,7 @@ void EditorView::addEditor(IEditor *editor) bool EditorView::hasEditor(IEditor *editor) const { - return (m_container->indexOf(editor->widget()) != -1); + return m_editors.contains(editor); } void EditorView::closeView() @@ -360,26 +362,30 @@ void EditorView::closeView() void EditorView::removeEditor(IEditor *editor) { QTC_ASSERT(editor, return); + if (!m_editors.contains(editor)) + return; + const int index = m_container->indexOf(editor->widget()); + QTC_ASSERT((index != -1), return); bool wasCurrent = (index == m_container->currentIndex()); - if (index != -1) { - m_container->removeWidget(editor->widget()); - m_widgetEditorMap.remove(editor->widget()); - editor->widget()->setParent(0); - disconnect(editor, SIGNAL(changed()), this, SLOT(updateEditorStatus())); - QToolBar *toolBar = editor->toolBar(); - if (toolBar != 0) { - if (m_activeToolBar == toolBar) { - m_activeToolBar = m_defaultToolBar; - m_activeToolBar->setVisible(true); - } - m_toolBar->layout()->removeWidget(toolBar); - toolBar->setVisible(false); - toolBar->setParent(0); + m_editors.removeAll(editor); + + m_container->removeWidget(editor->widget()); + m_widgetEditorMap.remove(editor->widget()); + editor->widget()->setParent(0); + disconnect(editor, SIGNAL(changed()), this, SLOT(updateEditorStatus())); + QToolBar *toolBar = editor->toolBar(); + if (toolBar != 0) { + if (m_activeToolBar == toolBar) { + m_activeToolBar = m_defaultToolBar; + m_activeToolBar->setVisible(true); } + m_toolBar->layout()->removeWidget(toolBar); + toolBar->setVisible(false); + toolBar->setParent(0); } - if (wasCurrent) - setCurrentEditor(currentEditor()); + if (wasCurrent && m_editors.count()) + setCurrentEditor(m_editors.last()); } IEditor *EditorView::currentEditor() const @@ -394,6 +400,8 @@ void EditorView::setCurrentEditor(IEditor *editor) if (!editor || m_container->count() <= 0 || m_container->indexOf(editor->widget()) == -1) return; + m_editors.removeAll(editor); + m_editors.append(editor); const int idx = m_container->indexOf(editor->widget()); QTC_ASSERT(idx >= 0, return); diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index 7387d1c85f93072356c08ddd9d2b467ac436dcaa..589592ab279d9701b8e0f2d3ca590cdb9bcc2976 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -144,6 +144,7 @@ private: QToolButton *m_infoWidgetButton; IEditor *m_editorForInfoWidget; QSortFilterProxyModel m_proxyModel; + QList<IEditor *>m_editors; QMap<QWidget *, IEditor *> m_widgetEditorMap; }; diff --git a/src/plugins/git/gitconstants.h b/src/plugins/git/gitconstants.h index b539046ffb5228a5637199b6fed2dccfac6c0272..438d0f25b9a4440356f38cf2a691f8f29b7dfb54 100644 --- a/src/plugins/git/gitconstants.h +++ b/src/plugins/git/gitconstants.h @@ -38,9 +38,13 @@ namespace Git { namespace Constants { const char * const GIT_COMMAND_LOG_EDITOR_KIND = "Git Command Log Editor"; +const char * const C_GIT_COMMAND_LOG_EDITOR = "Git Command Log Editor"; const char * const GIT_LOG_EDITOR_KIND = "Git File Log Editor"; +const char * const C_GIT_LOG_EDITOR = "Git File Log Editor"; const char * const GIT_BLAME_EDITOR_KIND = "Git Annotation Editor"; +const char * const C_GIT_BLAME_EDITOR = "Git Annotation Editor"; const char * const GIT_DIFF_EDITOR_KIND = "Git Diff Editor"; +const char * const C_GIT_DIFF_EDITOR = "Git Diff Editor"; const char * const C_GITSUBMITEDITOR = "Git Submit Editor"; const char * const GITSUBMITEDITOR_KIND = "Git Submit Editor"; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 11823909585901a621faa645e81e33634af047b6..72069cef4ddb1e048f8b79f387956e2a66b6d932 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -73,22 +73,22 @@ static const VCSBase::VCSBaseEditorParameters editorParameters[] = { { VCSBase::RegularCommandOutput, Git::Constants::GIT_COMMAND_LOG_EDITOR_KIND, - Core::Constants::C_GLOBAL, + Git::Constants::C_GIT_COMMAND_LOG_EDITOR, "application/vnd.nokia.text.scs_git_commandlog", "gitlog"}, { VCSBase::LogOutput, Git::Constants::GIT_LOG_EDITOR_KIND, - Core::Constants::C_GLOBAL, + Git::Constants::C_GIT_LOG_EDITOR, "application/vnd.nokia.text.scs_git_filelog", "gitfilelog"}, { VCSBase::AnnotateOutput, Git::Constants::GIT_BLAME_EDITOR_KIND, - Core::Constants::C_GLOBAL, + Git::Constants::C_GIT_BLAME_EDITOR, "application/vnd.nokia.text.scs_git_annotation", "gitsannotate"}, { VCSBase::DiffOutput, Git::Constants::GIT_DIFF_EDITOR_KIND, - Core::Constants::C_GLOBAL, + Git::Constants::C_GIT_DIFF_EDITOR, "text/x-patch","diff"} }; diff --git a/src/plugins/qt4projectmanager/buildparserfactory.cpp b/src/plugins/projectexplorer/buildparserfactory.cpp similarity index 95% rename from src/plugins/qt4projectmanager/buildparserfactory.cpp rename to src/plugins/projectexplorer/buildparserfactory.cpp index 9b52fafb23be7c833addd046bd9309b9a1175882..2cad67e2145ec98f48f1e716d026a6122dd8a245 100644 --- a/src/plugins/qt4projectmanager/buildparserfactory.cpp +++ b/src/plugins/projectexplorer/buildparserfactory.cpp @@ -33,11 +33,11 @@ #include "buildparserfactory.h" -#include "qt4projectmanagerconstants.h" +#include "projectexplorerconstants.h" #include "gccparser.h" #include "msvcparser.h" -using namespace Qt4ProjectManager::Internal; +using namespace ProjectExplorer::Internal; GccParserFactory::~GccParserFactory() { diff --git a/src/plugins/qt4projectmanager/buildparserfactory.h b/src/plugins/projectexplorer/buildparserfactory.h similarity index 94% rename from src/plugins/qt4projectmanager/buildparserfactory.h rename to src/plugins/projectexplorer/buildparserfactory.h index a52c33f719323800d01e77cc7a47d694ca220e75..98690d250764fdf76bd81f4dc75893ab8cc4bb00 100644 --- a/src/plugins/qt4projectmanager/buildparserfactory.h +++ b/src/plugins/projectexplorer/buildparserfactory.h @@ -36,14 +36,14 @@ #include <projectexplorer/buildparserinterface.h> -namespace Qt4ProjectManager { +namespace ProjectExplorer { namespace Internal { class GccParserFactory : public ProjectExplorer::IBuildParserFactory { Q_OBJECT public: - GccParserFactory() {}; + GccParserFactory() {} virtual ~GccParserFactory(); virtual bool canCreate(const QString & name) const; virtual ProjectExplorer::BuildParserInterface * create(const QString & name) const; @@ -53,13 +53,13 @@ class MsvcParserFactory : public ProjectExplorer::IBuildParserFactory { Q_OBJECT public: - MsvcParserFactory() {}; + MsvcParserFactory() {} virtual ~MsvcParserFactory(); virtual bool canCreate(const QString & name) const; virtual ProjectExplorer::BuildParserInterface * create(const QString & name) const; }; } // namespace Internal -} // namespace Qt4ProjectManager +} // namespace ProjectExplorer #endif // BUILDPARSERFACTORY_H diff --git a/src/plugins/qt4projectmanager/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp similarity index 96% rename from src/plugins/qt4projectmanager/gccparser.cpp rename to src/plugins/projectexplorer/gccparser.cpp index b71a3362f55f12a07c4b559c7d66868542b47caf..97a358a0e4ccbc6ac396602e0dee5c014cd360be 100644 --- a/src/plugins/qt4projectmanager/gccparser.cpp +++ b/src/plugins/projectexplorer/gccparser.cpp @@ -32,11 +32,11 @@ ***************************************************************************/ #include "gccparser.h" -#include "qt4projectmanagerconstants.h" +#include "projectexplorerconstants.h" #include <QDebug> -using namespace Qt4ProjectManager; +using namespace ProjectExplorer; GccParser::GccParser() { @@ -56,7 +56,7 @@ GccParser::GccParser() QString GccParser::name() const { - return QLatin1String(Qt4ProjectManager::Constants::BUILD_PARSER_GCC); + return QLatin1String(ProjectExplorer::Constants::BUILD_PARSER_GCC); } void GccParser::stdOutput(const QString & line) diff --git a/src/plugins/qt4projectmanager/gccparser.h b/src/plugins/projectexplorer/gccparser.h similarity index 95% rename from src/plugins/qt4projectmanager/gccparser.h rename to src/plugins/projectexplorer/gccparser.h index 80796f4be2a11b2348b9893e3b81064ef33a3dd7..47e4aae4e136bd29f7ad0114915648f24408683a 100644 --- a/src/plugins/qt4projectmanager/gccparser.h +++ b/src/plugins/projectexplorer/gccparser.h @@ -34,11 +34,11 @@ #ifndef GCCPARSER_H #define GCCPARSER_H -#include <projectexplorer/buildparserinterface.h> +#include "buildparserinterface.h" #include <QtCore/QRegExp> -namespace Qt4ProjectManager { +namespace ProjectExplorer { class GccParser : public ProjectExplorer::BuildParserInterface { diff --git a/src/plugins/qt4projectmanager/msvcparser.cpp b/src/plugins/projectexplorer/msvcparser.cpp similarity index 95% rename from src/plugins/qt4projectmanager/msvcparser.cpp rename to src/plugins/projectexplorer/msvcparser.cpp index d4a23264c79c2782f2f71bd3e4c19ffaee25cd87..b089638dd1a218c05e59864105ee1dddc5d86634 100644 --- a/src/plugins/qt4projectmanager/msvcparser.cpp +++ b/src/plugins/projectexplorer/msvcparser.cpp @@ -32,11 +32,11 @@ ***************************************************************************/ #include "msvcparser.h" -#include "qt4projectmanagerconstants.h" +#include "projectexplorerconstants.h" #include <QtCore/QStringList> -using namespace Qt4ProjectManager; +using namespace ProjectExplorer; MsvcParser::MsvcParser() { @@ -48,7 +48,7 @@ MsvcParser::MsvcParser() QString MsvcParser::name() const { - return QLatin1String(Qt4ProjectManager::Constants::BUILD_PARSER_MSVC); + return QLatin1String(ProjectExplorer::Constants::BUILD_PARSER_MSVC); } void MsvcParser::stdError(const QString & line) diff --git a/src/plugins/qt4projectmanager/msvcparser.h b/src/plugins/projectexplorer/msvcparser.h similarity index 95% rename from src/plugins/qt4projectmanager/msvcparser.h rename to src/plugins/projectexplorer/msvcparser.h index 06e0c3e6d612497e803c70ad15f6327642532d5e..29587cadb6772e0d77e8d45b74ccafb2e92a7e5a 100644 --- a/src/plugins/qt4projectmanager/msvcparser.h +++ b/src/plugins/projectexplorer/msvcparser.h @@ -34,11 +34,11 @@ #ifndef MSVCPARSER_H #define MSVCPARSER_H -#include <projectexplorer/buildparserinterface.h> +#include "buildparserinterface.h" #include <QtCore/QRegExp> -namespace Qt4ProjectManager { +namespace ProjectExplorer { class MsvcParser : public ProjectExplorer::BuildParserInterface { diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 2380c9b61d644090d9dcb767e8f36ff8ae40a079..c4a94042df5363d56f209239ac2c9e06537cbb0e 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -59,6 +59,7 @@ #include "scriptwrappers.h" #include "session.h" #include "sessiondialog.h" +#include "buildparserfactory.h" #include <coreplugin/basemode.h> #include <coreplugin/coreconstants.h> @@ -233,6 +234,10 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er addAutoReleasedObject(new ProjectFileWizardExtension); + // Build parsers + addAutoReleasedObject(new GccParserFactory); + addAutoReleasedObject(new MsvcParserFactory); + // context menus Core::ActionContainer *msessionContextMenu = am->createMenu(Constants::M_SESSIONCONTEXT); diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 2cfeecf47cfaac320856662220deeac7f576c998..1feeea4ebd87c6145a9c80537baa526ca7e075c9 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -54,7 +54,10 @@ HEADERS += projectexplorer.h \ projectmodels.h \ currentprojectfind.h \ toolchain.h \ - cesdkhandler.h + cesdkhandler.h\ + buildparserfactory.h\ + gccparser.h\ + msvcparser.h SOURCES += projectexplorer.cpp \ projectwindow.cpp \ buildmanager.cpp \ @@ -97,7 +100,10 @@ SOURCES += projectexplorer.cpp \ projectmodels.cpp \ currentprojectfind.cpp \ toolchain.cpp \ - cesdkhandler.cpp + cesdkhandler.cpp\ + buildparserfactory.cpp \ + gccparser.cpp\ + msvcparser.cpp FORMS += dependenciespanel.ui \ buildsettingspropertiespage.ui \ processstep.ui \ diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index e65ca54d099524d1f114829786d46f61f58a523b..183259be10d15d035a4b7e97dcc9642322b1961f 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -176,6 +176,11 @@ const char * const CPP_HEADER_MIMETYPE = "text/x-c++hdr"; const char * const FORM_MIMETYPE = "application/x-designer"; const char * const RESOURCE_MIMETYPE = "application/vnd.nokia.xml.qt.resource"; +// build parsers +const char * const BUILD_PARSER_MSVC = "BuildParser.MSVC"; +const char * const BUILD_PARSER_GCC = "BuildParser.Gcc"; + + } // namespace Constants } // namespace ProjectExplorer diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 8e6eb1542d62a6420d2c59e6fa73ef8651508f9b..46683252d0bd420ce149adde9c1427c0fdfbc883 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -36,6 +36,8 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" +#include <projectexplorer/projectexplorerconstants.h> + #include <extensionsystem/pluginmanager.h> #include <utils/qtcassert.h> @@ -71,9 +73,9 @@ ProjectExplorer::BuildParserInterface *MakeStep::buildParser(const QtVersion * c QString buildParser; ProjectExplorer::ToolChain::ToolChainType type = version->toolchainType(); if ( type == ProjectExplorer::ToolChain::MSVC || type == ProjectExplorer::ToolChain::WINCE) - buildParser = Constants::BUILD_PARSER_MSVC; + buildParser = ProjectExplorer::Constants::BUILD_PARSER_MSVC; else - buildParser = Constants::BUILD_PARSER_GCC; + buildParser = ProjectExplorer::Constants::BUILD_PARSER_GCC; QList<IBuildParserFactory *> buildParserFactories = ExtensionSystem::PluginManager::instance()->getObjects<ProjectExplorer::IBuildParserFactory>(); diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 5e18e1f9d483f888d5287af1446be66f8409777e..04ac5d8067be1459f3427055fda69ed6bf792b4c 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -28,9 +28,6 @@ HEADERS = qt4projectmanagerplugin.h \ makestep.h \ qmakestep.h \ qmakebuildstepfactory.h \ - gccparser.h \ - msvcparser.h \ - buildparserfactory.h \ deployhelper.h \ embeddedpropertiespage.h \ qt4runconfiguration.h \ @@ -63,9 +60,6 @@ SOURCES = qt4projectmanagerplugin.cpp \ makestep.cpp \ qmakestep.cpp \ qmakebuildstepfactory.cpp \ - gccparser.cpp \ - msvcparser.cpp \ - buildparserfactory.cpp \ deployhelper.cpp \ embeddedpropertiespage.cpp \ qt4runconfiguration.cpp \ diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h index 1ef68a68f5f89bb9301c982360fb983ed6e0ccb8..7261310ff5fbc3a9471cb190b120b29f1ae01968 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h @@ -79,10 +79,6 @@ const char * const GDBMACROSBUILDSTEP = "trolltech.qt4projectmanager.gdbmaros"; const char * const QT4RUNSTEP = "trolltech.qt4projectmanager.qt4runstep"; const char * const DEPLOYHELPERRUNSTEP = "trolltech.qt4projectmanager.deployhelperrunstep"; -// build parsers -const char * const BUILD_PARSER_MSVC = "BuildParser.MSVC"; -const char * const BUILD_PARSER_GCC = "BuildParser.Gcc"; - // views const char * const VIEW_DETAILED = "Qt4.View.Detailed"; const char * const VIEW_PROFILESONLY = "Qt4.View.ProjectHierarchy"; diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 0d90983aa88f389999da2c8a909283490364ec23..f1df421b6263c8b27971b3577c2115b8598c0e12 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -41,7 +41,6 @@ #include "qt4projectmanagerconstants.h" #include "qt4project.h" #include "qmakebuildstepfactory.h" -#include "buildparserfactory.h" #include "qtversionmanager.h" #include "embeddedpropertiespage.h" #include "qt4runconfiguration.h" @@ -133,9 +132,6 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * addAutoReleasedObject(new MakeBuildStepFactory); addAutoReleasedObject(new GdbMacrosBuildStepFactory); - addAutoReleasedObject(new GccParserFactory); - addAutoReleasedObject(new MsvcParserFactory); - m_qtVersionManager = new QtVersionManager; addObject(m_qtVersionManager); diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp index 18d57a6a7b2394156658cf4ace54d0e168d58e76..9d5a6b41907a35204003b715b9db1b7cfbdeed79 100644 --- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp +++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp @@ -70,13 +70,6 @@ void QtScriptEditorActionHandler::createActions() } -void QtScriptEditorActionHandler::updateActions(UpdateMode um) -{ - TextEditor::TextEditorActionHandler::updateActions(um); - if (m_runAction) - m_runAction->setEnabled(um != NoEditor); -} - void QtScriptEditorActionHandler::run() { typedef Core::ScriptManager::Stack Stack; diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h index c4940cfa160495f43be885fa7cc82832ef9e2626..ca1fa27af28f61875ad91377805e3be30456f415 100644 --- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h +++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h @@ -48,7 +48,6 @@ public: private: virtual void createActions(); - virtual void updateActions(UpdateMode um); private slots: void run(); diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 3ab8b75f9bb2093cdaa038b31685c9d3b47a1257..282c6dddf67f7d3b7612658534ca887dec3e8ceb 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -103,23 +103,23 @@ const char * const SubversionPlugin::DESCRIBE = "Subversion.Describe"; static const VCSBase::VCSBaseEditorParameters editorParameters[] = { { VCSBase::RegularCommandOutput, - "Subversion Command Log Editor", - Core::Constants::C_GLOBAL, + "Subversion Command Log Editor", // kind + "Subversion Command Log Editor", // context "application/vnd.nokia.text.scs_svn_commandlog", "scslog"}, { VCSBase::LogOutput, - "Subversion File Log Editor", - Core::Constants::C_GLOBAL, + "Subversion File Log Editor", // kind + "Subversion File Log Editor", // context "application/vnd.nokia.text.scs_svn_filelog", "scsfilelog"}, { VCSBase::AnnotateOutput, - "Subversion Annotation Editor", - Core::Constants::C_GLOBAL, + "Subversion Annotation Editor", // kind + "Subversion Annotation Editor", // context "application/vnd.nokia.text.scs_svn_annotation", "scsannotate"}, { VCSBase::DiffOutput, - "Subversion Diff Editor", - Core::Constants::C_GLOBAL, + "Subversion Diff Editor", // kind + "Subversion Diff Editor", // context "text/x-patch","diff"} }; diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 5ff46ef1353f94174ff13db0d390ba93fe070004..ace1aa548c73b5b62cc514855c8316bf5b472b4e 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -18,7 +18,7 @@ ** ** Alternatively, this file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging +** Foundation and appearing` in the file LICENSE.GPL included in the packaging ** of this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** @@ -91,8 +91,8 @@ TextEditorActionHandler::TextEditorActionHandler(const QString &context, m_contextId << Core::UniqueIDManager::instance()->uniqueIdentifier(context); - connect(Core::ICore::instance(), SIGNAL(contextAboutToChange(Core::IContext *)), - this, SLOT(updateCurrentEditor(Core::IContext *))); + connect(Core::ICore::instance()->editorManager(), SIGNAL(currentEditorChanged(Core::IEditor*)), + this, SLOT(updateCurrentEditor(Core::IEditor *))); } void TextEditorActionHandler::setupActions(BaseTextEditor *editor) @@ -282,49 +282,31 @@ QAction *TextEditorActionHandler::registerNewAction(const QString &id, TextEditorActionHandler::UpdateMode TextEditorActionHandler::updateMode() const { - if (!m_currentEditor) - return NoEditor; + Q_ASSERT(m_currentEditor != 0); return m_currentEditor->file()->isReadOnly() ? ReadOnlyMode : WriteMode; } void TextEditorActionHandler::updateActions() { + if (!m_currentEditor || !m_initialized) + return; updateActions(updateMode()); } void TextEditorActionHandler::updateActions(UpdateMode um) { - if (!m_initialized) - return; - m_pasteAction->setEnabled(um != NoEditor); - m_selectAllAction->setEnabled(um != NoEditor); - m_gotoAction->setEnabled(um != NoEditor); - m_selectEncodingAction->setEnabled(um != NoEditor); - m_printAction->setEnabled(um != NoEditor); - m_formatAction->setEnabled((m_optionalActions & Format) && um != NoEditor); - m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection) && um != NoEditor); - m_collapseAction->setEnabled(um != NoEditor); - m_expandAction->setEnabled(um != NoEditor); - m_unCollapseAllAction->setEnabled((m_optionalActions & UnCollapseAll) && um != NoEditor); - m_decreaseFontSizeAction->setEnabled(um != NoEditor); - m_increaseFontSizeAction->setEnabled(um != NoEditor); - m_gotoBlockStartAction->setEnabled(um != NoEditor); - m_gotoBlockStartWithSelectionAction->setEnabled(um != NoEditor); - m_gotoBlockEndAction->setEnabled(um != NoEditor); - m_gotoBlockEndWithSelectionAction->setEnabled(um != NoEditor); - m_selectBlockUpAction->setEnabled(um != NoEditor); - m_selectBlockDownAction->setEnabled(um != NoEditor); - m_moveLineUpAction->setEnabled(um != NoEditor); - m_moveLineDownAction->setEnabled(um != NoEditor); - - m_visualizeWhitespaceAction->setEnabled(um != NoEditor); - if (m_currentEditor) - m_visualizeWhitespaceAction->setChecked(m_currentEditor->displaySettings().m_visualizeWhitespace); - m_cleanWhitespaceAction->setEnabled(um != NoEditor); + m_pasteAction->setEnabled(um != ReadOnlyMode); + m_formatAction->setEnabled((m_optionalActions & Format) && um != ReadOnlyMode); + m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection) && um != ReadOnlyMode); + m_moveLineUpAction->setEnabled(um != ReadOnlyMode); + m_moveLineDownAction->setEnabled(um != ReadOnlyMode); + + m_formatAction->setEnabled((m_optionalActions & Format)); + m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection)); + m_unCollapseAllAction->setEnabled((m_optionalActions & UnCollapseAll)); + m_visualizeWhitespaceAction->setChecked(m_currentEditor->displaySettings().m_visualizeWhitespace); if (m_textWrappingAction) { - m_textWrappingAction->setEnabled(um != NoEditor); - if (m_currentEditor) - m_textWrappingAction->setChecked(m_currentEditor->displaySettings().m_textWrapping); + m_textWrappingAction->setChecked(m_currentEditor->displaySettings().m_textWrapping); } updateRedoAction(); @@ -346,11 +328,12 @@ void TextEditorActionHandler::updateUndoAction() void TextEditorActionHandler::updateCopyAction() { - const bool hasCopyableText = m_currentEditor && m_currentEditor->textCursor().hasSelection(); + const bool hasCopyableText = m_currentEditor && m_currentEditor->textCursor().hasSelection(); if (m_cutAction) m_cutAction->setEnabled(hasCopyableText && updateMode() == WriteMode); - if (m_copyAction) + if (m_copyAction) { m_copyAction->setEnabled(hasCopyableText); + } } void TextEditorActionHandler::gotoAction() @@ -422,37 +405,19 @@ FUNCTION(selectBlockDown) FUNCTION(moveLineUp) FUNCTION(moveLineDown) -void TextEditorActionHandler::updateCurrentEditor(Core::IContext *object) +void TextEditorActionHandler::updateCurrentEditor(Core::IEditor *editor) { - do { - if (!object) { - if (!m_currentEditor) - return; - - m_currentEditor = 0; - break; - } - BaseTextEditor *editor = qobject_cast<BaseTextEditor *>(object->widget()); - if (!editor) { - if (!m_currentEditor) - return; - - m_currentEditor = 0; - break; - } - - if (editor == m_currentEditor) - return; - - if (editor->actionHack() != this) { - m_currentEditor = 0; - break; - } - - m_currentEditor = editor; - - } while (false); - updateActions(); + m_currentEditor = 0; + + if (!editor) + return; + + BaseTextEditor *baseEditor = qobject_cast<BaseTextEditor *>(editor->widget()); + + if (baseEditor && baseEditor->actionHack() == this) { + m_currentEditor = baseEditor; + updateActions(); + } } diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index 172617e9a27e7b7fc55869b9a0f87262a05e62f4..28a97ad5eac57a7c305a422afcd1a0592f41b9e7 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -78,7 +78,7 @@ protected: QAction *registerNewAction(const QString &id, QObject *receiver, const char *slot, const QString &title = QString()); - enum UpdateMode { NoEditor , ReadOnlyMode, WriteMode }; + enum UpdateMode { ReadOnlyMode, WriteMode }; UpdateMode updateMode() const; virtual void createActions(); @@ -114,7 +114,7 @@ private slots: void selectBlockDown(); void moveLineUp(); void moveLineDown(); - void updateCurrentEditor(Core::IContext *object); + void updateCurrentEditor(Core::IEditor *editor); private: QAction *m_undoAction; diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp index d7f85a9449d2ce4389bd597ba5562a06f676b22a..d1d01b43a4554845ffa10d64f017134085adc527 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.cpp +++ b/src/plugins/vcsbase/basevcseditorfactory.cpp @@ -56,7 +56,7 @@ BaseVCSEditorFactoryPrivate::BaseVCSEditorFactoryPrivate(const VCSBaseEditorPara m_type(t), m_kind(QLatin1String(t->kind)), m_mimeTypes(QStringList(QLatin1String(t->mimeType))), - m_editorHandler(new TextEditor::TextEditorActionHandler(t->kind)) + m_editorHandler(new TextEditor::TextEditorActionHandler(t->context)) { }