From a94ea7025e3cf2a48a308097afe208d59e76b523 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 18 Jan 2018 18:45:48 +0900 Subject: [PATCH] Register/Unregister -> BeginTracking/StopTracking and add exceptions --- osu.Game/Overlays/OnScreenDisplay.cs | 27 ++++++++++++++++++------ osu.Game/Rulesets/UI/RulesetContainer.cs | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/osu.Game/Overlays/OnScreenDisplay.cs b/osu.Game/Overlays/OnScreenDisplay.cs index b9d0213aa6..bbb2c476f4 100644 --- a/osu.Game/Overlays/OnScreenDisplay.cs +++ b/osu.Game/Overlays/OnScreenDisplay.cs @@ -118,35 +118,48 @@ namespace osu.Game.Overlays [BackgroundDependencyLoader] private void load(FrameworkConfigManager frameworkConfig) { - Register(this, frameworkConfig); + BeginTracking(this, frameworkConfig); } - private readonly Dictionary<(IDisposable, IConfigManager), TrackedSettings> trackedConfigManagers = new Dictionary<(IDisposable, IConfigManager), TrackedSettings>(); + private readonly Dictionary<(object, IConfigManager), TrackedSettings> trackedConfigManagers = new Dictionary<(object, IConfigManager), TrackedSettings>(); - public void Register(IDisposable source, ITrackableConfigManager configManager) + /// + /// Registers a to have its settings tracked by this . + /// + /// The object that is registering the to be tracked. + /// The to be tracked. + /// If is null. + /// If is already being tracked from the same . + public void BeginTracking(object source, ITrackableConfigManager configManager) { if (configManager == null) throw new ArgumentNullException(nameof(configManager)); if (trackedConfigManagers.ContainsKey((source, configManager))) - return; + throw new InvalidOperationException($"{nameof(configManager)} is already registered."); var trackedSettings = configManager.CreateTrackedSettings(); if (trackedSettings == null) return; configManager.LoadInto(trackedSettings); - trackedSettings.SettingChanged += display; trackedConfigManagers.Add((source, configManager), trackedSettings); } - public void Unregister(IDisposable source, ITrackableConfigManager configManager) + /// + /// Unregisters a from having its settings tracked by this . + /// + /// The object that registered the to be tracked. + /// The that is being tracked. + /// If is null. + /// If is not being tracked from the same . + public void StopTracking(object source, ITrackableConfigManager configManager) { if (configManager == null) throw new ArgumentNullException(nameof(configManager)); if (!trackedConfigManagers.TryGetValue((source, configManager), out var existing)) - return; + throw new InvalidOperationException($"{nameof(configManager)} is not registered."); existing.Unload(); existing.SettingChanged -= display; diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index d4cfb3a3b3..45c112f669 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -97,7 +97,7 @@ namespace osu.Game.Rulesets.UI if (rulesetConfig != null) { dependencies.Cache(rulesetConfig); - onScreenDisplay?.Register(this, rulesetConfig); + onScreenDisplay?.BeginTracking(this, rulesetConfig); } } @@ -146,7 +146,7 @@ namespace osu.Game.Rulesets.UI if (rulesetConfig != null) { - onScreenDisplay?.Unregister(this, rulesetConfig); + onScreenDisplay?.StopTracking(this, rulesetConfig); rulesetConfig = null; } }