Skip to content

Commit 4cd85e7

Browse files
committed
Added a listview to BarChartTileSkin and LeaderBoardTileSkin
1 parent ea0fd56 commit 4cd85e7

File tree

7 files changed

+272
-113
lines changed

7 files changed

+272
-113
lines changed

src/main/java/eu/hansolo/tilesfx/Test.java

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import eu.hansolo.tilesfx.addons.HappinessIndicator.Happiness;
2323
import eu.hansolo.tilesfx.addons.YearChart;
2424
import eu.hansolo.tilesfx.colors.ColorSkin;
25+
import eu.hansolo.tilesfx.skins.BarChartItem;
26+
import eu.hansolo.tilesfx.tools.Helper;
2527
import javafx.animation.AnimationTimer;
2628
import javafx.application.Application;
2729
import javafx.application.Platform;
@@ -36,10 +38,13 @@
3638
import javafx.scene.control.Label;
3739
import javafx.scene.layout.HBox;
3840
import javafx.scene.layout.Priority;
41+
import javafx.scene.layout.StackPane;
3942
import javafx.scene.layout.VBox;
4043
import javafx.scene.paint.Color;
4144
import javafx.stage.Stage;
4245

46+
import java.util.ArrayList;
47+
import java.util.List;
4348
import java.util.Random;
4449

4550

@@ -55,9 +60,7 @@ public class Test extends Application {
5560
private static final double WIDTH = 400;
5661
private static final double HEIGHT = 400;
5762
private static int noOfNodes = 0;
58-
private Tile tile1;
59-
private Tile tile2;
60-
private VBox yearBox;
63+
private Tile tile;
6164
private DoubleProperty value;
6265
private long lastTimerCall;
6366
private AnimationTimer timer;
@@ -67,52 +70,29 @@ public class Test extends Application {
6770
@Override public void init() {
6871
value = new SimpleDoubleProperty();
6972

70-
tile1 = TileBuilder.create()
71-
.skinType(SkinType.FIRE_SMOKE)
72-
.prefSize(WIDTH, HEIGHT)
73-
.title("Tile 1")
74-
.threshold(40)
75-
.animated(false)
76-
.build();
77-
78-
tile2 = TileBuilder.create()
79-
.skinType(SkinType.FIRE_SMOKE)
80-
.prefSize(WIDTH, HEIGHT)
81-
.title("Tile 2")
82-
.threshold(40)
83-
.animated(false)
84-
.build();
85-
86-
yearBox = new VBox();
87-
for (int year = 2010 ; year < 2021 ; year++) {
88-
YearChart yearChart = new YearChart(Integer.toString(year), Color.WHITE, true, true);
89-
for (int i = 1 ; i < 13 ; i++) {
90-
yearChart.set(i, RND.nextDouble() * 2.18 - 0.8);
91-
}
92-
Label yearLabel = new Label(yearChart.getText());
93-
yearLabel.setAlignment(Pos.CENTER_LEFT);
94-
yearLabel.setPrefWidth(40);
95-
HBox hBox = new HBox(5, yearLabel, yearChart);
96-
hBox.setAlignment(Pos.CENTER_LEFT);
97-
yearBox.getChildren().add(hBox);
98-
}
73+
tile = TileBuilder.create()
74+
.skinType(SkinType.BAR_CHART)
75+
.prefSize(WIDTH, HEIGHT)
76+
.title("Tile 1")
77+
.animated(false)
78+
.build();
79+
80+
9981

10082

10183
lastTimerCall = System.nanoTime();
10284
timer = new AnimationTimer() {
10385
@Override public void handle(final long now) {
10486
if (now > lastTimerCall + 5_000_000_000l) {
105-
tile1.setValue(RND.nextDouble() * tile1.getRange() + tile1.getMinValue());
106-
tile2.setValue(RND.nextDouble() * tile2.getRange() + tile2.getMinValue());
87+
tile.setValue(RND.nextDouble() * tile.getRange() + tile.getMinValue());
10788
lastTimerCall = now;
10889
}
10990
}
11091
};
11192
}
11293

11394
@Override public void start(Stage stage) {
114-
//StackPane pane = new StackPane(yearBox);
115-
HBox pane = new HBox(20, tile1, tile2);
95+
StackPane pane = new StackPane(tile);
11696
pane.setPadding(new Insets(10));
11797

11898
Scene scene = new Scene(pane);
@@ -121,11 +101,19 @@ public class Test extends Application {
121101
stage.setScene(scene);
122102
stage.show();
123103

104+
List<BarChartItem> items = new ArrayList<>();
105+
items.add(new BarChartItem("JDK17", 14, Tile.BLUE));
106+
items.add(new BarChartItem("JDK11", 23, Tile.BLUE));
107+
items.add(new BarChartItem("JDK8", 10, Tile.BLUE));
108+
Platform.runLater(() -> {
109+
tile.setBarChartItems(items);
110+
});
111+
124112
// Calculate number of nodes
125113
calcNoOfNodes(pane);
126114
System.out.println(noOfNodes + " Nodes in SceneGraph");
127115

128-
timer.start();
116+
//timer.start();
129117
}
130118

131119
@Override public void stop() {

src/main/java/eu/hansolo/tilesfx/skins/BarChartTileSkin.java

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import eu.hansolo.tilesfx.events.TileEvent.EventType;
2525
import eu.hansolo.tilesfx.fonts.Fonts;
2626
import eu.hansolo.tilesfx.tools.Helper;
27+
import eu.hansolo.tilesfx.tools.PrettyListView;
2728
import javafx.application.Platform;
2829
import javafx.beans.InvalidationListener;
2930
import javafx.collections.WeakListChangeListener;
@@ -34,6 +35,7 @@
3435
import javafx.scene.text.Font;
3536
import javafx.scene.text.Text;
3637

38+
import java.util.Collections;
3739
import java.util.Comparator;
3840
import java.util.HashMap;
3941
import java.util.List;
@@ -47,7 +49,7 @@
4749
public class BarChartTileSkin extends TileSkin {
4850
private Text titleText;
4951
private Text text;
50-
private Pane barChartPane;
52+
private PrettyListView<BarChartItem> barChartPane;
5153
private ChartDataEventListener updateHandler;
5254
private InvalidationListener paneSizeListener;
5355
private Map<BarChartItem, EventHandler<MouseEvent>> handlerMap;
@@ -83,8 +85,8 @@ public BarChartTileSkin(final Tile TILE) {
8385
item.setFormatString(formatString);
8486
}
8587
});
86-
barChartPane = new Pane();
87-
barChartPane.getChildren().addAll(tile.getBarChartItems());
88+
barChartPane = new PrettyListView<>();
89+
barChartPane.getItems().addAll(tile.getBarChartItems());
8890

8991
sortItems();
9092

@@ -105,7 +107,7 @@ public BarChartTileSkin(final Tile TILE) {
105107
while (change.next()) {
106108
if (change.wasAdded()) {
107109
change.getAddedSubList().forEach(addedItem -> {
108-
barChartPane.getChildren().add(addedItem);
110+
barChartPane.getItems().add(addedItem);
109111
addedItem.addChartDataEventListener(updateHandler);
110112
EventHandler<MouseEvent> clickHandler = e -> tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, addedItem.getChartData()));
111113
handlerMap.put(addedItem, clickHandler);
@@ -116,7 +118,7 @@ public BarChartTileSkin(final Tile TILE) {
116118
change.getRemoved().forEach(removedItem -> {
117119
removedItem.removeChartDataEventListener(updateHandler);
118120
removedItem.removeEventHandler(MouseEvent.MOUSE_PRESSED, handlerMap.get(removedItem));
119-
barChartPane.getChildren().remove(removedItem);
121+
barChartPane.getItems().remove(removedItem);
120122
});
121123
updateChart();
122124
}
@@ -169,28 +171,7 @@ private void sortItems() {
169171

170172
// ******************** Resizing ******************************************
171173
private void updateChart() {
172-
Platform.runLater(() -> {
173-
List<BarChartItem> items = tile.getBarChartItems();
174-
int noOfItems = items.size();
175-
if (noOfItems == 0) { return; }
176-
double maxValue = tile.getMaxValue();
177-
double maxY = barChartPane.getLayoutBounds().getMaxY();
178-
double itemHeight = items.get(0).getPrefHeight();
179-
double factorY = Helper.clamp(itemHeight, itemHeight * 1.1, 0.13 * size);
180-
for (int i = 0 ; i < noOfItems ; i++) {
181-
BarChartItem item = items.get(i);
182-
double y = i * factorY;
183-
if ((y + itemHeight) < maxY) {
184-
item.setMaxValue(maxValue);
185-
Helper.enableNode(item, true);
186-
item.relocate(0, y);
187-
} else {
188-
Helper.enableNode(item, false);
189-
}
190-
}
191-
long noOfVisibleItems = items.stream().filter(item -> item.isVisible()).count();
192-
tile.showLowerRightRegion(noOfVisibleItems != noOfItems);
193-
});
174+
Collections.sort(barChartPane.getItems(), Comparator.comparing(BarChartItem::getValue).reversed());
194175
}
195176

196177
@Override protected void resizeStaticText() {
@@ -224,8 +205,7 @@ private void updateChart() {
224205

225206
private void resizeItems() {
226207
double itemHeight = Helper.clamp(30, 72, height * 0.14);
227-
barChartPane.getChildren().forEach(node -> {
228-
BarChartItem item = (BarChartItem) node;
208+
barChartPane.getItems().forEach(item -> {
229209
item.setParentSize(width, height);
230210
item.setPrefSize(width, itemHeight);
231211
item.setMaxSize(width, itemHeight);

src/main/java/eu/hansolo/tilesfx/skins/LeaderBoardTileSkin.java

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,19 @@
2323
import eu.hansolo.tilesfx.events.TileEvent;
2424
import eu.hansolo.tilesfx.fonts.Fonts;
2525
import eu.hansolo.tilesfx.tools.Helper;
26-
import javafx.application.Platform;
26+
import eu.hansolo.tilesfx.tools.PrettyListView;
2727
import javafx.beans.InvalidationListener;
28-
import javafx.collections.ListChangeListener;
2928
import javafx.collections.WeakListChangeListener;
3029
import javafx.event.EventHandler;
3130
import javafx.scene.input.MouseEvent;
32-
import javafx.scene.layout.Pane;
3331
import javafx.scene.text.Font;
3432
import javafx.scene.text.Text;
3533

34+
import java.util.Collections;
3635
import java.util.Comparator;
3736
import java.util.HashMap;
3837
import java.util.List;
3938
import java.util.Map;
40-
import java.util.stream.Collectors;
4139

4240

4341
/**
@@ -46,7 +44,7 @@
4644
public class LeaderBoardTileSkin extends TileSkin {
4745
private Text titleText;
4846
private Text text;
49-
private Pane leaderBoardPane;
47+
private PrettyListView<LeaderBoardItem> leaderBoardPane;
5048
private ChartDataEventListener updateHandler;
5149
private InvalidationListener paneSizeListener;
5250
private Map<LeaderBoardItem, EventHandler<MouseEvent>> handlerMap;
@@ -76,8 +74,8 @@ public LeaderBoardTileSkin(final Tile TILE) {
7674

7775
tile.getLeaderBoardItems().forEach(item -> item.setItemSortingTopic(tile.getItemSortingTopic()));
7876

79-
leaderBoardPane = new Pane();
80-
leaderBoardPane.getChildren().addAll(tile.getLeaderBoardItems());
77+
leaderBoardPane = new PrettyListView();
78+
leaderBoardPane.getItems().addAll(tile.getLeaderBoardItems());
8179

8280
sortItems();
8381

@@ -132,13 +130,13 @@ private void registerItemListeners() {
132130
EventHandler<MouseEvent> clickHandler = e -> tile.fireTileEvent(new TileEvent(TileEvent.EventType.SELECTED_CHART_DATA, addedItem.getChartData()));
133131
handlerMap.put(addedItem, clickHandler);
134132
addedItem.addEventHandler(MouseEvent.MOUSE_PRESSED, clickHandler);
135-
leaderBoardPane.getChildren().add(addedItem);
133+
leaderBoardPane.getItems().add(addedItem);
136134
});
137135
} else if (change.wasRemoved()) {
138136
change.getRemoved().forEach(removedItem -> {
139137
removedItem.removeChartDataEventListener(updateHandler);
140138
removedItem.removeEventHandler(MouseEvent.MOUSE_PRESSED, handlerMap.get(removedItem));
141-
leaderBoardPane.getChildren().remove(removedItem);
139+
leaderBoardPane.getItems().remove(removedItem);
142140
});
143141
}
144142
}
@@ -187,26 +185,7 @@ private void sortItems() {
187185

188186
// ******************** Resizing ******************************************
189187
private void updateChart() {
190-
Platform.runLater(() -> {
191-
List<LeaderBoardItem> items = tile.getLeaderBoardItems();
192-
int noOfItems = items.size();
193-
if (noOfItems == 0) { return; }
194-
double maxY = leaderBoardPane.getLayoutBounds().getMaxY();
195-
double itemHeight = Helper.clamp(30, 72, height * 0.14);
196-
double factorY = Helper.clamp(itemHeight, itemHeight * 1.1, 0.13 * size);
197-
for (int i = 0 ; i < noOfItems ; i++) {
198-
LeaderBoardItem item = items.get(i);
199-
double y = i * factorY;
200-
if ((y + itemHeight) < maxY) {
201-
Helper.enableNode(item, true);
202-
item.relocate(0, y);
203-
} else {
204-
Helper.enableNode(item, false);
205-
}
206-
}
207-
long noOfVisibleItems = items.stream().filter(item -> item.isVisible()).count();
208-
tile.showLowerRightRegion(noOfVisibleItems != noOfItems);
209-
});
188+
Collections.sort(leaderBoardPane.getItems(), Comparator.comparing(LeaderBoardItem::getValue).reversed());
210189
}
211190

212191
@Override protected void resizeStaticText() {
@@ -240,8 +219,7 @@ private void updateChart() {
240219

241220
private void resizeItems() {
242221
double itemHeight = Helper.clamp(30, 72, height * 0.14);
243-
leaderBoardPane.getChildren().forEach(node -> {
244-
LeaderBoardItem item = (LeaderBoardItem) node;
222+
leaderBoardPane.getItems().forEach(item -> {
245223
item.setParentSize(width, height);
246224
item.setPrefSize(width, itemHeight);
247225
item.setMaxSize(width, itemHeight);

src/main/java/eu/hansolo/tilesfx/tools/Helper.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,18 +307,18 @@
307307
* Created by hansolo on 11.12.15.
308308
*/
309309
public class Helper {
310-
private static final double EPSILON = 1E-6;
311-
private static final String HIRES_COUNTRY_PROPERTIES = "eu/hansolo/tilesfx/highres.properties";
312-
private static final String LORES_COUNTRY_PROPERTIES = "eu/hansolo/tilesfx/lowres.properties";
313-
private static Properties hiresCountryProperties;
314-
private static Properties loresCountryProperties;
315-
316-
public static final double MAP_WIDTH = 1009.1149817705154 - 1.154000163078308;
317-
public static final double MAP_HEIGHT = 665.2420043945312;
318-
public static final double MAP_OFFSET_X = -MAP_WIDTH * 0.0285;
319-
public static final double MAP_OFFSET_Y = MAP_HEIGHT * 0.195;
320-
321-
public static final double MIN_FONT_SIZE = 5;
310+
private static final double EPSILON = 1E-6;
311+
private static final String HIRES_COUNTRY_PROPERTIES = "eu/hansolo/tilesfx/highres.properties";
312+
private static final String LORES_COUNTRY_PROPERTIES = "eu/hansolo/tilesfx/lowres.properties";
313+
private static Properties hiresCountryProperties;
314+
private static Properties loresCountryProperties;
315+
316+
public static final double MAP_WIDTH = 1009.1149817705154 - 1.154000163078308;
317+
public static final double MAP_HEIGHT = 665.2420043945312;
318+
public static final double MAP_OFFSET_X = -MAP_WIDTH * 0.0285;
319+
public static final double MAP_OFFSET_Y = MAP_HEIGHT * 0.195;
320+
321+
public static final double MIN_FONT_SIZE = 5;
322322

323323
public static final CountryGroup AMERICAS = new CountryGroup("AMERICAS", AI, AG, AR, AW, BS, BB, BZ, BM, BO, BR, CA, KY, CL, CO, CR, CU, DM, DO, EC, SV, GF, GD, GP, GT, GY, HT, HN, JM, MQ, MX, MS, NI, PA, PY, PE, PR, BL, KN, LC, MF, PM, VC, SR, TT, TC, US, UY, VE, VG, VI);
324324
public static final CountryGroup APAC = new CountryGroup("APAC", AS, AU, BD, BN, BT, CC, CK, CN, CX, FJ, FM, GU, HK, ID, IN, IO, JP, KH, KI, KP, KR, LA, LK, MH, MM, MN, MO, MP, MV, MY, NC, NF, NP, NR, NU, NZ, PF, PG, PH, PK, PN, PW, SB, SG, TH, TK, TL, TO, TV, TW, VN, VU, WF, WS);

0 commit comments

Comments
 (0)