Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ViewHandler Mapper docs #16296

Merged
merged 17 commits into from
Jul 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ public partial class ActivityIndicatorHandler : ViewHandler<IActivityIndicator,
{
protected override ProgressBar CreatePlatformView() => new ProgressBar(Context) { Indeterminate = true };

public static void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateIsRunning(activityIndicator);
}

public static void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateColor(activityIndicator);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public partial class ActivityIndicatorHandler : ViewHandler<IActivityIndicator,
{
protected override object CreatePlatformView() => throw new NotImplementedException();

public static void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator) { }
public static void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator) { }
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator) { }
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ public partial class ActivityIndicatorHandler : ViewHandler<IActivityIndicator,
{
protected override ActivityIndicator CreatePlatformView() => new ActivityIndicator();

public static void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateIsRunning(activityIndicator);
}

public static void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateColor(activityIndicator);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,31 @@ public partial class ActivityIndicatorHandler : ViewHandler<IActivityIndicator,
IsIndeterminate = true
};

public static void MapBackground(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapBackground(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.UpdateValue(nameof(IViewHandler.ContainerView));
handler.ToPlatform().UpdateBackground(activityIndicator);
}

public static void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateIsRunning(activityIndicator);
}

public static void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateColor(activityIndicator);
}

public static void MapWidth(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapWidth(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
if (handler.PlatformView is ProgressRing platformView)
{
platformView.UpdateWidth(activityIndicator);
}
}

public static void MapHeight(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapHeight(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
if (handler.PlatformView is ProgressRing platformView)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@

namespace Microsoft.Maui.Handlers
{
/// <summary>
/// Represents the view handler for the abstract <see cref="IActivityIndicator"/> view and its platform-specific implementation.
/// </summary>
mattleibow marked this conversation as resolved.
Show resolved Hide resolved
/// <seealso href="https://learn.microsoft.com/dotnet/maui/user-interface/handlers/">Conceptual documentation on handlers</seealso>
public partial class ActivityIndicatorHandler : IActivityIndicatorHandler
{
public static IPropertyMapper<IActivityIndicator, IActivityIndicatorHandler> Mapper = new PropertyMapper<IActivityIndicator, IActivityIndicatorHandler>(ViewHandler.ViewMapper)
Expand Down Expand Up @@ -49,5 +53,42 @@ public ActivityIndicatorHandler(IPropertyMapper? mapper, CommandMapper? commandM
IActivityIndicator IActivityIndicatorHandler.VirtualView => VirtualView;

PlatformView IActivityIndicatorHandler.PlatformView => PlatformView;

/// <summary>
/// Maps the abstract <see cref="IActivityIndicator.IsRunning"/> property to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="activityIndicator">The associated <see cref="IActivityIndicator"/> instance.</param>
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator);

/// <summary>
/// Maps the abstract <see cref="IActivityIndicator.Color"/> property to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="activityIndicator">The associated <see cref="IActivityIndicator"/> instance.</param>
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator);

#if WINDOWS
/// <summary>
/// Maps the abstract <see cref="IView.Width"/> property to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="activityIndicator">The associated <see cref="IActivityIndicator"/> instance.</param>
public static partial void MapWidth(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator);

/// <summary>
/// Maps the abstract <see cref="IView.Height"/> property to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="activityIndicator">The associated <see cref="IActivityIndicator"/> instance.</param>
public static partial void MapHeight(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator);

/// <summary>
/// Maps the abstract <see cref="IView.Background"/> property to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="activityIndicator">The associated <see cref="IActivityIndicator"/> instance.</param>
public static partial void MapBackground(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator);
#endif
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ protected override MauiActivityIndicator CreatePlatformView()
return platformView;
}

public static void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapIsRunning(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateIsRunning(activityIndicator);
}

public static void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
public static partial void MapColor(IActivityIndicatorHandler handler, IActivityIndicator activityIndicator)
{
handler.PlatformView?.UpdateColor(activityIndicator);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Microsoft.Maui.Handlers
{
public partial class ApplicationHandler : ElementHandler<IApplication, Application>
{
public static void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
{
var currentActivity = ApplicationModel.Platform.CurrentActivity;

Expand All @@ -17,12 +17,12 @@ public static void MapTerminate(ApplicationHandler handler, IApplication applica
}
}

public static void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView?.RequestNewWindow(application, args as OpenWindowRequest);
}

public static void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
{
if (args is IWindow window)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ public partial class ApplicationHandler : ElementHandler<IApplication, object>
{
protected override object CreatePlatformElement() => throw new NotImplementedException();

public static void MapTerminate(ApplicationHandler handler, IApplication application, object? args) { }
public static void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args) { }
public static void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args) { }
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args) { }
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args) { }
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ namespace Microsoft.Maui.Handlers
{
public partial class ApplicationHandler : ElementHandler<IApplication, CoreApplication>
{
public static void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView.Exit();
}

public static void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView?.RequestNewWindow(application, args as OpenWindowRequest);
}

public static void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
{
if (args is IWindow window)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ namespace Microsoft.Maui.Handlers
{
public partial class ApplicationHandler : ElementHandler<IApplication, UI.Xaml.Application>
{
public static void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView.Exit();
}

public static void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView?.CreatePlatformWindow(application, args as OpenWindowRequest);
}

public static void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
{
if (args is IWindow window)
{
Expand Down
28 changes: 28 additions & 0 deletions src/Core/src/Handlers/Application/ApplicationHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@

namespace Microsoft.Maui.Handlers
{
/// <summary>
/// Represents the view handler for the abstract <see cref="IApplication"/> view and its platform-specific implementation.
/// </summary>
mattleibow marked this conversation as resolved.
Show resolved Hide resolved
/// <seealso href="https://learn.microsoft.com/dotnet/maui/user-interface/handlers/">Conceptual documentation on handlers</seealso>
public partial class ApplicationHandler
{
internal const string TerminateCommandKey = "Terminate";
Expand Down Expand Up @@ -55,5 +59,29 @@ public ApplicationHandler(IPropertyMapper? mapper, CommandMapper? commandMapper)
protected override PlatformView CreatePlatformElement() =>
MauiContext?.Services.GetService<PlatformView>() ?? throw new InvalidOperationException($"MauiContext did not have a valid application.");
#endif

/// <summary>
/// Maps the abstract "Terminate" command to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="application">The associated <see cref="IApplication"/> instance.</param>
/// <param name="args">The associated command arguments.</param>
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args);

/// <summary>
/// Maps the abstract <see cref="IApplication.OpenWindow"/> command to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="application">The associated <see cref="IApplication"/> instance.</param>
/// <param name="args">The associated command arguments.</param>
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args);

/// <summary>
/// Maps the abstract <see cref="IApplication.CloseWindow"/> command to the platform-specific implementations.
/// </summary>
/// <param name="handler">The associated handler.</param>
/// <param name="application">The associated <see cref="IApplication"/> instance.</param>
/// <param name="args">The associated command arguments.</param>
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args);
}
}
6 changes: 3 additions & 3 deletions src/Core/src/Handlers/Application/ApplicationHandler.iOS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Microsoft.Maui.Handlers
{
public partial class ApplicationHandler : ElementHandler<IApplication, IUIApplicationDelegate>
{
public static void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args)
{
#if __MACCATALYST__
NSApplication.SharedApplication.Terminate();
Expand All @@ -21,14 +21,14 @@ public static void MapTerminate(ApplicationHandler handler, IApplication applica

[SupportedOSPlatform("ios13.0")]
[SupportedOSPlatform("tvos13.0")]
public static void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args)
{
handler.PlatformView?.RequestNewWindow(application, args as OpenWindowRequest);
}

[SupportedOSPlatform("ios13.0")]
[SupportedOSPlatform("tvos13.0")]
public static void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args)
{
if (args is IWindow window)
{
Expand Down
12 changes: 4 additions & 8 deletions src/Core/src/Handlers/Border/BorderHandler.Android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,14 @@ protected override ContentViewGroup CreatePlatformView()
public override void SetVirtualView(IView view)
{
base.SetVirtualView(view);

_ = VirtualView ?? throw new InvalidOperationException($"{nameof(VirtualView)} should have been set by base class.");
_ = PlatformView ?? throw new InvalidOperationException($"{nameof(PlatformView)} should have been set by base class.");

PlatformView.CrossPlatformLayout = VirtualView;
}

static void UpdateContent(IBorderHandler handler)
static partial void UpdateContent(IBorderHandler handler)
{
_ = handler.PlatformView ?? throw new InvalidOperationException($"{nameof(PlatformView)} should have been set by base class.");
_ = handler.MauiContext ?? throw new InvalidOperationException($"{nameof(MauiContext)} should have been set by base class.");
Expand All @@ -44,23 +45,18 @@ static void UpdateContent(IBorderHandler handler)
handler.PlatformView.AddView(view.ToPlatform(handler.MauiContext));
}

public static void MapHeight(IBorderHandler handler, IBorderView border)
public static partial void MapHeight(IBorderHandler handler, IBorderView border)
{
handler.PlatformView?.UpdateHeight(border);
handler.PlatformView?.InvalidateBorderStrokeBounds();
}

public static void MapWidth(IBorderHandler handler, IBorderView border)
public static partial void MapWidth(IBorderHandler handler, IBorderView border)
{
handler.PlatformView?.UpdateWidth(border);
handler.PlatformView?.InvalidateBorderStrokeBounds();
}

public static void MapContent(IBorderHandler handler, IBorderView border)
{
UpdateContent(handler);
}

protected override void DisconnectHandler(ContentViewGroup platformView)
{
// If we're being disconnected from the xplat element, then we should no longer be managing its children
Expand Down
4 changes: 0 additions & 4 deletions src/Core/src/Handlers/Border/BorderHandler.Standard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,5 @@ namespace Microsoft.Maui.Handlers
public partial class BorderHandler : ViewHandler<IBorderView, object>
{
protected override object CreatePlatformView() => throw new NotImplementedException();

public static void MapContent(IBorderHandler handler, IBorderView border)
{
}
}
}
32 changes: 15 additions & 17 deletions src/Core/src/Handlers/Border/BorderHandler.Tizen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,35 +29,33 @@ protected override void SetupContainer()
public override void SetVirtualView(IView view)
{
base.SetVirtualView(view);

_ = VirtualView ?? throw new InvalidOperationException($"{nameof(VirtualView)} should have been set by base class.");
_ = PlatformView ?? throw new InvalidOperationException($"{nameof(PlatformView)} should have been set by base class.");

PlatformView.CrossPlatformMeasure = VirtualView.CrossPlatformMeasure;
PlatformView.CrossPlatformArrange = VirtualView.CrossPlatformArrange;
}

public static void MapContent(IBorderHandler handler, IBorderView border)
{
if (handler is BorderHandler borderHandler)
borderHandler.UpdateContent();
}

void UpdateContent()
static partial void UpdateContent(IBorderHandler handler)
{
_ = PlatformView ?? throw new InvalidOperationException($"{nameof(PlatformView)} should have been set by base class.");
_ = VirtualView ?? throw new InvalidOperationException($"{nameof(VirtualView)} should have been set by base class.");
_ = MauiContext ?? throw new InvalidOperationException($"{nameof(MauiContext)} should have been set by base class.");
_ = handler.PlatformView ?? throw new InvalidOperationException($"{nameof(PlatformView)} should have been set by base class.");
_ = handler.VirtualView ?? throw new InvalidOperationException($"{nameof(VirtualView)} should have been set by base class.");
_ = handler.MauiContext ?? throw new InvalidOperationException($"{nameof(MauiContext)} should have been set by base class.");

PlatformView.Children.Clear();
_contentHandler?.Dispose();
_contentHandler = null;
handler.PlatformView.Children.Clear();
if (handler is BorderHandler borderHandler)
{
borderHandler._contentHandler?.Dispose();
borderHandler._contentHandler = null;
}

if (VirtualView.PresentedContent is IView view)
if (handler.VirtualView.PresentedContent is IView view)
{
PlatformView.Children.Add(view.ToPlatform(MauiContext));
if (view.Handler is IPlatformViewHandler thandler)
handler.PlatformView.Children.Add(view.ToPlatform(handler.MauiContext));
if (view.Handler is IPlatformViewHandler thandler && handler is BorderHandler alsoBorderHandler)
{
_contentHandler = thandler;
alsoBorderHandler._contentHandler = thandler;
}
}
}
Expand Down
Loading