public class DrinkScalePrompt implements SimplePrompt<Double> { private static final PromptMessages messages = PromptMessages.Util.getInstance(); private static final HelpMessages helpMessages = HelpMessages.Util.getInstance(); private static final PVector<ShepherdTour.Step> tour = TreePVector.<ShepherdTour.Step>empty() .plus( new ShepherdTour.Step( "image", "#intake24-sliding-scale-image", helpMessages.drinkScale_imageTitle(), helpMessages.drinkScale_imageDescription())) .plus( new ShepherdTour.Step( "overlay", "#intake24-sliding-scale-overlay", helpMessages.drinkScale_overlayTitle(), helpMessages.drinkScale_overlayDescription())) .plus( new ShepherdTour.Step( "label", "#intake24-sliding-scale-overlay", helpMessages.drinkScale_volumeLabelTitle(), helpMessages.drinkScale_volumeLabelDescription(), "top right", "bottom right")) .plus( new ShepherdTour.Step( "slider", "#intake24-sliding-scale-slider", helpMessages.drinkScale_sliderTitle(), helpMessages.drinkScale_sliderDescription(), "middle right", "middle left")) .plus( new ShepherdTour.Step( "lessButton", "#intake24-sliding-scale-less-button", helpMessages.drinkScale_lessButtonTitle(), helpMessages.drinkScale_lessButtonDescription())) .plus( new ShepherdTour.Step( "moreButton", "#intake24-sliding-scale-more-button", helpMessages.drinkScale_moreButtonTitle(), helpMessages.drinkScale_moreButtonDescription())) .plus( new ShepherdTour.Step( "continueButton", "#intake24-sliding-scale-continue-button", helpMessages.drinkScale_continueButtonTitle(), helpMessages.drinkScale_continueButtonDescription(), "top right", "bottom right")); private final DrinkScalePromptDef def; public DrinkScalePrompt(DrinkScalePromptDef def) { this.def = def; } @Override public FlowPanel getInterface(final Callback1<Double> onComplete) { FlowPanel content = new FlowPanel(); FlowPanel promptPanel = WidgetFactory.createPromptPanel( def.message, ShepherdTour.createTourButton(tour, DrinkScalePrompt.class.getSimpleName())); content.add(promptPanel); SlidingScaleDef ssd = new SlidingScaleDef( def.scaleDef.baseImage, def.scaleDef.overlayImage, def.scaleDef.width, def.scaleDef.height, def.scaleDef.emptyLevel, def.scaleDef.fullLevel); final Function1<Double, String> label = new Function1<Double, String>() { @Override public String apply(Double argument) { double volume = def.scaleDef.calcVolume(argument); int roundedVolume = (int) volume; NumberFormat nf = NumberFormat.getDecimalFormat(); return nf.format(roundedVolume) + " " + messages.drinkScale_volumeUnit(); } }; final SlidingScale scale = new SlidingScale(ssd, def.limit, def.initialLevel, label); content.add(scale); final Button less = WidgetFactory.createButton( def.lessLabel, new ClickHandler() { @Override public void onClick(ClickEvent event) { scale.sliderBar.setValue(scale.sliderBar.getValue() + scale.sliderBar.getStep()); /*if (scale.sliderBar.getValue() > 0.99) less.setEnabled(false); else less.setEnabled(true);*/ } }); less.getElement().setId("intake24-sliding-scale-less-button"); final Button more = WidgetFactory.createButton( def.moreLabel, new ClickHandler() { @Override public void onClick(ClickEvent event) { scale.sliderBar.setValue(scale.sliderBar.getValue() - scale.sliderBar.getStep()); /*if (scale.sliderBar.getValue() < 0.01) more.setEnabled(false); else more.setEnabled(true);*/ } }); more.getElement().setId("intake24-sliding-scale-more-button"); final Button finish = WidgetFactory.createGreenButton( def.acceptLabel, new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(scale.getValue()); } }); finish.getElement().setId("intake24-sliding-scale-continue-button"); content.add(WidgetFactory.createButtonsPanel(less, more, finish)); ShepherdTour.makeShepherdTarget( promptPanel, scale.image, scale.overlayDiv, scale.sliderBar, less, more, finish); return content; } }