mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Profile editor tweaks and fixes
Select profile after duplicate/add Select default profile after delete
This commit is contained in:
parent
afb6315ec6
commit
bc2508e4ac
@ -153,50 +153,54 @@ namespace Artemis.Models
|
||||
ProfileProvider.RenameProfile(profileModel, profileModel.Name);
|
||||
}
|
||||
|
||||
public async Task DuplicateProfile(ProfileModel selectedProfile)
|
||||
public async Task<ProfileModel> DuplicateProfile(ProfileModel selectedProfile)
|
||||
{
|
||||
var newProfile = GeneralHelpers.Clone(selectedProfile);
|
||||
var name = await GetValidProfileName("Rename profile", "Please enter a unique new profile name");
|
||||
var name = await GetValidProfileName("Duplicate profile", "Please enter a unique new profile name");
|
||||
// User cancelled
|
||||
if (name == null)
|
||||
return;
|
||||
return null;
|
||||
var doRename = await MakeProfileUnique(newProfile, name, newProfile.Name);
|
||||
if (!doRename)
|
||||
return;
|
||||
return null;
|
||||
|
||||
// Make sure it's not default, in case of copying a default profile
|
||||
newProfile.IsDefault = false;
|
||||
ProfileProvider.AddOrUpdate(newProfile);
|
||||
|
||||
return newProfile;
|
||||
}
|
||||
|
||||
public async Task DeleteProfile(ProfileModel selectedProfile, ModuleModel moduleModel)
|
||||
public async Task<bool> DeleteProfile(ProfileModel selectedProfile, ModuleModel moduleModel)
|
||||
{
|
||||
var confirm = await _dialogService.ShowQuestionMessageBox("Delete profile",
|
||||
$"Are you sure you want to delete the profile named: {selectedProfile.Name}?\n\n" +
|
||||
"This cannot be undone.");
|
||||
if (!confirm.Value)
|
||||
return;
|
||||
return false;
|
||||
|
||||
var defaultProfile = ProfileProvider.GetProfile(_deviceManager.ActiveKeyboard, moduleModel, "Default");
|
||||
var deleteProfile = selectedProfile;
|
||||
|
||||
moduleModel.ChangeProfile(defaultProfile);
|
||||
ProfileProvider.DeleteProfile(deleteProfile);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task ImportProfile(ModuleModel moduleModel)
|
||||
public async Task<ProfileModel> ImportProfile(ModuleModel moduleModel)
|
||||
{
|
||||
var dialog = new OpenFileDialog {Filter = "Artemis profile (*.json)|*.json"};
|
||||
var result = dialog.ShowDialog();
|
||||
if (result != DialogResult.OK)
|
||||
return;
|
||||
return null;
|
||||
|
||||
var profileModel = ProfileProvider.LoadProfileIfValid(dialog.FileName);
|
||||
if (profileModel == null)
|
||||
{
|
||||
_dialogService.ShowErrorMessageBox("Oh noes, the profile you provided is invalid. " +
|
||||
"If this keeps happening, please make an issue on GitHub and provide the profile.");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Verify the game
|
||||
@ -204,7 +208,7 @@ namespace Artemis.Models
|
||||
{
|
||||
_dialogService.ShowErrorMessageBox(
|
||||
$"Oh oops! This profile is ment for {profileModel.GameName}, not {moduleModel.Name} :c");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Verify the keyboard
|
||||
@ -216,7 +220,7 @@ namespace Artemis.Models
|
||||
"You can still import it but you'll probably have to do some adjusting\n\n" +
|
||||
"Continue?");
|
||||
if (!adjustKeyboard.Value)
|
||||
return;
|
||||
return null;
|
||||
|
||||
// Resize layers that are on the full keyboard width
|
||||
profileModel.ResizeLayers(deviceManager.ActiveKeyboard);
|
||||
@ -232,13 +236,22 @@ namespace Artemis.Models
|
||||
var name = await GetValidProfileName("Rename profile", "Please enter a unique new profile name");
|
||||
// User cancelled
|
||||
if (name == null)
|
||||
return;
|
||||
return null;
|
||||
var doRename = await MakeProfileUnique(profileModel, name, profileModel.Name);
|
||||
if (!doRename)
|
||||
return;
|
||||
return null;
|
||||
|
||||
profileModel.IsDefault = false;
|
||||
ProfileProvider.AddOrUpdate(profileModel);
|
||||
return profileModel;
|
||||
}
|
||||
|
||||
public void ChangeProfileByName(ModuleModel moduleModel, string profileName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(profileName))
|
||||
profileName = "Default";
|
||||
|
||||
moduleModel.ChangeProfile(ProfileProvider.GetProfile(_deviceManager.ActiveKeyboard, moduleModel, profileName));
|
||||
}
|
||||
|
||||
private async Task<string> GetValidProfileName(string title, string text)
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
using Artemis.Events;
|
||||
using Artemis.DAL;
|
||||
using Artemis.Events;
|
||||
using Artemis.Managers;
|
||||
using Artemis.Services;
|
||||
using Artemis.Settings;
|
||||
using Artemis.ViewModels;
|
||||
using Artemis.ViewModels.Profiles;
|
||||
using Caliburn.Micro;
|
||||
using Ninject;
|
||||
using Ninject.Extensions.Logging;
|
||||
@ -13,23 +13,33 @@ namespace Artemis.Modules.Abstract
|
||||
{
|
||||
public abstract class ModuleViewModel : Screen
|
||||
{
|
||||
private readonly ModuleManager _moduleManager;
|
||||
private readonly MainManager _mainManager;
|
||||
private readonly IKernel _kernel;
|
||||
private readonly ModuleManager _moduleManager;
|
||||
private readonly GeneralSettings _generalSettings;
|
||||
private ModuleSettings _settings;
|
||||
private GeneralSettings _generalSettings;
|
||||
|
||||
public ModuleViewModel(MainManager mainManager, ModuleModel moduleModel, IKernel kernel)
|
||||
{
|
||||
_mainManager = mainManager;
|
||||
_kernel = kernel;
|
||||
_moduleManager = mainManager.ModuleManager;
|
||||
_generalSettings = DAL.SettingsProvider.Load<GeneralSettings>();
|
||||
_generalSettings = SettingsProvider.Load<GeneralSettings>();
|
||||
ModuleModel = moduleModel;
|
||||
Settings = moduleModel.Settings;
|
||||
|
||||
_mainManager.EnabledChanged += MainManagerOnEnabledChanged;
|
||||
_moduleManager.EffectChanged += ModuleManagerOnModuleChanged;
|
||||
|
||||
// ReSharper disable once VirtualMemberCallInConstructor
|
||||
if (!UsesProfileEditor)
|
||||
return;
|
||||
|
||||
IParameter[] args =
|
||||
{
|
||||
new ConstructorArgument("mainManager", _mainManager),
|
||||
new ConstructorArgument("moduleModel", ModuleModel),
|
||||
new ConstructorArgument("lastProfile", Settings.LastProfile)
|
||||
};
|
||||
ProfileEditor = kernel.Get<ProfileEditorViewModel>(args);
|
||||
}
|
||||
|
||||
public ProfileEditorViewModel ProfileEditor { get; set; }
|
||||
@ -142,24 +152,13 @@ namespace Artemis.Modules.Abstract
|
||||
protected override void OnActivate()
|
||||
{
|
||||
base.OnActivate();
|
||||
|
||||
if (!UsesProfileEditor)
|
||||
return;
|
||||
|
||||
IParameter[] args =
|
||||
{
|
||||
new ConstructorArgument("mainManager", _mainManager),
|
||||
new ConstructorArgument("moduleModel", ModuleModel),
|
||||
new ConstructorArgument("lastProfile", Settings.LastProfile)
|
||||
};
|
||||
ProfileEditor = _kernel.Get<ProfileEditorViewModel>(args);
|
||||
ProfileEditor?.OnActivate();
|
||||
}
|
||||
|
||||
protected override void OnDeactivate(bool close)
|
||||
{
|
||||
base.OnDeactivate(close);
|
||||
ProfileEditor?.Dispose();
|
||||
ProfileEditor = null;
|
||||
ProfileEditor?.OnDeactivate(close);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -40,7 +40,7 @@ using Screen = Caliburn.Micro.Screen;
|
||||
|
||||
namespace Artemis.ViewModels
|
||||
{
|
||||
public sealed class ProfileEditorViewModel : Screen, IDropTarget, IDisposable
|
||||
public sealed class ProfileEditorViewModel : Screen, IDropTarget
|
||||
{
|
||||
private readonly DeviceManager _deviceManager;
|
||||
private readonly MetroDialogService _dialogService;
|
||||
@ -68,16 +68,22 @@ namespace Artemis.ViewModels
|
||||
PropertyChanged += EditorStateHandler;
|
||||
_deviceManager.OnKeyboardChanged += DeviceManagerOnOnKeyboardChanged;
|
||||
_moduleModel.ProfileChanged += ModuleModelOnProfileChanged;
|
||||
_loopManager.RenderCompleted += LoopManagerOnRenderCompleted;
|
||||
LoadProfiles();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
public new void OnActivate()
|
||||
{
|
||||
base.OnActivate();
|
||||
|
||||
_loopManager.RenderCompleted += LoopManagerOnRenderCompleted;
|
||||
}
|
||||
|
||||
public new void OnDeactivate(bool close)
|
||||
{
|
||||
base.OnDeactivate(close);
|
||||
|
||||
SaveSelectedProfile();
|
||||
ProfileEditorModel.Dispose();
|
||||
_loopManager.RenderCompleted -= LoopManagerOnRenderCompleted;
|
||||
_deviceManager.OnKeyboardChanged -= DeviceManagerOnOnKeyboardChanged;
|
||||
}
|
||||
|
||||
#region LUA
|
||||
@ -154,11 +160,10 @@ namespace Artemis.ViewModels
|
||||
get { return SelectedProfile?.Name; }
|
||||
set
|
||||
{
|
||||
if (value == SelectedProfile?.Name)
|
||||
return;
|
||||
|
||||
_moduleModel.ChangeProfile(ProfileProvider.GetProfile(_deviceManager.ActiveKeyboard, _moduleModel, value));
|
||||
SaveSelectedProfile();
|
||||
NotifyOfPropertyChange(() => SelectedProfileName);
|
||||
if (value != null)
|
||||
ProfileEditorModel.ChangeProfileByName(_moduleModel, value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,6 +213,15 @@ namespace Artemis.ViewModels
|
||||
UpdateLayerList(SelectedLayer);
|
||||
}
|
||||
|
||||
public void EditLayer(LayerModel layerModel)
|
||||
{
|
||||
if (layerModel == null)
|
||||
return;
|
||||
|
||||
ProfileEditorModel.EditLayer(layerModel, _moduleModel.DataModel);
|
||||
UpdateLayerList(layerModel);
|
||||
}
|
||||
|
||||
public LayerModel AddLayer()
|
||||
{
|
||||
if (SelectedProfile == null)
|
||||
@ -355,6 +369,7 @@ namespace Artemis.ViewModels
|
||||
return;
|
||||
|
||||
LoadProfiles();
|
||||
_moduleModel.ChangeProfile(profile);
|
||||
}
|
||||
|
||||
public async void RenameProfile()
|
||||
@ -362,8 +377,11 @@ namespace Artemis.ViewModels
|
||||
if (SelectedProfile == null)
|
||||
return;
|
||||
|
||||
var renameProfile = SelectedProfile;
|
||||
await ProfileEditorModel.RenameProfile(SelectedProfile);
|
||||
|
||||
LoadProfiles();
|
||||
_moduleModel.ChangeProfile(renameProfile);
|
||||
}
|
||||
|
||||
public async void DuplicateProfile()
|
||||
@ -371,8 +389,12 @@ namespace Artemis.ViewModels
|
||||
if (SelectedProfile == null)
|
||||
return;
|
||||
|
||||
await ProfileEditorModel.DuplicateProfile(SelectedProfile);
|
||||
var newProfle = await ProfileEditorModel.DuplicateProfile(SelectedProfile);
|
||||
if (newProfle == null)
|
||||
return;
|
||||
|
||||
LoadProfiles();
|
||||
_moduleModel.ChangeProfile(newProfle);
|
||||
}
|
||||
|
||||
public async void DeleteProfile()
|
||||
@ -380,8 +402,12 @@ namespace Artemis.ViewModels
|
||||
if (SelectedProfile == null)
|
||||
return;
|
||||
|
||||
await ProfileEditorModel.DeleteProfile(SelectedProfile, _moduleModel);
|
||||
var confirmed = await ProfileEditorModel.DeleteProfile(SelectedProfile, _moduleModel);
|
||||
if (!confirmed)
|
||||
return;
|
||||
|
||||
LoadProfiles();
|
||||
ProfileEditorModel.ChangeProfileByName(_moduleModel, null);
|
||||
}
|
||||
|
||||
public async void ImportProfile()
|
||||
@ -393,8 +419,12 @@ namespace Artemis.ViewModels
|
||||
return;
|
||||
}
|
||||
|
||||
await ProfileEditorModel.ImportProfile(_moduleModel);
|
||||
var importProfile = await ProfileEditorModel.ImportProfile(_moduleModel);
|
||||
if (importProfile == null)
|
||||
return;
|
||||
|
||||
LoadProfiles();
|
||||
_moduleModel.ChangeProfile(importProfile);
|
||||
}
|
||||
|
||||
public void ExportProfile()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user