void LocalsView::OnProperytGet(XDebugEvent& e) { e.Skip(); // An item was evaluated using property_get std::map<wxString, wxDataViewItem>::iterator iter = m_waitingExpand.find( e.GetEvaluted() ); if ( iter == m_waitingExpand.end() ) { return; } wxDataViewItem item = iter->second; m_waitingExpand.erase( iter ); // Delete the fake node wxDataViewItemArray children; m_dataviewModel->GetChildren( item, children ); if ( !children.IsEmpty() ) { m_dataviewModel->DeleteItems( item, children ); } XVariable::List_t vars = e.GetVariables(); if ( vars.empty() ) return; // Since we got here from property_get, XDebug will reply with the specific property (e.g. $myclass->secondClass) // and all its children. Howeverr, $myclass->secondClass already exist in the tree // so we are only interested with its children. so we use here vars.begin()->children (vars is always list of size == 1) wxASSERT_MSG(vars.size() == 1, "property_get returned list of size != 1"); XVariable::List_t childs; childs = vars.begin()->children; if ( !childs.empty() ) { AppendVariablesToTree( item, childs ); m_dataview->Expand( item ); } }
void LocalsView::OnLocalsUpdated(XDebugEvent& e) { e.Skip(); CL_DEBUG("Inside OnLocalsUpdated"); m_dataviewModel->Clear(); m_localsExpandedItems.Clear(); const XVariable::List_t& vars = e.GetVariables(); AppendVariablesToTree( wxDataViewItem(NULL), vars ); // Expand the items that were expanded before the view refresh for(size_t i=0; i<m_localsExpandedItems.GetCount(); ++i) { // Ensure it is visible m_dataview->EnsureVisible( m_localsExpandedItems.Item(i) ); // Ensure its expanded m_dataview->Expand( m_localsExpandedItems.Item(i) ); } m_localsExpandedItems.Clear(); }