Example #1
0
        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);
        }
Example #2
0
 public ApplicationScreen(IApplicationBlock applicationBlock)
 {
     ApplicationBlock = applicationBlock;
     Url             = FileName = null;
     Type            = HelpType.None;
     _menuStripItems = new List <ToolStripItem>();
     _showCount      = 0;
 }
Example #3
0
        public virtual bool IsBlockRegistered(IApplicationBlock plugin)
        {
            #region Pre-conditions
            Debug.Assert(plugin != null);
            #endregion

            return(PluginBindings.ContainsKey(plugin));
        }
Example #4
0
 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
 }
Example #5
0
 public virtual void Dispose()
 {
     _parent = null;
     foreach (IMenuItem menuItem in _items)
     {
         menuItem.Dispose();
     }
     if (_image32x32 != null)
     {
         _image32x32.Dispose();
     }
 }
Example #6
0
 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);
         }
     }
 }
Example #7
0
        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);
                    }
                }
            }
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
 /// <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);
 }