1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include "XDebugEvalCmdHandler.h"
#include "XVariable.h"
#include <wx/xml/xml.h>
#include <xmlutils.h>
#include "xdebugevent.h"
#include <event_notifier.h>
XDebugEvalCmdHandler::XDebugEvalCmdHandler(const wxString& expression, int evalReason, XDebugManager* mgr, int transcationId)
: XDebugCommandHandler(mgr, transcationId)
, m_expression(expression)
, m_evalReason(evalReason)
{
}
XDebugEvalCmdHandler::~XDebugEvalCmdHandler()
{
}
void XDebugEvalCmdHandler::Process(const wxXmlNode* response)
{
// Search for the 'property' element
wxXmlNode* xmlProp = XmlUtils::FindFirstByTagName(response, "property");
if ( xmlProp ) {
XVariable var( xmlProp, m_evalReason == kEvalForEvalPane );
// Send an event
XDebugEvent event(wxEVT_XDEBUG_EVAL_EXPRESSION);
event.SetString( GetExpression() );
event.SetEvaluated( var.value );
event.SetEvalSucceeded(true);
event.SetEvalReason(m_evalReason);
EventNotifier::Get()->AddPendingEvent( event );
} else {
wxXmlNode* errorNode = XmlUtils::FindFirstByTagName(response, "error");
if ( errorNode ) {
wxXmlNode *message = XmlUtils::FindFirstByTagName(errorNode, "message");
if ( message ) {
XDebugEvent event(wxEVT_XDEBUG_EVAL_EXPRESSION);
event.SetString( GetExpression() );
event.SetEvalSucceeded(false);
event.SetErrorString( message->GetNodeContent() );
event.SetEvalReason(m_evalReason);
EventNotifier::Get()->AddPendingEvent( event );
}
}
}
}
|