From 5ec7b33a1acdb9cf320ac0f23bf68bbe5dae695c Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 7 Aug 2017 08:41:47 -0700 Subject: [PATCH] Revert "Upgrade ReactiveUI to the v8 alpha" --- .gitmodules | 3 + Avalonia.sln | 3 +- build/ReactiveUI.props | 5 -- build/Rx.props | 13 ++-- packages.cake | 22 +----- samples/BindingTest/App.xaml.cs | 1 - samples/BindingTest/BindingTest.csproj | 2 +- .../ViewModels/MainWindowViewModel.cs | 10 ++- samples/RenderTest/Program.cs | 1 - samples/RenderTest/RenderTest.csproj | 1 - .../ViewModels/MainWindowViewModel.cs | 10 ++- samples/VirtualizationTest/Program.cs | 1 - .../ViewModels/MainWindowViewModel.cs | 25 ++++--- .../VirtualizationTest.csproj | 1 - .../AppBuilderExtensions.cs | 24 ------ .../Avalonia.ReactiveUI.csproj | 73 ++++++++++++++++++- .../Properties/AssemblyInfo.cs | 27 +++++++ src/Avalonia.ReactiveUI/Registrations.cs | 23 ++++++ src/Avalonia.ReactiveUI/Shims.cs | 34 +++++++++ src/Avalonia.ReactiveUI/src | 1 + .../Avalonia.Markup.Xaml.UnitTests.csproj | 1 + .../Data/BindingTests.cs | 18 +---- .../Data/BindingTests_Source.cs | 20 +---- 23 files changed, 205 insertions(+), 114 deletions(-) delete mode 100644 build/ReactiveUI.props delete mode 100644 src/Avalonia.ReactiveUI/AppBuilderExtensions.cs create mode 100644 src/Avalonia.ReactiveUI/Registrations.cs create mode 100644 src/Avalonia.ReactiveUI/Shims.cs create mode 160000 src/Avalonia.ReactiveUI/src diff --git a/.gitmodules b/.gitmodules index 98b6d076c1..6e9b10efa4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ +[submodule "src/Avalonia.ReactiveUI/src"] + path = src/Avalonia.ReactiveUI/src + url = https://github.com/reactiveui/ReactiveUI.git [submodule "src/Avalonia.HtmlRenderer/external"] path = src/Avalonia.HtmlRenderer/external url = https://github.com/AvaloniaUI/HTML-Renderer.git diff --git a/Avalonia.sln b/Avalonia.sln index 7fdc0bc932..afaee6a907 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.16 +VisualStudioVersion = 15.0.26228.4 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}" EndProject @@ -169,7 +169,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1 build\Microsoft.Reactive.Testing.props = build\Microsoft.Reactive.Testing.props build\Moq.props = build\Moq.props build\NetCore.props = build\NetCore.props - build\ReactiveUI.props = build\ReactiveUI.props build\Rx.props = build\Rx.props build\Serilog.props = build\Serilog.props build\Serilog.Sinks.Trace.props = build\Serilog.Sinks.Trace.props diff --git a/build/ReactiveUI.props b/build/ReactiveUI.props deleted file mode 100644 index 4473447647..0000000000 --- a/build/ReactiveUI.props +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/build/Rx.props b/build/Rx.props index e88ab1ec37..5d74a6b214 100644 --- a/build/Rx.props +++ b/build/Rx.props @@ -1,10 +1,11 @@  - - - - - - + + + + + + + diff --git a/packages.cake b/packages.cake index 78052e8a5e..0824dc6098 100644 --- a/packages.cake +++ b/packages.cake @@ -111,7 +111,6 @@ public class Packages var SplatVersion = packageVersions["Splat"].FirstOrDefault().Item1; var SpracheVersion = packageVersions["Sprache"].FirstOrDefault().Item1; var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1; - var ReactiveUIVersion = packageVersions["reactiveui"].FirstOrDefault().Item1; var SystemValueTupleVersion = packageVersions["System.ValueTuple"].FirstOrDefault().Item1; SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1; SkiaSharpLinuxVersion = packageVersions["Avalonia.Skia.Linux.Natives"].FirstOrDefault().Item1; @@ -125,7 +124,6 @@ public class Packages context.Information("Package: Splat, version: {0}", SplatVersion); context.Information("Package: Sprache, version: {0}", SpracheVersion); context.Information("Package: System.Reactive, version: {0}", SystemReactiveVersion); - context.Information("Package: reactiveui, version: {0}", ReactiveUIVersion); context.Information("Package: System.ValueTuple, version: {0}", SystemValueTupleVersion); context.Information("Package: SkiaSharp, version: {0}", SkiaSharpVersion); context.Information("Package: Avalonia.Skia.Linux.Natives, version: {0}", SkiaSharpLinuxVersion); @@ -178,6 +176,7 @@ public class Packages new [] { "./src/", "Avalonia.Visuals", ".xml" }, new [] { "./src/", "Avalonia.Styling", ".dll" }, new [] { "./src/", "Avalonia.Styling", ".xml" }, + new [] { "./src/", "Avalonia.ReactiveUI", ".dll" }, new [] { "./src/", "Avalonia.Themes.Default", ".dll" }, new [] { "./src/", "Avalonia.Themes.Default", ".xml" }, new [] { "./src/Markup/", "Avalonia.Markup", ".dll" }, @@ -274,24 +273,7 @@ public class Packages }, BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix + "/netstandard1.3"), OutputDirectory = parameters.NugetRoot - }, - /////////////////////////////////////////////////////////////////////////////// - // Avalonia.ReactiveUI - /////////////////////////////////////////////////////////////////////////////// - new NuGetPackSettings() - { - Id = "Avalonia.ReactiveUI", - Dependencies = new DependencyBuilder(this) - { - new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }, - }.Deps(new string[] {null}, "reactiveui"), - Files = new [] - { - new NuSpecContent { Source = "Avalonia.ReactiveUI.dll", Target = "lib/netstandard1.3" } - }, - BasePath = context.Directory("./src/Avalonia.ReactiveUI/bin/" + parameters.DirSuffix + "/netstandard1.3"), - OutputDirectory = parameters.NugetRoot - }, + } }; var nuspecNuGetSettingsMobile = new [] diff --git a/samples/BindingTest/App.xaml.cs b/samples/BindingTest/App.xaml.cs index 42e5716541..7bcaf837a8 100644 --- a/samples/BindingTest/App.xaml.cs +++ b/samples/BindingTest/App.xaml.cs @@ -20,7 +20,6 @@ namespace BindingTest AppBuilder.Configure() .UsePlatformDetect() - .UseReactiveUI() .Start(); } diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index f13872c0bd..8e78b0c2cd 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -45,6 +45,7 @@ + @@ -161,5 +162,4 @@ - \ No newline at end of file diff --git a/samples/BindingTest/ViewModels/MainWindowViewModel.cs b/samples/BindingTest/ViewModels/MainWindowViewModel.cs index 49e8d170f7..2ec052c258 100644 --- a/samples/BindingTest/ViewModels/MainWindowViewModel.cs +++ b/samples/BindingTest/ViewModels/MainWindowViewModel.cs @@ -27,13 +27,15 @@ namespace BindingTest.ViewModels SelectedItems = new ObservableCollection(); - ShuffleItems = ReactiveCommand.Create(() => + ShuffleItems = ReactiveCommand.Create(); + ShuffleItems.Subscribe(_ => { var r = new Random(); Items.Move(r.Next(Items.Count), 1); }); - StringValueCommand = ReactiveCommand.Create(param => + StringValueCommand = ReactiveCommand.Create(); + StringValueCommand.Subscribe(param => { BooleanFlag = !BooleanFlag; StringValue = param.ToString(); @@ -54,7 +56,7 @@ namespace BindingTest.ViewModels public ObservableCollection Items { get; } public ObservableCollection SelectedItems { get; } - public ReactiveCommand ShuffleItems { get; } + public ReactiveCommand ShuffleItems { get; } public string BooleanString { @@ -87,7 +89,7 @@ namespace BindingTest.ViewModels } public IObservable CurrentTimeObservable { get; } - public ReactiveCommand StringValueCommand { get; } + public ReactiveCommand StringValueCommand { get; } public DataAnnotationsErrorViewModel DataAnnotationsValidation { get; } = new DataAnnotationsErrorViewModel(); public ExceptionErrorViewModel ExceptionDataValidation { get; } = new ExceptionErrorViewModel(); diff --git a/samples/RenderTest/Program.cs b/samples/RenderTest/Program.cs index 514771097f..7a23e09dd4 100644 --- a/samples/RenderTest/Program.cs +++ b/samples/RenderTest/Program.cs @@ -18,7 +18,6 @@ namespace RenderTest // again. AppBuilder.Configure() .UsePlatformDetect() - .UseReactiveUI() .Start(); } diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index 3b4602a740..95f1479b6b 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -183,5 +183,4 @@ - \ No newline at end of file diff --git a/samples/RenderTest/ViewModels/MainWindowViewModel.cs b/samples/RenderTest/ViewModels/MainWindowViewModel.cs index b2fa2e8b7a..bd68752f66 100644 --- a/samples/RenderTest/ViewModels/MainWindowViewModel.cs +++ b/samples/RenderTest/ViewModels/MainWindowViewModel.cs @@ -10,8 +10,10 @@ namespace RenderTest.ViewModels public MainWindowViewModel() { - ToggleDrawDirtyRects = ReactiveCommand.Create(() => DrawDirtyRects = !DrawDirtyRects); - ToggleDrawFps = ReactiveCommand.Create(() => DrawFps = !DrawFps); + ToggleDrawDirtyRects = ReactiveCommand.Create(); + ToggleDrawDirtyRects.Subscribe(_ => DrawDirtyRects = !DrawDirtyRects); + ToggleDrawFps = ReactiveCommand.Create(); + ToggleDrawFps.Subscribe(_ => DrawFps = !DrawFps); } public bool DrawDirtyRects @@ -26,7 +28,7 @@ namespace RenderTest.ViewModels set { this.RaiseAndSetIfChanged(ref drawFps, value); } } - public ReactiveCommand ToggleDrawDirtyRects { get; } - public ReactiveCommand ToggleDrawFps { get; } + public ReactiveCommand ToggleDrawDirtyRects { get; } + public ReactiveCommand ToggleDrawFps { get; } } } diff --git a/samples/VirtualizationTest/Program.cs b/samples/VirtualizationTest/Program.cs index e9156d803f..d5649f6a06 100644 --- a/samples/VirtualizationTest/Program.cs +++ b/samples/VirtualizationTest/Program.cs @@ -17,7 +17,6 @@ namespace VirtualizationTest AppBuilder.Configure() .UsePlatformDetect() - .UseReactiveUI() .Start(); } diff --git a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs b/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs index a0e1570a36..86869eb46a 100644 --- a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs +++ b/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs @@ -23,15 +23,20 @@ namespace VirtualizationTest.ViewModels public MainWindowViewModel() { this.WhenAnyValue(x => x.ItemCount).Subscribe(ResizeItems); - RecreateCommand = ReactiveCommand.Create(() => Recreate()); + RecreateCommand = ReactiveCommand.Create(); + RecreateCommand.Subscribe(_ => Recreate()); - AddItemCommand = ReactiveCommand.Create(() => AddItem()); + AddItemCommand = ReactiveCommand.Create(); + AddItemCommand.Subscribe(_ => AddItem()); - RemoveItemCommand = ReactiveCommand.Create(() => Remove()); + RemoveItemCommand = ReactiveCommand.Create(); + RemoveItemCommand.Subscribe(_ => Remove()); - SelectFirstCommand = ReactiveCommand.Create(() => SelectItem(0)); + SelectFirstCommand = ReactiveCommand.Create(); + SelectFirstCommand.Subscribe(_ => SelectItem(0)); - SelectLastCommand = ReactiveCommand.Create(() => SelectItem(Items.Count - 1)); + SelectLastCommand = ReactiveCommand.Create(); + SelectLastCommand.Subscribe(_ => SelectItem(Items.Count - 1)); } public string NewItemString @@ -73,11 +78,11 @@ namespace VirtualizationTest.ViewModels public IEnumerable VirtualizationModes => Enum.GetValues(typeof(ItemVirtualizationMode)).Cast(); - public ReactiveCommand AddItemCommand { get; private set; } - public ReactiveCommand RecreateCommand { get; private set; } - public ReactiveCommand RemoveItemCommand { get; private set; } - public ReactiveCommand SelectFirstCommand { get; private set; } - public ReactiveCommand SelectLastCommand { get; private set; } + public ReactiveCommand AddItemCommand { get; private set; } + public ReactiveCommand RecreateCommand { get; private set; } + public ReactiveCommand RemoveItemCommand { get; private set; } + public ReactiveCommand SelectFirstCommand { get; private set; } + public ReactiveCommand SelectLastCommand { get; private set; } private void ResizeItems(int count) { diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationTest/VirtualizationTest.csproj index 9d31a6cb86..327e659966 100644 --- a/samples/VirtualizationTest/VirtualizationTest.csproj +++ b/samples/VirtualizationTest/VirtualizationTest.csproj @@ -158,5 +158,4 @@ - \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs deleted file mode 100644 index e081763e99..0000000000 --- a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) The Avalonia Project. All rights reserved. -// Licensed under the MIT license. See licence.md file in the project root for full license information. - -using Avalonia.Controls; -using Avalonia.Threading; -using ReactiveUI; -using System; -using System.Reactive.Concurrency; -using System.Threading; - -namespace Avalonia -{ - public static class AppBuilderExtensions - { - public static TAppBuilder UseReactiveUI(this TAppBuilder builder) - where TAppBuilder : AppBuilderBase, new() - { - return builder.AfterSetup(_ => - { - RxApp.MainThreadScheduler = AvaloniaScheduler.Instance; - }); - } - } -} diff --git a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj index 6d547d9eb0..2d66b62eab 100644 --- a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj +++ b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj @@ -1,10 +1,80 @@  netstandard1.3 + False false + + true + full + false + bin\Debug\ + TRACE;DEBUG;MONO PORTABLE;NETSTANDARD1_1 + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE;MONO PORTABLE;RELEASE;NETSTANDARD1_1 + prompt + 4 + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -17,6 +87,5 @@ - \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs b/src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs index c9ead6f6e6..358c6224fb 100644 --- a/src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs +++ b/src/Avalonia.ReactiveUI/Properties/AssemblyInfo.cs @@ -1,6 +1,33 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System.Resources; using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. [assembly: AssemblyTitle("Avalonia.ReactiveUI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Avalonia.ReactiveUI")] +[assembly: AssemblyCopyright("Copyright \u00A9 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Avalonia.ReactiveUI/Registrations.cs b/src/Avalonia.ReactiveUI/Registrations.cs new file mode 100644 index 0000000000..066aa46dc1 --- /dev/null +++ b/src/Avalonia.ReactiveUI/Registrations.cs @@ -0,0 +1,23 @@ +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using System.Reactive.Concurrency; +using System.Threading; + + +namespace ReactiveUI +{ + /// + /// Ignore me. This class is a secret handshake between RxUI and RxUI.Xaml + /// in order to register certain classes on startup that would be difficult + /// to register otherwise. + /// + public class PlatformRegistrations : IWantsToRegisterStuff + { + public void Register(Action, Type> registerFunction) + { + RxApp.MainThreadScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current); + } + } +} diff --git a/src/Avalonia.ReactiveUI/Shims.cs b/src/Avalonia.ReactiveUI/Shims.cs new file mode 100644 index 0000000000..2729a68d6f --- /dev/null +++ b/src/Avalonia.ReactiveUI/Shims.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace System.Runtime.Serialization +{ + class IgnoreDataMemberAttribute : Attribute + { + } + + class DataMemberAttribute : Attribute + { + } + class OnDeserializedAttribute : Attribute + { + } + + class DataContractAttribute : Attribute + { + } + + class StreamingContext { } +} + +namespace System.Diagnostics.Contracts +{ + static class Contract + { + public static void Requires(bool condition) + { + + } + } +} diff --git a/src/Avalonia.ReactiveUI/src b/src/Avalonia.ReactiveUI/src new file mode 160000 index 0000000000..3f725c808b --- /dev/null +++ b/src/Avalonia.ReactiveUI/src @@ -0,0 +1 @@ +Subproject commit 3f725c808b1d4c8457f0d3204e0a071aa462cd75 diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index 48f8c6f396..f6f8f6bcb0 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -19,6 +19,7 @@ + diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs index f5f9f9f2f6..210ad2ab0b 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs @@ -10,9 +10,8 @@ using Avalonia.Data; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Data; using Moq; +using ReactiveUI; using Xunit; -using System.ComponentModel; -using System.Runtime.CompilerServices; namespace Avalonia.Markup.Xaml.UnitTests.Data { @@ -351,25 +350,14 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data } } - public class Source : INotifyPropertyChanged + public class Source : ReactiveObject { private string _foo; public string Foo { get { return _foo; } - set - { - _foo = value; - RaisePropertyChanged(); - } - } - - public event PropertyChangedEventHandler PropertyChanged; - - private void RaisePropertyChanged([CallerMemberName] string prop = "") - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop)); + set { this.RaiseAndSetIfChanged(ref _foo, value); } } } diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs index c6006f3afb..778a93d326 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Source.cs @@ -6,9 +6,8 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Data; +using ReactiveUI; using Xunit; -using System.ComponentModel; -using System.Runtime.CompilerServices; namespace Avalonia.Markup.Xaml.UnitTests.Data { @@ -25,26 +24,15 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data Assert.Equal(target.Text, "foo"); } - - public class Source : INotifyPropertyChanged + + public class Source : ReactiveObject { private string _foo; public string Foo { get { return _foo; } - set - { - _foo = value; - RaisePropertyChanged(); - } - } - - public event PropertyChangedEventHandler PropertyChanged; - - private void RaisePropertyChanged([CallerMemberName] string prop = "") - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop)); + set { this.RaiseAndSetIfChanged(ref _foo, value); } } } }