OSDN Git Service

callgrind: use CallgrindWidgetHandler as CallgrindToolPrivate
authorhjk <qtc-committer@nokia.com>
Fri, 20 May 2011 14:16:42 +0000 (16:16 +0200)
committerhjk <hjk@codereview.qt.nokia.com>
Mon, 23 May 2011 12:57:16 +0000 (14:57 +0200)
Change-Id: I3f425be8df4f9659d4b778b89eed9e031d88bbe8
Reviewed-on: http://codereview.qt.nokia.com/55
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: hjk
src/plugins/callgrind/callgrindwidgethandler.cpp [deleted file]
src/plugins/callgrind/callgrindwidgethandler.h [deleted file]

diff --git a/src/plugins/callgrind/callgrindwidgethandler.cpp b/src/plugins/callgrind/callgrindwidgethandler.cpp
deleted file mode 100644 (file)
index a79573e..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** 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.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#include "callgrindwidgethandler.h"
-
-#include "callgrindcostview.h"
-#include "callgrindengine.h"
-#include "callgrindvisualisation.h"
-
-#include <analyzerbase/analyzerconstants.h>
-#include <coreplugin/coreconstants.h>
-#include <coreplugin/icore.h>
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/command.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/projectexplorer.h>
-
-#include <valgrind/callgrind/callgrinddatamodel.h>
-#include <valgrind/callgrind/callgrindparsedata.h>
-#include <valgrind/callgrind/callgrindfunction.h>
-#include <valgrind/callgrind/callgrindcostitem.h>
-#include <valgrind/callgrind/callgrindstackbrowser.h>
-#include <valgrind/callgrind/callgrindcallmodel.h>
-#include <valgrind/callgrind/callgrindproxymodel.h>
-#include <valgrind/callgrind/callgrindfunctioncall.h>
-
-#include <utils/fancymainwindow.h>
-#include <utils/styledbar.h>
-#include <utils/qtcassert.h>
-
-#include <QtCore/QTimer>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QCheckBox>
-#include <QtGui/QLineEdit>
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QToolButton>
-#include <QtGui/QAction>
-#include <QtGui/QLineEdit>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QMenu>
-#include <QtGui/QActionGroup>
-#include <QtGui/QSortFilterProxyModel>
-#include <QtGui/QComboBox>
-
-using namespace Valgrind::Callgrind;
-
-namespace Callgrind {
-namespace Internal {
-
-CallgrindWidgetHandler::CallgrindWidgetHandler(QWidget *parent)
-    : QObject(parent)
-    , m_dataModel(new DataModel(this))
-    , m_dataProxy(new DataProxyModel(this))
-    , m_stackBrowser(new StackBrowser(this))
-    , m_callersModel(new CallModel(this))
-    , m_calleesModel(new CallModel(this))
-    , m_flatView(0)
-    , m_callersView(0)
-    , m_calleesView(0)
-    , m_visualisation(0)
-    , m_goToOverview(0)
-    , m_goBack(0)
-    , m_searchFilter(0)
-    , m_filterProjectCosts(0)
-    , m_costAbsolute(0)
-    , m_costRelative(0)
-    , m_costRelativeToParent(0)
-    , m_eventCombo(0)
-    , m_updateTimer(new QTimer(this))
-{
-    connect(m_stackBrowser, SIGNAL(currentChanged()), this, SLOT(stackBrowserChanged()));
-
-    m_updateTimer->setInterval(200);
-    m_updateTimer->setSingleShot(true);
-    connect(m_updateTimer, SIGNAL(timeout()), SLOT(updateFilterString()));
-
-    m_dataProxy->setSourceModel(m_dataModel);
-    m_dataProxy->setDynamicSortFilter(true);
-    m_dataProxy->setSortCaseSensitivity(Qt::CaseInsensitive);
-    m_dataProxy->setFilterKeyColumn(DataModel::NameColumn);
-    m_dataProxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
-}
-
-void CallgrindWidgetHandler::ensureDockWidgets()
-{
-    if (m_visualisation)
-        return;
-    QWidget *parenWidget  = qobject_cast<QWidget *>(parent());
-    m_visualisation = new Visualisation(parenWidget);
-    m_visualisation->setFrameStyle(QFrame::NoFrame);
-    m_visualisation->setObjectName("Valgrind.CallgrindWidgetHandler.Visualisation");
-    m_visualisation->setModel(m_dataModel);
-    connect(m_visualisation, SIGNAL(functionActivated(const Valgrind::Callgrind::Function*)),
-            this, SLOT(visualisationFunctionSelected(const Valgrind::Callgrind::Function*)));
-
-    m_callersView = new CostView(parenWidget);
-    m_callersView->sortByColumn(CallModel::CostColumn);
-    m_callersView->setObjectName("Valgrind.CallgrindWidgetHandler.CallersView");
-    m_callersView->setFrameStyle(QFrame::NoFrame);
-    // enable sorting
-    QSortFilterProxyModel *callerProxy = new QSortFilterProxyModel(m_callersModel);
-    callerProxy->setSourceModel(m_callersModel);
-    m_callersView->setModel(callerProxy);
-    m_callersView->hideColumn(CallModel::CalleeColumn);
-    connect(m_callersView, SIGNAL(activated(QModelIndex)),
-            this, SLOT(callerFunctionSelected(QModelIndex)));
-
-    m_calleesView = new CostView(parenWidget);
-    m_calleesView->sortByColumn(CallModel::CostColumn);
-    m_calleesView->setObjectName("Valgrind.CallgrindWidgetHandler.CalleesView");
-    m_calleesView->setFrameStyle(QFrame::NoFrame);
-    // enable sorting
-    QSortFilterProxyModel *calleeProxy = new QSortFilterProxyModel(m_calleesModel);
-    calleeProxy->setSourceModel(m_calleesModel);
-    m_calleesView->setModel(calleeProxy);
-    m_calleesView->hideColumn(CallModel::CallerColumn);
-    connect(m_calleesView, SIGNAL(activated(QModelIndex)),
-            this, SLOT(calleeFunctionSelected(QModelIndex)));
-
-    m_flatView = new CostView(parenWidget);
-    m_flatView->sortByColumn(DataModel::SelfCostColumn);
-    m_flatView->setFrameStyle(QFrame::NoFrame);
-    m_flatView->setAttribute(Qt::WA_MacShowFocusRect, false);
-    m_flatView->setModel(m_dataProxy);
-    m_flatView->setObjectName("Valgrind.CallgrindWidgetHandler.FlatView");
-    connect(m_flatView, SIGNAL(activated(QModelIndex)),
-            this, SLOT(dataFunctionSelected(QModelIndex)));
-
-    updateCostFormat();
-}
-
-Visualisation *CallgrindWidgetHandler::visualisation()
-{
-    ensureDockWidgets();
-    return m_visualisation;
-}
-
-CostView *CallgrindWidgetHandler::callersView()
-{
-    ensureDockWidgets();
-    return m_callersView;
-}
-
-CostView *CallgrindWidgetHandler::calleesView()
-{
-    ensureDockWidgets();
-    return m_calleesView;
-}
-
-void CallgrindWidgetHandler::populateActions(QLayout *layout)
-{
-    // navigation
-    {
-    QToolButton *button;
-    QAction *action;
-
-    // go back
-    action = new QAction(this);
-    action->setDisabled(true);
-    action->setIcon(QIcon::fromTheme("go-previous"));
-    action->setText(tr("Back"));
-    action->setToolTip(tr("Go back one step in history. This will select the previously selected item."));
-    m_goBack = action;
-    connect(action, SIGNAL(triggered(bool)), m_stackBrowser, SLOT(goBack()));
-    button = new QToolButton;
-    button->setDefaultAction(action);
-    layout->addWidget(button);
-
-    // overview
-    action = new QAction(this);
-    action->setDisabled(true);
-    action->setIcon(QIcon::fromTheme("go-up"));
-    action->setText(tr("All Functions"));
-    action->setToolTip(tr("Show the overview of all function calls."));
-    m_goToOverview = action;
-    connect(action, SIGNAL(triggered(bool)), this, SLOT(slotGoToOverview()));
-    button = new QToolButton;
-    button->setDefaultAction(action);
-    layout->addWidget(button);
-    }
-
-    layout->addWidget(new Utils::StyledSeparator);
-
-    // event selection
-    {
-    m_eventCombo = new QComboBox;
-    m_eventCombo->setToolTip(tr("Selects which events from the profiling data are shown and visualized."));
-    connect(m_eventCombo, SIGNAL(currentIndexChanged(int)),
-            this, SLOT(setCostEvent(int)));
-    updateEventCombo();
-    layout->addWidget(m_eventCombo);
-    }
-
-    // cost formatting
-    {
-    QMenu *menu = new QMenu(layout->parentWidget());
-    QActionGroup *group = new QActionGroup(this);
-
-    // show costs as absolute numbers
-    m_costAbsolute = new QAction(tr("Absolute Costs"), this);
-    ///FIXME: icon
-    m_costAbsolute->setToolTip(tr("Show costs as absolute numbers."));
-    m_costAbsolute->setCheckable(true);
-    m_costAbsolute->setChecked(true);
-    connect(m_costAbsolute, SIGNAL(toggled(bool)),
-            this, SLOT(updateCostFormat()));
-    group->addAction(m_costAbsolute);
-    menu->addAction(m_costAbsolute);
-
-    // show costs in percentages
-    m_costRelative = new QAction(tr("Relative Costs"), this);
-    ///FIXME: icon (percentage sign?)
-    m_costRelative->setToolTip(tr("Show costs relative to total inclusive cost."));
-    m_costRelative->setCheckable(true);
-    connect(m_costRelative, SIGNAL(toggled(bool)),
-            this, SLOT(updateCostFormat()));
-    group->addAction(m_costRelative);
-    menu->addAction(m_costRelative);
-
-    // show costs relative to parent
-    m_costRelativeToParent = new QAction(tr("Relative Costs to Parent"), this);
-    ///FIXME: icon
-    m_costRelativeToParent->setToolTip(tr("Show costs relative to parent functions inclusive cost."));
-    m_costRelativeToParent->setCheckable(true);
-    connect(m_costRelativeToParent, SIGNAL(toggled(bool)),
-            this, SLOT(updateCostFormat()));
-    group->addAction(m_costRelativeToParent);
-    menu->addAction(m_costRelativeToParent);
-
-    QToolButton *button = new QToolButton;
-    button->setMenu(menu);
-    button->setPopupMode(QToolButton::InstantPopup);
-    button->setText(tr("Cost Format"));
-    layout->addWidget(button);
-    }
-
-    {
-    // cycle detection
-    m_cycleDetection = new QAction(tr("Cycle Detection"), this);
-    ///FIXME: icon
-    m_cycleDetection->setToolTip(tr("Enable cycle detection to properly handle recursive or circular function calls."));
-    connect(m_cycleDetection, SIGNAL(toggled(bool)),
-            m_dataModel, SLOT(enableCycleDetection(bool)));
-    connect(m_cycleDetection, SIGNAL(toggled(bool)),
-            this, SIGNAL(cycleDetectionEnabled(bool)));
-    m_cycleDetection->setCheckable(true);
-    QToolButton *button = new QToolButton;
-    button->setDefaultAction(m_cycleDetection);
-    layout->addWidget(button);
-    }
-
-    // filtering
-    {
-    QToolButton *button;
-    m_filterProjectCosts = new QAction(tr("Show Project Costs Only"), this);
-    m_filterProjectCosts->setIcon(QIcon(Core::Constants::ICON_FILTER));
-    m_filterProjectCosts->setToolTip(tr("Show only profiling info that originated from this project source."));
-    m_filterProjectCosts->setCheckable(true);
-    connect(m_filterProjectCosts, SIGNAL(toggled(bool)),
-            this, SLOT( handleFilterProjectCosts()));
-    button = new QToolButton;
-    button->setDefaultAction(m_filterProjectCosts);
-    layout->addWidget(button);
-
-    // filter
-    ///FIXME: find workaround for http://bugreports.qt.nokia.com/browse/QTCREATORBUG-3247
-    QLineEdit *filter = new QLineEdit;
-    filter->setPlaceholderText(tr("Filter..."));
-    connect(filter, SIGNAL(textChanged(QString)),
-            m_updateTimer, SLOT(start()));
-    layout->addWidget(filter);
-    m_searchFilter = filter;
-    }
-
-    layout->addWidget(new Utils::StyledSeparator);
-}
-
-CallgrindWidgetHandler::~CallgrindWidgetHandler()
-{
-    doClear(false);
-}
-
-void CallgrindWidgetHandler::slotGoToOverview()
-{
-    selectFunction(0);
-}
-
-void CallgrindWidgetHandler::slotClear()
-{
-    doClear(true);
-}
-
-void CallgrindWidgetHandler::doClear(bool clearParseData)
-{
-    if (clearParseData) // Crashed when done from destructor.
-        setParseData(0);
-
-    // clear filters
-    if (m_filterProjectCosts)
-        m_filterProjectCosts->setChecked(false);
-    m_dataProxy->setFilterBaseDir(QString());
-    if (m_searchFilter)
-        m_searchFilter->setText(QString());
-    m_dataProxy->setFilterFixedString(QString());
-}
-
-void CallgrindWidgetHandler::slotRequestDump()
-{
-    setBusy(true);
-
-    m_visualisation->setText(tr("Populating..."));
-}
-
-void CallgrindWidgetHandler::setBusy(bool busy)
-{
-    QCursor cursor(busy ? Qt::BusyCursor : Qt::ArrowCursor);
-    QList<QWidget *> widgets;
-    widgets << m_flatView << m_calleesView << m_callersView << m_visualisation;
-    foreach(QWidget *widget, widgets) {
-        widget->setCursor(cursor);
-    }
-}
-
-void CallgrindWidgetHandler::selectFunction(const Function *func)
-{
-    if (!func) {
-        m_goToOverview->setDisabled(true);
-
-        m_flatView->clearSelection();
-        m_visualisation->setFunction(0);
-        m_callersModel->clear();
-        m_calleesModel->clear();
-
-        emit functionSelected(0);
-        return;
-    }
-
-    m_goToOverview->setEnabled(true);
-
-    const QModelIndex index = m_dataModel->indexForObject(func);
-    const QModelIndex proxyIndex = m_dataProxy->mapFromSource(index);
-    m_flatView->selectionModel()->clearSelection();
-    m_flatView->selectionModel()->setCurrentIndex(proxyIndex,
-                                                  QItemSelectionModel::ClearAndSelect |
-                                                  QItemSelectionModel::Rows);
-    m_flatView->scrollTo(proxyIndex);
-
-    m_callersModel->setCalls(func->incomingCalls(), func);
-    m_calleesModel->setCalls(func->outgoingCalls(), func);
-    m_visualisation->setFunction(func);
-
-    const Function *item = m_stackBrowser->current();
-    if (!item || item != func)
-        m_stackBrowser->select(func);
-
-    emit functionSelected(func);
-}
-
-void CallgrindWidgetHandler::stackBrowserChanged()
-{
-    const Function *item = m_stackBrowser->current();
-    m_goBack->setEnabled(item != 0);
-    selectFunction(item);
-}
-
-void CallgrindWidgetHandler::updateFilterString()
-{
-    m_dataProxy->setFilterFixedString(m_searchFilter->text());
-}
-
-void CallgrindWidgetHandler::setCostFormat(CostDelegate::CostFormat format)
-{
-    switch (format) {
-        case CostDelegate::FormatAbsolute:
-            m_costAbsolute->setChecked(true);
-            break;
-        case CostDelegate::FormatRelative:
-            m_costRelative->setChecked(true);
-            break;
-        case CostDelegate::FormatRelativeToParent:
-            m_costRelativeToParent->setChecked(true);
-            break;
-    }
-}
-
-void CallgrindWidgetHandler::setCostEvent(int index)
-{
-    // prevent assert in model, don't try to set event to -1
-    // happens when we clear the eventcombo
-    if (index == -1)
-        index = 0;
-
-    m_dataModel->setCostEvent(index);
-    m_calleesModel->setCostEvent(index);
-    m_callersModel->setCostEvent(index);
-}
-
-void CallgrindWidgetHandler::enableCycleDetection(bool enabled)
-{
-    m_cycleDetection->setChecked(enabled);
-}
-
-// Following functions can be called with actions=0 or widgets=0
-// depending on initialization sequence (whether callgrind was current).
-Callgrind::Internal::CostDelegate::CostFormat
-    CallgrindWidgetHandler::costFormat() const
-{
-    if (m_costRelativeToParent && m_costRelativeToParent->isChecked())
-        return CostDelegate::FormatRelativeToParent;
-    if (m_costRelative && m_costRelative->isChecked())
-        return CostDelegate::FormatRelative;
-    return CostDelegate::FormatAbsolute;
-}
-
-void CallgrindWidgetHandler::updateCostFormat()
-{
-    const CostDelegate::CostFormat format = costFormat();
-    if (m_flatView)
-        m_flatView->setCostFormat(format);
-    if (m_calleesView) {
-        m_calleesView->setCostFormat(format);
-        m_callersView->setCostFormat(format);
-    }
-    emit costFormatChanged(format);
-}
-
-void CallgrindWidgetHandler::handleFilterProjectCosts()
-{
-    ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance();
-    ProjectExplorer::Project *pro = pe->currentProject();
-    QTC_ASSERT(pro, return)
-
-    if (m_filterProjectCosts->isChecked()) {
-        const QString projectDir = pro->projectDirectory();
-        m_dataProxy->setFilterBaseDir(projectDir);
-    }
-    else {
-        m_dataProxy->setFilterBaseDir(QString());
-    }
-}
-
-void CallgrindWidgetHandler::dataFunctionSelected(const QModelIndex &index)
-{
-    const Function *func = index.data(DataModel::FunctionRole).value<const Function *>();
-    QTC_ASSERT(func, return);
-
-    selectFunction(func);
-}
-
-void CallgrindWidgetHandler::calleeFunctionSelected(const QModelIndex &index)
-{
-    const FunctionCall *call = index.data(CallModel::FunctionCallRole).value<const FunctionCall *>();
-    QTC_ASSERT(call, return);
-
-    selectFunction(call->callee());
-}
-
-void CallgrindWidgetHandler::callerFunctionSelected(const QModelIndex &index)
-{
-    const FunctionCall *call = index.data(CallModel::FunctionCallRole).value<const FunctionCall *>();
-    QTC_ASSERT(call, return);
-
-    selectFunction(call->caller());
-}
-
-void CallgrindWidgetHandler::visualisationFunctionSelected(const Function *function)
-{
-    if (function && function == m_visualisation->function())
-        // up-navigation when the initial function was activated
-        m_stackBrowser->goBack();
-    else
-        selectFunction(function);
-}
-
-void CallgrindWidgetHandler::setParseData(ParseData *data)
-{
-    // we have new parse data, invalidate filters in the proxy model
-    m_visualisation->setFunction(0);
-
-    // invalidate parse data in the data model
-    delete m_dataModel->parseData();
-
-    if (data && data->events().isEmpty()) {
-        // might happen if the user cancelled the profile run
-        // callgrind then sometimes produces empty callgrind.out.PID files
-        delete data;
-        data = 0;
-    }
-    m_dataModel->setParseData(data);
-    m_calleesModel->setParseData(data);
-    m_callersModel->setParseData(data);
-
-    updateEventCombo();
-
-    // clear history for new data
-    m_stackBrowser->clear();
-
-    // unset busy state
-    setBusy(false);
-}
-
-void CallgrindWidgetHandler::updateEventCombo()
-{
-    QTC_ASSERT(m_eventCombo, return)
-
-    m_eventCombo->clear();
-
-    const ParseData *data = m_dataModel->parseData();
-    if (!data || data->events().isEmpty()) {
-        m_eventCombo->hide();
-        return;
-    }
-
-    m_eventCombo->show();
-    foreach (const QString &event, data->events())
-        m_eventCombo->addItem(ParseData::prettyStringForEvent(event));
-}
-
-} // namespace Internal
-} // namespace Callgrind
diff --git a/src/plugins/callgrind/callgrindwidgethandler.h b/src/plugins/callgrind/callgrindwidgethandler.h
deleted file mode 100644 (file)
index eaca981..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** 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.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#ifndef CALLGRINDWIDGETHANDLER_H
-#define CALLGRINDWIDGETHANDLER_H
-
-#include <QtCore/QObject>
-
-#include "callgrindcostdelegate.h"
-
-QT_BEGIN_NAMESPACE
-class QToolButton;
-class QAction;
-class QLineEdit;
-class QModelIndex;
-class QSortFilterProxyModel;
-class QTimer;
-class QComboBox;
-QT_END_NAMESPACE
-
-namespace Valgrind {
-namespace Callgrind {
-class DataModel;
-class DataProxyModel;
-class Function;
-class ParseData;
-class StackBrowser;
-class CallModel;
-}
-}
-
-namespace Callgrind {
-namespace Internal {
-
-class Visualisation;
-class CostView;
-
-/**
- * Encapsulates all widgets required for a fully operational callgrind UI.
- * Prevents code duplication between QtC code and unit tests.
- */
-class CallgrindWidgetHandler : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit CallgrindWidgetHandler(QWidget *parent);
-    virtual ~CallgrindWidgetHandler();
-
-    void populateActions(QLayout *layout);
-
-    void setParseData(Valgrind::Callgrind::ParseData *data);
-
-    Valgrind::Callgrind::DataModel *dataModel() const { return m_dataModel; }
-    Valgrind::Callgrind::DataProxyModel *proxyModel() const { return m_dataProxy; }
-    CostView *flatView() const { return m_flatView; }
-    Visualisation *visualisation();
-
-    Valgrind::Callgrind::CallModel *callersModel() const { return m_callersModel; }
-    CostView *callersView();
-    Valgrind::Callgrind::CallModel *calleesModel() const { return m_calleesModel; }
-    CostView *calleesView();
-
-    Callgrind::Internal::CostDelegate::CostFormat costFormat() const;
-
-signals:
-    void functionSelected(const Valgrind::Callgrind::Function *);
-
-    void costFormatChanged(Callgrind::Internal::CostDelegate::CostFormat format);
-    void cycleDetectionEnabled(bool enabled);
-
-public slots:
-    void slotClear();
-    void slotRequestDump();
-
-    void selectFunction(const Valgrind::Callgrind::Function *);
-    void setCostFormat(Callgrind::Internal::CostDelegate::CostFormat format);
-    void enableCycleDetection(bool enabled);
-    void setCostEvent(int index);
-
-private slots:
-    void updateFilterString();
-    void updateCostFormat();
-
-    void handleFilterProjectCosts();
-
-    void slotGoToOverview();
-    void stackBrowserChanged();
-
-    /// If \param busy is true, all widgets get a busy cursor when hovered
-    void setBusy(bool busy);
-
-    void dataFunctionSelected(const QModelIndex &index);
-    void calleeFunctionSelected(const QModelIndex &index);
-    void callerFunctionSelected(const QModelIndex &index);
-    void visualisationFunctionSelected(const Valgrind::Callgrind::Function *function);
-
-private:
-    void ensureDockWidgets();
-    void doClear(bool clearParseData);
-    void updateEventCombo();
-
-    Valgrind::Callgrind::DataModel *m_dataModel;
-    Valgrind::Callgrind::DataProxyModel *m_dataProxy;
-    Valgrind::Callgrind::StackBrowser *m_stackBrowser;
-
-    Valgrind::Callgrind::CallModel *m_callersModel;
-    Valgrind::Callgrind::CallModel *m_calleesModel;
-
-    // callgrind widgets
-    CostView *m_flatView;
-    CostView *m_callersView;
-    CostView *m_calleesView;
-    Visualisation *m_visualisation;
-
-    // navigation
-    QAction *m_goToOverview;
-    QAction *m_goBack;
-    QLineEdit *m_searchFilter;
-
-    // cost formatting
-    QAction *m_filterProjectCosts;
-    QAction *m_costAbsolute;
-    QAction *m_costRelative;
-    QAction *m_costRelativeToParent;
-    QAction *m_cycleDetection;
-    QComboBox *m_eventCombo;
-
-    QTimer *m_updateTimer;
-};
-
-} // namespace Internal
-} // namespace Callgrind
-
-#endif // CALLGRINDWIDGETHANDLER_H