Skip to content
Snippets Groups Projects
Commit 2a66e4f9 authored by Andreas Bayha's avatar Andreas Bayha
Browse files

Made context menu for editable cells ind DynamicTreeTableViewer

possible.

Issue-Ref: 4120
Issue-Url: #4120

Signed-off-by: default avatarAndreas Bayha <bayha@fortiss.org>
parent 34b5e95a
No related branches found
No related tags found
1 merge request!169Made context menu for editable cells ind DynamicTreeTableViewer
......@@ -5,7 +5,7 @@ DynamicTextFieldTreeTableCell.java de24117e6f785b328f1ff62383626a0b4b54e8ff GREE
DynamicTreeContentProviderBase.java 91896b1fb5104d126544c44c1ff8c30f2a13a8d6 GREEN
DynamicTreeItem.java 7e81ea98038b5eca90df583e0268d4e8f37aaf25 GREEN
DynamicTreeItemBase.java d883066ecc181120302ca32f328538de7a45b093 GREEN
DynamicTreeTableUIProviderBase.java d150a4c379cc41aab2a44a5f1643f4956332c8e3 GREEN
DynamicTreeTableUIProviderBase.java 14bd19e218dd17a55ad5264e7b57d46928ca5dc1 YELLOW
DynamicTreeTableViewer.java 62712ba0f72b57c55256648204566ac2448b8d56 GREEN
DynamicTreeUIProviderBase.java 82d3c051213f0147f4c67ad247a08696cee73110 GREEN
DynamicTreeViewer.java 545f1ca10b7b3cad171b294a4b447875da45c9ed GREEN
......
......@@ -461,6 +461,8 @@ public abstract class DynamicTreeTableUIProviderBase<T> {
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
styleCell(this, this.columnIndex);
addContextMenuToCell(this, this.columnIndex);
}
/** {@inheritDoc} */
......@@ -509,43 +511,12 @@ public abstract class DynamicTreeTableUIProviderBase<T> {
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
ContextMenu menu = null;
if(!empty && item != null) {
T data = this.getTreeTableRow().getItem();
menu = createContextMenu(data, colIndex);
if(IS_OS_LINUX && menu != null) {
// JFX-builtin handling is non-operation in Linux.
addContextMenuHandler(menu, data);
}
addContextMenuToCell(this, colIndex);
}
this.setContextMenu(menu);
styleCell(this, colIndex);
}
/**
* Adds a handler for showing the context menu. Duplicate of the same method in
* {@link DynamicTreeViewer} due to the absence of proper selection interfaces in
* JFX.
*/
private void addContextMenuHandler(ContextMenu menu, T element) {
getTreeTableView().addEventHandler(MouseEvent.MOUSE_RELEASED, e -> {
if(e.getButton() == MouseButton.SECONDARY) {
TreeItem<T> selected =
getTreeTableView().getSelectionModel().getSelectedItem();
// We must check the element since all rows are evaluated.
if(selected != null && selected.getValue() == element) {
menu.show(this, e.getScreenX(), e.getScreenY());
e.consume();
}
} else {
// any other click cause hiding menu
menu.hide();
}
});
}
};
cell.textProperty().bind(cell.itemProperty());
......@@ -590,4 +561,48 @@ public abstract class DynamicTreeTableUIProviderBase<T> {
return cell;
});
}
/**
* Adds the context menu to the given {@code cell} in the given {@code columnIndex}.
*
* @param cell
* The {@link TreeTableCell} to add the context menu to.
* @param columnIndex
* The column index of the given {@code cell}.
*/
private void addContextMenuToCell(TreeTableCell<T, String> cell, int columnIndex) {
ContextMenu menu;
T data = cell.getTreeTableRow().getItem();
menu = createContextMenu(data, columnIndex);
if(IS_OS_LINUX && menu != null) {
// JFX-builtin handling is non-operation in Linux.
addContextMenuHandler(cell, menu, data);
}
cell.setContextMenu(menu);
}
/**
* Adds a handler for showing the context menu. Duplicate of the same method in
* {@link DynamicTreeViewer} due to the absence of proper selection interfaces in
* JFX.
*/
private void addContextMenuHandler(TreeTableCell<T, String> cell, ContextMenu menu, T element) {
cell.getTreeTableView().addEventHandler(MouseEvent.MOUSE_RELEASED, e -> {
if(e.getButton() == MouseButton.SECONDARY) {
TreeItem<T> selected =
cell.getTreeTableView().getSelectionModel().getSelectedItem();
// We must check the element since all rows are evaluated.
if(selected != null && selected.getValue() == element) {
menu.show(cell, e.getScreenX(), e.getScreenY());
e.consume();
}
} else {
// any other click cause hiding menu
menu.hide();
}
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment