void NewProjectWizard::OnPageChanging(wxWizardEvent& event) { if(event.GetDirection()) { wxDataViewItem sel = m_dataviewTemplates->GetSelection(); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(sel)); if(event.GetPage() == m_wizardPageTemplate) { // ------------------------------------------------------- // Switching from the Templates page // ------------------------------------------------------- if(!CheckProjectTemplate()) { event.Veto(); return; } // Test to see if the selected project allows enabling the 'Create under separate folder' if(cd && !cd->IsCanUseSeparateFolder()) { m_cbSeparateDir->SetValue(false); m_cbSeparateDir->Enable(false); } else { m_cbSeparateDir->Enable(true); } m_txtProjName->SetFocus(); // This should have happened in the base-class ctor, but in practice it doesn't } else if(event.GetPage() == m_wizardPageDetails) { // ------------------------------------------------------- // Switching from the Name/Path page // ------------------------------------------------------- if(!CheckProjectName() || !CheckProjectPath()) { event.Veto(); return; } } else if(event.GetPage() == m_wizardPageToolchain) { wxFileName fn(m_stxtFullFileName->GetLabel()); // make sure that there is no conflict in files between the template project and the selected path if(m_projectData.m_srcProject) { ProjectPtr p = m_projectData.m_srcProject; wxString base_dir(fn.GetPath()); std::vector<wxFileName> files; p->GetFiles(files); for(size_t i = 0; i < files.size(); ++i) { wxFileName f = files.at(i); wxString new_file = base_dir + wxT("/") + f.GetFullName(); if(wxFileName::FileExists(new_file)) { // this file already - notify the user wxString msg; msg << _("The File '") << f.GetFullName() << _("' already exists at the target directory '") << base_dir << wxT("'\n"); msg << _("Please select a different project path\n"); msg << _("The file '") << f.GetFullName() << _("' is part of the template project [") << p->GetName() << wxT("]"); wxMessageBox(msg, _("CodeLite"), wxOK | wxICON_HAND); event.Veto(); return; } } } } } event.Skip(); }
void NewProjectWizard::OnPageChanging(wxWizardEvent& event) { if(event.GetDirection()) { wxDataViewItem sel = m_dataviewTemplates->GetSelection(); NewProjectClientData* cd = dynamic_cast<NewProjectClientData*>(m_dataviewTemplatesModel->GetClientObject(sel)); if(event.GetPage() == m_wizardPageTemplate) { // ------------------------------------------------------- // Switching from the Templates page // ------------------------------------------------------- if(!CheckProjectTemplate()) { event.Veto(); return; } // Test to see if the selected project allows enabling the 'Create under separate folder' if(cd && !cd->IsCanUseSeparateFolder()) { m_cbSeparateDir->SetValue(false); m_cbSeparateDir->Enable(false); } else { m_cbSeparateDir->Enable(true); } m_txtProjName->SetFocus(); // This should have happened in the base-class ctor, but in practice it doesn't } else if(event.GetPage() == m_wizardPageDetails) { // ------------------------------------------------------- // Switching from the Name/Path page // ------------------------------------------------------- if(!CheckProjectName() || !CheckProjectPath()) { event.Veto(); return; } } else if(event.GetPage() == m_wizardPageToolchain) { wxFileName fn(m_stxtFullFileName->GetLabel()); // make sure that there is no conflict in files between the template project and the selected path if(m_projectData.m_srcProject) { ProjectPtr p = m_projectData.m_srcProject; wxString base_dir(fn.GetPath()); std::vector<wxFileName> files; p->GetFiles(files); for(size_t i = 0; i < files.size(); ++i) { wxFileName f = files.at(i); wxString new_file = base_dir + wxT("/") + f.GetFullName(); if(wxFileName::FileExists(new_file)) { // this file already - notify the user wxString msg; msg << _("The File '") << f.GetFullName() << _("' already exists at the target directory '") << base_dir << wxT("'\n"); msg << _("Please select a different project path\n"); msg << _("The file '") << f.GetFullName() << _("' is part of the template project [") << p->GetName() << wxT("]"); wxMessageBox(msg, _("CodeLite"), wxOK | wxICON_HAND); event.Veto(); return; } } } } // Try to offer a sensible toolchain/debugger combination as default if(!m_selectionMade) { wxString defaultDebugger; if(cd && cd->GetTemplate().Lower().Contains("php")) { for(size_t n = 0; n < m_choiceCompiler->GetCount(); ++n) { if(m_choiceCompiler->GetString(n).Lower().Contains("php")) { m_choiceCompiler->SetSelection(n); break; } } defaultDebugger = "XDebug"; } else { // If it's not a PHP project we can't be sure of anything except we don't want php tools; so select the // first that isn't for(size_t n = 0; n < m_choiceCompiler->GetCount(); ++n) { if(!m_choiceCompiler->GetString(n).Lower().Contains("php")) { m_choiceCompiler->SetSelection(n); break; } } #if defined(__WXMAC__) defaultDebugger = "LLDB Debugger"; #else defaultDebugger = "GNU gdb debugger"; #endif } int index = m_choiceDebugger->FindString(defaultDebugger); if(index != wxNOT_FOUND) { m_choiceDebugger->SetSelection(index); } } } event.Skip(); }