You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@netbeans.apache.org by stephen cumminger <st...@sonideft.com> on 2024/11/08 14:53:35 UTC
Help on ordering actions returned from Utilities.actionsForPath
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