1
0
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:
SpoinkyNL 2017-01-14 13:08:48 +01:00
parent afb6315ec6
commit bc2508e4ac
3 changed files with 87 additions and 45 deletions

View File

@ -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)

View File

@ -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);
}
}
}

View File

@ -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()