| /******************************************************************************* |
| * Copyright (c) 2004, 2011 Tasktop Technologies and others. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * https://www.eclipse.org/legal/epl-2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Tasktop Technologies - initial API and implementation |
| * Leah Findlater - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.internal.monitor.ui; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.action.ActionContributionItem; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IContributionItem; |
| import org.eclipse.mylyn.commons.core.StatusHandler; |
| import org.eclipse.mylyn.monitor.core.InteractionEvent; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Item; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.swt.widgets.MenuItem; |
| import org.eclipse.swt.widgets.ToolItem; |
| |
| /** |
| * @author Mik Kersten |
| * @author Leah Findlater |
| */ |
| public class MenuCommandMonitor implements Listener { |
| |
| public static final String MENU_ITEM_ID = "item.label."; //$NON-NLS-1$ |
| |
| public static final String MENU_ITEM_SELECTED = "menu"; //$NON-NLS-1$ |
| |
| public static final String TOOLBAR_ITEM_SELECTED = "toolbar"; //$NON-NLS-1$ |
| |
| public static final String MENU_PATH_DELIM = "/"; //$NON-NLS-1$ |
| |
| public void handleEvent(Event event) { |
| try { |
| if (!(event.widget instanceof Item)) { |
| return; |
| } |
| Item item = (Item) event.widget; |
| if (item.getData() == null) { |
| return; |
| } |
| Object target = event.widget.getData(); |
| String id = null; |
| String delta = null; |
| if (target instanceof IContributionItem) { |
| id = ((IContributionItem) target).getId(); |
| } |
| if (id == null && target instanceof ActionContributionItem) { |
| IAction action = ((ActionContributionItem) target).getAction(); |
| if (action.getId() != null) { |
| id = action.getId(); |
| } else { |
| id = action.getClass().getName(); |
| } |
| } else if (id == null) { |
| id = target.getClass().getName(); |
| } |
| |
| if (item instanceof MenuItem) { |
| MenuItem menu = (MenuItem) item; |
| Menu parentMenu = menu.getParent(); |
| String location = ""; //$NON-NLS-1$ |
| if (parentMenu != null) { |
| while (parentMenu.getParentItem() != null) { |
| location = parentMenu.getParentItem().getText() + MENU_PATH_DELIM + location; |
| parentMenu = parentMenu.getParentMenu(); |
| } |
| } |
| if (id == null) { |
| return; |
| // TODO: would be good to put back this info in some form |
| // but it can contain private data, bug 178604 |
| |
| // if (id == null) |
| // id = "null"; |
| // String itemText = obfuscateItemText(item.getText()); |
| // id = id + "$" + MENU_ITEM_ID + location + itemText; |
| } |
| |
| delta = MENU_ITEM_SELECTED; |
| } else if (item instanceof ToolItem) { |
| // TODO: would be good to put back this info in some form |
| // but it can contain private data, bug 178604 |
| // ToolItem tool = (ToolItem) item; |
| // if (id == null) |
| // id = "null"; |
| // id = id + "$" + MENU_ITEM_ID + '.' + tool.getToolTipText(); |
| delta = TOOLBAR_ITEM_SELECTED; |
| } |
| InteractionEvent interactionEvent = InteractionEvent.makeCommand(id, delta); |
| MonitorUiPlugin.getDefault().notifyInteractionObserved(interactionEvent); |
| |
| } catch (Throwable t) { |
| StatusHandler.log(new Status(IStatus.ERROR, MonitorUiPlugin.ID_PLUGIN, "Could not log selection", t)); //$NON-NLS-1$ |
| } |
| } |
| } |