Browse Source

Add Razor layout and ASP.NET master page options to ASP.NET MVC Add View dialog.

pull/18/head
Matt Ward 15 years ago
parent
commit
c2a505b93d
  1. 1
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  2. 39
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml
  3. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  4. 31
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/BooleanToVisibilityConverter.cs
  5. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  6. 101
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  7. 88
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/BooleanToVisibilityConverterTests.cs

1
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -59,6 +59,7 @@ @@ -59,6 +59,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\AddMvcViewToProjectViewModel.cs" />
<Compile Include="Src\BooleanToVisibilityConverter.cs" />
<Compile Include="Src\CloseDialogBehaviour.cs" />
<Compile Include="Src\DelegateCommand.cs" />
<Compile Include="Src\IAddMvcItemToProjectView.cs" />

39
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
<Window
x:Class="ICSharpCode.AspNet.Mvc.AddMvcViewToProjectView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:aspnetmvcaddin="clr-namespace:ICSharpCode.AspNet.Mvc"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:mvc="clr-namespace:ICSharpCode.AspNet.Mvc"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@ -14,6 +15,7 @@ @@ -14,6 +15,7 @@
<Window.Resources>
<Style TargetType="Button" BasedOn="{x:Static core:GlobalStyles.ButtonStyle}"/>
<aspnetmvcaddin:BooleanToVisibilityConverter x:Key="BoolToVisibility" Hidden="True"/>
<DataTemplate x:Key="ViewEngineTemplate">
<TextBlock Text="{Binding Name}"/>
@ -27,6 +29,9 @@ @@ -27,6 +29,9 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
@ -89,12 +94,44 @@ @@ -89,12 +94,44 @@
Text="{Binding Path=ModelClassName, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=SelectedModelClass}"/>
<Label
Grid.Row="6"
Margin="0, 20, 0, 0"
Visibility="{Binding Path=IsAspxViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
Content="Use Master Page:"/>
<Label
Grid.Row="6"
Margin="0, 20, 0, 0"
Visibility="{Binding Path=IsRazorViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
Content="Use Layout:"/>
<CheckBox
Grid.Column="1"
Grid.Row="6"
Margin="0, 28, 0, 0"
IsChecked="{Binding Path=IsContentPage}"/>
<Label
Grid.Row="7"
Visibility="{Binding Path=IsAspxViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
IsEnabled="{Binding Path=IsContentPage}"
Content="Master Page:"/>
<Label
Grid.Row="7"
Visibility="{Binding Path=IsRazorViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
IsEnabled="{Binding Path=IsContentPage}"
Content="Layout:"/>
<TextBox
Grid.Row="7"
Grid.Column="1"
IsEnabled="{Binding Path=IsContentPage}"
Text="{Binding Path=ContentPage}"/>
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="4"
Grid.ColumnSpan="2"
Grid.Row="6">
Grid.Row="9">
<Button
Margin="2, 0"
Content="_Add"

32
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs

@ -17,7 +17,9 @@ namespace ICSharpCode.AspNet.Mvc @@ -17,7 +17,9 @@ namespace ICSharpCode.AspNet.Mvc
bool closed;
List<MvcViewEngineViewModel> viewEngines;
MvcViewEngineViewModel selectedViewEngine;
bool stronglyTypedView;
bool isStronglyTypedView;
bool isContentPage;
MvcModelClassViewModelsForSelectedFolder modelClassesForSelectedFolder;
public AddMvcViewToProjectViewModel(ISelectedMvcFolder selectedViewFolder)
@ -105,6 +107,27 @@ namespace ICSharpCode.AspNet.Mvc @@ -105,6 +107,27 @@ namespace ICSharpCode.AspNet.Mvc
set {
selectedViewEngine = value;
viewFileName.TemplateType = selectedViewEngine.TemplateType;
UpdateSelectedViewEngineFlags();
}
}
void UpdateSelectedViewEngineFlags()
{
IsAspxViewEngineSelected = selectedViewEngine.TemplateType.IsAspx();
IsRazorViewEngineSelected = selectedViewEngine.TemplateType.IsRazor();
OnPropertyChanged(viewModel => viewModel.IsAspxViewEngineSelected);
OnPropertyChanged(viewModel => viewModel.IsRazorViewEngineSelected);
}
public bool IsRazorViewEngineSelected { get; private set; }
public bool IsAspxViewEngineSelected { get; private set; }
public bool IsContentPage {
get { return isContentPage; }
set {
isContentPage = value;
OnPropertyChanged(viewModel => viewModel.IsContentPage);
}
}
@ -163,10 +186,10 @@ namespace ICSharpCode.AspNet.Mvc @@ -163,10 +186,10 @@ namespace ICSharpCode.AspNet.Mvc
}
public bool IsStronglyTypedView {
get { return stronglyTypedView; }
get { return isStronglyTypedView; }
set {
stronglyTypedView = value;
if (stronglyTypedView) {
isStronglyTypedView = value;
if (isStronglyTypedView) {
modelClassesForSelectedFolder.GetModelClasses();
OnPropertyChanged(viewModel => viewModel.ModelClasses);
}
@ -180,6 +203,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -180,6 +203,7 @@ namespace ICSharpCode.AspNet.Mvc
public MvcModelClassViewModel SelectedModelClass { get; set; }
public string ModelClassName { get; set; }
public string ContentPage { get; set; }
}
}

31
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/BooleanToVisibilityConverter.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
// 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.Globalization;
using System.Windows;
using System.Windows.Data;
namespace ICSharpCode.AspNet.Mvc
{
public class BooleanToVisibilityConverter : IValueConverter
{
public bool Hidden { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value) {
return Visibility.Visible;
} else if (Hidden) {
return Visibility.Hidden;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Visibility visibility = (Visibility)value;
return visibility == Visibility.Visible;
}
}
}

4
src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj

@ -38,6 +38,9 @@ @@ -38,6 +38,9 @@
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
@ -71,6 +74,7 @@ @@ -71,6 +74,7 @@
<Compile Include="Src\AddMvcControllerToProjectViewModelTests.cs" />
<Compile Include="Src\AddMvcViewToProjectCommandTests.cs" />
<Compile Include="Src\AddMvcViewToProjectViewModelTests.cs" />
<Compile Include="Src\BooleanToVisibilityConverterTests.cs" />
<Compile Include="Src\IsMvcControllerFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluatorTests.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />

101
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs

@ -513,5 +513,106 @@ namespace AspNet.Mvc.Tests @@ -513,5 +513,106 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual("MyNamespace.MyClass", modelClassName);
}
[Test]
public void IsRazorViewEngineSelected_RazorViewEngineSelected_ReturnsTrue()
{
CreateViewModel();
CSharpProjectSelected();
SelectRazorViewEngine();
bool selected = viewModel.IsRazorViewEngineSelected;
Assert.IsTrue(selected);
}
[Test]
public void IsAspxViewEngineSelected_RazorViewEngineSelected_ReturnsFalse()
{
CreateViewModel();
CSharpProjectSelected();
SelectRazorViewEngine();
bool selected = viewModel.IsAspxViewEngineSelected;
Assert.IsFalse(selected);
}
[Test]
public void IsAspxViewEngineSelected_AspxViewEngineSelected_ReturnsTrue()
{
CreateViewModel();
CSharpProjectSelected();
SelectAspxViewEngine();
bool selected = viewModel.IsAspxViewEngineSelected;
Assert.IsTrue(selected);
}
[Test]
public void IsRazorViewEngineSelected_AspxViewEngineSelected_ReturnsFalse()
{
CreateViewModel();
CSharpProjectSelected();
SelectAspxViewEngine();
bool selected = viewModel.IsRazorViewEngineSelected;
Assert.IsFalse(selected);
}
[Test]
public void IsAspxViewEngineSelected_NewViewModelCreatedAndUserHasNotMadeSelection_ReturnsTrue()
{
CreateViewModel();
CSharpProjectSelected();
bool selected = viewModel.IsAspxViewEngineSelected;
Assert.IsTrue(selected);
}
[Test]
public void SelectedViewEngine_ChangedToAspxViewEngineFromRazorViewEngine_PropertyChangedEventsFiredForIsAspxViewEngineSelected()
{
CreateViewModel();
CSharpProjectSelected();
SelectRazorViewEngine();
MonitorPropertyChangedEvents();
SelectAspxViewEngine();
bool fired = propertyChangedEvents.Contains("IsAspxViewEngineSelected");
Assert.IsTrue(fired);
}
[Test]
public void SelectedViewEngine_ChangedToRazorViewEngineFromAspxViewEngine_PropertyChangedEventsFiredForIsRazorViewEngineSelected()
{
CreateViewModel();
CSharpProjectSelected();
SelectAspxViewEngine();
MonitorPropertyChangedEvents();
SelectRazorViewEngine();
bool fired = propertyChangedEvents.Contains("IsRazorViewEngineSelected");
Assert.IsTrue(fired);
}
[Test]
public void IsContentPage_ChangedFromFalseToTrue_PropertyChangedEventFiresForIsContentPage()
{
CreateViewModel();
CSharpProjectSelected();
viewModel.IsContentPage = false;
MonitorPropertyChangedEvents();
viewModel.IsContentPage = true;
bool fired = propertyChangedEvents.Contains("IsContentPage");
Assert.IsTrue(fired);
}
}
}

88
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/BooleanToVisibilityConverterTests.cs

@ -0,0 +1,88 @@ @@ -0,0 +1,88 @@
// 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.Globalization;
using System.Windows;
using ICSharpCode.AspNet.Mvc;
using NUnit.Framework;
namespace AspNet.Mvc.Tests
{
[TestFixture]
public class BooleanToVisibilityConverterTests
{
BooleanToVisibilityConverter converter;
void CreateConverter()
{
converter = new BooleanToVisibilityConverter();
}
Visibility Convert(bool value)
{
return (Visibility)converter.Convert(value, null, null, CultureInfo.InvariantCulture);
}
bool ConvertBack(Visibility visibility)
{
return (bool)converter.ConvertBack(visibility, null, null, CultureInfo.InvariantCulture);
}
[Test]
public void Convert_FalseWithDefaultBehaviour_ReturnsCollapsed()
{
CreateConverter();
Visibility visibility = Convert(false);
Assert.AreEqual(Visibility.Collapsed, visibility);
}
[Test]
public void Convert_TrueWithDefaultBehaviour_ReturnsVisible()
{
CreateConverter();
Visibility visibility = Convert(true);
Assert.AreEqual(Visibility.Visible, visibility);
}
[Test]
public void Convert_FalseWithHiddenSetToTrue_ReturnsHidden()
{
CreateConverter();
converter.Hidden = true;
Visibility visibility = Convert(false);
Assert.AreEqual(Visibility.Hidden, visibility);
}
[Test]
public void ConvertBack_VisibleWithDefaultBehaviour_ReturnsTrue()
{
CreateConverter();
bool value = ConvertBack(Visibility.Visible);
Assert.IsTrue(value);
}
[Test]
public void ConvertBack_HiddenWithDefaultBehaviour_ReturnsFalse()
{
CreateConverter();
bool value = ConvertBack(Visibility.Hidden);
Assert.IsFalse(value);
}
[Test]
public void ConvertBack_CollapsedWithDefaultBehaviour_ReturnsFalse()
{
CreateConverter();
bool value = ConvertBack(Visibility.Collapsed);
Assert.IsFalse(value);
}
}
}
Loading…
Cancel
Save