1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
RobertBeekman e5a5f10286
Profiles - Added IPluginFeatureDependent interface and implement throughout profiles (#842)
* Profiles - Added IPluginFeatureDependent interface and implement througout profiles
* Workshop - Include dependencies in profile upload request
2024-03-03 20:19:36 +01:00

86 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using Artemis.Core.Events;
namespace Artemis.Core;
/// <summary>
/// Represents a node script
/// </summary>
public interface INodeScript : INotifyPropertyChanged, IDisposable, IStorageModel, IPluginFeatureDependent
{
/// <summary>
/// Gets the name of the node script.
/// </summary>
string Name { get; }
/// <summary>
/// Gets the description of the node script.
/// </summary>
string Description { get; }
/// <summary>
/// Gets an enumerable of all the nodes on this script.
/// </summary>
IEnumerable<INode> Nodes { get; }
/// <summary>
/// Gets the return type of the node script.
/// </summary>
Type ResultType { get; }
/// <summary>
/// Gets or sets the context of the node script, usually a <see cref="Profile" /> or
/// <see cref="ProfileConfiguration" />.
/// </summary>
object? Context { get; set; }
/// <summary>
/// Occurs whenever a node was added to the script
/// </summary>
event EventHandler<SingleValueEventArgs<INode>>? NodeAdded;
/// <summary>
/// Occurs whenever a node was removed from the script
/// </summary>
event EventHandler<SingleValueEventArgs<INode>>? NodeRemoved;
/// <summary>
/// Runs the script, evaluating nodes where needed
/// </summary>
void Run();
/// <summary>
/// Adds a node to the script
/// </summary>
/// <param name="node">The node to add</param>
void AddNode(INode node);
/// <summary>
/// Removes a node from the script
/// <para>
/// Note: If the node is <see cref="IDisposable" /> you must dispose it yourself, unless you plan to reuse the
/// node.
/// </para>
/// </summary>
/// <param name="node">The node to remove</param>
void RemoveNode(INode node);
/// <summary>
/// Loads missing connections between the nodes of this node script from storage
/// </summary>
void LoadConnections();
}
/// <summary>
/// Represents a node script with a result value of type <typeparamref name="T" />
/// </summary>
/// <typeparam name="T">The type of result value</typeparam>
public interface INodeScript<out T> : INodeScript
{
/// <summary>
/// Gets the result of the script
/// </summary>
T? Result { get; }
}