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.