void BatchBuildDlg::DoInitialize() { // load the previously saved batch build file wxFileName fn(WorkspaceST::Get()->GetWorkspaceFileName()); fn.SetExt(wxT("batch_build")); wxString content; wxArrayString arr; if (ReadFileWithConversion(fn.GetFullPath(), content)) { arr = wxStringTokenize(content, wxT("\n"), wxTOKEN_STRTOK); for (size_t i=0; i<arr.GetCount(); i++) { int idx = m_checkListConfigurations->Append(arr.Item(i)); m_checkListConfigurations->Check((unsigned int)idx); } } // loop over all projects, for each project collect all available // build configurations and add them to the check list control wxArrayString projects; WorkspaceST::Get()->GetProjectList(projects); for (size_t i=0; i<projects.GetCount(); i++) { ProjectPtr p = ManagerST::Get()->GetProject(projects.Item(i)); if (p) { ProjectSettingsPtr settings = p->GetSettings(); if (settings) { ProjectSettingsCookie cookie; BuildConfigPtr bldConf = settings->GetFirstBuildConfiguration(cookie); while (bldConf) { wxString item(p->GetName() + wxT(" | ") + bldConf->GetName()); int where = arr.Index(item); if (where == wxNOT_FOUND) { // append this item m_checkListConfigurations->Append(item); } else { // this item already been added, // remove it from the arr and continue arr.RemoveAt((size_t)where); } bldConf = settings->GetNextBuildConfiguration(cookie); } } } } // check to see which configuration was left in 'arr' // and remove them from the checklistbox for (size_t i=0; i<arr.GetCount(); i++) { int where = m_checkListConfigurations->FindString(arr.Item(i)); if (where != wxNOT_FOUND) { m_checkListConfigurations->Delete((unsigned int)where); } } arr.clear(); if (m_checkListConfigurations->GetCount()>0) { m_checkListConfigurations->Select(0); } }
BuildConfigPtr clCxxWorkspace::GetProjBuildConf(const wxString& projectName, const wxString& confName) const { BuildMatrixPtr matrix = GetBuildMatrix(); if(!matrix) { return NULL; } wxString projConf(confName); if(projConf.IsEmpty()) { wxString workspaceConfig = matrix->GetSelectedConfigurationName(); projConf = matrix->GetProjectSelectedConf(workspaceConfig, projectName); } // Get the project setting and retrieve the selected configuration wxString errMsg; ProjectPtr proj = FindProjectByName(projectName, errMsg); if(proj) { ProjectSettingsPtr settings = proj->GetSettings(); if(settings) { return settings->GetBuildConfiguration(projConf, true); } } return NULL; }
void NewProjectWizard::UpdateProjectPage() { // update the description if(m_projectData.m_srcProject) { wxString desc = m_projectData.m_srcProject->GetDescription(); desc = desc.Trim().Trim(false); desc.Replace(wxT("\t"), wxT(" ")); // select the correct compiler ProjectSettingsPtr settings = m_projectData.m_srcProject->GetSettings(); if(settings) { ProjectSettingsCookie ck; BuildConfigPtr buildConf = settings->GetFirstBuildConfiguration(ck); if(buildConf) { m_choiceCompiler->SetStringSelection(buildConf->GetCompilerType()); m_choiceDebugger->SetStringSelection(buildConf->GetDebuggerType()); } } } // Restore previous selections wxString lastCompiler = clConfig::Get().Read("CxxWizard/Compiler", wxString()); wxString lastDebugger = clConfig::Get().Read("CxxWizard/Debugger", wxString()); wxString lastBuilder = clConfig::Get().Read("CxxWizard/BuildSystem", wxString("Default")); if(!lastDebugger.IsEmpty()) { int where = m_choiceDebugger->FindString(lastDebugger); if(where != wxNOT_FOUND) { m_choiceDebugger->SetSelection(where); } } if(!lastCompiler.IsEmpty()) { int where = m_choiceCompiler->FindString(lastCompiler); if(where != wxNOT_FOUND) { m_choiceCompiler->SetSelection(where); } } { int where = m_choiceBuildSystem->FindString(lastBuilder); if(where != wxNOT_FOUND) { m_choiceBuildSystem->SetSelection(where); } } }
void Project::SetSettings(ProjectSettingsPtr settings) { wxXmlNode *oldSettings = XmlUtils::FindFirstByTagName(m_doc.GetRoot(), wxT("Settings")); if (oldSettings) { oldSettings->GetParent()->RemoveChild(oldSettings); delete oldSettings; } m_doc.GetRoot()->AddChild(settings->ToXml()); SaveXmlFile(); }
void NewProjectWizard::UpdateProjectPage() { //update the description if ( m_projectData.m_srcProject ) { wxString desc = m_projectData.m_srcProject->GetDescription(); desc = desc.Trim().Trim(false); desc.Replace(wxT("\t"), wxT(" ")); // m_txtDescription->SetValue( desc ); // select the correct compiler ProjectSettingsPtr settings = m_projectData.m_srcProject->GetSettings(); if (settings) { ProjectSettingsCookie ck; BuildConfigPtr buildConf = settings->GetFirstBuildConfiguration(ck); if (buildConf) { m_choiceCompiler->SetStringSelection( buildConf->GetCompilerType() ); m_choiceCompiler->SetStringSelection( buildConf->GetDebuggerType() ); } } } }
void EditConfigurationDialog::RenameConfiguration(const wxString &oldName, const wxString &newName) { ProjectSettingsPtr settings = ManagerST::Get()->GetProjectSettings(m_projectName); if(settings){ BuildConfigPtr bldConf = settings->GetBuildConfiguration(oldName); if(bldConf){ settings->RemoveConfiguration(oldName); bldConf->SetName(newName); settings->SetBuildConfiguration(bldConf); //save changes ManagerST::Get()->SetProjectSettings(m_projectName, settings); //update the control m_configurationsList->Clear(); ProjectSettingsCookie cookie; BuildConfigPtr bldConf = settings->GetFirstBuildConfiguration(cookie); while(bldConf){ m_configurationsList->Append(bldConf->GetName()); bldConf = settings->GetNextBuildConfiguration(cookie); } if(m_configurationsList->GetCount()>0) m_configurationsList->SetSelection(0); } } }
bool Project::Create(const wxString &name, const wxString &description, const wxString &path, const wxString &projType) { m_vdCache.clear(); m_fileName = path + wxFileName::GetPathSeparator() + name + wxT(".project"); m_fileName.MakeAbsolute(); wxXmlNode *root = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, wxT("CodeLite_Project")); m_doc.SetRoot(root); m_doc.GetRoot()->AddProperty(wxT("Name"), name); wxXmlNode *descNode = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, wxT("Description")); XmlUtils::SetNodeContent(descNode, description); m_doc.GetRoot()->AddChild(descNode); // Create the default virtual directories wxXmlNode *srcNode = NULL, *headNode = NULL; srcNode = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, wxT("VirtualDirectory")); srcNode->AddProperty(wxT("Name"), wxT("src")); m_doc.GetRoot()->AddChild(srcNode); headNode = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, wxT("VirtualDirectory")); headNode->AddProperty(wxT("Name"), wxT("include")); m_doc.GetRoot()->AddChild(headNode); //creae dependencies node wxXmlNode *depNode = new wxXmlNode(NULL, wxXML_ELEMENT_NODE, wxT("Dependencies")); root->AddChild(depNode); SaveXmlFile(); //create build settings SetSettings(new ProjectSettings(NULL)); ProjectSettingsPtr settings = GetSettings(); settings->SetProjectType(projType); SetSettings(settings); SetModified(true); return true; }
void ConfigurationManagerDlg::LoadProjectConfiguration(const wxString &projectName) { std::map<int, ConfigEntry>::iterator iter = m_projSettingsMap.begin(); for (; iter != m_projSettingsMap.end(); iter++) { if (iter->second.project == projectName) { iter->second.choiceControl->Clear(); ProjectSettingsPtr proSet = ManagerST::Get()->GetProjectSettings(projectName); if (proSet) { ProjectSettingsCookie cookie; BuildConfigPtr bldConf = proSet->GetFirstBuildConfiguration(cookie); while (bldConf) { iter->second.choiceControl->Append(bldConf->GetName()); bldConf = proSet->GetNextBuildConfiguration(cookie); } //append the EDIT & NEW commands iter->second.choiceControl->Append(clCMD_EDIT); iter->second.choiceControl->Append(clCMD_NEW); //select the build configuration according to the build matrix BuildMatrixPtr matrix = ManagerST::Get()->GetWorkspaceBuildMatrix(); if (!matrix) { return; } wxString configName = matrix->GetProjectSelectedConf(m_choiceConfigurations->GetStringSelection(), projectName); int match = iter->second.choiceControl->FindString(configName); if (match != wxNOT_FOUND) { iter->second.choiceControl->SetStringSelection(configName); } else { iter->second.choiceControl->SetSelection(0); } return; } } } }
void EditConfigurationDialog::OnButtonDelete(wxCommandEvent &event) { wxUnusedVar(event); wxString selection = m_configurationsList->GetStringSelection() ; if(selection.IsEmpty()){ return; } wxString msg(wxT("Remove configuration '")); msg << selection << wxT("' ?"); if(wxMessageBox(msg, wxT("Confirm"), wxYES_NO | wxCANCEL | wxICON_QUESTION) == wxYES){ ProjectSettingsPtr settings = ManagerST::Get()->GetProjectSettings(m_projectName); if(settings){ settings->RemoveConfiguration(selection); m_configurationsList->Delete(m_configurationsList->GetSelection()); if(m_configurationsList->GetCount()>0) m_configurationsList->SetSelection(0); //save changes ManagerST::Get()->SetProjectSettings(m_projectName, settings); } } }
void ConfigurationManagerDlg::AddEntry(const wxString &projectName, const wxString &selectedConf) { wxFlexGridSizer *mainSizer = dynamic_cast<wxFlexGridSizer*>(m_scrolledWindow->GetSizer()); if (!mainSizer) return; wxArrayString choices; wxChoice *choiceConfig = new wxChoice( m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices, 0 ); // Get all configuration of the project ProjectSettingsPtr settings = ManagerST::Get()->GetProjectSettings(projectName); if (settings) { ProjectSettingsCookie cookie; BuildConfigPtr bldConf = settings->GetFirstBuildConfiguration(cookie); while (bldConf) { choiceConfig->Append(bldConf->GetName()); bldConf = settings->GetNextBuildConfiguration(cookie); } } choiceConfig->Append(clCMD_NEW); choiceConfig->Append(clCMD_EDIT); ConnectChoice(choiceConfig, ConfigurationManagerDlg::OnConfigSelected); wxStaticText *text = new wxStaticText( m_scrolledWindow, wxID_ANY, projectName, wxDefaultPosition, wxDefaultSize, 0 ); int where = choiceConfig->FindString(selectedConf); if (where == wxNOT_FOUND) { where = 0; } choiceConfig->SetSelection(where); mainSizer->Add(text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); mainSizer->Add(choiceConfig, 1, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, 5); ConfigEntry entry; entry.project = projectName; entry.projectSettings = settings; entry.choiceControl = choiceConfig; m_projSettingsMap[choiceConfig->GetId()] = entry; }
void PSGeneralPage::Save(BuildConfigPtr buildConf, ProjectSettingsPtr projSettingsPtr) { buildConf->SetOutputFileName( GetPropertyAsString(m_pgPropOutputFile) ); buildConf->SetIntermediateDirectory( GetPropertyAsString(m_pgPropIntermediateFolder) ); buildConf->SetCommand( GetPropertyAsString(m_pgPropProgram) ); buildConf->SetCommandArguments(GetPropertyAsString(m_pgPropArgs)); buildConf->SetWorkingDirectory(GetPropertyAsString(m_pgPropWorkingDirectory)); // Get the project type selection, unlocalised projSettingsPtr->SetProjectType( GetPropertyAsString(m_pgPropProjectType) ); buildConf->SetCompilerType( GetPropertyAsString(m_pgPropCompiler) ); buildConf->SetDebuggerType( GetPropertyAsString(m_pgPropDebugger) ); buildConf->SetPauseWhenExecEnds( GetPropertyAsBool(m_pgPropPause) ); buildConf->SetProjectType( GetPropertyAsString(m_pgPropProjectType) ); buildConf->SetDebugArgs( GetPropertyAsString(m_pgPropDebugArgs) ); buildConf->SetIsGUIProgram( GetPropertyAsBool(m_pgPropGUIApp) ); buildConf->SetIsProjectEnabled( m_checkBoxEnabled->IsChecked() ); buildConf->SetUseSeparateDebugArgs( GetPropertyAsBool(m_pgPropUseSeparateDebuggerArgs) ); }
void MacBundler::showSettingsDialogFor(ProjectPtr project) { // project->GetSettings()->GetGlobalSettings(); // project->GetSettings()->GetBuildConfiguration(name); ProjectSettingsCookie cookie; ProjectSettingsPtr settings = project->GetSettings(); if(not settings) { wxMessageBox(_("Cannot continue, impossible to access project settings.")); return; } std::map<wxString, BuildConfigPtr> configs; wxArrayString choices; // TODO: allow putting the rules in the config root and not in every target BuildConfigPtr buildConfig = settings->GetFirstBuildConfiguration(cookie); while(buildConfig) { configs[buildConfig->GetName()] = buildConfig; choices.Add(buildConfig->GetName()); buildConfig = settings->GetNextBuildConfiguration(cookie); } bool accepted = false; bool generateInfoPlistFile = false; bool generateIcon = false; wxArrayString targetsToSet; wxString iconName(wxT("icon.icns")); { BundleConfigDialog configDlg(project, m_mgr->GetTheApp()->GetTopWindow(), choices, m_mgr); configDlg.ShowModal(); accepted = configDlg.getResults(targetsToSet, &generateInfoPlistFile, &generateIcon); iconName = configDlg.getIconDestName(); if(accepted and generateInfoPlistFile) { wxFileName projPath = project->GetFileName(); projPath.SetFullName(wxT("")); const wxString projectDirName = projPath.GetFullPath(); const wxString infoPlistFile = projectDirName + wxT("/Info.plist"); if(wxFileExists(infoPlistFile)) { int out = wxMessageBox(wxString::Format(_("The following file:\n%s\nalready exists, overwrite it?\n"), infoPlistFile.c_str()), _("Warning"), wxYES_NO); if(out == wxYES) { wxTextFile file; file.Open(infoPlistFile); file.Clear(); configDlg.writeInfoPlistFile(file); file.Close(); } } else { wxTextFile file; if(not file.Create(infoPlistFile)) { wxMessageBox(_("Could not create Info.plist file\n") + infoPlistFile); } else { configDlg.writeInfoPlistFile(file); file.Close(); } } if(wxFileExists(infoPlistFile)) { // FIXME: if the file was already present, it will be added again and appear twice in the file tree wxArrayString paths; paths.Add(infoPlistFile); m_mgr->CreateVirtualDirectory(project->GetName(), wxT("osx")); m_mgr->AddFilesToVirtualFolder(project->GetName() + wxT(":osx"), paths); } } // nend if create info.plist if(accepted and generateIcon) { wxString iconSourcePath = configDlg.getIconSource(); if(not iconSourcePath.IsEmpty()) { // sips doesn't like double slashes in path names iconSourcePath.Replace(wxT("//"), wxT("/")); wxFileName projPath = project->GetFileName(); projPath.SetFullName(wxT("")); const wxString projectDirName = projPath.GetFullPath(); wxString iconFileDest = projectDirName + wxT("/") + configDlg.getIconDestName(); // sips doesn't like double slashes in path names iconFileDest.Replace(wxT("//"), wxT("/")); std::cout << "Copying icon '" << iconSourcePath.mb_str() << "' to project\n"; if(iconSourcePath.EndsWith(wxT(".icns"))) { if(not wxCopyFile(iconSourcePath, iconFileDest)) { wxMessageBox(_("Sorry, could not copy icon")); } } else { wxString cmd = wxT("sips -s format icns '") + iconSourcePath + wxT("' --out '") + iconFileDest + wxT("'"); std::cout << cmd.mb_str() << std::endl; wxExecute(cmd, wxEXEC_SYNC); if(not wxFileExists(iconFileDest)) { wxMessageBox(_("Sorry, could not convert selected icon to icns format")); } } // FIXME: if the file was already present, it will be added again and appear twice in the file tree if(wxFileExists(iconFileDest)) { wxArrayString paths; paths.Add(iconFileDest); m_mgr->CreateVirtualDirectory(project->GetName(), wxT("osx")); m_mgr->AddFilesToVirtualFolder(project->GetName() + wxT(":osx"), paths); } } // end if icon not null } // end if generate icon } if(!accepted) return; for(int n = 0; n < targetsToSet.GetCount(); n++) { BuildConfigPtr buildConfig = configs[targetsToSet[n]]; wxString outputFileName = buildConfig->GetOutputFileName(); wxString output = wxT("$(ProjectName).app/Contents/MacOS/$(ProjectName)"); buildConfig->SetOutputFileName(wxT("$(IntermediateDirectory)/") + output); buildConfig->SetCommand(wxT("./") + output); if(generateInfoPlistFile or generateIcon) { // get existing custom makefile targets, if any wxString customPreBuild = buildConfig->GetPreBuildCustom(); wxString deps, rules; deps = customPreBuild.BeforeFirst(wxT('\n')); rules = customPreBuild.AfterFirst(wxT('\n')); rules = rules.Trim(); rules = rules.Trim(false); deps = deps.Trim(); deps = deps.Trim(false); if(generateInfoPlistFile) { // augment existing rules with new rules to manage Info.plist file deps.Append(wxT(" $(IntermediateDirectory)/$(ProjectName).app/Contents/Info.plist")); rules.Append(wxString(wxT("\n## rule to copy the Info.plist file into the bundle\n")) + wxT("$(IntermediateDirectory)/$(ProjectName).app/Contents/Info.plist: Info.plist\n") + wxT("\tmkdir -p '$(IntermediateDirectory)/$(ProjectName).app/Contents' && cp -f " "Info.plist '$(IntermediateDirectory)/$(ProjectName).app/Contents/Info.plist'")); } if(generateIcon) { // augment existing rules with new rules to manage Info.plist file deps.Append(wxT(" $(IntermediateDirectory)/$(ProjectName).app/Contents/Resources/") + iconName); rules.Append( wxT("\n## rule to copy the icon file into the " "bundle\n$(IntermediateDirectory)/$(ProjectName).app/Contents/Resources/") + iconName + wxT(": ") + iconName + wxT("\n\tmkdir -p '$(IntermediateDirectory)/$(ProjectName).app/Contents/Resources/' && cp -f ") + iconName + wxT(" '$(IntermediateDirectory)/$(ProjectName).app/Contents/Resources/") + iconName + wxT("'")); } // set the new rules rules = rules.Trim(); rules = rules.Trim(false); deps = deps.Trim(); deps = deps.Trim(false); wxString prebuilstep; prebuilstep << deps << wxT("\n"); prebuilstep << rules; prebuilstep << wxT("\n"); // Set the content only if there is real content to add wxString tmpPreBuildStep(prebuilstep); tmpPreBuildStep.Trim().Trim(false); buildConfig->SetPreBuildCustom(prebuilstep); } // end if settings->SetBuildConfiguration(buildConfig); } // end for project->SetSettings(settings); }
void clCxxWorkspace::AddProjectToBuildMatrix(ProjectPtr prj) { if(!prj) { wxMessageBox(_("AddProjectToBuildMatrix was called with NULL project"), _("CodeLite"), wxICON_WARNING | wxOK); return; } BuildMatrixPtr matrix = GetBuildMatrix(); wxString selConfName = matrix->GetSelectedConfigurationName(); std::list<WorkspaceConfigurationPtr> wspList = matrix->GetConfigurations(); std::list<WorkspaceConfigurationPtr>::iterator iter = wspList.begin(); for(; iter != wspList.end(); iter++) { WorkspaceConfigurationPtr workspaceConfig = (*iter); WorkspaceConfiguration::ConfigMappingList prjList = workspaceConfig->GetMapping(); wxString wspCnfName = workspaceConfig->GetName(); ProjectSettingsCookie cookie; // getSettings is a bit misleading, since it actually create new instance which represents the layout // of the XML ProjectSettingsPtr settings = prj->GetSettings(); BuildConfigPtr prjBldConf = settings->GetFirstBuildConfiguration(cookie); BuildConfigPtr matchConf; if(!prjBldConf) { // the project does not have any settings, create new one and add it prj->SetSettings(settings); settings = prj->GetSettings(); prjBldConf = settings->GetFirstBuildConfiguration(cookie); matchConf = prjBldConf; } else { matchConf = prjBldConf; // try to locate the best match to add to the workspace while(prjBldConf) { wxString projBldConfName = prjBldConf->GetName(); if(wspCnfName == projBldConfName) { // we found a suitable match use it instead of the default one matchConf = prjBldConf; break; } prjBldConf = settings->GetNextBuildConfiguration(cookie); } } ConfigMappingEntry entry(prj->GetName(), matchConf->GetName()); prjList.push_back(entry); (*iter)->SetConfigMappingList(prjList); matrix->SetConfiguration((*iter)); } // and set the configuration name matrix->SetSelectedConfigurationName(selConfName); // this will also reset the build matrix pointer SetBuildMatrix(matrix); }
void OutputPane::OnBuildWindowDClick(const wxString &line, int lineno) { wxString fileName, strLineNumber; bool match = false; //get the selected compiler for the current line that was DClicked if(lineno >= (int)m_buildLineInfo.GetCount()){ return; } //find the project selected build configuration for the workspace selected //configuration wxString projectName = m_buildLineInfo.Item(lineno); if(projectName.IsEmpty()) return; BuildMatrixPtr matrix = ManagerST::Get()->GetWorkspaceBuildMatrix(); wxString projecBuildConf = matrix->GetProjectSelectedConf(matrix->GetSelectedConfigurationName(), projectName ); ProjectSettingsPtr settings = ManagerST::Get()->GetProject(projectName)->GetSettings(); if(!settings) { return; } BuildConfigPtr bldConf = settings->GetBuildConfiguration(projecBuildConf); if( !bldConf ) { return; } wxString cmpType = bldConf->GetCompilerType(); CompilerPtr cmp = BuildSettingsConfigST::Get()->GetCompiler(cmpType); if( !cmp ) { return; } long idx; //try to match an error pattern to the line RegexProcessor re(cmp->GetErrPattern()); cmp->GetErrFileNameIndex().ToLong(&idx); if(re.GetGroup(line, idx, fileName)) { //we found the file name, get the line number cmp->GetErrLineNumberIndex().ToLong(&idx); re.GetGroup(line, idx, strLineNumber); match = true; } //try to match warning pattern if(!match) { RegexProcessor re(cmp->GetWarnPattern()); cmp->GetWarnFileNameIndex().ToLong(&idx); if(re.GetGroup(line, idx, fileName)) { //we found the file name, get the line number cmp->GetWarnLineNumberIndex().ToLong(&idx); re.GetGroup(line, idx, strLineNumber); match = true; } } if(match) { long lineNumber = -1; strLineNumber.ToLong(&lineNumber); // open the file in the editor // get the project name that is currently being built wxString projName(wxEmptyString); if(lineno < (int)m_buildLineInfo.GetCount()) { projName = m_buildLineInfo.Item(lineno); } // if no project found, dont do anything if(projName.IsEmpty()) { return; } DirSaver ds; ProjectPtr pro = ManagerST::Get()->GetProject(projName); ::wxSetWorkingDirectory(pro->GetFileName().GetPath()); wxFileName fn(fileName); fn.MakeAbsolute(pro->GetFileName().GetPath()); ManagerST::Get()->OpenFile(fn.GetFullPath(), projName, lineNumber - 1 ); } }
bool clCxxWorkspace::RemoveProject(const wxString& name, wxString& errMsg) { ProjectPtr proj = FindProjectByName(name, errMsg); if(!proj) { return false; } // remove the associated build configuration with this // project RemoveProjectFromBuildMatrix(proj); // remove the project from the internal map std::map<wxString, ProjectPtr>::iterator iter = m_projects.find(proj->GetName()); if(iter != m_projects.end()) { m_projects.erase(iter); } // update the xml file wxXmlNode* root = m_doc.GetRoot(); wxXmlNode* child = root->GetChildren(); while(child) { if(child->GetName() == wxT("Project") && child->GetPropVal(wxT("Name"), wxEmptyString) == name) { if(child->GetPropVal(wxT("Active"), wxEmptyString).CmpNoCase(wxT("Yes")) == 0) { // the removed project was active, // select new project to be active if(!m_projects.empty()) { std::map<wxString, ProjectPtr>::iterator iter = m_projects.begin(); SetActiveProject(iter->first, true); } } root->RemoveChild(child); delete child; break; } child = child->GetNext(); } // go over the dependencies list of each project and remove the project iter = m_projects.begin(); for(; iter != m_projects.end(); iter++) { ProjectPtr p = iter->second; if(p) { wxArrayString configs; // populate the choice control with the list of available configurations for this project ProjectSettingsPtr settings = p->GetSettings(); if(settings) { ProjectSettingsCookie cookie; BuildConfigPtr bldConf = settings->GetFirstBuildConfiguration(cookie); while(bldConf) { configs.Add(bldConf->GetName()); bldConf = settings->GetNextBuildConfiguration(cookie); } } // update each configuration of this project for(size_t i = 0; i < configs.GetCount(); i++) { wxArrayString deps = p->GetDependencies(configs.Item(i)); int where = deps.Index(name); if(where != wxNOT_FOUND) { deps.RemoveAt((size_t)where); } // update the configuration p->SetDependencies(deps, configs.Item(i)); } } } return SaveXmlFile(); }
void VcImporter::AddConfiguration(ProjectSettingsPtr settings, wxXmlNode* config) { // configuration name wxString name = XmlUtils::ReadString(config, wxT("Name")); name = name.BeforeFirst(wxT('|')); name.Replace(wxT(" "), wxT("_")); BuildConfigPtr le_conf(new BuildConfig(NULL)); le_conf->SetName(name); le_conf->SetIntermediateDirectory(XmlUtils::ReadString(config, wxT("IntermediateDirectory"))); // get the compiler settings wxXmlNode* cmpNode = XmlUtils::FindNodeByName(config, wxT("Tool"), wxT("VCCLCompilerTool")); // get the include directories le_conf->SetIncludePath(SplitString(XmlUtils::ReadString(cmpNode, wxT("AdditionalIncludeDirectories")))); le_conf->SetPreprocessor(XmlUtils::ReadString(cmpNode, wxT("PreprocessorDefinitions"))); // Select the best compiler for the import process (we select g++ by default) le_conf->SetCompilerType(m_compiler); // Get the configuration type long type = XmlUtils::ReadLong(config, wxT("ConfigurationType"), 1); wxString projectType; wxString errMsg; switch(type) { case 2: // dll projectType = Project::DYNAMIC_LIBRARY; break; case 4: // static library projectType = Project::STATIC_LIBRARY; break; case 1: // exe default: projectType = Project::EXECUTABLE; break; } le_conf->SetProjectType(projectType); // if project type is DLL or Executable, copy linker settings as well if(settings->GetProjectType(le_conf->GetName()) == Project::EXECUTABLE || settings->GetProjectType(le_conf->GetName()) == Project::DYNAMIC_LIBRARY) { wxXmlNode* linkNode = XmlUtils::FindNodeByName(config, wxT("Tool"), wxT("VCLinkerTool")); if(linkNode) { wxString outputFileName(XmlUtils::ReadString(linkNode, wxT("OutputFile"))); #ifndef __WXMSW__ outputFileName.Replace(wxT(".dll"), wxT(".so")); outputFileName.Replace(wxT(".exe"), wxT("")); #endif le_conf->SetOutputFileName(outputFileName); // read in the additional libraries & libpath wxString libs = XmlUtils::ReadString(linkNode, wxT("AdditionalDependencies")); // libs is a space delimited string wxStringTokenizer tk(libs, wxT(" ")); libs.Empty(); while(tk.HasMoreTokens()) { libs << tk.NextToken() << wxT(";"); } le_conf->SetLibraries(libs); le_conf->SetLibPath(XmlUtils::ReadString(linkNode, wxT("AdditionalLibraryDirectories"))); } } else { // static library wxXmlNode* libNode = XmlUtils::FindNodeByName(config, wxT("Tool"), wxT("VCLibrarianTool")); if(libNode) { wxString outputFileName(XmlUtils::ReadString(libNode, wxT("OutputFile"))); outputFileName.Replace(wxT("\\"), wxT("/")); wxString outputFileNameOnly = outputFileName.AfterLast(wxT('/')); wxString outputFilePath = outputFileName.BeforeLast(wxT('/')); if(m_compilerLowercase.Contains(wxT("gnu"))) { if(outputFileNameOnly.StartsWith(wxT("lib")) == false) { outputFileNameOnly.Prepend(wxT("lib")); } outputFileName.Clear(); outputFileName << outputFilePath << wxT("/") << outputFileNameOnly; outputFileName.Replace(wxT(".lib"), wxT(".a")); } le_conf->SetOutputFileName(outputFileName); } } // add the configuration settings->SetBuildConfiguration(le_conf); }
EditConfigurationDialog::EditConfigurationDialog( wxWindow* parent, const wxString &projectName, int id, wxString title, wxPoint pos, wxSize size, int style ) : wxDialog( parent, id, title, pos, size, style ) , m_projectName(projectName) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); wxBoxSizer* bSizer15; bSizer15 = new wxBoxSizer( wxVERTICAL ); m_panel6 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizer17; bSizer17 = new wxBoxSizer( wxHORIZONTAL ); m_configurationsList = new wxListBox( m_panel6, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); bSizer17->Add( m_configurationsList, 1, wxALL|wxEXPAND, 5 ); ProjectSettingsPtr settings = ManagerST::Get()->GetProjectSettings(m_projectName); if(settings){ ProjectSettingsCookie cookie; BuildConfigPtr bldConf = settings->GetFirstBuildConfiguration(cookie); while(bldConf){ m_configurationsList->Append(bldConf->GetName()); bldConf = settings->GetNextBuildConfiguration(cookie); } } if(m_configurationsList->GetCount() > 0) m_configurationsList->SetSelection(0); wxBoxSizer* bSizer18; bSizer18 = new wxBoxSizer( wxVERTICAL ); m_buttonDelete = new wxButton( m_panel6, wxID_ANY, wxT("&Delete"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer18->Add( m_buttonDelete, 0, wxALL, 5 ); m_buttonRename = new wxButton( m_panel6, wxID_ANY, wxT("&Rename"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer18->Add( m_buttonRename, 0, wxALL, 5 ); bSizer17->Add( bSizer18, 0, wxEXPAND, 5 ); m_panel6->SetSizer( bSizer17 ); m_panel6->Layout(); bSizer17->Fit( m_panel6 ); bSizer15->Add( m_panel6, 1, wxALL|wxEXPAND, 5 ); m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizer15->Add( m_staticline9, 0, wxEXPAND | wxALL, 5 ); wxBoxSizer* bSizer16; bSizer16 = new wxBoxSizer( wxHORIZONTAL ); m_buttonClose = new wxButton( this, wxID_OK, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer16->Add( m_buttonClose, 0, wxALL, 5 ); bSizer15->Add( bSizer16, 0, wxALIGN_CENTER, 5 ); this->SetSizer( bSizer15 ); this->Layout(); ConnectListBoxDClick(m_configurationsList, EditConfigurationDialog::OnItemDclick); ConnectButton(m_buttonClose, EditConfigurationDialog::OnButtonClose); ConnectButton(m_buttonRename, EditConfigurationDialog::OnButtonRename); ConnectButton(m_buttonDelete, EditConfigurationDialog::OnButtonDelete); }