Daniel Erez has uploaded a new change for review. Change subject: webadmin: introduce dropdown action button for tabs ......................................................................
webadmin: introduce dropdown action button for tabs * Created a dropdown action button for tabs. * Will be used for "Preview -> Custom..." button in snapshots sub-tab. * For illustration, see screenshot in [1]. [1] http://www.ovirt.org/Features/Single_Disk_Snapshot Change-Id: If3aab713e0ac40f5bf95d0df9a7e9eebbc61f678 Signed-off-by: Daniel Erez <[email protected]> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.ui.xml A frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/css/DropdownButtonPanel.css 3 files changed, 233 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/22777/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java new file mode 100644 index 0000000..fdcacc1 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java @@ -0,0 +1,142 @@ +package org.ovirt.engine.ui.common.widget.action; + +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.event.dom.client.MouseOutEvent; +import com.google.gwt.event.dom.client.MouseOutHandler; +import com.google.gwt.event.dom.client.MouseOverEvent; +import com.google.gwt.event.dom.client.MouseOverHandler; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.FocusPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.MenuItem; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.ToggleButton; +import org.ovirt.engine.ui.common.CommonApplicationResources; + +import java.util.List; + +public class DropdownActionButton<T> extends AbstractActionButton { + + interface WidgetUiBinder extends UiBinder<FocusPanel, DropdownActionButton> { + WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); + } + + @UiField + Style style; + + @UiField + FocusPanel container; + + @UiField(provided = true) + ToggleButton dropdownButton; + + MenuPanelPopup menuPopup; + + private final static CommonApplicationResources resources = GWT.create(CommonApplicationResources.class); + + public DropdownActionButton(List<ActionButtonDefinition<T>> actions, List selectedItems) { + initDropdownButton(); + initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); + initMenuPopup(actions, selectedItems); + addMouseHandlers(); + } + + private void initDropdownButton() { + dropdownButton = new ToggleButton(new Image(resources.triangle_down())); + dropdownButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (dropdownButton.isDown()) { + menuPopup.asPopupPanel().showRelativeToAndFitToScreen(container); + } else { + menuPopup.asPopupPanel().hide(); + } + } + }); + } + + private void initMenuPopup(List<ActionButtonDefinition<T>> actions, final List selectedItems) { + menuPopup = new MenuPanelPopup(true); + + for (final ActionButtonDefinition<T> buttonDef : actions) { + MenuItem menuItem = new MenuItem(buttonDef.getTitle(), new Command() { + @Override + public void execute() { + menuPopup.asPopupPanel().hide(); + buttonDef.onClick(selectedItems); + } + }); + menuItem.addStyleName(style.menuItem()); + updateMenuItem(menuItem, buttonDef, selectedItems); + menuPopup.getMenuBar().addItem(menuItem); + } + + menuPopup.asPopupPanel().setAutoHideEnabled(true); + menuPopup.asPopupPanel().addAutoHidePartner(dropdownButton.getElement()); + menuPopup.asPopupPanel().addCloseHandler(new CloseHandler<PopupPanel>() { + @Override + public void onClose(CloseEvent<PopupPanel> event) { + dropdownButton.setDown(false); + } + }); + } + + /** + * Ensures that the specified action button is visible or hidden and enabled or disabled as it should. + */ + void updateMenuItem(MenuItem item, ActionButtonDefinition<T> buttonDef, List selectedItems) { + item.setVisible(buttonDef.isAccessible(selectedItems) && buttonDef.isVisible(selectedItems)); + item.setEnabled(buttonDef.isEnabled(selectedItems)); + item.setTitle(buttonDef.getButtonToolTip() != null ? buttonDef.getButtonToolTip() : null); + } + + private void addMouseHandlers() { + button.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + container.removeStyleName(style.buttonMouseOver()); + container.addStyleName(style.buttonMouseOut()); + } + }); + + container.addMouseOverHandler(new MouseOverHandler() { + @Override + public void onMouseOver(MouseOverEvent event) { + if (isEnabled()) { + container.removeStyleName(style.buttonMouseOut()); + container.addStyleName(style.buttonMouseOver()); + } + } + }); + + container.addMouseOutHandler(new MouseOutHandler() { + @Override + public void onMouseOut(MouseOutEvent event) { + container.removeStyleName(style.buttonMouseOver()); + container.addStyleName(style.buttonMouseOut()); + } + }); + } + + @Override + public void setEnabled(boolean enabled) { + button.setEnabled(enabled); + dropdownButton.setEnabled(enabled); + } + + interface Style extends CssResource { + String buttonMouseOver(); + + String buttonMouseOut(); + + String menuItem(); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.ui.xml new file mode 100644 index 0000000..103eb80 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.ui.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <ui:with field='common_resources' type='org.ovirt.engine.ui.common.CommonApplicationResources' /> + + <ui:style type="org.ovirt.engine.ui.common.widget.action.DropdownActionButton.Style"> + .actionButton { + float: left; + font-size: 11px; + font-family: Arial, sans-serif; + color: #333333; + background: transparent; + padding: 0px; + border: 1px solid transparent; + } + + .buttonMouseOver { + border: 1px solid #AAAAAA !important; + cursor: pointer; + } + + .buttonMouseOut { + border: 1px solid transparent; + } + + .container { + float: left; + padding-right: 3px; + margin-right: -3px; + margin-left: 10px; + border: 1px solid transparent; + } + + .separator { + top: 12px; + margin-left: 1px; + } + + .dropdownImage { + float: right; + background: transparent; + padding: 0px; + border: 1px solid transparent; + margin-left: 2px; + line-height: 8px; + height: 12px; + } + + .menuItem { + font-size: 11px !important; + } + </ui:style> + + <g:FocusPanel ui:field="container" addStyleNames="{style.container}"> + <g:FlowPanel> + <g:ToggleButton ui:field="button" addStyleNames="{style.actionButton}"/> + <g:Image resource='{common_resources.separator}' addStyleNames="{style.separator}" /> + <g:ToggleButton ui:field="dropdownButton" addStyleNames="{style.dropdownImage}" /> + </g:FlowPanel> + </g:FocusPanel> + +</ui:UiBinder> \ No newline at end of file diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/css/DropdownButtonPanel.css b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/css/DropdownButtonPanel.css new file mode 100644 index 0000000..80751db --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/css/DropdownButtonPanel.css @@ -0,0 +1,28 @@ +@external actionPanelPopupPanel; +.actionPanelPopupPanel { + background-color: white; +} + +@external actionPanelPopupMenuBar; +.actionPanelPopupMenuBar { + background-color: white; + border: 1px solid #96B7D6; +} + +@external menuItem; +.menuItem { + color: black; + background-color: white; + cursor: pointer; + border-bottom: 1px solid #E0E9F2; +} + +@external menuItem-selected; +.menuItem-selected { + background-color: #E1E8F2; +} + +@external menuItem-disabled; +.menuItem-disabled { + color: #C0C0C0 +} \ No newline at end of file -- To view, visit http://gerrit.ovirt.org/22777 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If3aab713e0ac40f5bf95d0df9a7e9eebbc61f678 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
