Open different screens after double click basing on the selected column

Hi Olga,
I want to open different screens after double click basing on the selected column.
So I need to use the “setItemClickAction” method but I want to know the current selected column.
Otherwise I want to call setClickListener o something else after double click.
Have you a solution for this?

Thanks in advance

Hi,

The Table doesn’t provide the double-click listener on individual table cells. I can suggest using generated column with a dedicated edit button, e.g.:

public class SimpleTableSample extends ScreenFragment {

    @Inject
    private Table<Order> ordersTable;

    @Inject
    protected UiComponents uiComponents;
    @Inject
    protected MetadataTools metadataTools;
    @Inject
    protected ScreenBuilders screenBuilders;

    @Subscribe
    protected void onInit(InitEvent event) {
        ordersTable.addGeneratedColumn("customer", new Table.ColumnGenerator<Order>() {

            @Nullable
            @Override
            public Component generateCell(Order order) {
                Customer customer = order.getCustomer();

                HBoxLayout layout = uiComponents.create(HBoxLayout.class);
                layout.setSpacing(true);

                Label<String> nameLabel = uiComponents.create(Label.TYPE_DEFAULT);
                nameLabel.setValue(metadataTools.getInstanceName(customer));
                layout.add(nameLabel);

                LinkButton editBtn = uiComponents.create(LinkButton.class);
                editBtn.setIconFromSet(CubaIcon.EDIT);
                editBtn.addClickListener(clickEvent -> {
                    screenBuilders.editor(Customer.class, SimpleTableSample.this)
                            .editEntity(customer)
                            .show();
                });

                layout.add(editBtn);

                return layout;
            }
        });
    }
}

Screenshot 2020-11-30 at 13.45.23

Moreover, this approach can provide a more intuitive user experience.

Regards,
Gleb