1 package complex.contextMenuInterceptor; 2 3 import com.sun.star.ui.*; 4 import com.sun.star.beans.XPropertySet; 5 import com.sun.star.uno.UnoRuntime; 6 7 public class ContextMenuInterceptor implements XContextMenuInterceptor 8 { 9 10 private com.sun.star.awt.XBitmap myBitmap; 11 12 public ContextMenuInterceptor(com.sun.star.awt.XBitmap aBitmap) 13 { 14 myBitmap = aBitmap; 15 } 16 17 public ContextMenuInterceptorAction notifyContextMenuExecute( 18 com.sun.star.ui.ContextMenuExecuteEvent aEvent) throws RuntimeException 19 { 20 try 21 { 22 // Retrieve context menu container and query for service factory to 23 // create sub menus, menu entries and separators 24 com.sun.star.container.XIndexContainer xContextMenu = aEvent.ActionTriggerContainer; 25 com.sun.star.lang.XMultiServiceFactory xMenuElementFactory = 26 UnoRuntime.queryInterface(com.sun.star.lang.XMultiServiceFactory.class, xContextMenu); 27 28 if (xMenuElementFactory != null) 29 { 30 31 // create root menu entry for sub menu and sub menu 32 com.sun.star.beans.XPropertySet xRootMenuEntry = 33 UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger")); 34 35 // create a line separator for our new help sub menu 36 com.sun.star.beans.XPropertySet xSeparator = 37 UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerSeparator")); 38 Short aSeparatorType = new Short(ActionTriggerSeparatorType.LINE); 39 xSeparator.setPropertyValue("SeparatorType", (Object) aSeparatorType); 40 41 // query sub menu for index container to get access 42 com.sun.star.container.XIndexContainer xSubMenuContainer = 43 UnoRuntime.queryInterface(com.sun.star.container.XIndexContainer.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerContainer")); 44 45 // intialize root menu entry "Help" 46 xRootMenuEntry.setPropertyValue("Text", ("Help")); 47 xRootMenuEntry.setPropertyValue("CommandURL", ("slot:5410")); 48 xRootMenuEntry.setPropertyValue("HelpURL", ("5410")); 49 xRootMenuEntry.setPropertyValue("SubContainer", (Object) xSubMenuContainer); 50 xRootMenuEntry.setPropertyValue("Image", myBitmap); 51 52 // create menu entries for the new sub menu 53 // intialize help/content menu entry 54 // entry "Content" 55 XPropertySet xMenuEntry = UnoRuntime.queryInterface(XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger")); 56 xMenuEntry.setPropertyValue("Text", ("Content")); 57 xMenuEntry.setPropertyValue("CommandURL", ("slot:5401")); 58 xMenuEntry.setPropertyValue("HelpURL", ("5401")); 59 60 // insert menu entry to sub menu 61 xSubMenuContainer.insertByIndex(0, (Object) xMenuEntry); 62 63 // intialize help/help agent 64 // entry "Help Agent" 65 xMenuEntry = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger")); 66 xMenuEntry.setPropertyValue("Text", ("Help Agent")); 67 xMenuEntry.setPropertyValue("CommandURL", ("slot:5962")); 68 xMenuEntry.setPropertyValue("HelpURL", ("5962")); 69 70 // insert menu entry to sub menu 71 xSubMenuContainer.insertByIndex(1, (Object) xMenuEntry); 72 // intialize help/tips 73 // entry "Tips" 74 xMenuEntry = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger")); 75 xMenuEntry.setPropertyValue("Text", ("Tips")); 76 xMenuEntry.setPropertyValue("CommandURL", ("slot:5404")); 77 xMenuEntry.setPropertyValue("HelpURL", ("5404")); 78 79 // insert menu entry to sub menu 80 xSubMenuContainer.insertByIndex(2, (Object) xMenuEntry); 81 82 // add separator into the given context menu 83 xContextMenu.insertByIndex(0, (Object) xSeparator); 84 85 // add new sub menu into the given context menu 86 xContextMenu.insertByIndex(0, (Object) xRootMenuEntry); 87 88 // The controller should execute the modified context menu and stop notifying other 89 // interceptors. 90 return com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED; 91 } 92 } 93 catch (com.sun.star.beans.UnknownPropertyException ex) 94 { 95 // do something useful 96 // we used a unknown property 97 } 98 catch (com.sun.star.lang.IndexOutOfBoundsException ex) 99 { 100 // do something useful 101 // we used an invalid index for accessing a container 102 } 103 catch (com.sun.star.uno.Exception ex) 104 { 105 // something strange has happend! 106 } 107 catch (java.lang.Throwable ex) 108 { 109 // catch java exceptions do something useful 110 } 111 112 return com.sun.star.ui.ContextMenuInterceptorAction.IGNORED; 113 } 114 } 115