Tomas Jelinek has uploaded a new change for review. Change subject: frontend: introduced the detachable widgets into the VM dialogs ......................................................................
frontend: introduced the detachable widgets into the VM dialogs Wrapped the widgets which are supposed to be detachable by the detachable widgets in the VM dialgos + added the configuration needed to make this widgets detachable on places where they are supposed to be. feature page: http://www.ovirt.org/Features/Instance_Types Change-Id: I990325e4ec554f0cdd84f6a2bb8772f1d71c705f Signed-off-by: Tomas Jelinek <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolEditPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateNewPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java 6 files changed, 343 insertions(+), 171 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/25576/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java index 78590ef..e081bbf 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java @@ -5,12 +5,14 @@ import java.util.Arrays; import java.util.List; +import static com.google.gwt.dom.client.Style.Unit; import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.ImageStatus; +import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.UsbPolicy; @@ -28,7 +30,9 @@ import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.widget.Align; +import org.ovirt.engine.ui.common.widget.EntityModelDetachableWidgetWithInfo; import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; +import org.ovirt.engine.ui.common.widget.HasDetachable; import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; import org.ovirt.engine.ui.common.widget.dialog.tab.DialogTab; @@ -39,8 +43,11 @@ import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.editor.ListModelTypeAheadListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.VncKeyMapRenderer; +import org.ovirt.engine.ui.common.widget.editor.generic.DetachableLabel; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelDetachableWidget; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelDetachableWidgetWithLabel; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelRadioButtonEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxOnlyEditor; @@ -122,6 +129,8 @@ String generalTabExtendedRightWidgetWidth(); + String generalTabExtendedRightWidgetWrapperWidth(); + String cdImageEditor(); String monitorsStyles(); @@ -192,6 +201,11 @@ public ListModelListBoxEditor<VmType> vmTypeEditor; @UiField(provided = true) + @Path(value = "instanceTypes.selectedItem") + @WithElementId("instanceType") + public ListModelTypeAheadListBoxEditor<InstanceType> instanceTypesEditor; + + @UiField(provided = true) @Path(value = "isDeleteProtected.entity") @WithElementId("isDeleteProtected") public EntityModelCheckBoxEditor isDeleteProtectedEditor; @@ -213,17 +227,19 @@ protected DialogTab systemTab; @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel detachableMemSizeEditor; + @Path(value = "memSize.entity") @WithElementId("memSize") public EntityModelTextBoxEditor<Integer> memSizeEditor; - @UiField(provided = true) @Path(value = "totalCPUCores.entity") @WithElementId("totalCPUCores") public StringEntityModelTextBoxOnlyEditor totalvCPUsEditor; @UiField(provided = true) - InfoIcon totalVCpuInfoIcon; + @Ignore + public EntityModelDetachableWidgetWithInfo totalvCPUsEditorWithInfoIcon; @UiField @Ignore @@ -233,15 +249,19 @@ @Ignore Panel vcpusAdvancedParameterExpanderContent; - @UiField(provided = true) @Path(value = "numOfSockets.selectedItem") @WithElementId("numOfSockets") public ListModelListBoxEditor<Integer> numOfSocketsEditor; - @UiField(provided = true) @Path(value = "coresPerSocket.selectedItem") @WithElementId("coresPerSocket") public ListModelListBoxEditor<Integer> corePerSocketEditor; + + @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel numOfSocketsEditorWithDetachable; + + @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel corePerSocketEditorWithDetachable; @UiField @Ignore @@ -257,10 +277,13 @@ @WithElementId("ssoMethodGuestAgent") public EntityModelRadioButtonEditor ssoMethodGuestAgent; - @UiField(provided = true) @Path(value = "isSoundcardEnabled.entity") @WithElementId("isSoundcardEnabled") public EntityModelCheckBoxEditor isSoundcardEnabledEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isSoundcardEnabledEditorWithDetachable; @UiField(provided = true) @Path("copyPermissions.entity") @@ -425,20 +448,26 @@ @WithElementId("isRunAndPause") public EntityModelCheckBoxEditor isRunAndPauseEditor; - @UiField(provided = true) @Path(value = "isSmartcardEnabled.entity") @WithElementId("isSmartcardEnabled") public EntityModelCheckBoxEditor isSmartcardEnabledEditor; + + @UiField(provided = true) + public EntityModelDetachableWidget isSmartcardEnabledEditorWithDetachable; @UiField(provided = true) @Path(value = "allowConsoleReconnect.entity") @WithElementId("allowConsoleReconnect") public EntityModelCheckBoxEditor allowConsoleReconnectEditor; - @UiField(provided = true) + @Path(value = "isConsoleDeviceEnabled.entity") @WithElementId("isConsoleDeviceEnabled") public EntityModelCheckBoxEditor isConsoleDeviceEnabledEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isConsoleDeviceEnabledEditorWithDetachable; @UiField @Path(value = "spiceProxy.entity") @@ -462,15 +491,19 @@ @WithElementId("hostCpu") public EntityModelCheckBoxEditor hostCpuEditor; - @UiField(provided = true) @Path(value = "migrationMode.selectedItem") @WithElementId("migrationMode") public ListModelListBoxEditor<MigrationSupport> migrationModeEditor; @UiField(provided = true) + public EntityModelDetachableWidget migrationModeEditorWithDetachable; + @Path(value = "overrideMigrationDowntime.entity") @WithElementId("overrideMigrationDowntime") public EntityModelCheckBoxOnlyEditor overrideMigrationDowntimeEditor; + + @UiField(provided = true) + public EntityModelDetachableWidget overrideMigrationDowntimeEditorWithDetachable; @UiField(provided = true) public InfoIcon migrationDowntimeInfoIcon; @@ -536,10 +569,13 @@ @UiField protected DialogTab highAvailabilityTab; - @UiField(provided = true) @Path(value = "isHighlyAvailable.entity") @WithElementId("isHighlyAvailable") public EntityModelCheckBoxEditor isHighlyAvailableEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isHighlyAvailableEditorWithDetachable; // TODO: Priority is a ListModel which is rendered as RadioBox @UiField(provided = true) @@ -549,12 +585,20 @@ @UiField @Ignore + public DetachableLabel priorityLabelWithDetachable; + + @UiField + @Ignore public FlowPanel watchdogPanel; @UiField(provided = true) @Path(value = "watchdogModel.selectedItem") @WithElementId("watchdogModel") public ListModelListBoxEditor<String> watchdogModelEditor; + + @UiField + @Ignore + public DetachableLabel watchdogLabel; @UiField(provided = true) @Path(value = "watchdogAction.selectedItem") @@ -579,6 +623,9 @@ @WithElementId("provisioning") public ListModelListBoxEditor provisioningEditor; + @UiField + public DetachableLabel memAllocationLabel; + @UiField(provided = true) @Path(value = "minAllocatedMemory.entity") @WithElementId("minAllocatedMemory") @@ -598,9 +645,13 @@ @WithElementId("provisioningClone") public EntityModelRadioButtonEditor provisioningCloneEditor; - @UiField(provided = true) @Path(value = "isVirtioScsiEnabled.entity") - EntityModelCheckBoxEditor isVirtioScsiEnabled; + @WithElementId("isVirtioScsiEnabled") + public EntityModelCheckBoxEditor isVirtioScsiEnabled; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isVirtioScsiEnabledWithDetachable; @UiField(provided = true) @Ignore @@ -709,6 +760,7 @@ // Contains a special parser/renderer memSizeEditor = new EntityModelTextBoxEditor<Integer>( new MemorySizeRenderer<Integer>(constants), new MemorySizeParser(), new ModeSwitchingVisibilityRenderer()); + minAllocatedMemoryEditor = new EntityModelTextBoxEditor<Integer>( new MemorySizeRenderer<Integer>(constants), new MemorySizeParser(), new ModeSwitchingVisibilityRenderer()); @@ -750,6 +802,9 @@ initPoolSpecificWidgets(resources, messages); initTextBoxEditors(); initSpiceProxy(); + initTotalVcpus(); + + initDetachableFields(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); @@ -777,6 +832,18 @@ initialize(); } + private void initDetachableFields() { + detachableMemSizeEditor = new EntityModelDetachableWidgetWithLabel(memSizeEditor); + isSmartcardEnabledEditorWithDetachable = new EntityModelDetachableWidget(isSmartcardEnabledEditor, Align.RIGHT); + isSoundcardEnabledEditorWithDetachable = new EntityModelDetachableWidget(isSoundcardEnabledEditor, Align.RIGHT); + isConsoleDeviceEnabledEditorWithDetachable = new EntityModelDetachableWidget(isConsoleDeviceEnabledEditor, Align.RIGHT); + isHighlyAvailableEditorWithDetachable = new EntityModelDetachableWidget(isHighlyAvailableEditor, Align.RIGHT); + overrideMigrationDowntimeEditorWithDetachable = new EntityModelDetachableWidget(overrideMigrationDowntimeEditor, Align.RIGHT); + overrideMigrationDowntimeEditor.getContentWidgetContainer().getElement().getStyle().setWidth(20, Unit.PX); + isVirtioScsiEnabledWithDetachable = new EntityModelDetachableWidget(isVirtioScsiEnabled, Align.RIGHT); + migrationModeEditorWithDetachable = new EntityModelDetachableWidget(migrationModeEditor, Align.RIGHT); + } + protected void initialize() { } @@ -788,6 +855,14 @@ spiceProxyEnabledCheckboxWithInfoIcon = new EntityModelWidgetWithInfo(label, spiceProxyOverrideEnabledEditor); } + private void initTotalVcpus() { + EntityModelLabel label = new EntityModelLabel(); + label.setText(constants.numOfVCPUs()); + totalvCPUsEditor = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); + totalvCPUsEditorWithInfoIcon = new EntityModelDetachableWidgetWithInfo(label, totalvCPUsEditor); + totalvCPUsEditorWithInfoIcon.setExplanation(applicationTemplates.italicText(messages.hotPlugUnplugCpuWarning())); + } + public void setSpiceProxyOverrideExplanation(String explanation) { spiceProxyEnabledCheckboxWithInfoIcon.setExplanation(applicationTemplates.italicText(explanation)); } @@ -795,7 +870,6 @@ private void initTextBoxEditors() { descriptionEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); commentEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); - totalvCPUsEditor = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); numOfVmsEditor = new IntegerEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); cpuPinning = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); cpuSharesAmountEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); @@ -840,7 +914,6 @@ }); - totalVCpuInfoIcon = new InfoIcon(applicationTemplates.italicText(messages.hotPlugUnplugCpuWarning()), resources); } /** @@ -960,8 +1033,29 @@ vmTypeEditor = new ListModelListBoxEditor<VmType>(new EnumRenderer(), new ModeSwitchingVisibilityRenderer()); + instanceTypesEditor = new ListModelTypeAheadListBoxEditor<InstanceType>( + new ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<InstanceType>() { + + @Override + public String getReplacementStringNullSafe(InstanceType data) { + return data.getName(); + } + + @Override + public String getDisplayStringNullSafe(InstanceType data) { + return typeAheadNameDescriptionTemplateNullSafe( + data.getName(), + data.getDescription() + ); + } + }, + new ModeSwitchingVisibilityRenderer() + ); + numOfSocketsEditor = new ListModelListBoxEditor<Integer>(new ModeSwitchingVisibilityRenderer()); + numOfSocketsEditorWithDetachable = new EntityModelDetachableWidgetWithLabel(numOfSocketsEditor); corePerSocketEditor = new ListModelListBoxEditor<Integer>(new ModeSwitchingVisibilityRenderer()); + corePerSocketEditorWithDetachable = new EntityModelDetachableWidgetWithLabel(corePerSocketEditor); // Pools poolTypeEditor = new ListModelListBoxEditor<EntityModel<VmPoolType>>(new NullSafeRenderer<EntityModel<VmPoolType>>() { @@ -1080,8 +1174,10 @@ nameLabel.setText(constants.nameVmPopup()); descriptionEditor.setLabel(constants.descriptionVmPopup()); commentEditor.setLabel(constants.commentLabel()); + baseTemplateEditor.setLabel(constants.basedOnTemplateVmPopup()); templateEditor.setLabel(constants.templateSubVersion()); + instanceTypesEditor.setLabel(constants.instanceType()); oSTypeEditor.setLabel(constants.osVmPopup()); vmTypeEditor.setLabel(constants.optimizedFor()); @@ -1153,8 +1249,10 @@ // System tab memSizeEditor.setLabel(constants.memSizeVmPopup()); - corePerSocketEditor.setLabel(constants.coresPerSocket()); - numOfSocketsEditor.setLabel(constants.numOfSockets()); + detachableMemSizeEditor.setLabel(constants.memSizeVmPopup()); + totalvCPUsEditor.setLabel(constants.numOfVCPUs()); + corePerSocketEditorWithDetachable.setLabel(constants.coresPerSocket()); + numOfSocketsEditorWithDetachable.setLabel(constants.numOfSockets()); } protected void applyStyles() { @@ -1186,6 +1284,7 @@ initTabAvailabilityListeners(model); initListeners(model); hideAlwaysHiddenFields(); + decorateDetachableFields(); } @UiHandler("refreshButton") @@ -1242,7 +1341,7 @@ changeApplicationLevelVisibility(disksAllocationPanel, isDisksAvailable); changeApplicationLevelVisibility(storageAllocationPanel, isProvisioningAvailable || isDisksAvailable || - object.getIsVirtioScsiEnabled().getIsAvailable()); + object.getIsVirtioScsiEnabled().getIsAvailable()); } }); @@ -1512,6 +1611,7 @@ quotaEditor.setTabIndex(nextTabIndex++); oSTypeEditor.setTabIndex(nextTabIndex++); baseTemplateEditor.setTabIndex(nextTabIndex++); + instanceTypesEditor.setTabIndexes(nextTabIndex++); templateEditor.setTabIndex(nextTabIndex++); nameEditor.setTabIndex(nextTabIndex++); @@ -1672,7 +1772,27 @@ ); } + protected List<Widget> detachableWidgets() { + return Arrays.<Widget> asList( + totalvCPUsEditorWithInfoIcon, + numOfSocketsEditorWithDetachable, + corePerSocketEditorWithDetachable, + isSmartcardEnabledEditorWithDetachable, + isConsoleDeviceEnabledEditorWithDetachable, + isSoundcardEnabledEditorWithDetachable, + isHighlyAvailableEditorWithDetachable, + priorityLabelWithDetachable, + migrationModeEditorWithDetachable, + memAllocationLabel, + isVirtioScsiEnabledWithDetachable, + detachableMemSizeEditor, + overrideMigrationDowntimeEditorWithDetachable, + watchdogLabel + ); + } + protected void disableAllTabs() { + generalTab.disableContent(); generalTab.disableContent(); poolTab.disableContent(); initialRunTab.disableContent(); @@ -1689,6 +1809,22 @@ templateEditor.setEnabled(false); baseTemplateEditor.setEnabled(false); vmTypeEditor.setEnabled(false); + instanceTypesEditor.setEnabled(false); } + protected void decorateDetachableFields() { + for (Widget decoratedWidget : getWidgetConfiguration().getDetachables().keySet()) { + if (decoratedWidget instanceof HasDetachable) { + ((HasDetachable) decoratedWidget).setDetachableIconVisible(true); + } + } + } + + public void switchAttachToInstanceType(boolean attached) { + for (Widget detachable : getWidgetConfiguration().getDetachables().keySet()) { + if (detachable instanceof HasDetachable) { + ((HasDetachable) detachable).setAttached(attached); + } + } + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml index 4706a5c..9a405cb 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml @@ -54,11 +54,16 @@ .overrideMigrationDowntime { display: inline; float: left; - width: 20px; + width: 50px; } .overrideMigrationDowntime div { width: 20px; + margin-top: 0; + } + + .overrideMigrationDowntime>div { + width: 50px; } .migrationDowntimeLabel { @@ -79,44 +84,44 @@ } <!-- turns off the original styles --> - .checkboxWithLongLabel,.checkbox { - margin-left: -9px; - } + .checkboxWithLongLabel, .checkbox { + margin-left: -9px; + } - .checkboxWithLongLabel label { - margin-left: 26px; - margin-top: -26px; - display: block; - line-height: 20px; - } + .checkboxWithLongLabel label { + margin-left: 26px; + margin-top: -26px; + display: block; + line-height: 20px; + } - .longCheckboxContent { - width: 90%; - } + .longCheckboxContent { + width: 90%; + } - .provisioningEditor { - padding-right: 25px; - } + .provisioningEditor { + padding-right: 25px; + } - .provisioningEditorContent { - display: none; - } + .provisioningEditorContent { + display: none; + } - .provisioningRadioContent { - padding-top: 3px; - width: 100%; - } + .provisioningRadioContent { + padding-top: 3px; + width: 100%; + } - .disksAllocation { - padding-left: 5px; - padding-top: 10px; - } + .disksAllocation { + padding-left: 5px; + padding-top: 10px; + } - .disksAllocationPanel { - width: 490px; - padding-top: 5px; - padding-bottom: 10px; - } + .disksAllocationPanel { + width: 490px; + padding-top: 5px; + padding-bottom: 10px; + } .textBox { width: 30px; @@ -138,124 +143,126 @@ text-align: right; } - .radioButton { + .radioButton { - } + } - .radioButtonSpecificHost { + .radioButtonSpecificHost { margin-left: 5px; - } + } - .label { - width: 350px; - } + .label { + width: 350px; + } .labelDisabled { color: gray; } - .runHostPanel { + .runHostPanel { - } + } - .attachCdPanel { - width: 100%; - } + .attachCdPanel { + width: 100%; + } .cdAttachedLabelWidth { width: 30px; } - .hostRunMigrationOptions { - margin-left: 6px; - } + .hostRunMigrationOptions { + margin-left: 6px; + } - .warningMessageLabel { - color: #CD2127; - position: absolute; - bottom: 10px; - } + .warningMessageLabel { + color: #CD2127; + position: absolute; + bottom: 10px; + } - - - .cpuPinningStyle { + .cpuPinningStyle { float: left; - } + } - .expanderContent,.generalExpanderContent { - padding-left: 10px; - } - - .monitorsStyles { - width: 40px; - padding-left: 5px; - } + .expanderContent, .generalExpanderContent { + padding-left: 10px; + } - .expanderContent { - float: left; - } + .monitorsStyles { + width: 40px; + padding-left: 5px; + } - .warningLabel { + .expanderContent { + float: left; + } + + .warningLabel { color: red; font-weight: bold; margin-bottom: 10px; } - + .poolEditVms, .name { - line-height: 30px; - padding: 0 5px; - padding-bottom: 35px; + line-height: 30px; + padding: 0 5px; + padding-bottom: 35px; } - - .prestartedVmsEditorContent,.nameEditorContent,.maxAssignedVmsPerUserEditorContent { - width: 230px; + + .prestartedVmsEditorContent, .nameEditorContent, .maxAssignedVmsPerUserEditorContent { + width: 230px; } - - .prestartedVmsEditor,.nameEditor,.maxAssignedVmsPerUserEditor { - float: right; - width: 230px; + + .prestartedVmsEditor, .nameEditor, .maxAssignedVmsPerUserEditor { + float: right; + width: 230px; } - - .editPrestartedVmsEditor,.editMaxAssignedVmsPerUserEditor { - float: left; - padding-right: 10px; + + .editPrestartedVmsEditor, .editMaxAssignedVmsPerUserEditor { + float: left; + padding-right: 10px; } - + .infoIcon, .prestartedVmsIcon, .poolNameIcon, .maxAssignedVmsPerUserIcon { - float: left; - padding-top: 5px; + float: left; + padding-top: 5px; padding-left: 2px; } - - .prestartedLabelWithHelp,.increasePrestartedLabel,.maxAssignedVmsPerUserLabel { - float: left; + + .prestartedLabelWithHelp, .increasePrestartedLabel, .maxAssignedVmsPerUserLabel { + float: left; } - .editPrestartedVms,.editIncreaseVms,.editMaxAssignedVmsPerUser { + .editPrestartedVms, .editIncreaseVms, .editMaxAssignedVmsPerUser { float: right; - width: 250px; + width: 250px; } - + .prestartedLabel, .nameLabel { - float: left; - color: #333333; - } - - .increaseVmsInPoolVms,.maxAssignedVmsPerUserVms { - float: left; + float: left; + color: #333333; } - .migrationSelect { - margin-right: 7px; - } + .increaseVmsInPoolVms, .maxAssignedVmsPerUserVms { + float: left; + } - .generalTabExtendedRightWidgetWidth { - width: 250px !important; + .migrationSelect { + margin-right: 7px; + } + + .generalTabExtendedRightWidgetWidth { + width: 250px !important; + } + + .generalTabExtendedRightWidgetWrapperWidth { + width: 280px !important; } .headerPanel { - padding-bottom: 6px; - } + padding-bottom: 6px; + } .refreshButton { float: right; @@ -270,14 +277,14 @@ } .cdImageEditor { - width: 197px; + width: 197px; } .isVirtioScsiEnabledEditor { width: 100%; } - .monitorPanel { + .monitorPanel { line-height: 30px; padding-bottom: 0; padding-left: 5px; @@ -293,9 +300,9 @@ width: 265px; } - .hostSelector { - width: 416px; - } + .hostSelector { + width: 416px; + } .labelToCouple { line-height: 30px; @@ -306,7 +313,7 @@ .labelToCoupleLabel { color: gray; - font-family: Verdana,sans-serif; + font-family: Verdana, sans-serif; font-size: 13px; line-height: 30px; padding: 0 5px; @@ -337,19 +344,26 @@ padding-left: 5px; } - .totalvcpusTextBox { - float: right; - } - .cpuSahresValueTextBox { padding-left: 5px; } - .migrationSelectorInner { - width: 260px; - } + .migrationSelectorInner { + width: 260px; + } - </ui:style> + .headerCol { + float: left; + } + + .floatLeft { + float: left; + } + + .fullWidth { + width: 100%; + } + </ui:style> <t:DialogTabPanel width="100%" height="100%" ui:field="mainTabPanel"> <t:header> @@ -359,6 +373,7 @@ <e:ListModelTypeAheadListBoxEditor ui:field="baseTemplateEditor"/> <e:ListModelTypeAheadListBoxEditor ui:field="templateEditor" /> <e:ListModelListBoxEditor ui:field="oSTypeEditor" /> + <e:ListModelTypeAheadListBoxEditor ui:field="instanceTypesEditor" /> <e:ListModelListBoxEditor ui:field="vmTypeEditor" /> </g:FlowPanel> </t:header> @@ -444,21 +459,17 @@ <t:DialogTab ui:field="systemTab"> <t:content> <g:FlowPanel> - <ge:EntityModelTextBoxEditor ui:field="memSizeEditor"/> - <g:FlowPanel addStyleNames="{style.labelToCouple}"> - <g:Label text="{constants.numOfVCPUs}" addStyleNames="{style.labelToCoupleLabel}"/> - <d:InfoIcon ui:field="totalVCpuInfoIcon"/> - <ge:StringEntityModelTextBoxOnlyEditor ui:field="totalvCPUsEditor" addStyleNames="{style.totalvcpusTextBox}"/> - </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <d:AdvancedParametersExpander ui:field="vcpusAdvancedParameterExpander"/> - <g:FlowPanel ui:field="vcpusAdvancedParameterExpanderContent" addStyleNames="{style.generalExpanderContent}"> - <e:ListModelListBoxEditor ui:field="corePerSocketEditor" /> - <e:ListModelListBoxEditor ui:field="numOfSocketsEditor" /> - </g:FlowPanel> + <ge:EntityModelDetachableWidgetWithLabel ui:field="detachableMemSizeEditor"/> + <w:EntityModelDetachableWidgetWithInfo ui:field="totalvCPUsEditorWithInfoIcon" /> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <d:AdvancedParametersExpander ui:field="vcpusAdvancedParameterExpander"/> + <g:FlowPanel ui:field="vcpusAdvancedParameterExpanderContent" addStyleNames="{style.generalExpanderContent}"> + <ge:EntityModelDetachableWidgetWithLabel ui:field="corePerSocketEditorWithDetachable" /> + <ge:EntityModelDetachableWidgetWithLabel ui:field="numOfSocketsEditorWithDetachable" /> </g:FlowPanel> - <g:Label ui:field="generalLabel" addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" /> - <e:ListModelListBoxEditor ui:field="timeZoneEditor" /> + </g:FlowPanel> + <g:Label ui:field="generalLabel" addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" /> + <e:ListModelListBoxEditor ui:field="timeZoneEditor" /> </g:FlowPanel> </t:content> </t:DialogTab> @@ -500,9 +511,10 @@ </g:HorizontalPanel> </g:FlowPanel> </g:FlowPanel> - <ge:EntityModelCheckBoxEditor ui:field="isSmartcardEnabledEditor" addStyleNames="{style.checkbox}" /> + <ge:EntityModelDetachableWidget ui:field="isSmartcardEnabledEditorWithDetachable" addStyleNames="{style.floatLeft}" /> <g:Label ui:field="nativeUsbWarningMessage" text="{constants.nativeUsbSupportWarning}" addStyleNames="{style.warningMessageLabel}" /> - <g:Label ui:field="ssoMethodLabel" text="{constants.ssoMethod}" addStyleNames="{style.sectionLabel}" /> + + <g:Label ui:field="ssoMethodLabel" text="{constants.ssoMethod}" addStyleNames="{style.sectionLabel} {style.floatLeft} {style.fullWidth}" /> <g:FlowPanel> <ge:EntityModelRadioButtonEditor ui:field="ssoMethodNone"/> <ge:EntityModelRadioButtonEditor ui:field="ssoMethodGuestAgent"/> @@ -512,8 +524,11 @@ <g:Label addStyleNames="{style.warningLabel}" text="{constants.advancedOptionsLabel}" /> <ge:EntityModelCheckBoxEditor ui:field="allowConsoleReconnectEditor" addStyleNames="{style.checkboxWithLongLabel}" /> </g:FlowPanel> - <ge:EntityModelCheckBoxEditor ui:field="isSoundcardEnabledEditor" addStyleNames="{style.checkbox}" /> - <ge:EntityModelCheckBoxEditor ui:field="isConsoleDeviceEnabledEditor" addStyleNames="{style.checkbox}" /> + + <g:FlowPanel> + <ge:EntityModelDetachableWidget ui:field="isSoundcardEnabledEditorWithDetachable" /> + <ge:EntityModelDetachableWidget ui:field="isConsoleDeviceEnabledEditorWithDetachable" /> + </g:FlowPanel> <w:EntityModelWidgetWithInfo ui:field="spiceProxyEnabledCheckboxWithInfoIcon" /> <ge:StringEntityModelTextBoxEditor ui:field="spiceProxyEditor"/> @@ -541,15 +556,14 @@ <g:Label addStyleNames="{style.sectionLabel}" text="{constants.runMigrationOptionsVmPopup}" /> <g:VerticalPanel width="100%" addStyleNames="{style.hostRunMigrationOptions}"> - <e:ListModelListBoxEditor ui:field="migrationModeEditor" addStyleNames="{style.migrationSelect}"/> - <ge:EntityModelCheckBoxEditor ui:field="hostCpuEditor" addStyleNames="{style.checkbox}" /> - + <ge:EntityModelDetachableWidget ui:field="migrationModeEditorWithDetachable" addStyleNames="{style.migrationSelect}"/> <g:FlowPanel addStyleNames="{style.migrationDowntimePanel}"> - <ge:EntityModelCheckBoxOnlyEditor ui:field="overrideMigrationDowntimeEditor" addStyleNames="{style.overrideMigrationDowntime}" /> + <ge:EntityModelDetachableWidget ui:field="overrideMigrationDowntimeEditorWithDetachable" addStyleNames="{style.overrideMigrationDowntime}" /> <g:Label text="{constants.overrideMigrationDowntimeLabel}" addStyleNames="{style.migrationDowntimeLabel}" /> <d:InfoIcon ui:field="migrationDowntimeInfoIcon" addStyleNames="{style.migrationDowntimeInfoIcon}" /> <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="migrationDowntimeEditor" addStyleNames="{style.migrationDowntime}" /> </g:FlowPanel> + <ge:EntityModelCheckBoxEditor ui:field="hostCpuEditor" addStyleNames="{style.checkbox}"/> </g:VerticalPanel> </g:FlowPanel> </t:content> @@ -560,14 +574,23 @@ <t:content> <g:FlowPanel> <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <ge:EntityModelCheckBoxEditor ui:field="isHighlyAvailableEditor" addStyleNames="{style.checkbox}" /> + <ge:EntityModelDetachableWidget ui:field="isHighlyAvailableEditorWithDetachable" addStyleNames="{style.checkbox}" /> </g:FlowPanel> <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.priorForRunMigrationQueueVmPopup}" /> - <e:EntityModelCellTable ui:field="priorityEditor" /> + <ge:DetachableLabel ui:field="priorityLabelWithDetachable" contentWidgetStyleName="{style.sectionLabel}"> + <ge:decorated> + <g:Label text="{constants.priorForRunMigrationQueueVmPopup}" /> + </ge:decorated> + </ge:DetachableLabel> + <e:EntityModelCellTable ui:field="priorityEditor" addStyleNames="{style.floatLeft}, {style.fullWidth}"/> + </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}" ui:field="watchdogPanel"> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.watchdog}" /> + <g:FlowPanel addStyleNames="{style.sectionPanel}, {style.floatLeft}" ui:field="watchdogPanel"> + <ge:DetachableLabel ui:field="watchdogLabel" contentWidgetStyleName="{style.sectionLabel}"> + <ge:decorated> + <g:Label text="{constants.watchdog}" /> + </ge:decorated> + </ge:DetachableLabel> <e:ListModelListBoxEditor ui:field="watchdogModelEditor" /> <e:ListModelListBoxEditor ui:field="watchdogActionEditor" /> </g:FlowPanel> @@ -580,8 +603,7 @@ <t:content> <g:FlowPanel> <g:FlowPanel addStyleNames="{style.sectionPanelTight}" ui:field="cpuAllocationPanel" > - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.cpuAllocVmPopup}"/> - + <g:Label text="{constants.cpuAllocVmPopup}" addStyleNames="{style.sectionLabel}" /> <g:FlowPanel addStyleNames="{style.labelToCouple}"> <g:Label ui:field="cpuSharesEditor" text="{constants.cpuShares}" addStyleNames="{style.labelToCoupleLabel}"/> <g:FlowPanel addStyleNames="{style.labelToCoupleCouple}"> @@ -600,7 +622,12 @@ </g:FlowPanel> <g:FlowPanel addStyleNames="{style.sectionPanelTight}"> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.memAllocVmPopup}" /> + <ge:DetachableLabel ui:field="memAllocationLabel" contentWidgetStyleName="{style.sectionLabel}"> + <ge:decorated> + <g:Label text="{constants.memAllocVmPopup}" /> + </ge:decorated> + </ge:DetachableLabel> + <ge:EntityModelTextBoxEditor ui:field="minAllocatedMemoryEditor" /> <ge:EntityModelCheckBoxEditor addStyleNames="{style.checkbox}" ui:field="isMemoryBalloonDeviceEnabled"/> </g:FlowPanel> @@ -616,10 +643,6 @@ <ge:EntityModelRadioButtonEditor ui:field="provisioningCloneEditor"/> </g:VerticalPanel> </g:HorizontalPanel> - <g:HorizontalPanel> - <ge:EntityModelCheckBoxEditor ui:field="isVirtioScsiEnabled" addStyleNames="{style.checkbox}"/> - <d:InfoIcon ui:field="isVirtioScsiEnabledInfoIcon" addStyleNames="{style.infoIcon}" visible="false"/> - </g:HorizontalPanel> <g:FlowPanel ui:field="disksAllocationPanel"> <g:Label ui:field="disksAllocationLabel" text="{constants.disksAllocation}" addStyleNames="{style.disksAllocation}" visible="false" /> <g:VerticalPanel> @@ -627,6 +650,10 @@ </g:VerticalPanel> </g:FlowPanel> </g:FlowPanel> + <g:HorizontalPanel addStyleNames="{style.floatLeft}"> + <ge:EntityModelDetachableWidget ui:field="isVirtioScsiEnabledWithDetachable" addStyleNames="{style.checkbox}" /> + <d:InfoIcon ui:field="isVirtioScsiEnabledInfoIcon" addStyleNames="{style.infoIcon}" visible="false"/> + </g:HorizontalPanel> </g:FlowPanel> </t:content> </t:DialogTab> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolEditPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolEditPopupWidget.java index d90ad5e..6feea3d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolEditPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolEditPopupWidget.java @@ -92,12 +92,17 @@ dataCenterWithClusterEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); vmTypeEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); quotaEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); + instanceTypesEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); descriptionEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); templateEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); memSizeEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); + detachableMemSizeEditor.addContentWrapperStypeName(style.generalTabExtendedRightWidgetWrapperWidth()); totalvCPUsEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); + totalvCPUsEditorWithInfoIcon.getContentWidget().addContentWrapperStypeName(style.generalTabExtendedRightWidgetWrapperWidth()); corePerSocketEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); + corePerSocketEditorWithDetachable.addContentWrapperStypeName(style.generalTabExtendedRightWidgetWrapperWidth()); numOfSocketsEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); + numOfSocketsEditorWithDetachable.addContentWrapperStypeName(style.generalTabExtendedRightWidgetWrapperWidth()); oSTypeEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); isStatelessEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); isRunAndPauseEditor.addContentWidgetStyleName(style.generalTabExtendedRightWidgetWidth()); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java index 3422905..329c6fc 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java @@ -90,7 +90,8 @@ putOne(editPoolEditVmsPanel, hiddenField()). putOne(editPoolIncraseNumOfVmsPanel, hiddenField()). putOne(logicalNetworksEditorPanel, hiddenField()). - putOne(editPoolEditMaxAssignedVmsPerUserPanel, hiddenField()); + putOne(editPoolEditMaxAssignedVmsPerUserPanel, hiddenField()). + putAll(detachableWidgets(), simpleField().detachable().visibleInAdvancedModeOnly()); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateNewPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateNewPopupWidget.java index e268802..24da91e 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateNewPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateNewPopupWidget.java @@ -36,6 +36,7 @@ putOne(logicalNetworksEditorPanel, hiddenField()). putAll(poolSpecificFields(), hiddenField()). putOne(templateEditor, hiddenField()). + putOne(instanceTypesEditor, hiddenField()). update(resourceAllocationTab, hiddenField()); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java index f1744d4..cc854b5 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; import static org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.hiddenField; +import static org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.simpleField; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationMessages; @@ -46,6 +47,7 @@ @Override protected PopupWidgetConfigMap createWidgetConfiguration() { return super.createWidgetConfiguration(). - putAll(poolSpecificFields(), hiddenField()); + putAll(poolSpecificFields(), hiddenField()). + putAll(detachableWidgets(), simpleField().detachable().visibleInAdvancedModeOnly()); } } -- To view, visit http://gerrit.ovirt.org/25576 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I990325e4ec554f0cdd84f6a2bb8772f1d71c705f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
