/******************************************************************************* | |
* Copyright (c) 2011, 2013 Formal Mind GmbH and University of Dusseldorf. | |
* 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: | |
* Michael Jastram - initial API and implementation | |
* Lukas Ladenberger - ProR GUI | |
******************************************************************************/ | |
package org.eclipse.rmf.reqif10.pror.editor.propertiesview; | |
import org.agilemore.agilegrid.AgileGrid; | |
import org.agilemore.agilegrid.DefaultCellRendererProvider; | |
import org.agilemore.agilegrid.ICellRenderer; | |
import org.agilemore.agilegrid.SWTResourceManager; | |
import org.agilemore.agilegrid.renderers.TextCellRenderer; | |
import org.eclipse.emf.common.notify.AdapterFactory; | |
import org.eclipse.emf.edit.provider.IItemLabelProvider; | |
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; | |
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; | |
import org.eclipse.rmf.reqif10.pror.editor.propertiesview.ProrPropertyContentProvider.Category; | |
import org.eclipse.rmf.reqif10.pror.editor.propertiesview.ProrPropertyContentProvider.Descriptor; | |
import org.eclipse.rmf.reqif10.pror.editor.propertiesview.ProrPropertyContentProvider.PropertyRow; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.graphics.GC; | |
import org.eclipse.swt.graphics.Image; | |
/** | |
* Serves the correct {@link ICellRenderer} for the Properties View. There are | |
* fundamentally three cases: | |
* <ul> | |
* <li>Category - A renderer that spans two cells and is bold with gray | |
* background | |
* <li>Label - Standard Text | |
* <li>Value - Delegates to the proper ProR renderer if it is a ProR Property, | |
* otherwise {@link SimpleTextCellRenderer}. | |
* <ul> | |
*/ | |
public class ProrPropertyCellRendererProvider extends DefaultCellRendererProvider { | |
// The default cell renderer for attribute/value rows | |
private final ProrPropertyCellRenderer attributeCellRenderer; | |
// The cell renderer for category rows | |
private final TextCellRenderer categoryCellRenderer; | |
// Plain renderer to show text | |
private final SimpleTextCellRenderer defaultAttributeRenderer; | |
private ProrPropertyContentProvider contentProvider; | |
public ProrPropertyCellRendererProvider(AgileGrid agileGrid, | |
AdapterFactory adapterFactory, | |
ProrPropertyContentProvider contentProvider) { | |
super(agileGrid); | |
this.contentProvider = contentProvider; | |
this.attributeCellRenderer = new ProrPropertyCellRenderer(agileGrid, | |
adapterFactory); | |
this.categoryCellRenderer = new TextCellRenderer(agileGrid, SWT.BOLD); | |
this.categoryCellRenderer.setDefaultBackground(SWTResourceManager | |
.getColor(SWT.COLOR_WIDGET_BACKGROUND)); | |
this.defaultAttributeRenderer = new SimpleTextCellRenderer(agileGrid); | |
} | |
@Override | |
public ICellRenderer getCellRenderer(int row, int col) { | |
PropertyRow propertyRow = (PropertyRow) contentProvider | |
.getRowContent(row); | |
if (propertyRow instanceof Category) { | |
return this.categoryCellRenderer; | |
} else if (propertyRow instanceof Descriptor) { | |
Descriptor descriptor = (Descriptor) propertyRow; | |
if (col == 0) { | |
return super.getCellRenderer(row, col); | |
} else if (descriptor.isRMFSpecific()) { | |
return attributeCellRenderer; | |
} else { | |
return defaultAttributeRenderer; | |
} | |
} else { | |
throw new IllegalArgumentException("Unexpected: " + propertyRow); | |
} | |
} | |
/** | |
* A simple TextCellRenderer that is used if no other renderer is available. | |
* It only renders if the content is a {@link Descriptor}. | |
*/ | |
private class SimpleTextCellRenderer extends TextCellRenderer { | |
public SimpleTextCellRenderer(AgileGrid agileGrid) { | |
super(agileGrid); | |
} | |
@Override | |
protected void doDrawCellContent(GC gc, | |
org.eclipse.swt.graphics.Rectangle rect, int row, int col) { | |
PropertyRow propertyRow = (PropertyRow) contentProvider | |
.getRowContent(row); | |
if (!(propertyRow instanceof Descriptor)) | |
return; | |
IItemPropertyDescriptor propertyDescriptor = ((Descriptor) propertyRow) | |
.getItemPropertyDescriptor(); | |
Object propertyValue = propertyDescriptor | |
.getPropertyValue(contentProvider.getElement()); | |
IItemLabelProvider labelProvider = propertyDescriptor | |
.getLabelProvider(propertyValue); | |
Image image = ExtendedImageRegistry.getInstance().getImage( | |
labelProvider.getImage(propertyValue)); | |
drawTextImage(gc, " " + propertyRow.toString(), alignment, image, | |
alignment, rect.x + 2, rect.y + 1, rect.width - 1, | |
rect.height - 1); | |
} | |
} | |
} |