From b82e2ef8391c284e9287b91347aee894c1d67fa0 Mon Sep 17 00:00:00 2001 From: Patrick Simpson Date: Wed, 8 Nov 2017 14:39:52 +0200 Subject: [PATCH] [KOE-139] SharedFolderDialog now sets read-only flag on statically configured shared folders. --- .../AcaciaZPushPlugin/Controls/KTree.cs | 2 +- .../AcaciaZPushPlugin/Controls/KTreeNode.cs | 14 ++++++++++++++ .../AcaciaZPushPlugin/Controls/KTreeRenderer.cs | 8 +++++--- .../Features/SharedFolders/FolderTreeNode.cs | 6 ++++-- .../Features/SharedFolders/SharedFoldersDialog.cs | 3 +-- .../Features/SharedFolders/StoreTreeNode.cs | 5 ++--- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTree.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTree.cs index cbcd617..7425f32 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTree.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTree.cs @@ -97,7 +97,7 @@ namespace Acacia.Controls private void ToggleCheck(KTreeNode node) { - if (_checkManager == null || node == null) + if (_checkManager == null || node == null || !node.CheckBoxEnabled) return; if (!SelectedNodes.Contains(node) || SelectedNodes.Count == 1) diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeNode.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeNode.cs index 83183b7..d0a19b9 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeNode.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeNode.cs @@ -127,6 +127,20 @@ namespace Acacia.Controls } } + private bool _checkBoxEnabled = true; + public bool CheckBoxEnabled + { + get { return _checkBoxEnabled; } + set + { + if (_checkBoxEnabled != value) + { + _checkBoxEnabled = value; + Owner?.Rerender(this); + } + } + } + private bool _isExpanded; public bool IsExpanded { diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeRenderer.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeRenderer.cs index 21c274c..787b49e 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeRenderer.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KTreeRenderer.cs @@ -132,7 +132,7 @@ namespace Acacia.Controls // Checkbox if (_tree.CheckManager != null && node.HasCheckBox) { - RenderCheckBox(graphics, node, dims.GetPartRect(KTreeNodeMeasurements.Part.CheckBox, true), highlight); + RenderCheckBox(graphics, node, dims.GetPartRect(KTreeNodeMeasurements.Part.CheckBox, true), highlight, node.CheckBoxEnabled); } // Images @@ -159,10 +159,12 @@ namespace Acacia.Controls protected abstract void RenderNodeOutline(Graphics graphics, KTreeNode node, Rectangle rect, KTreeNodeMeasurements.Part? highlight); internal protected abstract void RenderNodeExpander(Graphics graphics, KTreeNode node, Rectangle rect, KTreeNodeMeasurements.Part? highlight); - protected virtual void RenderCheckBox(Graphics graphics, KTreeNode node, Rectangle rect, KTreeNodeMeasurements.Part? highlight) + protected virtual void RenderCheckBox(Graphics graphics, KTreeNode node, Rectangle rect, KTreeNodeMeasurements.Part? highlight, bool enabled) { int state = (int)node.CheckState * 4 + 1; - if (highlight != null && highlight.Value == KTreeNodeMeasurements.Part.CheckBox) + if (!enabled) + state += 3; + else if (highlight != null && highlight.Value == KTreeNodeMeasurements.Part.CheckBox) state += 1; CheckBoxRenderer.DrawCheckBox(graphics, rect.Location, (CheckBoxState)state); diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/FolderTreeNode.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/FolderTreeNode.cs index f1efeda..8f53e69 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/FolderTreeNode.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/FolderTreeNode.cs @@ -30,7 +30,7 @@ namespace Acacia.Features.SharedFolders private readonly StoreTreeNode _store; private readonly AvailableFolder _folder; private SharedFolder _share; - public bool IsReadOnly { get { return _store.IsReadOnly; } } + public readonly bool IsReadOnly; public FolderTreeNode(StoreTreeNode store, AvailableFolder folder, SharedFolder share) { @@ -40,7 +40,9 @@ namespace Acacia.Features.SharedFolders this.Text = folder.Name; - HasCheckBox = !IsReadOnly; + IsReadOnly = share?.SyncId?.Kind == SyncKind.Configured; + HasCheckBox = true; + CheckBoxEnabled = !IsReadOnly; // Image // TODO: clean this up diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/SharedFoldersDialog.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/SharedFoldersDialog.cs index efce1de..444f876 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/SharedFoldersDialog.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/SharedFoldersDialog.cs @@ -261,8 +261,7 @@ namespace Acacia.Features.SharedFolders // Add the node node = new StoreTreeNode(_folders, gabLookup.GAB, - user, user.DisplayName, currentShares ?? new Dictionary(), - false); + user, user.DisplayName, currentShares ?? new Dictionary()); node.DirtyChanged += UserSharesChanged; _userFolders.Add(user, node); kTreeFolders.RootNodes.Add(node); diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/StoreTreeNode.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/StoreTreeNode.cs index 4f8733f..a42b327 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/StoreTreeNode.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SharedFolders/StoreTreeNode.cs @@ -49,8 +49,7 @@ namespace Acacia.Features.SharedFolders public readonly bool IsReadOnly; public StoreTreeNode(SharedFoldersManager folders, GABHandler gab, GABUser user, string text, - Dictionary currentFolders, - bool readOnly) + Dictionary currentFolders) : base(text) { @@ -58,7 +57,7 @@ namespace Acacia.Features.SharedFolders this._feature = folders.Feature; this._gab = gab; this._user = user; - this.IsReadOnly = readOnly; + this.IsReadOnly = false; // Create an empty current state. When loading the nodes, the shares will be added. This has the benefit of // cleaning up automatically any obsolote shares.