12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System;
- using System.Collections.Generic;
- namespace SRDebugger
- {
- /// <summary>
- /// You can implement this interface to create a dynamic "options container".
- /// Add the container to SRDebugger via the SRDebug API.
- /// </summary>
- /// <remarks>
- /// When the container is added via the API, the initial set of options will be fetched via <see cref="GetOptions"/>.
- /// Options that are added or removed after this point must fire the <see cref="OptionAdded"/> and <see cref="OptionRemoved"/> events in order
- /// for those options to be added/removed from the debug panel.
- /// If you do not intend to fire any events (i.e. this is a static container) then <see cref="IsDynamic"/> should return false.
- /// </remarks>
- public interface IOptionContainer
- {
- /// <summary>
- /// Get the initial set of options contained in this object.
- /// </summary>
- IEnumerable<OptionDefinition> GetOptions();
- /// <summary>
- /// Will the options collection be changed via events?
- /// If true, changes to the option set can be provided via the events <see cref="OptionAdded"/> and <see cref="OptionRemoved"/>.
- /// If false, the events will be ignored.
- /// </summary>
- bool IsDynamic { get; }
- event Action<OptionDefinition> OptionAdded;
- event Action<OptionDefinition> OptionRemoved;
- }
- public sealed class DynamicOptionContainer : IOptionContainer
- {
- public IList<OptionDefinition> Options
- {
- get { return _optionsReadOnly; }
- }
- private readonly List<OptionDefinition> _options = new List<OptionDefinition>();
- private readonly IList<OptionDefinition> _optionsReadOnly;
- public DynamicOptionContainer()
- {
- _optionsReadOnly = _options.AsReadOnly();
- }
- public void AddOption(OptionDefinition option)
- {
- _options.Add(option);
- if (OptionAdded != null)
- {
- OptionAdded(option);
- }
- }
- public bool RemoveOption(OptionDefinition option)
- {
- if (_options.Remove(option))
- {
- if (OptionRemoved != null)
- {
- OptionRemoved(option);
- }
- return true;
- }
- return false;
- }
-
- IEnumerable<OptionDefinition> IOptionContainer.GetOptions()
- {
- return _options;
- }
- public bool IsDynamic
- {
- get { return true; }
- }
- public event Action<OptionDefinition> OptionAdded;
- public event Action<OptionDefinition> OptionRemoved;
- }
- }
|