void NodeJSGetScriptHandler::Process(NodeJSDebugger* debugger, const wxString& output) { JSONRoot root(output); wxString sourceFile = root.toElement().namedObject("body").namedObject("source").toString(); if(!sourceFile.IsEmpty()) { wxFileName fn(clStandardPaths::Get().GetUserDataDir(), m_filename); fn.AppendDir("webtools"); fn.AppendDir("tmp"); fn.Mkdir(wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); if(FileUtils::WriteFileContent(fn, sourceFile)) { CL_DEBUG("Calling marking line for %s:%d", fn.GetFullPath(), m_line); debugger->AddTempFile(fn.GetFullPath()); clDebugEvent eventHighlight(wxEVT_NODEJS_DEBUGGER_MARK_LINE); eventHighlight.SetLineNumber(m_line); eventHighlight.SetFileName(fn.GetFullPath()); EventNotifier::Get()->AddPendingEvent(eventHighlight); } } }
void NodeJSDebuggerPane::OnFrameSelected(clDebugEvent& event) { event.Skip(); wxWindowUpdateLocker locker(m_dataviewLocals); m_dataviewLocalsModel->Clear(); m_dataviewLocals->Enable(true); JSONRoot root(event.GetString()); JSONElement json = root.toElement(); JSONElement frame = json.namedObject("body"); JSONElement refs = json.namedObject("refs"); // Load the handlers into a map m_handles.clear(); ParseRefsArray(refs); int index = frame.namedObject("index").toInt(); int funcRef = frame.namedObject("func").namedObject("ref").toInt(); int fileRef = frame.namedObject("script").namedObject("ref").toInt(); int line = frame.namedObject("line").toInt() + 1; wxVector<wxVariant> cols; cols.push_back(wxString() << index); wxString file, func; if(m_handles.count(funcRef)) { func = m_handles.find(funcRef)->second.value; } if(m_handles.count(funcRef)) { file = m_handles.find(fileRef)->second.value; } cols.push_back(func); cols.push_back(file); cols.push_back(wxString() << line); // Notify the debugger to use frame #0 for the indicator clDebugEvent eventHighlight(wxEVT_NODEJS_DEBUGGER_MARK_LINE); eventHighlight.SetLineNumber(line); eventHighlight.SetFileName(file); EventNotifier::Get()->AddPendingEvent(eventHighlight); BuildLocals(frame); BuildArguments(frame); }