diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ModulePermissionPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ModulePermissionPresenter.cs index 43574cabd..993f146f1 100644 --- a/Blish HUD/GameServices/Modules/UI/Presenters/ModulePermissionPresenter.cs +++ b/Blish HUD/GameServices/Modules/UI/Presenters/ModulePermissionPresenter.cs @@ -14,6 +14,11 @@ public ModulePermissionPresenter(ModulePermissionView view, ModuleManager model) protected override Task Load(IProgress progress) { this.View.PermissionStateChanged += ViewOnPermissionStateChanged; + this.Model.ModuleEnabled += ModelOnModuleEnabled; + this.Model.ModuleDisabled += ModelOnModuleDisabled; + + this.View.Editable = !this.Model.Enabled; + return base.Load(progress); } @@ -33,6 +38,16 @@ private void ViewOnPermissionStateChanged(object sender, KeyedValueChangedEventA GameService.Settings.Save(); } + private void ModelOnModuleEnabled(object sender, EventArgs e) { + this.View.Editable = false; + UpdateStatus(); + } + + private void ModelOnModuleDisabled(object sender, EventArgs e) { + this.View.Editable = true; + UpdateStatus(); + } + protected override void UpdateView() { UpdatePermissionList(); UpdateStatus(); @@ -47,8 +62,19 @@ private void UpdatePermissionList() { } private void UpdateStatus() { - // Unused at this time + if (Model.Enabled) { + this.View.SetDetails(Strings.GameServices.ModulesService.ApiPermission_NotEditable, + TitledDetailView.DetailLevel.Info); + } else { + this.View.ClearDetails(); + } } + protected override void Unload() { + this.View.PermissionStateChanged -= ViewOnPermissionStateChanged; + + this.Model.ModuleEnabled -= ModelOnModuleEnabled; + this.Model.ModuleDisabled -= ModelOnModuleDisabled; + } } } diff --git a/Blish HUD/GameServices/Modules/UI/Views/ModulePermissionView.cs b/Blish HUD/GameServices/Modules/UI/Views/ModulePermissionView.cs index 7a0db2c3d..a44feb10c 100644 --- a/Blish HUD/GameServices/Modules/UI/Views/ModulePermissionView.cs +++ b/Blish HUD/GameServices/Modules/UI/Views/ModulePermissionView.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Blish_HUD.Controls; using Blish_HUD.Modules.UI.Presenters; using Gw2Sharp.WebApi.V2.Models; @@ -13,6 +14,25 @@ public class ModulePermissionView : TitledDetailView { private FlowPanel _permissionFlowPanel; private Label _messageLabel; + private bool[] _checkboxStates; + + private bool _editable; + + /// + /// Determines whether the displayed permissions may be edited. + /// + public bool Editable { + get => _editable; + set { + _editable = value; + + if (_permissionFlowPanel == null || _messageLabel == null || _checkboxStates == null) + return; + + ResetCheckboxStates(); + } + } + public ModulePermissionView() { /* NOOP */ } public ModulePermissionView(ModuleManager model) { @@ -47,10 +67,12 @@ public void SetPermissions(IEnumerable<(TokenPermission Permission, bool Optiona _permissionFlowPanel.ClearChildren(); _permissionFlowPanel.Hide(); + _checkboxStates = permissions.Select(permission => permission.Optional).ToArray(); + foreach ((var permission, bool optional, string description, bool set) in permissions) { var permissionCheckbox = new Checkbox() { Text = permission.ToString(), - Enabled = optional, + Enabled = optional && this.Editable, BasicTooltipText = description, Parent = _permissionFlowPanel }; @@ -66,5 +88,16 @@ public void SetPermissions(IEnumerable<(TokenPermission Permission, bool Optiona _messageLabel.Visible = !(_permissionFlowPanel.Visible = _permissionFlowPanel.Children.Count > 0); } + private void ResetCheckboxStates() { + var checkboxes = _permissionFlowPanel.GetChildrenOfType().ToArray(); + if (Editable) { + for (int i = 0; i < checkboxes.Length; i++) + checkboxes[i].Enabled = _checkboxStates[i]; + } else { + foreach (var checkbox in checkboxes) { + checkbox.Enabled = false; + } + } + } } } diff --git a/Blish HUD/Strings/GameServices/ModulesService.Designer.cs b/Blish HUD/Strings/GameServices/ModulesService.Designer.cs index 5f90d0d07..adc982b38 100644 --- a/Blish HUD/Strings/GameServices/ModulesService.Designer.cs +++ b/Blish HUD/Strings/GameServices/ModulesService.Designer.cs @@ -78,6 +78,15 @@ internal static string ApiPermission_NoPermissionsRequested { } } + /// + /// Looks up a localized string similar to Permissions may only be edited, when the module is disabled.. + /// + internal static string ApiPermission_NotEditable { + get { + return ResourceManager.GetString("ApiPermission_NotEditable", resourceCulture); + } + } + /// /// Looks up a localized string similar to Optional. /// diff --git a/Blish HUD/Strings/GameServices/ModulesService.de.resx b/Blish HUD/Strings/GameServices/ModulesService.de.resx index 6577358d4..15e89feab 100644 --- a/Blish HUD/Strings/GameServices/ModulesService.de.resx +++ b/Blish HUD/Strings/GameServices/ModulesService.de.resx @@ -265,4 +265,7 @@ Lade einige herunter und platziere sie im Modulverzeichnis. Mehr Info + + Berechtigungen können nur bearbeitet werden, wenn das Modul deaktiviert ist. + \ No newline at end of file diff --git a/Blish HUD/Strings/GameServices/ModulesService.fr.resx b/Blish HUD/Strings/GameServices/ModulesService.fr.resx index b0e4ed9ca..88ce2b720 100644 --- a/Blish HUD/Strings/GameServices/ModulesService.fr.resx +++ b/Blish HUD/Strings/GameServices/ModulesService.fr.resx @@ -265,4 +265,7 @@ Téléchargez des modules et placez-les dans le dossier modules. Plus d'informations + + Les permissions ne peuvent être modifiées que lorsque le module est désactivé. + \ No newline at end of file diff --git a/Blish HUD/Strings/GameServices/ModulesService.resx b/Blish HUD/Strings/GameServices/ModulesService.resx index 3edc35885..0197ae4f9 100644 --- a/Blish HUD/Strings/GameServices/ModulesService.resx +++ b/Blish HUD/Strings/GameServices/ModulesService.resx @@ -248,4 +248,7 @@ Download some modules and place them in the modules folder. More Info + + Permissions may only be edited, when the module is disabled. + \ No newline at end of file