blob: 374e34721ee81e914abb2909d39f1dc0e532a65f [file] [log] [blame]
/**************************************************************
*
* 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;
}
}