public override ProjectTemplateResult CreateProjects(ProjectTemplateOptions options) { var result = new ProjectTemplateResult(options); StandardHeader.SetHeaders(); if (solutionDescriptor != null) { if (!solutionDescriptor.AddContents(options.SolutionFolder, result, languagename)) { return(null); } } if (projectDescriptor != null) { bool success = projectDescriptor.CreateProject(result, languagename, options.SolutionFolder); if (!success) { return(null); } } return(result); }
public override FileTemplateResult Create(FileTemplateOptions options) { FileTemplateResult result = new FileTemplateResult(options); StandardHeader.SetHeaders(); StringParserPropertyContainer.FileCreation["StandardNamespace"] = options.Namespace; StringParserPropertyContainer.FileCreation["FullName"] = options.FileName; StringParserPropertyContainer.FileCreation["FileName"] = Path.GetFileName(options.FileName); StringParserPropertyContainer.FileCreation["FileNameWithoutExtension"] = Path.GetFileNameWithoutExtension(options.FileName); StringParserPropertyContainer.FileCreation["Extension"] = Path.GetExtension(options.FileName); StringParserPropertyContainer.FileCreation["Path"] = Path.GetDirectoryName(options.FileName); StringParserPropertyContainer.FileCreation["ClassName"] = options.ClassName; // when adding a file to a project (but not when creating a standalone file while a project is open): var project = options.Project; if (project != null && !options.IsUntitled) { // add required assembly references to the project foreach (ReferenceProjectItem reference in RequiredAssemblyReferences) { IEnumerable <ProjectItem> refs = project.GetItemsOfType(ItemType.Reference); if (!refs.Any(projItem => string.Equals(projItem.Include, reference.Include, StringComparison.OrdinalIgnoreCase))) { ReferenceProjectItem projItem = (ReferenceProjectItem)reference.CloneFor(project); ProjectService.AddProjectItem(project, projItem); //ProjectBrowserPad.RefreshViewAsync(); } } } foreach (FileDescriptionTemplate newfile in FileDescriptionTemplates) { if (!IsFilenameAvailable(StringParser.Parse(newfile.Name))) { MessageService.ShowError(string.Format("Filename {0} is in use.\nChoose another one", StringParser.Parse(newfile.Name))); // TODO : translate return(null); } } try { var filesToOpen = new List <FileName>(); ScriptRunner scriptRunner = new ScriptRunner(); foreach (FileDescriptionTemplate newFile in FileDescriptionTemplates) { FileOperationResult opresult = FileUtility.ObservedSave( () => { OpenedFile resultFile; bool shouldOpen; if (!String.IsNullOrEmpty(newFile.BinaryFileName)) { resultFile = SaveFile(newFile, null, newFile.BinaryFileName, options, out shouldOpen); } else { resultFile = SaveFile(newFile, scriptRunner.CompileScript(this, newFile), null, options, out shouldOpen); } if (resultFile != null) { result.NewOpenedFiles.Add(resultFile); result.NewFiles.Add(resultFile.FileName); if (shouldOpen) { filesToOpen.Add(resultFile.FileName); } } }, FileName.Create(StringParser.Parse(newFile.Name)) ); if (opresult != FileOperationResult.OK) { return(null); } } // Run creation actions if (createActions != null) { createActions(result); } foreach (var filename in filesToOpen.Intersect(result.NewFiles)) { SD.FileService.OpenFile(filename); } } finally { // Now that the view contents foreach (var file in result.NewOpenedFiles) { file.CloseIfAllViewsClosed(); } result.NewOpenedFiles.RemoveAll(f => f.RegisteredViewContents.Count == 0); } // raise FileCreated event for the new files. foreach (var fileName in result.NewFiles) { FileService.FireFileCreated(fileName, false); } if (project != null) { project.Save(); } return(result); }