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 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski package helper; 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski import com.sun.star.beans.UnknownPropertyException; 28*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 29*b1cdbd2cSJim Jagielski import com.sun.star.container.XIndexContainer; 30*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 31*b1cdbd2cSJim Jagielski import com.sun.star.ui.ActionTriggerSeparatorType; 32*b1cdbd2cSJim Jagielski import com.sun.star.ui.ContextMenuInterceptorAction; 33*b1cdbd2cSJim Jagielski import com.sun.star.ui.XContextMenuInterceptor; 34*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski public class ContextMenuInterceptor implements XContextMenuInterceptor { 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 try { 41*b1cdbd2cSJim Jagielski // Retrieve context menu container and query for service factory to 42*b1cdbd2cSJim Jagielski // create sub menus, menu entries and separators 43*b1cdbd2cSJim Jagielski XIndexContainer xContextMenu = aEvent.ActionTriggerContainer; 44*b1cdbd2cSJim Jagielski XMultiServiceFactory xMenuElementFactory = 45*b1cdbd2cSJim Jagielski (XMultiServiceFactory)UnoRuntime.queryInterface( 46*b1cdbd2cSJim Jagielski XMultiServiceFactory.class, xContextMenu ); 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski if ( xMenuElementFactory != null ) { 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski // create root menu entry for sub menu and sub menu 51*b1cdbd2cSJim Jagielski XPropertySet xRootMenuEntry = 52*b1cdbd2cSJim Jagielski (XPropertySet)UnoRuntime.queryInterface( 53*b1cdbd2cSJim Jagielski XPropertySet.class, 54*b1cdbd2cSJim Jagielski 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 XPropertySet xSeparator = 58*b1cdbd2cSJim Jagielski (XPropertySet)UnoRuntime.queryInterface( 59*b1cdbd2cSJim Jagielski XPropertySet.class, 60*b1cdbd2cSJim Jagielski xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerSeparator" ) ); 61*b1cdbd2cSJim Jagielski Short aSeparatorType = new Short( ActionTriggerSeparatorType.LINE ); 62*b1cdbd2cSJim Jagielski xSeparator.setPropertyValue( "SeparatorType", (Object)aSeparatorType ); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski // query sub menu for index container to get access 65*b1cdbd2cSJim Jagielski XIndexContainer xSubMenuContainer = 66*b1cdbd2cSJim Jagielski (XIndexContainer)UnoRuntime.queryInterface( 67*b1cdbd2cSJim Jagielski XIndexContainer.class, 68*b1cdbd2cSJim Jagielski xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerContainer" )); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski // intialize root menu entry "Help" 71*b1cdbd2cSJim Jagielski xRootMenuEntry.setPropertyValue( "Text", new String( "Help" )); 72*b1cdbd2cSJim Jagielski xRootMenuEntry.setPropertyValue( "CommandURL", new String( "slot:5410" )); 73*b1cdbd2cSJim Jagielski xRootMenuEntry.setPropertyValue( "HelpURL", new String( "5410" )); 74*b1cdbd2cSJim Jagielski xRootMenuEntry.setPropertyValue( "SubContainer", (Object)xSubMenuContainer ); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski // create menu entries for the new sub menu 77*b1cdbd2cSJim Jagielski // intialize help/content menu entry 78*b1cdbd2cSJim Jagielski // entry "Content" 79*b1cdbd2cSJim Jagielski XPropertySet xMenuEntry = (XPropertySet)UnoRuntime.queryInterface( 80*b1cdbd2cSJim Jagielski XPropertySet.class, xMenuElementFactory.createInstance( 81*b1cdbd2cSJim Jagielski "com.sun.star.ui.ActionTrigger" )); 82*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "Text", new String( "Content" )); 83*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "CommandURL", new String( "slot:5401" )); 84*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "HelpURL", new String( "5401" )); 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski // insert menu entry to sub menu 87*b1cdbd2cSJim Jagielski xSubMenuContainer.insertByIndex( 0, (Object)xMenuEntry ); 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski // intialize help/help agent 90*b1cdbd2cSJim Jagielski // entry "Help Agent" 91*b1cdbd2cSJim Jagielski xMenuEntry = (XPropertySet)UnoRuntime.queryInterface( 92*b1cdbd2cSJim Jagielski XPropertySet.class, 93*b1cdbd2cSJim Jagielski xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger" )); 94*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "Text", new String( "Help Agent" )); 95*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "CommandURL", new String( "slot:5962" )); 96*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "HelpURL", new String( "5962" )); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski // insert menu entry to sub menu 99*b1cdbd2cSJim Jagielski xSubMenuContainer.insertByIndex( 1, (Object)xMenuEntry ); 100*b1cdbd2cSJim Jagielski // intialize help/tips 101*b1cdbd2cSJim Jagielski // entry "Tips" 102*b1cdbd2cSJim Jagielski xMenuEntry = (XPropertySet)UnoRuntime.queryInterface( 103*b1cdbd2cSJim Jagielski XPropertySet.class, 104*b1cdbd2cSJim Jagielski xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger" )); 105*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "Text", new String( "Tips" )); 106*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "CommandURL", new String( "slot:5404" )); 107*b1cdbd2cSJim Jagielski xMenuEntry.setPropertyValue( "HelpURL", new String( "5404" )); 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski // insert menu entry to sub menu 110*b1cdbd2cSJim Jagielski xSubMenuContainer.insertByIndex( 2, (Object)xMenuEntry ); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // add separator into the given context menu 113*b1cdbd2cSJim Jagielski xContextMenu.insertByIndex( 1, (Object)xSeparator ); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski // add new sub menu into the given context menu 116*b1cdbd2cSJim Jagielski xContextMenu.insertByIndex( 1, (Object)xRootMenuEntry ); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski // The controller should execute the modified context menu and stop notifying other 119*b1cdbd2cSJim Jagielski // interceptors. 120*b1cdbd2cSJim Jagielski return ContextMenuInterceptorAction.EXECUTE_MODIFIED ; 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski } catch ( UnknownPropertyException ex ) { 123*b1cdbd2cSJim Jagielski // do something useful 124*b1cdbd2cSJim Jagielski // we used a unknown property 125*b1cdbd2cSJim Jagielski } catch ( IndexOutOfBoundsException ex ) { 126*b1cdbd2cSJim Jagielski // do something useful 127*b1cdbd2cSJim Jagielski // we used an invalid index for accessing a container 128*b1cdbd2cSJim Jagielski } catch ( Exception ex ) { 129*b1cdbd2cSJim Jagielski // something strange has happend! 130*b1cdbd2cSJim Jagielski } catch ( Throwable ex ) { 131*b1cdbd2cSJim Jagielski // catch java exceptions and do something useful 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski return ContextMenuInterceptorAction.IGNORED; 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski }