diff options
| author | hjk <hjk@theqtcompany.com> | 2016-07-18 12:36:31 +0200 |
|---|---|---|
| committer | hjk <hjk@qt.io> | 2016-07-18 11:17:53 +0000 |
| commit | 2d79bdc29c242a04aad3519858ad64712be4de8e (patch) | |
| tree | a910e2daeaeca5ce943f33d569f2e88b8a477ad4 /src/plugins/debugger/sourcefileshandler.cpp | |
| parent | 84f1466b01e9098ae983c1f53e376e977921dad9 (diff) | |
| download | qt-creator-2d79bdc29c242a04aad3519858ad64712be4de8e.tar.gz | |
Debugger: Remove some uses of semi-global currentEngine()
Make use of recent TreeModel improvements in various
tool views, push more operations into the engine-
owned data models, specifically context menu creation.
Change-Id: I479c97102b9fb81611c6461c6df1cec59295179a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/debugger/sourcefileshandler.cpp')
| -rw-r--r-- | src/plugins/debugger/sourcefileshandler.cpp | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp index 8fbb749d94..49bba486ee 100644 --- a/src/plugins/debugger/sourcefileshandler.cpp +++ b/src/plugins/debugger/sourcefileshandler.cpp @@ -25,19 +25,29 @@ #include "sourcefileshandler.h" +#include "debuggeractions.h" +#include "debuggercore.h" +#include "debuggerengine.h" + +#include <utils/basetreeview.h> +#include <utils/savedaction.h> + #include <QDebug> #include <QFileInfo> - +#include <QMenu> #include <QSortFilterProxyModel> +using namespace Utils; + namespace Debugger { namespace Internal { -SourceFilesHandler::SourceFilesHandler() +SourceFilesHandler::SourceFilesHandler(DebuggerEngine *engine) + : m_engine(engine) { - setObjectName(QLatin1String("SourceFilesModel")); + setObjectName("SourceFilesModel"); QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this); - proxy->setObjectName(QLatin1String("SourceFilesProxyModel")); + proxy->setObjectName("SourceFilesProxyModel"); proxy->setSourceModel(this); m_proxyModel = proxy; } @@ -97,6 +107,46 @@ QVariant SourceFilesHandler::data(const QModelIndex &index, int role) const return QVariant(); } +bool SourceFilesHandler::setData(const QModelIndex &idx, const QVariant &data, int role) +{ + if (role == BaseTreeView::ItemActivatedRole) { + m_engine->gotoLocation(idx.data().toString()); + return true; + } + + if (role == BaseTreeView::ItemViewEventRole) { + ItemViewEvent ev = data.value<ItemViewEvent>(); + if (ev.type() == QEvent::ContextMenu) { + auto menu = new QMenu; + QModelIndex index = idx.sibling(idx.row(), 0); + QString name = index.data().toString(); + + auto addAction = [menu](const QString &display, bool on, const std::function<void()> &onTriggered) { + QAction *act = menu->addAction(display); + act->setEnabled(on); + QObject::connect(act, &QAction::triggered, onTriggered); + return act; + }; + + addAction(tr("Reload Data"), m_engine->debuggerActionsEnabled(), + [this] { m_engine->reloadSourceFiles(); }); + + if (name.isEmpty()) + addAction(tr("Open File"), false, {}); + else + addAction(tr("Open File \"%1\"").arg(name), true, + [this, name] { m_engine->gotoLocation(name); }); + + menu->addSeparator(); + menu->addAction(action(SettingsDialog)); + menu->popup(ev.globalPos()); + return true; + } + } + + return false; +} + void SourceFilesHandler::setSourceFiles(const QMap<QString, QString> &sourceFiles) { beginResetModel(); |
