Gilad Chaplik has uploaded a new change for review. Change subject: webadmin: cluster policy look & feel enhancements ......................................................................
webadmin: cluster policy look & feel enhancements Adding dnd functionality to clsuter policy dialog. Signed-off-by: Gilad Chaplik <[email protected]> Change-Id: Ie321547211217e837c8fe7b57866ef741d4a29e0 --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/scheduling/NewClusterPolicyModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.ui.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/FunctionPolicyUnitPanel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitListPanel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitPanel.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitStyle.java 8 files changed, 319 insertions(+), 80 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/17371/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/scheduling/NewClusterPolicyModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/scheduling/NewClusterPolicyModel.java index db3b71a..d17bc4e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/scheduling/NewClusterPolicyModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/scheduling/NewClusterPolicyModel.java @@ -539,8 +539,8 @@ getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new LengthValidation(50), new AsciiNameValidation() }); getDescription().validateEntity(new IValidation[] { new LengthValidation(400), new AsciiOrNoneValidation() }); - return getName().getIsValid() && getDescription().getIsValid(); - // && getCustomPropertySheet().validate(); + return getName().getIsValid() && getDescription().getIsValid() + && getCustomPropertySheet().validate(); } private void reset() { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index fcd5d34..fab797b 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -2,8 +2,6 @@ import org.ovirt.engine.ui.common.CommonApplicationConstants; -import com.google.gwt.i18n.client.Constants.DefaultStringValue; - public interface ApplicationConstants extends CommonApplicationConstants { @DefaultStringValue("oVirt Engine Web Administration") @@ -3005,7 +3003,7 @@ @DefaultStringValue("Filter Modules") String clusterPolicyFilterLabel(); - @DefaultStringValue("Function Modules") + @DefaultStringValue("Weights Modules") String clusterPolicyFunctionLabel(); @DefaultStringValue("Load Balancer") @@ -3026,13 +3024,13 @@ @DefaultStringValue("Disabled Filters") String disabledFilters(); - @DefaultStringValue("Enabled Functions & Factors") + @DefaultStringValue("Enabled Weights & Factors") String enabledFunctions(); - @DefaultStringValue("Disabled Functions") + @DefaultStringValue("Disabled Weights") String disabledFunctions(); - @DefaultStringValue("* Use context menu to move items") + @DefaultStringValue("Drag or use context menu to make changes") String clusterPolicyExplanationMessage(); @DefaultStringValue("First") diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.java index 12e055f..47ee664 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.java @@ -23,6 +23,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels.FunctionPolicyUnitPanel; import org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels.PolicyUnitListPanel; import org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels.PolicyUnitPanel; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels.PolicyUnitStyle; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.SimpleBeanEditorDriver; @@ -77,6 +78,9 @@ @UiField(provided = true) PolicyUnitListPanel unusedFunctionPanel; + @UiField + PolicyUnitStyle style; + @Inject public ClusterPolicyPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) { super(eventBus, resources); @@ -89,10 +93,17 @@ } private void initPanels() { - usedFilterPanel = new PolicyUnitListPanel(); - unusedFilterPanel = new PolicyUnitListPanel(); - usedFunctionPanel = new PolicyUnitListPanel(); - unusedFunctionPanel = new PolicyUnitListPanel(); + usedFilterPanel = new PolicyUnitListPanel(PolicyUnitPanel.FILTER, true); + unusedFilterPanel = new PolicyUnitListPanel(PolicyUnitPanel.FILTER, false); + usedFunctionPanel = new PolicyUnitListPanel(FunctionPolicyUnitPanel.FUNCTION, true); + unusedFunctionPanel = new PolicyUnitListPanel(FunctionPolicyUnitPanel.FUNCTION, false); + } + + private void setPanelModel(NewClusterPolicyModel model) { + usedFilterPanel.setModel(model); + unusedFilterPanel.setModel(model); + usedFunctionPanel.setModel(model); + unusedFunctionPanel.setModel(model); } private void initListBoxEditors() { @@ -111,6 +122,7 @@ public void edit(final NewClusterPolicyModel model) { driver.edit(model); + setPanelModel(model); updateFilters(model); model.getFiltersChangedEvent().addListener(new IEventListener() { @@ -151,13 +163,14 @@ model, true, model.getClusterPolicy().isLocked(), + style, pair.getSecond()); usedFunctionPanel.add(functionPolicyUnitPanel); functionPolicyUnitPanel.initWidget(); } unusedFunctionPanel.clear(); for (PolicyUnit policyUnit : model.getUnusedFunctions()) { - functionPolicyUnitPanel = new FunctionPolicyUnitPanel(policyUnit, model, false, false, null); + functionPolicyUnitPanel = new FunctionPolicyUnitPanel(policyUnit, model, false, false, style, null); unusedFunctionPanel.add(functionPolicyUnitPanel); functionPolicyUnitPanel.initWidget(); } @@ -170,7 +183,8 @@ List<PolicyUnitPanel> list = new ArrayList<PolicyUnitPanel>(); PolicyUnitPanel tempPolicyUnitPanel; for (PolicyUnit policyUnit : model.getUsedFilters()) { - tempPolicyUnitPanel = new PolicyUnitPanel(policyUnit, model, true, model.getClusterPolicy().isLocked()); + tempPolicyUnitPanel = + new PolicyUnitPanel(policyUnit, model, true, model.getClusterPolicy().isLocked(), style); Integer position = model.getFilterPositionMap().get(policyUnit.getId()); if (position == null || position == 0) { list.add(tempPolicyUnitPanel); @@ -196,7 +210,7 @@ unusedFilterPanel.clear(); for (PolicyUnit policyUnit : model.getUnusedFilters()) { PolicyUnitPanel policyUnitPanel = - new PolicyUnitPanel(policyUnit, model, false, model.getClusterPolicy().isLocked()); + new PolicyUnitPanel(policyUnit, model, false, model.getClusterPolicy().isLocked(), style); unusedFilterPanel.add(policyUnitPanel); policyUnitPanel.initWidget(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.ui.xml index dd8dd28..d159f56 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/ClusterPolicyPopupView.ui.xml @@ -8,24 +8,69 @@ <ui:with field='constants' type='org.ovirt.engine.ui.webadmin.ApplicationConstants' /> - <ui:style> + <ui:style + type="org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels.PolicyUnitStyle"> .sectionLabel { font-weight: bold; font-size: 15px; - margin-top: 5px; - margin-bottom: 5px; + margin-top: 2px; + margin-bottom: 1px; margin-left: 5px; + width: 100%; } .labelStyle { - font-weight: bold; - margin-left: 5px; + font-size: 11px; + margin-left: 10px; + line-height: 25px; + } + .panelHeaderLabelStyle { + margin-left: 30%; } .policyListPanel{ background-color: #F6F6F6; - width: - 250px; + width: 97%; height: 100px; + margin: 5px 5px 5px + 5px; + } + .separator { + background-color: #CED8DF; + width: 100%; + height: 100%; + } + .unusedPolicyUnitStyle { + height: 20px; + width: 94%; + background-color: + white; + border: 1px solid + black; + margin: 4px; + cursor: move; + } + .unusedPolicyUnitStyle:HOVER { + box-shadow: 1px 1px 1px 1px rgba(33, 33, 33, 0.3); + cursor: move; + } + .usedFilterPolicyUnitStyle { + height: 20px; + width: 250px; + background-color: #CED8DF; + border: 1px + solid + black; + margin: 4px; + cursor: move; + } + .usedFilterPolicyUnitStyle:HOVER { + box-shadow: 1px 1px 1px 1px rgba(33, 33, 33, 0.3); + } + .positionLabelStyle { + height: + 20px; + width: 50px; + margin: 4px; } </ui:style> @@ -37,57 +82,81 @@ <e:EntityModelTextBoxEditor ui:field="nameEditor" /> <e:EntityModelTextBoxEditor ui:field="descriptionEditor" /> </g:HorizontalPanel> - <g:HTML> - <hr style="width:100%;" /> - </g:HTML> - <g:Label addStyleNames="{style.sectionLabel}" - text="{constants.clusterPolicyFilterLabel}" /> - <g:HorizontalPanel height="100px" width="100%"> - <g:VerticalPanel> - <g:Label addStyleNames="{style.labelStyle}" text="{constants.enabledFilters}" /> - <p:PolicyUnitListPanel ui:field="usedFilterPanel" - styleName="{style.policyListPanel}" /> - </g:VerticalPanel> - <g:VerticalPanel> - <g:Label addStyleNames="{style.labelStyle}" text="{constants.disabledFilters}" /> - <p:PolicyUnitListPanel ui:field="unusedFilterPanel" - styleName="{style.policyListPanel}" /> - </g:VerticalPanel> + <g:HorizontalPanel> + <g:Label addStyleNames="{style.sectionLabel}" + text="{constants.clusterPolicyFilterLabel}" /> + <g:Label addStyleNames="{style.labelStyle}" + text="{constants.clusterPolicyExplanationMessage}" /> </g:HorizontalPanel> - <g:Label addStyleNames="{style.labelStyle}" - text="{constants.clusterPolicyExplanationMessage}" /> <g:HTML> <hr style="width:100%;" /> </g:HTML> - <g:Label addStyleNames="{style.sectionLabel}" - text="{constants.clusterPolicyFunctionLabel}" /> <g:HorizontalPanel height="100px" width="100%"> - <g:VerticalPanel> - <g:Label addStyleNames="{style.labelStyle}" text="{constants.enabledFunctions}" /> - <p:PolicyUnitListPanel ui:field="usedFunctionPanel" - styleName="{style.policyListPanel}" /> - </g:VerticalPanel> - <g:VerticalPanel> - <g:Label addStyleNames="{style.labelStyle}" text="{constants.disabledFunctions}" /> - <p:PolicyUnitListPanel ui:field="unusedFunctionPanel" - styleName="{style.policyListPanel}" /> - </g:VerticalPanel> + <g:Cell width="50%" height="100%"> + <g:VerticalPanel width="100%" height="100%"> + <g:Label addStyleNames="{style.panelHeaderLabelStyle}" + text="{constants.enabledFilters}" /> + <p:PolicyUnitListPanel ui:field="usedFilterPanel" + styleName="{style.policyListPanel}" /> + </g:VerticalPanel> + </g:Cell> + <g:Cell width="1%" height="100%"> + <g:HTMLPanel styleName="{style.separator}"> + </g:HTMLPanel> + </g:Cell> + <g:Cell width="50%" height="100%"> + <g:VerticalPanel width="100%" height="100%"> + <g:Label addStyleNames="{style.panelHeaderLabelStyle}" + text="{constants.disabledFilters}" /> + <p:PolicyUnitListPanel ui:field="unusedFilterPanel" + styleName="{style.policyListPanel}" /> + </g:VerticalPanel> + </g:Cell> </g:HorizontalPanel> - <g:Label addStyleNames="{style.labelStyle}" - text="{constants.clusterPolicyExplanationMessage}" /> + <g:HorizontalPanel> + <g:Label addStyleNames="{style.sectionLabel}" + text="{constants.clusterPolicyFunctionLabel}" /> + <g:Label addStyleNames="{style.labelStyle}" + text="{constants.clusterPolicyExplanationMessage}" /> + </g:HorizontalPanel> <g:HTML> <hr style="width:100%;" /> </g:HTML> + <g:HorizontalPanel height="100px" width="100%"> + <g:Cell width="50%" height="100%"> + <g:VerticalPanel width="100%" height="100%"> + <g:Label addStyleNames="{style.panelHeaderLabelStyle}" + text="{constants.enabledFunctions}" /> + <p:PolicyUnitListPanel ui:field="usedFunctionPanel" + styleName="{style.policyListPanel}" /> + </g:VerticalPanel> + </g:Cell> + <g:Cell width="1%" height="100%"> + <g:HTMLPanel styleName="{style.separator}"> + </g:HTMLPanel> + </g:Cell> + <g:Cell width="50%" height="100%"> + <g:VerticalPanel width="100%" height="100%"> + <g:Label addStyleNames="{style.panelHeaderLabelStyle}" + text="{constants.disabledFunctions}" /> + <p:PolicyUnitListPanel ui:field="unusedFunctionPanel" + styleName="{style.policyListPanel}" /> + </g:VerticalPanel> + </g:Cell> + </g:HorizontalPanel> <g:Label addStyleNames="{style.sectionLabel}" text="{constants.clusterPolicyLoadBalancerLabel}" /> + <g:HTML> + <hr style="width:100%;" /> + </g:HTML> <e:ListModelListBoxOnlyEditor ui:field="loadBalanceListEditor" /> </g:FlowPanel> + <g:Label addStyleNames="{style.sectionLabel}" + text="{constants.clusterPolicyPropertiesLabel}" /> <g:HTML> <hr style="width:100%;" /> </g:HTML> - <g:Label addStyleNames="{style.sectionLabel}" - text="{constants.clusterPolicyPropertiesLabel}" /> <g:ScrollPanel height="100px"> <k:KeyValueWidget ui:field="customPropertiesSheetEditor" /> </g:ScrollPanel> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/FunctionPolicyUnitPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/FunctionPolicyUnitPanel.java index 50215d1..73abba7 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/FunctionPolicyUnitPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/FunctionPolicyUnitPanel.java @@ -13,9 +13,12 @@ import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.PushButton; +import com.google.gwt.user.client.ui.SimplePanel; public class FunctionPolicyUnitPanel extends PolicyUnitPanel { + public static final String FUNCTION = "Function"; //$NON-NLS-1$ private Integer factor; private static final ApplicationResources resources = GWT.create(ApplicationResources.class); @@ -23,21 +26,24 @@ NewClusterPolicyModel model, boolean used, boolean locked, + PolicyUnitStyle style, Integer factor) { - super(policyUnit, model, used, locked); + super(policyUnit, model, used, locked, style); this.factor = factor; } @Override public void initWidget() { HorizontalPanel panel = new HorizontalPanel(); - Label nameLabel = new Label(policyUnit.getName()); - nameLabel.setWidth("180px"); //$NON-NLS-1$ - panel.add(nameLabel); - if (used) { + Label policyUnitLabel = new Label(policyUnit.getName()); + if (!used) { + panel.setStyleName(style.unusedPolicyUnitStyle()); + panel.add(policyUnitLabel); + } else { HorizontalPanel weightPanel = new HorizontalPanel(); final Label weightLabel = new Label(String.valueOf(factor)); final PushButton downButton = new PushButton(new Image(resources.decreaseIcon())); + downButton.setWidth("12px"); //$NON-NLS-1$ downButton.addClickHandler(new ClickHandler() { @Override @@ -67,6 +73,7 @@ } } }); + upButton.setWidth("12px"); //$NON-NLS-1$ upButton.getElement().getStyle().setPadding(0, Unit.PX); if (!locked) { weightPanel.add(upButton); @@ -75,8 +82,12 @@ if (!locked) { weightPanel.add(downButton); } - weightPanel.setWidth("50px"); //$NON-NLS-1$ + weightPanel.setStyleName(style.positionLabelStyle()); panel.add(weightPanel); + Panel policyUnitLablePanel = new SimplePanel(); + policyUnitLablePanel.add(policyUnitLabel); + policyUnitLablePanel.setStyleName(style.usedFilterPolicyUnitStyle()); + panel.add(policyUnitLablePanel); } setWidget(panel); } @@ -108,4 +119,9 @@ protected void addSubMenu(MenuBar menuBar) { // No sub menu } + + @Override + protected String getType() { + return FUNCTION; + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitListPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitListPanel.java index 3886576..770d40a 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitListPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitListPanel.java @@ -1,11 +1,91 @@ package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels; -import com.google.gwt.user.client.ui.VerticalPanel; +import org.ovirt.engine.core.common.scheduling.PolicyUnit; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.NewClusterPolicyModel; -public class PolicyUnitListPanel extends VerticalPanel { +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.Style.Overflow; +import com.google.gwt.event.dom.client.DragDropEventBase; +import com.google.gwt.event.dom.client.DragLeaveEvent; +import com.google.gwt.event.dom.client.DragLeaveHandler; +import com.google.gwt.event.dom.client.DragOverEvent; +import com.google.gwt.event.dom.client.DragOverHandler; +import com.google.gwt.event.dom.client.DropEvent; +import com.google.gwt.event.dom.client.DropHandler; +import com.google.gwt.user.client.ui.FlowPanel; - private final VerticalPanel verticalPanel = new VerticalPanel(); +public class PolicyUnitListPanel extends FlowPanel { + protected NewClusterPolicyModel model; + protected String type; + protected boolean used; - public PolicyUnitListPanel() { + public PolicyUnitListPanel(String type, boolean used) { + this.used = used; + this.type = type; + getElement().getStyle().setOverflow(Overflow.AUTO); + getElement().setDraggable(Element.DRAGGABLE_FALSE); + registerToDragEvents(); + } + + private boolean doDrag(DragDropEventBase<?> event, boolean isDrop) { + String dragDropEventData = PolicyUnitPanel.getDragDropEventData(event, isDrop); + String[] split = dragDropEventData.split(" "); //$NON-NLS-1$ + if (split != null && split.length == 3) { + if (!type.equals(split[0])) { + return false; + } else if (Boolean.valueOf(split[2]).equals(used)) { + return false; + } + } + PolicyUnit policyUnit = model.getPolicyUnitsMap().get(Guid.createGuidFromString(split[1])); + if (PolicyUnitPanel.FILTER.equals(split[0])) { + if (used) { + model.addFilter(policyUnit, false, 0); + } else { + model.removeFilter(policyUnit); + } + } else if (FunctionPolicyUnitPanel.FUNCTION.equals(split[0])) { + if (used) { + model.addFunction(policyUnit); + } else { + model.removeFunction(policyUnit); + } + } + return true; + } + + private void registerToDragEvents() { + // drag over + addBitlessDomHandler(new DragOverHandler() { + + @Override + public void onDragOver(DragOverEvent event) { + // without registering to these events dnd doesn't get + } + }, DragOverEvent.getType()); + // drag leave + addBitlessDomHandler(new DragLeaveHandler() { + + @Override + public void onDragLeave(DragLeaveEvent event) { + event.preventDefault(); + doDrag(event, true); + } + }, DragLeaveEvent.getType()); + addBitlessDomHandler(new DropHandler() { + + @Override + public void onDrop(DropEvent event) { + } + }, DropEvent.getType()); + } + + public NewClusterPolicyModel getModel() { + return model; + } + + public void setModel(NewClusterPolicyModel model) { + this.model = model; } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitPanel.java index 78cde05..c80bedb 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitPanel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitPanel.java @@ -7,15 +7,22 @@ import org.ovirt.engine.ui.webadmin.ApplicationConstants; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.event.dom.client.ContextMenuHandler; +import com.google.gwt.event.dom.client.DragDropEventBase; +import com.google.gwt.event.dom.client.DragStartEvent; +import com.google.gwt.event.dom.client.DragStartHandler; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.SimplePanel; public class PolicyUnitPanel extends FocusPanel { + public static final String FILTER = "Filter"; //$NON-NLS-1$ private static final ApplicationConstants constants = GWT.create(ApplicationConstants.class); static final PopupPanel menuPopup = new PopupPanel(true); protected final PolicyUnit policyUnit; @@ -23,15 +30,20 @@ protected boolean locked; protected final NewClusterPolicyModel model; protected int position; + PolicyUnitStyle style; + + protected static String lastDragData = ""; //$NON-NLS-1$ public PolicyUnitPanel(PolicyUnit policyUnit, NewClusterPolicyModel model, - boolean used, - boolean locked) { + final boolean used, + boolean locked, + PolicyUnitStyle style) { this.policyUnit = policyUnit; this.model = model; this.used = used; this.locked = locked; + this.style = style; if (!locked) { addDomHandler(new ContextMenuHandler() { @@ -45,24 +57,49 @@ } }, ContextMenuEvent.getType()); + // enable d&d + getElement().setDraggable(Element.DRAGGABLE_TRUE); + // drag start + addBitlessDomHandler(new DragStartHandler() { + @Override + public void onDragStart(DragStartEvent event) { + PolicyUnitPanel sourcePanel = (PolicyUnitPanel) event.getSource(); + lastDragData = getType() + " " + sourcePanel.policyUnit.getId() + " " + Boolean.toString(used); //$NON-NLS-1$ //$NON-NLS-2$ + event.setData("Text", lastDragData); //$NON-NLS-1$ + // show a ghost of the widget under cursor. + NativeEvent nativeEvent = event.getNativeEvent(); + int x = nativeEvent.getClientX() - sourcePanel.getAbsoluteLeft(); + int y = nativeEvent.getClientY() - sourcePanel.getAbsoluteTop(); + event.getDataTransfer().setDragImage(sourcePanel.getElement(), x, y); + } + }, DragStartEvent.getType()); } } public void initWidget() { HorizontalPanel panel = new HorizontalPanel(); - Label nameLabel = new Label(policyUnit.getName()); - nameLabel.setWidth("180px");//$NON-NLS-1$ - panel.add(nameLabel); - if (used && position != 0) { - String labelText = null; - if (position == -1) { - labelText = constants.firstFilter(); - } else if (position == 1) { - labelText = constants.lastFilter(); - } - Label label = new Label(labelText); - label.setWidth("50px");//$NON-NLS-1$ + Label policyUnitLabel = new Label(policyUnit.getName()); + if (!used) { + panel.setStyleName(style.unusedPolicyUnitStyle()); + panel.add(policyUnitLabel); + } else { + Panel policyUnitLablePanel = new SimplePanel(); + policyUnitLablePanel.add(policyUnitLabel); + policyUnitLablePanel.setStyleName(style.usedFilterPolicyUnitStyle()); + Label label = new Label(); + label.setStyleName(style.positionLabelStyle()); panel.add(label); + if (position != 0) { + String labelText = null; + if (position == -1) { + labelText = constants.firstFilter(); + } else if (position == 1) { + labelText = constants.lastFilter(); + } + label.setText(labelText); + } + panel.setWidth("100%"); //$NON-NLS-1$ + panel.add(policyUnitLablePanel); } setWidget(panel); } @@ -138,4 +175,18 @@ this.position = position; } + protected String getType() { + return FILTER; + } + + public static String getDragDropEventData(DragDropEventBase<?> event, boolean isDrop) { + if (isDrop) { + return event.getData("Text"); //$NON-NLS-1$ + } else + { + // On most of the browsers drag, dragenter, dragleave, dragover and dragend don't have access to event's + // data + return lastDragData; + } + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitStyle.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitStyle.java new file mode 100644 index 0000000..fce17ae --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/scheduling/panels/PolicyUnitStyle.java @@ -0,0 +1,11 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.scheduling.panels; + +import com.google.gwt.resources.client.CssResource; + +public interface PolicyUnitStyle extends CssResource { + String unusedPolicyUnitStyle(); + + String usedFilterPolicyUnitStyle(); + + String positionLabelStyle(); +} -- To view, visit http://gerrit.ovirt.org/17371 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie321547211217e837c8fe7b57866ef741d4a29e0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
