Class AbstractDialogCellEditor
- All Implemented Interfaces:
ICellEditor,ICellEditDialog
- Direct Known Subclasses:
FileDialogCellEditor
ICellEditor that is also a
ICellEditDialog. By creating a ICellEditor based on this
abstract implementation, you are able to create an editor that wraps a SWT or
JFace dialog. As SWT and JFace dialogs does not extend the same base classes,
the local instance for the wrapped dialog is of type object in here. In the
concrete implementation the
getDialogInstance() should return the
concrete dialog type that is wrapped.
By using this implementation, the CellEditDialogFactory will return
the instance of this editor, after it was activated previously.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected IConfigRegistryTheIConfigRegistrycontaining the configuration of the current NatTable instance.protected IEditErrorHandlerThe error handler that will be used to show conversion errors.protected IDataValidatorTheIDataValidatorthat should be used to validate the input value prior committing.protected ObjectTheDialogthat should be used as a cell editor.protected IDisplayConverterTheIDisplayConverterthat should be used to convert the input value to the canonical value and vice versa.Map that contains custom configurations for thisCellEditDialog.protected DialogEditHandlerTheICellEditHandlerthat will be used on commit.protected ILayerCellThe cell whose editor should be activated.protected org.eclipse.swt.widgets.CompositeThe parent Composite, needed for the creation of the dialog.protected IEditErrorHandlerThe error handler that will be used to show validation errors.Fields inherited from interface org.eclipse.nebula.widgets.nattable.edit.gui.ICellEditDialog
DIALOG_MESSAGE, DIALOG_SHELL_ICON, DIALOG_SHELL_LOCATION, DIALOG_SHELL_RESIZABLE, DIALOG_SHELL_SIZE, DIALOG_SHELL_TITLE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanThis method is intended to be used byIMouseEventMatcherimplementations that need to check for the editor and the click position to determine whether an editor should be activated or not.org.eclipse.swt.widgets.ControlactivateCell(org.eclipse.swt.widgets.Composite parent, Object originalCanonicalValue, EditModeEnum editMode, ICellEditHandler editHandler, ILayerCell cell, IConfigRegistry configRegistry) This method will be called by the framework to activate this cell editor.booleanactivateOnTraversal(IConfigRegistry configRegistry, List<String> configLabels) This method is asked on tab traversal whether thisICellEditorshould be automatically activated or not.voidThis method is intended to add listeners to the wrapped editor control to add context related behavior.org.eclipse.swt.graphics.RectanglecalculateControlBounds(org.eclipse.swt.graphics.Rectangle cellBounds) This method is used to calculate the bounds of the edit control when opened inline.calculateValue(Object currentValue, Object processValue) In caseICellEditDialog.getEditType()returns an edit type for processing values, this method should implemented to do that transformation.abstract voidclose()Close/dispose the containedControlbooleancommit(SelectionLayer.MoveDirectionEnum direction) Commits the current value of this editor.booleancommit(SelectionLayer.MoveDirectionEnum direction, boolean closeAfterCommit) Commits the current value of this editor.booleancommit(SelectionLayer.MoveDirectionEnum direction, boolean closeAfterCommit, boolean skipValidation) Commits the current value of this editor.abstract ObjectWill create the dialog instance that should be wrapped by thisAbstractDialogCellEditor.org.eclipse.swt.widgets.ControlcreateEditorControl(org.eclipse.swt.widgets.Composite parent) Creates the editor control that is wrapped by this ICellEditor.Converts the current value in this editor using the configuredIDisplayConverter.getCanonicalValue(IEditErrorHandler conversionErrorHandler) Converts the current value in this editor using the configuredIDisplayConverter.intintabstract Objectorg.eclipse.swt.widgets.Controlabstract ObjectReturns the current value in this editor prior to conversion.intintabstract booleanisClosed()abstract intopen()Opens this dialog, creating it first if it has not yet been created.booleanDetermines behavior after committing the value of this editor in combination with selection movement.booleanopenInline(IConfigRegistry configRegistry, List<String> configLabels) Determines whether the editor should be opened inline or using a dialog.booleanThis is a very special configuration to tell whether an ICellEditor should open a multi edit dialog for multi editing or not.voidThis method is intended to remove listeners from the wrapped editor control that was added byICellEditor.addEditorControlListeners()before to add context related behavior.voidsetCanonicalValue(Object canonicalValue) Sets the given canonical value to the wrapped editor control.voidsetDialogSettings(Map<String, Object> editDialogSettings) Allows to customize the appearance of the dialog.abstract voidsetEditorValue(Object value) Sets the given value to editor control.booleansupportMultiEdit(IConfigRegistry configRegistry, List<String> configLabels) Determines whether this editor supports multi edit behavior or not.booleanvalidateCanonicalValue(Object canonicalValue) Validates the given value using the configuredIDataValidator.booleanvalidateCanonicalValue(Object canonicalValue, IEditErrorHandler validationErrorHandler) Validates the current value in this editor using the configuredIDataValidator.
-
Field Details
-
parent
protected org.eclipse.swt.widgets.Composite parentThe parent Composite, needed for the creation of the dialog. -
dialog
TheDialogthat should be used as a cell editor. -
layerCell
The cell whose editor should be activated. -
editHandler
TheICellEditHandlerthat will be used on commit. -
displayConverter
TheIDisplayConverterthat should be used to convert the input value to the canonical value and vice versa. -
dataValidator
TheIDataValidatorthat should be used to validate the input value prior committing. -
conversionEditErrorHandler
The error handler that will be used to show conversion errors. -
validationEditErrorHandler
The error handler that will be used to show validation errors. -
configRegistry
TheIConfigRegistrycontaining the configuration of the current NatTable instance. This is necessary because the editors in the current architecture are not aware of the NatTable instance they are running in. -
editDialogSettings
Map that contains custom configurations for thisCellEditDialog. We do not use theIDialogSettingsprovided by JFace, because they are used to store and load the settings in XML rather than overriding the behaviour.
-
-
Constructor Details
-
AbstractDialogCellEditor
public AbstractDialogCellEditor()
-
-
Method Details
-
getEditType
- Specified by:
getEditTypein interfaceICellEditDialog- Returns:
- The edit type that has impact on how the set value will be
updated to the data model. By default
EditTypeEnum.SETis returned, which will simply set the committed value to the data model. Every other edit type will do some calculation based on the committed value and the current value in the data model.
-
calculateValue
Description copied from interface:ICellEditDialogIn caseICellEditDialog.getEditType()returns an edit type for processing values, this method should implemented to do that transformation.- Specified by:
calculateValuein interfaceICellEditDialog- Parameters:
currentValue- The current value for the cell before data model updateprocessValue- The value committed to the editor that should be used for calculation on the current value.- Returns:
- The value that should be used to update the data model.
-
open
public abstract int open()Description copied from interface:ICellEditDialogOpens this dialog, creating it first if it has not yet been created.Specified in here for convenience so we only need to check against this interface for a dialog.
- Specified by:
openin interfaceICellEditDialog- Returns:
- the return code
-
activateCell
public org.eclipse.swt.widgets.Control activateCell(org.eclipse.swt.widgets.Composite parent, Object originalCanonicalValue, EditModeEnum editMode, ICellEditHandler editHandler, ILayerCell cell, IConfigRegistry configRegistry) Description copied from interface:ICellEditorThis method will be called by the framework to activate this cell editor. It initializes the the values needed for further processing of the editor and will add listeners for general behavior of the editor control.- Specified by:
activateCellin interfaceICellEditor- Parameters:
parent- The parent Composite, needed for the creation of the editor control.originalCanonicalValue- The value that should be put to the activated editor control.editMode- TheEditModeEnumwhich is used to activate special behavior and styling. This is needed because activating an editor inline will have different behavior (e.g. moving the selection after commit) and styling than rendering the editor on a subdialog.editHandler- TheICellEditHandlerthat will be used on commit.cell- The cell whose corresponding editor should be activated.configRegistry- TheIConfigRegistrycontaining the configuration of the current NatTable instance. This is necessary because the editors in the current architecture are not aware of the NatTable instance they are running in.- Returns:
- The SWT
Controlto be used for capturing the new cell value.
-
createDialogInstance
Will create the dialog instance that should be wrapped by thisAbstractDialogCellEditor. Note that you always need to create and return a new instance because on commit or close the dialog will be closed, which disposes the shell of the dialog. Therefore the instance will not be usable after commit/close.- Returns:
- The dialog instance that should be wrapped by this
AbstractDialogCellEditor
-
getDialogInstance
- Returns:
- The current dialog instance that is wrapped by this
AbstractDialogCellEditor
-
getEditorValue
Description copied from interface:ICellEditorReturns the current value in this editor prior to conversion. For a text editor that is used to edit integer values, this would mean it returns the text value instead of the converted integer value. This method is only intended to be used internally .- Specified by:
getEditorValuein interfaceICellEditor- Returns:
- The current value in this editor prior to conversion.
-
setEditorValue
Description copied from interface:ICellEditorSets the given value to editor control. This method is used to put the display values to the wrapped editor.- Specified by:
setEditorValuein interfaceICellEditor- Parameters:
value- The display value to set to the wrapped editor control.
-
getCanonicalValue
Description copied from interface:ICellEditorConverts the current value in this editor using the configuredIDisplayConverter. If there is noIDisplayConverterregistered for this editor, the value itself will be returned.- Specified by:
getCanonicalValuein interfaceICellEditor- Returns:
- The canonical value after converting the current value or the
value itself if no
IDisplayConverteris configured. - See Also:
-
getCanonicalValue
Description copied from interface:ICellEditorConverts the current value in this editor using the configuredIDisplayConverter. If there is noIDisplayConverterregistered for this editor, the value itself will be returned. Will use the specifiedIEditErrorHandlerfor handling conversion errors.- Specified by:
getCanonicalValuein interfaceICellEditor- Parameters:
conversionErrorHandler- The error handler that will be activated in case of conversion errors.- Returns:
- The canonical value after converting the current value or the
value itself if no
IDisplayConverteris configured. - See Also:
-
setCanonicalValue
Description copied from interface:ICellEditorSets the given canonical value to the wrapped editor control. Prior to setting the value it needs to be converted to the display value, using the configuredIDisplayConverter.- Specified by:
setCanonicalValuein interfaceICellEditor- Parameters:
canonicalValue- The canonical value to be set to the wrapped editor control.
-
validateCanonicalValue
Description copied from interface:ICellEditorValidates the given value using the configuredIDataValidator. This method should be called with the value converted before by usingICellEditor.getCanonicalValue().- Specified by:
validateCanonicalValuein interfaceICellEditor- Parameters:
canonicalValue- The canonical value to validate.- Returns:
trueif the current value in this editor is valid or noIDataValidatoris registered,falseif the value is not valid.
-
validateCanonicalValue
public boolean validateCanonicalValue(Object canonicalValue, IEditErrorHandler validationErrorHandler) Description copied from interface:ICellEditorValidates the current value in this editor using the configuredIDataValidator. Validates the given value using the configuredIDataValidator. This method should be called with the value converted before by usingICellEditor.getCanonicalValue(). Will use the specifiedIEditErrorHandlerfor handling validation errors.- Specified by:
validateCanonicalValuein interfaceICellEditor- Parameters:
canonicalValue- The canonical value to validate.validationErrorHandler- The error handler that will be activated in case of validation errors.- Returns:
trueif the current value in this editor is valid or noIDataValidatoris registered,falseif the value is not valid.
-
commit
Description copied from interface:ICellEditorCommits the current value of this editor. Will first try to convert and validate the current value, and if that succeeds and the value can be committed to the data model, the editor will be closed afterwards.- Specified by:
commitin interfaceICellEditor- Parameters:
direction- The direction the selection within the NatTable should move after commit has finished.- Returns:
trueif the commit operation succeeded,falseif the current value could not be committed. A value might not be committed for example if the conversion or the validation failed.
-
commit
Description copied from interface:ICellEditorCommits the current value of this editor. Will first try to convert the current value. Then it is checked if the validation should be executed which can be specified via parameter. If that succeeds and the value can be committed to the data model, the editor will be closed afterwards.- Specified by:
commitin interfaceICellEditor- Parameters:
direction- The direction the selection within the NatTable should move after commit has finished.closeAfterCommit- flag to tell whether this editor needs to closed after the commit or if it should stay open.- Returns:
trueif the commit operation succeeded,falseif the current value could not be committed. A value might not be committed for example if the conversion or the validation failed.
-
commit
public boolean commit(SelectionLayer.MoveDirectionEnum direction, boolean closeAfterCommit, boolean skipValidation) Description copied from interface:ICellEditorCommits the current value of this editor.- Specified by:
commitin interfaceICellEditor- Parameters:
direction- The direction the selection within the NatTable should move after commit has finished.closeAfterCommit- flag to tell whether this editor needs to closed after the commit or if it should stay open.skipValidation- Flag to specify whether the current value in this editor should be validated or not.- Returns:
trueif the commit operation succeeded,falseif the current value could not be committed. A value might not be committed for example if the conversion or the validation failed.
-
getCommittedValue
- Specified by:
getCommittedValuein interfaceICellEditDialog- Returns:
- The canonical value that was committed to the editor control.
-
close
public abstract void close()Description copied from interface:ICellEditorClose/dispose the containedControl- Specified by:
closein interfaceICellEditor
-
isClosed
public abstract boolean isClosed()- Specified by:
isClosedin interfaceICellEditor- Returns:
trueif this editor has been closed already,falseif it is still open
-
getEditorControl
public org.eclipse.swt.widgets.Control getEditorControl()- Specified by:
getEditorControlin interfaceICellEditor- Returns:
- The editor control that is wrapped by this ICellEditor.
-
createEditorControl
public org.eclipse.swt.widgets.Control createEditorControl(org.eclipse.swt.widgets.Composite parent) Description copied from interface:ICellEditorCreates the editor control that is wrapped by this ICellEditor. Will use the style configurations in ConfigRegistry for styling the control.- Specified by:
createEditorControlin interfaceICellEditor- Parameters:
parent- The Composite that will be the parent of the new editor control. Can not benull- Returns:
- The created editor control that is wrapped by this ICellEditor.
-
openInline
Description copied from interface:ICellEditorDetermines whether the editor should be opened inline or using a dialog. By default it will check this by configuration attributeEditConfigAttributes.OPEN_IN_DIALOG. If there is no configuration found for this,truewill be returned for backwards compatibility.If this method returns
true, the editor will be opened inline (default).There might be editors that are only able to be opened in a dialog. These implementations need to override this method to always return
false, so the editor never gets opened inline.- Specified by:
openInlinein interfaceICellEditor- Parameters:
configRegistry- TheIConfigRegistryto retrieve the configuration for inline/dialog editing out of. Needed here because the instanceIConfigRegistrymight not be set on calling this method.configLabels- The labels out of the LabelStack of the cell whose editor should be activated. Needed here because this method needs to be called prior to activation to determine where to activate it.- Returns:
trueif the editor should opened inline,falseif not.- See Also:
-
supportMultiEdit
Description copied from interface:ICellEditorDetermines whether this editor supports multi edit behavior or not. If this method returnstrue, on selecting and pressing F2 on several cells that are editable, having the same editor type and converter registered, a multi edit dialog will open. By default this method will returntrue. You can change this behavior by setting the configuration attributeEditConfigAttributes.SUPPORT_MULTI_EDIT.You should consider returning
falsee.g. if the update operation is complex or you use conditional validation, where a value is validated against another value in the data model.- Specified by:
supportMultiEditin interfaceICellEditor- Parameters:
configRegistry- TheIConfigRegistryto retrieve the configuration for multi edit support out of. Needed here because the instanceIConfigRegistrymight not be set on calling this method.configLabels- The labels out of the LabelStack of the cell whose editor should be activated. Needed here because this method needs to be called prior to activation to determine where to activate it.- Returns:
trueif this editor will open in a subdialog for multi editing,falseif the multi editing of this kind of cell editor is not supported.- See Also:
-
openMultiEditDialog
public boolean openMultiEditDialog()Description copied from interface:ICellEditorThis is a very special configuration to tell whether an ICellEditor should open a multi edit dialog for multi editing or not. Usually for multi editing there should be always a multi edit dialog be opened. There are only special cases where this doesn't make sense. The only types of ICellEditors that shouldn't open multi edit dialogs are editors that change their values directly and there is no interactively editor control opened, e.g. checkboxes.- Specified by:
openMultiEditDialogin interfaceICellEditor- Returns:
trueif for multi editing a multi edit dialog should be opened,falseif the multi editing should be performed directly without opening a multi edit dialog. Note:trueis the default value and changing it tofalsefor a custom editor might cause issues if not dealed correctly.
-
openAdjacentEditor
public boolean openAdjacentEditor()Description copied from interface:ICellEditorDetermines behavior after committing the value of this editor in combination with selection movement. If this method returntrueand the selection is moved after committing, the editor for the newly selected cell will be activated immediately. If this method returnsfalseor the selection is not moved after commit, no action should be executed.The behavior previous to this configuration was to not open the adjacent editor. So if there is no configuration registered for this,
falsewill be returned by default.Note: It only makes sense to call this method if the editor is already activated. Calling this method on an editor that has not been activated already will lead to exceptions.
- Specified by:
openAdjacentEditorin interfaceICellEditor- Returns:
trueif the adjacent editor should be opened if the selection moves after commit,falseif not.- See Also:
-
activateAtAnyPosition
public boolean activateAtAnyPosition()Description copied from interface:ICellEditorThis method is intended to be used byIMouseEventMatcherimplementations that need to check for the editor and the click position to determine whether an editor should be activated or not. By default this method will returntrue. Special implementations that need a different behavior need to returnfalseinstead. E.g. checkbox editors should only be activated in case the icon that represents the checkbox is clicked.- Specified by:
activateAtAnyPositionin interfaceICellEditor- Returns:
trueif thisICellEditorshould be activated by clicking at any position in the corresponding cell,falseif there need to be a special position clicked.
-
activateOnTraversal
Description copied from interface:ICellEditorThis method is asked on tab traversal whether thisICellEditorshould be automatically activated or not. This is necessary to avoid automatically changing the value of a checkbox or opening a dialog editor on traversal.- Specified by:
activateOnTraversalin interfaceICellEditor- Parameters:
configRegistry- TheIConfigRegistryto retrieve the configuration out of. Needed here because the instanceIConfigRegistrymight not be set on calling this method.configLabels- The labels out of the LabelStack of the cell whose editor should be activated.- Returns:
trueif thisICellEditorshould be activated in case of tab traversal,falseif not.- See Also:
-
addEditorControlListeners
public void addEditorControlListeners()Description copied from interface:ICellEditorThis method is intended to add listeners to the wrapped editor control to add context related behavior. For example, inEditModeEnum.INLINEby default this should add a FocusListener that commits the current value if the editor control loses focus.This method was introduced mainly because of two issues:
- On Mac OS calling setBounds() on a Control will cause losing focus. So listeners need to be added after this method is called by the EditController, otherwise on activating the editor it will be closed immediately after the correct size is calculated.
- The main concept for cell editor activation is, that the editor control is disposed on closing the editor. This way everytime the cell editor is activated, a new editor control will be created. If an editor is implemented that needs to keep the editor control after closing the editor, it needs to be ensured that the listeners are removed again. Otherwise the listeners would be added again everytime the editor is activated.
EditController.editCell(ILayerCell, Composite, Object, IConfigRegistry).- Specified by:
addEditorControlListenersin interfaceICellEditor
-
removeEditorControlListeners
public void removeEditorControlListeners()Description copied from interface:ICellEditorThis method is intended to remove listeners from the wrapped editor control that was added byICellEditor.addEditorControlListeners()before to add context related behavior.This method was introduced to add the possibility to create an
ICellEditorwhose wrapped editor control should not be disposed on closing the editor.The main concept for cell editor activation is, that the editor control is disposed on closing the editor. This way everytime the cell editor is activated, a new editor control will be created. If an editor is implemented that needs to keep the editor control after closing the editor, it needs to be ensured that the listeners are removed again. Otherwise the listeners would be added again everytime the editor is activated.
This method needs to be called onICellEditor.close(). There is no automatical call by the framework if you are not using the abstract implementation ofICellEditor.- Specified by:
removeEditorControlListenersin interfaceICellEditor
-
calculateControlBounds
public org.eclipse.swt.graphics.Rectangle calculateControlBounds(org.eclipse.swt.graphics.Rectangle cellBounds) Description copied from interface:ICellEditorThis method is used to calculate the bounds of the edit control when opened inline. By default it should return the given cell bounds to match the cell structure in NatTable. For several cases it might be useful to return the preferred size to show all content rather than trimming the control to the cell size.Note: By changing the bounds you should ensure to only modify width and height attributes and not x and y coordinate, otherwise the editor control will show up somewhere else and not in place of the cell that is edited.
- Specified by:
calculateControlBoundsin interfaceICellEditor- Parameters:
cellBounds- The bounds of the cell for which the editor is opened.- Returns:
- The bounds of the editor control that should be applied. By default the cell bounds for several cases bigger.
-
setDialogSettings
Description copied from interface:ICellEditDialogAllows to customize the appearance of the dialog. This method will be called by the framework at creation time of the dialog via theCellEditDialogFactory.The map containing the settings can be registered to the
IConfigRegistryfor the keyEditConfigAttributes.EDIT_DIALOG_SETTINGS. The keys that are valid for this map are specified below.- Specified by:
setDialogSettingsin interfaceICellEditDialog- Parameters:
editDialogSettings- Map containing the settings to customize the edit dialog appearance.- See Also:
-
getColumnIndex
public int getColumnIndex()- Specified by:
getColumnIndexin interfaceICellEditor- Returns:
- The column index of the cell to which this editor is attached.
-
getRowIndex
public int getRowIndex()- Specified by:
getRowIndexin interfaceICellEditor- Returns:
- The row index of the cell to which this editor is attached.
-
getColumnPosition
public int getColumnPosition()- Specified by:
getColumnPositionin interfaceICellEditor- Returns:
- The column position of the cell to which this editor is attached.
-
getRowPosition
public int getRowPosition()- Specified by:
getRowPositionin interfaceICellEditor- Returns:
- The row position of the cell to which this editor is attached.
-