blob: 879bd4a591c20f71413d6f9d0d752a38e24c92e8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
* 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
*
* Contributors:
* Soyatec - initial API and implementation
*******************************************************************************/
package org.eclipse.xwt.vex.palette;
import java.util.List;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.xwt.vex.EditorMessages;
import org.eclipse.xwt.vex.VEXEditor;
import org.eclipse.xwt.vex.palette.customize.CustomizeComponentFactory;
import org.eclipse.xwt.vex.palette.customize.model.CustomizeComponent;
import org.eclipse.xwt.vex.palette.part.ToolPaletteDrawer;
import org.eclipse.xwt.vex.toolpalette.ContextType;
import org.eclipse.xwt.vex.toolpalette.Entry;
import org.eclipse.xwt.vex.toolpalette.ToolPaletteFactory;
import org.eclipse.xwt.vex.util.ImageHelper;
/**
* Utility class that can create a GEF Palette.
*
* @see #createPalette()
*/
public class PaletteRootFactory {
/**
* PaletteResourceManager can provider resourcePath and iconsPath.
*/
private PaletteResourceManager trManager;
public PaletteRootFactory(PaletteResourceManager trManager) {
this.trManager = trManager;
}
/**
*Create a new PaletteRoot.
*/
public PaletteRoot createPaletteRoot() {
PaletteRoot palette = new PaletteRoot();
Resource resource = trManager.getResource();
if (resource != null) {
/*
* ToolPalette toolPalette = (ToolPalette) resource.getContents().get(0); EList<Entry> entries = toolPalette.getEntries(); // add dynamic entry. Entry dynamicEntry = ToolPaletteFactory.eINSTANCE.createEntry(); dynamicEntry.setName(EditorMessages.PaletteRootFactory_Dynamic); dynamicEntry.setContext(ContextType.XML_TAG); entries.add(dynamicEntry); dynamicEntry.getEntries().add(ToolPaletteFactory.eINSTANCE.createEntry());
*
* // add custom entry. Entry customEntry = ToolPaletteFactory.eINSTANCE.createEntry(); customEntry.setName(EditorMessages.PaletteRootFactory_Customize); customEntry.setContext(ContextType.XML_TAG); entries.add(customEntry);
*
* List<CustomizeComponent> result = CustomizeComponentFactory.loadCustomizeComponents(); if (result.isEmpty()) { customEntry.getEntries().add(ToolPaletteFactory.eINSTANCE.createEntry()); } for (CustomizeComponent customizeComponent : result) { Entry subEntry = ToolPaletteFactory.eINSTANCE.createEntry(); subEntry.setName(customizeComponent.getName()); subEntry.setScope(customizeComponent.getScope()); subEntry.setIcon(customizeComponent.getIcon()); subEntry.setLargeIcon(customizeComponent.getLargeIcon()); subEntry.setToolTip(customizeComponent.getTooptip()); subEntry.setContent(customizeComponent.getContent()); subEntry.setContext(ContextType.XML_TAG); // add sub entry customEntry.getEntries().add(subEntry); }
*/
PaletteContainer createShapesDrawer = createShapesDrawer(resource);
palette.addAll(createShapesDrawer.getChildren());
}
return palette;
}
/**
* Create the "Shapes" drawer.
*
* @param resource
*/
private PaletteContainer createShapesDrawer(Resource resource) {
PaletteDrawer componentsDrawer = createPaletteDrawer(EditorMessages.PaletteRootFactory_Shapes);
if (trManager != null) {
EntryContentProvider contentProvider = new EntryContentProvider();
EntryLabelProvider labelProvider = new EntryLabelProvider();
createToolPaletteStructure(componentsDrawer, contentProvider, labelProvider, resource);
}
// Bug 274057 - Modification - Start
CustomWidgetDrawer.addCustomWidgets(componentsDrawer);
// Bug 274057 - Modification - End
return componentsDrawer;
}
/**
*Create a default Drawer.
*/
private PaletteDrawer createPaletteDrawer(String name) {
PaletteDrawer componentsDrawer = new ToolPaletteDrawer(name);
componentsDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED);
return componentsDrawer;
}
/**
* Create Tools.
*
* @param parentDrawer
* @param contentProvider
* @param labelProvider
* @param resource
*/
private void createToolPaletteStructure(PaletteDrawer parentDrawer, EntryContentProvider contentProvider, EntryLabelProvider labelProvider, Object resource) {
Object[] children = contentProvider.getElements(resource);
String name = labelProvider.getText(resource);
if (name == null) {
return;
}
String description = labelProvider.getDescription(resource);
ImageDescriptor image = getImageDescriptor(resource);
if (image == null) {
image = labelProvider.getImageDescriptor(resource);
}
ImageDescriptor largeImage = getLargeImageDescriptor(resource);
if (largeImage == null) {
largeImage = labelProvider.getLargeImageDescriptor(resource);
}
if (children.length == 0) {
CombinedTemplateCreationEntry component = new CombinedTemplateCreationEntry(name, description, resource, new SimpleFactory(resource.getClass()), image, largeImage);
component.setDescription(description);
parentDrawer.add(component);
} else {
if (resource instanceof Entry) {
PaletteDrawer componentsDrawer = createPaletteDrawer(name);
componentsDrawer.setSmallIcon(image);
componentsDrawer.setLargeIcon(largeImage);
componentsDrawer.setDescription(description);
parentDrawer.add(componentsDrawer);
componentsDrawer.setParent(parentDrawer);
// if (EditorMessages.PaletteRootFactory_Dynamic.equals(name) || EditorMessages.PaletteRootFactory_Customize.equals(name)) {
// componentsDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_OPEN);
// }
for (Object child : children) {
createToolPaletteStructure(componentsDrawer, contentProvider, labelProvider, child);
}
} else {
for (Object child : children) {
createToolPaletteStructure(parentDrawer, contentProvider, labelProvider, child);
}
}
}
}
/**
* Create ImageDescriptor of given object. Load images from extension registry.
*/
private ImageDescriptor getImageDescriptor(Object source) {
if (source instanceof Entry) {
return ImageHelper.getImageDescriptor(trManager, ((Entry) source).getIcon());
}
return null;
}
/**
*Create Large ImageDescriptor of given object. Load images from extension registry.
*/
private ImageDescriptor getLargeImageDescriptor(Object source) {
if (source instanceof Entry) {
return ImageHelper.getImageDescriptor(trManager, ((Entry) source).getLargeIcon());
}
return null;
}
/**
* Creates the PaletteRoot and adds all palette elements. Use this factory method to create a new palette for your graphical editor.
*
* @param editorPart
*
* @return a new PaletteRoot
*/
public static PaletteRoot createPalette(IEditorPart editorPart) {
PaletteRoot palette = new PaletteRoot();
if (!(editorPart instanceof VEXEditor)) {
return palette;
}
PaletteResourceManager trManager = (PaletteResourceManager) editorPart.getAdapter(PaletteResourceManager.class);
PaletteRootFactory paletteFactory = new PaletteRootFactory(trManager);
return paletteFactory.createPaletteRoot();
}
public static PaletteRoot createPaletteByResourceManager(PaletteResourceManager resourceManager) {
PaletteRootFactory paletteFactory = new PaletteRootFactory(resourceManager);
return paletteFactory.createPaletteRoot();
}
public static PaletteRoot createDynamicPalette(IEditorPart editorPart) {
PaletteRoot palette = new PaletteRoot();
if (!(editorPart instanceof VEXEditor)) {
return palette;
}
PaletteResourceManager trManager = (PaletteResourceManager) editorPart.getAdapter(PaletteResourceManager.class);
PaletteRootFactory paletteFactory = new PaletteRootFactory(trManager);
return paletteFactory.createDynamicPaletteRoot();
}
public PaletteRoot createDynamicPaletteRoot() {
PaletteRoot palette = new PaletteRoot();
PaletteGroup dynamicGroup = new PaletteGroup(EditorMessages.VEXEditor_Dynamic);
palette.add(dynamicGroup);
return palette;
}
public static PaletteRoot createCustomizePalette(IEditorPart editorPart) {
PaletteRoot palette = new PaletteRoot();
if (!(editorPart instanceof VEXEditor)) {
return palette;
}
PaletteResourceManager trManager = (PaletteResourceManager) editorPart.getAdapter(PaletteResourceManager.class);
PaletteRootFactory paletteFactory = new PaletteRootFactory(trManager);
return paletteFactory.createCustomizePaletteRoot();
}
public PaletteRoot createCustomizePaletteRoot() {
PaletteRoot palette = new PaletteRoot();
PaletteGroup customizeGroup = new PaletteGroup("Customize");
Resource resource = trManager.getCustomizeResource();
if (resource != null) {
List<CustomizeComponent> result = CustomizeComponentFactory.loadCustomizeComponents();
for (CustomizeComponent customizeComponent : result) {
Entry customizeEntry = ToolPaletteFactory.eINSTANCE.createEntry();
customizeEntry.setName(customizeComponent.getName());
customizeEntry.setScope(customizeComponent.getScope());
String iconString = customizeComponent.getIcon();
if (iconString != null && iconString.length() > 0) {
customizeEntry.setIcon(iconString);
}
iconString = customizeComponent.getLargeIcon();
if (iconString != null && iconString.length() > 0) {
customizeEntry.setLargeIcon(iconString);
}
customizeEntry.setToolTip(customizeComponent.getTooptip());
customizeEntry.setContent(customizeComponent.getContent());
customizeEntry.setContext(ContextType.XML_TAG);
CombinedTemplateCreationEntry component = new CombinedTemplateCreationEntry(customizeEntry.getName(), customizeEntry.getToolTip(), customizeEntry, new SimpleFactory(resource.getClass()), ImageHelper.getImageDescriptor(trManager, customizeEntry.getIcon()), ImageHelper.getImageDescriptor(trManager, customizeEntry.getLargeIcon()));
customizeGroup.add(component);
}
}
palette.add(customizeGroup);
return palette;
}
}