< Summary

Information
Class: MyNet.UI.ViewModels.Shell.FileMenu.ShellFileMenuHost
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/ViewModels/Shell/FileMenu/ShellFileMenuHost.cs
Tag: 323_28699572109
Line coverage
68%
Covered lines: 24
Uncovered lines: 11
Coverable lines: 35
Total lines: 131
Line coverage: 68.5%
Branch coverage
50%
Covered branches: 9
Total branches: 18
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%44100%
OnCloseAllDrawers()100%11100%
OpenFileMenuContent()100%11100%
OpenFileMenuContent(...)100%11100%
CloseFileMenuContent()100%11100%
SetFileMenuContentVisibility(...)100%11100%
SetFileMenuContentVisibility(...)37.5%33826.66%
SetDrawer(...)50%22100%
NotifyDrawerOpening()75%44100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/ViewModels/Shell/FileMenu/ShellFileMenuHost.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="ShellFileMenuHost.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using MyNet.UI.ViewModels.Workspace;
 9
 10namespace MyNet.UI.ViewModels.Shell.FileMenu;
 11
 12/// <summary>
 13/// Coordinates file menu content navigation and drawer visibility for the shell host.
 14/// </summary>
 15/// <remarks>
 16/// Initializes a new instance of the <see cref="ShellFileMenuHost"/> class.
 17/// </remarks>
 18public sealed class ShellFileMenuHost(
 19    FileMenuViewModel fileMenuViewModel,
 20    IShellFileMenuDrawer drawer,
 21    Action? onDrawerOpening = null)
 22{
 23    /// <summary>
 24    /// Gets the file menu content view model.
 25    /// </summary>
 3026    public FileMenuViewModel FileMenuViewModel { get; } = fileMenuViewModel ?? throw new ArgumentNullException(nameof(fi
 27
 28    /// <summary>
 29    /// Gets the shell drawer state surface.
 30    /// </summary>
 3031    public IShellFileMenuDrawer Drawer { get; } = drawer ?? throw new ArgumentNullException(nameof(drawer));
 32
 33    /// <summary>
 34    /// Hides file menu content when the shell closes all drawers.
 35    /// </summary>
 636    public void OnCloseAllDrawers() => FileMenuViewModel.HideContent();
 37
 38    /// <summary>
 39    /// Opens the file menu drawer and shows the workspace registered for <typeparamref name="T"/>.
 40    /// </summary>
 41    public void OpenFileMenuContent<T>()
 42        where T : class, IWorkspaceViewModel
 2143        => OpenFileMenuContent(typeof(T));
 44
 45    /// <summary>
 46    /// Opens the file menu drawer and shows the workspace registered for <paramref name="contentType"/>.
 47    /// </summary>
 48    public void OpenFileMenuContent(Type contentType)
 49    {
 2150        ArgumentNullException.ThrowIfNull(contentType);
 2151        NotifyDrawerOpening();
 2152        Drawer.IsFileMenuOpen = true;
 2153        FileMenuViewModel.ShowContent(contentType);
 2154    }
 55
 56    /// <summary>
 57    /// Hides file menu content and closes the file menu drawer.
 58    /// </summary>
 59    public void CloseFileMenuContent()
 60    {
 1261        FileMenuViewModel.HideContent();
 1262        Drawer.IsFileMenuOpen = false;
 1263    }
 64
 65    /// <summary>
 66    /// Applies an action to the file menu drawer and its content for the given workspace type.
 67    /// </summary>
 68    public void SetFileMenuContentVisibility<T>(ShellDrawerAction action)
 69        where T : class, IWorkspaceViewModel
 670        => SetFileMenuContentVisibility(typeof(T), action);
 71
 72    /// <summary>
 73    /// Applies an action to the file menu drawer and its content.
 74    /// </summary>
 75    public void SetFileMenuContentVisibility(Type contentType, ShellDrawerAction action)
 76    {
 677        ArgumentNullException.ThrowIfNull(contentType);
 78
 79        switch (action)
 80        {
 81            case ShellDrawerAction.Show:
 082                NotifyDrawerOpening();
 083                Drawer.IsFileMenuOpen = true;
 084                FileMenuViewModel.ShowContent(contentType);
 085                break;
 86
 87            case ShellDrawerAction.Hide:
 088                FileMenuViewModel.HideContent();
 089                Drawer.IsFileMenuOpen = false;
 090                break;
 91
 92            case ShellDrawerAction.Toggle:
 693                if (Drawer.IsFileMenuOpen)
 94                {
 695                    if (!FileMenuViewModel.ContentIsVisible(contentType))
 96                    {
 097                        NotifyDrawerOpening();
 098                        FileMenuViewModel.ShowContent(contentType);
 99                    }
 100                    else
 101                    {
 6102                        CloseFileMenuContent();
 103                    }
 104                }
 105                else
 106                {
 0107                    OpenFileMenuContent(contentType);
 108                }
 109
 110                break;
 111        }
 0112    }
 113
 114    /// <summary>
 115    /// Applies a drawer visibility action without changing content.
 116    /// </summary>
 117    public void SetDrawer(ShellDrawerAction action)
 118    {
 3119        if (action.WillOpen(Drawer.IsFileMenuOpen))
 3120            NotifyDrawerOpening();
 121
 3122        Drawer.IsFileMenuOpen = action.ApplyToOpenState(Drawer.IsFileMenuOpen);
 3123    }
 124
 125    private void NotifyDrawerOpening()
 126    {
 24127        if (!Drawer.IsFileMenuOpen)
 24128            onDrawerOpening?.Invoke();
 12129    }
 130}
 131