/* * Copyright 2016 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.uberfire.ext.widgets.common.client.menu; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.IsWidget; import org.gwtbootstrap3.client.ui.AnchorListItem; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.ButtonGroup; import org.gwtbootstrap3.client.ui.Divider; import org.gwtbootstrap3.client.ui.DropDownMenu; import org.gwtbootstrap3.client.ui.constants.ButtonSize; import org.gwtbootstrap3.client.ui.constants.IconType; import org.gwtbootstrap3.client.ui.constants.Pull; import org.gwtbootstrap3.client.ui.constants.Toggle; import org.uberfire.ext.widgets.common.client.resources.i18n.CommonConstants; import org.uberfire.workbench.model.menu.MenuFactory; import org.uberfire.workbench.model.menu.MenuItem; import org.uberfire.workbench.model.menu.impl.BaseMenuCustom; public class RefreshSelectorMenuBuilder implements MenuFactory.CustomMenuBuilder { private final CommonConstants constants = CommonConstants.INSTANCE; private final DropDownMenu menuDropDownMenu = GWT.create(DropDownMenu.class); private final Button menuButton = GWT.create(Button.class); private final ButtonGroup buttonGroup = GWT.create(ButtonGroup.class); private SupportsRefreshInterval supportsRefreshInterval; public RefreshSelectorMenuBuilder(final SupportsRefreshInterval supportsRefreshInterval) { this.supportsRefreshInterval = supportsRefreshInterval; setupMenuButton(); setupMenuDropDown(); setupMenuButtonGroup(); } @Override public void push(MenuFactory.CustomMenuBuilder element) { } @Override public MenuItem build() { return new BaseMenuCustom<IsWidget>() { @Override public IsWidget build() { return buttonGroup; } @Override public boolean isEnabled() { return true; } @Override public void setEnabled(boolean enabled) { } }; } protected void setupMenuButtonGroup() { buttonGroup.add(menuButton); buttonGroup.add(menuDropDownMenu); } protected void setupMenuButton() { menuButton.setDataToggle(Toggle.DROPDOWN); menuButton.setIcon(IconType.COG); menuButton.setTitle(constants.AutoRefresh()); menuButton.setSize(ButtonSize.SMALL); } protected void setupMenuDropDown() { menuDropDownMenu.setPull(Pull.RIGHT); } protected AnchorListItem createTimeSelector(int time, String name, int configuredSeconds, final AnchorListItem refreshDisableButton) { final AnchorListItem oneMinuteRadioButton = GWT.create(AnchorListItem.class); oneMinuteRadioButton.setText(name); oneMinuteRadioButton.setIconFixedWidth(true); final int selectedRefreshTime = time; if (configuredSeconds == selectedRefreshTime) { oneMinuteRadioButton.setIcon(IconType.CHECK); } oneMinuteRadioButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { oneMinuteRadioButton.setIcon(IconType.CHECK); supportsRefreshInterval.onUpdateRefreshInterval(true, selectedRefreshTime); refreshDisableButton.setActive(false); refreshDisableButton.setEnabled(true); refreshDisableButton.setText(constants.Disable_autorefresh()); } }); return oneMinuteRadioButton; } public void loadOptions(int configuredSeconds) { final AnchorListItem resetButton = new AnchorListItem(constants.Disable_autorefresh()); if (configuredSeconds > 10) { supportsRefreshInterval.onUpdateRefreshInterval(true, configuredSeconds); resetButton.setEnabled(true); } else { supportsRefreshInterval.onUpdateRefreshInterval(false, 0); resetButton.setEnabled(false); resetButton.setText(constants.Autorefresh_Disabled()); } final AnchorListItem oneMinuteRadioButton = createTimeSelector(60, "1 " + constants.Minute(), configuredSeconds, resetButton); final AnchorListItem fiveMinuteRadioButton = createTimeSelector(300, "5 " + constants.Minutes(), configuredSeconds, resetButton); final AnchorListItem tenMinuteRadioButton = createTimeSelector(600, "10 " + constants.Minutes(), configuredSeconds, resetButton); menuDropDownMenu.add(oneMinuteRadioButton); menuDropDownMenu.add(fiveMinuteRadioButton); menuDropDownMenu.add(tenMinuteRadioButton); oneMinuteRadioButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { fiveMinuteRadioButton.setIcon(null); tenMinuteRadioButton.setIcon(null); } }); fiveMinuteRadioButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { oneMinuteRadioButton.setIcon(null); tenMinuteRadioButton.setIcon(null); } }); tenMinuteRadioButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { oneMinuteRadioButton.setIcon(null); fiveMinuteRadioButton.setIcon(null); } }); resetButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { supportsRefreshInterval.onUpdateRefreshInterval(false, 0); resetButton.setActive(false); resetButton.setEnabled(false); resetButton.setText(constants.Autorefresh_Disabled()); oneMinuteRadioButton.setIcon(null); fiveMinuteRadioButton.setIcon(null); tenMinuteRadioButton.setIcon(null); } }); menuDropDownMenu.add(new Divider()); menuDropDownMenu.add(resetButton); } public interface SupportsRefreshInterval { void onUpdateRefreshInterval(boolean enableAutoRefresh, int newInterval); } }