I am developing a plugin (for mapwindow v5.1.1.207023) that serializes metadata associated to each of the layers created by my plugin during the execution. The problem is that when I load the saved project file again and during deserialization I capture the event "plugin.LayerAdded" but the layer has not yet restored its metadata values because the restore function is called after adding the layer:
private bool RestoreLayers(XmlProject project, out int selectedLayerHandle)
{
...
foreach (var xmlLayer in project.Layers
{
...
if (_layerService.AddLayerIdentity(xmlLayer.Identity)) // Add layer and inside called LayerAdded event
{
...
xmlLayer.RestoreLayer(layer, _broadcaster); // Deserialize layer metada
}
Everything would be much easier if in "BasePlugin.cs" had a new event "ProjectOpened" just like there is one for "ProjectClosed", ...
public event EventHandler<EventArgs> ProjectOpened
{
add { ProjectOpened_ += value; }
remove { ProjectOpened_ -= value; }
}
... triggered by the method "public bool Open (string filename, bool silent = true) "from the file" ProjectService.cs "when result is true:
public bool Open(string filename, bool silent = true)
{
...
if (legacy)
{
result = OpenLegacyProject(filename);
}
else
{
result = OpenCore(filename, silent);
}
if (result) _broadcaster.BroadcastEvent(p => p.ProjectOpened, this, args);