package com.teotigraphix.caustic.ui.controller;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.ToggleButton;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import com.google.inject.Inject;
import com.teotigraphix.caustic.mediator.ICaustkMediator;
import com.teotigraphix.caustk.application.ICaustkApplicationProvider;
public abstract class ViewStackController extends FXControllerBase implements ICaustkMediator {
@Inject
ICaustkApplicationProvider provider;
//----------------------------------
// selectedIndex
//----------------------------------
private int selectedIndex = -1;
public final int getSelectedIndex() {
return selectedIndex;
}
public final void setSelectedIndex(int value) {
if (value == selectedIndex)
return;
selectedIndex = value;
setVisibleChild(selectedIndex);
if (toggleBar != null) {
ToggleButton button = (ToggleButton)toggleBar.getChildrenUnmodifiable().get(
selectedIndex);
button.setSelected(true);
}
}
//----------------------------------
// stackPane
//----------------------------------
private StackPane stackPane;
protected StackPane getStackPane() {
return stackPane;
}
protected void setStackPane(StackPane value) {
stackPane = value;
}
//----------------------------------
// toggleBar
//----------------------------------
private Parent toggleBar;
protected Parent getToggleBar() {
return toggleBar;
}
protected void setToggleBar(Parent value) {
toggleBar = value;
// stop double selections
for (Node child : toggleBar.getChildrenUnmodifiable()) {
final ToggleButton button = (ToggleButton)child;
button.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
public void handle(final MouseEvent e) {
if (button.isSelected()) {
e.consume();
}
}
});
button.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
public void handle(final KeyEvent e) {
if (button.isSelected() && e.getCode() == KeyCode.SPACE) {
e.consume();
}
}
});
}
}
public ViewStackController() {
}
protected Node getChild(int index) {
return stackPane.getChildren().get(index);
}
protected void setVisibleChild(int index) {
for (Node node : stackPane.getChildren()) {
node.setVisible(false);
}
getChild(index).setVisible(true);
}
protected ToggleButton getButton(int index) {
return (ToggleButton)toggleBar.getChildrenUnmodifiable().get(index);
}
protected int getButtonIndex(ToggleButton button) {
return toggleBar.getChildrenUnmodifiable().indexOf(button);
}
public abstract void create(Pane root);
@Override
public void onRegister() {
// TODO Auto-generated method stub
}
}