package org.ovirt.engine.ui.userportal.client.modalpanels; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.network; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommon.UICommand; import org.ovirt.engine.ui.uicommon.models.SearchableListModel; import org.ovirt.engine.ui.uicommon.models.vms.VmInterfaceModel; import org.ovirt.engine.ui.userportal.client.components.NonDraggableModalPanel; import org.ovirt.engine.ui.userportal.client.components.Button; import org.ovirt.engine.ui.userportal.client.components.SelectBoxListModelBinded; import org.ovirt.engine.ui.userportal.client.components.TextItemEntityModelBinded; import org.ovirt.engine.ui.userportal.client.timers.SubTabRefreshTimer; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.CheckboxItem; import com.smartgwt.client.widgets.form.fields.SpacerItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.layout.VLayout; public class NewNICModalPanel extends NonDraggableModalPanel { final NewNICModalPanel newNICModalPanel = this; UICommand cancelCommand; public NewNICModalPanel(final SearchableListModel parentListModel, final VmInterfaceModel vmInterfaceModel) { super(320, 300, vmInterfaceModel.getTitle()); VLayout inPanel = new VLayout(); inPanel.setHeight100(); inPanel.setWidth100(); DynamicForm f = new DynamicForm(); TextItemEntityModelBinded nameTextItem = new TextItemEntityModelBinded("Name", vmInterfaceModel.getName()); SelectBoxListModelBinded networkSelectBox = new SelectBoxListModelBinded("Network", vmInterfaceModel.getNetwork(), network.class); SelectBoxListModelBinded nicTypeSelectBox = new SelectBoxListModelBinded(false, "Type", vmInterfaceModel.getNicType(), VmInterfaceType.class); if (parentListModel.getEntity() instanceof VM) { CheckboxItem specifyMacCheckBox = new CheckboxItem(); specifyMacCheckBox.setTitle("Specify custom MAC address"); specifyMacCheckBox.setValue(vmInterfaceModel.getMAC().getIsChangable()); specifyMacCheckBox.setColSpan(2); specifyMacCheckBox.setShowTitle(false); final TextItemEntityModelBinded macTextItem = new TextItemEntityModelBinded("", vmInterfaceModel.getMAC()); macTextItem.setDisabled(!vmInterfaceModel.getMAC().getIsChangable()); specifyMacCheckBox.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { Boolean specifyMac = (Boolean)((CheckboxItem)event.getSource()).getValue(); vmInterfaceModel.getMAC().setIsChangable(specifyMac); macTextItem.setDisabled(!specifyMac); } }); macTextItem.setShowTitle(false); f.setItems(nameTextItem, networkSelectBox, nicTypeSelectBox, specifyMacCheckBox, new SpacerItem(), macTextItem); } else { f.setItems(nameTextItem, networkSelectBox, nicTypeSelectBox); } f.focus(); f.setAutoFocus(true); inPanel.addMember(f); parentListModel.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { String propertyName = ((PropertyChangedEventArgs)args).PropertyName; if (propertyName.equals("Window")) { parentListModel.getPropertyChangedEvent().removeListener(this); destroy(); } } }); final UICommand saveCommand = new UICommand("OnSave", parentListModel); cancelCommand = new UICommand("Cancel", parentListModel); Button okButton = new Button("OK"); okButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { SubTabRefreshTimer.initSubTabRefreshTimer(parentListModel); saveCommand.Execute(); } }); Button cancelButton = new Button("Cancel"); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { onClose(); } }); addItem(inPanel); setFooterButtons(Alignment.RIGHT, okButton, cancelButton); subscribeProgressChangedEvent(vmInterfaceModel, nameTextItem, inPanel); } @Override public void onClose() { cancelCommand.Execute(); } }