/*
* Copyright (c) 2016, Alex Blewitt, Bandlem Ltd
* Copyright (c) 2016, Packt Publishing Ltd
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.packtpub.e4.migration.views;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
import org.eclipse.e4.ui.services.EMenuService;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
public class SampleView {
@Inject
private MPart part;
@Inject
private EMenuService menuService;
/**
* The ID of the view as specified by the extension.
*/
public static final String ID = "com.packtpub.e4.migration.views.SampleView";
private TableViewer viewer;
class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
public String getColumnText(Object obj, int index) {
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
public Image getImage(Object obj) {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
}
@PostConstruct
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(ArrayContentProvider.getInstance());
viewer.setInput(new String[] { "One", "Two", "Three" });
viewer.setLabelProvider(new ViewLabelProvider());
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "com.packtpub.e4.migration.viewer");
hookDoubleClickAction();
// createToolBar(); // now in fragment.e4xmi
// createViewMenu(); // now in fragment.e4xmi
// createPopupMenu(viewer.getControl()); // now in fragment.e4xmi
menuService.registerContextMenu(viewer.getControl(), part.getElementId() + ".popup");
}
private void hookDoubleClickAction() {
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
new DoubleClick().run((IStructuredSelection) event.getSelection());
}
});
}
public static void showMessage(String message) {
MessageDialog.openInformation(null, "Sample View", message);
}
@Focus
public void setFocus() {
viewer.getControl().setFocus();
}
private void createToolBar() {
MDirectToolItem one = MMenuFactory.INSTANCE.createDirectToolItem();
one.setTooltip("Action 1 tooltip");
one.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
one.setContributionURI(getURI(HandlerOne.class));
MDirectToolItem two = MMenuFactory.INSTANCE.createDirectToolItem();
two.setTooltip("Action 2 tooltip");
two.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
two.setContributionURI(getURI(HandlerTwo.class));
MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar();
List<MToolBarElement> children = toolBar.getChildren();
children.add(one);
children.add(two);
part.setToolbar(toolBar);
}
private String getURI(Class<?> clazz) {
Bundle bundle = FrameworkUtil.getBundle(clazz);
if (bundle != null) {
return "bundleclass://" + bundle.getSymbolicName() + "/" + clazz.getName();
} else {
return null;
}
}
private void createViewMenu() {
MMenu menu = MMenuFactory.INSTANCE.createMenu();
part.getMenus().add(menu);
menu.getTags().add("ViewMenu");
List<MMenuElement> children = menu.getChildren();
MDirectMenuItem one = MMenuFactory.INSTANCE.createDirectMenuItem();
one.setLabel("Action 1");
one.setTooltip("Action 1 tooltip");
one.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
one.setContributionURI(getURI(HandlerOne.class));
MDirectMenuItem two = MMenuFactory.INSTANCE.createDirectMenuItem();
two.setLabel("Action 2");
two.setTooltip("Action 2 tooltip");
two.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
two.setContributionURI(getURI(HandlerTwo.class));
children.add(one);
children.add(MMenuFactory.INSTANCE.createMenuSeparator());
children.add(two);
}
private void createPopupMenu(Control control) {
MMenu menu = MMenuFactory.INSTANCE.createPopupMenu();
menu.setElementId(part.getElementId());
menu.getTags().add("popup:" + part.getElementId());
part.getMenus().add(menu);
menuService.registerContextMenu(control, part.getElementId());
List<MMenuElement> children = menu.getChildren();
MDirectMenuItem one = MMenuFactory.INSTANCE.createDirectMenuItem();
one.setLabel("Action 1");
one.setTooltip("Action 1 tooltip");
one.setContributionURI(getURI(HandlerOne.class));
one.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
children.add(one);
children.add(MMenuFactory.INSTANCE.createMenuSeparator());
MDirectMenuItem two = MMenuFactory.INSTANCE.createDirectMenuItem();
two.setLabel("Action 2");
two.setTooltip("Action 2 tooltip");
two.setContributionURI(getURI(HandlerTwo.class));
two.setIconURI("platform:/plugin/org.eclipse.ui/icons/full/obj16/info_tsk.png");
children.add(two);
}
}