#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.Reflection; using System.Windows.Forms; using HeuristicLab.Common; 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 { //check if the ContentView is tagged with a corresponding ContentAttribute for the type of the Content if ((value != null) && (!MainFormManager.ViewCanViewContent(this, value)) && ContentAttribute.HasContentAttribute(this.GetType())) 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.SetEnabledStateOfControls(); 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) { locked = value; OnLockedChanged(); PropertyInfo prop = typeof(IContentView).GetProperty("Locked"); PropagateStateChanges(this, typeof(IContentView), prop); SetEnabledStateOfControls(); OnChanged(); } } } } 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() { } /// /// This method is called if the ReadyOnly, Locked or Content property of the ContentView changes to update the controls of the view. /// protected override void SetEnabledStateOfControls() { base.SetEnabledStateOfControls(); } /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing) { if (Content != null) DeregisterContentEvents(); if (components != null) components.Dispose(); } base.Dispose(disposing); } } }