/// <summary>Initializes a new instance of the <see cref="TriggerEditDialog"/> class.</summary>
        /// <param name="trigger">The <see cref="Trigger"/> to edit.</param>
        /// <param name="supportV1Only">If set to <c>true</c> support V1 triggers only.</param>
        /// <param name="allowedTriggers">Sets the types of triggers that can be edited. Default is all.</param>
        public TriggerEditDialog(Trigger trigger, bool supportV1Only = false, AvailableTriggers allowedTriggers = AvailableTriggers.AllTriggers)
        {
            InitializeComponent();

            showCustom = trigger != null && trigger.TriggerType == TaskTriggerType.Custom;
            isV2       = !supportV1Only;

            // Populate combo boxes
            delaySpan.Items.AddRange(new[] { TimeSpan2.FromSeconds(30), TimeSpan2.FromMinutes(1), TimeSpan2.FromMinutes(30), TimeSpan2.FromHours(1), TimeSpan2.FromHours(8), TimeSpan2.FromDays(1) });
            repeatSpan.Items.AddRange(new[] { TimeSpan2.FromMinutes(5), TimeSpan2.FromMinutes(10), TimeSpan2.FromMinutes(15), TimeSpan2.FromMinutes(30), TimeSpan2.FromHours(1) });
            durationSpan.Items.AddRange(new[] { TimeSpan2.Zero, TimeSpan2.FromMinutes(15), TimeSpan2.FromMinutes(30), TimeSpan2.FromHours(1), TimeSpan2.FromHours(12), TimeSpan2.FromDays(1) });
            durationSpan.FormattedZero = EditorProperties.Resources.TimeSpanIndefinitely;
            stopIfRunsSpan.Items.AddRange(new[] { TimeSpan2.FromMinutes(30), TimeSpan2.FromHours(1), TimeSpan2.FromHours(2), TimeSpan2.FromHours(4), TimeSpan2.FromHours(8), TimeSpan2.FromHours(12), TimeSpan2.FromDays(1), TimeSpan2.FromDays(3) });
            AvailableTriggers = allowedTriggers;

            if (trigger != null)
            {
                Trigger = trigger;
            }
            else
            {
                Trigger = (AvailableTriggers & CalendarTriggerUI.calendarTriggers) != 0 ? GetFirstAvailableTrigger(CalendarTriggerUI.calendarTriggers) : GetFirstAvailableTrigger();
                initialStartBoundary = DateTime.MinValue;
            }
        }
        internal static AvailableTriggers GetFilteredAvailableTriggers(AvailableTriggers availableTriggers, Version tsVer, bool useUnifiedSchedulingEngine, bool showCustom)
        {
            var isV1 = tsVer < TaskServiceVersion.V1_2;
            var ret  = availableTriggers;

            // Remove all non-V1 triggers if set
            if (isV1)
            {
                ret &= ~(AvailableTriggers.Event | AvailableTriggers.Registration | AvailableTriggers.SessionStateChange);
            }
            // Remove custom trigger if not shown or v1
            if (!showCustom || isV1)
            {
                ret &= ~AvailableTriggers.Custom;
            }
            // Remove unsupported USE triggers only on Win7
            if (useUnifiedSchedulingEngine && tsVer == TaskServiceVersion.V1_3)
            {
                ret &= ~(AvailableTriggers.Monthly | AvailableTriggers.MonthlyDOW);
            }
            return(ret != 0 ? ret : throw new InvalidOperationException("No triggers are available to display given the current settings."));
        }
 /// <summary>Filtered the supplied available triggers based on this version of the Task Scheduler and options that could be set on the <see cref="TaskDefinition"/>.</summary>
 /// <param name="ts">The <see cref="TaskService"/> instance.</param>
 /// <param name="availableTriggers">The available triggers.</param>
 /// <param name="useUnifiedSchedulingEngine">if set to <c>true</c> assume the task will use the Unified Scheduling Engine.</param>
 /// <returns>The filtered set of available triggers.</returns>
 public static AvailableTriggers GetFilteredAvailableTriggers(this TaskService ts, AvailableTriggers availableTriggers, bool useUnifiedSchedulingEngine = false) =>
 GetFilteredAvailableTriggers(availableTriggers, ts.HighestSupportedVersion, useUnifiedSchedulingEngine, true);
 /// <summary>Filtered the supplied available triggers based on this <see cref="TaskDefinition"/> and the version of the Task Scheduler.</summary>
 /// <param name="td">The <see cref="TaskDefinition"/> instance.</param>
 /// <param name="availableTriggers">The available triggers.</param>
 /// <param name="taskSchedulerVersion">The Task Scheduler version.</param>
 /// <param name="showCustom">Show <see cref="CustomTrigger"/> instances.</param>
 /// <returns>The filtered set of available triggers.</returns>
 public static AvailableTriggers GetFilteredAvailableTriggers(this TaskDefinition td, AvailableTriggers availableTriggers, Version taskSchedulerVersion, bool showCustom = false) =>
 GetFilteredAvailableTriggers(availableTriggers, taskSchedulerVersion, td.Settings.UseUnifiedSchedulingEngine, showCustom);