using Haestad.Framework.Windows.Forms.Resources;
using Haestad.Framework.UI.Integration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;

namespace Haestad.WPFRibbonPrototype.WPF
{
    public class RibbonUICommandFactory : IRibbonUICommandFactory
    {
        #region Constructor
        public RibbonUICommandFactory(System.Windows.Forms.IWin32Window ownerForm)
        {
            OwnerForm = ownerForm;
        }
        #endregion

        #region IRibbonUICommandFactory Members
        public IRibbonUICommand GetUICommand(string commandName, params object[] context)
        {
            if (IsRibbonCommandCreated(commandName))
                return CreatedCommands[commandName];

            IRibbonUICommand ribbonCommand = CreateCommand(commandName, context);
            RegisterRibbonCommand(ribbonCommand);
            return ribbonCommand;
        }
        #endregion

        #region Protected Virtual Methods
        protected virtual IRibbonUICommand CreateCommand(string commandName, params object[] context)
        {
            switch (commandName)
            {
                case StandardTestCommandNames.ClickCommand:
                    return NewClickCommand();
                case StandardTestCommandNames.ConnectAdvisorCommand:
                    return NewConnectAdvisorCommand();
                case StandardTestCommandNames.HelloWorldCommand:
                    return NewHelloWorldCommand();
                case StandardTestCommandNames.HelpCommand:
                    return NewHelpCommand();
                case StandardTestCommandNames.OpenModelessFormCommand:
                    return NewOpenModelessFormCommand();
                case StandardTestCommandNames.OpenModalFormCommand:
                    return NewOpenModalFormCommand();
                case StandardTestCommandNames.MenuOneCommand:
                    return NewMenuOneCommand();
                case StandardTestCommandNames.MenuTwoCommand:
                    return NewMenuTwoCommand();
                case StandardTestCommandNames.MenuThreeCommand:
                    return NewMenuThreeCommand();
                case StandardTestCommandNames.ToggleMenuOneCommand:
                    return NewToggleMenuOneCommand();
                case StandardTestCommandNames.ToggleMenuTwoCommand:
                    return NewToggleMenuTwoCommand();
                case StandardTestCommandNames.ToggleMenuThreeCommand:
                    return NewToggleMenuThreeCommand();
                case StandardTestCommandNames.SignInCommand:
                    return NewSignInCommand();
                case StandardTestCommandNames.SaveCommand:
                    return NewSaveCommand();
                case StandardTestCommandNames.OpenCommand:
                    return NewOpenCommand();
                case StandardTestCommandNames.NewCommand:
                    return NewNewCommand();
                case StandardTestCommandNames.CheckedMenuCommand:
                    return NewCheckedMenuCommand();
                case StandardTestCommandNames.NullCommand:
                    return NewNullCommand();
                case StandardTestCommandNames.ToggleButtonOnlyCommand:
                    return NewToggleButtonOnlyCommand();
                case StandardTestCommandNames.ToggleButtonSyncTestCommandOne:
                    return NewToggleButtonSyncTestCommandOne();
                case StandardTestCommandNames.ToggleButtonSyncTestCommandTwo:
                    return NewToggleButtonSyncTestCommandTwo();
                case StandardTestCommandNames.ToggleButtonSyncTestCommandThree:
                    return NewToggleButtonSyncTestCommandThree();
                case StandardTestCommandNames.ToggleButtonSyncTestCommandFour:
                    return NewToggleButtonSyncTestCommandFour();
                case StandardTestCommandNames.ToggleButtonSyncTestCommandFive:
                    return NewToggleButtonSyncTestCommandFive();
                case StandardTestCommandNames.ToggleButtonSyncDropDownCommand:
                    return NewToggleButtonSyncDropDownCommand();
                case StandardTestCommandNames.DockingWindowCommand:
                    return NewDockingWindowCommand(OwnerForm);
                case StandardTestCommandNames.BackstageUserControlWinForms:
                    return NewBackstageUserControlWinFormsCommand();
                case StandardTestCommandNames.BackstageUserControlWPF:
                    return NewBackstageUserControlWPFCommand();
                case StandardTestCommandNames.BackstageDisabledTab:
                    return NewBackstageDisabledTabCommand();
                case StandardTestCommandNames.BackstageButton:
                    return NewBackstageBackstageButtonCommand();
                case StandardTestCommandNames.BackstageDisabledButton:
                    return NewBackstageDisabledButtonCommand();
                default:
                    return null;
            }
        }
        #endregion

        #region Private Methods
        private bool IsRibbonCommandCreated(string commandName)
        {
            return CreatedCommands.ContainsKey(commandName);
        }

        private void RegisterRibbonCommand(IRibbonUICommand ribbonCommand)
        {
            CreatedCommands.Add(ribbonCommand.Name, ribbonCommand);
        }

        private IRibbonUICommand NewClickCommand()
        {
            ICommand clickCommand = new ClickCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                clickCommand,
                StandardTestCommandNames.ClickCommand,
                StandardTestCommandNames.ClickCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ClickCommand,
                "ToolTip description for: " + StandardTestCommandNames.ClickCommand,
                StandardGraphicResourceNames.CustomReport,
                StandardGraphicResourceNames.CustomReport32,
                RibbonHotKey.None);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewConnectAdvisorCommand()
        {
            ICommand connectAdvisorCommand = new ConnectAdvisorCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                connectAdvisorCommand,
                StandardTestCommandNames.ConnectAdvisorCommand,
                StandardTestCommandNames.ConnectAdvisorCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ConnectAdvisorCommand,
                "ToolTip description for: " + StandardTestCommandNames.ConnectAdvisorCommand,
                StandardGraphicResourceNames.CONNECT,
                StandardGraphicResourceNames.CONNECT,
                RibbonHotKey.F8);

            return ribbonUICommand;
        }
        private IRibbonUICommand NewHelloWorldCommand()
        {
            ICommand helloWorlCommand = new HelloWorldCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                helloWorlCommand,
                StandardTestCommandNames.HelloWorldCommand,
                StandardTestCommandNames.HelloWorldCommand,
                "ToolTip Title for: " + StandardTestCommandNames.HelloWorldCommand,
                "ToolTip description for: " + StandardTestCommandNames.HelloWorldCommand,
                StandardGraphicResourceNames.Layout,
                StandardGraphicResourceNames.Layout32,
                RibbonHotKey.CtrlA);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewHelpCommand()
        {
            ICommand helpCommand = new HelpCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                helpCommand,
                StandardTestCommandNames.HelpCommand,
                StandardTestCommandNames.HelpCommand,
                "ToolTip Title for: " + StandardTestCommandNames.HelpCommand,
                "ToolTip description for: " + StandardTestCommandNames.HelpCommand,
                StandardGraphicResourceNames.Help,
                StandardGraphicResourceNames.Help32,
                RibbonHotKey.F1);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewOpenModelessFormCommand()
        {
            ICommand openModelessFormCommand = new OpenModelessFormCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                openModelessFormCommand,
                StandardTestCommandNames.OpenModelessFormCommand,
                StandardTestCommandNames.OpenModelessFormCommand,
                "ToolTip Title for: " + StandardTestCommandNames.OpenModelessFormCommand,
                "ToolTip description for: " + StandardTestCommandNames.OpenModelessFormCommand,
                StandardGraphicResourceNames.EnergyCosts,
                StandardGraphicResourceNames.EnergyCost32,
                RibbonHotKey.Ctrl0);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewOpenModalFormCommand()
        {
            ICommand openModalFormCommand = new OpenModalFormCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                openModalFormCommand,
                StandardTestCommandNames.OpenModalFormCommand,
                StandardTestCommandNames.OpenModalFormCommand,
                "ToolTip Title for: " + StandardTestCommandNames.OpenModalFormCommand,
                "ToolTip description for: " + StandardTestCommandNames.OpenModalFormCommand,
                StandardGraphicResourceNames.FireFlow,
                StandardGraphicResourceNames.FireFlow32,
                RibbonHotKey.CtrlShift2);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewMenuOneCommand()
        {
            ICommand menuOneCommand = new MenuCommandOne();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuOneCommand,
                StandardTestCommandNames.MenuOneCommand,
                StandardTestCommandNames.MenuOneCommand,
                "ToolTip Title for: " + StandardTestCommandNames.MenuOneCommand,
                "ToolTip description for: " + StandardTestCommandNames.MenuOneCommand,
                StandardGraphicResourceNames.Flextable,
                StandardGraphicResourceNames.FlexTables32,
                RibbonHotKey.Alt1);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewMenuTwoCommand()
        {
            ICommand menuTwoCommand = new MenuCommandTwo();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuTwoCommand,
                StandardTestCommandNames.MenuTwoCommand,
                StandardTestCommandNames.MenuTwoCommand,
                "ToolTip Title for: " + StandardTestCommandNames.MenuTwoCommand,
                "ToolTip description for: " + StandardTestCommandNames.MenuTwoCommand,
                StandardGraphicResourceNames.Compute,
                StandardGraphicResourceNames.Compute32,
                RibbonHotKey.Alt2);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewMenuThreeCommand()
        {
            ICommand menuThreeCommand = new MenuCommandThree();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuThreeCommand,
                StandardTestCommandNames.MenuThreeCommand,
                StandardTestCommandNames.MenuThreeCommand,
                "ToolTip Title for: " + StandardTestCommandNames.MenuThreeCommand,
                "ToolTip description for: " + StandardTestCommandNames.MenuThreeCommand,
                StandardGraphicResourceNames.Gutter,
                StandardGraphicResourceNames.Gutter32,
                RibbonHotKey.Alt3);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewToggleMenuOneCommand()
        {
            ICommand menuOneCommand = new MenuCommandOne();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuOneCommand,
                StandardTestCommandNames.ToggleMenuOneCommand,
                StandardTestCommandNames.ToggleMenuOneCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleMenuOneCommand,
                "ToolTip description for: " + StandardTestCommandNames.ToggleMenuOneCommand,
                StandardGraphicResourceNames.Flextable,
                StandardGraphicResourceNames.FlexTables32,
                RibbonHotKey.Ctrl3);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewToggleMenuTwoCommand()
        {
            ICommand menuTwoCommand = new MenuCommandTwo();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuTwoCommand,
                StandardTestCommandNames.ToggleMenuTwoCommand,
                StandardTestCommandNames.ToggleMenuTwoCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleMenuTwoCommand,
                "ToolTip description for: " + StandardTestCommandNames.ToggleMenuTwoCommand,
                StandardGraphicResourceNames.Compute,
                StandardGraphicResourceNames.Compute32,
                RibbonHotKey.Ctrl4);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewToggleMenuThreeCommand()
        {
            ICommand menuThreeCommand = new MenuCommandThree();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                menuThreeCommand,
                StandardTestCommandNames.ToggleMenuThreeCommand,
                StandardTestCommandNames.ToggleMenuThreeCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleMenuThreeCommand,
                "ToolTip description for: " + StandardTestCommandNames.ToggleMenuThreeCommand,
                StandardGraphicResourceNames.Gutter,
                StandardGraphicResourceNames.Gutter32,
                RibbonHotKey.Ctrl5);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewSignInCommand()
        {
            ICommand signInCommand = new SignInCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUISignInCommand(
                signInCommand,
                StandardTestCommandNames.SignInCommand,
                StandardTestCommandNames.SignInCommand,
                "ToolTip Title for: " + StandardTestCommandNames.SignInCommand,
                "ToolTip description for: " + StandardTestCommandNames.SignInCommand,
                StandardGraphicResourceNames.CONNECTSignedIn);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewSaveCommand()
        {
            ICommand saveCommand = new SaveCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                saveCommand,
                StandardTestCommandNames.SaveCommand,
                StandardTestCommandNames.SaveCommand,
                "ToolTip Title for: " + StandardTestCommandNames.SaveCommand,
                "ToolTip description for: " + StandardTestCommandNames.SaveCommand,
                StandardGraphicResourceNames.Save,
                StandardGraphicResourceNames.Save,
                RibbonHotKey.CtrlS);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewOpenCommand()
        {
            ICommand openCommand = new OpenCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                openCommand,
                StandardTestCommandNames.OpenCommand,
                StandardTestCommandNames.OpenCommand,
                "ToolTip Title for: " + StandardTestCommandNames.OpenCommand,
                "ToolTip description for: " + StandardTestCommandNames.OpenCommand,
                StandardGraphicResourceNames.Open,
                StandardGraphicResourceNames.Open,
                RibbonHotKey.CtrlO);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewNewCommand()
        {
            ICommand newCommand = new NewCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                newCommand,
                StandardTestCommandNames.NewCommand,
                StandardTestCommandNames.NewCommand,
                "ToolTip Title for: " + StandardTestCommandNames.NewCommand,
                "ToolTip description for: " + StandardTestCommandNames.NewCommand,
                StandardGraphicResourceNames.New,
                StandardGraphicResourceNames.New,
                RibbonHotKey.CtrlN);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewCheckedMenuCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new CheckedMenuRibbonUICommand(
                nullCommand,
                StandardTestCommandNames.CheckedMenuCommand,
                StandardTestCommandNames.CheckedMenuCommand,
                "ToolTip Title for: " + StandardTestCommandNames.CheckedMenuCommand,
                "ToolTip description for: " + StandardTestCommandNames.CheckedMenuCommand,
                StandardGraphicResourceNames.LateralPipe,
                StandardGraphicResourceNames.LateralPipe32,
                RibbonHotKey.None);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewNullCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new CheckedMenuRibbonUICommand(
                nullCommand,
                StandardTestCommandNames.NullCommand,
                StandardTestCommandNames.NullCommand,
                String.Empty,
                String.Empty,
                String.Empty,
                String.Empty,
                RibbonHotKey.None);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewToggleButtonOnlyCommand()
        {
            ICommand helloWorldCommand = new HelloWorldCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                helloWorldCommand,
                StandardTestCommandNames.ToggleButtonOnlyCommand,
                StandardTestCommandNames.ToggleButtonOnlyCommand,
                "ToolTip Title for: " + StandardTestCommandNames.CheckedMenuCommand,
                "ToolTip description for: " + StandardTestCommandNames.CheckedMenuCommand,
                StandardGraphicResourceNames.AddColumn,
                StandardGraphicResourceNames.AddFireDemand32,
                RibbonHotKey.F6);

            return ribbonUICommand;
        }

        private ToggleButtonRibbonUICommand NewToggleButtonSyncTestCommandOne()
        {
            ICommand nullCommand = new NullCommand();

            ToggleButtonRibbonUICommand ribbonUICommand = new ToggleButtonRibbonUICommand(
                ToggleButtonCollection,
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncTestCommandOne,
                StandardTestCommandNames.ToggleButtonSyncTestCommandOne,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandOne,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandOne,
                StandardGraphicResourceNames.AnimationControl,
                String.Empty,
                RibbonHotKey.Alt6);

            return ribbonUICommand;
        }

        private ToggleButtonRibbonUICommand NewToggleButtonSyncTestCommandTwo()
        {
            ICommand nullCommand = new NullCommand();

            ToggleButtonRibbonUICommand ribbonUICommand = new ToggleButtonRibbonUICommand(
                ToggleButtonCollection,
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncTestCommandTwo,
                StandardTestCommandNames.ToggleButtonSyncTestCommandTwo,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandTwo,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandTwo,
                StandardGraphicResourceNames.AltervativeType,
                String.Empty,
                RibbonHotKey.Alt7);

            return ribbonUICommand;
        }

        private ToggleButtonRibbonUICommand NewToggleButtonSyncTestCommandThree()
        {
            ICommand nullCommand = new NullCommand();

            ToggleButtonRibbonUICommand ribbonUICommand = new ToggleButtonRibbonUICommand(
                ToggleButtonCollection,
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncTestCommandThree,
                StandardTestCommandNames.ToggleButtonSyncTestCommandThree,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandThree,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandThree,
                StandardGraphicResourceNames.Bentley16,
                String.Empty,
                RibbonHotKey.Alt8);

            return ribbonUICommand;
        }

        private ToggleButtonRibbonUICommand NewToggleButtonSyncTestCommandFour()
        {
            ICommand nullCommand = new NullCommand();

            ToggleButtonRibbonUICommand ribbonUICommand = new ToggleButtonRibbonUICommand(
                ToggleButtonCollection,
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncTestCommandFour,
                StandardTestCommandNames.ToggleButtonSyncTestCommandFour,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandFour,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandFour,
                StandardGraphicResourceNames.Alternatives,
                String.Empty,
                RibbonHotKey.Alt9);

            return ribbonUICommand;
        }

        private ToggleButtonRibbonUICommand NewToggleButtonSyncTestCommandFive()
        {
            ICommand nullCommand = new NullCommand();

            ToggleButtonRibbonUICommand ribbonUICommand = new ToggleButtonRibbonUICommand(
                ToggleButtonCollection,
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncTestCommandFive,
                StandardTestCommandNames.ToggleButtonSyncTestCommandFive,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandFive,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncTestCommandFive,
                StandardGraphicResourceNames.Catchbasin,
                String.Empty,
                RibbonHotKey.None);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewToggleButtonSyncDropDownCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                nullCommand,
                StandardTestCommandNames.ToggleButtonSyncDropDownCommand,
                StandardTestCommandNames.ToggleButtonSyncDropDownCommand,
                "ToolTip Title for: " + StandardTestCommandNames.ToggleButtonSyncDropDownCommand,
                "ToolTip description for: " + StandardTestCommandNames.ToggleButtonSyncDropDownCommand,
                StandardGraphicResourceNames.ColorCoding,
                StandardGraphicResourceNames.NetworkNavigator32,
                RibbonHotKey.None);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewDockingWindowCommand(System.Windows.Forms.IWin32Window ownerForm)
        {
            ICommand dockingWindowCommand = new DockingWindowCommand(ownerForm);

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                dockingWindowCommand,
                StandardTestCommandNames.DockingWindowCommand,
                StandardTestCommandNames.DockingWindowCommand,
                "ToolTip Title for: " + StandardTestCommandNames.DockingWindowCommand,
                "ToolTip description for: " + StandardTestCommandNames.DockingWindowCommand,
                StandardGraphicResourceNames.NetworkNavigator,
                StandardGraphicResourceNames.DockingViews32,
                RibbonHotKey.F7);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewBackstageUserControlWinFormsCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                nullCommand,
                StandardTestCommandNames.BackstageUserControlWinForms,
                StandardTestCommandNames.BackstageUserControlWinForms,
                "ToolTip Title for: " + StandardTestCommandNames.BackstageUserControlWinForms,
                "ToolTip description for: " + StandardTestCommandNames.BackstageUserControlWinForms,
                String.Empty);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewBackstageUserControlWPFCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new BackstageRibbonUICommand(
                nullCommand,
                StandardTestCommandNames.BackstageUserControlWPF,
                StandardTestCommandNames.BackstageUserControlWPF,
                "ToolTip Title for: " + StandardTestCommandNames.BackstageUserControlWPF,
                "ToolTip description for: " + StandardTestCommandNames.BackstageUserControlWPF,
                String.Empty);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewBackstageDisabledTabCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new BackstageRibbonUICommand(
                nullCommand,
                StandardTestCommandNames.BackstageDisabledTab,
                StandardTestCommandNames.BackstageDisabledTab,
                "ToolTip Title for: " + StandardTestCommandNames.BackstageDisabledTab,
                "ToolTip description for: " + StandardTestCommandNames.BackstageDisabledTab,
                String.Empty);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewBackstageBackstageButtonCommand()
        {
            ICommand helloWorldCommand = new HelloWorldCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                helloWorldCommand,
                StandardTestCommandNames.BackstageButton,
                StandardTestCommandNames.BackstageButton,
                "ToolTip Title for: " + StandardTestCommandNames.BackstageButton,
                "ToolTip description for: " + StandardTestCommandNames.BackstageButton,
                String.Empty);

            return ribbonUICommand;
        }

        private IRibbonUICommand NewBackstageDisabledButtonCommand()
        {
            ICommand nullCommand = new NullCommand();

            IRibbonUICommand ribbonUICommand = new RibbonUICommand(
                nullCommand,
                StandardTestCommandNames.BackstageDisabledButton,
                StandardTestCommandNames.BackstageDisabledButton,
                "ToolTip Title for: " + StandardTestCommandNames.BackstageDisabledButton,
                "ToolTip description for: " + StandardTestCommandNames.BackstageDisabledButton,
                String.Empty);

            return ribbonUICommand;
        }
        #endregion

        #region Private Properties
        private IDictionary<string, IRibbonUICommand> CreatedCommands
        {
            get
            {
                if (m_createdCommands == null)
                    m_createdCommands = new Dictionary<string, IRibbonUICommand>(DEFAULT_DICTIONARY_SIZE);
                return m_createdCommands;
            }
        }
        private IRibbonUICommandCollection ToggleButtonCollection
        {
            get
            {
                if (m_toggleButtonCollection == null)
                    m_toggleButtonCollection = new RibbonCommandUICollection();
                return m_toggleButtonCollection;
            }
        }

        private System.Windows.Forms.IWin32Window OwnerForm
        {
            get;
            set;
        }
        #endregion

        #region Private Fields
        private IDictionary<string, IRibbonUICommand> m_createdCommands;
        private IRibbonUICommandCollection m_toggleButtonCollection;
        #endregion

        #region Private Constants
        private const int DEFAULT_DICTIONARY_SIZE = 256; // Note: <whar> Pick a number that the total number of commands in an application should not exceed.
        #endregion
    }
}
