package demos.gui.sidemenu;
import com.jfoenix.controls.JFXListView;
import demos.gui.uicomponents.*;
import io.datafx.controller.ViewController;
import io.datafx.controller.flow.Flow;
import io.datafx.controller.flow.FlowException;
import io.datafx.controller.flow.FlowHandler;
import io.datafx.controller.flow.action.ActionTrigger;
import io.datafx.controller.flow.context.FXMLViewFlowContext;
import io.datafx.controller.flow.context.ViewFlowContext;
import io.datafx.controller.util.VetoException;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javax.annotation.PostConstruct;
import java.util.Objects;
@ViewController(value = "/fxml/SideMenu.fxml", title = "Material Design Example")
public class SideMenuController {
@FXMLViewFlowContext
private ViewFlowContext context;
@FXML
@ActionTrigger("buttons")
private Label button;
@FXML
@ActionTrigger("checkbox")
private Label checkbox;
@FXML
@ActionTrigger("combobox")
private Label combobox;
@FXML
@ActionTrigger("dialogs")
private Label dialogs;
@FXML
@ActionTrigger("icons")
private Label icons;
@FXML
@ActionTrigger("listview")
private Label listview;
@FXML
@ActionTrigger("treetableview")
private Label treetableview;
@FXML
@ActionTrigger("progressbar")
private Label progressbar;
@FXML
@ActionTrigger("radiobutton")
private Label radiobutton;
@FXML
@ActionTrigger("slider")
private Label slider;
@FXML
@ActionTrigger("spinner")
private Label spinner;
@FXML
@ActionTrigger("textfield")
private Label textfield;
@FXML
@ActionTrigger("togglebutton")
private Label togglebutton;
@FXML
@ActionTrigger("popup")
private Label popup;
@FXML
@ActionTrigger("svgLoader")
private Label svgLoader;
@FXML
@ActionTrigger("pickers")
private Label pickers;
@FXML
@ActionTrigger("masonry")
private Label masonry;
@FXML
@ActionTrigger("scrollpane")
private Label scrollpane;
@FXML
private JFXListView<Label> sideList;
/**
* init fxml when loaded.
*/
@PostConstruct
public void init() {
Objects.requireNonNull(context, "context");
FlowHandler contentFlowHandler = (FlowHandler) context.getRegisteredObject("ContentFlowHandler");
sideList.propagateMouseEventsToParent();
sideList.getSelectionModel().selectedItemProperty().addListener((o, oldVal, newVal) -> {
if (newVal != null) {
try {
contentFlowHandler.handle(newVal.getId());
} catch (VetoException exc) {
exc.printStackTrace();
} catch (FlowException exc) {
exc.printStackTrace();
}
}
});
Flow contentFlow = (Flow) context.getRegisteredObject("ContentFlow");
bindNodeToController(button, ButtonController.class, contentFlow, contentFlowHandler);
bindNodeToController(checkbox, CheckboxController.class, contentFlow, contentFlowHandler);
bindNodeToController(combobox, ComboBoxController.class, contentFlow, contentFlowHandler);
bindNodeToController(dialogs, DialogController.class, contentFlow, contentFlowHandler);
bindNodeToController(icons, IconsController.class, contentFlow, contentFlowHandler);
bindNodeToController(listview, ListViewController.class, contentFlow, contentFlowHandler);
bindNodeToController(treetableview, TreeTableViewController.class, contentFlow, contentFlowHandler);
bindNodeToController(progressbar, ProgressBarController.class, contentFlow, contentFlowHandler);
bindNodeToController(radiobutton, RadioButtonController.class, contentFlow, contentFlowHandler);
bindNodeToController(slider, SliderController.class, contentFlow, contentFlowHandler);
bindNodeToController(spinner, SpinnerController.class, contentFlow, contentFlowHandler);
bindNodeToController(textfield, TextFieldController.class, contentFlow, contentFlowHandler);
bindNodeToController(togglebutton, ToggleButtonController.class, contentFlow, contentFlowHandler);
bindNodeToController(popup, PopupController.class, contentFlow, contentFlowHandler);
bindNodeToController(svgLoader, SVGLoaderController.class, contentFlow, contentFlowHandler);
bindNodeToController(pickers, PickersController.class, contentFlow, contentFlowHandler);
bindNodeToController(masonry, MasonryPaneController.class, contentFlow, contentFlowHandler);
bindNodeToController(scrollpane, ScrollPaneController.class, contentFlow, contentFlowHandler);
}
private void bindNodeToController(Node node, Class<?> controllerClass, Flow flow, FlowHandler flowHandler) {
flow.withGlobalLink(node.getId(), controllerClass);
}
}