NewProjectWizard::~NewProjectWizard() { // Keep the options NewProjectDlgData info; size_t flags(0); clConfig::Get().Write("CxxWizard/Compiler", m_choiceCompiler->GetStringSelection()); clConfig::Get().Write("CxxWizard/Debugger", m_choiceDebugger->GetStringSelection()); clConfig::Get().Write("CxxWizard/BuildSystem", m_choiceBuildSystem->GetStringSelection()); if(m_cbSeparateDir->IsChecked()) flags |= NewProjectDlgData::NpSeparateDirectory; info.SetFlags(flags); wxDataViewItem sel = m_dataviewTemplates->GetSelection(); if(sel.IsOk()) { NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(sel)); if(cd && cd->getProject()) { info.SetLastSelection(cd->getProject()->GetName()); } else if(cd) { info.SetLastSelection(cd->GetTemplate()); } } EditorConfigST::Get()->WriteObject(wxT("NewProjectDlgData"), &info); }
void NewProjectWizard::OnItemSelected(wxDataViewEvent& event) { NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(event.GetItem())); if ( cd ) { m_projectData.m_srcProject = cd->getProject(); m_projectData.m_sourceTemplate = cd->GetTemplate(); UpdateProjectPage(); } }
NewProjectWizard::NewProjectWizard(wxWindow* parent, const clNewProjectEvent::Template::Vec_t& additionalTemplates) : NewProjectWizardBase(parent) { m_additionalTemplates = additionalTemplates; NewProjectDlgData info; EditorConfigST::Get()->ReadObject(wxT("NewProjectDlgData"), &info); NewProjImgList images; // Get list of project templates wxImageList *lstImages (NULL); GetProjectTemplateList(PluginManager::Get(), m_list, &m_mapImages, &lstImages); wxDELETE(lstImages); // Populate the dataview model m_dataviewTemplatesModel->Clear(); std::map<wxString, wxDataViewItem> categoryMap; // list of compilers wxArrayString compilerChoices; // list of debuggers wxArrayString debuggerChoices; // Place the plugins on top for ( size_t i=0; i<m_additionalTemplates.size(); ++i ) { // Add the category if not exists const clNewProjectEvent::Template& newTemplate = m_additionalTemplates.at(i); if ( !newTemplate.m_toolchain.IsEmpty() ) { compilerChoices.Add( newTemplate.m_toolchain ); } if ( !newTemplate.m_debugger.IsEmpty() ) { debuggerChoices.Add( newTemplate.m_debugger ); } wxString category = newTemplate.m_category; if ( categoryMap.count( category ) == 0 ) { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap( newTemplate.m_categoryPng ); if ( !bmp.IsOk() ) { bmp = images.Bitmap("gear16"); } cols.push_back( DVTemplatesModel::CreateIconTextVariant(category, bmp) ); categoryMap[category] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); } { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap( newTemplate.m_templatePng ); if ( !bmp.IsOk() ) { bmp = images.Bitmap("gear16"); } cols.push_back( DVTemplatesModel::CreateIconTextVariant(newTemplate.m_template, bmp) ); m_dataviewTemplatesModel->AppendItem(categoryMap[category], cols, new NewProjectClientData(NULL, newTemplate.m_template)); } } wxDataViewItem selection; std::list<ProjectPtr>::iterator iter = m_list.begin(); for (; iter != m_list.end(); ++iter) { wxVector<wxVariant> cols; wxString internalType = (*iter)->GetProjectInternalType(); if (internalType.IsEmpty()) internalType = _("Others"); if ( categoryMap.count( internalType ) == 0 ) { cols.clear(); wxIcon icn; icn.CopyFromBitmap( images.Bitmap("gear16") ); wxDataViewIconText ict(internalType, icn); wxVariant v; v << ict; cols.push_back( v ); categoryMap[internalType] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); } wxString imgId = (*iter)->GetProjectIconName(); cols.clear(); wxIcon icn; icn.CopyFromBitmap( images.Bitmap(imgId) ); wxDataViewIconText ict((*iter)->GetName(), icn); wxVariant v; v << ict; cols.push_back( v ); wxDataViewItem item = m_dataviewTemplatesModel->AppendItem(categoryMap[internalType], cols, new NewProjectClientData( *iter ) ); if ( (*iter)->GetName() == info.GetLastSelection() ) { selection = item; } } // Aet list of compilers from configuration file BuildSettingsConfigCookie cookie; CompilerPtr cmp = BuildSettingsConfigST::Get()->GetFirstCompiler(cookie); while (cmp) { compilerChoices.Add(cmp->GetName()); cmp = BuildSettingsConfigST::Get()->GetNextCompiler(cookie); } m_choiceCompiler->Append( compilerChoices ); if (compilerChoices.IsEmpty() == false) { m_choiceCompiler->SetSelection(0); } m_textCtrlProjectPath->SetValue( WorkspaceST::Get()->GetWorkspaceFileName().GetPath()); // Get list of debuggers wxArrayString knownDebuggers = DebuggerMgr::Get().GetAvailableDebuggers(); debuggerChoices.insert( debuggerChoices.end(), knownDebuggers.begin(), knownDebuggers.end()); m_choiceDebugger->Append( debuggerChoices ); if ( !m_choiceDebugger->IsEmpty() ) { m_choiceDebugger->SetSelection( 0 ); } m_cbSeparateDir->SetValue( info.GetFlags() & NewProjectDlgData::NpSeparateDirectory ); // Make sure the old selection is restored if ( selection.IsOk() ) { m_dataviewTemplates->Select(selection); m_dataviewTemplates->EnsureVisible(selection); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>( m_dataviewTemplatesModel->GetClientObject(selection) ); if ( cd ) { m_projectData.m_srcProject = cd->getProject(); } } UpdateProjectPage(); }
NewProjectWizard::NewProjectWizard(wxWindow* parent, const clNewProjectEvent::Template::Vec_t& additionalTemplates) : NewProjectWizardBase(parent) , m_selectionMade(false) { m_additionalTemplates = additionalTemplates; NewProjectDlgData info; EditorConfigST::Get()->ReadObject(wxT("NewProjectDlgData"), &info); NewProjImgList images; // Get list of project templates (bot the installed ones + user) GetProjectTemplateList(m_list); // Populate the dataview model m_dataviewTemplatesModel->Clear(); std::map<wxString, wxDataViewItem> categoryMap; std::map<wxString, wxStringSet_t> projectsPerCategory; // list of compilers wxArrayString compilerChoices; // list of debuggers wxArrayString debuggerChoices; // Place the plugins on top for(size_t i = 0; i < m_additionalTemplates.size(); ++i) { // Add the category if not exists const clNewProjectEvent::Template& newTemplate = m_additionalTemplates.at(i); if(!newTemplate.m_toolchain.IsEmpty()) { compilerChoices.Add(newTemplate.m_toolchain); } if(!newTemplate.m_debugger.IsEmpty()) { debuggerChoices.Add(newTemplate.m_debugger); } wxString category = newTemplate.m_category; if(categoryMap.count(category) == 0) { wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap(newTemplate.m_categoryPng); if(!bmp.IsOk()) { bmp = images.Bitmap("gear16"); } cols.push_back(DVTemplatesModel::CreateIconTextVariant(category, bmp)); categoryMap[category] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); projectsPerCategory.insert(std::make_pair(category, wxStringSet_t())); } { wxString name = newTemplate.m_template; if(projectsPerCategory[category].count(name)) { // already exists continue; } projectsPerCategory[category].insert(name); // add it to the unique list wxVector<wxVariant> cols; wxBitmap bmp = wxXmlResource::Get()->LoadBitmap(newTemplate.m_templatePng); if(!bmp.IsOk()) { bmp = images.Bitmap("gear16"); } cols.push_back(DVTemplatesModel::CreateIconTextVariant(newTemplate.m_template, bmp)); m_dataviewTemplatesModel->AppendItem(categoryMap[category], cols, new NewProjectClientData(NULL, newTemplate.m_template, true, newTemplate.m_allowSeparateFolder)); } } wxDataViewItem selection; std::list<ProjectPtr>::iterator iter = m_list.begin(); for(; iter != m_list.end(); ++iter) { wxVector<wxVariant> cols; wxString internalType = (*iter)->GetProjectInternalType(); if(internalType.IsEmpty()) internalType = "Others"; // Add the category node if needed if(categoryMap.count(internalType) == 0) { cols.clear(); wxIcon icn; icn.CopyFromBitmap(images.Bitmap("gear16")); wxDataViewIconText ict(internalType, icn); wxVariant v; v << ict; cols.push_back(v); categoryMap[internalType] = m_dataviewTemplatesModel->AppendItem(wxDataViewItem(0), cols); projectsPerCategory.insert(std::make_pair(internalType, wxStringSet_t())); } wxString imgId = (*iter)->GetProjectIconName(); wxBitmap bmp = images.Bitmap(imgId); // Allow the user to override it // Remove the entry if(projectsPerCategory[internalType].count((*iter)->GetName())) { // already exists continue; } projectsPerCategory[internalType].insert((*iter)->GetName()); // add it to the unique list cols.clear(); wxIcon icn; icn.CopyFromBitmap(bmp); wxDataViewIconText ict((*iter)->GetName(), icn); wxVariant v; v << ict; cols.push_back(v); wxDataViewItem item = m_dataviewTemplatesModel->AppendItem(categoryMap[internalType], cols, new NewProjectClientData(*iter)); if((*iter)->GetName() == info.GetLastSelection()) { selection = item; } } // Get list of compilers from configuration file BuildSettingsConfigCookie cookie; CompilerPtr cmp = BuildSettingsConfigST::Get()->GetFirstCompiler(cookie); while(cmp) { compilerChoices.Add(cmp->GetName()); cmp = BuildSettingsConfigST::Get()->GetNextCompiler(cookie); } m_choiceCompiler->Append(compilerChoices); if(compilerChoices.IsEmpty() == false) { m_choiceCompiler->SetSelection(0); } m_textCtrlProjectPath->SetValue(clCxxWorkspaceST::Get()->GetWorkspaceFileName().GetPath()); // Get list of debuggers wxArrayString knownDebuggers = DebuggerMgr::Get().GetAvailableDebuggers(); debuggerChoices.insert(debuggerChoices.end(), knownDebuggers.begin(), knownDebuggers.end()); m_choiceDebugger->Append(debuggerChoices); if(!m_choiceDebugger->IsEmpty()) { m_choiceDebugger->SetSelection(0); } { // build system std::list<wxString> builders; wxArrayString knownBuilders; BuildManagerST::Get()->GetBuilders(builders); std::for_each( builders.begin(), builders.end(), [&](const wxString& builderName) { knownBuilders.Add(builderName); }); m_choiceBuildSystem->Append(knownBuilders); if(!m_choiceBuildSystem->IsEmpty()) { m_choiceBuildSystem->SetSelection(0); } } m_cbSeparateDir->SetValue(info.GetFlags() & NewProjectDlgData::NpSeparateDirectory); // Make sure the old selection is restored if(selection.IsOk()) { m_dataviewTemplates->Select(selection); m_dataviewTemplates->EnsureVisible(selection); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(selection)); if(cd) { m_projectData.m_srcProject = cd->getProject(); } } UpdateProjectPage(); }