package views;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ViewsDemo extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
    	// Set listView
    	ListView<String> listView = new ListView<>();
    	listView.getItems().add("Option 1");
    	listView.getItems().add("Option 2");
    	listView.getItems().addAll("Option 3", "Option 4");
        listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

    	//Button
        Button lvButton = new Button("Ok");
        lvButton.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				String message = "Selected options:\n";
				
				ObservableList<String> selectedItems = listView.getSelectionModel().getSelectedItems();
				for(String m: selectedItems) {
		            message += m + "\n";
				}
				
		        System.out.println(message);
			}
        });

        //Layout
        VBox lvLayout = new VBox(10);
        lvLayout.setPadding(new Insets(20, 20, 20, 20));
        lvLayout.getChildren().addAll(listView, lvButton);
        
        //----------------------------------------------------
        // Set treeView
        TreeItem<String> rootItem = new TreeItem<String> ("Main Menu");
        rootItem.setExpanded(true);
        
        TreeItem<String> subItem1 = new TreeItem<String> ("Sub Menu 1");
        TreeItem<String> subItem2 = new TreeItem<String> ("Sub Menu 2");
        TreeItem<String> subItem3 = new TreeItem<String> ("Sub Menu 3");
        rootItem.getChildren().add(subItem1);
        rootItem.getChildren().add(subItem2);
        rootItem.getChildren().add(subItem3);
        
        TreeItem<String> subSubItem1 = new TreeItem<String> ("Sub Sub Menu 1");
        TreeItem<String> subSubItem2 = new TreeItem<String> ("Sub Sub Menu 2");
        subItem2.getChildren().add(subSubItem1);
        subItem2.getChildren().add(subSubItem2);
                
        TreeView<String> treeView = new TreeView<String> (rootItem); 
        treeView.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) -> {
            if (v != null)
                System.out.println("v = " + v.getValue());
            if (oldValue != null)
                System.out.println("oldValue = " + newValue.getValue());
            if (newValue != null)
                System.out.println("newValue = " + newValue.getValue());
        });
        
       	//Button
        Button tvButton = new Button("Ok");
        tvButton.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				String message = "Selected options:\n";
				
				ObservableList<TreeItem<String>> selectedItems = treeView.getSelectionModel().getSelectedItems();
				for(TreeItem<String> m: selectedItems) {
		            message += m.getValue() + "\n";
				}
				
		        System.out.println(message);
			}
        });

        //Layout
        VBox tvLayout = new VBox(10);
        tvLayout.setPadding(new Insets(20, 20, 20, 20));
        tvLayout.getChildren().addAll(treeView, tvButton);
        
        //----------------------------------------------------
        
        HBox layout = new HBox(20);
        layout.getChildren().add(lvLayout);
        layout.getChildren().add(tvLayout);
        primaryStage.setTitle("Views Demo");
        primaryStage.setScene(new Scene(layout));
        primaryStage.show();
    }
}

