private void DetachFixin(AbstractFixin fixin, string fixinName)
{
if (fixin == null && fixinName == null)
{
throw new ArgumentNullException(
String.Format(
"When detaching a fixin from form '{0}', both parameters " +
"('fixin' and 'fixinName') can't be null.", Anonymous ? (object)this : Name));
}
if (fixin == null)
{
fixin = UpdateFixins.ContainsKey(fixinName) ? UpdateFixins[fixinName]
: RenderFixins.ContainsKey(fixinName) ? RenderFixins[fixinName]
: null;
if (fixin == null)
{
return;
}
}
else if (fixinName == null)
{
fixinName = fixin.Name;
}
var type = fixin.FixinType;
// There's probably a simpler if statement for this...
if (type == FixinType.Update && _midUpdateFixins ||
type == FixinType.Render && _midRenderFixins ||
type == (FixinType.Update | FixinType.Render) && (_midRenderFixins || _midUpdateFixins))
{
_fixinsToRemove.Add(fixinName);
}
else
{
switch (type)
{
case FixinType.Update:
UpdateFixins.Remove(fixinName);
break;
case FixinType.Render:
RenderFixins.Remove(fixinName);
break;
case FixinType.Update | FixinType.Render:
UpdateFixins.Remove(fixinName);
RenderFixins.Remove(fixinName);
break;
}
fixin.Kill(false);
}
}