Unable to draw composite in OwnerDrawLabelProvider

I have a widget TableViewerwith one column, where each row in the contents of the table is Compositewith the number of child widgets. The column has a label provider, which is a subclass OwnerDrawLabelProvider. The label provider is supposed to display children Compositein the table cell, but when called paint(), nothing is displayed.

I found some examples of how to draw simple or stylized text elements or primitives using GCin the object Eventpassed in, but nothing draws the contents Compositein the cell area.

Is this possible, and if so, what am I doing wrong?

Here is the code to create the table:

    viewer = new TableViewer(container, SWT.NONE);
    final Table table = viewer.getTable();

    TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.LEFT);
    TableColumn tableColumn = viewerColumn.getColumn();
    tableColumn.setText(Messages.getString("column.header.name"));
    tableColumn.setResizable(true);
    tableColumn.setMoveable(false);
    tableColumn.setWidth(500);
    viewerColumn.setLabelProvider(new CompositeLabelProvider());

measure paint , CompositeLabelProvider:

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

        CompositeTableItem row = rowMap.get(element);
        Composite contents = row.getContents(viewer.getTable().getParent());
        Point size = contents.computeSize(SWT.DEFAULT, SWT.DEFAULT);
        event.setBounds(new Rectangle(event.x, event.y, size.x, size.y));
    }

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

        CompositeTableItem row = rowMap.get(element);
        Composite contents = row.getContents(viewer.getTable().getParent());

        contents.redraw(event.getBounds().x, event.getBounds().y, event.getBounds().width, event.getBounds().height, true);

        contents.update();
    }
+3
1

, OwnerDrawLabelProvider , GC. SWT- , , , TableEditor #setEditor (Control), , .

+2

Source: https://habr.com/ru/post/1733717/


All Articles