mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Core - Added method to reactivate a module, reusing its profile
Profile editor - Improved performance when moving between modules Profile editor - Fixed editor sometimes going blank when moving between modules
This commit is contained in:
parent
ceccc7ceec
commit
cf16b9c218
@ -222,6 +222,15 @@ namespace Artemis.Core.Modules
|
||||
ModuleDeactivated(isOverride);
|
||||
}
|
||||
|
||||
internal virtual void Reactivate(bool isDeactivateOverride, bool isActivateOverride)
|
||||
{
|
||||
if (!IsActivated)
|
||||
return;
|
||||
|
||||
Deactivate(isDeactivateOverride);
|
||||
Activate(isActivateOverride);
|
||||
}
|
||||
|
||||
internal void ApplyToEntity()
|
||||
{
|
||||
if (Entity == null)
|
||||
|
||||
@ -232,6 +232,16 @@ namespace Artemis.Core.Modules
|
||||
profile?.Dispose();
|
||||
}
|
||||
|
||||
internal override void Reactivate(bool isDeactivateOverride, bool isActivateOverride)
|
||||
{
|
||||
if (!IsActivated)
|
||||
return;
|
||||
|
||||
// Avoid disposing the profile
|
||||
base.Deactivate(isDeactivateOverride);
|
||||
Activate(isActivateOverride);
|
||||
}
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -58,7 +58,7 @@ namespace Artemis.Core.Services
|
||||
// Always deactivate all other modules whenever override is called
|
||||
List<Module> modules = _pluginService.GetPluginsOfType<Module>().ToList();
|
||||
foreach (Module module in modules.Where(m => m != overrideModule))
|
||||
OverrideDeactivate(module);
|
||||
OverrideDeactivate(module, overrideModule != null);
|
||||
|
||||
ActiveModuleOverride = overrideModule;
|
||||
}
|
||||
@ -84,13 +84,11 @@ namespace Artemis.Core.Services
|
||||
bool shouldBeActivated = ActiveModuleOverride.EvaluateActivationRequirements();
|
||||
if (shouldBeActivated && ActiveModuleOverride.IsActivatedOverride)
|
||||
{
|
||||
ActiveModuleOverride.Deactivate(true);
|
||||
ActiveModuleOverride.Activate(false);
|
||||
ActiveModuleOverride.Reactivate(true, false);
|
||||
}
|
||||
else if (!shouldBeActivated && !ActiveModuleOverride.IsActivatedOverride)
|
||||
{
|
||||
ActiveModuleOverride.Deactivate(false);
|
||||
ActiveModuleOverride.Activate(true);
|
||||
ActiveModuleOverride.Reactivate(false, true);
|
||||
}
|
||||
|
||||
return;
|
||||
@ -171,31 +169,12 @@ namespace Artemis.Core.Services
|
||||
}
|
||||
}
|
||||
|
||||
private void OverrideActivate(Module module)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (module.IsActivated)
|
||||
return;
|
||||
|
||||
module.Activate(true);
|
||||
|
||||
// If this is a profile module, activate the last active profile after module activation
|
||||
if (module is ProfileModule profileModule)
|
||||
_profileService.ActivateLastProfile(profileModule);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task DeactivateModule(Module module)
|
||||
{
|
||||
try
|
||||
{
|
||||
// If this is a profile module, activate the last active profile after module activation
|
||||
// If this is a profile module, animate profile disable
|
||||
// module.Deactivate would do the same but without animation
|
||||
if (module.IsActivated && module is ProfileModule profileModule)
|
||||
await profileModule.ChangeActiveProfileAnimated(null, null);
|
||||
|
||||
@ -208,17 +187,41 @@ namespace Artemis.Core.Services
|
||||
}
|
||||
}
|
||||
|
||||
private void OverrideDeactivate(Module module)
|
||||
private void OverrideActivate(Module module)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (module.IsActivated)
|
||||
return;
|
||||
|
||||
// If activating while it should be deactivated, its an override
|
||||
bool shouldBeActivated = module.EvaluateActivationRequirements();
|
||||
module.Activate(!shouldBeActivated);
|
||||
|
||||
// If this is a profile module, activate the last active profile after module activation
|
||||
if (module is ProfileModule profileModule)
|
||||
_profileService.ActivateLastProfile(profileModule);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void OverrideDeactivate(Module module, bool clearingOverride)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!module.IsActivated)
|
||||
return;
|
||||
|
||||
// If this is a profile module, activate the last active profile after module activation
|
||||
if (module is ProfileModule profileModule)
|
||||
profileModule.ChangeActiveProfile(null, null);
|
||||
|
||||
// If deactivating while it should be activated, its an override
|
||||
bool shouldBeActivated = module.EvaluateActivationRequirements();
|
||||
// No need to deactivate if it is not in an overridden state
|
||||
if (shouldBeActivated && !module.IsActivatedOverride && !clearingOverride)
|
||||
return;
|
||||
|
||||
module.Deactivate(true);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@ -361,7 +361,8 @@ namespace Artemis.UI.Shared.Services
|
||||
|
||||
private void SelectedProfileOnDeactivated(object sender, EventArgs e)
|
||||
{
|
||||
Execute.PostToUIThread(() => ChangeSelectedProfile(null));
|
||||
// Execute.PostToUIThread(() => ChangeSelectedProfile(null));
|
||||
ChangeSelectedProfile(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user