| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| 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; |
| } |
| } |