Manav Garg
Manav Garg

Reputation: 522

Eclipse plugin - ColumnLabelProvider display only image

So I am developing an Eclipse plug-in and using ColumnLabelProvider to provide label for the columns of my tree viewer.

However, in one of the columns, I only intend to display an image and no text. However, in the final display, Eclipse reserves blank space for the text element even if I return a null.

Is there any way to make it display only image and in the full space provided?

Here is the code snippet:

column4.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            return null;    
        }

        @Override
        public Image getImage(Object element) {
            /* Code to Display an image follows */
            ..... 

        }
    });

Upvotes: 1

Views: 114

Answers (1)

greg-449
greg-449

Reputation: 111142

ColumnLabelProvider will always leave space for the text.

You can use a class derived from OwnerDrawLabelProvider to draw the column yourself.

Something like:

public abstract class CentredImageCellLabelProvider extends OwnerDrawLabelProvider
{
  protected CentredImageCellLabelProvider()
  {
  }

  @Override
  protected void measure(Event event, Object element)
  {
  }

  @Override
  protected void erase(final Event event, final Object element)
  {
    // Don't call super.erase() to suppress non-standard selection draw
  }

  @Override
  protected void paint(final Event event, final Object element)
  {
    TableItem item = (TableItem)event.item;

    Rectangle itemBounds = item.getBounds(event.index);

    GC gc = event.gc;

    Image image = getImage(element);

    Rectangle imageBounds = image.getBounds();

    int x = event.x + Math.max(0, (itemBounds.width - imageBounds.width) / 2);
    int y = event.y + Math.max(0, (itemBounds.height - imageBounds.height) / 2);

    gc.drawImage(image, x, y);
  }

  protected abstract Image getImage(Object element);
}

Upvotes: 2

Related Questions