Commits

Alexander Kolesnikov  committed fa86aff

new presenter implemented

  • Participants
  • Parent commits 798214f
  • Branches new-mvp

Comments (0)

Files changed (7)

File ClientFramework/ClientFramework/MVC/IPresenter.cs

 
 namespace ClientFramework.MVC
 {
-    public delegate void ExceptionEventHandler(Exception ex);
-
     public interface IPresenter
     {
         /// <summary>
         /// </summary>
         Entity Entity { get; set; }
 
-        event ExceptionEventHandler HandleException;
+        event Action<Exception> HandleException;
 
         void RefreshEntity(Entity entity, EntityAction action);
 

File ClientFramework/ClientFramework/MVC/IView.cs

 {
     public interface IView
     {
-        event EventHandler Closing;
-
-        BindingSource BindingData { get; }
-
-        event EventHandler Shown;
-
+        event Action Closing;
         bool ShowProgress { set; }
     }
 }

File ClientFramework/ClientFramework/MVC/Presenter.cs

 
 namespace ClientFramework.MVC
 {
-    public abstract class Presenter<ViewType> : Presenter where ViewType : IView
+    public abstract class Presenter<TEntity, TView> where TView : IView, new()
     {
-        public ViewType TypedView
+        public TView View { get; private set; }
+
+        public bool Saved { get; private set; }
+
+        public Presenter()
         {
-            get { return (ViewType)View; }
+            this._loadEntityBck.WorkerReportsProgress = true;
+            this._loadEntityBck.WorkerSupportsCancellation = true;
+            this._loadEntityBck.DoWork += new DoWorkEventHandler(_loadEntityBck_DoWork);
+            this._loadEntityBck.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_loadEntityBck_RunWorkerCompleted);
+            this._loadEntityBck.ProgressChanged += new ProgressChangedEventHandler(_loadEntityBck_ProgressChanged);
+
+            CreateView();
         }
-    }
 
-    /// <summary>
-    /// Абстрактный метод для презентера
-    /// </summary>
-    public abstract class Presenter : IPresenter
-    {
+        private void CreateView()
+        {
+            View = new TView();
+            View.Closing += new Action(View_Closing);
+            OnViewSet();
+        }
+
         protected BackgroundWorker _loadEntityBck = new BackgroundWorker();
-        /// <summary>
-        /// указатель на представление
-        /// </summary>
-        private IView _view;
-        public IView View
-        {
-            get { return _view; }
-            set
-            {
-                _view = value;
-                OnViewSet();
-            }
-        }
 
         /// <summary>
         /// представление готово
         /// </summary>
         protected virtual void OnViewSet()
         {
-            View.Closing += new EventHandler(View_Closing);
 
-            this._loadEntityBck.WorkerReportsProgress = true;
-            this._loadEntityBck.WorkerSupportsCancellation = true;
-            this._loadEntityBck.DoWork += new DoWorkEventHandler(_loadEntityBck_DoWork);
-            this._loadEntityBck.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_loadEntityBck_RunWorkerCompleted);
-            this._loadEntityBck.ProgressChanged += new ProgressChangedEventHandler(_loadEntityBck_ProgressChanged);
         }
 
         /// <summary>
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
-        private void View_Closing(object sender, EventArgs e)
+        private void View_Closing()
         {
             Close();
         }
         /// <returns></returns>
         protected virtual bool CanClose()
         {
-            if (Entity != null && !Entity.Saved)
+            if (Entity != null && !Saved)
             {
                 DialogResult dr = MessageBox.Show("Данные не сохранены! Сохранить данные?",
                     "Внимание!",
                 }
                 else if (dr == DialogResult.No)
                 {
-                    Entity.Saved = true;
+                    Saved = true;
                     return true;
                 }
                 else
                 {
                     TryToSaveEntity();
-                    return Entity.Saved;
+                    return Saved;
                 }
             }
 
         /// <returns></returns>
         protected virtual void TryToSaveEntity()
         {
-            Entity.Saved = true;
+            Saved = true;
         }
 
-        /// <summary>
-        /// сообщение о том, что закрыть представление можно
-        /// </summary>
-        public event EventHandler Closed;
+        public event Action Closed;
         private void OnClosed()
         {
             if (Closed != null)
                 {
                     _loadEntityBck.CancelAsync();
                 }
-                Closed(null, null);
+                Closed();
             }
         }
 
             get
             {
                 _caption = GetCaption();
-                if (Entity != null && !Entity.Saved)
+                if (Entity != null && !Saved)
                 {
                     _caption += " *";
                 }
                 _caption = value;
                 if (CaptionChanged != null)
                 {
-                    CaptionChanged(this, null);
+                    CaptionChanged();
                 }
             }
         }
+
         /// <summary>
         /// сообщение о изменении заголовка
         /// </summary>
-        public event EventHandler CaptionChanged;
+        public event Action CaptionChanged;
 
         /// <summary>
         /// данные
         /// </summary>
-        private Entity _entity = null;
-        public Entity Entity
-        {
-            get
-            {
-                return _entity;
-            }
-            set
-            {
-                _entity = value;
-                if (_entity != null)
-                    _entity.SavedChanged += new EventHandler(_entity_SavedChanged);
-            }
-        }
-
-        void _entity_SavedChanged(object sender, EventArgs e)
-        {
-            Caption = GetCaption();
-        }
+        public TEntity Entity { get; set; }
 
         protected virtual string GetCaption()
         {
             return new Guid().ToString();
         }
 
-        public event ExceptionEventHandler HandleException;
+        public event Action<Exception> HandleException;
         protected void OnException(Exception ex)
         {
             if (HandleException != null)
                 HandleException(ex);
         }
 
-        public virtual Type EntityType
-        {
-            get
-            {
-                if (this.Entity != null)
-                    return Entity.GetType();
-                return null;
-            }
-        }
+        //public virtual Type EntityType
+        //{
+        //    get
+        //    {
+        //        if (this.Entity != null)
+        //            return Entity.GetType();
+        //        return null;
+        //    }
+        //}
 
-        public virtual void RefreshEntity(Entity entity, EntityAction action)
-        {
+        //public virtual void RefreshEntity(Entity entity, EntityAction action)
+        //{
 
-        }
+        //}
     }
 }

File ClientFramework/ClientFramework/WorkItem/WorkItem.cs

     {
         private IPresenter _presenter = null;
 
-        /// <summary>
-        /// Презентер 
-        /// </summary>
         public IPresenter Presenter
         {
             get { return _presenter; }
             {
                 _presenter = value;
                 _presenter.Closed += PresenterClosed;
-                _presenter.HandleException += new ExceptionEventHandler(Presenter_ShowErrors);
+                _presenter.HandleException += new Action<Exception>(Presenter_ShowErrors);
             }
         }
 
 
         public static void Presenter_ShowErrors(Exception ex, WorkItem wi)
         {
-            if (ex is BusinessLogicException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Невозможно выполнить операцию по следующим причинам:",//"Некоторые данные введены неверно",
-                    ((BusinessLogicException)ex).ValidationResults);
-            }
-            else if (ex is ProgramLogicException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "В программе произошла ошибка. Обратитесь в службу технической поддержки.",
-                    ((ProgramLogicException)ex).ValidationResults);
-            }
-            else if (ex is EndpointNotFoundException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Сервер не найден.");
-            }
-            else if (ex is ServerTooBusyException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Сервис недоступен.");
-            }
-            else if (ex is MessageSecurityException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Неправильно задан адрес сервиса.");
-            }
-            else if (ex is TimeoutException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Время ожидания истекло. Попробуйте еще раз.");
-            }
-            else if (ex is FaultException<string>)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    ((FaultException<string>)ex).Detail);
-            }
-            else if (ex is FaultException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "При обращении к сервису произошла непредвиденная ошибка."
-                    + " Обратитесь в службу технической поддержки.");
-            }
-            else if (ex is CommunicationException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "При обращении к сервису произошла непредвиденная ошибка."
-                    + " Обратитесь в службу технической поддержки.");
-            }
-            else if (ex is System.Net.Sockets.SocketException)
-            {
-                SmartApplication.Instance.ShowErrors(wi,
-                    "Произошла ошибка при передаче данных.");
-            }
-			else if (ex is MessageSecurityException)
-			{
-				SmartApplication.Instance.ShowErrors(wi,
-					"Неправильно задан адрес сервиса.");
-				return;
-			}
-			else if (ex is DbException)
-			{
-				SmartApplication.Instance.ShowErrors(wi,
-					"Произошла ошибка при обращении к базе данных.");
-				return;
-			}
-            else throw ex;
+            //if (ex is BusinessLogicException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Невозможно выполнить операцию по следующим причинам:",//"Некоторые данные введены неверно",
+            //        ((BusinessLogicException)ex).ValidationResults);
+            //}
+            //else if (ex is ProgramLogicException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "В программе произошла ошибка. Обратитесь в службу технической поддержки.",
+            //        ((ProgramLogicException)ex).ValidationResults);
+            //}
+            //else if (ex is EndpointNotFoundException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Сервер не найден.");
+            //}
+            //else if (ex is ServerTooBusyException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Сервис недоступен.");
+            //}
+            //else if (ex is MessageSecurityException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Неправильно задан адрес сервиса.");
+            //}
+            //else if (ex is TimeoutException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Время ожидания истекло. Попробуйте еще раз.");
+            //}
+            //else if (ex is FaultException<string>)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        ((FaultException<string>)ex).Detail);
+            //}
+            //else if (ex is FaultException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "При обращении к сервису произошла непредвиденная ошибка."
+            //        + " Обратитесь в службу технической поддержки.");
+            //}
+            //else if (ex is CommunicationException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "При обращении к сервису произошла непредвиденная ошибка."
+            //        + " Обратитесь в службу технической поддержки.");
+            //}
+            //else if (ex is System.Net.Sockets.SocketException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Произошла ошибка при передаче данных.");
+            //}
+            //else if (ex is MessageSecurityException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Неправильно задан адрес сервиса.");
+            //    return;
+            //}
+            //else if (ex is DbException)
+            //{
+            //    SmartApplication.Instance.ShowErrors(wi,
+            //        "Произошла ошибка при обращении к базе данных.");
+            //    return;
+            //}
+            //else
+            throw ex;
         }
 
         /// <summary>

File ClientFramework/ClientFramework/Workspace/SmartApplication.cs

-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using ClientFramework.MVC;
-using ClientFramework.Workspace.TabWorkspaceWrapper;
-using Microsoft.Practices.EnterpriseLibrary.Validation;
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Windows.Forms;
+//using ClientFramework.MVC;
+//using ClientFramework.Workspace.TabWorkspaceWrapper;
+//using Microsoft.Practices.EnterpriseLibrary.Validation;
 
-namespace ClientFramework.Workspace
-{
-	/// <summary>
-	/// Концепция по управлениями рабочими областями (workspace).    
-	/// </summary>
-	public class SmartApplication
-	{
-		private TabWorkspace _tabWorkspace = null;
+//namespace ClientFramework.Workspace
+//{
+//    /// <summary>
+//    /// Концепция по управлениями рабочими областями (workspace).    
+//    /// </summary>
+//    public class SmartApplication
+//    {
+//        private TabWorkspace _tabWorkspace = null;
 
-		/// <summary>
-		/// Получить рабочую область типа TabControl
-		/// </summary>
-		public TabWorkspace TabWorkspace
-		{
-			get
-			{
-				if (_tabWorkspace != null)
-					return _tabWorkspace;
-				else
-					throw new Exception("Объект TabWorkspace не инициализирован. "
-						+ "Сначала необходимо вызвать функцию InitTabWorkspace");
-			}
-		}
+//        /// <summary>
+//        /// Получить рабочую область типа TabControl
+//        /// </summary>
+//        public TabWorkspace TabWorkspace
+//        {
+//            get
+//            {
+//                if (_tabWorkspace != null)
+//                    return _tabWorkspace;
+//                else
+//                    throw new Exception("Объект TabWorkspace не инициализирован. "
+//                        + "Сначала необходимо вызвать функцию InitTabWorkspace");
+//            }
+//        }
 
-		private WindowWorkspace _windowWorkspace = null;
-		/// <summary>
-		/// Получить рабочую область типа Window
-		/// </summary>
-		public WindowWorkspace WindowWorkspace
-		{
-			get
-			{
-				if (_windowWorkspace != null)
-					return _windowWorkspace;
-				else
-					throw new Exception("Объект WindowWorkspace не инициализирован. "
-						+ "Сначала необходимо вызвать функцию InitWindowWorkspace");
-			}
-		}
+//        private WindowWorkspace _windowWorkspace = null;
+//        /// <summary>
+//        /// Получить рабочую область типа Window
+//        /// </summary>
+//        public WindowWorkspace WindowWorkspace
+//        {
+//            get
+//            {
+//                if (_windowWorkspace != null)
+//                    return _windowWorkspace;
+//                else
+//                    throw new Exception("Объект WindowWorkspace не инициализирован. "
+//                        + "Сначала необходимо вызвать функцию InitWindowWorkspace");
+//            }
+//        }
 
-		/// <summary>
-		/// Инициализация рабочей области типа TabControl
-		/// </summary>
-		/// <param name="tabControl">Оберта на элемент управления TabControl</param>
-		public void InitTabWorkspace(TabControlWrapper tabControl)
-		{
-			if (_tabWorkspace == null)
-				_tabWorkspace = new TabWorkspace(tabControl);
-			else
-				throw new Exception("TabWorkspace уже инициализирован");
-		}
+//        /// <summary>
+//        /// Инициализация рабочей области типа TabControl
+//        /// </summary>
+//        /// <param name="tabControl">Оберта на элемент управления TabControl</param>
+//        public void InitTabWorkspace(TabControlWrapper tabControl)
+//        {
+//            if (_tabWorkspace == null)
+//                _tabWorkspace = new TabWorkspace(tabControl);
+//            else
+//                throw new Exception("TabWorkspace уже инициализирован");
+//        }
 
-		/// <summary>
-		/// Инициализация рабочей области типа Window
-		/// </summary>
-		/// <param name="parentWindow">Окно</param>
-		public void InitWindowWorkspace(IWin32Window parentWindow)
-		{
-			if (_windowWorkspace == null)
-				_windowWorkspace = new WindowWorkspace(parentWindow);
-			else
-				throw new Exception("WindowWorkspace уже инициализирован");
-		}
+//        /// <summary>
+//        /// Инициализация рабочей области типа Window
+//        /// </summary>
+//        /// <param name="parentWindow">Окно</param>
+//        public void InitWindowWorkspace(IWin32Window parentWindow)
+//        {
+//            if (_windowWorkspace == null)
+//                _windowWorkspace = new WindowWorkspace(parentWindow);
+//            else
+//                throw new Exception("WindowWorkspace уже инициализирован");
+//        }
 
-		#region Реализация паттерна словарь Одиночек
+//        #region Реализация паттерна словарь Одиночек
 
-		/// <summary>
-		/// Конструктор объекта
-		/// </summary>
-		protected SmartApplication() { }
+//        /// <summary>
+//        /// Конструктор объекта
+//        /// </summary>
+//        protected SmartApplication() { }
 
-		static private Dictionary<object, SmartApplication> _smartApplications =
-					new Dictionary<object, SmartApplication>();
+//        static private Dictionary<object, SmartApplication> _smartApplications =
+//                    new Dictionary<object, SmartApplication>();
 
-		/// <summary>
-		/// Функция возвращает по ключу соответствующий контекст SmartApplication.
-		/// Если такого контекста нет в коллекции, то она создает новый.
-		/// </summary>
-		/// <param name="key">Идентификатор контекста. Если его тип является ссылочным, 
-		/// то у этого типа необходимо переопределить функцию Equals()</param>
-		/// <returns>контекст SmartApplication</returns>
-		static public SmartApplication Get(object key)
-		{
-			SmartApplication result = null;
+//        /// <summary>
+//        /// Функция возвращает по ключу соответствующий контекст SmartApplication.
+//        /// Если такого контекста нет в коллекции, то она создает новый.
+//        /// </summary>
+//        /// <param name="key">Идентификатор контекста. Если его тип является ссылочным, 
+//        /// то у этого типа необходимо переопределить функцию Equals()</param>
+//        /// <returns>контекст SmartApplication</returns>
+//        static public SmartApplication Get(object key)
+//        {
+//            SmartApplication result = null;
 
-			if (!_smartApplications.Keys.Contains<object>(key))
-			{
-				result = new SmartApplication();
-				_smartApplications.Add(key, result);
-			}
-			else
-				result = _smartApplications[key];
+//            if (!_smartApplications.Keys.Contains<object>(key))
+//            {
+//                result = new SmartApplication();
+//                _smartApplications.Add(key, result);
+//            }
+//            else
+//                result = _smartApplications[key];
 
-			return result;
-		}
+//            return result;
+//        }
 
 
-		/// <summary>
-		/// Контекст по умолчанию.
-		/// Его идентификатор: "DefaultContext".
-		/// </summary>
-		static public SmartApplication Instance
-		{
-			get
-			{
-				return Get("DefaultContext");
-			}
-		}
+//        /// <summary>
+//        /// Контекст по умолчанию.
+//        /// Его идентификатор: "DefaultContext".
+//        /// </summary>
+//        static public SmartApplication Instance
+//        {
+//            get
+//            {
+//                return Get("DefaultContext");
+//            }
+//        }
 
-		#endregion
+//        #endregion
 
-		/// <summary>
-		/// Закрыть приложение
-		/// </summary>
-		/// <returns>Флаг полного закрытия приложения</returns>
-		public bool CloseApplication()
-		{
-			if (_tabWorkspace != null && !_tabWorkspace.AppClose()) return false;
-			if (_windowWorkspace != null && !_windowWorkspace.AppClose()) return false;
-			return true;
-		}
+//        /// <summary>
+//        /// Закрыть приложение
+//        /// </summary>
+//        /// <returns>Флаг полного закрытия приложения</returns>
+//        public bool CloseApplication()
+//        {
+//            if (_tabWorkspace != null && !_tabWorkspace.AppClose()) return false;
+//            if (_windowWorkspace != null && !_windowWorkspace.AppClose()) return false;
+//            return true;
+//        }
 
-		/// <summary>
-		/// Вывести ошибки
-		/// </summary>
-		/// <param name="workItem">WorkItm</param>
-		/// <param name="message">Ошибка</param>
-		public void ShowErrors(WorkItem workItem, string message)
-		{
-			ShowErrors(workItem, message, null);
-		}
+//        /// <summary>
+//        /// Вывести ошибки
+//        /// </summary>
+//        /// <param name="workItem">WorkItm</param>
+//        /// <param name="message">Ошибка</param>
+//        public void ShowErrors(WorkItem workItem, string message)
+//        {
+//            ShowErrors(workItem, message, null);
+//        }
 
-		/// <summary>
-		/// Вывести ошибки
-		/// </summary>
-		/// <param name="workItem">WorkItm</param>
-		/// <param name="message">Ошибка</param>
-		/// <param name="results">Стек ошибок</param>
-		public void ShowErrors(WorkItem workItem, string message, ValidationResults results)
-		{
-			Form workItemForm;
-			Control control = null;
+//        /// <summary>
+//        /// Вывести ошибки
+//        /// </summary>
+//        /// <param name="workItem">WorkItm</param>
+//        /// <param name="message">Ошибка</param>
+//        /// <param name="results">Стек ошибок</param>
+//        public void ShowErrors(WorkItem workItem, string message, ValidationResults results)
+//        {
+//            Form workItemForm;
+//            Control control = null;
 
-			if (workItem != null && workItem.View != null)
-			{
-				control = workItem.View.Parent;
-				while (control != null && (!(control is Form)))
-					control = control.Parent;
-			}
+//            if (workItem != null && workItem.View != null)
+//            {
+//                control = workItem.View.Parent;
+//                while (control != null && (!(control is Form)))
+//                    control = control.Parent;
+//            }
 
-			if (control == null)
-				control = Application.OpenForms[0];
+//            if (control == null)
+//                control = Application.OpenForms[0];
 
-			workItemForm = (Form)control;
+//            workItemForm = (Form)control;
 
-			Form backgroundForm = new Form();
-			_backgroundForm = backgroundForm;
-			backgroundForm.Opacity = 0.6;
-			backgroundForm.BackColor = System.Drawing.SystemColors.Control;
-			backgroundForm.Size = workItemForm.Size;
-			backgroundForm.Location = workItemForm.Location;
-			backgroundForm.StartPosition = FormStartPosition.Manual;
-			backgroundForm.FormBorderStyle = FormBorderStyle.None;
-			backgroundForm.ShowInTaskbar = false;
-			backgroundForm.ShowIcon = false;
-			backgroundForm.ControlBox = false;
+//            Form backgroundForm = new Form();
+//            _backgroundForm = backgroundForm;
+//            backgroundForm.Opacity = 0.6;
+//            backgroundForm.BackColor = System.Drawing.SystemColors.Control;
+//            backgroundForm.Size = workItemForm.Size;
+//            backgroundForm.Location = workItemForm.Location;
+//            backgroundForm.StartPosition = FormStartPosition.Manual;
+//            backgroundForm.FormBorderStyle = FormBorderStyle.None;
+//            backgroundForm.ShowInTaskbar = false;
+//            backgroundForm.ShowIcon = false;
+//            backgroundForm.ControlBox = false;
 
-			backgroundForm.Activated += new EventHandler(backgroundForm_Activated);
+//            backgroundForm.Activated += new EventHandler(backgroundForm_Activated);
 
-			if (_dataErrorFormFactory == null)
-			{
-				_dataErrorFormFactory = new DataErrorFormFactory();
-			}
+//            if (_dataErrorFormFactory == null)
+//            {
+//                _dataErrorFormFactory = new DataErrorFormFactory();
+//            }
 
-			Form dataErrorForm = (Form)_dataErrorFormFactory.GetDataErrorForm();
+//            Form dataErrorForm = (Form)_dataErrorFormFactory.GetDataErrorForm();
 
-			_dataErrorForm = (IDataErrorForm)dataErrorForm;
+//            _dataErrorForm = (IDataErrorForm)dataErrorForm;
 
-			dataErrorForm.FormClosed += new FormClosedEventHandler(dataErrorForm_FormClosed);
+//            dataErrorForm.FormClosed += new FormClosedEventHandler(dataErrorForm_FormClosed);
 
-			dataErrorForm.StartPosition = FormStartPosition.Manual;
-			dataErrorForm.Location = new System.Drawing.Point(
-				workItemForm.Left + workItemForm.Width / 2 - dataErrorForm.Width / 2,
-				workItemForm.Top + workItemForm.Height / 2 - dataErrorForm.Height / 2);
+//            dataErrorForm.StartPosition = FormStartPosition.Manual;
+//            dataErrorForm.Location = new System.Drawing.Point(
+//                workItemForm.Left + workItemForm.Width / 2 - dataErrorForm.Width / 2,
+//                workItemForm.Top + workItemForm.Height / 2 - dataErrorForm.Height / 2);
 
-			((IDataErrorForm)dataErrorForm).Caption = message;
+//            ((IDataErrorForm)dataErrorForm).Caption = message;
 
-			((IDataErrorForm)dataErrorForm).Errors = results;
+//            ((IDataErrorForm)dataErrorForm).Errors = results;
 
-			backgroundForm.Show(workItemForm);
-			backgroundForm.BringToFront();
-			dataErrorForm.Show(workItemForm);
-			dataErrorForm.BringToFront();
-		}
+//            backgroundForm.Show(workItemForm);
+//            backgroundForm.BringToFront();
+//            dataErrorForm.Show(workItemForm);
+//            dataErrorForm.BringToFront();
+//        }
 
-		private Form _backgroundForm;
-		void dataErrorForm_FormClosed(object sender, FormClosedEventArgs e)
-		{
-			// закрываем и нижележащую форму
-			if (_backgroundForm != null )
-			{
-				_backgroundForm.Close();
-			}
+//        private Form _backgroundForm;
+//        void dataErrorForm_FormClosed(object sender, FormClosedEventArgs e)
+//        {
+//            // закрываем и нижележащую форму
+//            if (_backgroundForm != null )
+//            {
+//                _backgroundForm.Close();
+//            }
 
-			if (((Form)_dataErrorForm).Owner != null)
-			{
-				((Form)_dataErrorForm).Owner.BringToFront();
-				((Form)_dataErrorForm).Owner.TopMost = true;
-				((Form)_dataErrorForm).Owner.TopMost = false;
-			}
-		}
+//            if (((Form)_dataErrorForm).Owner != null)
+//            {
+//                ((Form)_dataErrorForm).Owner.BringToFront();
+//                ((Form)_dataErrorForm).Owner.TopMost = true;
+//                ((Form)_dataErrorForm).Owner.TopMost = false;
+//            }
+//        }
 
-		private IDataErrorForm _dataErrorForm;
-		void backgroundForm_Activated(object sender, EventArgs e)
-		{
-			((Form)_dataErrorForm).Activate();
-		}
+//        private IDataErrorForm _dataErrorForm;
+//        void backgroundForm_Activated(object sender, EventArgs e)
+//        {
+//            ((Form)_dataErrorForm).Activate();
+//        }
 
-		private IDataErrorFormFactory _dataErrorFormFactory;
-		/// <summary>
-		/// Окно отображения ошибок, может кастомазиться
-		/// </summary>
-		public IDataErrorFormFactory DataErrorFormFactory
-		{
-			get { return _dataErrorFormFactory; }
-			set
-			{
-				_dataErrorFormFactory = value;
-			}
-		}
+//        private IDataErrorFormFactory _dataErrorFormFactory;
+//        /// <summary>
+//        /// Окно отображения ошибок, может кастомазиться
+//        /// </summary>
+//        public IDataErrorFormFactory DataErrorFormFactory
+//        {
+//            get { return _dataErrorFormFactory; }
+//            set
+//            {
+//                _dataErrorFormFactory = value;
+//            }
+//        }
 
-		/// <summary>
-		/// Обновляет журналы, отображающие заданный объект
-		/// </summary>
-		/// <param name="entity">Объект, который надо обновить в журналах</param>
-		/// <param name="action">Действие, произведенное над объектом</param>
-		public void UpdateWorkItems(Entity entity, EntityAction action)
-		{
-			this.TabWorkspace.UpdateWorkItems(entity, action);
-			this.WindowWorkspace.UpdateWorkItems(entity, action);
-		}
-	}
-}
+//        /// <summary>
+//        /// Обновляет журналы, отображающие заданный объект
+//        /// </summary>
+//        /// <param name="entity">Объект, который надо обновить в журналах</param>
+//        /// <param name="action">Действие, произведенное над объектом</param>
+//        public void UpdateWorkItems(Entity entity, EntityAction action)
+//        {
+//            this.TabWorkspace.UpdateWorkItems(entity, action);
+//            this.WindowWorkspace.UpdateWorkItems(entity, action);
+//        }
+//    }
+//}

File ClientFramework/ClientFramework/Workspace/TabWorkspace/TabWorkspace.cs

-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using ClientFramework.MVC;
-using System.Windows.Forms;
-using ClientFramework.Workspace.TabWorkspaceWrapper;
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using ClientFramework.MVC;
+//using System.Windows.Forms;
+//using ClientFramework.Workspace.TabWorkspaceWrapper;
 
-namespace ClientFramework.Workspace
-{
-    public class TabWorkspace : Workspace
-    {
-        /// <summary>
-        /// Область прорисовки представлений WorkItem-ов
-        /// </summary>        
-        private TabControlWrapper _tabControl = null;
+//namespace ClientFramework.Workspace
+//{
+//    public class TabWorkspace : Workspace
+//    {
+//        /// <summary>
+//        /// Область прорисовки представлений WorkItem-ов
+//        /// </summary>        
+//        private TabControlWrapper _tabControl = null;
 
-        /// <summary>
-        /// конструтор
-        /// </summary>
-        /// <param name="tabControl">TabControl для отображения представлений WorkItem</param>
-        public TabWorkspace(TabControlWrapper tabControl)
-            : base()
-        {
-            if (tabControl != null)
-            {
-                this._tabControl = tabControl;
-                this._tabControl.CloseButtonClick += new EventHandler(_tabControl_CloseButtonClick);
-                this._tabControl.SelectedPageChanged += new EventHandler(_tabControl_SelectedPageChanged);
-            }
-            else
-            {
-                throw new Exception("В созданном Workspace элемент отображения(TabControl) равен NULL!");
-            }
-        }
+//        /// <summary>
+//        /// конструтор
+//        /// </summary>
+//        /// <param name="tabControl">TabControl для отображения представлений WorkItem</param>
+//        public TabWorkspace(TabControlWrapper tabControl)
+//            : base()
+//        {
+//            if (tabControl != null)
+//            {
+//                this._tabControl = tabControl;
+//                this._tabControl.CloseButtonClick += new EventHandler(_tabControl_CloseButtonClick);
+//                this._tabControl.SelectedPageChanged += new EventHandler(_tabControl_SelectedPageChanged);
+//            }
+//            else
+//            {
+//                throw new Exception("В созданном Workspace элемент отображения(TabControl) равен NULL!");
+//            }
+//        }
 
-        private void _tabControl_CloseButtonClick(object sender, EventArgs e)
-        {
-            TabPageWrapper tabPage = sender as TabPageWrapper;
-            if (tabPage == null)
-                return;
+//        private void _tabControl_CloseButtonClick(object sender, EventArgs e)
+//        {
+//            TabPageWrapper tabPage = sender as TabPageWrapper;
+//            if (tabPage == null)
+//                return;
 
-            foreach (WorkItem wi in _workItems)
-            {
-                if (wi.View == tabPage.Controls[0])
-                {
-                    if (wi.Close())
-                    {
-                        CloseWorkItem(wi);
-                        break;
-                    }
-                }
-            }
-        }
+//            foreach (WorkItem wi in _workItems)
+//            {
+//                if (wi.View == tabPage.Controls[0])
+//                {
+//                    if (wi.Close())
+//                    {
+//                        CloseWorkItem(wi);
+//                        break;
+//                    }
+//                }
+//            }
+//        }
 
-        private void _tabControl_SelectedPageChanged(object sender, EventArgs e)
-        {
-            if (_tabControl.SelectedTabPageIndex == -1) return;
+//        private void _tabControl_SelectedPageChanged(object sender, EventArgs e)
+//        {
+//            if (_tabControl.SelectedTabPageIndex == -1) return;
 
-            if (this._tabHistory.Contains(this._tabControl.SelectedTabPage))
-                this._tabHistory.Remove(this._tabControl.SelectedTabPage);
+//            if (this._tabHistory.Contains(this._tabControl.SelectedTabPage))
+//                this._tabHistory.Remove(this._tabControl.SelectedTabPage);
 
-            this._tabHistory.Insert(0, this._tabControl.SelectedTabPage);
-        }
+//            this._tabHistory.Insert(0, this._tabControl.SelectedTabPage);
+//        }
 
-        /// <summary>
-        /// Стек истории переключения вкладок (0 - последний активный таб)
-        /// </summary>
-        private List<TabPageWrapper> _tabHistory = new List<TabPageWrapper>();
+//        /// <summary>
+//        /// Стек истории переключения вкладок (0 - последний активный таб)
+//        /// </summary>
+//        private List<TabPageWrapper> _tabHistory = new List<TabPageWrapper>();
 
-        /// <summary>
-        /// Закрытия вкладки, удаление самого WorkItem-а
-        /// </summary>
-        /// <param name="workItem"></param>
-        public override void CloseWorkItem(WorkItem workItem)
-        {
-            // находим нужный таб и закрываем его, удаляем из списка данный WorkItem
-            foreach (TabPageWrapper tp in this._tabControl.TabPages)
-            {
-                if (((UserControl)tp.Controls[0]) == workItem.View)
-                {
-                    this._tabHistory.Remove(tp);
-                    if (this._tabHistory.Count > 0)
-                    {
-                        this._tabControl.SelectedTabPage = this._tabHistory[0];
-                    }
+//        /// <summary>
+//        /// Закрытия вкладки, удаление самого WorkItem-а
+//        /// </summary>
+//        /// <param name="workItem"></param>
+//        public override void CloseWorkItem(WorkItem workItem)
+//        {
+//            // находим нужный таб и закрываем его, удаляем из списка данный WorkItem
+//            foreach (TabPageWrapper tp in this._tabControl.TabPages)
+//            {
+//                if (((UserControl)tp.Controls[0]) == workItem.View)
+//                {
+//                    this._tabHistory.Remove(tp);
+//                    if (this._tabHistory.Count > 0)
+//                    {
+//                        this._tabControl.SelectedTabPage = this._tabHistory[0];
+//                    }
 
-                    this._tabControl.RemoveTab(tp);
-                    this._workItems.Remove(workItem);
-                    break;
-                }
-            }
-        }
+//                    this._tabControl.RemoveTab(tp);
+//                    this._workItems.Remove(workItem);
+//                    break;
+//                }
+//            }
+//        }
 
-        /// <summary>
-        /// Попытка закрыть приложение
-        /// </summary>
-        /// <returns></returns>
-        public override bool AppClose()
-        {
-            // закрываем вкладки в соответствие с историей переключений
-            while (this._tabHistory.Count > 0)
-            {
-                // находим workItem, представление которого соответствует текущей вкладке 
-                foreach (WorkItem wi in this._workItems)
-                {
-                    if (wi.View == ((UserControl)this._tabHistory[0].Controls[0]))
-                    {
-                        // пытаемся закрыть workItem
-                        if (!wi.Close())
-                            return false;
+//        /// <summary>
+//        /// Попытка закрыть приложение
+//        /// </summary>
+//        /// <returns></returns>
+//        public override bool AppClose()
+//        {
+//            // закрываем вкладки в соответствие с историей переключений
+//            while (this._tabHistory.Count > 0)
+//            {
+//                // находим workItem, представление которого соответствует текущей вкладке 
+//                foreach (WorkItem wi in this._workItems)
+//                {
+//                    if (wi.View == ((UserControl)this._tabHistory[0].Controls[0]))
+//                    {
+//                        // пытаемся закрыть workItem
+//                        if (!wi.Close())
+//                            return false;
 
-                        break;
-                    }
-                }
-            }
+//                        break;
+//                    }
+//                }
+//            }
 
-            return true;
-        }
+//            return true;
+//        }
 
-        /// <summary>
-        /// Текущий (активный) WorkItem
-        /// </summary>
-        public override WorkItem GetActiveWorkItem()
-        {
-            if (this._tabControl.SelectedTabPage != null)
-            {
-                foreach (WorkItem wi in this._workItems)
-                {
-					try
-					{
-						if (wi.View == ((UserControl)this._tabControl.SelectedTabPage.Controls[0]))
-						{
-							return wi;
-						}
-					}
-					// NullReferenceException occurs then no controls in tab
-					// (even in check this._tabControl.SelectedTabPage.Controls == null)
-					catch (NullReferenceException) { }
-                }
-                return null;
-            }
-            else
-                return null;
-        }
+//        /// <summary>
+//        /// Текущий (активный) WorkItem
+//        /// </summary>
+//        public override WorkItem GetActiveWorkItem()
+//        {
+//            if (this._tabControl.SelectedTabPage != null)
+//            {
+//                foreach (WorkItem wi in this._workItems)
+//                {
+//                    try
+//                    {
+//                        if (wi.View == ((UserControl)this._tabControl.SelectedTabPage.Controls[0]))
+//                        {
+//                            return wi;
+//                        }
+//                    }
+//                    // NullReferenceException occurs then no controls in tab
+//                    // (even in check this._tabControl.SelectedTabPage.Controls == null)
+//                    catch (NullReferenceException) { }
+//                }
+//                return null;
+//            }
+//            else
+//                return null;
+//        }
 
-        /// <summary>
-        /// После добавления WorkItem, отображаем его
-        /// </summary>
-        /// <param name="workItem"></param>
-        protected override void ShowWorkItemInWorkspace(WorkItem workItem)
-        {
-            // если не находим необходимый таб - создаем новый
-            TabPageWrapper tabPage = this._tabControl.CreateNewTabPage();
-            tabPage.Text = workItem.Caption;
-            workItem.View.Dock = DockStyle.Fill;
-            tabPage.AddChildControl(workItem.View);
+//        /// <summary>
+//        /// После добавления WorkItem, отображаем его
+//        /// </summary>
+//        /// <param name="workItem"></param>
+//        protected override void ShowWorkItemInWorkspace(WorkItem workItem)
+//        {
+//            // если не находим необходимый таб - создаем новый
+//            TabPageWrapper tabPage = this._tabControl.CreateNewTabPage();
+//            tabPage.Text = workItem.Caption;
+//            workItem.View.Dock = DockStyle.Fill;
+//            tabPage.AddChildControl(workItem.View);
 
-            // если нельзя закрывать - убираем крестик
-            if (!workItem.CanClose)
-                tabPage.ShowCloseButton = false;
-            else
-                tabPage.ShowCloseButton = true;
+//            // если нельзя закрывать - убираем крестик
+//            if (!workItem.CanClose)
+//                tabPage.ShowCloseButton = false;
+//            else
+//                tabPage.ShowCloseButton = true;
             
-            this._tabControl.SelectedTabPage = tabPage;
-            if (_tabControl.TabPages.Count == 1) _tabControl_SelectedPageChanged(_tabControl, null);
+//            this._tabControl.SelectedTabPage = tabPage;
+//            if (_tabControl.TabPages.Count == 1) _tabControl_SelectedPageChanged(_tabControl, null);
 
-            workItem.Presenter.CaptionChanged += new EventHandler(Presenter_CaptionChanged);
-        }
+//            workItem.Presenter.CaptionChanged += new EventHandler(Presenter_CaptionChanged);
+//        }
 
-        void Presenter_CaptionChanged(object sender, EventArgs e)
-        {
-            Presenter presenter = (Presenter)sender;
-            foreach (TabPageWrapper tp in this._tabControl.TabPages)
-            {
-                if (((UserControl)tp.Controls[0]) == presenter.View)
-                {
-                    tp.Text = presenter.Caption;
-                    return;
-                }
-            }
-        }
+//        void Presenter_CaptionChanged(object sender, EventArgs e)
+//        {
+//            Presenter presenter = (Presenter)sender;
+//            foreach (TabPageWrapper tp in this._tabControl.TabPages)
+//            {
+//                if (((UserControl)tp.Controls[0]) == presenter.View)
+//                {
+//                    tp.Text = presenter.Caption;
+//                    return;
+//                }
+//            }
+//        }
 
-        /// <summary>
-        /// Делаем активным представление данного WorkItem
-        /// </summary>
-        /// <param name="workItem"></param>
-        protected override void ActivateWorkItem(WorkItem workItem)
-        {
-            // просматриваем все табы, и если находим нужный - делаем активным
-            foreach (TabPageWrapper tp in this._tabControl.TabPages)
-            {
-                if (((UserControl)tp.Controls[0]) == workItem.View)
-                {
-                    this._tabControl.SelectedTabPage = tp;
-                    return;
-                }
-            }
-        }
-    }
-}
+//        /// <summary>
+//        /// Делаем активным представление данного WorkItem
+//        /// </summary>
+//        /// <param name="workItem"></param>
+//        protected override void ActivateWorkItem(WorkItem workItem)
+//        {
+//            // просматриваем все табы, и если находим нужный - делаем активным
+//            foreach (TabPageWrapper tp in this._tabControl.TabPages)
+//            {
+//                if (((UserControl)tp.Controls[0]) == workItem.View)
+//                {
+//                    this._tabControl.SelectedTabPage = tp;
+//                    return;
+//                }
+//            }
+//        }
+//    }
+//}

File ClientFramework/ClientFramework/Workspace/WindowWorkspace/WindowWorkspace.cs

-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using ClientFramework.MVC;
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Windows.Forms;
+//using ClientFramework.MVC;
 
-namespace ClientFramework.Workspace
-{
-    public class WindowWorkspace : Workspace
-    {
-        List<WindowWorkspaceWindow> _windows = new List<WindowWorkspaceWindow>();
-        IWin32Window _parent = null;
-        public WindowWorkspace(IWin32Window parent)
-            : base()
-        {
-            if (parent == null)
-            {
-                throw new Exception("При создании объекта WindowWorkspace параметр parent должен быть не null");
-            }
-            else
-            {
-                _parent = parent;
-            }
-        }
+//namespace ClientFramework.Workspace
+//{
+//    public class WindowWorkspace : Workspace
+//    {
+//        List<WindowWorkspaceWindow> _windows = new List<WindowWorkspaceWindow>();
+//        IWin32Window _parent = null;
+//        public WindowWorkspace(IWin32Window parent)
+//            : base()
+//        {
+//            if (parent == null)
+//            {
+//                throw new Exception("При создании объекта WindowWorkspace параметр parent должен быть не null");
+//            }
+//            else
+//            {
+//                _parent = parent;
+//            }
+//        }
 
-        protected override void ShowWorkItemInWorkspace(WorkItem workItem)
-        {
-            WindowWorkspaceWindow window = new WindowWorkspaceWindow();
-#if !DEBUG
-            window.TopMost = true;            
-#endif
-            window.FormClosing += new FormClosingEventHandler(window_FormClosing);
-            window.Text = workItem.Caption;
-            window.Controls.Add(workItem.View);
+//        protected override void ShowWorkItemInWorkspace(WorkItem workItem)
+//        {
+//            WindowWorkspaceWindow window = new WindowWorkspaceWindow();
+//#if !DEBUG
+//            window.TopMost = true;            
+//#endif
+//            window.FormClosing += new FormClosingEventHandler(window_FormClosing);
+//            window.Text = workItem.Caption;
+//            window.Controls.Add(workItem.View);
 
-            _windows.Add(window);
+//            _windows.Add(window);
 
-            workItem.Presenter.CaptionChanged += new EventHandler(Presenter_CaptionChanged);
-            window.ShowDialog(_parent);
-        }
+//            workItem.Presenter.CaptionChanged += new EventHandler(Presenter_CaptionChanged);
+//            window.ShowDialog(_parent);
+//        }
 
-        void Presenter_CaptionChanged(object sender, EventArgs e)
-        {
-            Presenter presenter = (Presenter)sender;
-            foreach (WindowWorkspaceWindow window in _windows)
-            {
-                if (window.Controls[0] == presenter.View)
-                {
-                    window.Text = presenter.Caption;
-                    break;
-                }
-            }
-        }
+//        void Presenter_CaptionChanged(object sender, EventArgs e)
+//        {
+//            Presenter presenter = (Presenter)sender;
+//            foreach (WindowWorkspaceWindow window in _windows)
+//            {
+//                if (window.Controls[0] == presenter.View)
+//                {
+//                    window.Text = presenter.Caption;
+//                    break;
+//                }
+//            }
+//        }
 
-        void window_FormClosing(object sender, FormClosingEventArgs e)
-        {
-            foreach (WorkItem workItem in _workItems)
-            {
-                if (workItem.View == ((WindowWorkspaceWindow)sender).Controls[0])
-                {
-                    e.Cancel = !workItem.Close();
-                    break;
-                }
-            }
-        }
+//        void window_FormClosing(object sender, FormClosingEventArgs e)
+//        {
+//            foreach (WorkItem workItem in _workItems)
+//            {
+//                if (workItem.View == ((WindowWorkspaceWindow)sender).Controls[0])
+//                {
+//                    e.Cancel = !workItem.Close();
+//                    break;
+//                }
+//            }
+//        }
 
-        protected override void ActivateWorkItem(WorkItem workItem)
-        {
-            foreach (WindowWorkspaceWindow window in _windows)
-            {
-                if (window.Controls[0] == workItem.View)
-                {
-                    window.Activate();
-                    break;
-                }
-            }
-        }
+//        protected override void ActivateWorkItem(WorkItem workItem)
+//        {
+//            foreach (WindowWorkspaceWindow window in _windows)
+//            {
+//                if (window.Controls[0] == workItem.View)
+//                {
+//                    window.Activate();
+//                    break;
+//                }
+//            }
+//        }
 
-        public override void CloseWorkItem(WorkItem workItem)
-        {
-            // находим нужный таб и закрываем его, удаляем из списка данный WorkItem
-            foreach (WindowWorkspaceWindow window in _windows)
-            {
-                if (window.Controls[0] == workItem.View)
-                {
-                    _windows.Remove(window);
-                    window.Close();
-                    this._workItems.Remove(workItem);
-                    break;
-                }
-            }
-        }
+//        public override void CloseWorkItem(WorkItem workItem)
+//        {
+//            // находим нужный таб и закрываем его, удаляем из списка данный WorkItem
+//            foreach (WindowWorkspaceWindow window in _windows)
+//            {
+//                if (window.Controls[0] == workItem.View)
+//                {
+//                    _windows.Remove(window);
+//                    window.Close();
+//                    this._workItems.Remove(workItem);
+//                    break;
+//                }
+//            }
+//        }
 
-        public override WorkItem GetActiveWorkItem()
-        {
-            foreach (WindowWorkspaceWindow window in _windows)
-            {
-                if (window.Focused)
-                {
-                    foreach (WorkItem workItem in _workItems)
-                    {
-                        if (workItem.View == window.Controls[0])
-                        {
-                            return workItem;
-                        }
-                    }
-                }
-            }
-            return null;
-        }
-    }
-}
+//        public override WorkItem GetActiveWorkItem()
+//        {
+//            foreach (WindowWorkspaceWindow window in _windows)
+//            {
+//                if (window.Focused)
+//                {
+//                    foreach (WorkItem workItem in _workItems)
+//                    {
+//                        if (workItem.View == window.Controls[0])
+//                        {
+//                            return workItem;
+//                        }
+//                    }
+//                }
+//            }
+//            return null;
+//        }
+//    }
+//}