/** * Copyright 2004-2016 Riccardo Solmi. All rights reserved. * This file is part of the Whole Platform. * * The Whole Platform is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Whole Platform is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>. */ package org.whole.product.e4.lw.processors; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.runtime.CoreException; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.SideValue; import org.eclipse.e4.ui.model.application.ui.advanced.MAdvancedFactory; import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack; import org.eclipse.e4.ui.model.application.ui.basic.MBasicFactory; import org.eclipse.e4.ui.model.application.ui.basic.MDialog; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem; import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem; 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.workbench.modeling.EModelService; import org.whole.lang.codebase.ClasspathPersistenceProvider; import org.whole.lang.e4.ui.util.E4Utils; import org.whole.lang.operations.InterpreterOperation; import org.whole.lang.xml.codebase.XmlBuilderPersistenceKit; /** * @author Enrico Persiani */ public class E4ModelProcessor { private static final String PLACEHOLDER_WINDOW_ID = "org.whole.product.e4.lw.placeholderWindow"; @Inject protected IEclipseContext context; @Inject protected IWorkspace workspace; @Inject protected MApplication application; @Inject protected EModelService modelService; @Execute protected void initialize() throws CoreException { try { ClasspathPersistenceProvider pp = new ClasspathPersistenceProvider("org/whole/product/e4/lw/WorkspaceConfiguration.xwl"); InterpreterOperation.interpret(XmlBuilderPersistenceKit.instance().readModel(pp)); MUIElement placeholderWindow = modelService.find(PLACEHOLDER_WINDOW_ID, application); if (placeholderWindow == null || !placeholderWindow.getParent().getChildren().remove(placeholderWindow)) throw new IllegalStateException("Unable to remove placeholder window with id: '"+PLACEHOLDER_WINDOW_ID+"'"); MTrimmedWindow window = MBasicFactory.INSTANCE.createTrimmedWindow(); window.setLabel("Whole Language Workbench Window"); window.setX(500); window.setY(20); window.setWidth(800); window.setHeight(1000); MMenu mainMenu = MMenuFactory.INSTANCE.createMenu(); mainMenu.setElementId("menu:org.eclipse.ui.main.menu"); mainMenu.getChildren().add(createFileMenu()); mainMenu.getChildren().add(createEditMenu()); mainMenu.getChildren().add(createHelpMenu()); window.setMainMenu(mainMenu); MTrimBar trimBar = MBasicFactory.INSTANCE.createTrimBar(); trimBar.setSide(SideValue.TOP); trimBar.getChildren().add(createToolBar()); window.getTrimBars().add(trimBar); MPerspectiveStack perspectiveStack = MAdvancedFactory.INSTANCE.createPerspectiveStack(); MPerspective perspective = MAdvancedFactory.INSTANCE.createPerspective(); perspective.setLabel("P1"); MPartSashContainer partSashContainer = MBasicFactory.INSTANCE.createPartSashContainer(); partSashContainer.setHorizontal(false); MPartStack partStack = MBasicFactory.INSTANCE.createPartStack(); MPart part = MBasicFactory.INSTANCE.createPart(); part.setContributionURI("bundleclass://org.whole.lang.e4.ui/org.whole.lang.e4.ui.parts.E4GraphicalPart"); part.setLabel("Part1a"); part.setCloseable(true); Map<String, String> persistedState = part.getPersistedState(); persistedState.put("basePersistenceKitId", "org.whole.lang.xml.codebase.XmlBuilderPersistenceKit"); persistedState.put("filePath", "/BaseProject/src/org/whole/lang/ExampleModel.xwl"); persistedState.put("overridePersistenceKitId", "org.whole.lang.xml.codebase.XmlBuilderPersistenceKit"); partStack.getChildren().add(part); partSashContainer.getChildren().add(partStack); perspective.getChildren().add(partSashContainer); perspectiveStack.getChildren().add(perspective); window.getChildren().add(perspectiveStack); application.getChildren().add(window); } catch (Exception e) { System.out.println("Unable to configure the initial workspace"); e.printStackTrace(); } } private MToolBar createToolBar() { MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar(); toolBar.setElementId("toolbar:org.eclipse.ui.main.toolbar"); List<MToolBarElement> toolItems = toolBar.getChildren(); toolItems.add(createHandledToolItem("save", "Save", "org.eclipse.ui.file.save", "platform:/plugin/org.whole.product.e4.lw/icons/save_edit.png")); toolItems.add(createHandledToolItem("quit", "Quit", "org.eclipse.ui.file.exit")); toolItems.add(createHandledToolItem("revert", "Revert", "org.eclipse.ui.file.revert")); toolItems.add(createHandledToolItem("generateJava", "Generate Java", "org.whole.lang.e4.ui.command::generateJava")); return toolBar; } protected MMenu createFileMenu() { MMenu fileMenu = MMenuFactory.INSTANCE.createMenu(); fileMenu.setLabel("File"); List<MMenuElement> menuItems = fileMenu.getChildren(); menuItems.add(createHandledMenuItem("save", "Save", "org.eclipse.ui.file.save", "platform:/plugin/org.whole.product.e4.lw/icons/save_edit.png")); menuItems.add(createHandledMenuItem("quit", "Quit", "org.eclipse.ui.file.exit")); menuItems.add(createHandledMenuItem("revert", "Revert", "org.eclipse.ui.file.revert")); return fileMenu; } protected MMenu createEditMenu() { MMenu editMenu = MMenuFactory.INSTANCE.createMenu(); editMenu.setLabel("Edit"); List<MMenuElement> menuItems = editMenu.getChildren(); menuItems.add(createHandledMenuItem("undo", "Undo", "org.eclipse.ui.edit.undo")); menuItems.add(createHandledMenuItem("redo", "Redo", "org.eclipse.ui.edit.redo")); menuItems.add(MMenuFactory.INSTANCE.createMenuSeparator()); menuItems.add(createHandledMenuItem("cut", "Cut", "org.eclipse.ui.edit.cut")); menuItems.add(createHandledMenuItem("copy", "Copy", "org.eclipse.ui.edit.copy")); menuItems.add(createHandledMenuItem("paste", "Paste", "org.eclipse.ui.edit.paste")); menuItems.add(createHandledMenuItem("delete", "Delete", "org.eclipse.ui.edit.delete")); menuItems.add(createHandledMenuItem("selectAll", "Select All", "org.eclipse.ui.edit.selectAll")); menuItems.add(createHandledMenuItem("findReplace", "Find/Replace...", "org.eclipse.ui.edit.findReplace")); return editMenu; } protected MMenu createHelpMenu() { MMenu helpMenu = MMenuFactory.INSTANCE.createMenu(); helpMenu.setLabel("File"); helpMenu.getChildren().add(createHandledMenuItem("about", "About", "org.eclipse.ui.help.aboutAction")); helpMenu.getChildren().add(createHandledMenuItem("preferences", "Preferences", "org.eclipse.ui.window.preferences")); return helpMenu; } protected MHandledMenuItem createHandledMenuItem(String elementId, String label, String commandId) { return createHandledMenuItem(elementId, label, commandId, null); } protected MHandledMenuItem createHandledMenuItem(String elementId, String label, String commandId, String iconURI) { MHandledMenuItem handledMenuItem = MMenuFactory.INSTANCE.createHandledMenuItem(); handledMenuItem.setElementId(elementId); handledMenuItem.setLabel(label); handledMenuItem.setIconURI(iconURI); handledMenuItem.setCommand(E4Utils.findCommand(commandId, application)); return handledMenuItem; } protected MHandledToolItem createHandledToolItem(String elementId, String label, String commandId) { return createHandledToolItem(elementId, label, commandId, null); } protected MHandledToolItem createHandledToolItem(String elementId, String label, String commandId, String iconURI) { MHandledToolItem handledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); handledToolItem.setElementId(elementId); handledToolItem.setLabel(label); handledToolItem.setIconURI(iconURI); handledToolItem.setCommand(E4Utils.findCommand(commandId, application)); return handledToolItem; } }