/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.dashbuilder.renderer.client.selector; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.IsWidget; import org.dashbuilder.displayer.client.AbstractGwtDisplayerView; import org.dashbuilder.renderer.client.resources.i18n.SelectorConstants; import org.dashbuilder.renderer.client.resources.i18n.SliderConstants; import org.gwtbootstrap3.client.ui.Label; import org.gwtbootstrap3.extras.slider.client.ui.Range; import org.gwtbootstrap3.extras.slider.client.ui.RangeSlider; import org.gwtbootstrap3.extras.slider.client.ui.base.constants.HandleType; import org.gwtbootstrap3.extras.slider.client.ui.base.constants.TooltipType; public class SelectorSliderDisplayerView extends AbstractGwtDisplayerView<SelectorSliderDisplayer> implements SelectorSliderDisplayer.View { FlowPanel container = new FlowPanel(); HTML header = new HTML(); FlowPanel body = new FlowPanel(); RangeSlider slider = new RangeSlider(); HorizontalPanel inputs = new HorizontalPanel(); FlowPanel error = new FlowPanel(); @Override public void init(SelectorSliderDisplayer presenter) { super.setPresenter(presenter); super.setVisualization(container); header.setVisible(false); slider.setHandle(HandleType.ROUND); slider.setFormatter(r -> presenter.formatRange(r.getMinValue(), r.getMaxValue())); slider.addSlideStopHandler(e -> presenter.onSliderChange(e.getValue().getMinValue(), e.getValue().getMaxValue())); slider.getElement().getStyle().setWidth(100, Style.Unit.PCT); inputs.getElement().getStyle().setWidth(100, Style.Unit.PCT); body.add(slider); body.getElement().getStyle().setMarginLeft(10, Style.Unit.PX); container.add(header); container.add(body); container.add(inputs); container.add(error); } @Override public String getColumnsTitle() { return SliderConstants.INSTANCE.sliderColumnName(); } @Override public void showTitle(String title) { error.setVisible(false); header.setVisible(true); header.setText(title); } @Override public void setWidth(int width) { slider.getElement().getStyle().setWidth(width, Style.Unit.PX); inputs.getElement().getStyle().setWidth(width, Style.Unit.PX); } @Override public void margins(int top, int bottom, int left, int right) { container.getElement().getStyle().setMarginTop(top, Style.Unit.PX); container.getElement().getStyle().setMarginBottom(bottom, Style.Unit.PX); container.getElement().getStyle().setMarginLeft(left, Style.Unit.PX); container.getElement().getStyle().setMarginRight(right, Style.Unit.PX); } @Override public void setSliderEnabled(boolean enabled) { slider.setEnabled(enabled); slider.setTooltip(enabled ? TooltipType.SHOW : TooltipType.HIDE); } @Override public void showSlider(double min, double max, double step, double minSelected, double maxSelected) { slider.setMin(min); slider.setMax(max); slider.setValue(new Range(minSelected, maxSelected)); slider.setStep(step); header.setVisible(true); body.setVisible(true); error.setVisible(false); } @Override public void showInputs(IsWidget minValueEditor, IsWidget maxValueEditor) { minValueEditor.asWidget().getElement().getStyle().setMarginTop(5, Style.Unit.PX); maxValueEditor.asWidget().getElement().getStyle().setMarginTop(5, Style.Unit.PX); minValueEditor.asWidget().getElement().getStyle().setMarginBottom(5, Style.Unit.PX); maxValueEditor.asWidget().getElement().getStyle().setMarginBottom(5, Style.Unit.PX); maxValueEditor.asWidget().getElement().getStyle().setFloat(Style.Float.RIGHT); inputs.clear(); inputs.add(minValueEditor); inputs.add(maxValueEditor); header.setVisible(true); inputs.setVisible(true); error.setVisible(false); } @Override public String formatRange(String from, String to) { return SliderConstants.INSTANCE.sliderTooltip(from, to); } @Override public void textColumnsNotSupported() { header.setVisible(false); error(SliderConstants.INSTANCE.textColumnsNotSupported()); } @Override public void noData() { error(SelectorConstants.INSTANCE.selectorDisplayer_noDataAvailable()); } protected void error(String msg) { body.setVisible(false); inputs.setVisible(false); error.setVisible(true); error.clear(); error.add(new Label(msg)); } }