示例#1
0
		internal virtual Gtk.ToolItem CreateToolItem (CommandManager manager)
		{
			if (cmdId == CommandManager.ToCommandId (Command.Separator))
				return new Gtk.SeparatorToolItem ();

			Command cmd = GetCommand (manager);
			if (cmd == null)
				return new Gtk.ToolItem ();
			
			if (cmd is CustomCommand) {
				Gtk.Widget child = (Gtk.Widget) Activator.CreateInstance (((CustomCommand)cmd).WidgetType);
				Gtk.ToolItem ti;
				if (child is Gtk.ToolItem)
					ti = (Gtk.ToolItem) child;
				else {
					ti = new Gtk.ToolItem ();
					ti.Child = child;
				}
				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) {
				CommandMenu menu = new CommandMenu (manager);
				menu.Append (CreateMenuItem (manager));
				return new MenuToolButton (menu, acmd.Icon);
			}
			else if (acmd.ActionType == ActionType.Normal)
				return new CommandToolButton (cmdId, manager);
			else
				return new CommandToggleToolButton (cmdId, manager);
		}
示例#2
0
/*		public Gtk.Toolbar CreateToolbar (CommandEntrySet entrySet)
		{
			return CreateToolbar ("", entrySet);
		}
		
*/	
		/// <summary>
		/// Appends commands to a menu
		/// </summary>
		/// <returns>
		/// The menu.
		/// </returns>
		/// <param name='entrySet'>
		/// Entry set with the command definitions
		/// </param>
		/// <param name='menu'>
		/// The menu where to add the commands
		/// </param>
		public Gtk.Menu CreateMenu (CommandEntrySet entrySet, CommandMenu menu)
		{
			foreach (CommandEntry entry in entrySet) {
				Gtk.MenuItem mi = entry.CreateMenuItem (this);
				CustomItem ci = mi.Child as CustomItem;
				if (ci != null)
					ci.SetMenuStyle (menu);
				menu.Append (mi);
			}
			return menu;
		}
示例#3
0
        internal protected virtual Gtk.ToolItem CreateToolItem(CommandManager manager)
        {
            if (cmdId == CommandManager.ToCommandId(Command.Separator))
            {
                return(new Gtk.SeparatorToolItem());
            }

            Command cmd = GetCommand(manager);

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

            if (cmd is CustomCommand)
            {
                Gtk.Widget   child = (Gtk.Widget)Activator.CreateInstance(((CustomCommand)cmd).WidgetType);
                Gtk.ToolItem ti;
                if (child is Gtk.ToolItem)
                {
                    ti = (Gtk.ToolItem)child;
                }
                else
                {
                    ti       = new Gtk.ToolItem();
                    ti.Child = child;
                }
                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)
            {
                CommandMenu menu = new CommandMenu(manager);
                menu.Append(CreateMenuItem(manager));
                return(new MenuToolButton(menu, acmd.Icon));
            }
            else if (acmd.ActionType == ActionType.Normal)
            {
                return(new CommandToolButton(cmdId, manager));
            }
            else
            {
                return(new CommandToggleToolButton(cmdId, manager));
            }
        }