#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 {
private IContent content;
public IContent Content {
get { return content; }
set {
if ((value != null) && (!MainFormManager.ViewCanViewObject(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) {
if (this.content != null) this.DeregisterContentEvents();
this.content = value;
if (this.content != null) this.RegisterContentEvents();
this.OnContentChanged();
this.OnChanged();
}
}
}
}
public ContentView()
: base() {
InitializeComponent();
this.locked = false;
}
public ContentView(IContent content)
: this() {
this.content = content;
}
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;
PropertyInfo prop = typeof(IContentView).GetProperty("Locked");
PropagateStateChanges(this, typeof(IContentView), prop);
OnLockedChanged();
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() {
}
}
}