Skip to content

Commit

Permalink
Removed generated ButtonAction sample pane option
Browse files Browse the repository at this point in the history
  • Loading branch information
Arlodotexe committed Jun 15, 2023
1 parent d063715 commit 102f46a
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 287 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ internal class GeneratedSampleOptionTemplateSelector : DataTemplateSelector
{
public DataTemplate? BoolOptionTemplate { get; set; }

public DataTemplate? ButtonActionTemplate { get; set; }

public DataTemplate? MultiChoiceOptionTemplate { get; set; }

public DataTemplate? SliderOptionTemplate { get; set; }
Expand All @@ -28,7 +26,6 @@ protected override DataTemplate SelectTemplateCore(object item, DependencyObject
return item switch
{
ToolkitSampleBoolOptionMetadataViewModel => BoolOptionTemplate ?? base.SelectTemplateCore(item, container),
ToolkitSampleButtonActionMetadataViewModel => ButtonActionTemplate ?? base.SelectTemplateCore(item, container),
ToolkitSampleMultiChoiceOptionMetadataViewModel => MultiChoiceOptionTemplate ?? base.SelectTemplateCore(item, container),
ToolkitSampleNumericOptionMetadataViewModel { ShowAsNumberBox: true } => NumberBoxOptionTemplate ?? base.SelectTemplateCore(item, container),
ToolkitSampleNumericOptionMetadataViewModel { ShowAsNumberBox: false } => SliderOptionTemplate ?? base.SelectTemplateCore(item, container),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,64 +12,58 @@
d:DesignWidth="400"
mc:Ignorable="d">

<UserControl.Resources>
<local:GeneratedSampleOptionTemplateSelector x:Key="GeneratedSampleOptionTemplateSelector">
<local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleBoolOptionMetadataViewModel">
<ToggleSwitch Header="{x:Bind Title, Mode=OneWay}"
<UserControl.Resources>
<local:GeneratedSampleOptionTemplateSelector x:Key="GeneratedSampleOptionTemplateSelector">
<local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleBoolOptionMetadataViewModel">
<ToggleSwitch Header="{x:Bind Title, Mode=OneWay}"
IsOn="{x:Bind BoolValue, Mode=TwoWay}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.ButtonActionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleButtonActionMetadataViewModel">
<Button Command="{x:Bind CommandValue, Mode=TwoWay}"
Content="{x:Bind Label, Mode=OneWay}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.ButtonActionTemplate>
<local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleMultiChoiceOptionMetadataViewModel">
<ComboBox Header="{x:Bind Title, Mode=OneWay}"
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleMultiChoiceOptionMetadataViewModel">
<ComboBox Header="{x:Bind Title, Mode=OneWay}"
ItemsSource="{x:Bind Options}"
SelectedIndex="0"
SelectedItem="{x:Bind Value, Mode=TwoWay}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.SliderOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleNumericOptionMetadataViewModel">
<Slider Header="{x:Bind Title, Mode=OneWay}"
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.SliderOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleNumericOptionMetadataViewModel">
<Slider Header="{x:Bind Title, Mode=OneWay}"
Maximum="{x:Bind Max, Mode=OneWay}"
Minimum="{x:Bind Min, Mode=OneWay}"
StepFrequency="{x:Bind Step, Mode=OneWay}"
Value="{x:Bind Initial, Mode=TwoWay}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.SliderOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.NumberBoxOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleNumericOptionMetadataViewModel">
<muxc:NumberBox Header="{x:Bind Title, Mode=OneWay}"
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.SliderOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.NumberBoxOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleNumericOptionMetadataViewModel">
<muxc:NumberBox Header="{x:Bind Title, Mode=OneWay}"
Maximum="{x:Bind Max, Mode=OneWay}"
Minimum="{x:Bind Min, Mode=OneWay}"
SmallChange="{x:Bind Step, Mode=OneWay}"
SpinButtonPlacementMode="Compact"
Value="{x:Bind Initial, Mode=TwoWay}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.NumberBoxOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.TextOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleTextOptionMetadataViewModel">
<TextBox HorizontalAlignment="Stretch"
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.NumberBoxOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.TextOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleTextOptionMetadataViewModel">
<TextBox HorizontalAlignment="Stretch"
Header="{x:Bind Title, Mode=OneWay}"
Text="{x:Bind PlaceholderText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.TextOptionTemplate>
</local:GeneratedSampleOptionTemplateSelector>
</UserControl.Resources>
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.TextOptionTemplate>
</local:GeneratedSampleOptionTemplateSelector>
</UserControl.Resources>

<ItemsControl ItemTemplateSelector="{StaticResource GeneratedSampleOptionTemplateSelector}"
<ItemsControl ItemTemplateSelector="{StaticResource GeneratedSampleOptionTemplateSelector}"
ItemsSource="{x:Bind SampleOptions, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"
Spacing="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</UserControl>
Original file line number Diff line number Diff line change
Expand Up @@ -382,58 +382,4 @@ public class UserControl {{ }}

result.AssertDiagnosticsAre(DiagnosticDescriptors.SamplePaneMultiChoiceOptionWithNoChoices, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
}

[TestMethod]
public void GeneratedPaneOption_ButtonAction()
{
var sampleProjectAssembly = $@"
using System.ComponentModel;
using CommunityToolkit.Tooling.SampleGen;
using CommunityToolkit.Tooling.SampleGen.Attributes;
namespace MyApp
{{
[ToolkitSample(id: nameof(Sample), ""Test Sample"", description: """")]
public partial class Sample : Windows.UI.Xaml.Controls.UserControl
{{
[ToolkitSampleButtonAction(label: ""Raise notification"")]
private void RaiseNotification()
{{
}}
}}
}}
namespace Windows.UI.Xaml.Controls
{{
public class UserControl {{ }}
}}"
.ToSyntaxTree()
.CreateCompilation("MyApp.Samples")
.ToMetadataReference();

// Create application head that references generated sample project
var headCompilation = string.Empty
.ToSyntaxTree()
.CreateCompilation("CommunityToolkit.App.Head")
.AddReferences(sampleProjectAssembly);

// Run source generator
var result = headCompilation.RunSourceGenerator<ToolkitSampleMetadataGenerator>();

result.AssertDiagnosticsAre();
result.AssertNoCompilationErrors();

Assert.AreEqual(result.Compilation.GetFileContentsByName("ToolkitSampleRegistry.g.cs"), """
#nullable enable
namespace CommunityToolkit.Tooling.SampleGen;
public static class ToolkitSampleRegistry
{
public static System.Collections.Generic.Dictionary<string, CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleMetadata> Listing
{ get; } = new() {
["Sample"] = new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleMetadata("Sample", "Test Sample", "", typeof(MyApp.Sample), () => new MyApp.Sample(), null, null, new CommunityToolkit.Tooling.SampleGen.Metadata.IGeneratedToolkitSampleOptionViewModel[] { new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleButtonActionMetadataViewModel(name: "RaiseNotification", label: "Raise notification", title: "") })
};
}
""", "Unexpected code generated");
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,6 @@ void Execute(IncrementalValuesProvider<ISymbol> types, bool skipDiagnostics = fa
{
item = (x.Item1, textOptionAttribute);
}
else if (x.Item2.TryReconstructAs<ToolkitSampleButtonActionAttribute>() is ToolkitSampleButtonActionAttribute buttonActionAttribute)
{
// Auto-assign the attached method name as the generated property name.
buttonActionAttribute.Name = x.Item1.Name;

item = (x.Item1.ContainingSymbol, buttonActionAttribute);
}

// Add extra property data, like Title, back to Attribute
if (item.Attribute is not null && x.Item2.TryGetNamedArgument(nameof(ToolkitSampleOptionBaseAttribute.Title), out string? title) && !string.IsNullOrWhiteSpace(title))
Expand Down Expand Up @@ -255,9 +248,7 @@ private static void ReportDiagnosticsGeneratedOptionsPane(SourceProductionContex
ctx.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.SamplePaneOptionWithDuplicateName, item.SelectMany(x => x.Item1.Locations).FirstOrDefault(), item.Key));

// Check for generated options that conflict with an existing property name
var generatedOptionsWithConflictingPropertyNames = generatedOptionPropertyData
.Where(x => x.Item2 is not ToolkitSampleButtonActionAttribute)
.Where(x => x.Item1 is INamedTypeSymbol sym && GetAllMembers(sym).Any(y => x.Item2.Name == y.Name));
var generatedOptionsWithConflictingPropertyNames = generatedOptionPropertyData.Where(x => x.Item1 is INamedTypeSymbol sym && GetAllMembers(sym).Any(y => x.Item2.Name == y.Name));

foreach (var item in generatedOptionsWithConflictingPropertyNames)
ctx.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.SamplePaneOptionWithConflictingName, item.Item1.Locations.FirstOrDefault(), item.Item2.Name));
Expand Down Expand Up @@ -312,10 +303,6 @@ private static IEnumerable<string> BuildNewGeneratedSampleOptionMetadataSource(T
{
yield return $@"new {typeof(ToolkitSampleBoolOptionMetadataViewModel).FullName}(name: ""{boolAttribute.Name}"", defaultState: {boolAttribute.DefaultState?.ToString().ToLower()}, title: ""{boolAttribute.Title}"")";
}
else if (item is ToolkitSampleButtonActionAttribute buttonAttribute)
{
yield return $@"new {typeof(ToolkitSampleButtonActionMetadataViewModel).FullName}(name: ""{buttonAttribute.Name}"", label: ""{buttonAttribute.Label}"", title: ""{buttonAttribute.Title}"")";
}
else if (item is ToolkitSampleNumericOptionAttribute numericAttribute)
{
yield return $@"new {typeof(ToolkitSampleNumericOptionMetadataViewModel).FullName}(name: ""{numericAttribute.Name}"", initial: {numericAttribute.Initial}, min: {numericAttribute.Min}, max: {numericAttribute.Max}, step: {numericAttribute.Step}, showAsNumberBox: {numericAttribute.ShowAsNumberBox.ToString().ToLower()}, title: ""{numericAttribute.Title}"")";
Expand Down
Loading

0 comments on commit 102f46a

Please sign in to comment.