#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

150 lines
3.6 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Input;
namespace ICSharpCode.AspNet.Mvc
{
public class AddMvcViewToProjectViewModel : ViewModelBase<AddMvcViewToProjectViewModel>
{
IMvcViewFileGenerator viewGenerator;
ISelectedMvcFolder selectedViewFolder;
IMvcFileService fileService;
MvcViewFileName viewFileName = new MvcViewFileName();
bool closed;
List<MvcViewEngineViewModel> viewEngines;
MvcViewEngineViewModel selectedViewEngine;
public AddMvcViewToProjectViewModel(ISelectedMvcFolder selectedViewFolder)
: this(
selectedViewFolder,
new MvcViewFileGenerator(),
new MvcFileService())
{
}
public AddMvcViewToProjectViewModel(
ISelectedMvcFolder selectedViewFolder,
IMvcViewFileGenerator viewGenerator,
IMvcFileService fileService)
{
this.selectedViewFolder = selectedViewFolder;
this.viewGenerator = viewGenerator;
this.fileService = fileService;
this.viewFileName.Folder = selectedViewFolder.Path;
CreateCommands();
AddViewEngines();
}
void CreateCommands()
{
AddMvcViewCommand = new DelegateCommand(param => AddMvcView(), param => CanAddMvcView());
}
public ICommand AddMvcViewCommand { get; private set; }
public string ViewName {
get { return viewFileName.ViewName; }
set { viewFileName.ViewName = value; }
}
public bool IsClosed {
get { return closed; }
set {
closed = value;
OnPropertyChanged(viewModel => viewModel.IsClosed);
}
}
void AddViewEngines()
{
viewEngines = new List<MvcViewEngineViewModel>();
AddAspxViewEngine();
AddRazorViewEngine();
SelectAspxViewEngine();
}
void AddAspxViewEngine()
{
var viewType = new MvcViewEngineViewModel("ASPX", MvcTextTemplateType.Aspx);
AddViewEngine(viewType);
}
void AddRazorViewEngine()
{
var viewType = new MvcViewEngineViewModel("Razor", MvcTextTemplateType.Razor);
AddViewEngine(viewType);
}
void AddViewEngine(MvcViewEngineViewModel viewEngine)
{
viewEngines.Add(viewEngine);
}
void SelectAspxViewEngine()
{
SelectedViewEngine = viewEngines[0];
}
public IEnumerable<MvcViewEngineViewModel> ViewEngines {
get { return viewEngines; }
}
public MvcViewEngineViewModel SelectedViewEngine {
get { return selectedViewEngine; }
set {
selectedViewEngine = value;
viewFileName.TemplateType = selectedViewEngine.TemplateType;
}
}
public bool CanAddMvcView()
{
return viewFileName.HasValidViewName();
}
public void AddMvcView()
{
GenerateMvcViewFile();
AddMvcViewFileToProject();
OpenMvcViewFileCreated();
IsClosed = true;
}
void GenerateMvcViewFile()
{
ConfigureMvcViewGenerator();
viewFileName.TemplateLanguage = GetTemplateLanguage();
viewGenerator.GenerateFile(viewFileName);
}
void ConfigureMvcViewGenerator()
{
viewGenerator.Project = selectedViewFolder.Project;
viewGenerator.TemplateLanguage = GetTemplateLanguage();
viewGenerator.TemplateType = selectedViewEngine.TemplateType;
}
MvcTextTemplateLanguage GetTemplateLanguage()
{
return selectedViewFolder.GetTemplateLanguage();
}
void AddMvcViewFileToProject()
{
string fileName = viewFileName.GetFileName();
selectedViewFolder.AddFileToProject(fileName);
}
void OpenMvcViewFileCreated()
{
string path = viewFileName.GetPath();
fileService.OpenFile(path);
}
}
}