diff --git a/Src/LexText/LexTextDll/AreaListener.cs b/Src/LexText/LexTextDll/AreaListener.cs
index 6d36ee52ca..287c2e0778 100644
--- a/Src/LexText/LexTextDll/AreaListener.cs
+++ b/Src/LexText/LexTextDll/AreaListener.cs
@@ -129,6 +129,7 @@ protected virtual void Dispose(bool disposing)
{
Subscriber.Unsubscribe(EventConstants.SetToolFromName, SetToolFromName);
Subscriber.Unsubscribe(EventConstants.ReloadAreaTools, ReloadAreaTools);
+ Subscriber.Unsubscribe(EventConstants.GetContentControlParameters, GetContentControlParameters);
// Dispose managed resources here.
if (m_mediator != null)
@@ -153,6 +154,7 @@ public void Init(Mediator mediator, PropertyTable propertyTable, XmlNode configu
m_ccustomLists = 0;
Subscriber.Subscribe(EventConstants.SetToolFromName, SetToolFromName);
Subscriber.Subscribe(EventConstants.ReloadAreaTools, ReloadAreaTools);
+ Subscriber.Subscribe(EventConstants.GetContentControlParameters, GetContentControlParameters);
}
private DateTime m_lastToolChange = DateTime.MinValue;
@@ -959,15 +961,18 @@ private XmlNode GetToolNodeForArea(string areaName, out string toolName)
}
///
- /// This is designed to be called by reflection through the mediator, when something typically in xWorks needs to get
- /// the parameter node for a given tool. The last argument is a one-item array used to return the result,
- /// since I don't think we handle Out parameters in our SendMessage protocol.
+ /// This subscriber is called when the GetContentControlParameters event is published.
+ /// Typically used when something in xWorks needs to get the parameter node for a given tool.
+ /// The last argument is a one-item array used to return the result because we
+ /// don't have return values or out parameters in our Publish/Subscribe protocol.
///
- public bool OnGetContentControlParameters(object parameterObj)
+ private void GetContentControlParameters(object parameterObj)
{
var param = parameterObj as Tuple;
if (param == null)
- return false; // we sure can't handle it; should we throw?
+ {
+ return; // we sure can't handle it; should we throw?
+ }
string area = param.Item1;
string tool = param.Item2;
XmlNode[] result = param.Item3;
@@ -976,7 +981,6 @@ public bool OnGetContentControlParameters(object parameterObj)
{
result[0] = node.SelectSingleNode("control");
}
- return true; // whatever happened, we did the best that can be done.
}
protected string GetCurrentAreaName()
diff --git a/Src/xWorks/DictionaryConfigurationMigrators/PreHistoricMigrator.cs b/Src/xWorks/DictionaryConfigurationMigrators/PreHistoricMigrator.cs
index e70ff19271..33e86850c1 100644
--- a/Src/xWorks/DictionaryConfigurationMigrators/PreHistoricMigrator.cs
+++ b/Src/xWorks/DictionaryConfigurationMigrators/PreHistoricMigrator.cs
@@ -13,6 +13,7 @@
using SIL.FieldWorks.Common.Controls;
using SIL.LCModel.Core.KernelInterfaces;
using SIL.FieldWorks.Common.FwUtils;
+using static SIL.FieldWorks.Common.FwUtils.FwUtils;
using SIL.FieldWorks.Common.Widgets;
using SIL.LCModel;
using SIL.LCModel.DomainServices;
@@ -127,7 +128,7 @@ private XmlNode GetConfigureLayoutsNodeForTool(string tool)
{
var collector = new XmlNode[1];
var parameter = new Tuple("lexicon", tool, collector);
- m_mediator.SendMessage("GetContentControlParameters", parameter);
+ Publisher.Publish(new PublisherParameterObject(EventConstants.GetContentControlParameters, parameter));
var controlNode = collector[0];
var parameters = controlNode.SelectSingleNode("parameters");
var configureLayouts = XmlUtils.FindNode(parameters, "configureLayouts");
diff --git a/Src/xWorks/ExportDialog.cs b/Src/xWorks/ExportDialog.cs
index b34741bc8f..47e5b84684 100644
--- a/Src/xWorks/ExportDialog.cs
+++ b/Src/xWorks/ExportDialog.cs
@@ -519,7 +519,7 @@ private Control EnsureViewInfo()
}
var collector = new XmlNode[1];
var parameter = new Tuple(area, tool, collector);
- m_mediator.SendMessage("GetContentControlParameters", parameter);
+ Publisher.Publish(new PublisherParameterObject(EventConstants.GetContentControlParameters, parameter));
var controlNode = collector[0];
Debug.Assert(controlNode != null);
XmlNode dynLoaderNode = controlNode.SelectSingleNode("dynamicloaderinfo");
diff --git a/Src/xWorks/xWorksTests/DictionaryConfigurationMigrators/StubContentControlProvider.cs b/Src/xWorks/xWorksTests/DictionaryConfigurationMigrators/StubContentControlProvider.cs
index 2fcb328dcb..987dfba3b8 100644
--- a/Src/xWorks/xWorksTests/DictionaryConfigurationMigrators/StubContentControlProvider.cs
+++ b/Src/xWorks/xWorksTests/DictionaryConfigurationMigrators/StubContentControlProvider.cs
@@ -5,6 +5,8 @@
using System;
using System.Xml;
using NUnit.Framework;
+using SIL.FieldWorks.Common.FwUtils;
+using static SIL.FieldWorks.Common.FwUtils.FwUtils;
using XCore;
namespace SIL.FieldWorks.XWorks.DictionaryConfigurationMigrators
@@ -14,7 +16,7 @@ namespace SIL.FieldWorks.XWorks.DictionaryConfigurationMigrators
/// tools for testing export functionality.
///
/// To use add the following to your TestFixtureSetup: m_mediator.AddColleague(new StubContentControlProvider());
- internal class StubContentControlProvider : IxCoreColleague
+ internal class StubContentControlProvider : IxCoreColleague, IDisposable
{
private const string m_contentControlDictionary =
@"
@@ -63,6 +65,7 @@ public StubContentControlProvider()
var reversalDoc = new XmlDocument();
reversalDoc.LoadXml(m_contentControlReversal);
m_testControlRevNode = reversalDoc.DocumentElement;
+ Subscriber.Subscribe(EventConstants.GetContentControlParameters, GetContentControlParameters);
}
public void Init(Mediator mediator, PropertyTable propertyTable, XmlNode configurationParameters)
@@ -78,18 +81,34 @@ public IxCoreColleague[] GetMessageTargets()
/// This is called by reflection through the mediator. We need so that we can migrate through the PreHistoricMigrator.
///
// ReSharper disable once UnusedMember.Local
- private bool OnGetContentControlParameters(object parameterObj)
+ private void GetContentControlParameters(object parameterObj)
{
var param = parameterObj as Tuple;
if (param == null)
- return false;
+ return;
var result = param.Item3;
Assert.That(param.Item2 == "lexiconDictionary" || param.Item2 == "reversalToolEditComplete", "No params for tool: " + param.Item2);
result[0] = param.Item2 == "lexiconDictionary" ? m_testControlDictNode : m_testControlRevNode;
- return true;
}
public bool ShouldNotCall { get { return false; } }
public int Priority { get { return 1; }}
+
+ public void Dispose()
+ {
+ GC.SuppressFinalize(this);
+ Dispose(true);
+ }
+
+ public void Dispose(bool disposeCalled)
+ {
+ System.Diagnostics.Debug.WriteLineIf(!disposeCalled, "****** Missing Dispose() call for " + GetType().Name + ". ****** ");
+ Subscriber.Unsubscribe(EventConstants.GetContentControlParameters, GetContentControlParameters);
+ }
+
+ ~StubContentControlProvider()
+ {
+ Dispose(false);
+ }
}
}
\ No newline at end of file