From 4e53264e7e41d0caaf82adc28d7838898ca72ac8 Mon Sep 17 00:00:00 2001 From: eloy_gomez Date: Fri, 4 Jun 2010 12:32:36 +0000 Subject: [PATCH] add IMenuAction extension point. See https://sourceforge.net/tracker/?func=detail&atid=883808&aid=3011521&group_id=176962 Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=3011521 --- client/META-INF/MANIFEST.MF | 1 + client/plugin.xml | 1 + .../org.adempiere.osgi.IMenuAction.exsd | 101 ++++++++++++++++++ .../adempiere/osgi/AbstractMenuAction.java | 35 ++++++ .../src/org/adempiere/osgi/IMenuAction.java | 11 ++ client/src/org/compiere/apps/APanel.java | 9 ++ 6 files changed, 158 insertions(+) create mode 100644 client/schema/org.adempiere.osgi.IMenuAction.exsd create mode 100644 client/src/org/adempiere/osgi/AbstractMenuAction.java create mode 100644 client/src/org/adempiere/osgi/IMenuAction.java diff --git a/client/META-INF/MANIFEST.MF b/client/META-INF/MANIFEST.MF index 2ae61ac6b4..e23362587e 100644 --- a/client/META-INF/MANIFEST.MF +++ b/client/META-INF/MANIFEST.MF @@ -52,6 +52,7 @@ Export-Package: com.keypoint, groovyjarjarasm.asm.tree, groovyjarjarcommonscli, org.adempiere.apps.graph, + org.adempiere.osgi, org.codehaus.groovy, org.codehaus.groovy.ant, org.codehaus.groovy.antlr, diff --git a/client/plugin.xml b/client/plugin.xml index 4321a36281..3a52fae1c2 100644 --- a/client/plugin.xml +++ b/client/plugin.xml @@ -1,6 +1,7 @@ + + + + + + + + [Enter description of this extension point.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Enter the first release in which this extension point appears.] + + + + + + + + + [Enter extension point usage example here.] + + + + + + + + + [Enter API information here.] + + + + + + + + + [Enter information about supplied implementation of this extension point.] + + + + + diff --git a/client/src/org/adempiere/osgi/AbstractMenuAction.java b/client/src/org/adempiere/osgi/AbstractMenuAction.java new file mode 100644 index 0000000000..164c2777d0 --- /dev/null +++ b/client/src/org/adempiere/osgi/AbstractMenuAction.java @@ -0,0 +1,35 @@ +package org.adempiere.osgi; + +import javax.swing.JMenu; +import javax.swing.JMenuBar; + +import org.compiere.util.CLogger; +import org.compiere.util.Env; +import org.compiere.util.Msg; + +public abstract class AbstractMenuAction implements IMenuAction { + + protected CLogger log = CLogger.getCLogger(getClass()); + + protected JMenu getMenu(JMenuBar menuBar, String label) { + + // Translated text + String text = Msg.getMsg(Env.getCtx(), label); + int pos = text.indexOf('&'); + if (pos != -1) { + text = text.substring(0, pos) + text.substring(pos+1); + } + + for (int i=0; i < menuBar.getMenuCount(); i++) { + JMenu menu = menuBar.getMenu(i); + if (text.equals(menu.getText())) { + return menu; + } + } + // menu not found. + log.warning("Menu " + label + " not found."); + return null; + } + + +} diff --git a/client/src/org/adempiere/osgi/IMenuAction.java b/client/src/org/adempiere/osgi/IMenuAction.java new file mode 100644 index 0000000000..b47dc1dce5 --- /dev/null +++ b/client/src/org/adempiere/osgi/IMenuAction.java @@ -0,0 +1,11 @@ +package org.adempiere.osgi; + +import javax.swing.JMenuBar; + +import org.adempiere.base.IService; + +public interface IMenuAction extends IService { + + public void addAction(JMenuBar menuBar); + +} diff --git a/client/src/org/compiere/apps/APanel.java b/client/src/org/compiere/apps/APanel.java index 1303153e46..49670e80ca 100644 --- a/client/src/org/compiere/apps/APanel.java +++ b/client/src/org/compiere/apps/APanel.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.TreeMap; @@ -59,6 +60,8 @@ import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.adempiere.base.Service; +import org.adempiere.osgi.IMenuAction; import org.compiere.apps.form.FormFrame; import org.compiere.apps.search.Find; import org.compiere.grid.APanelTab; @@ -525,6 +528,12 @@ public final class APanel extends CPanel toolBar.add(aEnd.getButton()); } + // Create OSGi menu actions.. + List osgiActions = Service.list(IMenuAction.class); + for (IMenuAction action:osgiActions) { + action.addAction(menuBar); + } + // if (CLogMgt.isLevelAll()) Util.printActionInputMap(this);