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