#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.Text;
using System.Xml;
using System.Windows.Forms;
namespace HeuristicLab.MainForm.WindowsForms {
public partial class View : UserControl, IView {
private bool initialized;
public View() {
InitializeComponent();
this.initialized = false;
this.isShown = false;
this.closeReason = CloseReason.None;
}
private string myCaption;
public string Caption {
get { return myCaption; }
set {
if (InvokeRequired) {
Action action = delegate(string s) { this.Caption = s; };
Invoke(action, value);
} else {
if (value != myCaption) {
myCaption = value;
OnCaptionChanged();
}
}
}
}
private bool isShown;
public bool IsShown {
get { return this.isShown; }
private set { this.isShown = value; }
}
public new void Show() {
MainForm mainform = MainFormManager.GetMainForm();
bool firstTimeShown = mainform.GetForm(this) == null;
this.IsShown = true;
mainform.ShowView(this, firstTimeShown);
if (firstTimeShown) {
Form form = mainform.GetForm(this);
form.FormClosed += new FormClosedEventHandler(OnClosedHelper);
form.FormClosing += new FormClosingEventHandler(OnClosingHelper);
}
this.OnShown(new ViewShownEventArgs(this, firstTimeShown));
}
public void Close() {
MainForm mainform = MainFormManager.GetMainForm();
Form form = mainform.GetForm(this);
if (form != null) {
this.IsShown = false;
mainform.CloseView(this);
}
}
public void Close(CloseReason closeReason) {
MainForm mainform = MainFormManager.GetMainForm();
Form form = mainform.GetForm(this);
if (form != null) {
this.IsShown = false;
mainform.CloseView(this, closeReason);
}
}
public new void Hide() {
this.IsShown = false;
MainFormManager.GetMainForm().HideView(this);
this.OnHidden(EventArgs.Empty);
}
public event EventHandler CaptionChanged;
protected virtual void OnCaptionChanged() {
if (CaptionChanged != null)
CaptionChanged(this, EventArgs.Empty);
}
public event EventHandler Changed;
protected virtual void OnChanged() {
if (InvokeRequired)
Invoke((MethodInvoker)OnChanged);
else if (Changed != null)
Changed(this, EventArgs.Empty);
}
protected virtual void OnShown(ViewShownEventArgs e) {
}
protected virtual void OnHidden(EventArgs e) {
}
private CloseReason closeReason;
internal CloseReason CloseReason {
get { return this.closeReason; }
set { this.closeReason = value; }
}
private void OnClosingHelper(object sender, FormClosingEventArgs e) {
if (this.closeReason != CloseReason.None)
this.OnClosing(new FormClosingEventArgs(this.closeReason, e.Cancel));
else
this.OnClosing(e);
this.closeReason = CloseReason.None;
}
protected virtual void OnClosing(FormClosingEventArgs e) {
}
private void OnClosedHelper(object sender, FormClosedEventArgs e) {
if (this.closeReason != CloseReason.None)
this.OnClosed(new FormClosedEventArgs(this.closeReason));
else
this.OnClosed(e);
Form form = (Form)sender;
form.FormClosed -= new FormClosedEventHandler(OnClosedHelper);
form.FormClosing -= new FormClosingEventHandler(OnClosingHelper);
this.closeReason = CloseReason.None;
}
protected virtual void OnClosed(FormClosedEventArgs e) {
}
private void View_Load(object sender, EventArgs e) {
if (!this.initialized && !this.DesignMode) {
this.OnInitialized(e);
this.initialized = true;
}
}
protected virtual void OnInitialized(EventArgs e) {
}
}
}