Skip to content
Snippets Groups Projects
Commit 4f111ca8 authored by George Adrian Stoica's avatar George Adrian Stoica
Browse files

changed the cell UI to be generated with code and dropped the fxml

parent b168dca5
No related branches found
No related tags found
1 merge request!6Issue 11 allow user to enter and update metadata about the latlong points
package simpleex.ui;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.glassfish.grizzly.http.server.HttpServer;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import simpleex.core.LatLong;
import simpleex.core.LatLongs;
import simpleex.core.MetaData;
import simpleex.restapi.LatLongsService;
import simpleex.restserver.LatLongGrizzlyApp;
public class FxApp extends Application {
private HttpServer restServer = null;
@Override
public void start(final Stage stage) throws Exception {
URI baseUri = null;
final List<String> args = getParameters().getRaw();
if (args.size() >= 1) {
final List<String> serverArgs = new ArrayList<String>();
baseUri = URI.create(args.get(0));
serverArgs.add(baseUri.toString());
if (args.size() >= 2) {
// json of initial data
serverArgs.add(args.get(1));
}
restServer = LatLongGrizzlyApp.startServer(serverArgs.toArray(new String[serverArgs.size()]), 5);
}
final String fxml = (baseUri != null ? "FxAppUsingRest.fxml" : "FxApp.fxml");
final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxml));
final Parent root = fxmlLoader.load();
if (baseUri == null) {
// set initial data manually
final FxAppController controller = fxmlLoader.getController();
//controller.setLatLongs(new LatLongs(63.1, 11.2, 63.2, 11.0));
controller.setLatLongs(getInitialData());
} else {
final FxAppUsingRestController controller = fxmlLoader.getController();
controller.setDataAccess(new RestLatLongsDataAccess(baseUri + LatLongsService.LAT_LONG_SERVICE_PATH, controller.getObjectMapper()));
}
final Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@Override
public void stop() throws Exception {
if (restServer != null) {
restServer.shutdown();
}
super.stop();
}
/**
* Launches the app.
* @param args the command line arguments
*/
public static void main(final String[] args) {
// only needed on ios
System.setProperty("os.target", "ios");
System.setProperty("os.name", "iOS");
System.setProperty("glass.platform", "ios");
System.setProperty("targetos.name", "iOS");
launch(args);
}
/**
* Method to prepare the initial entries in the loaction list
* @return LatLongs instance with several items
*/
private LatLongs getInitialData() {
LatLongs latLongs = new LatLongs();
latLongs.addLatLong(new LatLong(63.1, 11.2));
latLongs.addLatLong(new LatLong(63.2, 11.0));
LatLong latLongWithMetaData = new LatLong(63.5, 11.5);
latLongWithMetaData.getMetaData().setProperty(MetaData.NAME_PROPERTY, "Awsome place");
latLongWithMetaData.getMetaData().setProperty(MetaData.DESCRIPTION_PROPERTY, "Lorem ipsum dolor sit amet,"
+ " consectetur adipiscing elit. Nulla placerat urna non aliquet imperdiet. Nullam tincidunt felis "
+ "vel sem blandit viverra. Etiam non volutpat erat. In hac habitasse platea dictumst. In lacus quam, "
+ "rutrum vel malesuada non, molestie eu velit. Donec ut vulputate tortor, id convallis enim. Mauris "
+ "et ipsum volutpat, dictum risus sed, aliquet sapien. Nam congue fermentum porta. Nullam non "
+ "odio consequat, laoreet est eget, egestas dui. Aliquam suscipit elit non nisi sagittis, nec "
+ "ultrices leo condimentum. Maecenas vel ligula nec mi feugiat volutpat. Aenean semper nisi sed"
+ " tortor maximus tristique. Vestibulum at mauris massa. Nulla laoreet, velit eu lobortis efficitur, "
+ "tortor sem molestie massa, at pellentesque tortor elit a nibh. In vel orci vitae magna rhoncus pulvinar "
+ "sit amet id erat.");
latLongs.addLatLong(latLongWithMetaData);
return latLongs;
}
}
package simpleex.ui;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.glassfish.grizzly.http.server.HttpServer;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import simpleex.core.LatLong;
import simpleex.core.LatLongs;
import simpleex.core.MetaData;
import simpleex.restapi.LatLongsService;
import simpleex.restserver.LatLongGrizzlyApp;
public class FxApp extends Application {
private HttpServer restServer = null;
@Override
public void start(final Stage stage) throws Exception {
URI baseUri = null;
final List<String> args = getParameters().getRaw();
if (args.size() >= 1) {
final List<String> serverArgs = new ArrayList<String>();
baseUri = URI.create(args.get(0));
serverArgs.add(baseUri.toString());
if (args.size() >= 2) {
// json of initial data
serverArgs.add(args.get(1));
}
restServer = LatLongGrizzlyApp.startServer(serverArgs.toArray(new String[serverArgs.size()]), 5);
}
final String fxml = (baseUri != null ? "FxAppUsingRest.fxml" : "FxApp.fxml");
final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxml));
final Parent root = fxmlLoader.load();
if (baseUri == null) {
// set initial data manually
final FxAppController controller = fxmlLoader.getController();
//controller.setLatLongs(new LatLongs(63.1, 11.2, 63.2, 11.0));
controller.setLatLongs(getInitialData());
} else {
final FxAppUsingRestController controller = fxmlLoader.getController();
controller.setDataAccess(new RestLatLongsDataAccess(baseUri + LatLongsService.LAT_LONG_SERVICE_PATH, controller.getObjectMapper()));
}
final Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@Override
public void stop() throws Exception {
if (restServer != null) {
restServer.shutdown();
}
super.stop();
}
/**
* Launches the app.
* @param args the command line arguments
*/
public static void main(final String[] args) {
// only needed on ios
System.setProperty("os.target", "ios");
System.setProperty("os.name", "iOS");
System.setProperty("glass.platform", "ios");
System.setProperty("targetos.name", "iOS");
launch(args);
}
/**
* Method to prepare the initial entries in the loaction list
* @return LatLongs instance with several items
*/
private LatLongs getInitialData() {
LatLongs latLongs = new LatLongs();
latLongs.addLatLong(new LatLong(63.1, 11.2));
latLongs.addLatLong(new LatLong(63.2, 11.0));
LatLong latLongWithMetaData = new LatLong(63.5, 11.5);
latLongWithMetaData.getMetaData().setProperty(MetaData.NAME_PROPERTY, "Awsome place");
latLongWithMetaData.getMetaData().setProperty(MetaData.DESCRIPTION_PROPERTY, "Lorem ipsum dolor sit amet,"
+ " consectetur adipiscing elit. Nulla placerat urna non aliquet imperdiet. Nullam tincidunt felis "
+ "vel sem blandit viverra. Etiam non volutpat erat. In hac habitasse platea dictumst. In lacus quam, "
+ "rutrum vel malesuada non, molestie eu velit. Donec ut vulputate tortor, id convallis enim. Mauris "
+ "et ipsum volutpat, dictum risus sed, aliquet sapien. Nam congue fermentum porta. Nullam non "
+ "odio consequat, laoreet est eget, egestas dui. Aliquam suscipit elit non nisi sagittis, nec "
+ "ultrices leo condimentum. Maecenas vel ligula nec mi feugiat volutpat. Aenean semper nisi sed"
+ " tortor maximus tristique. Vestibulum at mauris massa. Nulla laoreet, velit eu lobortis efficitur, "
+ "tortor sem molestie massa, at pellentesque tortor elit a nibh. In vel orci vitae magna rhoncus pulvinar "
+ "sit amet id erat.");
latLongWithMetaData.getMetaData().addTags("tag 1","tag 2","a much longer tag 3");
latLongWithMetaData.getMetaData().setProperty("custom property 1", "this is the value for custom property 1");
latLongWithMetaData.getMetaData().setIntegerProperty("custom property 2 (int)", 13);
latLongWithMetaData.getMetaData().setDoubleProperty("custom property 3 (double)", 35.13);
latLongWithMetaData.getMetaData().setBooleanProperty("custom property 4 (boolean)", false);
latLongs.addLatLong(latLongWithMetaData);
return latLongs;
}
}
......@@ -21,7 +21,7 @@ public class LatLongCell extends ListCell<LatLong> {
} else {
LatLongCellController latLongCellController = new LatLongCellController();
latLongCellController.setLatLong(location);
setGraphic(latLongCellController.getCellView());
setGraphic(latLongCellController.getCellView(this.isSelected()));
setPrefHeight(Region.USE_COMPUTED_SIZE);
//setPrefHeight(50.0);
......
package simpleex.ui;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import java.util.Iterator;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import simpleex.core.LatLong;
import simpleex.core.MetaData;
/**
* The controller for the renderer in the ListView cells
* containing the locations
* @author Adrian Stoica
*
*/
public class LatLongCellController {
@FXML
/**
* The main container of the cell UI
*/
private Region root;
/**
* the horizontal box containing the coordinates
* and the add/edit button
*/
private HBox hBox;
/**
* The button that will allow opening the editor
* for the selected item
*/
private Button editMetadataButton;
/**
* container for the additional metadata
*/
private VBox vBox;
@FXML
/**
* the label for the name property
*/
private Label nameLabel;
@FXML
/**
* the label for the coordinates
*/
private Label coordinatesLabel;
@FXML
/**
* the label for the description
*/
private Label descriptionLabel;
/**
* the current LatLong object that needs to be displayed
*/
private LatLong latLong;
/**
* create a new controller for managing a LatLong list cell
*/
public LatLongCellController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("LatLongCell.fxml"));
fxmlLoader.setController(this);
try {
vBox = fxmlLoader.load();
} catch (IOException e) {
throw new RuntimeException(e);
}
super();
}
/**
* set the location object
* @param latLong the reference to the object to be displayed
*/
public void setLatLong(LatLong latLong) {
this.latLong = latLong;
if(latLong != null) {
coordinatesLabel.setText(latLong.toString());
if (this.latLong.hasMetaData()) {
MetaData metaData = this.latLong.getMetaData();
if(metaData.hasProperty(MetaData.NAME_PROPERTY)) {
nameLabel.setText(metaData.getProperty(MetaData.NAME_PROPERTY));
}
else {
nameLabel.setMaxHeight(0.0);
}
if(metaData.hasProperty(MetaData.DESCRIPTION_PROPERTY)) {
descriptionLabel.setText(metaData.getProperty(MetaData.DESCRIPTION_PROPERTY));
descriptionLabel.setWrapText(true);
descriptionLabel.setMaxHeight(50.0);
descriptionLabel.setManaged(true);
descriptionLabel.setMaxWidth(200.0);
}
else {
descriptionLabel.setMaxHeight(0.0);
}
vBox.autosize();
} else {
nameLabel.setVisible(false);
descriptionLabel.setVisible(false);
//nameLabel.setMaxHeight(0.0);
//descriptionLabel.setMaxHeight(0.0);
vBox.setPrefHeight(30.0);
}
/**
* prepare the cell UI
* @param selected flag indicating that the item is selected
*/
protected void prepareView(boolean selected) {
this.hBox = new HBox();
this.coordinatesLabel = new Label(this.latLong.toString());
coordinatesLabel.setPrefWidth(200.0);
this.hBox.getChildren().add(coordinatesLabel);
if(selected) {
this.editMetadataButton = new Button("...");
this.hBox.getChildren().add(editMetadataButton);
}
if(this.latLong.hasMetaData()) {
this.vBox = new VBox();
MetaData metaData = this.latLong.getMetaData();
if(metaData.hasProperty(MetaData.NAME_PROPERTY)) {
nameLabel = new Label();
nameLabel.setText(metaData.getProperty(MetaData.NAME_PROPERTY));
vBox.getChildren().add(nameLabel);
}
vBox.getChildren().add(this.hBox);
if(metaData.hasProperty(MetaData.DESCRIPTION_PROPERTY)) {
descriptionLabel = new Label();
descriptionLabel.setText(metaData.getProperty(MetaData.DESCRIPTION_PROPERTY));
descriptionLabel.setWrapText(true);
descriptionLabel.setMaxHeight(50.0);
descriptionLabel.setManaged(true);
descriptionLabel.setMaxWidth(200.0);
vBox.getChildren().add(descriptionLabel);
}
final Iterator<String> tags = metaData.tags();
if (tags.hasNext()) {
HBox tagsBox = new HBox();
tagsBox.setSpacing(5.0);
while (tags.hasNext()) {
Label tagLabel = new Label(tags.next());
tagLabel.setStyle("-fx-background-color: #43464b; \r\n" +
" -fx-text-fill: white;\r\n" +
" -fx-border-radius: 3 3 3 3; \r\n" +
" -fx-background-radius: 3 3 3 03; ");
tagLabel.setPadding(new Insets(0.0,3.0,0.0,3.0));
tagsBox.getChildren().add(tagLabel);
}
vBox.getChildren().add(tagsBox);
}
this.root = this.vBox;
} else {
this.root = this.hBox;
}
}
public Region getCellView() {
return this.vBox;
/**
* get the UI for the cell based on selection and
* the available info in the latLong object
* @param selected flag indicating that the item is selected
* @return the root container for the cell UI
*/
public Region getCellView(boolean selected) {
prepareView(selected);
return this.root;
}
}
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