1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
RobertBeekman 39d7d8132f Core - Added node provider plugin feature type
Visual Scripting - Removed all nodes
2024-02-22 19:42:25 +01:00

117 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using Artemis.Core;
using Artemis.Core.Modules;
using Artemis.UI.Shared.DataModelVisualization;
using Artemis.UI.Shared.DataModelVisualization.Shared;
namespace Artemis.UI.Shared.Services;
/// <summary>
/// A service for UI related data model tasks
/// </summary>
public interface IDataModelUIService : IArtemisSharedUIService
{
/// <summary>
/// Gets a read-only list of all registered data model editors
/// </summary>
IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelEditors { get; }
/// <summary>
/// Gets a read-only list of all registered data model displays
/// </summary>
IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelDisplays { get; }
/// <summary>
/// Creates a data model visualization view model for the main data model
/// </summary>
/// <returns>
/// A data model visualization view model containing all data model expansions and modules that expand the main
/// data model
/// </returns>
DataModelPropertiesViewModel GetMainDataModelVisualization();
/// <summary>
/// Creates a data model visualization view model for the data model of the provided plugin feature
/// </summary>
/// <param name="modules">The modules to create the data model visualization view model for</param>
/// <param name="includeMainDataModel">
/// Whether or not also to include the main data model (and therefore any modules marked
/// as <see cref="Module.IsAlwaysAvailable" />)
/// </param>
/// <returns>A data model visualization view model containing the data model of the provided feature</returns>
DataModelPropertiesViewModel? GetPluginDataModelVisualization(List<Module> modules, bool includeMainDataModel);
/// <summary>
/// Updates the children of the provided main data model visualization, removing disabled children and adding newly
/// enabled children
/// </summary>
void UpdateModules(DataModelPropertiesViewModel mainDataModelVisualization);
/// <summary>
/// Registers a new data model editor
/// </summary>
/// <typeparam name="T">The type of the editor</typeparam>
/// <param name="plugin">The plugin this editor belongs to</param>
/// <param name="compatibleConversionTypes">A collection of extra types this editor supports</param>
/// <returns>A registration that can be used to remove the editor</returns>
DataModelVisualizationRegistration RegisterDataModelInput<T>(Plugin plugin, IReadOnlyCollection<Type> compatibleConversionTypes) where T : DataModelInputViewModel;
/// <summary>
/// Registers a new data model display
/// </summary>
/// <typeparam name="T">The type of the display</typeparam>
/// <param name="plugin">The plugin this display belongs to</param>
/// <returns>A registration that can be used to remove the display</returns>
DataModelVisualizationRegistration RegisterDataModelDisplay<T>(Plugin plugin) where T : DataModelDisplayViewModel;
/// <summary>
/// Removes a data model editor
/// </summary>
/// <param name="registration">
/// The registration of the editor as returned by <see cref="RegisterDataModelInput{T}" />
/// </param>
void RemoveDataModelInput(DataModelVisualizationRegistration registration);
/// <summary>
/// Removes a data model display
/// </summary>
/// <param name="registration">
/// The registration of the display as returned by <see cref="RegisterDataModelDisplay{T}" />
/// </param>
void RemoveDataModelDisplay(DataModelVisualizationRegistration registration);
/// <summary>
/// Creates the most appropriate display view model for the provided <paramref name="propertyType" /> that can display
/// a value
/// </summary>
/// <param name="propertyType">The type of data model property to find a display view model for</param>
/// <param name="description">The description of the data model property</param>
/// <param name="fallBackToDefault">
/// If <see langword="true"></see>, a simple .ToString() display view model will be
/// returned if nothing else is found
/// </param>
/// <returns>The most appropriate display view model for the provided <paramref name="propertyType"></paramref></returns>
DataModelDisplayViewModel? GetDataModelDisplayViewModel(Type propertyType, DataModelPropertyAttribute? description, bool fallBackToDefault = false);
/// <summary>
/// Creates the most appropriate input view model for the provided <paramref name="propertyType" /> that allows
/// inputting a value
/// </summary>
/// <param name="propertyType">The type of data model property to find a display view model for</param>
/// <param name="description">The description of the data model property</param>
/// <param name="initialValue">The initial value to show in the input</param>
/// <param name="updateCallback">A function to call whenever the input was updated (submitted or not)</param>
/// <returns>The most appropriate input view model for the provided <paramref name="propertyType" /></returns>
DataModelInputViewModel? GetDataModelInputViewModel(Type propertyType, DataModelPropertyAttribute? description, object? initialValue, Action<object?, bool> updateCallback);
/// <summary>
/// Gets a boolean indicating whether or not to show full paths when displaying data model paths.
/// </summary>
PluginSetting<bool> ShowFullPaths { get; }
/// <summary>
/// Gets a boolean indicating whether or not to show values when displaying data model paths.
/// </summary>
PluginSetting<bool> ShowDataModelValues { get; }
}