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;
}
break;
case BreakpointRemoveRequested:
+ handler->notifyBreakpointRemoveProceeding(id);
handler->notifyBreakpointRemoveOk(id);
break;
case BreakpointInserted:
#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>
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()
}
break;
case BreakpointRemoveRequested:
+ handler->notifyBreakpointRemoveProceeding(id);
handler->notifyBreakpointRemoveOk(id);
break;
case BreakpointInserted:
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;
}
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)
void fetchMore(const QModelIndex &parent);
friend class WatchHandler;
- friend class GdbEngine;
WatchItem *watchItem(const QModelIndex &) const;
QModelIndex watchIndex(const WatchItem *needle) const;
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();