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