in application/org.openjdk.jmc.joverflow.ui/src/main/java/org/openjdk/jmc/joverflow/ui/viewers/ReferrerTable.java [69:218]
public ReferrerTable(final Runnable updateCallback) {
setRowFactory(new Callback<TableView<ReferrerItem>, TableRow<ReferrerItem>>() {
@Override
public TableRow<ReferrerItem> call(TableView<ReferrerItem> param) {
final TableRow<ReferrerItem> row = new TableRow<ReferrerItem>() {
@Override
protected void updateItem(ReferrerItem item, boolean empty) {
super.updateItem(item, empty);
// FIXME: Change this when javafx RT-32518 is implemented
getStyleClass().remove(HIGHLIGHT);
if (!empty && selectedItem != null && selectedItem.getLevel() >= item.getLevel()) {
getStyleClass().add(HIGHLIGHT);
}
};
};
row.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
int i = row.getIndex();
if (i >= 0 && i < getItems().size()) {
switch (me.getButton()) {
case PRIMARY:
selectedItem = getItems().get(i);
updateCallback.run();
break;
case SECONDARY:
selectedItem = null;
updateCallback.run();
break;
case NONE:
case MIDDLE:
}
}
me.consume();
}
});
return row;
}
});
final TableColumn<ReferrerItem, ReferrerItem> tc = new TableColumn<ReferrerItem, ReferrerItem>("Referrer");
tc.setCellValueFactory(cellValFactory);
tc.setPrefWidth(350);
tc.setCellFactory(new Callback<TableColumn<ReferrerItem, ReferrerItem>, TableCell<ReferrerItem, ReferrerItem>>() {
@Override
public TableCell<ReferrerItem, ReferrerItem> call(TableColumn<ReferrerItem, ReferrerItem> param) {
return new TableCell<ReferrerItem, ReferrerItem>() {
StackPane iconPane = new StackPane();
{
Polygon p = new Polygon(new double[] {3, 0, 6, 6, 3.8, 6, 3.8, 9.2, 8, 9.2, 8, 10.5, 2.5, 10.5, 2.5, 6, 0, 6});
p.getStyleClass().add("referrer-icon");
iconPane.getChildren().add(p);
iconPane.setAlignment(Pos.CENTER_RIGHT);
}
@Override
public void updateIndex(int i) {
super.updateIndex(i);
if (i >= 0 && i < getItems().size()) {
doUpdateContent(getTableView().getItems().get(i));
}
}
private void doUpdateContent(ReferrerItem item) {
setText(item.getName());
int level = item.getLevel();
iconPane.setPrefWidth(200 - 188 / (level / 25.0 + 1));
iconPane.getChildren().get(0).setStyle(item.isBranch() ? "-fx-stroke: dodgerblue;" : "-fx-stroke: black;");
setGraphic(iconPane);
}
@Override
protected void updateItem(ReferrerItem item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
doUpdateContent(item);
}
}
};
}
});
tc.setComparator(new Comparator<ReferrerItem>() {
@Override
public int compare(ReferrerItem o1, ReferrerItem o2) {
boolean revSort = tc.getSortType() == SortType.ASCENDING;
int indexCompare = revSort ? o1.getLevel() - o2.getLevel() : o2.getLevel() - o1.getLevel();
return indexCompare == 0 ? o2.getName().compareTo(o1.getName()) : indexCompare;
}
});
getColumns().add(tc);
final TableColumn<ReferrerItem, ReferrerItem> memoryColumn = new TableColumn<ReferrerItem, ReferrerItem>("Memory KB");
memoryColumn.setCellValueFactory(cellValFactory);
memoryColumn.setPrefWidth(100);
memoryColumn.setSortType(SortType.DESCENDING);
memoryColumn.setCellFactory(CellFactories.<ReferrerItem, ReferrerItem> getMemoryCellFactory());
memoryColumn.setComparator(new Comparator<ReferrerItem>() {
@Override
public int compare(ReferrerItem o1, ReferrerItem o2) {
boolean revSort = memoryColumn.getSortType() == SortType.ASCENDING;
int indexCompare = revSort ? o1.getLevel() - o2.getLevel() : o2.getLevel() - o1.getLevel();
return indexCompare == 0 ? compareLongs(o2.getMemory(), o1.getMemory()) : indexCompare;
}
});
getColumns().add(memoryColumn);
final TableColumn<ReferrerItem, ReferrerItem> ovhdColumn = new TableColumn<ReferrerItem, ReferrerItem>("Overhead KB");
ovhdColumn.setCellValueFactory(cellValFactory);
ovhdColumn.setPrefWidth(100);
ovhdColumn.setCellFactory(CellFactories.<ReferrerItem, ReferrerItem> getOvhdCellFactory());
ovhdColumn.setComparator(new Comparator<ReferrerItem>() {
@Override
public int compare(ReferrerItem o1, ReferrerItem o2) {
boolean revSort = ovhdColumn.getSortType() == SortType.ASCENDING;
int indexCompare = revSort ? o1.getLevel() - o2.getLevel() : o2.getLevel() - o1.getLevel();
return indexCompare == 0 ? compareLongs(o2.getOvhd(), o1.getOvhd()) : indexCompare;
}
});
getColumns().add(ovhdColumn);
final TableColumn<ReferrerItem, ReferrerItem> sizeColumn = new TableColumn<ReferrerItem, ReferrerItem>("Objects");
sizeColumn.setCellValueFactory(cellValFactory);
sizeColumn.setPrefWidth(100);
sizeColumn.setCellFactory(CellFactories.<ReferrerItem, ReferrerItem> getSizeCellFactory());
sizeColumn.setComparator(new Comparator<ReferrerItem>() {
@Override
public int compare(ReferrerItem o1, ReferrerItem o2) {
boolean revSort = sizeColumn.getSortType() == SortType.ASCENDING;
int indexCompare = revSort ? o1.getLevel() - o2.getLevel() : o2.getLevel() - o1.getLevel();
return indexCompare == 0 ? compareLongs(o2.getSize(), o1.getSize()) : indexCompare;
}
});
getColumns().add(sizeColumn);
getSortOrder().add(memoryColumn);
setMinWidth(400);
}