using System; using HeuristicLab.Collections; using HeuristicLab.Core; using HeuristicLab.MainForm; using HeuristicLab.MainForm.WindowsForms; namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { [View("ParsedConstraint View")] [Content(typeof(ParsedConstraint), true)] public partial class ParsedConstraintView : AsynchronousContentView { private CheckedItemList intervalConstraints; public new ParsedConstraint Content { get => (ParsedConstraint)base.Content; set => base.Content = value; } public ParsedConstraintView() { InitializeComponent(); errorOutput.Text = ""; intervalConstraints = new CheckedItemList(); intervalConstraints.CheckedItemsChanged += constraints_CheckedItemsChanged; } protected override void OnContentChanged() { base.OnContentChanged(); UpdateControl(); } private CheckedItemList ParseConstraints(string input) { CheckedItemList constraints = new CheckedItemList(IntervalConstraintsParser.ParseInput(input, Content.ProblemData.TargetVariable, Content.ProblemData.AllowedInputVariables)); return constraints; } private void parseBtn_Click(object sender, EventArgs e) { if (constraintsInput.Text != null) { intervalConstraints = ParseConstraints(constraintsInput.Text); intervalConstraints.CheckedItemsChanged += constraints_CheckedItemsChanged; constraintsOutput.Content = intervalConstraints; Content.Constraints = intervalConstraints; Content.Input = constraintsInput.Text; errorOutput.Text = ""; } else { errorOutput.Text = "No constraints were found!"; } } private void UpdateControl() { if (Content == null) { ClearConstraints(); constraintsInput.Text = string.Empty; errorOutput.Text = string.Empty; constraintsOutput.Content = intervalConstraints; } else { constraintsInput.Text = Content.Input; foreach (var constraint in Content.Constraints) { constraint.Changed += new EventHandler(Content_Changed); intervalConstraints.Add(constraint, constraint.IsChecked); } } constraintsOutput.Content = intervalConstraints; } private void constraintsInput_TextChanged(object sender, EventArgs e) { errorOutput.Text = "Unparsed changes! Press parse button to save changes."; } private void Content_Changed(object sender, EventArgs e) { var constraint = (IntervalConstraint) sender; intervalConstraints.SetItemCheckedState(constraint, constraint.IsChecked); constraintsOutput.Content = intervalConstraints; } private void constraints_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs> e) { var checkedItemList = (ICheckedItemList) sender; foreach (var indexedItem in e.Items) { indexedItem.Value.IsChecked = checkedItemList.ItemChecked(indexedItem.Value); } } private void ClearConstraints() { foreach (var constraint in intervalConstraints) { constraint.Changed -= new EventHandler(Content_Changed); } intervalConstraints.Clear(); } } }