Skip to content

Commit

Permalink
Merge pull request #977 from Flyga-M/feature/disable-permission-ui
Browse files Browse the repository at this point in the history
  • Loading branch information
dlamkins authored Aug 3, 2024
2 parents 133f26c + 10bc625 commit 5ee820e
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ public ModulePermissionPresenter(ModulePermissionView view, ModuleManager model)
protected override Task<bool> Load(IProgress<string> progress) {
this.View.PermissionStateChanged += ViewOnPermissionStateChanged;

this.Model.ModuleEnabled += ModelOnModuleEnabled;
this.Model.ModuleDisabled += ModelOnModuleDisabled;

this.View.Editable = !this.Model.Enabled;

return base.Load(progress);
}

Expand All @@ -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();
Expand All @@ -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;
}
}
}
35 changes: 34 additions & 1 deletion Blish HUD/GameServices/Modules/UI/Views/ModulePermissionView.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -13,6 +14,25 @@ public class ModulePermissionView : TitledDetailView {
private FlowPanel _permissionFlowPanel;
private Label _messageLabel;

private bool[] _checkboxStates;

private bool _editable;

/// <summary>
/// Determines whether the displayed permissions may be edited.
/// </summary>
public bool Editable {
get => _editable;
set {
_editable = value;

if (_permissionFlowPanel == null || _messageLabel == null || _checkboxStates == null)
return;

ResetCheckboxStates();
}
}

public ModulePermissionView() { /* NOOP */ }

public ModulePermissionView(ModuleManager model) {
Expand Down Expand Up @@ -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
};
Expand All @@ -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<Checkbox>().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;
}
}
}
}
}
9 changes: 9 additions & 0 deletions Blish HUD/Strings/GameServices/ModulesService.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Blish HUD/Strings/GameServices/ModulesService.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -265,4 +265,7 @@ Lade einige herunter und platziere sie im Modulverzeichnis.</value>
<data name="PkgManagement_MoreInfo" xml:space="preserve">
<value>Mehr Info</value>
</data>
<data name="ApiPermission_NotEditable" xml:space="preserve">
<value>Berechtigungen können nur bearbeitet werden, wenn das Modul deaktiviert ist.</value>
</data>
</root>
3 changes: 3 additions & 0 deletions Blish HUD/Strings/GameServices/ModulesService.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -265,4 +265,7 @@ Téléchargez des modules et placez-les dans le dossier modules.</value>
<data name="PkgManagement_MoreInfo" xml:space="preserve">
<value>Plus d'informations</value>
</data>
<data name="ApiPermission_NotEditable" xml:space="preserve">
<value>Les permissions ne peuvent être modifiées que lorsque le module est désactivé.</value>
</data>
</root>
3 changes: 3 additions & 0 deletions Blish HUD/Strings/GameServices/ModulesService.resx
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,7 @@ Download some modules and place them in the modules folder.</value>
<data name="PkgManagement_MoreInfo" xml:space="preserve">
<value>More Info</value>
</data>
<data name="ApiPermission_NotEditable" xml:space="preserve">
<value>Permissions may only be edited, when the module is disabled.</value>
</data>
</root>

0 comments on commit 5ee820e

Please sign in to comment.