示例#1
0
        public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
        {
            var currentFile     = DTEHelper.GetProjectItemRelativePath(projectItem);
            var viewLocation    = Path.GetDirectoryName(DTEHelper.GetProjectItemRelativePath(projectItem));
            var allProjectItems = DTEHelper.GetAllProjectItems().Select(DTEHelper.GetProjectItemRelativePath).ToList();

            viewModel = new PageWindowViewModel()
            {
                ViewName          = projectItem.Name,
                ViewLocation      = viewLocation,
                CreateViewModel   = true,
                ViewModelName     = WizardHelpers.GenerateViewModelName(Path.GetFileNameWithoutExtension(projectItem.Name)),
                ViewModelLocation = WizardHelpers.GenerateViewModelLocation(viewLocation),
                MasterPages       = allProjectItems
                                    .Where(p => p.EndsWith(".dotmaster", StringComparison.CurrentCultureIgnoreCase))
                                    .OrderBy(p => p)
                                    .Where(p => !string.Equals(p, currentFile, StringComparison.CurrentCultureIgnoreCase))
                                    .ToList(),
                Folders = allProjectItems
                          .Select(p => p.Substring(0, p.LastIndexOfAny(new[] { '/', '\\' }) + 1).TrimEnd('/', '\\'))
                          .Distinct()
                          .OrderBy(p => p)
                          .ToList()
            };

            var window = new PageWindow()
            {
                DataContext = viewModel
            };

            if (window.ShowDialog() != true)
            {
                throw new WizardCancelledException();
            }

            // generate items
            DTEHelper.ExecuteSafe(() => GenerateView(viewModel, projectItem), "Couldn't create the view!");
            if (viewModel.CreateViewModel)
            {
                DTEHelper.ExecuteSafe(() => GenerateViewModel(viewModel, projectItem.ContainingProject), "Couldn't create the viewmodel!");
            }
        }
示例#2
0
        private void GenerateViewModel(PageWindowViewModel pageWindowViewModel, Project project)
        {
            // find path
            var folder = DTEHelper.GetOrCreateFolder(project.ProjectItems, pageWindowViewModel.ViewModelLocation);
            var viewModelTemplatePath = Path.Combine(templateDir, "DotvvmViewModel.zip\\DotvvmViewModel.vstemplate");

            // create a viewmodel
            folder.AddFromTemplate(viewModelTemplatePath, pageWindowViewModel.ViewModelName);
            var projectItem = folder.OfType <ProjectItem>().FirstOrDefault(p => p.Name == pageWindowViewModel.ViewModelName + ".cs");

            if (projectItem != null)
            {
                // regenerate the viewmodel
                var template = new ViewModelTemplate()
                {
                    ViewModel = pageWindowViewModel
                };
                File.WriteAllText(DTEHelper.GetProjectItemFullPath(projectItem), template.TransformText(), Encoding.UTF8);
            }
        }
示例#3
0
        public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
        {
            var viewLocation = DTEHelper.GetProjectItemRelativePath(projectItem);

            viewModel = new PageWindowViewModel()
            {
                ViewName = projectItem.Name,
                ViewLocation = viewLocation,
                CreateViewModel = true,
                ViewModelName = GenerateViewModelName(projectItem.Name),
                ViewModelLocation = GenerateViewModelLocation(viewLocation),
                // TODO
            };

            var window = new PageWindow()
            {
                DataContext = viewModel
            };
            if (window.ShowDialog() != true)
            {
                throw new WizardCancelledException();
            }
        }
示例#4
0
        private void GenerateView(PageWindowViewModel pageWindowViewModel, ProjectItem projectItem)
        {
            if (pageWindowViewModel.EmbedInMasterPage)
            {
                // try to extract placeholders from the master page
                var masterPageFileName = Path.Combine(DTEHelper.GetProjectPath(projectItem.ContainingProject), pageWindowViewModel.MasterPageLocation);
                pageWindowViewModel.ContentPlaceHolderIds = new MasterPageBuilder().ExtractPlaceHolderIds(masterPageFileName);
            }

            // generate namespace for viewmodel
            var rootNamespace = projectItem.ContainingProject.Properties.Item("DefaultNamespace").Value as string;

            pageWindowViewModel.ViewModelNamespace     = WizardHelpers.GenerateViewModelNamespace(rootNamespace, pageWindowViewModel.ViewModelLocation);
            pageWindowViewModel.ViewModelRootNamespace = rootNamespace;

            // run template
            var template = new PageTemplate()
            {
                ViewModel = pageWindowViewModel
            };

            File.WriteAllText(DTEHelper.GetProjectItemFullPath(projectItem), template.TransformText(), Encoding.UTF8);
        }