void LLDBTooltip::OnItemExpanding(wxTreeEvent& event) { CHECK_ITEM_RET(event.GetItem()); LLDBVariableClientData* data = ItemData(event.GetItem()); wxTreeItemIdValue cookie; wxTreeItemId child = m_treeCtrl->GetFirstChild(event.GetItem(), cookie); if(m_treeCtrl->GetItemText(child) == "<dummy>") { // dummy item, remove it m_treeCtrl->DeleteChildren(event.GetItem()); m_plugin->GetLLDB()->RequestVariableChildren(data->GetVariable()->GetLldbId()); // Store the treeitemid parent in cache m_itemsPendingExpansion.insert(std::make_pair(data->GetVariable()->GetLldbId(), event.GetItem())); } else { event.Skip(); } }
void LLDBLocalsView::GetWatchesFromSelections(wxArrayTreeItemIds& items) { items.Clear(); wxArrayTreeItemIds arr; m_treeList->GetSelections(arr); for(size_t i = 0; i < arr.GetCount(); ++i) { wxTreeItemId item = arr.Item(i); if(!GetItemData(item)) continue; LLDBVariableClientData* data = GetItemData(item); if(!data) continue; LLDBVariable::Ptr_t lldbVar = data->GetVariable(); if(!lldbVar) continue; if(lldbVar->IsWatch()) { items.Add(item); } } }
void LLDBLocalsView::OnLocalsContextMenu(wxContextMenuEvent& event) { wxMenu menu; menu.Append(wxID_COPY, _("Copy value to clipboard")); int selection = GetPopupMenuSelectionFromUser(menu); if(selection == wxID_COPY) { wxString content; wxArrayTreeItemIds arr; m_treeList->GetSelections(arr); for(size_t i = 0; i < arr.GetCount(); ++i) { wxString itemValue; wxTreeItemId item = arr.Item(i); if(!GetItemData(item)) continue; LLDBVariableClientData* data = GetItemData(item); if(!data) continue; LLDBVariable::Ptr_t lldbVar = data->GetVariable(); if(!lldbVar) continue; if(!lldbVar->GetValue().IsEmpty()) { itemValue << lldbVar->GetValue(); } if(!lldbVar->GetSummary().IsEmpty()) { if(!itemValue.IsEmpty()) itemValue << " "; itemValue << lldbVar->GetSummary(); } if(!itemValue.IsEmpty()) { if(!content.IsEmpty()) { content << "\n"; } content << itemValue; } } if(!content.IsEmpty()) { ::CopyToClipboard(content); } } }
void LLDBLocalsView::OnDelete(wxCommandEvent& event) { wxArrayTreeItemIds items; GetWatchesFromSelections(items); if(items.IsEmpty()) return; for(size_t i = 0; i < items.GetCount(); ++i) { wxTreeItemId item = items.Item(i); if(!GetItemData(item)) continue; LLDBVariableClientData* data = GetItemData(item); if(!data) continue; LLDBVariable::Ptr_t lldbVar = data->GetVariable(); if(!lldbVar) continue; if(lldbVar->IsWatch()) { m_plugin->GetLLDB()->DeleteWatch(lldbVar->GetLldbId()); } } // Refresh the locals view m_plugin->GetLLDB()->RequestLocals(); }