/***************************************************************************** * Copyright (c) 2011 CEA LIST. * * * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.menu.dialogs; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; import org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPartService; import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.papyrus.uml.diagram.common.dialogs.AbstractCheckedTreeColumnViewerSelectionDialog; import org.eclipse.papyrus.uml.diagram.common.editparts.ILabelRoleProvider; import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil; import org.eclipse.papyrus.uml.diagram.menu.Activator; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; /** * This class provides a Dialog with 2 columns. In the first column, we have a TreeViewer and in the other one, you have a text. * * * */ public class ShowHideLabelSelectionDialog extends AbstractCheckedTreeColumnViewerSelectionDialog { /** * The diagram editpart */ private DiagramEditPart diagramEP = null; /** * * Constructor. * * @param parent * the shell parent * @param labelProvider * the label provider (used only to get the name of the root elements * @param contentProvider * the content provider * @param diagramEP * the current diagram EditPart */ public ShowHideLabelSelectionDialog(Shell parent, ILabelProvider labelProvider, ITreeContentProvider contentProvider) { super(parent, labelProvider, contentProvider, SWT.CENTER | SWT.BORDER | SWT.FULL_SELECTION, 2); init(); } protected void init() { setColumnTitles(new String[]{ "Label Role", "Displayed Text" }); setColumnWidths(new int[]{ 300, 300 }); setColumnCellLabelProvider(new CellLabelProvider[]{ new RoleLabelProvider(), new TextLabelProvider() }); } /** * * @see org.eclipse.ui.dialogs.CheckedTreeSelectionDialog#setInput(java.lang.Object) * * @param input */ @Override public void setInput(Object input) { super.setInput(input); if(input instanceof List<?> && !((List<?>)input).isEmpty()) { Object obj = ((List<?>)input).get(0); if(obj instanceof EditPart) { diagramEP = DiagramEditPartsUtil.getDiagramEditPart((EditPart)obj); } } Assert.isNotNull(diagramEP); } /** * * @see org.eclipse.papyrus.uml.diagram.common.dialogs.AbstractCheckedTreeColumnViewerSelectionDialog#getEditingSupport(int) * * @param columnIndex * @return */ @Override protected EditingSupport getEditingSupport(int columnIndex) { return null; } /** * This provider is used by the first column * * * */ public class RoleLabelProvider extends CellLabelProvider implements ILabelProvider { /** * * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) * * @param element * @return */ public Image getImage(Object element) { if(element instanceof View) { EditPart dummyEP = EditPartService.getInstance().createGraphicEditPart((View)element); String iconPath = ""; if(dummyEP instanceof ILabelRoleProvider) { iconPath = ((ILabelRoleProvider)dummyEP).getIconPathRole(); if(iconPath != null) { if(iconPath.indexOf("platform") == 0) { //the path looks like "platform:/plugin/org.eclipse.uml2.uml.edit/icons/full/obj16/Package.gif" try { return ImageDescriptor.createFromURL(new URL(iconPath)).createImage(); } catch (MalformedURLException e) { Activator.log.error("I can't find the following image " + iconPath, e); return null; } } } } } return null; } /** * * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) * * @param element * @return */ public String getText(Object element) { if(element instanceof View) { EditPart dummyEP = EditPartService.getInstance().createGraphicEditPart((View)element); if(dummyEP instanceof ILabelRoleProvider) { return ((ILabelRoleProvider)dummyEP).getLabelRole(); } } return ""; } /** * * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell) * * @param cell */ @Override public void update(ViewerCell cell) { cell.setImage(getImage(cell.getElement())); cell.setText(getText(cell.getElement())); } } /** * This provider is used by the 2nd column * * * */ class TextLabelProvider extends CellLabelProvider implements ILabelProvider { /** * * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) * * @param element * @return */ public Image getImage(Object element) { return null; } /** * * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) * * @param element * @return */ public String getText(Object element) { EditPart dummyEP = DiagramEditPartsUtil.getEditPartFromView((View)element, diagramEP); String text = "[No Text To Display]"; if(dummyEP instanceof GraphicalEditPart) { IFigure figure = ((GraphicalEditPart)dummyEP).getFigure(); if(figure instanceof WrappingLabel) { String str = ((WrappingLabel)figure).getText(); if(str != null && str.length() != 0) { text = str; } } } return text; } /** * * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell) * * @param cell */ @Override public void update(ViewerCell cell) { cell.setImage(getImage(cell.getElement())); cell.setText(getText(cell.getElement())); } } }