예제 #1
0
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();
    }
}
예제 #2
0
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);
        }
    }
}
예제 #3
0
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);
        }
    }
}
예제 #4
0
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();
}