Skip to content
Snippets Groups Projects
Commit 56d2820d authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

propagate column index to menu

parent a2378c84
No related branches found
No related tags found
1 merge request!14Iss1026
......@@ -13,17 +13,21 @@ import org.slf4j.LoggerFactory;
import javafx.event.EventHandler;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.input.ContextMenuEvent;
public class TableViewContextMenu<T> {
@SuppressWarnings("unused")
private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.ui.TableViewContextMenu.class);
public final static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.ui.TableViewContextMenu.class);
private Collection<P_MenuItem> items = new LinkedList<>();
private Collection<P_MenuItemWithColumnIndex> itemsWithColumnIndex = new LinkedList<>();
private TableView<T> tableView;
private int indexOfColumn = -1;
public TableViewContextMenu(TableView<T> tableView) {
this.tableView = tableView;
}
......@@ -32,22 +36,20 @@ public class TableViewContextMenu<T> {
items.add(new P_MenuItem(text, eventHandler, enableHandler));
}
public void addItem(String text, BiConsumer<T, Integer> eventHandler,
BiPredicate<T, Integer> enableHandler) {
itemsWithColumnIndex.add(new P_MenuItemWithColumnIndex(text, eventHandler, enableHandler));
public void addItem(String text, BiConsumer<T, Integer> eventHandler, BiPredicate<T, Integer> enableHandler) {
itemsWithColumnIndex.add(new P_MenuItemWithColumnIndex(text, eventHandler, enableHandler));
}
private T getRequstedItem() {
return tableView.getFocusModel().getFocusedItem();
}
private int getRequstedColumn() {
return tableView.getFocusModel().getFocusedCell().getColumn();
return indexOfColumn;
}
private ContextMenu getCreateContextMenu() {
ContextMenu cm = tableView.getContextMenu();
if (cm == null) {
cm = new ContextMenu();
tableView.setContextMenu(cm);
......@@ -55,11 +57,26 @@ public class TableViewContextMenu<T> {
@Override
public void handle(ContextMenuEvent event) {
T requestedItem = getRequstedItem();
updateColumnIndex(event.getSceneX());
int column = getRequstedColumn();
for (P_MenuItem item : items) {
item.updateEnable(requestedItem);
}
itemsWithColumnIndex.forEach(item->item.updateEnable(requestedItem, column));
itemsWithColumnIndex.forEach(item -> item.updateEnable(requestedItem, column));
}
private void updateColumnIndex(double sceneX) {
double last = 0;
indexOfColumn = tableView.getColumns().size();
int index = 0;
for (TableColumn<?, ?> column : tableView.getColumns()) {
last += column.getWidth();
if (last > sceneX) {
indexOfColumn = index;
break;
}
index++;
}
}
});
......@@ -88,17 +105,17 @@ public class TableViewContextMenu<T> {
private class P_MenuItemWithColumnIndex {
private MenuItem item;
private BiPredicate<T,Integer> enableHandler;
private BiPredicate<T, Integer> enableHandler;
public P_MenuItemWithColumnIndex(String text, BiConsumer<T, Integer> eventHandler,
BiPredicate<T, Integer> enableHandler) {
this.enableHandler = enableHandler;
item = new MenuItem(text);
item.setOnAction(e -> eventHandler.accept(getRequstedItem(),getRequstedColumn()));
item.setOnAction(e -> eventHandler.accept(getRequstedItem(), getRequstedColumn()));
getCreateContextMenu().getItems().add(item);
}
public void updateEnable(T selected,int column) {
public void updateEnable(T selected, int column) {
item.setDisable(!enableHandler.test(selected, column));
}
......
......@@ -40,7 +40,7 @@ import javafx.scene.paint.Color;
public class SPIMPipelineProgressViewController extends BorderPane implements CloseableControl, InitiableControl {
private static Logger log = LoggerFactory
public final static Logger log = LoggerFactory
.getLogger(cz.it4i.fiji.haas_spim_benchmark.ui.SPIMPipelineProgressViewController.class);
private static final String EMPTY_VALUE = "\u2007\u2007\u2007";
......@@ -120,7 +120,12 @@ public class SPIMPipelineProgressViewController extends BorderPane implements Cl
registry = new ObservableTaskRegistry(task -> tasks.getItems().remove(registry.get(task)));
TableViewContextMenu<ObservableValue<Task>> menu = new TableViewContextMenu<ObservableValue<Task>>(this.tasks);
menu.addItem("Open view", (task, columnIndex) -> proof(task, columnIndex),
(x, columnIndex) -> x != null && 0 < columnIndex &&columnIndex - 1 < x.getValue().getComputations().size());
(x, columnIndex) -> check(x, columnIndex));
}
private boolean check(ObservableValue<Task> x, Integer columnIndex) {
boolean result = x != null && 0 < columnIndex &&columnIndex - 1 < x.getValue().getComputations().size();
return result;
}
private void proof(ObservableValue<Task> task, int columnIndex) {
......
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