using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using HeuristicLab.Core.Views; using HeuristicLab.MainForm; using HeuristicLab.Hive.JobBase; using HeuristicLab.Persistence.Default.Xml; using System.IO; namespace HeuristicLab.Hive.Experiment.Views { [View("JobItem View")] [Content(typeof(JobItem), true)] public partial class JobItemView : ItemView { public new JobItem Content { get { return (JobItem)base.Content; } set { if (base.Content != value) { base.Content = value; } } } public JobItemView() { InitializeComponent(); this.ReadOnly = true; } protected override void OnContentChanged() { base.OnContentChanged(); if (Content != null) { logView.Content = Content.Log; Content_JobDtoChanged(this, EventArgs.Empty); Content_JobStateChanged(this, EventArgs.Empty); if (Content.LatestSnapshot != null) { snapshotStatusText.InvokeIfRequired(c => c.Text = Content.LatestSnapshot.StatusMessage); snapshotTimeText.InvokeIfRequired(c => { c.Text = Content.LatestSnapshotTime.ToString(); }); } } } protected override void RegisterContentEvents() { base.RegisterContentEvents(); Content.LatestSnapshotChanged += new EventHandler(Content_LatestSnapshotChanged); Content.JobDtoChanged += new EventHandler(Content_JobDtoChanged); Content.JobStateChanged += new EventHandler(Content_JobStateChanged); Content.SnapshotRequestedStateChanged += new EventHandler(Content_SnapshotRequestedStateChanged); } protected override void DeregisterContentEvents() { Content.LatestSnapshotChanged -= new EventHandler(Content_LatestSnapshotChanged); Content.JobDtoChanged -= new EventHandler(Content_JobDtoChanged); Content.JobStateChanged -= new EventHandler(Content_JobStateChanged); Content.SnapshotRequestedStateChanged -= new EventHandler(Content_SnapshotRequestedStateChanged); base.DeregisterContentEvents(); } private void Content_JobDtoChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(Content_JobDtoChanged), sender, e); } else { this.jobIdTextBox.Text = Content.JobDto.Id.ToString(); this.dateCreatedTextBox.Text = Content.JobDto.DateCreated.ToString(); this.priorityTextBox.Text = Content.JobDto.Priority.ToString(); this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString(); this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString(); this.projectTextBox.Text = Content.JobDto.Project != null ? Content.JobDto.Project.Name : "-"; } } private void Content_JobStateChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(Content_JobStateChanged), sender, e); } else { this.stateTextBox.Text = Content.State.ToString(); this.percentageTextBox.Text = (Content.Percentage * 100).ToString() + "%"; this.percentageProgressBar.Value = Convert.ToInt32(Content.Percentage * percentageProgressBar.Maximum); this.dateCalculatedText.Text = Content.DateCalculated.ToString(); this.dateFinishedTextBox.Text = Content.DateFinished.ToString(); this.exceptionTextBox.Text = Content.Exception; } } void Content_LatestSnapshotChanged(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(Content_LatestSnapshotChanged), sender, e); } else { if (Content.LatestSnapshot != null) { snapshotStatusText.Text = Content.LatestSnapshot.StatusMessage; snapshotTimeText.Text = Content.LatestSnapshotTime.ToString(); } else { snapshotStatusText.Text = ""; snapshotTimeText.Text = ""; } SetEnabledStateOfControls(); } } protected override void SetEnabledStateOfControls() { if (InvokeRequired) { this.InvokeIfRequired(c => { SetEnabledStateOfControls(); }); } else { base.SetEnabledStateOfControls(); if (Content != null) { openSnapshotButton.Enabled = Content.LatestSnapshot != null && Content.SnapshotRequestedState == SnapshotRequestedState.Idle; requestSnapshotButton.Enabled = Content.SnapshotRequestedState == SnapshotRequestedState.Idle; } this.jobIdTextBox.ReadOnly = this.ReadOnly; this.stateTextBox.ReadOnly = this.ReadOnly; this.userIdTextBox.ReadOnly = this.ReadOnly; this.percentageTextBox.ReadOnly = this.ReadOnly; this.dateCreatedTextBox.ReadOnly = this.ReadOnly; this.dateCalculatedText.ReadOnly = this.ReadOnly; this.dateFinishedTextBox.ReadOnly = this.ReadOnly; this.priorityTextBox.ReadOnly = this.ReadOnly; this.coresNeededTextBox.ReadOnly = this.ReadOnly; this.memoryNeededTextBox.ReadOnly = this.ReadOnly; this.exceptionTextBox.ReadOnly = this.ReadOnly; this.projectTextBox.ReadOnly = this.ReadOnly; this.snapshotStatusText.ReadOnly = this.ReadOnly; this.snapshotTimeText.ReadOnly = this.ReadOnly; } } private void openSnapshotButton_Click(object sender, EventArgs e) { OptimizerJob job = XmlParser.Deserialize(new MemoryStream(Content.LatestSnapshot.Obj.SerializedJobData)); MainFormManager.MainForm.ShowContent(job.Optimizer); } private void requestSnapshotButton_Click(object sender, EventArgs e) { this.Content.RequestSnapshot(); } private void Content_SnapshotRequestedStateChanged(object sender, EventArgs e) { SetEnabledStateOfControls(); } } }