#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 System; using System.Windows.Forms; using HeuristicLab.Common; using HeuristicLab.MainForm; using HeuristicLab.MainForm.WindowsForms; using HeuristicLab.OptimizationExpertSystem.Common; namespace HeuristicLab.OptimizationExpertSystem { public partial class OptimizationKnowledgeCenter : DockingMainForm { private ToolStripProgressBar progressBar; private ToolStripLabel progressLabel; public KnowledgeCenter ExpertSystem { get; private set; } public OptimizationKnowledgeCenter(Type userInterfaceType) : base(userInterfaceType) { InitializeComponent(); ExpertSystem = new KnowledgeCenter(); ExpertSystem.DownloadStarted += ExpertSystemOnDownloadStarted; ShowContentInViewHost = false; } private void ExpertSystemOnDownloadStarted(object sender, EventArgs e) { if (InvokeRequired) { Invoke((Action>)ExpertSystemOnDownloadStarted, sender, e); return; } e.Value.ProgressStateChanged += OnProgressStateChanged; e.Value.ProgressValueChanged += OnProgressValueChanged; e.Value.MessageChanged += OnProgressStatusChanged; progressBar.Value = progressBar.Minimum; progressLabel.Text = string.Empty; progressBar.Visible = true; progressLabel.Visible = true; } private void OnProgressStateChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke((Action)OnProgressStateChanged, sender, e); return; } var progress = (IProgress)sender; if (progress.ProgressState == ProgressState.CancelRequested || progress.ProgressState == ProgressState.Finished) { progress.ProgressStateChanged -= OnProgressStateChanged; progress.ProgressValueChanged -= OnProgressValueChanged; progress.MessageChanged -= OnProgressStatusChanged; progressBar.Visible = false; progressLabel.Visible = false; } } private void OnProgressValueChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke((Action)OnProgressValueChanged, sender, e); return; } 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) { if (InvokeRequired) { Invoke((Action)OnProgressStatusChanged, sender, e); return; } var progress = (IProgress)sender; progressLabel.Text = progress.Message.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); } } }