Skip to content

Commit 92fc5df

Browse files
committed
#18: Column to display identicon of each semantic in KL Table display (Fixes #18)
1 parent f2d1b8d commit 92fc5df

5 files changed

Lines changed: 83 additions & 3 deletions

File tree

kview/src/main/java/dev/ikm/komet/kview/mvvm/view/genpurpose/control/table/PatternSemanticsTableControlSkin.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.cell.SemanticComponentCell;
44
import dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.cell.SemanticComponentCollectionCell;
5+
import dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.cell.SemanticIdenticonCell;
56
import dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.cell.SemanticStandardCell;
67
import javafx.collections.ListChangeListener;
78
import javafx.css.PseudoClass;
89
import javafx.scene.control.SkinBase;
910
import javafx.scene.control.TableColumn;
1011
import javafx.scene.control.TableRow;
1112
import javafx.scene.control.TableView;
13+
import javafx.scene.image.Image;
1214
import javafx.util.Callback;
1315
import javafx.util.Subscription;
1416

@@ -100,6 +102,21 @@ private void onSemanticsAdded(List<? extends SemanticRow> addedSubList) {
100102
}
101103

102104
private void initializeTableView(SemanticRow row) {
105+
// Identicon
106+
TableColumn<SemanticRow, Image> identiconColumn = new TableColumn<>();
107+
identiconColumn.setCellValueFactory(cellData ->
108+
cellData.getValue().identiconProperty());
109+
identiconColumn.setCellFactory(_ -> new SemanticIdenticonCell());
110+
111+
final int identiconColumnWidth = 40;
112+
identiconColumn.setPrefWidth(identiconColumnWidth);
113+
identiconColumn.setMinWidth(identiconColumnWidth);
114+
identiconColumn.setMaxWidth(identiconColumnWidth);
115+
identiconColumn.getStyleClass().add("identicon-column");
116+
117+
tableView.getColumns().add(identiconColumn);
118+
119+
// Fields
103120
for (SemanticField field : row.getFields()) {
104121
TableColumn<SemanticRow, Object> tableColumn = new TableColumn<>(field.getFieldTitle());
105122

kview/src/main/java/dev/ikm/komet/kview/mvvm/view/genpurpose/control/table/PatternSemanticsTablePresenter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.ikm.komet.kview.mvvm.view.genpurpose.control.table;
22

3+
import dev.ikm.komet.framework.Identicon;
34
import dev.ikm.komet.framework.observable.ObservableComposer;
45
import dev.ikm.komet.framework.observable.ObservableEntity;
56
import dev.ikm.komet.framework.observable.ObservableEntityHandle;
@@ -17,6 +18,7 @@
1718
import dev.ikm.tinkar.entity.SemanticEntityVersion;
1819
import javafx.collections.ObservableList;
1920
import javafx.scene.Node;
21+
import javafx.scene.image.Image;
2022

2123
import java.util.ArrayList;
2224
import java.util.HashMap;
@@ -73,6 +75,9 @@ public void addNewSemantic(SemanticEntity<SemanticEntityVersion> semanticEntity)
7375
}
7476
SemanticRow semanticRow = new SemanticRow(fields);
7577

78+
Image semanticIdenticon = Identicon.generateIdenticonImage(semanticEntity.publicId());
79+
semanticRow.setIdenticon(semanticIdenticon);
80+
7681
semanticEntityToSemanticRow.put(semanticEntity, semanticRow);
7782

7883
patternSemanticsControl.getSemantics().add(semanticRow);

kview/src/main/java/dev/ikm/komet/kview/mvvm/view/genpurpose/control/table/SemanticRow.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package dev.ikm.komet.kview.mvvm.view.genpurpose.control.table;
22

33
import javafx.beans.property.BooleanProperty;
4+
import javafx.beans.property.ObjectProperty;
45
import javafx.beans.property.SimpleBooleanProperty;
6+
import javafx.beans.property.SimpleObjectProperty;
7+
import javafx.scene.image.Image;
58

69
import java.util.List;
710

@@ -14,14 +17,20 @@ public SemanticRow(List<SemanticField> fields) {
1417

1518
public List<SemanticField> getFields() { return fields; }
1619

20+
// -- identicon
21+
private final ObjectProperty<Image> identicon = new SimpleObjectProperty<>();
22+
public ObjectProperty<Image> identiconProperty() { return identicon; }
23+
public ObjectProperty<Image> getIdenticon() { return identicon; }
24+
public void setIdenticon(Image identicon) { this.identicon.set(identicon); }
25+
1726
// -- edit mode
18-
BooleanProperty editMode = new SimpleBooleanProperty();
27+
private final BooleanProperty editMode = new SimpleBooleanProperty();
1928
public boolean isEditMode() { return editMode.get(); }
2029
public BooleanProperty editModeProperty() { return editMode; }
2130
public void setEditMode(boolean editMode) { this.editMode.set(editMode); }
2231

2332
// -- preview mode
24-
BooleanProperty previewMode = new SimpleBooleanProperty();
33+
private final BooleanProperty previewMode = new SimpleBooleanProperty();
2534
public boolean isPreviewMode() { return previewMode.get(); }
2635
public BooleanProperty previewModeProperty() { return previewMode; }
2736
public void setPreviewMode(boolean previewMode) { this.previewMode.set(previewMode); }
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.cell;
2+
3+
import dev.ikm.komet.kview.mvvm.view.genpurpose.control.table.SemanticRow;
4+
import javafx.scene.control.ContentDisplay;
5+
import javafx.scene.control.TableCell;
6+
import javafx.scene.image.Image;
7+
import javafx.scene.image.ImageView;
8+
9+
public class SemanticIdenticonCell extends TableCell<SemanticRow, Image> {
10+
private ImageView identiconImageView;
11+
12+
public SemanticIdenticonCell() {
13+
identiconImageView = new ImageView();
14+
15+
setGraphic(identiconImageView);
16+
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
17+
18+
identiconImageView.getStyleClass().add("semantic-identicon");
19+
getStyleClass().add("semantic-identicon-cell");
20+
}
21+
22+
@Override
23+
protected void updateItem(Image identiconImage, boolean empty) {
24+
super.updateItem(identiconImage, empty);
25+
26+
if (empty || identiconImage == null) {
27+
setGraphic(null);
28+
return;
29+
}
30+
31+
identiconImageView.setImage(identiconImage);
32+
33+
setGraphic(identiconImageView);
34+
}
35+
}

kview/src/main/resources/dev/ikm/komet/kview/mvvm/view/kview.css

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6671,7 +6671,21 @@ Styling a context menu for kview ui/ux controls
66716671
-fx-border-color: preview_mode_border_color;
66726672
}
66736673

6674-
/* Data type COMPONENT_ID_SET_FIELD (Component Set), COMPONENT_FIELD (Component) */
6674+
/************ Semantic Identicon *********/
6675+
.gen-purpose-window .table-view .table-cell .semantic-identicon {
6676+
-fx-fit-width: 16px;
6677+
-fx-fit-height: 16px;
6678+
}
6679+
6680+
.gen-purpose-window .table-view .table-cell.semantic-identicon-cell {
6681+
-fx-alignment: center;
6682+
}
6683+
6684+
.gen-purpose-window .table-view .column-header.identicon-column .label {
6685+
-fx-alignment: center;
6686+
}
6687+
6688+
/************ Data type: COMPONENT_ID_SET_FIELD (Component Set), COMPONENT_FIELD (Component) ********/
66756689
.gen-purpose-window .table-view .table-cell .component-container {
66766690
-fx-spacing: 5px;
66776691
}

0 commit comments

Comments
 (0)