diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:51:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 16:51:28 +0000 |
commit | 940b4d1848e8c70ab7642901a68594e8016caffc (patch) | |
tree | eb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java | |
parent | Initial commit. (diff) | |
download | libreoffice-upstream/1%7.0.4.tar.xz libreoffice-upstream/1%7.0.4.zip |
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java')
-rw-r--r-- | framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java b/framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java new file mode 100644 index 000000000..7496b58e0 --- /dev/null +++ b/framework/qa/complex/contextMenuInterceptor/ContextMenuInterceptor.java @@ -0,0 +1,132 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +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 final 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 = Short.valueOf(ActionTriggerSeparatorType.LINE); + xSeparator.setPropertyValue("SeparatorType", 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")); + + // initialize root menu entry "Help" + xRootMenuEntry.setPropertyValue("Text", "Help"); + xRootMenuEntry.setPropertyValue("CommandURL", "slot:5410"); + xRootMenuEntry.setPropertyValue("HelpURL", "5410"); + xRootMenuEntry.setPropertyValue("SubContainer", xSubMenuContainer); + xRootMenuEntry.setPropertyValue("Image", myBitmap); + + // create menu entries for the new sub menu + // initialize 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, xMenuEntry); + + // initialize help/help on help + // entry "Help on Help" + xMenuEntry = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger")); + xMenuEntry.setPropertyValue("Text", "Help on Help"); + xMenuEntry.setPropertyValue("CommandURL", "slot:5400"); + xMenuEntry.setPropertyValue("HelpURL", "5400"); + + // insert menu entry to sub menu + xSubMenuContainer.insertByIndex(1, xMenuEntry); + // initialize 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, xMenuEntry); + + // add separator into the given context menu + xContextMenu.insertByIndex(0, xSeparator); + + // add new sub menu into the given context menu + xContextMenu.insertByIndex(0, 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 an 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 happened! + } + catch (java.lang.Throwable ex) + { + // catch java exceptions do something useful + } + + return com.sun.star.ui.ContextMenuInterceptorAction.IGNORED; + } +} |