Search in sources :

Example 1 with io.jmix.ui.component.table

use of io.jmix.ui.component.table in project jmix by jmix-framework.

the class LinkCellClickListener method accept.

@Override
public void accept(Table.Column.ClickEvent clickEvent) {
    if (!clickEvent.isText()) {
        return;
    }
    Table.Column<?> column = clickEvent.getSource();
    Table owner = column.getOwner();
    if (owner == null || owner.getFrame() == null) {
        return;
    }
    Object rowItem = clickEvent.getItem();
    MetaPropertyPath mpp = column.getMetaPropertyPathNN();
    Object item = EntityValues.getValueEx(rowItem, mpp);
    Entity entity;
    if (EntityValues.isEntity(item)) {
        entity = (Entity) item;
    } else {
        entity = (Entity) rowItem;
    }
    if (EntityValues.isSoftDeleted(entity)) {
        ScreenContext context = ComponentsHelper.getScreenContext(owner);
        context.getNotifications().create(Notifications.NotificationType.HUMANIZED).withCaption(applicationContext.getBean(Messages.class).getMessage("OpenAction.objectIsDeleted")).show();
        return;
    }
    entity = loadEntity(entity);
    MetaClass metaClass = applicationContext.getBean(Metadata.class).getClass(entity);
    String linkScreenId = loadLinkScreenId(column, metaClass);
    OpenMode openMode = loadLinkScreenOpenMode(column);
    Screen editor = applicationContext.getBean(ScreenBuilders.class).editor(metaClass.getJavaClass(), owner.getFrame().getFrameOwner()).withScreenId(linkScreenId).editEntity(entity).withOpenMode(openMode).build();
    editor.addAfterCloseListener(afterCloseEvent -> {
        // move focus to component
        owner.focus();
        if (afterCloseEvent.closedWith(StandardOutcome.COMMIT) && editor instanceof EditorScreen) {
            onEditScreenAfterCommit(mpp, rowItem, (EditorScreen) editor, owner);
        }
    });
    editor.show();
}
Also used : Entity(io.jmix.core.Entity) Table(io.jmix.ui.component.Table) Messages(io.jmix.core.Messages) EditorScreen(io.jmix.ui.screen.EditorScreen) Screen(io.jmix.ui.screen.Screen) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) Metadata(io.jmix.core.Metadata) OpenMode(io.jmix.ui.screen.OpenMode) ScreenContext(io.jmix.ui.screen.ScreenContext) MetaClass(io.jmix.core.metamodel.model.MetaClass) EditorScreen(io.jmix.ui.screen.EditorScreen) ScreenBuilders(io.jmix.ui.ScreenBuilders)

Example 2 with io.jmix.ui.component.table

use of io.jmix.ui.component.table in project jmix by jmix-framework.

the class AbstractTable method initComponent.

protected void initComponent(T component) {
    component.setMultiSelect(false);
    component.setValidationVisible(false);
    component.setShowBufferedSourceException(false);
    component.setCustomCellValueFormatter(this::formatCellValue);
    component.addValueChangeListener(this::tableSelectionChanged);
    component.setSpecificVariablesHandler(this::handleSpecificVariables);
    component.setIconProvider(this::getItemIcon);
    component.setBeforePaintListener(this::beforeComponentPaint);
    component.addColumnReorderListener(this::onColumnReorder);
    component.setSortAscendingLabel(messages.getMessage("tableSort.ascending"));
    component.setSortResetLabel(messages.getMessage("tableSort.reset"));
    component.setSortDescendingLabel(messages.getMessage("tableSort.descending"));
    component.setSelectAllLabel(messages.getMessage("tableColumnSelector.selectAll"));
    component.setDeselectAllLabel(messages.getMessage("tableColumnSelector.deselectAll"));
    int defaultRowHeaderWidth = 16;
    ThemeConstantsManager themeConstantsManager = applicationContext.getBean(ThemeConstantsManager.class, ThemeConstantsManager.class);
    ThemeConstants theme = themeConstantsManager.getConstants();
    if (theme != null) {
        defaultRowHeaderWidth = theme.getInt("jmix.ui.Table.defaultRowHeaderWidth", 16);
    }
    component.setColumnWidth(ROW_HEADER_PROPERTY_ID, defaultRowHeaderWidth);
    contextMenuPopup.setParent(component);
    component.setContextMenuPopup(contextMenuPopup);
    shortcutsDelegate.setAllowEnterShortcut(false);
    component.addShortcutListener(new ShortcutListenerDelegate("tableEnter", KeyCode.ENTER, null).withHandler((sender, target) -> {
        T tableImpl = AbstractTable.this.component;
        AppUI ui = (AppUI) tableImpl.getUI();
        if (!ui.isAccessibleForUser(tableImpl)) {
            LoggerFactory.getLogger(AbstractTable.class).debug("Ignore click attempt because Table is inaccessible for user");
            return;
        }
        if (target == this.component) {
            if (enterPressAction != null) {
                enterPressAction.actionPerform(this);
            } else {
                handleClickAction();
            }
        }
    }));
    component.addShortcutListener(new ShortcutListenerDelegate("tableSelectAll", KeyCode.A, new int[] { com.vaadin.event.ShortcutAction.ModifierKey.CTRL }).withHandler((sender, target) -> {
        if (target == this.component) {
            selectAll();
        }
    }));
    component.addItemClickListener(event -> {
        if (event.isDoubleClick() && event.getItem() != null) {
            T tableImpl = AbstractTable.this.component;
            AppUI ui = (AppUI) tableImpl.getUI();
            if (!ui.isAccessibleForUser(tableImpl)) {
                LoggerFactory.getLogger(AbstractTable.class).debug("Ignore click attempt because Table is inaccessible for user");
                return;
            }
            handleClickAction();
        }
    });
    component.setAfterUnregisterComponentHandler(this::onAfterUnregisterComponent);
    component.setBeforeRefreshRowCacheHandler(this::onBeforeRefreshRowCache);
    component.setSelectable(true);
    component.setTableFieldFactory(createFieldFactory());
    component.setColumnCollapsingAllowed(true);
    component.setColumnReorderingAllowed(true);
    setEditable(false);
    componentComposition = new TableComposition();
    componentComposition.setTable(component);
    componentComposition.setPrimaryStyleName("jmix-table-composition");
    componentComposition.addComponent(component);
    component.setCellStyleGenerator(createStyleGenerator());
    component.addColumnCollapseListener(this::handleColumnCollapsed);
    // force default sizes
    componentComposition.setHeightUndefined();
    componentComposition.setWidthUndefined();
    setClientCaching();
    initEmptyState();
}
Also used : PaginationEmptyBinder(io.jmix.ui.component.pagination.data.PaginationEmptyBinder) DataLoadingSettingsBinder(io.jmix.ui.settings.component.binder.DataLoadingSettingsBinder) ShortcutListenerDelegate(io.jmix.ui.widget.ShortcutListenerDelegate) Autowired(org.springframework.beans.factory.annotation.Autowired) StringUtils(org.apache.commons.lang3.StringUtils) FetchPlanRepository(io.jmix.core.FetchPlanRepository) KeyValueMetaClass(io.jmix.core.impl.keyvalue.KeyValueMetaClass) Action(io.jmix.ui.action.Action) Range(io.jmix.core.metamodel.model.Range) ColumnHeaderMode(com.vaadin.v7.ui.Table.ColumnHeaderMode) TablePresentations(io.jmix.ui.presentation.TablePresentations) Preconditions.checkNotNullArgument(io.jmix.core.common.util.Preconditions.checkNotNullArgument) Property(com.vaadin.v7.data.Property) ConverterUtil(com.vaadin.v7.data.util.converter.ConverterUtil) Subscription(io.jmix.core.common.event.Subscription) EntityPreconditions(io.jmix.core.entity.EntityPreconditions) Datatype(io.jmix.core.metamodel.datatype.Datatype) InvocationTargetException(java.lang.reflect.InvocationTargetException) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) IconResolver(io.jmix.ui.icon.IconResolver) AggregatableDelegate(io.jmix.ui.component.data.aggregation.impl.AggregatableDelegate) MessageTools(io.jmix.core.MessageTools) BindingState(io.jmix.ui.component.data.BindingState) io.jmix.ui.component(io.jmix.ui.component) java.util(java.util) UiComponentProperties(io.jmix.ui.UiComponentProperties) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) FrameOwner(io.jmix.ui.screen.FrameOwner) BooleanUtils(org.apache.commons.lang3.BooleanUtils) Converter(com.vaadin.v7.data.util.converter.Converter) TableSettings(io.jmix.ui.settings.component.TableSettings) SettingsWrapper(io.jmix.ui.settings.component.SettingsWrapper) Strings(com.google.common.base.Strings) InstanceContainer(io.jmix.ui.model.InstanceContainer) Resource(com.vaadin.server.Resource) DatatypeRegistry(io.jmix.core.metamodel.datatype.DatatypeRegistry) BaseAction(io.jmix.ui.action.BaseAction) Nullable(javax.annotation.Nullable) Actions(io.jmix.ui.Actions) CollectionContainer(io.jmix.ui.model.CollectionContainer) FetchPlan(io.jmix.core.FetchPlan) JmixEnhancedTable(io.jmix.ui.widget.JmixEnhancedTable) TablePresentationsLayout(io.jmix.ui.component.presentation.TablePresentationsLayout) UiControllerUtils(io.jmix.ui.screen.UiControllerUtils) ValueConversionException(io.jmix.ui.component.data.ValueConversionException) Entity(io.jmix.core.Entity) com.vaadin.ui(com.vaadin.ui) MetaClass(io.jmix.core.metamodel.model.MetaClass) ComponentSettingsBinder(io.jmix.ui.settings.component.binder.ComponentSettingsBinder) Preconditions(io.jmix.core.common.util.Preconditions) Formatter(io.jmix.ui.component.formatter.Formatter) BiFunction(java.util.function.BiFunction) LoggerFactory(org.slf4j.LoggerFactory) InstallTargetHandler(io.jmix.ui.screen.InstallTargetHandler) EventHub(io.jmix.core.common.event.EventHub) EntityValues(io.jmix.core.entity.EntityValues) Messages(io.jmix.core.Messages) ParseException(java.text.ParseException) MetadataTools(io.jmix.core.MetadataTools) Method(java.lang.reflect.Method) EmptyDataUnit(io.jmix.ui.component.data.meta.EmptyDataUnit) JmixValueChangeEvent(io.jmix.ui.widget.compatibility.JmixValueChangeEvent) DataUnit(io.jmix.ui.component.data.DataUnit) ComponentSettings(io.jmix.ui.settings.component.ComponentSettings) AccessManager(io.jmix.core.AccessManager) LookupSelectionChangeNotifier(io.jmix.ui.component.LookupComponent.LookupSelectionChangeNotifier) EntityTableItems(io.jmix.ui.component.data.meta.EntityTableItems) UiEntityContext(io.jmix.ui.accesscontext.UiEntityContext) PaginationDataUnitBinder(io.jmix.ui.component.pagination.data.PaginationDataUnitBinder) Collectors(java.util.stream.Collectors) EntityDataUnit(io.jmix.ui.component.data.meta.EntityDataUnit) AbstractComponent(com.vaadin.ui.AbstractComponent) JmixButton(io.jmix.ui.widget.JmixButton) AppUI(io.jmix.ui.AppUI) AggregationContainer(io.jmix.ui.widget.data.AggregationContainer) HasValueSource(io.jmix.ui.component.data.HasValueSource) AbstractSelect(com.vaadin.v7.ui.AbstractSelect) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) Aggregations(io.jmix.ui.component.data.aggregation.Aggregations) ContainerDataUnit(io.jmix.ui.component.data.meta.ContainerDataUnit) AggregationInputValueChangeContext(io.jmix.ui.widget.JmixEnhancedTable.AggregationInputValueChangeContext) SettingsHelper(io.jmix.ui.settings.SettingsHelper) CssLayout(com.vaadin.ui.CssLayout) io.jmix.ui.component.table(io.jmix.ui.component.table) Function(java.util.function.Function) InitializingBean(org.springframework.beans.factory.InitializingBean) Notifications(io.jmix.ui.Notifications) LOOKUP_ENTER_PRESSED_ACTION_ID(io.jmix.ui.screen.LookupScreen.LOOKUP_ENTER_PRESSED_ACTION_ID) Aggregation(io.jmix.ui.component.data.aggregation.Aggregation) KeyCode(com.vaadin.event.ShortcutAction.KeyCode) UiEntityAttributeContext(io.jmix.ui.accesscontext.UiEntityAttributeContext) CurrentAuthentication(io.jmix.core.security.CurrentAuthentication) ScreenContext(io.jmix.ui.screen.ScreenContext) Logger(org.slf4j.Logger) TableItems(io.jmix.ui.component.data.TableItems) ThemeConstants(io.jmix.ui.theme.ThemeConstants) LOOKUP_ITEM_CLICK_ACTION_ID(io.jmix.ui.screen.LookupScreen.LOOKUP_ITEM_CLICK_ACTION_ID) Metadata(io.jmix.core.Metadata) ComponentSettingsRegistry(io.jmix.ui.settings.ComponentSettingsRegistry) UserSettingsTools(io.jmix.ui.settings.UserSettingsTools) Sizeable(com.vaadin.server.Sizeable) TablePresentation(io.jmix.ui.presentation.model.TablePresentation) SettingsWrapperImpl(io.jmix.ui.settings.component.SettingsWrapperImpl) Consumer(java.util.function.Consumer) VaadinSession(com.vaadin.server.VaadinSession) EntityStates(io.jmix.core.EntityStates) Element(org.dom4j.Element) DataComponents(io.jmix.ui.model.DataComponents) Component(com.vaadin.ui.Component) PaginationDataBinder(io.jmix.ui.component.pagination.data.PaginationDataBinder) ThemeConstants(io.jmix.ui.theme.ThemeConstants) ThemeConstantsManager(io.jmix.ui.theme.ThemeConstantsManager) ShortcutListenerDelegate(io.jmix.ui.widget.ShortcutListenerDelegate) AppUI(io.jmix.ui.AppUI)

Example 3 with io.jmix.ui.component.table

use of io.jmix.ui.component.table in project jmix by jmix-framework.

the class InspectorTableBuilder method addMetaPropertyToTable.

protected void addMetaPropertyToTable(Table table, MetaProperty metaProperty) {
    MetaPropertyPath metaPropertyPath = metaClass.getPropertyPath(metaProperty.getName());
    if (metaPropertyPath == null) {
        return;
    }
    Table.Column column = table.addColumn(metaPropertyPath);
    if (metaProperty.getJavaType().equals(String.class) && maxTextLength > 0) {
        column.setMaxTextLength(maxTextLength);
    }
    column.setCaption(getPropertyCaption(metaClass, metaProperty));
}
Also used : Table(io.jmix.ui.component.Table) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

Example 4 with io.jmix.ui.component.table

use of io.jmix.ui.component.table in project jmix by jmix-framework.

the class AbstractTableSettingsBinder method getSettings.

@Override
public TableSettings getSettings(Table table) {
    TableSettings tableSettings = createTableSettings();
    tableSettings.setId(table.getId());
    tableSettings.setTextSelection(table.isTextSelectionEnabled());
    // get column settings
    tableSettings.setColumns(getTableColumnSettings(table));
    // get sort
    Table.SortInfo sortInfo = table.getSortInfo();
    if (sortInfo != null) {
        MetaPropertyPath sortProperty = (MetaPropertyPath) sortInfo.getPropertyId();
        if (sortProperty != null) {
            tableSettings.setSortProperty(sortProperty.toString());
            tableSettings.setSortAscending(sortInfo.getAscending());
        }
    }
    return tableSettings;
}
Also used : TableSettings(io.jmix.ui.settings.component.TableSettings) JmixEnhancedTable(io.jmix.ui.widget.JmixEnhancedTable) Table(io.jmix.ui.component.Table) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

Example 5 with io.jmix.ui.component.table

use of io.jmix.ui.component.table in project jmix by jmix-framework.

the class AbstractTableSettingsBinder method saveSettings.

@Override
public boolean saveSettings(Table table, SettingsWrapper wrapper) {
    TableSettings tableSettings = wrapper.getSettings();
    boolean settingsChanged = false;
    Boolean textSelection = tableSettings.getTextSelection();
    if (textSelection == null || BooleanUtils.toBoolean(textSelection) != table.isTextSelectionEnabled()) {
        tableSettings.setTextSelection(table.isTextSelectionEnabled());
        settingsChanged = true;
    }
    String settingsSortProperty = null;
    Boolean settingsSortAscending = null;
    if (tableSettings.getSortProperty() != null) {
        settingsSortProperty = tableSettings.getSortProperty();
        settingsSortAscending = tableSettings.getSortAscending();
    }
    boolean commonSettingsChanged = isCommonTableSettingsChanged(tableSettings, table);
    boolean sortChanged = isSettingsSortPropertyChanged(settingsSortProperty, settingsSortAscending, table.getSortInfo());
    if (commonSettingsChanged || sortChanged) {
        // save column settings
        tableSettings.setColumns(getTableColumnSettings(table));
        Table.SortInfo sortInfo = table.getSortInfo();
        if (sortInfo == null) {
            tableSettings.setSortProperty(null);
            tableSettings.setSortAscending(null);
        } else {
            MetaPropertyPath mpp = (MetaPropertyPath) sortInfo.getPropertyId();
            tableSettings.setSortProperty(mpp.toString());
            tableSettings.setSortAscending(sortInfo.getAscending());
        }
        settingsChanged = true;
    }
    return settingsChanged;
}
Also used : TableSettings(io.jmix.ui.settings.component.TableSettings) JmixEnhancedTable(io.jmix.ui.widget.JmixEnhancedTable) Table(io.jmix.ui.component.Table) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

Aggregations

Table (io.jmix.ui.component.Table)16 MetaPropertyPath (io.jmix.core.metamodel.model.MetaPropertyPath)13 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)5 Element (org.dom4j.Element)5 MetaClass (io.jmix.core.metamodel.model.MetaClass)4 JmixEnhancedTable (io.jmix.ui.widget.JmixEnhancedTable)4 Entity (io.jmix.core.Entity)3 GuiDevelopmentException (io.jmix.ui.GuiDevelopmentException)3 io.jmix.ui.component (io.jmix.ui.component)3 TableSettings (io.jmix.ui.settings.component.TableSettings)3 Messages (io.jmix.core.Messages)2 Metadata (io.jmix.core.Metadata)2 Action (io.jmix.ui.action.Action)2 BaseAction (io.jmix.ui.action.BaseAction)2 ScreenContext (io.jmix.ui.screen.ScreenContext)2 Strings (com.google.common.base.Strings)1 ItemTrackingAction (com.haulmont.cuba.gui.components.actions.ItemTrackingAction)1 LegacyFrame (com.haulmont.cuba.gui.screen.compatibility.LegacyFrame)1 KeyCode (com.vaadin.event.ShortcutAction.KeyCode)1 Resource (com.vaadin.server.Resource)1