コード例 #1
0
        public ContextMenu(Stetic.Wrapper.Widget wrapper, Gtk.Widget context)
        {
            MenuItem item;

            editable = wrapper;
            widget   = wrapper.Wrapped;

            if (widget == context)
            {
                item           = LabelItem(widget);
                item.Sensitive = false;
                Add(item);
            }

            item            = new MenuItem(Catalog.GetString("_Select"));
            item.Activated += DoSelect;
            Add(item);

            ClassDescriptor klass = wrapper.ClassDescriptor;

            if (klass != null)
            {
                foreach (ItemDescriptor id in klass.ContextMenu)
                {
                    CommandDescriptor cmd = (CommandDescriptor)id;
                    if (!cmd.VisibleFor(widget))
                    {
                        continue;
                    }
                    item = new MenuItem(cmd.Label);
                    if (cmd.Enabled(widget, context))
                    {
                        Gtk.Widget wdup = widget, cdup = context; // FIXME bxc 75689
                        item.Activated += delegate(object o, EventArgs args)
                        {
                            cmd.Run(wdup, cdup);
                        };
                    }
                    else
                    {
                        item.Sensitive = false;
                    }
                    Add(item);
                }
            }

            BuildContextMenu(wrapper.ParentWrapper, widget == context, context);
        }