From 25c19eb1d18d93c1fc443393e575924e598bfe21 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Fri, 18 Jun 2010 11:09:00 +0200
Subject: [PATCH] Add show in editor task handler

 * Add a taskhandler used to show the file/line a task is referring
   to in the editor.

 * This is not yet used!
---
 .../projectexplorer/projectexplorer.cpp       |  3 +
 .../projectexplorer/projectexplorer.pro       |  2 +
 .../projectexplorerconstants.h                |  2 +
 .../showineditortaskhandler.cpp               | 65 +++++++++++++++++++
 .../projectexplorer/showineditortaskhandler.h | 53 +++++++++++++++
 5 files changed, 125 insertions(+)
 create mode 100644 src/plugins/projectexplorer/showineditortaskhandler.cpp
 create mode 100644 src/plugins/projectexplorer/showineditortaskhandler.h

diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 40a1246e9b2..f2bf78cd7af 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -33,6 +33,7 @@
 #include "projectexplorersettings.h"
 #include "target.h"
 #include "targetsettingspanel.h"
+#include "showineditortaskhandler.h"
 #include "applicationrunconfiguration.h"
 #include "allprojectsfilter.h"
 #include "allprojectsfind.h"
@@ -279,6 +280,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     addAutoReleasedObject(d->m_projectsMode);
     d->m_proWindow->layout()->addWidget(new Core::FindToolBarPlaceHolder(d->m_proWindow));
 
+    addAutoReleasedObject(new ShowInEditorTaskHandler);
+
     d->m_buildManager = new BuildManager(this);
     connect(d->m_buildManager, SIGNAL(buildStateChanged(ProjectExplorer::Project *)),
             this, SLOT(buildStateChanged(ProjectExplorer::Project *)));
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index 2a6bc5fe228..3964d145642 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -18,6 +18,7 @@ HEADERS += projectexplorer.h \
     targetsettingspanel.h \
     task.h \
     itaskhandler.h \
+    showineditortaskhandler.h \
     taskwindow.h \
     outputwindow.h \
     persistentsettings.h \
@@ -96,6 +97,7 @@ SOURCES += projectexplorer.cpp \
     projectconfiguration.cpp \
     gnumakeparser.cpp \
     task.cpp \
+    showineditortaskhandler.cpp \
     taskwindow.cpp \
     outputwindow.cpp \
     persistentsettings.cpp \
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 390ba26fc4f..ac4eeedda72 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -76,6 +76,8 @@ const char * const OPENTERMIANLHERE     = "ProjectExplorer.OpenTerminalHere";
 const char * const REMOVEFILE           = "ProjectExplorer.RemoveFile";
 const char * const RENAMEFILE           = "ProjectExplorer.RenameFile";
 
+const char * const SHOW_TASK_IN_EDITOR  = "ProjectExplorer.ShowTaskInEditor";
+
 // Run modes
 const char * const RUNMODE              = "ProjectExplorer.RunMode";
 const char * const DEBUGMODE            = "ProjectExplorer.DebugMode";
diff --git a/src/plugins/projectexplorer/showineditortaskhandler.cpp b/src/plugins/projectexplorer/showineditortaskhandler.cpp
new file mode 100644
index 00000000000..53c3af1aaa6
--- /dev/null
+++ b/src/plugins/projectexplorer/showineditortaskhandler.cpp
@@ -0,0 +1,65 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** 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
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "showineditortaskhandler.h"
+
+#include "projectexplorerconstants.h"
+#include "task.h"
+
+#include <coreplugin/editormanager/editormanager.h>
+#include <texteditor/basetexteditor.h>
+
+#include <QtGui/QAction>
+#include <QtCore/QFileInfo>
+
+using namespace ProjectExplorer::Internal;
+
+ShowInEditorTaskHandler::ShowInEditorTaskHandler() :
+    ITaskHandler(QLatin1String(Constants::SHOW_TASK_IN_EDITOR))
+{ }
+
+bool ShowInEditorTaskHandler::canHandle(const ProjectExplorer::Task &task)
+{
+    QFileInfo fi(task.file);
+    return fi.exists() && fi.isFile() && fi.isReadable();
+}
+
+void ShowInEditorTaskHandler::handle(const ProjectExplorer::Task &task)
+{
+    QFileInfo fi(task.file);
+    TextEditor::BaseTextEditor::openEditorAt(fi.canonicalFilePath(), task.line);
+    Core::EditorManager::instance()->ensureEditorManagerVisible();
+}
+
+QAction *ShowInEditorTaskHandler::createAction(QObject *parent)
+{
+    QAction *showAction = new QAction(tr("&Show in editor"), parent);
+    showAction->setToolTip(tr("Show task location in an editor"));
+    return showAction;
+}
diff --git a/src/plugins/projectexplorer/showineditortaskhandler.h b/src/plugins/projectexplorer/showineditortaskhandler.h
new file mode 100644
index 00000000000..a440f2f7514
--- /dev/null
+++ b/src/plugins/projectexplorer/showineditortaskhandler.h
@@ -0,0 +1,53 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** 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
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef PROJECTEXPLORER_SHOWINEDITORTASKHANDLER_H
+#define PROJECTEXPLORER_SHOWINEDITORTASKHANDLER_H
+
+#include "projectexplorer_export.h"
+
+#include "itaskhandler.h"
+
+namespace ProjectExplorer {
+namespace Internal {
+
+class PROJECTEXPLORER_EXPORT ShowInEditorTaskHandler : public ITaskHandler
+{
+public:
+    ShowInEditorTaskHandler();
+
+    bool canHandle(const Task &);
+    void handle(const Task &task);
+    QAction *createAction(QObject *parent = 0);
+};
+
+} // namespace Internal
+} // namespace ProjectExplorer
+
+#endif // PROJECTEXPLORER_SHOWINEDITORTASKHANDLER_H
-- 
GitLab