summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/sourcefileshandler.cpp
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2016-07-18 12:36:31 +0200
committerhjk <hjk@qt.io>2016-07-18 11:17:53 +0000
commit2d79bdc29c242a04aad3519858ad64712be4de8e (patch)
treea910e2daeaeca5ce943f33d569f2e88b8a477ad4 /src/plugins/debugger/sourcefileshandler.cpp
parent84f1466b01e9098ae983c1f53e376e977921dad9 (diff)
downloadqt-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.cpp58
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();