using System;
using System.Collections;
using System.Windows.Forms;
using Core.Common.Base.Workflow;
using Core.Common.Controls;
using Ringtoets.Common.Forms.Extensions;
using Ringtoets.Common.Forms.NodePresenters;
using Ringtoets.Piping.Data;
using Ringtoets.Piping.Service;
using Ringtoets.Piping.Forms.PresentationObjects;
using Ringtoets.Piping.Forms.Properties;
namespace Ringtoets.Piping.Forms.NodePresenters
{
///
/// This class presents the data on as a node in a and
/// implements the way the user can interact with the node.
///
public class PipingCalculationInputsNodePresenter : RingtoetsNodePresenterBase
{
///
/// Injection points for a method to cause an to be scheduled for execution.
///
public Action RunActivityAction { private get; set; }
protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, PipingCalculationInputs pipingCalculationInputs)
{
node.Text = pipingCalculationInputs.PipingData.Name;
node.Image = Resources.PipingIcon;
}
protected override IEnumerable GetChildNodeObjects(PipingCalculationInputs pipingCalculationInputs, ITreeNode node)
{
yield return pipingCalculationInputs.PipingData.Comments;
var pipingOutput = pipingCalculationInputs.PipingData.Output;
if (pipingOutput != null)
{
yield return pipingOutput;
yield return pipingCalculationInputs.PipingData.CalculationReport;
}
}
public override bool CanRenameNode(ITreeNode node)
{
return true;
}
public override bool CanRenameNodeTo(ITreeNode node, string newName)
{
return true;
}
protected override void OnNodeRenamed(PipingCalculationInputs pipingCalculationInputs, string newName)
{
pipingCalculationInputs.PipingData.Name = newName;
pipingCalculationInputs.PipingData.NotifyObservers();
}
protected override ContextMenuStrip GetContextMenu(ITreeNode sender, PipingCalculationInputs nodeData)
{
PipingCalculationData pipingData = nodeData.PipingData;
var contextMenu = new ContextMenuStrip();
contextMenu.AddMenuItem(Resources.Validate,
null,
null,
(o, args) =>
{
PipingCalculationService.Validate(pipingData);
});
contextMenu.AddMenuItem(Resources.Calculate,
null,
Resources.Play,
(o, args) =>
{
RunActivityAction(new PipingCalculationActivity(pipingData));
});
var clearOutputItem = contextMenu.AddMenuItem(Resources.Clear_output,
null,
Resources.PipingOutputClear,
(o, args) =>
{
pipingData.ClearOutput();
pipingData.NotifyObservers();
});
if (!pipingData.HasOutput)
{
clearOutputItem.Enabled = false;
clearOutputItem.ToolTipText = Resources.ClearOutput_No_output_to_clear;
}
return contextMenu;
}
}
}