using System; using System.Runtime.InteropServices; using NvAPIWrapper.Native.Attributes; using NvAPIWrapper.Native.General.Structures; using NvAPIWrapper.Native.Helpers; using NvAPIWrapper.Native.Interfaces; using NvAPIWrapper.Native.Interfaces.DRS; namespace NvAPIWrapper.Native.DRS.Structures { /// [StructLayout(LayoutKind.Sequential, Pack = 8)] [StructureVersion(2)] public struct DRSApplicationV2 : IInitializable, IDRSApplication { internal const char FileInFolderSeparator = ':'; internal StructureVersion _Version; internal uint _IsPredefined; internal UnicodeString _ApplicationName; internal UnicodeString _FriendlyName; internal UnicodeString _LauncherName; internal UnicodeString _FileInFolder; /// /// Creates a new instance of /// /// The application file name. /// The application friendly name. /// The application launcher name. /// The list of files that are necessary to be present in the application parent directory. // ReSharper disable once TooManyDependencies public DRSApplicationV2( string applicationName, string friendlyName = null, string launcherName = null, string[] fileInFolders = null ) { this = typeof(DRSApplicationV2).Instantiate(); IsPredefined = false; ApplicationName = applicationName; FriendlyName = friendlyName ?? string.Empty; LauncherName = launcherName ?? string.Empty; FilesInFolder = fileInFolders ?? new string[0]; } /// public bool IsPredefined { get => _IsPredefined > 0; private set => _IsPredefined = value ? 1u : 0u; } /// public string ApplicationName { get => _ApplicationName.Value; private set { if (string.IsNullOrEmpty(value)) { throw new ArgumentException("Name can not be empty or null."); } _ApplicationName = new UnicodeString(value); } } /// public string FriendlyName { get => _FriendlyName.Value; private set => _FriendlyName = new UnicodeString(value); } /// public string LauncherName { get => _LauncherName.Value; private set => _LauncherName = new UnicodeString(value); } /// /// Gets the list of files that are necessary to be present in the application parent directory. /// public string[] FilesInFolder { get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ?? new string[0]; private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value)); } } }