using System; using System.Windows.Forms; using Core.Common.Base; using Core.Common.Forms.Views; using Core.Common.Gui.Properties; using Core.Common.Utils.Reflection; using Ringtoets.Integration.Data.Contribution; namespace Ringtoets.Integration.Forms.Views { /// /// View for the , from which the /// can be updated and the and /// can be seen in a grid. /// public partial class FailureMechanismContributionView : UserControl, IView, IObserver { private FailureMechanismContribution data; /// /// Creates a new instance of . /// public FailureMechanismContributionView() { InitializeComponent(); InitializeGridColumns(); BindNormChange(); BindNormInputLeave(); } public object Data { get { return data; } set { SetNormValue((FailureMechanismContribution)value); } } public void UpdateObserver() { SetNormText(); probabilityDistributionGrid.Invalidate(); } private void SetNormValue(FailureMechanismContribution value) { UnbindNormChange(); DetachFromData(); data = value; SetGridDataSource(); SetNormText(); AttachToData(); BindNormChange(); } private void SetGridDataSource() { if (data != null) { probabilityDistributionGrid.DataSource = data.Distribution; } } private void AttachToData() { if (data != null) { data.Attach(this); } } private void DetachFromData() { if (data != null) { data.Detach(this); } } private void BindNormChange() { normInput.ValueChanged += NormValueChanged; } private void UnbindNormChange() { normInput.ValueChanged -= NormValueChanged; } private void BindNormInputLeave() { normInput.Leave += NormInputLeave; } private void NormInputLeave(object sender, EventArgs e) { ResetTextIfEmtpy(); } private void NormValueChanged(object sender, EventArgs eventArgs) { data.Norm = Convert.ToInt32(normInput.Value); data.NotifyObservers(); } private void ResetTextIfEmtpy() { if (string.IsNullOrEmpty(normInput.Text)) { normInput.Text = string.Format("{0}", normInput.Value); } } private void SetNormText() { if (data != null) { normInput.Value = data.Norm; } } private void InitializeGridColumns() { var assessmentName = TypeUtils.GetMemberName(e => e.Assessment); var columnNameFormat = "column_{0}"; var assessmentColumn = new DataGridViewTextBoxColumn { DataPropertyName = assessmentName, HeaderText = Resources.FailureMechanismContributionView_GridColumn_Assessment, Name = string.Format(columnNameFormat, assessmentName), AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader }; var contributionName = TypeUtils.GetMemberName(e => e.Contribution); var probabilityColumn = new DataGridViewTextBoxColumn { DataPropertyName = contributionName, HeaderText = Resources.FailureMechanismContributionView_GridColumn_Contribution, Name = string.Format(columnNameFormat, contributionName), AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader }; var probabilitySpaceName = TypeUtils.GetMemberName(e => e.ProbabilitySpace); var probabilityPerYearColumn = new DataGridViewTextBoxColumn { DataPropertyName = probabilitySpaceName, HeaderText = Resources.FailureMechanismContributionView_GridColumn_ProbabilitySpace, Name = string.Format(columnNameFormat, probabilitySpaceName), AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, MinimumWidth = 100 }; probabilityDistributionGrid.AutoGenerateColumns = false; probabilityDistributionGrid.Columns.AddRange(assessmentColumn, probabilityColumn, probabilityPerYearColumn); } } }