I am making great use of this utility to retrieve a list of actions that should 
be presented to users as menu choices on right-click of a node; such as shown 
in a BeanTreeView. I even have submenus working.

My only outstanding desire is to order the menu items in the way I prefer. I 
have used the "position" attribute in the Action Reference, but it seems to be 
ignored. I have to assume that I am doing something wrong. Wondering if someone 
could offer some advice.

Below is the code I use to collect these actions followed by one of the actions 
that are added to the menu.

@ActionID(
        category = "QuickPoleSpan",
        id = "com.sonideft.actions.span.CopyPopUpAction"
)
@ActionRegistration(
        displayName = "#CTL_SpanCopyPopUpAction", lazy = false
)
@ActionReferences({
    @ActionReference(path = "Span/Actions")
})
@Messages("CTL_SpanCopyPopUpAction=Copy...")
public final class SpanCopyPopUpAction extends AbstractAction implements 
ActionListener, Presenter.Popup {

     @Override
    public void actionPerformed(ActionEvent e) {
        //NOP
    }


    protected String iconResource() {
        return "org/openide/resources/actions/copy.gif"; // NOI18N
    }

     @NbBundle.Messages({
        "# {0} - count ",
        "SPAN_COPY_ITEMS_ON_CLIPBOARD={0} Item(s) on ClipBoard",
    })

    @Override
    public JMenuItem getPopupPresenter() {
        JMenu menu = new JMenu(Bundle.CTL_SpanCopyPopUpAction());
        List<? extends Action> actionsForPath = 
Utilities.actionsForPath("Actions/QuickPoleSpan_Copy_SubActions");
        for (Action action : actionsForPath) {
            if (action instanceof Presenter.Popup pop)
                menu.add(pop.getPopupPresenter());
            else
                menu.add(action);
        }
        return menu;
    }
}

//One of many actions with different values for position:
@ActionID(
        category = "QuickPoleSpan_Copy_SubActions",//NOI18N
        id = "com.sonideft.core.SpanCopyGuySpansAction"//NOI18N
)
@ActionRegistration(
        displayName = "#CTL_CopyGuySpanAction",lazy=false//NOI18N
)
@ActionReference(path = "Span/Actions", position = 100)//NOI18N
@NbBundle.Messages("CTL_CopyGuySpanAction=Span Guys")
public class SpanCopyGuySpanAction extends AbstractSpanSelectAction {
    private static final long serialVersionUID = 1L;

        public SpanCopyGuySpanAction () {
            putValue(NAME, Bundle.CTL_CopyGuySpanAction());
            customEnable();
        }

        @Override
        public void actionPerformed (ActionEvent e) {

            copyToClipboard(spannode, 
AttachmentDemographics.TYPE_GUY,AttachmentDemographics.SUBTYPE_ANY);
        }

    @Override
    public final void customEnable() {
        if (spannode==null)
            setEnabled(false);
        else
        {
            AttachmentDemographics demos1 = 
AttachmentDemographics.getDemographics(spannode.getLocalProxylist());
            this.setEnabled(demos1.guy);
        }
    }
}



Regards,

Stephen Cumminger

Reply via email to