Lior Vernia has uploaded a new change for review. Change subject: webadmin: VnicProfilesEditor to inherit AddRemoveRowWidget ......................................................................
webadmin: VnicProfilesEditor to inherit AddRemoveRowWidget This to promote a uniform look between these similar widgets, as well as code reuse. Change-Id: If66c23bddada57fbfd95292dc2cc1f6c8d9df19e Signed-off-by: Lior Vernia <lver...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml 9 files changed, 178 insertions(+), 176 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/20492/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java index 9b01e3d..b3781d4 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java @@ -107,14 +107,8 @@ profilesModels.add(editModel); editModel.getName().setIsChangable(false); } - if (profilesModels.isEmpty()) { - if ((Boolean) getIsVmNetwork().getEntity()) { - VnicProfileModel newProfileModel = new NewVnicProfileModel(getSourceListModel(), - getSelectedDc().getcompatibility_version(), false, getSelectedDc().getId()); - profilesModels.add(newProfileModel); - } else { - profilesModels.add(createDefaultProfile()); - } + if (profilesModels.isEmpty() && !(Boolean) getIsVmNetwork().getEntity()) { + profilesModels.add(getDefaultProfile()); } getProfiles().setItems(profilesModels); originalProfileModels = profilesModels; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java index a1abbe1..cc4e1ce 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java @@ -58,6 +58,7 @@ private ListModel profiles; private final Network network; private final ListModel sourceListModel; + private VnicProfileModel defaultProfile; public NetworkModel(ListModel sourceListModel) { @@ -130,37 +131,6 @@ onExportChanged(); updateVlanTagChangeability(); updateMtuChangeability(); - } - - protected VnicProfileModel createDefaultProfile() { - final NewVnicProfileModel newModel = - new NewVnicProfileModel(getSourceListModel(), getSelectedDc().getcompatibility_version(), false, - getSelectedDc().getId()); - - // make sure default profile's name is in sync with network's name - newModel.getName().setEntity(getName().getEntity()); - final IEventListener networkNameListener = new IEventListener() { - - @Override - public void eventRaised(Event ev, Object sender, EventArgs args) { - newModel.getName().setEntity(getName().getEntity()); - } - }; - getName().getEntityChangedEvent().addListener(networkNameListener); - - // if user overrides default name, stop tracking network's name - newModel.getName().getEntityChangedEvent().addListener(new IEventListener() { - - @Override - public void eventRaised(Event ev, Object sender, EventArgs args) { - if (!newModel.getName().getEntity().equals(getName().getEntity())) { - getName().getEntityChangedEvent().removeListener(networkNameListener); - newModel.getName().getEntityChangedEvent().removeListener(this); - } - } - }); - - return newModel; } private void initExternalProviderList() { @@ -359,6 +329,44 @@ return sourceListModel; } + public VnicProfileModel getDefaultProfile() { + if (defaultProfile == null) { + defaultProfile = createDefaultProfile(); + } + return defaultProfile; + } + + private VnicProfileModel createDefaultProfile() { + final NewVnicProfileModel newModel = + new NewVnicProfileModel(getSourceListModel(), getSelectedDc().getcompatibility_version(), false, + getSelectedDc().getId()); + + // make sure default profile's name is in sync with network's name + newModel.getName().setEntity(getName().getEntity()); + final IEventListener networkNameListener = new IEventListener() { + + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + newModel.getName().setEntity(getName().getEntity()); + } + }; + getName().getEntityChangedEvent().addListener(networkNameListener); + + // if user overrides default name, stop tracking network's name + newModel.getName().getEntityChangedEvent().addListener(new IEventListener() { + + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if (!newModel.getName().getEntity().equals(getName().getEntity())) { + getName().getEntityChangedEvent().removeListener(networkNameListener); + newModel.getName().getEntityChangedEvent().removeListener(this); + } + } + }); + + return newModel; + } + public boolean validate() { RegexValidation tempVar = new RegexValidation(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java index 2830021..706edfd 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java @@ -112,7 +112,7 @@ if (existingProfiles == null) { // first run (dialog has just been opened and default DC chosen), create default entry List<VnicProfileModel> profiles = new LinkedList<VnicProfileModel>(); - profiles.add(createDefaultProfile()); + profiles.add(getDefaultProfile()); getProfiles().setItems(profiles); } else { // not first run (user picked different DC), want to keep existing entries and update DC-related properties diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java index 709463b..c8de1d2 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java @@ -24,6 +24,10 @@ this(sourceModel, dcCompatibilityVersion, true, dcId); } + public NewVnicProfileModel(Version dcCompatibilityVersion, Guid dcId) { + this(null, dcCompatibilityVersion, dcId); + } + @Override protected void initCustomProperties() { // Do nothing diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java index c7f359f..8e75074 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java @@ -1,7 +1,12 @@ package org.ovirt.engine.ui.webadmin.section.main.presenter.popup; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkModel; +import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; @@ -19,6 +24,8 @@ void updateVisibility(); void toggleProfilesVisibility(boolean visible); + + void editProfiles(ListModel profiles, Version dcCompatibilityVersion, Guid dcId, VnicProfileModel defaultProfile); } public AbstractNetworkPopupPresenterWidget(EventBus eventBus, V view) { @@ -50,6 +57,19 @@ getView().toggleProfilesVisibility((Boolean) model.getIsVmNetwork().getEntity()); } }); + + IEventListener updateProfilesListener = new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + StoragePool dc = model.getSelectedDc(); + getView().editProfiles(model.getProfiles(), + dc.getcompatibility_version(), + dc.getId(), + model.getDefaultProfile()); + } + }; + model.getDataCenters().getSelectedItemChangedEvent().addListener(updateProfilesListener); + model.getProfiles().getItemsChangedEvent().addListener(updateProfilesListener); } @Override diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java index 0b7bcc7..6b33ff6 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java @@ -4,6 +4,8 @@ import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.common.widget.Align; @@ -22,6 +24,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkClusterModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkModel; +import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; @@ -131,7 +134,7 @@ public EntityModelTextBoxEditor networkLabel; @UiField - @Path(value = "profiles.selectedItem") + @Ignore public VnicProfilesEditor profilesEditor; @UiField @@ -371,6 +374,15 @@ profilesTab.setVisible(visible); } + @Override + public void editProfiles(ListModel profiles, + Version dcCompatibilityVersion, + Guid dcId, + VnicProfileModel defaultProfile) { + + profilesEditor.edit(profiles, dcCompatibilityVersion, dcId, defaultProfile); + } + interface WidgetStyle extends CssResource { String mtuEditor(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java index a802a28..075c2e4 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java @@ -16,13 +16,21 @@ import org.ovirt.engine.ui.common.widget.Align; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.dom.client.KeyPressEvent; +import com.google.gwt.event.dom.client.KeyPressHandler; +import com.google.gwt.event.logical.shared.HasValueChangeHandlers; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerRegistration; 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.ui.Widget; -public class VnicProfileWidget extends AbstractModelBoundPopupWidget<VnicProfileModel> { +public class VnicProfileWidget extends AbstractModelBoundPopupWidget<VnicProfileModel> implements HasValueChangeHandlers<VnicProfileModel> { interface Driver extends SimpleBeanEditorDriver<VnicProfileModel, VnicProfileWidget> { } @@ -86,9 +94,26 @@ } @Override - public void edit(VnicProfileModel model) { + public void edit(final VnicProfileModel model) { driver.edit(model); publicInfo.setVisible(model.getPublicUse().getIsAvailable()); + nameEditor.addKeyPressHandler(new KeyPressHandler() { + @Override + public void onKeyPress(KeyPressEvent event) { + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + ValueChangeEvent.fire(nameEditor.asValueBox(), nameEditor.asValueBox().getValue()); + } + }); + } + }); + nameEditor.asValueBox().addValueChangeHandler(new ValueChangeHandler<Object>() { + @Override + public void onValueChange(ValueChangeEvent<Object> event) { + ValueChangeEvent.fire(VnicProfileWidget.this, model); + } + }); } @Override @@ -96,6 +121,11 @@ return driver.flush(); } + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<VnicProfileModel> handler) { + return addHandler(handler, ValueChangeEvent.getType()); + } + interface WidgetStyle extends CssResource { String name(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java index 9cb15bb..c00ec29 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java @@ -1,156 +1,105 @@ package org.ovirt.engine.ui.webadmin.widget.vnicProfile; -import java.util.ArrayList; import java.util.Collection; -import java.util.LinkedList; -import java.util.List; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.ui.common.CommonApplicationMessages; -import org.ovirt.engine.ui.common.CommonApplicationResources; -import org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor; +import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget; +import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.profiles.NewVnicProfileModel; import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel; import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.IsEditor; -import com.google.gwt.editor.client.adapters.TakesValueEditor; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.resources.client.CssResource; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.TakesValue; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.HasConstrainedValue; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.Widget; -public class VnicProfilesEditor extends Composite implements IsEditor<TakesValueEditor<Object>>, TakesValue<Object>, HasConstrainedValue<Object> { +public class VnicProfilesEditor extends AddRemoveRowWidget<ListModel, VnicProfileModel, VnicProfileWidget> { - @Override - public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Object> handler) { - // not needed - there is no selected item because all are edited - return null; + interface Driver extends SimpleBeanEditorDriver<ListModel, VnicProfilesEditor> { } + + private final Driver driver = GWT.create(Driver.class); interface WidgetUiBinder extends UiBinder<Widget, VnicProfilesEditor> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } - @UiField - FlowPanel contentPanel; - - @UiField - WidgetStyle style; - - protected static final CommonApplicationMessages messages = GWT.create(CommonApplicationMessages.class); - protected static final CommonApplicationResources resources = GWT.create(CommonApplicationResources.class); - - private List<VnicProfileWidget> editors; + private Collection<VnicProfileModel> profiles; + private Version dcCompatibilityVersion; + private Guid dcId; + private VnicProfileModel defaultProfile; public VnicProfilesEditor() { initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); - editors = new ArrayList<VnicProfileWidget>(); + driver.initialize(this); + } + + public void edit(ListModel model, Version dcCompatibilityVersion, Guid dcId, VnicProfileModel defaultProfile) { + driver.edit(model); + profiles = (Collection<VnicProfileModel>) model.getItems(); + this.dcCompatibilityVersion = dcCompatibilityVersion; + this.dcId = dcId; + this.defaultProfile = defaultProfile; + init(model); } @Override - public void setValue(Object listModelValues) { - // not needed - there is no selected item because all are edited - } - - @Override - public void setValue(Object value, boolean fireEvents) { - // not needed - there is no selected item because all are edited - } - - @Override - public void setAcceptableValues(Collection<Object> values) { - if (values == null) { - return; - } - - editors.clear(); - contentPanel.clear(); - - for (final Object value : values) { - final Guid dcId = ((VnicProfileModel) value).getDcId(); - VnicProfileWidget vnicProfileWidget = new VnicProfileWidget(); - editors.add(vnicProfileWidget); - vnicProfileWidget.edit((VnicProfileModel) value); - - final HorizontalPanel profilePanel = new HorizontalPanel(); - - PushButton addButton = new PushButton(new Image(resources.increaseIcon())); - final PushButton remvoeButton = new PushButton(new Image(resources.decreaseIcon())); - addButton.addStyleName(style.addButtonStyle()); - remvoeButton.addStyleName(style.removeButtonStyle()); - profilePanel.add(vnicProfileWidget); - profilePanel.add(addButton); - profilePanel.add(remvoeButton); - - addButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - List models = (List<VnicProfileModel>) getValue().getItems(); - VnicProfileModel existingProfileModel = (VnicProfileModel) value; - VnicProfileModel newVnicProfileModel = new NewVnicProfileModel(existingProfileModel.getSourceModel(), - existingProfileModel.getDcCompatibilityVersion(), dcId); - models.add(models.indexOf(existingProfileModel) + 1, newVnicProfileModel); - - setAcceptableValues(models); - } - }); - - remvoeButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - List models = (List<VnicProfileModel>) getValue().getItems(); - models.remove(value); - setAcceptableValues(models); - } - }); - - profilePanel.addStyleName(style.profilePanel()); - - contentPanel.add(profilePanel); - } + public void edit(ListModel model) { + edit(model, dcCompatibilityVersion, dcId, defaultProfile); } public ListModel flush() { - // this flushes it - return getValue(); - } - - @Override - public ListModel getValue() { - List<VnicProfileModel> values = new LinkedList<VnicProfileModel>(); - for (VnicProfileWidget editor : editors) { - values.add(editor.flush()); - } - - ListModel model = new ListModel(); - model.setItems(values); + ListModel model = driver.flush(); + flush(model); return model; } @Override - public TakesValueEditor<Object> asEditor() { - return TakesConstrainedValueEditor.of(this, this, this); + protected VnicProfileWidget createWidget(VnicProfileModel value) { + VnicProfileWidget vnicProfileWidget = new VnicProfileWidget(); + vnicProfileWidget.edit(value); + return vnicProfileWidget; } - interface WidgetStyle extends CssResource { - String addButtonStyle(); + @Override + protected VnicProfileModel createGhostValue() { + return new NewVnicProfileModel(dcCompatibilityVersion, dcId); + } - String removeButtonStyle(); + @Override + protected boolean isGhost(VnicProfileModel value) { + if (value != defaultProfile) { + String name = (String) value.getName().getEntity(); + return (name == null || name.isEmpty()); + } + return false; + } - String profilePanel(); + @Override + protected void toggleGhost(VnicProfileModel value, VnicProfileWidget widget, boolean becomingGhost) { + widget.publicUseEditor.setEnabled(!becomingGhost && value.getPublicUse().getIsChangable()); + widget.networkQoSEditor.setEnabled(!becomingGhost && value.getNetworkQoS().getIsChangable()); + + // commit change to model without triggering items changed event + if (profiles != null) { + if (becomingGhost) { + profiles.remove(value); + } else if (!Linq.containsByIdentity(profiles, value)) { + profiles.add(value); + } + } + } + + @Override + protected void onRemove(VnicProfileModel value, VnicProfileWidget widget) { + super.onRemove(value, widget); + + // commit change to model without triggering items changed event + if (profiles != null) { + profiles.remove(value); + } } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml index 5c8e87a..76e07d1 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml @@ -2,19 +2,14 @@ <!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:style type="org.ovirt.engine.ui.webadmin.widget.vnicProfile.VnicProfilesEditor.WidgetStyle"> + <ui:style type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle"> .mainPanel { float: left; padding-left: 5px; margin-left: 5px; } - .profilePanel { - width: 100%; - padding-bottom: 3px; - } - - .addButtonStyle { + .buttonStyle { margin-right: 7px; width: 9px; height: 10px; @@ -23,16 +18,6 @@ margin-top: 7px; margin-left: 8px; } - - .removeButtonStyle { - margin-right: 7px; - width: 9px; - height: 10px; - padding-left: 2px; - padding-top: 2px; - margin-top: 7px; - } - </ui:style> <g:FlowPanel addStyleNames="{style.mainPanel}" > -- To view, visit http://gerrit.ovirt.org/20492 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If66c23bddada57fbfd95292dc2cc1f6c8d9df19e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Lior Vernia <lver...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches