private ApplicationScreen ConstructScreen(IApplicationBlock owner, Type screenType) { #region Pre-conditions Debug.Assert(owner != null); Debug.Assert(screenType != null); Debug.Assert(screenType.IsSubclassOf(typeof(ApplicationScreen))); #endregion ApplicationScreen screen = null; if (LongRunningScreens.ContainsKey(screenType)) { screen = LongRunningScreens[screenType]; } else { try { // try to create with parameters screen = Activator.CreateInstance(screenType, owner, this) as ApplicationScreen; } catch (MissingMethodException) { try { // try to create with just block parameter screen = Activator.CreateInstance(screenType, owner) as ApplicationScreen; } catch (MissingMethodException) { // try to create without parameters screen = Activator.CreateInstance(screenType) as ApplicationScreen; } } #region Validate if (screen == null) { throw new ApplicationException( string.Format( "Could not instantiate the screen of type '{0}' as it did not inherit from '{1}'.", screenType.Name, typeof(ApplicationScreen).Name ) ); } #endregion // set screen context if activation did not do so //if (screen.ApplicationServices == null) { // screen.ApplicationServices = base.ApplicationServices; //} if (screen.ApplicationBlock == null) { screen.ApplicationBlock = owner; } // add this screen to long running screens if it is not to be destroyed. if (screen.ActivationMode == ScreenActivationMode.KeepAlive) { LongRunningScreens.Add(screenType, screen); } } #region Post-conditions Debug.Assert(screen != null); #endregion return(screen); }
public ApplicationScreen(IApplicationBlock applicationBlock) { ApplicationBlock = applicationBlock; Url = FileName = null; Type = HelpType.None; _menuStripItems = new List <ToolStripItem>(); _showCount = 0; }
public virtual bool IsBlockRegistered(IApplicationBlock plugin) { #region Pre-conditions Debug.Assert(plugin != null); #endregion return(PluginBindings.ContainsKey(plugin)); }
private void DestroyPlugin(IApplicationBlock plugin, TaskPane taskPane) { foreach (IMenu menu in plugin.Menus) { DestroyMenu(menu, MenuBindings[menu]); MenuBindings.Remove(menu); } taskPane.Dispose(); // remove link from explorer bar }
public virtual void Dispose() { _parent = null; foreach (IMenuItem menuItem in _items) { menuItem.Dispose(); } if (_image32x32 != null) { _image32x32.Dispose(); } }
public Menu(string title, bool showInMenuStrip, Image image32x32, IMenuItem[] items) { _parent = null; _text = title; _image32x32 = image32x32; _items = new List <IMenuItem>(); _showInMenuStrip = showInMenuStrip; if (items != null) { foreach (IMenuItem item in items) { AddItem(item); } } }
public virtual void RegisterBlock(IApplicationBlock plugin) { #region Pre-conditions Debug.Assert(plugin != null); Debug.Assert(!PluginBindings.ContainsKey(plugin)); #endregion TaskPane taskPane = CreateApplicationBlockPane(plugin); taskPane.AutoScroll = true; taskPane.Dock = DockStyle.Fill; taskPane.Size = new Size( _applicationBar.Width, _applicationBar.Height ); _applicationBar.AddItem( new ApplicationBar.Item( taskPane, plugin.Image32x32, plugin.Name ) ); Plugins.Add(plugin); PluginBindings.Add(plugin, taskPane); if (ActiveBlock == null) { ActiveBlock = plugin; } if (plugin.ShowInMenuStrip) { RegisterBlockInMenu(plugin); } RebuildToolBar(); #warning Execute these on form load rather than now? foreach (IMenu menu in plugin.Menus) { foreach (IMenuItem menuItem in menu.Items) { if (menuItem.ExecuteOnLoad) { ExecuteMenuItem(menuItem); } } } }
public virtual void UnregisterBlock(IApplicationBlock plugin) { #region Pre-conditions Debug.Assert(plugin != null); Debug.Assert(!PluginBindings.ContainsKey(plugin)); #endregion try { _splitContainer.Panel1.Controls.Remove(PluginBindings[plugin]); DestroyPlugin(plugin, PluginBindings[plugin]); PluginBindings.Remove(plugin); plugin.Dispose(); RebuildToolBar(); } catch (Exception e) { ApplicationServices.ReportError(e.Message); } }
private TaskPane CreateApplicationBlockPane(IApplicationBlock plugin) { TaskPane taskPane = new TaskPane(); taskPane.AutoScroll = true; taskPane.AutoScrollMargin = new System.Drawing.Size(12, 12); taskPane.Dock = System.Windows.Forms.DockStyle.Fill; taskPane.Location = new System.Drawing.Point(0, 0); taskPane.Name = plugin.Name + " TaskPane"; taskPane.TabIndex = 0; taskPane.Text = "N/A"; foreach (IMenu menu in plugin.Menus) { taskPane.Expandos.Add( CreateMenu(menu) ); } return(taskPane); }
private void RegisterBlockInMenu(IApplicationBlock block) { ToolStripMenuItem blockHeader = new ToolStripMenuItem( block.Name ); // register each menu in block foreach (IMenu menu in block.Menus) { if (menu.ShowInMenuStrip) { ToolStripMenuItem menuHeader = new ToolStripMenuItem(menu.Text); menuHeader.Tag = menu; foreach (IMenuItem item in menu.Items) { ILinkMenuItem linkItem = item as ILinkMenuItem; if (linkItem.ShowOnExplorerBar) { ToolStripMenuItem newItem = new ToolStripMenuItem( linkItem.Text, linkItem.Image16x16, ToolStripItemActivate ); int index = menuHeader.DropDownItems.Add(newItem); menuHeader.DropDownItems[index].Tag = item; ToolStripBindings.Add( newItem, item ); } } blockHeader.DropDownItems.Add(menuHeader); } } // insert the block menu before the help menu InsertMenuItemBeforeHelpMenu(blockHeader); }
/// <summary> /// Adds the <see cref="block"/> to the servces collection. /// </summary> /// <param name="this">The service collection.</param> /// <param name="block">The block instance.</param> public static IServiceCollection AddBlock(this IServiceCollection @this, IApplicationBlock block) { block.AddTo(@this); return(@this); }