protected override void OnAdd(RegionItem item) { _control.Controls.Add(item.HostControl); item.HostControl.Dock = DockStyle.Fill; item.HostControl.Visible = item.IsActive; item.PropertyChanged += ItemPropertyChanged; }
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; }
/// <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; }
/// <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); }
protected abstract void OnRemove(RegionItem item);
protected abstract void OnAdd(RegionItem item);
/// <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(); } }
protected override void OnRemove(RegionItem item) { _control.Controls.Remove(item.HostControl); }