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();
}
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();
}
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));
}
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;
}
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;
}
Aggregations