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