Commit c35672ea authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

Debugger: Remove 'friend gdbengine' from stackhandler.

Preparing the introduction of tooltips for the new
CDB engine. Fix some breakpoint states in CDB.
parent 68266eae
......@@ -1096,9 +1096,10 @@ void CdbEngine::assignValueInDebugger(const WatchData *w, const QString &expr, c
v.toString();
}
// Update view
if (WatchData *fwd = watchHandler()->findItem(w->iname)) {
fwd->setValue(newValueObtained);
watchHandler()->insertData(*fwd);
if (const WatchData *fwd = watchHandler()->findItem(w->iname)) {
WatchData modified = *fwd;
modified.setValue(newValueObtained);
watchHandler()->insertData(modified);
watchHandler()->updateWatchers();
}
success = true;
......@@ -1319,6 +1320,7 @@ bool CdbEngine::attemptBreakpointSynchronizationI(QString *errorMessage)
}
break;
case BreakpointRemoveRequested:
handler->notifyBreakpointRemoveProceeding(id);
handler->notifyBreakpointRemoveOk(id);
break;
case BreakpointInserted:
......
......@@ -41,12 +41,14 @@
#include "debuggercore.h"
#include "registerhandler.h"
#include "debuggeragents.h"
#include "debuggertooltip.h"
#include "cdbparsehelpers.h"
#include "watchutils.h"
#include "gdb/gdbmi.h"
#include "shared/cdbsymbolpathlisteditor.h"
#include <coreplugin/icore.h>
#include <texteditor/itexteditor.h>
#include <utils/synchronousprocess.h>
#include <utils/winutils.h>
......@@ -328,9 +330,26 @@ void CdbEngine::syncOperateByInstruction(bool operateByInstruction)
void CdbEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::ITextEditor *editor, int cursorPos)
{
if (debug)
qDebug() << Q_FUNC_INFO;
// Need a stopped debuggee and a cpp file in a valid frame
if (state() != InferiorStopOk || !isCppEditor(editor) || stackHandler()->currentIndex() < 0)
return;
// Determine expression and function
int line;
int column;
QString function;
const QString exp = cppExpressionAt(editor, cursorPos, &line, &column, &function);
// Are we in the current stack frame
if (function.isEmpty() || exp.isEmpty() || function != stackHandler()->currentFrame().function)
return;
// No numerical or any other expressions [yet]
if (!(exp.at(0).isLetter() || exp.at(0) == QLatin1Char('_')))
return;
const QByteArray iname = QByteArray("local.") + exp.toAscii();
const QModelIndex index = watchHandler()->itemIndex(iname);
Q_UNUSED(index)
Q_UNUSED(mousePos)
Q_UNUSED(editor)
Q_UNUSED(cursorPos)
}
void CdbEngine::setupEngine()
......@@ -1678,6 +1697,7 @@ void CdbEngine::attemptBreakpointSynchronization()
}
break;
case BreakpointRemoveRequested:
handler->notifyBreakpointRemoveProceeding(id);
handler->notifyBreakpointRemoveOk(id);
break;
case BreakpointInserted:
......
......@@ -3268,22 +3268,20 @@ bool GdbEngine::supportsThreads() const
bool GdbEngine::showToolTip()
{
QByteArray iname = tooltipIName(m_toolTipExpression);
const QByteArray iname = tooltipIName(m_toolTipExpression);
if (!debuggerCore()->boolSetting(UseToolTipsInMainEditor)) {
watchHandler()->removeData(iname);
return true;
}
WatchModel *model = watchHandler()->model(TooltipsWatch);
WatchItem *item = model->findItem(iname, model->rootItem());
if (!item) {
const QModelIndex index = watchHandler()->itemIndex(iname);
if (!index.isValid()) {
watchHandler()->removeData(iname);
hideDebuggerToolTip();
return false;
}
QModelIndex index = model->watchIndex(item);
showDebuggerToolTip(m_toolTipPos, model, index, m_toolTipExpression);
showDebuggerToolTip(m_toolTipPos, watchHandler()->model(TooltipsWatch), index, m_toolTipExpression);
return true;
}
......
......@@ -1590,13 +1590,29 @@ WatchModel *WatchHandler::modelForIName(const QByteArray &iname) const
return 0;
}
WatchData *WatchHandler::findItem(const QByteArray &iname) const
const WatchData *WatchHandler::watchData(WatchType type, const QModelIndex &index) const
{
if (index.isValid())
if (const WatchModel *m = model(type))
return m->watchItem(index);
return 0;
}
const WatchData *WatchHandler::findItem(const QByteArray &iname) const
{
const WatchModel *model = modelForIName(iname);
QTC_ASSERT(model, return 0);
return model->findItem(iname, model->m_root);
}
QModelIndex WatchHandler::itemIndex(const QByteArray &iname) const
{
if (const WatchModel *model = modelForIName(iname))
if (WatchItem *item = model->findItem(iname, model->m_root))
return model->watchIndex(item);
return QModelIndex();
}
void WatchHandler::setFormat(const QByteArray &type, int format)
{
if (format == -1)
......
......@@ -87,7 +87,6 @@ private:
void fetchMore(const QModelIndex &parent);
friend class WatchHandler;
friend class GdbEngine;
WatchItem *watchItem(const QModelIndex &) const;
QModelIndex watchIndex(const WatchItem *needle) const;
......@@ -151,7 +150,10 @@ public:
void insertData(const WatchData &data);
void insertBulkData(const QList<WatchData> &data);
void removeData(const QByteArray &iname);
WatchData *findItem(const QByteArray &iname) const;
const WatchData *watchData(WatchType type, const QModelIndex &) const;
const WatchData *findItem(const QByteArray &iname) const;
QModelIndex itemIndex(const QByteArray &iname) const;
static void loadSessionData();
static void saveSessionData();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment