176b6b121SAndrew Rist /**************************************************************
276b6b121SAndrew Rist  *
376b6b121SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
476b6b121SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
576b6b121SAndrew Rist  * distributed with this work for additional information
676b6b121SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
776b6b121SAndrew Rist  * to you under the Apache License, Version 2.0 (the
876b6b121SAndrew Rist  * "License"); you may not use this file except in compliance
976b6b121SAndrew Rist  * with the License.  You may obtain a copy of the License at
1076b6b121SAndrew Rist  *
1176b6b121SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1276b6b121SAndrew Rist  *
1376b6b121SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1476b6b121SAndrew Rist  * software distributed under the License is distributed on an
1576b6b121SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1676b6b121SAndrew Rist  * KIND, either express or implied.  See the License for the
1776b6b121SAndrew Rist  * specific language governing permissions and limitations
1876b6b121SAndrew Rist  * under the License.
1976b6b121SAndrew Rist  *
2076b6b121SAndrew Rist  *************************************************************/
2176b6b121SAndrew Rist 
22cdf0e10cSrcweir package complex.contextMenuInterceptor;
23cdf0e10cSrcweir 
24cdf0e10cSrcweir import com.sun.star.ui.*;
25cdf0e10cSrcweir import com.sun.star.beans.XPropertySet;
26cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
27cdf0e10cSrcweir 
28cdf0e10cSrcweir public class ContextMenuInterceptor implements XContextMenuInterceptor
29cdf0e10cSrcweir {
30cdf0e10cSrcweir 
31cdf0e10cSrcweir     private com.sun.star.awt.XBitmap myBitmap;
32cdf0e10cSrcweir 
ContextMenuInterceptor(com.sun.star.awt.XBitmap aBitmap)33cdf0e10cSrcweir     public ContextMenuInterceptor(com.sun.star.awt.XBitmap aBitmap)
34cdf0e10cSrcweir     {
35cdf0e10cSrcweir         myBitmap = aBitmap;
36cdf0e10cSrcweir     }
37cdf0e10cSrcweir 
notifyContextMenuExecute( com.sun.star.ui.ContextMenuExecuteEvent aEvent)38cdf0e10cSrcweir     public ContextMenuInterceptorAction notifyContextMenuExecute(
39cdf0e10cSrcweir             com.sun.star.ui.ContextMenuExecuteEvent aEvent) throws RuntimeException
40cdf0e10cSrcweir     {
41cdf0e10cSrcweir         try
42cdf0e10cSrcweir         {
43cdf0e10cSrcweir             // Retrieve context menu container and query for service factory to
44cdf0e10cSrcweir             // create sub menus, menu entries and separators
45cdf0e10cSrcweir             com.sun.star.container.XIndexContainer xContextMenu = aEvent.ActionTriggerContainer;
46cdf0e10cSrcweir             com.sun.star.lang.XMultiServiceFactory xMenuElementFactory =
47cdf0e10cSrcweir                     UnoRuntime.queryInterface(com.sun.star.lang.XMultiServiceFactory.class, xContextMenu);
48cdf0e10cSrcweir 
49cdf0e10cSrcweir             if (xMenuElementFactory != null)
50cdf0e10cSrcweir             {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir                 // create root menu entry for sub menu and sub menu
53cdf0e10cSrcweir                 com.sun.star.beans.XPropertySet xRootMenuEntry =
54cdf0e10cSrcweir                         UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger"));
55cdf0e10cSrcweir 
56cdf0e10cSrcweir                 // create a line separator for our new help sub menu
57cdf0e10cSrcweir                 com.sun.star.beans.XPropertySet xSeparator =
58cdf0e10cSrcweir                         UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerSeparator"));
59cdf0e10cSrcweir                 Short aSeparatorType = new Short(ActionTriggerSeparatorType.LINE);
60cdf0e10cSrcweir                 xSeparator.setPropertyValue("SeparatorType", (Object) aSeparatorType);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir                 // query sub menu for index container to get access
63cdf0e10cSrcweir                 com.sun.star.container.XIndexContainer xSubMenuContainer =
64cdf0e10cSrcweir                         UnoRuntime.queryInterface(com.sun.star.container.XIndexContainer.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerContainer"));
65cdf0e10cSrcweir 
66*7f5c89d5SJohn Bampton                 // initialize root menu entry "Help"
67cdf0e10cSrcweir                 xRootMenuEntry.setPropertyValue("Text", ("Help"));
68cdf0e10cSrcweir                 xRootMenuEntry.setPropertyValue("CommandURL", ("slot:5410"));
69cdf0e10cSrcweir                 xRootMenuEntry.setPropertyValue("HelpURL", ("5410"));
70cdf0e10cSrcweir                 xRootMenuEntry.setPropertyValue("SubContainer", (Object) xSubMenuContainer);
71cdf0e10cSrcweir                 xRootMenuEntry.setPropertyValue("Image", myBitmap);
72cdf0e10cSrcweir 
73cdf0e10cSrcweir                 // create menu entries for the new sub menu
74*7f5c89d5SJohn Bampton                 // initialize help/content menu entry
75cdf0e10cSrcweir                 // entry "Content"
76cdf0e10cSrcweir                 XPropertySet xMenuEntry = UnoRuntime.queryInterface(XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger"));
77cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("Text", ("Content"));
78cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("CommandURL", ("slot:5401"));
79cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("HelpURL", ("5401"));
80cdf0e10cSrcweir 
81cdf0e10cSrcweir                 // insert menu entry to sub menu
82cdf0e10cSrcweir                 xSubMenuContainer.insertByIndex(0, (Object) xMenuEntry);
83cdf0e10cSrcweir 
84*7f5c89d5SJohn Bampton                 // initialize help/help agent
85cdf0e10cSrcweir                 // entry "Help Agent"
86cdf0e10cSrcweir                 xMenuEntry = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger"));
87cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("Text", ("Help Agent"));
88cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("CommandURL", ("slot:5962"));
89cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("HelpURL", ("5962"));
90cdf0e10cSrcweir 
91cdf0e10cSrcweir                 // insert menu entry to sub menu
92cdf0e10cSrcweir                 xSubMenuContainer.insertByIndex(1, (Object) xMenuEntry);
93*7f5c89d5SJohn Bampton                 // initialize help/tips
94cdf0e10cSrcweir                 // entry "Tips"
95cdf0e10cSrcweir                 xMenuEntry = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger"));
96cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("Text", ("Tips"));
97cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("CommandURL", ("slot:5404"));
98cdf0e10cSrcweir                 xMenuEntry.setPropertyValue("HelpURL", ("5404"));
99cdf0e10cSrcweir 
100cdf0e10cSrcweir                 // insert menu entry to sub menu
101cdf0e10cSrcweir                 xSubMenuContainer.insertByIndex(2, (Object) xMenuEntry);
102cdf0e10cSrcweir 
103cdf0e10cSrcweir                 // add separator into the given context menu
104cdf0e10cSrcweir                 xContextMenu.insertByIndex(0, (Object) xSeparator);
105cdf0e10cSrcweir 
106cdf0e10cSrcweir                 // add new sub menu into the given context menu
107cdf0e10cSrcweir                 xContextMenu.insertByIndex(0, (Object) xRootMenuEntry);
108cdf0e10cSrcweir 
109cdf0e10cSrcweir                 // The controller should execute the modified context menu and stop notifying other
110cdf0e10cSrcweir                 // interceptors.
111cdf0e10cSrcweir                 return com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED;
112cdf0e10cSrcweir             }
113cdf0e10cSrcweir         }
114cdf0e10cSrcweir         catch (com.sun.star.beans.UnknownPropertyException ex)
115cdf0e10cSrcweir         {
116cdf0e10cSrcweir             // do something useful
117cdf0e10cSrcweir             // we used a unknown property
118cdf0e10cSrcweir         }
119cdf0e10cSrcweir         catch (com.sun.star.lang.IndexOutOfBoundsException ex)
120cdf0e10cSrcweir         {
121cdf0e10cSrcweir             // do something useful
122cdf0e10cSrcweir             // we used an invalid index for accessing a container
123cdf0e10cSrcweir         }
124cdf0e10cSrcweir         catch (com.sun.star.uno.Exception ex)
125cdf0e10cSrcweir         {
12607a3d7f1SPedro Giffuni             // something strange has happened!
127cdf0e10cSrcweir         }
128cdf0e10cSrcweir         catch (java.lang.Throwable ex)
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             // catch java exceptions do something useful
131cdf0e10cSrcweir         }
132cdf0e10cSrcweir 
133cdf0e10cSrcweir         return com.sun.star.ui.ContextMenuInterceptorAction.IGNORED;
134cdf0e10cSrcweir     }
135cdf0e10cSrcweir }
136