Skip to content

Commit 94045b1

Browse files
author
Bytekeeper
committed
#57 Make actions and "time pane" use the same space
1 parent 49e4b4f commit 94045b1

File tree

2 files changed

+22
-21
lines changed

2 files changed

+22
-21
lines changed

src/main/java/org/stt/gui/jfx/TimeTrackingItemCellWithActions.java

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
import com.sun.javafx.sg.prism.NGNode;
88
import javafx.animation.FadeTransition;
99
import javafx.beans.binding.Bindings;
10+
import javafx.beans.binding.DoubleBinding;
1011
import javafx.beans.property.DoubleProperty;
12+
import javafx.beans.property.SimpleDoubleProperty;
1113
import javafx.geometry.Insets;
1214
import javafx.geometry.Pos;
1315
import javafx.scene.Node;
1416
import javafx.scene.control.*;
15-
import javafx.scene.layout.Background;
16-
import javafx.scene.layout.BackgroundFill;
17-
import javafx.scene.layout.BorderPane;
18-
import javafx.scene.layout.HBox;
17+
import javafx.scene.layout.*;
1918
import javafx.scene.paint.Color;
2019
import javafx.scene.text.Font;
2120
import org.stt.model.TimeTrackingItem;
@@ -24,7 +23,6 @@
2423
import java.time.format.FormatStyle;
2524
import java.util.ResourceBundle;
2625
import java.util.function.Predicate;
27-
import java.util.stream.Stream;
2826

2927
import static java.util.Objects.requireNonNull;
3028
import static org.stt.gui.jfx.Glyph.GLYPH_SIZE_MEDIUM;
@@ -44,7 +42,7 @@ class TimeTrackingItemCellWithActions extends ListCell<TimeTrackingItem> {
4442

4543
private final Node newDayNode;
4644
private final TimeTrackingItemNodes itemNodes;
47-
private final int buttonIndex;
45+
private final HBox actions;
4846

4947
TimeTrackingItemCellWithActions(Font fontAwesome,
5048
ResourceBundle localization,
@@ -66,21 +64,18 @@ class TimeTrackingItemCellWithActions extends ListCell<TimeTrackingItem> {
6664
deleteButton.setOnAction(event -> actionsHandler.delete(getItem()));
6765
stopButton.setOnAction(event -> actionsHandler.stop(getItem()));
6866

69-
itemNodes.appendNodesTo(cellPane.getChildren());
67+
actions = new HBox(continueButton, editButton, deleteButton);
68+
StackPane.setAlignment(actions, Pos.CENTER);
69+
StackPane timeOrActions = new StackPaneWithoutResize();
7070

71-
buttonIndex = cellPane.getChildren().size();
71+
actions.opacityProperty().bind(fadeOnHoverProperty());
72+
SimpleDoubleProperty one = new SimpleDoubleProperty(1);
73+
DoubleBinding timePaneOpacity = one.subtract(Bindings.min(one, fadeOnHoverProperty().multiply(2)));
74+
itemNodes.appendNodesTo(timeOrActions, timePaneOpacity, cellPane.getChildren());
75+
timeOrActions.getChildren().add(actions);
7276

73-
cellPane.getChildren().addAll(
74-
continueButton,
75-
editButton,
76-
deleteButton);
7777
cellPane.setAlignment(Pos.CENTER_LEFT);
7878

79-
DoubleProperty opacityProperty = fadeOnHoverProperty();
80-
81-
Stream.of(continueButton, editButton, deleteButton, stopButton)
82-
.map(Node::opacityProperty)
83-
.forEach(p -> p.bind(opacityProperty));
8479

8580
lastItemOnDayPane = new BorderPane();
8681

@@ -137,7 +132,7 @@ protected void updateItem(TimeTrackingItem item, boolean empty) {
137132
if (empty) {
138133
setGraphic(null);
139134
} else {
140-
cellPane.getChildren().set(buttonIndex, item.getEnd().isPresent() ? continueButton : stopButton);
135+
actions.getChildren().set(0, item.getEnd().isPresent() ? continueButton : stopButton);
141136
itemNodes.setItem(item);
142137
if (lastItemOfDay.test(item)) {
143138
setupLastItemOfDayPane();

src/main/java/org/stt/gui/jfx/TimeTrackingItemNodes.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.stt.gui.jfx;
22

3+
import javafx.beans.binding.DoubleBinding;
34
import javafx.collections.ObservableList;
45
import javafx.geometry.Pos;
56
import javafx.scene.Node;
@@ -97,7 +98,12 @@ private void applyLabelForComment(String activity) {
9798

9899
public void appendNodesTo(ObservableList<Node> parent) {
99100
parent.addAll(labelArea, space, timePane);
101+
}
100102

103+
public void appendNodesTo(Pane timePaneContainer, DoubleBinding timePaneOpacity, ObservableList<Node> parent) {
104+
timePane.opacityProperty().bind(timePaneOpacity);
105+
timePaneContainer.getChildren().add(timePane);
106+
parent.addAll(labelArea, space, timePaneContainer);
101107
}
102108

103109
public void setItem(TimeTrackingItem item) {
@@ -116,10 +122,10 @@ private void setupTimePane(TimeTrackingItem item) {
116122

117123
if (!DateTimes.isOnSameDay(item.getStart(), item.getEnd().orElseGet(LocalDateTime::now))) {
118124
StackPane stackPane = new StackPane(ongoingActivityGraphics);
119-
Node hallo = new ImageView(WARNING_IMAGE);
125+
Node ongoingActivityWarning = new ImageView(WARNING_IMAGE);
120126
Tooltips.install(stackPane, localization.getString("ongoingActivityDidntStartToday"));
121-
stackPane.getChildren().add(hallo);
122-
StackPane.setAlignment(hallo, Pos.TOP_RIGHT);
127+
stackPane.getChildren().add(ongoingActivityWarning);
128+
StackPane.setAlignment(ongoingActivityWarning, Pos.TOP_RIGHT);
123129
timePane.getChildren().setAll(labelForStart, stackPane);
124130
} else {
125131
timePane.getChildren().setAll(labelForStart, ongoingActivityGraphics);

0 commit comments

Comments
 (0)