#region License Information
/* HeuristicLab
* Copyright (C) 2002-2016 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 HeuristicLab.Common;
using HeuristicLab.MainForm;
using HeuristicLab.MainForm.WindowsForms;
using HeuristicLab.OptimizationExpertSystem.Common;
using System;
using System.Windows.Forms;
namespace HeuristicLab.OptimizationExpertSystem {
public partial class OptimizationExpertSystem : DockingMainForm {
private ToolStripProgressBar progressBar;
private ToolStripLabel progressLabel;
public ExpertSystem ExpertSystem { get; private set; }
public OptimizationExpertSystem(Type userInterfaceType) : base(userInterfaceType) {
InitializeComponent();
ExpertSystem = new ExpertSystem();
ExpertSystem.DownloadStarted += ExpertSystemOnDownloadStarted;
ShowContentInViewHost = false;
}
private void ExpertSystemOnDownloadStarted(object sender, EventArgs e) {
e.Value.ProgressStateChanged += OnProgressStateChanged;
e.Value.ProgressValueChanged += OnProgressValueChanged;
e.Value.StatusChanged += OnProgressStatusChanged;
progressBar.Value = progressBar.Minimum;
progressLabel.Text = string.Empty;
progressBar.Visible = true;
progressLabel.Visible = true;
}
private void OnProgressStateChanged(object sender, EventArgs e) {
var progress = (IProgress)sender;
if (progress.ProgressState == ProgressState.Canceled
|| progress.ProgressState == ProgressState.Finished) {
progress.ProgressStateChanged -= OnProgressStateChanged;
progress.ProgressValueChanged -= OnProgressValueChanged;
progress.StatusChanged -= OnProgressStatusChanged;
progressBar.Visible = false;
progressLabel.Visible = false;
}
}
private void OnProgressValueChanged(object sender, EventArgs e) {
var progress = (IProgress)sender;
progressBar.Value = Math.Max(progressBar.Minimum, Math.Min(progressBar.Maximum, (int)(progress.ProgressValue * 100)));
}
private void OnProgressStatusChanged(object sender, EventArgs e) {
var progress = (IProgress)sender;
progressLabel.Text = progress.Status.Replace(Environment.NewLine, " ");
}
protected override void AdditionalCreationOfGuiElements() {
base.AdditionalCreationOfGuiElements();
progressBar = new ToolStripProgressBar();
statusStrip.Items.Add(progressBar);
progressLabel = new ToolStripLabel();
statusStrip.Items.Add(progressLabel);
}
private void OptimizationExpertSystem_Load(object sender, EventArgs e) {
ShowContent(ExpertSystem.Problem);
}
}
}