Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions ACadSharp.Tests/Tables/TableEntryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@ public void CloneUnattachEvent(Type t)
CadObjectTestUtils.AssertTableEntryClone(entry, clone);
}

[Fact()]
public void ChangeName()
{
string initialName = "custom_layer";
Layer layer = new Layer(initialName);

CadDocument doc = new CadDocument();

doc.Layers.Add(layer);

layer.Name = "new_name";

Assert.NotNull(doc.Layers[layer.Name]);
Assert.Null(doc.Layers[initialName]);
}

[Fact()]
public void SetFlagUsingMapper()
{
Expand Down
23 changes: 23 additions & 0 deletions ACadSharp/OnNameChangedArgs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;

namespace ACadSharp
{
public class OnNameChangedArgs : EventArgs
{
/// <summary>
/// Old object name
/// </summary>
public string OldName { get; }

/// <summary>
/// New name to be assign at the object
/// </summary>
public string NewName { get; }

public OnNameChangedArgs(string oldName, string newName)
{
this.OldName = oldName;
this.NewName = newName;
}
}
}
14 changes: 14 additions & 0 deletions ACadSharp/Tables/Collections/Table.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,21 @@ protected void add(string key, T item)
this._entries.Add(key, item);
item.Owner = this;

item.OnNameChanged += this.onEntryNameChanged;

OnAdd?.Invoke(this, new CollectionChangedEventArgs(item));
}

private void onEntryNameChanged(object sender, OnNameChangedArgs e)
{
if (this._defaultEntries.Contains(e.OldName, StringComparer.InvariantCultureIgnoreCase))
{
throw new ArgumentException($"The name {e.OldName} belongs to a default entry.");
}

var entry = this._entries[e.OldName];
this._entries.Add(e.NewName, entry);
this._entries.Remove(e.OldName);
}
}
}
3 changes: 3 additions & 0 deletions ACadSharp/Tables/TableEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ namespace ACadSharp.Tables
[DxfSubClass(DxfSubclassMarker.TableRecord, true)]
public abstract class TableEntry : CadObject, INamedCadObject
{
public event EventHandler<OnNameChangedArgs> OnNameChanged;

/// <inheritdoc/>
public override string SubclassMarker => DxfSubclassMarker.TableRecord;

Expand All @@ -23,6 +25,7 @@ public string Name
// throw new System.ArgumentNullException(nameof(value), $"Table entry [{this.GetType().FullName}] must have a name");
}

OnNameChanged?.Invoke(this, new OnNameChangedArgs(this._name, value));
this._name = value;
}
}
Expand Down
2 changes: 1 addition & 1 deletion CSUtilities