#region License Information /* HeuristicLab * Copyright (C) 2002-2010 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 System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using HeuristicLab.Common; using System.Reflection; namespace HeuristicLab.MainForm.WindowsForms { public partial class ContentView : View, IContentView { public ContentView() : base() { InitializeComponent(); this.locked = false; } private IContent content; public IContent Content { get { return content; } set { if ((value != null) && (!MainFormManager.ViewCanViewContent(this, value))) throw new ArgumentException(string.Format("View \"{0}\" cannot view object \"{1}\".", this.GetType().Name, value.GetType().Name)); if (InvokeRequired) { Invoke(new Action(delegate(IContent o) { this.Content = o; }), value); } else { if (this.content != value) { this.SuspendRepaint(); if (this.content != null) this.DeregisterContentEvents(); this.content = value; if (this.content != null) this.RegisterContentEvents(); this.OnContentChanged(); this.OnChanged(); this.ResumeRepaint(true); } } } } private bool locked; public virtual bool Locked { get { return this.locked; } set { if (InvokeRequired) { Action action = delegate(bool b) { this.Locked = b; }; Invoke(action, value); } else { if (value != locked) { this.SuspendRepaint(); locked = value; PropertyInfo prop = typeof(IContentView).GetProperty("Locked"); PropagateStateChanges(this, typeof(IContentView), prop); OnLockedChanged(); OnChanged(); this.ResumeRepaint(true); } } } } public event EventHandler LockedChanged; protected virtual void OnLockedChanged() { if (InvokeRequired) Invoke((MethodInvoker)OnLockedChanged); else { EventHandler handler = LockedChanged; if (handler != null) handler(this, EventArgs.Empty); } } /// /// Adds eventhandlers to the current instance. /// protected virtual void RegisterContentEvents() { } /// /// Removes the eventhandlers from the current instance. /// protected virtual void DeregisterContentEvents() { } /// /// Is called when the content property changes. /// protected virtual void OnContentChanged() { } } }