#region License Information /* HeuristicLab * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System; using System.Collections.Generic; using HeuristicLab.Collections; using HeuristicLab.Core; using HeuristicLab.MainForm; using HeuristicLab.MainForm.WindowsForms; namespace HeuristicLab.Problems.DataAnalysis.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 += constraint_CheckedItemChanged; } protected override void OnContentChanged() { base.OnContentChanged(); UpdateControl(); } private IEnumerable ParseConstraints(string input) { return IntervalConstraintsParser.ParseInput(input, Content.ProblemData.TargetVariable, Content.ProblemData.AllowedInputVariables); } private void parseBtn_Click(object sender, EventArgs e) { if (constraintsInput.Text != null) { ClearConstraints(); var parsedConstraints = ParseConstraints(constraintsInput.Text); foreach (var constraint in parsedConstraints) { constraint.Changed += constraint_Changed; intervalConstraints.Add(constraint, constraint.Enabled); } 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(); constraintsOutput.Content = intervalConstraints.AsReadOnly(); } else { ClearConstraints(); constraintsInput.Text = Content.Input; foreach (var constraint in Content.Constraints) { constraint.Changed += constraint_Changed; intervalConstraints.Add(constraint, constraint.Enabled); } constraintsOutput.Content = intervalConstraints.AsReadOnly(); } SetEnabledStateOfControls(); } private void constraint_Changed(object sender, EventArgs e) { var constraint = (IntervalConstraint) sender; intervalConstraints.SetItemCheckedState(constraint, constraint.Enabled); } private void constraint_CheckedItemChanged(object sender, CollectionItemsChangedEventArgs> e) { ICheckedItemList checkedItemList = (ICheckedItemList) sender; foreach (var indexedItem in e.Items) { indexedItem.Value.Enabled = checkedItemList.ItemChecked(indexedItem.Value); } } private void constraintsInput_TextChanged(object sender, EventArgs e) { errorOutput.Text = "Unparsed changes! Press parse button to save changes."; } private void ClearConstraints() { foreach (var constraint in intervalConstraints) { constraint.Changed -= constraint_Changed; } intervalConstraints.Clear(); } } }