ResourceVector_t OpenResourceDlg::DoGetFiles(const wxString& filter)
{
    ResourceVector_t resources;
    // filter non matched entries
    wxString lcFilter = filter;
    lcFilter.MakeLower();

    for(size_t i = 0; i < m_allFiles.size(); i++) {
        wxString filename = m_allFiles.at(i).filename.GetFullPath().Lower();
        if(IsMatchesFilter(filter, filename)) {
            resources.push_back(m_allFiles.at(i));
            // Don't return too many matches...
            if(resources.size() == 300) break;
        }
    }
    return resources;
}
void OpenResourceDlg::DoGetResources(const wxString& filter)
{
    m_resources.clear();
    
    PHPEntityBase::List_t matches;
    m_table.LoadAllByFilter(matches, filter);
    
    // Convert the PHP matches into resources
    PHPEntityBase::List_t::iterator iter = matches.begin();
    m_resources.reserve(matches.size());
    for(; iter != matches.end(); ++iter) {
        PHPEntityBase::Ptr_t match = *iter;
        if(IsMatchesFilter(filter, match->GetFullName())) {
            ResourceItem resource;
            resource.displayName = match->GetDisplayName();
            resource.filename = match->GetFilename();
            resource.line = match->GetLine();
            resource.SetType(match);
            m_resources.push_back(resource);
        }
    }
}
void AccelTableDlg::PopulateTable(const wxString& filter)
{
    m_dvListCtrl->DeleteAllItems();

    MenuItemDataMap_t filteredMap;
    if(filter.IsEmpty()) {
        filteredMap = m_accelMap;
    } else {
        for(MenuItemDataMap_t::iterator iter = m_accelMap.begin(); iter != m_accelMap.end(); ++iter) {
            if(!IsMatchesFilter(filter, iter->second)) continue;
            filteredMap.insert(std::make_pair(iter->first, iter->second));
        }
    }

    if(filteredMap.empty()) return;

    // Add core entries
    for(MenuItemDataMap_t::const_iterator iter = filteredMap.begin(); iter != filteredMap.end(); ++iter) {
        const MenuItemData& mid = iter->second;

        wxVector<wxVariant> cols;
        wxString parentMenu = mid.parentMenu.BeforeFirst(':');
        if(parentMenu.IsEmpty()) {
            parentMenu = "<Global>";
        }

        cols.push_back(parentMenu);                // Parent menu
        cols.push_back(mid.action.AfterLast(':')); // Action description
        cols.push_back(mid.accel);                 // shortcut
        m_dvListCtrl->AppendItem(cols, (wxUIntPtr) new AccelItemData(mid));
    }

    m_dvListCtrl->GetColumn(0)->SetSortable(true);
    m_dvListCtrl->GetColumn(1)->SetSortable(true);
    m_dvListCtrl->GetColumn(2)->SetSortable(true);
}