void CompilersFoundDlg::OnItemActivated(wxDataViewEvent& event) { CompilerPtr compiler = GetCompiler(event.GetItem()); if(compiler) { m_defaultCompilers.erase(compiler->GetCompilerFamily()); compiler->SetIsDefault(true); m_defaultCompilers.insert(std::make_pair(compiler->GetCompilerFamily(), compiler)); m_dataview->UnselectAll(); m_dataview->CallAfter(&wxDataViewCtrl::Refresh, true, (const wxRect*)NULL); MSWUpdateToolchain(compiler); } }
CompilersFoundDlg::CompilersFoundDlg(wxWindow* parent, const ICompilerLocator::CompilerVec_t& compilers) : CompilersFoundDlgBase(parent) { m_allCompilers = compilers; // Replace the model with a custom one unsigned int colCount = m_dataviewModel->GetColCount(); m_dataviewModel = new MyCompilersFoundModel(this); m_dataviewModel->SetColCount(colCount); m_dataview->AssociateModel(m_dataviewModel.get()); // Add the categories std::map<wxString, wxDataViewItem> categories; for(size_t i = 0; i < compilers.size(); ++i) { if(categories.count(compilers.at(i)->GetCompilerFamily()) == 0) { wxVector<wxVariant> cols; cols.push_back(compilers.at(i)->GetCompilerFamily()); wxDataViewItem item = m_dataviewModel->AppendItem(wxDataViewItem(0), cols); categories.insert(std::make_pair(compilers.at(i)->GetCompilerFamily(), item)); } } for(size_t i = 0; i < compilers.size(); ++i) { CompilerPtr compiler = compilers.at(i); wxDataViewItem parent = categories.find(compiler->GetCompilerFamily())->second; wxVector<wxVariant> cols; cols.push_back(compiler->GetName()); cols.push_back(compiler->GetInstallationPath()); m_dataviewModel->AppendItem(parent, cols, new CompilersFoundDlgItemData(compiler)); if(m_defaultCompilers.count(compiler->GetCompilerFamily()) == 0) { compiler->SetIsDefault(true); // Per family m_defaultCompilers.insert(std::make_pair(compiler->GetCompilerFamily(), compiler)); MSWUpdateToolchain(compiler); } } std::map<wxString, wxDataViewItem>::iterator iter = categories.begin(); for(; iter != categories.end(); ++iter) { m_dataview->Expand(iter->second); } SetName("CompilersFoundDlg"); WindowAttrManager::Load(this); }