static Gtk.Widget CreateWidget(CommandEntry entry)
        {
            if (entry.CommandId == Command.Separator)
            {
                return(new Gtk.SeparatorToolItem());
            }

            Command cmd = entry.GetCommand(IdeApp.CommandService);

            if (cmd == null)
            {
                return(new Gtk.Label());
            }

            if (cmd is CustomCommand)
            {
                Gtk.Widget ti = (Gtk.Widget)Activator.CreateInstance(((CustomCommand)cmd).WidgetType);
                if (cmd.Text != null && cmd.Text.Length > 0)
                {
                    //strip "_" accelerators from tooltips
                    string text = cmd.Text;
                    while (true)
                    {
                        int underscoreIndex = text.IndexOf('_');
                        if (underscoreIndex > -1)
                        {
                            text = text.Remove(underscoreIndex, 1);
                        }
                        else
                        {
                            break;
                        }
                    }
                    ti.TooltipText = text;
                }
                return(ti);
            }

            ActionCommand acmd = cmd as ActionCommand;

            if (acmd == null)
            {
                throw new InvalidOperationException("Unknown cmd type.");
            }

            if (acmd.CommandArray)
            {
                throw new InvalidOperationException("Command arrays not supported.");
            }
            else if (acmd.ActionType == ActionType.Normal)
            {
                return(new Button());
            }
            else
            {
                return(new ToggleButton());
            }
        }