Beispiel #1
0
		protected override void OnAdd(RegionItem item)
		{
			_control.Controls.Add(item.HostControl);
			item.HostControl.Dock = DockStyle.Fill;
			item.HostControl.Visible = item.IsActive;
			item.PropertyChanged += ItemPropertyChanged;
		}
Beispiel #2
0
		public void Add(object view)
		{
			Verify.ArgumentNotNull(view, "view");
			object localView = view; // resharper wants a local copy because it is used in a lambda expression
			RegionItem item = _regionItems.FirstOrDefault(x => x.Item == localView);
			if (item != null)
			{
				throw new InvalidOperationException("View has already been added to the region");
			}

			Type type = view as Type;
			if (type != null)
			{
				view = ServiceLocator.Current.GetInstance(type);
			}

			// Initialise the region item and add it to the appropriate collections. If
			// the subclass fails its initialization for any reason, we will clean up.
			Control hostControl;
			try
			{
				hostControl = CreateHostControl();
			}
			catch (Exception ex)
			{
				_log.WarnFormat("Failed to add view to region", ex);
				throw;
			}
			item = new RegionItem(this, view, hostControl);
			item.PropertyChanged += Item_PropertyChanged;
			_regionItems.Add(item);
			_views.Add(item.Item);

			try
			{
				OnAdd(item);
			}
			catch (Exception ex)
			{
				_log.WarnFormat("Failed to add view to region", ex);
				Cleanup(item);
				throw;
			}

			if (item.Task != null && !item.Task.IsRunning)
			{
				item.Task.Start(item.ViewManager);
			}
		}
		protected override void OnRemove(RegionItem item)
		{
			TabPage tabPage = (TabPage) item.HostControl;
			_control.TabPages.Remove(tabPage);
			tabPage.Dispose();
		}
		protected override void OnAdd(RegionItem item)
		{
			TabPage tabPage = (TabPage) item.HostControl;
			_control.TabPages.Add(tabPage);
			item.PropertyChanged += ItemPropertyChanged;
		}
Beispiel #5
0
		/// <summary>
		/// Cleanup a region item before discarding it forever
		/// </summary>
		/// <param name="item">Item to cleanup</param>
		/// <remarks>
		/// The item is being cleaned up either because it is no longer required, or because
		/// the subclass failed to initialize properly. Careful, the item might not be in a
		/// valid state.
		/// </remarks>
		private void Cleanup(RegionItem item)
		{
			_regionItems.Remove(item);
			_views.Remove(item.Item);
			_activeViews.Remove(item.Item);
			item.PropertyChanged -= Item_PropertyChanged;
		}
Beispiel #6
0
		/// <summary>
		/// Called by the derived class to inform that a region item has closed.
		/// </summary>
		/// <param name="item"></param>
		protected void RegionItemClosed(RegionItem item)
		{
			Cleanup(item);
		}
Beispiel #7
0
		protected abstract void OnRemove(RegionItem item);
Beispiel #8
0
		protected abstract void OnAdd(RegionItem item);
Beispiel #9
0
		/// <summary>
		/// Cleanup a region item before discarding it forever
		/// </summary>
		/// <param name="item">Item to cleanup</param>
		/// <remarks>
		/// The item is being cleaned up either because it is no longer required, or because
		/// the subclass failed to initialize properly. Careful, the item might not be in a
		/// valid state.
		/// </remarks>
		private void Cleanup(RegionItem item)
		{
			_regionItems.Remove(item);
			_views.Remove(item.Item);
			_activeViews.Remove(item.Item);
			item.PropertyChanged -= Item_PropertyChanged;

			if (item.Task != null && item.Task.IsRunning)
			{
				item.Task.EndTask();
			}
		}
Beispiel #10
0
		protected override void OnRemove(RegionItem item)
		{
			_control.Controls.Remove(item.HostControl);
		}