package de.calette.mephisto3.ui; import de.calette.mephisto3.Mephisto3; import de.calette.mephisto3.control.ControlListener; import de.calette.mephisto3.control.ServiceControlEvent; import de.calette.mephisto3.control.ServiceController; import de.calette.mephisto3.control.ServiceState; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Orientation; import javafx.scene.control.ScrollBar; import javafx.scene.layout.BorderPane; /** * The footer only contains the scrollbar, indicating * the position of the current selection, e.g. for radio stations. */ public class ServiceScroller extends BorderPane implements ControlListener { private ScrollBar sc; public ServiceScroller() { setMaxWidth(Mephisto3.WIDTH); sc = new ScrollBar(); sc.setOrientation(Orientation.HORIZONTAL); //this will hide the already invisible scroll buttons sc.setPadding(new Insets(0, -20, 0, -20)); sc.setId("scroller"); sc.setMin(0); sc.setVisibleAmount(0.9); setCenter(sc); } public void showScroller() { ServiceState serviceState = ServiceController.getInstance().getServiceState(); sc.setMax(serviceState.getModels().size() - 1); sc.setValue(serviceState.getServiceIndex()); ServiceController.getInstance().addControlListener(this); } public void updateSelection() { ServiceState serviceState = ServiceController.getInstance().getServiceState(); sc.setValue(serviceState.getServiceIndex()); } public void hideScroller() { ServiceController.getInstance().removeControlListener(this); } @Override public void controlEvent(final ServiceControlEvent event) { ServiceControlEvent.EVENT_TYPE eventType = event.getEventType(); if(eventType.equals(ServiceControlEvent.EVENT_TYPE.NEXT) || eventType.equals(ServiceControlEvent.EVENT_TYPE.PREVIOUS)) { Platform.runLater(new Runnable() { @Override public void run() { final int serviceIndex = event.getServiceState().getServiceIndex(); sc.setValue(serviceIndex); } }); } } }