package org.csstudio.sds.ui.internal.editor; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import org.csstudio.sds.internal.preferences.CategorizationType; import org.csstudio.sds.model.WidgetModelFactoryService; import org.csstudio.sds.ui.internal.feedback.GraphicalFeedbackContributionsService; import org.csstudio.ui.util.CustomMediaFactory; 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.palette.PaletteStack; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.jface.resource.ImageDescriptor; import com.cosylab.util.StringComparator; public class PaletteEntryCreator { private final WidgetModelFactoryService _widgetService; private final KeyListenerAdapter _keyAdapter; public PaletteEntryCreator(final WidgetModelFactoryService widgetService, final KeyListenerAdapter keyAdapter) { _widgetService = widgetService; _keyAdapter = keyAdapter; } @SuppressWarnings("unchecked") public void createEntries(PaletteRoot root, CategorizationType categorization) { if (CategorizationType.NONE.equals(categorization)) { List<ToolEntry> toolentries = createToolEntries(root, _widgetService .getUsedWidgetTypes()); for (ToolEntry entry : toolentries) { PaletteGroup controlGroup = new PaletteGroup("controlGroup"); controlGroup.add(entry); root.add(controlGroup); } } else { PaletteContainer widgetCategory = null; List<String> allCategories = new ArrayList<String>(); allCategories.addAll(_widgetService.getAllCategories()); Collections.sort(allCategories, new StringComparator()); for (String category : allCategories) { List<ToolEntry> toolEntries = createToolEntries(root, _widgetService.getWidgetForCategory(category)); widgetCategory = new PaletteDrawer(category); if (CategorizationType.STACK.equals(categorization)) { widgetCategory = new PaletteStack(category, category, null); widgetCategory.addAll(toolEntries); PaletteGroup controlGroup = new PaletteGroup("controlGroup"); controlGroup.add(widgetCategory); root.add(controlGroup); } else { widgetCategory.addAll(toolEntries); root.add(widgetCategory); } } } } private List<ToolEntry> createToolEntries(final PaletteRoot root, Set<String> usedWidgetTypes) { List<ToolEntry> result = new ArrayList<ToolEntry>(); CombinedTemplateCreationEntry toolEntry; for (String typeId : usedWidgetTypes) { String contributingPluginId = _widgetService .getContributingPluginId(typeId); String iconPath = _widgetService.getIcon(typeId); ImageDescriptor icon = CustomMediaFactory.getInstance() .getImageDescriptorFromPlugin(contributingPluginId, iconPath); toolEntry = new CombinedTemplateCreationEntry(_widgetService.getName(typeId), _widgetService.getDescription(typeId), new WidgetCreationFactory(typeId, _keyAdapter), icon, icon); Class toolClass = GraphicalFeedbackContributionsService .getInstance().getGraphicalFeedbackFactory(typeId) .getCreationTool(); if (toolClass != null) { toolEntry.setToolClass(toolClass); } result.add(toolEntry); } Collections.sort(result, new Comparator<ToolEntry>() { @Override public int compare(final ToolEntry entry1, final ToolEntry entry2) { return entry1.getLabel().compareTo(entry2.getLabel()); } }); return result; } }