Martin Betak has uploaded a new change for review. Change subject: frontend: Split AbstractVmPopupWidget into separate tabs ......................................................................
frontend: Split AbstractVmPopupWidget into separate tabs Change-Id: I72fc8a92c964d3b4acd840190ac727a3ada0c500 Signed-off-by: Martin Betak <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java D 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/PoolNewPopupWidget.java R frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.ui.xml A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmTabContent.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.ui.xml A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.ui.xml A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java 13 files changed, 1,564 insertions(+), 1,201 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/31093/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java index a552b0d..193e2f8 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java @@ -79,7 +79,7 @@ this.model = model; } - class ModeSwitchingVisibilityRenderer implements VisibilityRenderer { + public class ModeSwitchingVisibilityRenderer implements VisibilityRenderer { @Override public boolean render(Widget source, boolean desiredVisibility) { 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 deleted file mode 100644 index 3149e91..0000000 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml +++ /dev/null @@ -1,738 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:w="urn:import:org.ovirt.engine.ui.common.widget" - xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" - xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" - xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" - xmlns:t="urn:import:org.ovirt.engine.ui.common.widget.dialog.tab" - xmlns:s="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage" - xmlns:k="urn:import:org.ovirt.engine.ui.common.widget.form.key_value" - xmlns:p="urn:import:org.ovirt.engine.ui.common.widget.profile" - xmlns:vm="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.vm"> - - <ui:with field='resources' type='org.ovirt.engine.ui.common.CommonApplicationResources' /> - <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> - - <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget.Style"> - - .sectionPanel { - margin-bottom: 20px; - } - - .sectionPanelTight { - margin-bottom: 6px; - float: left; - width: 100%; - } - - .sectionLabel { - font-weight: bold; - margin-top: 10px; - margin-bottom: 5px; - } - - .sectionComment { - margin-top: 10px; - margin-left: 5px; - font-style: italic; - } - - .horizontallyAlignedCheckBox { - float: left; - padding-right: 15px; - } - - .horizontallyAlignedCheckBoxContent { - } - - .migrationDowntimePanel { - padding-left: 1px; - line-height: 30px; - } - - .overrideMigrationDowntime { - display: inline; - float: left; - width: 50px; - } - - .overrideMigrationDowntime div { - width: 20px; - margin-top: 0; - } - - .overrideMigrationDowntime>div { - width: 50px; - } - - .migrationDowntimeLabel { - display: inline-block; - float: left; - max-width: 184px; - } - - .migrationDowntimeInfoIcon { - display: inline; - float: left; - } - - .migrationDowntime { - display: inline; - float: right; - padding-right: 9px; - } - <!-- turns off the original styles --> - - .checkbox { - margin-left: -9px; - } - - .checkboxWithLongLabel { - width: 400px; - float: left; - clear: both; - } - - .checkboxWithLongLabel label { - margin-left: 26px; - margin-top: -18px; - display: block; - line-height: 20px; - width: 400px; - float: left; - } - - .longCheckboxContent { - width: 90%; - } - - .provisioningEditor { - padding-right: 25px; - } - - .provisioningEditorContent { - display: none; - } - - .provisioningRadioContent { - padding-top: 3px; - width: 100%; - } - - .disksPanel { - width: 490px; - margin: 10px 0; - display: inline-table; - } - - .textBox { - width: 30px; - float: right; - } - - .numOfVmsLabel { - margin-left: 5px; - color: #333333; - } - - .assignedVmsLabel { - margin-left: 8px; - } - - .prestartedHintLabel { - font-size: 7pt; - color: gray; - text-align: right; - } - - .radioButton { - - } - - .radioButtonSpecificHost { - margin-left: 5px; - } - - .label { - width: 350px; - } - - .labelDisabled { - color: gray; - } - - .runHostPanel { - - } - - .attachCdPanel { - width: 100%; - } - - .cdAttachedLabelWidth { - width: 30px; - } - - .hostRunMigrationOptions { - margin-left: 6px; - } - - .warningMessageLabel { - color: #CD2127; - position: absolute; - bottom: 10px; - } - - .cpuPinningStyle { - float: left; - } - - .expanderContent,.generalExpanderContent { - padding-left: 10px; - } - - .monitorsStyles { - width: 40px; - padding-left: 5px; - } - - .monitorsStyles { - width: 40px; - padding-left: 5px; - } - - .expanderContent { - float: left; - } - - .warningLabel { - color: red; - font-weight: bold; - margin-bottom: 10px; - } - - .poolEditVms, .name { - line-height: 30px; - padding: 0 5px; - padding-bottom: 35px; - } - - .prestartedVmsEditorContent, .nameEditorContent, .maxAssignedVmsPerUserEditorContent { - width: 230px; - } - - .prestartedVmsEditor, .nameEditor, .maxAssignedVmsPerUserEditor { - float: right; - width: 230px; - } - - .editPrestartedVmsEditor, .editMaxAssignedVmsPerUserEditor { - float: left; - padding-right: 10px; - } - - .infoIcon, .prestartedVmsIcon, .poolNameIcon, .maxAssignedVmsPerUserIcon { - float: left; - padding-top: 5px; - padding-left: 2px; - } - - .prestartedLabelWithHelp, .increasePrestartedLabel, .maxAssignedVmsPerUserLabel { - float: left; - } - - .editPrestartedVms, .editIncreaseVms, .editMaxAssignedVmsPerUser { - float: right; - /* width: 250px; pfly_fix */ - width: 220px; - } - - .prestartedLabel, .nameLabel { - float: left; - color: #333333; - } - - .increaseVmsInPoolVms, .maxAssignedVmsPerUserVms { - float: left; - } - - .migrationSelect { - margin-right: 7px; - } - - .generalTabExtendedRightWidgetWidth { - /* pfly_fix hack - width: 250px !important; - */ - } - - .generalTabExtendedRightWidgetWrapperWidth { - width: 280px !important; - } - - .headerPanel { - padding-bottom: 6px; - } - - .refreshButton { - float: right; - font-size: 12px; - height: 14px; - line-height: 14px; - width: 12px; - margin-right: 5px; - padding: 2px; - background: transparent; - border: 1px solid transparent; - } - - .cdImageEditor { - width: 197px; - } - - .isVirtioScsiEnabledEditor { - width: 100%; - } - - .monitorPanel { - line-height: 30px; - padding-bottom: 0; - padding-left: 5px; - padding-right: 5px; - padding-top: 0; - width: 230px; - height: 30px; - } - - .monitorsLabel { - float: left; - color: #333333; - width: 265px; - } - - .hostSelector { - width: 416px; - } - - .labelToCouple { - line-height: 30px; - text-align: left; - float: left; - width: 100%; - } - - .labelToCoupleLabel { - color: gray; - font-family: Verdana, sans-serif; - font-size: 13px; - line-height: 30px; - padding: 0 5px; - float: left; - } - - .labelToCoupleCouple { - float: right; - line-height: 30px; - padding: 0 5px; - width: 230px; - } - - .labelToCoupleCoupleLeft { - float: left; - } - - .labelToCoupleCoupleRight { - float: left; - } - - .cpuSahresValueListBox, .cpuSahresValueTextBox { - width: 110px; - } - - .cpuPinningTextBox { - width: 197px; - padding-left: 5px; - } - - .cpuSahresValueTextBox { - padding-left: 5px; - } - - .migrationSelectorInner { - width: 260px; - } - - .headerCol { - float: left; - } - - .floatLeft, .detachableCheckBox { - float: left; - } - - - .detachableCheckBox { - width: 400px; - } - - .fullWidth { - width: 100%; - } - - .detachableStyle { - display: inline-block; - } - - </ui:style> - - <t:DialogTabPanel width="100%" height="100%" ui:field="mainTabPanel"> - <t:header> - <g:FlowPanel addStyleNames="{style.headerPanel}"> - <e:ListModelTypeAheadListBoxEditor ui:field="dataCenterWithClusterEditor" /> - <e:ListModelTypeAheadListBoxEditor ui:field="quotaEditor" /> - <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> - <t:tab> - <t:DialogTab ui:field="generalTab"> - <t:content> - <g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <g:FlowPanel addStyleNames="{style.name} avmpw_name_pfly_fix"> - <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> - <g:Label ui:field="nameLabel" addStyleNames="{style.nameLabel}" /> - <d:InfoIcon ui:field="poolNameIcon" addStyleNames="{style.poolNameIcon} avmpw_infoIcon_pfly_fix" /> - </g:FlowPanel> - <ge:EntityModelTextBoxOnlyEditor ui:field="nameEditor" addStyleNames="{style.nameEditor} avmpw_nameEditor_pfly_fix" contentWidgetStyleName="{style.nameEditorContent}"/> - </g:FlowPanel> - <ge:StringEntityModelTextBoxEditor ui:field="templateVersionNameEditor" /> - <ge:StringEntityModelTextBoxEditor ui:field="descriptionEditor" /> - <ge:StringEntityModelTextBoxEditor ui:field="commentEditor" /> - - <!-- New VM Pool --> - <ge:EntityModelTextBoxEditor ui:field="numOfVmsEditor" /> - <g:FlowPanel ui:field="newPoolEditVmsPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> - <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> - <g:Label ui:field="prestartedLabel" addStyleNames="{style.prestartedLabel}" /> - <d:InfoIcon ui:field="newPoolPrestartedVmsIcon" addStyleNames="{style.prestartedVmsIcon} avmpw_infoIcon_pfly_fix" /> - </g:FlowPanel> - <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="prestartedVmsEditor" addStyleNames="{style.prestartedVmsEditor}" contentWidgetStyleName="{style.prestartedVmsEditorContent} avmpw_prestartedVmsEditorContent_pfly_fix" /> - </g:FlowPanel> - - <g:FlowPanel ui:field="newPoolEditMaxAssignedVmsPerUserPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> - <g:FlowPanel addStyleNames="{style.maxAssignedVmsPerUserLabel}"> - <g:Label text="{constants.maxAssignedVmsPerUser}" addStyleNames="{style.maxAssignedVmsPerUserLabel}" /> - <d:InfoIcon ui:field="newPoolMaxAssignedVmsPerUserIcon" addStyleNames="{style.maxAssignedVmsPerUserIcon} avmpw_infoIcon_pfly_fix" /> - </g:FlowPanel> - <ge:EntityModelTextBoxOnlyEditor ui:field="maxAssignedVmsPerUserEditor" addStyleNames="{style.maxAssignedVmsPerUserEditor}" contentWidgetStyleName="{style.maxAssignedVmsPerUserEditorContent} avmpw_maxAssignedVmsPerUserEditorContent_pfly_fix" /> - </g:FlowPanel> - - <!-- Edit VM Pool --> - <g:FlowPanel addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix" ui:field="editPoolEditVmsPanel"> - <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> - <g:Label ui:field="editPrestartedVmsLabel" addStyleNames="{style.prestartedLabel}" /> - <d:InfoIcon ui:field="editPoolPrestartedVmsIcon" addStyleNames="{style.prestartedVmsIcon} avmpw_infoIcon_pfly_fix" /> - </g:FlowPanel> - <g:FlowPanel ui:field="editPrestartedVmsPanel" addStyleNames="{style.editPrestartedVms}" > - <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="editPrestartedVmsEditor" addStyleNames="{style.editPrestartedVmsEditor}" contentWidgetStyleName="{style.textBox}" /> - <g:ValueLabel ui:field="outOfxInPool" /> - </g:FlowPanel> - </g:FlowPanel> - - <g:FlowPanel ui:field="editPoolIncraseNumOfVmsPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> - <g:Label text="{constants.increaseNumberOfVMsInPoolBy}" addStyleNames="{style.increasePrestartedLabel}" /> - <g:FlowPanel ui:field="editIncreaseVmsPanel" addStyleNames="{style.editIncreaseVms}"> - <ge:EntityModelTextBoxOnlyEditor ui:field="incraseNumOfVmsEditor" addStyleNames="{style.editPrestartedVmsEditor}" contentWidgetStyleName="{style.textBox}" /> - <g:Label text="{constants.vms}" addStyleNames="{style.increaseVmsInPoolVms}" /> - </g:FlowPanel> - </g:FlowPanel> - - <g:FlowPanel ui:field="editPoolEditMaxAssignedVmsPerUserPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> - <g:FlowPanel addStyleNames="{style.maxAssignedVmsPerUserLabel}"> - <g:Label text="{constants.maxAssignedVmsPerUser}" addStyleNames="{style.maxAssignedVmsPerUserLabel}" /> - <d:InfoIcon ui:field="editPoolMaxAssignedVmsPerUserIcon" addStyleNames="{style.maxAssignedVmsPerUserIcon} avmpw_infoIcon_pfly_fix" /> - </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.editMaxAssignedVmsPerUser}"> - <ge:EntityModelTextBoxOnlyEditor ui:field="editMaxAssignedVmsPerUserEditor" addStyleNames="{style.editMaxAssignedVmsPerUserEditor}" contentWidgetStyleName="{style.textBox}" /> - <g:Label text="{constants.vms}" addStyleNames="{style.maxAssignedVmsPerUserVms}" /> - </g:FlowPanel> - </g:FlowPanel> - </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <ge:EntityModelCheckBoxEditor ui:field="isStatelessEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> - <ge:EntityModelCheckBoxEditor ui:field="isRunAndPauseEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> - <ge:EntityModelCheckBoxEditor ui:field="isDeleteProtectedEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> - <ge:EntityModelCheckBoxEditor ui:field="copyTemplatePermissionsEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> - </g:FlowPanel> - <g:FlowPanel ui:field="logicalNetworksEditorPanel" addStyleNames="{style.sectionPanel}"> - <p:ProfilesInstanceTypeEditor ui:field="profilesInstanceTypeEditor" /> - </g:FlowPanel> - <g:Label ui:field="generalWarningMessage" addStyleNames="{style.warningMessageLabel}" /> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="systemTab"> - <t:content> - <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:FlowPanel> - <g:Label ui:field="generalLabel" addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" /> - <w:EntityModelWidgetWithInfo ui:field="timeZoneEditorWithInfo" /> - <vm:SerialNumberPolicyWidget ui:field="serialNumberPolicyEditor" /> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="poolTab"> - <t:content> - <g:FlowPanel> - <e:ListModelListBoxEditor ui:field="poolTypeEditor" /> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="initialRunTab"> - <t:content> - <g:FlowPanel> - <ge:EntityModelCheckBoxEditor ui:field="vmInitEnabledEditor"/> - <vm:VmPopupVmInitWidget ui:field="vmInitEditor" /> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="consoleTab"> - <t:content> - <g:FlowPanel> - <e:ListModelListBoxEditor ui:field="displayProtocolEditor" /> - <e:ListModelListBoxEditor ui:field="vncKeyboardLayoutEditor" /> - <e:ListModelListBoxEditor ui:field="usbSupportEditor" /> - <g:FlowPanel width="100%"> - <g:FlowPanel addStyleNames="{style.monitorPanel}"> - <g:HorizontalPanel verticalAlignment="middle"> - <g:Label text="{constants.monitors}" ui:field="numOfMonitorsLabel" addStyleNames="{style.monitorsLabel} avmpw_monitorsLabel_pfly_fix" /> - <e:ListModelListBoxEditor ui:field="numOfMonitorsEditor" addStyleNames="{style.monitorsStyles}" /> - <ge:EntityModelCheckBoxEditor ui:field="isSingleQxlEnabledEditor" addStyleNames="{style.checkbox}" /> - </g:HorizontalPanel> - </g:FlowPanel> - </g:FlowPanel> - <ge:EntityModelDetachableWidget ui:field="isSmartcardEnabledEditorWithDetachable" addStyleNames="{style.floatLeft} avmpw_smartcard_pfly_fix" /> - <g:Label ui:field="nativeUsbWarningMessage" text="{constants.nativeUsbSupportWarning}" addStyleNames="{style.warningMessageLabel}" /> - - <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"/> - </g:FlowPanel> - <d:AdvancedParametersExpander ui:field="expander"/> - <g:FlowPanel ui:field="expanderContent" addStyleNames="{style.expanderContent}"> - <g:Label addStyleNames="{style.warningLabel}" text="{constants.advancedOptionsLabel}" /> - <ge:EntityModelCheckBoxEditor ui:field="allowConsoleReconnectEditor" addStyleNames="{style.checkboxWithLongLabel}" /> - </g:FlowPanel> - - <ge:EntityModelDetachableWidget ui:field="isSoundcardEnabledEditorWithDetachable" addStyleNames="{style.checkboxWithLongLabel}" /> - <ge:EntityModelDetachableWidget ui:field="isConsoleDeviceEnabledEditorWithDetachable" addStyleNames="{style.checkboxWithLongLabel}" /> - - <w:EntityModelWidgetWithInfo ui:field="spiceProxyEnabledCheckboxWithInfoIcon" /> - <ge:StringEntityModelTextBoxEditor ui:field="spiceProxyEditor" /> - - <ge:EntityModelCheckBoxEditor ui:field="spiceFileTransferEnabledEditor" addStyleNames="{style.checkboxWithLongLabel}" /> - <ge:EntityModelCheckBoxEditor ui:field="spiceCopyPasteEnabledEditor" addStyleNames="{style.checkboxWithLongLabel}" /> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="hostTab"> - <t:content> - <g:FlowPanel> - <g:FlowPanel ui:field="startRunningOnPanel"> - <d:InfoIcon ui:field="nonEditableWhileVmNotDownInfo" addStyleNames="{style.labelToCoupleCoupleLeft} avmpw_infoIcon_pfly_fix"/> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.runOnVmPopup}" /> - <g:VerticalPanel addStyleNames="{style.runHostPanel}" verticalAlignment='ALIGN_MIDDLE'> - <ge:EntityModelRadioButtonEditor ui:field="isAutoAssignEditor" - addStyleNames="{style.radioButton}" /> - <g:HorizontalPanel verticalAlignment='ALIGN_MIDDLE'> - <g:RadioButton ui:field="specificHost" addStyleNames="{style.radioButtonSpecificHost}" /> - <g:Label ui:field="specificHostLabel" text="{constants.specificVmPopup}" addStyleNames="avmpw_specificHostLabel_pfly_fix" /> - <e:ListModelListBoxEditor ui:field="defaultHostEditor" addStyleNames="{style.hostSelector}"/> - </g:HorizontalPanel> - </g:VerticalPanel> - </g:FlowPanel> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.runMigrationOptionsVmPopup}" /> - <g:VerticalPanel width="100%" addStyleNames="{style.hostRunMigrationOptions}"> - <ge:EntityModelDetachableWidget ui:field="migrationModeEditorWithDetachable" addStyleNames="{style.migrationSelect}"/> - <g:FlowPanel addStyleNames="{style.migrationDowntimePanel}"> - <ge:EntityModelDetachableWidget ui:field="overrideMigrationDowntimeEditorWithDetachable" addStyleNames="{style.overrideMigrationDowntime} avmpw_overrideMigrationDowntime_pfly_fix" /> - <g:Label text="{constants.overrideMigrationDowntimeLabel}" addStyleNames="{style.migrationDowntimeLabel} avmpw_migrationDowntimeLabel_pfly_fix" /> - <d:InfoIcon ui:field="migrationDowntimeInfoIcon" addStyleNames="{style.migrationDowntimeInfoIcon} avmpw_infoIcon_pfly_fix" /> - <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="migrationDowntimeEditor" addStyleNames="{style.migrationDowntime}" /> - </g:FlowPanel> - <ge:EntityModelCheckBoxEditor ui:field="hostCpuEditor" addStyleNames="{style.checkbox}"/> - </g:VerticalPanel> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="highAvailabilityTab"> - <t:content> - <g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <ge:EntityModelDetachableWidget ui:field="isHighlyAvailableEditorWithDetachable" addStyleNames="{style.checkbox}" /> - </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <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}, {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> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="resourceAllocationTab"> - <t:content> - <g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanelTight}" ui:field="cpuAllocationPanel" > - <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}"> - <e:ListModelListBoxOnlyEditor ui:field="cpuSharesAmountSelectionEditor" addStyleNames="{style.labelToCoupleCoupleLeft}" contentWidgetStyleName="{style.cpuSahresValueListBox}" /> - <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="cpuSharesAmountEditor" addStyleNames="{style.labelToCoupleCoupleRight}" contentWidgetStyleName="{style.cpuSahresValueTextBox} avmpw_cpuSahresValueTextBox_pfly_fix" /> - </g:FlowPanel> - </g:FlowPanel> - - <g:FlowPanel addStyleNames="{style.labelToCouple}"> - <g:Label text="{constants.cpuPinningLabel}" addStyleNames="{style.labelToCoupleLabel}"/> - <g:FlowPanel addStyleNames="{style.labelToCoupleCouple}"> - <d:InfoIcon ui:field="cpuPinningInfo" addStyleNames="{style.labelToCoupleCoupleLeft} avmpw_infoIcon_pfly_fix"/> - <ge:StringEntityModelTextBoxOnlyEditor ui:field="cpuPinning" addStyleNames="{style.labelToCoupleCoupleRight}" contentWidgetStyleName="{style.cpuPinningTextBox} avmpw_cpuPinningTextBox_pfly_fix"/> - </g:FlowPanel> - </g:FlowPanel> - - </g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanelTight}"> - <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> - <g:FlowPanel ui:field="storageAllocationPanel" addStyleNames="{style.sectionPanelTight}"> - <g:HorizontalPanel> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.storageAllocVmPopup}" /> - <g:Label addStyleNames="{style.sectionComment}" text="{constants.availOnlyTemplSelectedVmPopup}" /> - </g:HorizontalPanel> - <g:HorizontalPanel ui:field="provisionSelectionPanel"> - <e:ListModelListBoxEditor ui:field="provisioningEditor" addStyleNames="{style.provisioningEditor}" /> - <g:VerticalPanel> - <ge:EntityModelRadioButtonEditor ui:field="provisioningThinEditor"/> - <ge:EntityModelRadioButtonEditor ui:field="provisioningCloneEditor"/> - </g:VerticalPanel> - </g:HorizontalPanel> - </g:FlowPanel> - <g:FlowPanel ui:field="disksAllocationPanel" addStyleNames="{style.sectionPanelTight}"> - <g:HorizontalPanel> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.disksAllocation}" /> - </g:HorizontalPanel> - <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 ui:field="disksPanel"> - <s:DisksAllocationView ui:field="disksAllocationView" listHeight="170px" listWidth="490px" showVolumeType="true" addStyleNames="{style.disksPanel}" /> - </g:FlowPanel> - </g:FlowPanel> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="bootOptionsTab"> - <t:content> - <g:FlowPanel> - <g:FlowPanel addStyleNames="{style.sectionPanel}"> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.bootSequenceVmPopup}" /> - <e:ListModelListBoxEditor ui:field="firstBootDeviceEditor" /> - <e:ListModelListBoxEditor ui:field="secondBootDeviceEditor" /> - <g:HorizontalPanel addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE"> - <ge:EntityModelCheckBoxEditor label="{constants.attachCdVmPopup}" ui:field="cdAttachedEditor" /> - <e:ListModelListBoxEditor ui:field="cdImageEditor" addStyleNames="avmpw_cdImageEditor_pfly_fix" /> - <g:PushButton ui:field="refreshButton" addStyleNames="{style.refreshButton} avmpw_refreshButton_pfly_fix"> - <g:upFace image='{resources.refreshButtonImage}' /> - </g:PushButton> - </g:HorizontalPanel> - <ge:EntityModelCheckBoxEditor ui:field="bootMenuEnabledEditor" label="{constants.bootMenuEnabled}" addStyleNames="{style.checkbox}" /> - </g:FlowPanel> - <g:FlowPanel ui:field="linuxBootOptionsPanel" addStyleNames="{style.sectionPanel}" visible="false"> - <g:Label addStyleNames="{style.sectionLabel}" text="{constants.linuxBootOptionsVmPopup}" /> - <ge:StringEntityModelTextBoxEditor ui:field="kernel_pathEditor" /> - <ge:StringEntityModelTextBoxEditor ui:field="initrd_pathEditor" /> - <ge:StringEntityModelTextBoxEditor ui:field="kernel_parametersEditor" /> - </g:FlowPanel> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="rngDeviceTab"> - <t:content> - <g:FlowPanel> - <w:EntityModelDetachableWidgetWithInfo ui:field="isRngEnabledCheckboxWithInfoIcon" addStyleNames="{style.checkbox}" /> - <g:FlowPanel ui:field="rngPanel"> - <ge:IntegerEntityModelTextBoxEditor ui:field="rngPeriodEditor"/> - <ge:IntegerEntityModelTextBoxEditor ui:field="rngBytesEditor" /> - <g:Label ui:field="rngSourceLabel" text="{constants.deviceSource}" addStyleNames="{style.sectionLabel}" /> - <ge:EntityModelRadioButtonEditor ui:field="rngSourceRandom" /> - <ge:EntityModelRadioButtonEditor ui:field="rngSourceHwrng" /> - </g:FlowPanel> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - <t:tab> - <t:DialogTab ui:field="customPropertiesTab"> - <t:content> - <g:FlowPanel> - <k:KeyValueWidget ui:field="customPropertiesSheetEditor"/> - </g:FlowPanel> - </t:content> - </t:DialogTab> - </t:tab> - </t:DialogTabPanel> - -</ui:UiBinder> 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 5c42755..1a080d0 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 @@ -12,7 +12,7 @@ import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.ToStringEntityModelRenderer; -import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.AbstractVmPopupWidget; import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfigMap; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import org.ovirt.engine.ui.uicompat.Event; 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/vm/AbstractVmPopupWidget.java similarity index 78% rename from frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java rename to frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.java index 99bbd19..e2c13fa 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/vm/AbstractVmPopupWidget.java @@ -1,5 +1,5 @@ -package org.ovirt.engine.ui.common.widget.uicommon.popup; +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; import static org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.simpleField; @@ -51,10 +51,8 @@ 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; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelLabel; @@ -62,15 +60,11 @@ import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.form.key_value.KeyValueWidget; import org.ovirt.engine.ui.common.widget.parser.MemorySizeParser; -import org.ovirt.engine.ui.common.widget.profile.ProfilesInstanceTypeEditor; import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer; import org.ovirt.engine.ui.common.widget.renderer.MemorySizeRenderer; import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; -import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig; -import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfigMap; -import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.SerialNumberPolicyWidget; -import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupVmInitWidget; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModeSwitchingPopupWidget; import org.ovirt.engine.ui.common.widget.uicommon.storage.DisksAllocationView; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; @@ -108,7 +102,6 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RadioButton; -import com.google.gwt.user.client.ui.ValueLabel; import com.google.gwt.user.client.ui.Widget; public abstract class AbstractVmPopupWidget extends AbstractModeSwitchingPopupWidget<UnitVmModel> { @@ -154,6 +147,9 @@ protected DialogTab generalTab; @UiField(provided = true) + GeneralVmTabContent generalTabContent; + + @UiField(provided = true) @Path(value = "dataCenterWithClustersList.selectedItem") @WithElementId("dataCenterWithCluster") public ListModelTypeAheadListBoxEditor<DataCenterWithCluster> dataCenterWithClusterEditor; @@ -163,33 +159,7 @@ @WithElementId("quota") public ListModelTypeAheadListBoxEditor<Quota> quotaEditor; - @UiField - @Ignore - public Label nameLabel; - @UiField(provided = true) - @Path(value = "name.entity") - @WithElementId("name") - public StringEntityModelTextBoxOnlyEditor nameEditor; - - @UiField(provided = true) - @Path(value = "templateVersionName.entity") - @WithElementId("templateVersionName") - public StringEntityModelTextBoxEditor templateVersionNameEditor; - - @UiField(provided = true) - @Ignore - public InfoIcon poolNameIcon; - - @UiField(provided = true) - @Path(value = "description.entity") - @WithElementId("description") - public StringEntityModelTextBoxEditor descriptionEditor; - - @UiField - @Path(value = "comment.entity") - @WithElementId("comment") - public StringEntityModelTextBoxEditor commentEditor; @UiField(provided = true) @Path(value = "baseTemplate.selectedItem") @@ -216,95 +186,12 @@ @WithElementId("instanceType") public ListModelTypeAheadListBoxEditor<InstanceType> instanceTypesEditor; - @UiField(provided = true) - @Path(value = "isDeleteProtected.entity") - @WithElementId("isDeleteProtected") - public EntityModelCheckBoxEditor isDeleteProtectedEditor; - - @UiField - public Panel logicalNetworksEditorPanel; - - @UiField - @Ignore - @WithElementId("vnicsEditor") - public ProfilesInstanceTypeEditor profilesInstanceTypeEditor; - - @UiField - @Ignore - Label generalWarningMessage; - // == System == @UiField protected DialogTab systemTab; @UiField(provided = true) - public EntityModelDetachableWidgetWithLabel detachableMemSizeEditor; - - @Path(value = "memSize.entity") - @WithElementId("memSize") - public EntityModelTextBoxEditor<Integer> memSizeEditor; - - @Path(value = "totalCPUCores.entity") - @WithElementId("totalCPUCores") - public StringEntityModelTextBoxOnlyEditor totalvCPUsEditor; - - @UiField(provided = true) - @Ignore - public EntityModelDetachableWidgetWithInfo<String> totalvCPUsEditorWithInfoIcon; - - @UiField - @Ignore - AdvancedParametersExpander vcpusAdvancedParameterExpander; - - @UiField - @Ignore - Panel vcpusAdvancedParameterExpanderContent; - - @Path(value = "numOfSockets.selectedItem") - @WithElementId("numOfSockets") - public ListModelListBoxEditor<Integer> numOfSocketsEditor; - - @Path(value = "coresPerSocket.selectedItem") - @WithElementId("coresPerSocket") - public ListModelListBoxEditor<Integer> corePerSocketEditor; - - @UiField(provided = true) - public EntityModelDetachableWidgetWithLabel numOfSocketsEditorWithDetachable; - - @UiField(provided = true) - public EntityModelDetachableWidgetWithLabel corePerSocketEditorWithDetachable; - - @UiField - @Ignore - public Label ssoMethodLabel; - - @UiField(provided = true) - @Path(value = "ssoMethodNone.entity") - @WithElementId("ssoMethodNone") - public EntityModelRadioButtonEditor ssoMethodNone; - - @UiField(provided = true) - @Path(value = "ssoMethodGuestAgent.entity") - @WithElementId("ssoMethodGuestAgent") - public EntityModelRadioButtonEditor ssoMethodGuestAgent; - - @Path(value = "isSoundcardEnabled.entity") - @WithElementId("isSoundcardEnabled") - public EntityModelCheckBoxEditor isSoundcardEnabledEditor; - - @UiField(provided = true) - @Ignore - public EntityModelDetachableWidget isSoundcardEnabledEditorWithDetachable; - - @UiField(provided = true) - @Path("copyPermissions.entity") - @WithElementId("copyTemplatePermissions") - public EntityModelCheckBoxEditor copyTemplatePermissionsEditor; - - @UiField(provided = true) - @Ignore - @WithElementId("serialNumberPolicy") - public SerialNumberPolicyWidget serialNumberPolicyEditor; + SystemVmTabContent systemTabContent; // == Pools == @UiField @@ -314,102 +201,6 @@ @Path(value = "poolType.selectedItem") @WithElementId("poolType") public ListModelListBoxEditor<EntityModel<VmPoolType>> poolTypeEditor; - - @UiField(provided = true) - @Ignore - public InfoIcon newPoolPrestartedVmsIcon; - - @UiField(provided = true) - @Ignore - public InfoIcon editPoolPrestartedVmsIcon; - - @UiField(provided = true) - @Ignore - public InfoIcon newPoolMaxAssignedVmsPerUserIcon; - - @UiField(provided = true) - @Ignore - public InfoIcon editPoolMaxAssignedVmsPerUserIcon; - - @UiField(provided = true) - @Path(value = "prestartedVms.entity") - @WithElementId("prestartedVms") - public IntegerEntityModelTextBoxOnlyEditor prestartedVmsEditor; - - @UiField(provided = true) - @Path("maxAssignedVmsPerUser.entity") - @WithElementId("maxAssignedVmsPerUser") - public IntegerEntityModelTextBoxOnlyEditor maxAssignedVmsPerUserEditor; - - @UiField - @Ignore - public FlowPanel newPoolEditVmsPanel; - - @UiField - @Ignore - public FlowPanel newPoolEditMaxAssignedVmsPerUserPanel; - - @UiField - @Ignore - public Label prestartedLabel; - - @UiField(provided = true) - @Path("numOfDesktops.entity") - @WithElementId("numOfVms") - public EntityModelTextBoxEditor<Integer> numOfVmsEditor; - - @UiField - @Ignore - public FlowPanel editPoolEditVmsPanel; - - @UiField - public FlowPanel editIncreaseVmsPanel; - - @UiField - @Ignore - public FlowPanel editPoolIncraseNumOfVmsPanel; - - @UiField - public FlowPanel editPrestartedVmsPanel; - @UiField - @Ignore - public FlowPanel editPoolEditMaxAssignedVmsPerUserPanel; - - @UiField - @Ignore - public Label editPrestartedVmsLabel; - - @UiField(provided = true) - @Path("prestartedVms.entity") - @WithElementId("editPrestartedVms") - public IntegerEntityModelTextBoxOnlyEditor editPrestartedVmsEditor; - - @UiField(provided = true) - @Path("numOfDesktops.entity") - @WithElementId("incraseNumOfVms") - public EntityModelTextBoxOnlyEditor<Integer> incraseNumOfVmsEditor; - - @UiField(provided = true) - @Path("maxAssignedVmsPerUser.entity") - @WithElementId("editMaxAssignedVmsPerUser") - public IntegerEntityModelTextBoxOnlyEditor editMaxAssignedVmsPerUserEditor; - - @UiField(provided = true) - @Path("assignedVms.entity") - public ValueLabel<Integer> outOfxInPool; - - @UiField - @Ignore - // system tab -> general time zone - public Label generalLabel; - - @Path(value = "timeZone.selectedItem") - @WithElementId("timeZone") - public ListModelListBoxOnlyEditor<TimeZoneModel> timeZoneEditor; - - @UiField(provided = true) - @Ignore - public EntityModelWidgetWithInfo<String> timeZoneEditorWithInfo; // ==Initial run Tab== @UiField @@ -430,87 +221,7 @@ protected DialogTab consoleTab; @UiField(provided = true) - @Path(value = "displayProtocol.selectedItem") - @WithElementId("displayProtocol") - public ListModelListBoxEditor<EntityModel<DisplayType>> displayProtocolEditor; - - @UiField(provided = true) - @Path(value = "vncKeyboardLayout.selectedItem") - @WithElementId("vncKeyboardLayout") - public ListModelListBoxEditor<String> vncKeyboardLayoutEditor; - - @UiField(provided = true) - @Path(value = "usbPolicy.selectedItem") - @WithElementId("usbPolicy") - public ListModelListBoxEditor<UsbPolicy> usbSupportEditor; - - @UiField(provided = true) - @Path(value = "numOfMonitors.selectedItem") - @WithElementId("numOfMonitors") - public ListModelListBoxEditor<Integer> numOfMonitorsEditor; - - @UiField - @Ignore - public Label numOfMonitorsLabel; - - @UiField(provided = true) - @Path(value = "isSingleQxlEnabled.entity") - @WithElementId("isSingleQxlEnabled") - public EntityModelCheckBoxEditor isSingleQxlEnabledEditor; - - @UiField(provided = true) - @Path(value = "isStateless.entity") - @WithElementId("isStateless") - public EntityModelCheckBoxEditor isStatelessEditor; - - @UiField(provided = true) - @Path(value = "isRunAndPause.entity") - @WithElementId("isRunAndPause") - public EntityModelCheckBoxEditor isRunAndPauseEditor; - - @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; - - - @Path(value = "isConsoleDeviceEnabled.entity") - @WithElementId("isConsoleDeviceEnabled") - public EntityModelCheckBoxEditor isConsoleDeviceEnabledEditor; - - @UiField(provided = true) - @Ignore - public EntityModelDetachableWidget isConsoleDeviceEnabledEditorWithDetachable; - - @UiField - @Path(value = "spiceProxy.entity") - @WithElementId - public StringEntityModelTextBoxEditor spiceProxyEditor; - - @UiField(provided = true) - @Ignore - public EntityModelWidgetWithInfo<String> spiceProxyEnabledCheckboxWithInfoIcon; - - @Path(value = "spiceProxyEnabled.entity") - @WithElementId - public EntityModelCheckBoxOnlyEditor spiceProxyOverrideEnabledEditor; - - @UiField(provided = true) - @Path("spiceFileTransferEnabled.entity") - @WithElementId("spiceFileTransferEnabled") - public EntityModelCheckBoxEditor spiceFileTransferEnabledEditor; - - @UiField(provided = true) - @Path("spiceCopyPasteEnabled.entity") - @WithElementId("spiceCopyPasteEnabled") - public EntityModelCheckBoxEditor spiceCopyPasteEnabledEditor; + ConsoleVmTabContent consoleTabContent; // == Rng Tab == @UiField @@ -778,10 +489,6 @@ @WithElementId("kernelParameters") public StringEntityModelTextBoxEditor kernel_parametersEditor; - @UiField - @Ignore - Label nativeUsbWarningMessage; - // ==Custom Properties Tab== @UiField protected DialogTab customPropertiesTab; @@ -791,14 +498,6 @@ protected KeyValueWidget<KeyValueModel> customPropertiesSheetEditor; private final CommonApplicationMessages messages; - - @UiField - @Ignore - protected AdvancedParametersExpander expander; - - @UiField - @Ignore - Panel expanderContent; @UiField @Ignore @@ -829,8 +528,6 @@ initListBoxEditors(); // 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()); @@ -840,9 +537,6 @@ isHighlyAvailableEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); watchdogModelEditor = new ListModelListBoxEditor<String>(new ModeSwitchingVisibilityRenderer()); watchdogActionEditor = new ListModelListBoxEditor<String>(new ModeSwitchingVisibilityRenderer()); - isStatelessEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); - isRunAndPauseEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); - isDeleteProtectedEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); isSmartcardEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); isConsoleDeviceEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer(), true); isRngEnabledEditor = new EntityModelCheckBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); @@ -857,7 +551,6 @@ isSoundcardEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); ssoMethodNone = new EntityModelRadioButtonEditor("ssoMethod", new ModeSwitchingVisibilityRenderer()); //$NON-NLS-1$ ssoMethodGuestAgent = new EntityModelRadioButtonEditor("ssoMethod", new ModeSwitchingVisibilityRenderer());//$NON-NLS-1$ - copyTemplatePermissionsEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); isMemoryBalloonDeviceEnabled = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer(), true); isVirtioScsiEnabled = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); isSingleQxlEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); @@ -876,21 +569,19 @@ priorityEditor = new EntityModelCellTable<ListModel>( (Resources) GWT.create(ButtonCellTableResources.class)); disksAllocationView = new DisksAllocationView(constants); - serialNumberPolicyEditor = new SerialNumberPolicyWidget(eventBus, applicationTemplates, messages, resources, new ModeSwitchingVisibilityRenderer()); spiceFileTransferEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); spiceCopyPasteEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); - initPoolSpecificWidgets(resources, messages); + generalTabContent = new GeneralVmTabContent(this, resources, messages, constants, applicationTemplates); + systemTabContent = new SystemVmTabContent(this, eventBus, messages, resources, constants, applicationTemplates) + initTextBoxEditors(); initSpiceProxy(); - initTotalVcpus(); initDetachableFields(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); expander.initWithContent(expanderContent.getElement()); - vcpusAdvancedParameterExpander.initWithContent(vcpusAdvancedParameterExpanderContent.getElement()); - editPrestartedVmsEditor.setKeepTitleOnSetEnabled(true); applyStyles(); @@ -913,7 +604,6 @@ } 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); @@ -940,67 +630,16 @@ spiceProxyEnabledCheckboxWithInfoIcon = new EntityModelWidgetWithInfo<String>(label, spiceProxyOverrideEnabledEditor); } - private void initTotalVcpus() { - StringEntityModelLabel label = new StringEntityModelLabel(); - label.setText(constants.numOfVCPUs()); - label.addStyleName("numCPUs_pfly_fix"); //$NON-NLS-1$ - totalvCPUsEditor = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - totalvCPUsEditorWithInfoIcon = new EntityModelDetachableWidgetWithInfo<String>(label, totalvCPUsEditor); - totalvCPUsEditorWithInfoIcon.setExplanation(applicationTemplates.italicText(messages.hotPlugUnplugCpuWarning())); - } - public void setSpiceProxyOverrideExplanation(String explanation) { spiceProxyEnabledCheckboxWithInfoIcon.setExplanation(applicationTemplates.italicText(explanation)); } private void initTextBoxEditors() { - templateVersionNameEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); - descriptionEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); - commentEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); - numOfVmsEditor = new IntegerEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); cpuPinning = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); cpuSharesAmountEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); kernel_pathEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); initrd_pathEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); kernel_parametersEditor = new StringEntityModelTextBoxEditor(new ModeSwitchingVisibilityRenderer()); - nameEditor = new StringEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - prestartedVmsEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - editPrestartedVmsEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - maxAssignedVmsPerUserEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - editMaxAssignedVmsPerUserEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); - } - - protected void initPoolSpecificWidgets(CommonApplicationResources resources, - final CommonApplicationMessages messages) { - createNumOfDesktopEditors(); - - incraseNumOfVmsEditor.setKeepTitleOnSetEnabled(true); - numOfVmsEditor.setKeepTitleOnSetEnabled(true); - - newPoolPrestartedVmsIcon = - new InfoIcon(applicationTemplates.italicText(messages.prestartedHelp()), resources); - - editPoolPrestartedVmsIcon = - new InfoIcon(applicationTemplates.italicText(messages.prestartedHelp()), resources); - - poolNameIcon = - new InfoIcon(applicationTemplates.italicText(messages.poolNameHelp()), resources); - - newPoolMaxAssignedVmsPerUserIcon = - new InfoIcon(applicationTemplates.italicText(messages.maxAssignedVmsPerUserHelp()), resources); - - editPoolMaxAssignedVmsPerUserIcon = - new InfoIcon(applicationTemplates.italicText(messages.maxAssignedVmsPerUserHelp()), resources); - - outOfxInPool = new ValueLabel<Integer>(new AbstractRenderer<Integer>() { - - @Override - public String render(Integer object) { - return messages.outOfXVMsInPool(object.toString()); - } - - }); - } /** @@ -1139,11 +778,6 @@ 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>>() { @Override @@ -1162,11 +796,6 @@ } } }, new ModeSwitchingVisibilityRenderer()); - - StringEntityModelLabel label = new StringEntityModelLabel(); - label.setText(constants.tzVmPopup()); - timeZoneEditorWithInfo = new EntityModelWidgetWithInfo<String>(label, timeZoneEditor); - timeZoneEditorWithInfo.setExplanation(applicationTemplates.italicText(constants.timeZoneInfo())); // Console tab displayProtocolEditor = new ListModelListBoxEditor<EntityModel<DisplayType>>(new NullSafeRenderer<EntityModel<DisplayType>>() { @@ -1255,10 +884,6 @@ generalTab.setLabel(constants.GeneralVmPopup()); dataCenterWithClusterEditor.setLabel(constants.hostClusterVmPopup()); quotaEditor.setLabel(constants.quotaVmPopup()); - nameLabel.setText(constants.nameVmPopup()); - templateVersionNameEditor.setLabel(constants.templateVersionName()); - descriptionEditor.setLabel(constants.descriptionVmPopup()); - commentEditor.setLabel(constants.commentLabel()); baseTemplateEditor.setLabel(constants.basedOnTemplateVmPopup()); templateEditor.setLabel(constants.templateSubVersion()); @@ -1266,11 +891,7 @@ oSTypeEditor.setLabel(constants.osVmPopup()); vmTypeEditor.setLabel(constants.optimizedFor()); - isStatelessEditor.setLabel(constants.statelessVmPopup()); - isRunAndPauseEditor.setLabel(constants.runAndPauseVmPopup()); - isDeleteProtectedEditor.setLabel(constants.deleteProtectionPopup()); isConsoleDeviceEnabledEditor.setLabel(constants.consoleDeviceEnabled()); - copyTemplatePermissionsEditor.setLabel(constants.copyTemplatePermissions()); isSmartcardEnabledEditor.setLabel(constants.smartcardVmPopup()); isMemoryBalloonDeviceEnabled.setLabel(constants.memoryBalloonDeviceEnabled()); isVirtioScsiEnabled.setLabel(constants.isVirtioScsiEnabled()); @@ -1287,12 +908,6 @@ // Pools Tab poolTab.setLabel(constants.poolVmPopup()); poolTypeEditor.setLabel(constants.poolTypeVmPopup()); - editPrestartedVmsLabel.setText(constants.prestartedVms()); - - prestartedLabel.setText(constants.prestartedPoolPopup()); - numOfVmsEditor.setLabel(constants.numOfVmsPoolPopup()); - maxAssignedVmsPerUserEditor.setLabel(constants.maxAssignedVmsPerUser()); - editMaxAssignedVmsPerUserEditor.setLabel(constants.maxAssignedVmsPerUser()); // initial run Tab initialRunTab.setLabel(constants.initialRunVmPopup()); @@ -1340,13 +955,6 @@ kernel_pathEditor.setLabel(constants.kernelPathVmPopup()); initrd_pathEditor.setLabel(constants.initrdPathVmPopup()); kernel_parametersEditor.setLabel(constants.kernelParamsVmPopup()); - - // System tab - memSizeEditor.setLabel(constants.memSizeVmPopup()); - detachableMemSizeEditor.setLabel(constants.memSizeVmPopup()); - totalvCPUsEditor.setLabel(constants.numOfVCPUs()); - corePerSocketEditorWithDetachable.setLabel(constants.coresPerSocket()); - numOfSocketsEditorWithDetachable.setLabel(constants.numOfSockets()); } protected void applyStyles() { @@ -1369,13 +977,14 @@ super.edit(model); unitVmModel = model; + generalTabContent.edit(model); + systemTabContent.edit(model); + priorityEditor.setRowData(new ArrayList<EntityModel>()); priorityEditor.asEditor().edit(model.getPriority()); driver.edit(model); - profilesInstanceTypeEditor.edit(model.getNicsWithLogicalNetworks()); customPropertiesSheetEditor.edit(model.getCustomPropertySheet()); vmInitEditor.edit(model.getVmInitModel()); - serialNumberPolicyEditor.edit(model.getSerialNumberPolicy()); initTabAvailabilityListeners(model); initListeners(model); hideAlwaysHiddenFields(); @@ -1753,16 +1362,17 @@ @Override public UnitVmModel flush() { + generalTabContent.flush(); + systemTabContent.flush(); + priorityEditor.flush(); - profilesInstanceTypeEditor.flush(); vmInitEditor.flush(); - serialNumberPolicyEditor.flush(); return driver.flush(); } @Override public void focusInput() { - nameEditor.setFocus(true); + generalTabContent.focusInput(); } public interface ButtonCellTableResources extends CellTable.Resources { @@ -1770,45 +1380,25 @@ } @Override - @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/common/css/ButtonCellTable.css" }) + @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/common/css/ButtonCellTable.css"}) TableStyle cellTableStyle(); } @Override public int setTabIndexes(int nextTabIndex) { - // ==General Tab== - nextTabIndex = generalTab.setTabIndexes(nextTabIndex); quotaEditor.setTabIndex(nextTabIndex++); oSTypeEditor.setTabIndex(nextTabIndex++); baseTemplateEditor.setTabIndex(nextTabIndex++); instanceTypesEditor.setTabIndexes(nextTabIndex++); templateEditor.setTabIndex(nextTabIndex++); - nameEditor.setTabIndex(nextTabIndex++); - templateVersionNameEditor.setTabIndex(nextTabIndex++); - descriptionEditor.setTabIndex(nextTabIndex++); - commentEditor.setTabIndex(nextTabIndex++); - isStatelessEditor.setTabIndex(nextTabIndex++); - isRunAndPauseEditor.setTabIndex(nextTabIndex++); - isDeleteProtectedEditor.setTabIndex(nextTabIndex++); - copyTemplatePermissionsEditor.setTabIndex(nextTabIndex++); - - numOfVmsEditor.setTabIndex(nextTabIndex++); - prestartedVmsEditor.setTabIndex(nextTabIndex++); - editPrestartedVmsEditor.setTabIndex(nextTabIndex++); - incraseNumOfVmsEditor.setTabIndex(nextTabIndex++); - maxAssignedVmsPerUserEditor.setTabIndex(nextTabIndex++); - editMaxAssignedVmsPerUserEditor.setTabIndex(nextTabIndex++); + // ==General Tab== + nextTabIndex = generalTab.setTabIndexes(nextTabIndex); + nextTabIndex = generalTabContent.setTabIndexes(nextTabIndex); // ==System Tab== nextTabIndex = systemTab.setTabIndexes(nextTabIndex); - memSizeEditor.setTabIndex(nextTabIndex++); - totalvCPUsEditor.setTabIndex(nextTabIndex++); - - nextTabIndex = vcpusAdvancedParameterExpander.setTabIndexes(nextTabIndex); - corePerSocketEditor.setTabIndex(nextTabIndex++); - numOfSocketsEditor.setTabIndex(nextTabIndex++); - nextTabIndex = serialNumberPolicyEditor.setTabIndexes(nextTabIndex); + nextTabIndex = systemTabContent.setTabIndexes(nextTabIndex); // == Pools == nextTabIndex = poolTab.setTabIndexes(nextTabIndex); @@ -1820,22 +1410,7 @@ // ==Console Tab== nextTabIndex = consoleTab.setTabIndexes(nextTabIndex); - displayProtocolEditor.setTabIndex(nextTabIndex++); - vncKeyboardLayoutEditor.setTabIndex(nextTabIndex++); - usbSupportEditor.setTabIndex(nextTabIndex++); - isSingleQxlEnabledEditor.setTabIndex(nextTabIndex++); - numOfMonitorsEditor.setTabIndex(nextTabIndex++); - isSmartcardEnabledEditor.setTabIndex(nextTabIndex++); - ssoMethodNone.setTabIndex(nextTabIndex++); - ssoMethodGuestAgent.setTabIndex(nextTabIndex++); - nextTabIndex = expander.setTabIndexes(nextTabIndex); - allowConsoleReconnectEditor.setTabIndex(nextTabIndex++); - isSoundcardEnabledEditor.setTabIndex(nextTabIndex++); - isConsoleDeviceEnabledEditor.setTabIndex(nextTabIndex++); - spiceProxyOverrideEnabledEditor.setTabIndex(nextTabIndex++); - spiceProxyEditor.setTabIndex(nextTabIndex++); - spiceFileTransferEnabledEditor.setTabIndex(nextTabIndex++); - spiceCopyPasteEnabledEditor.setTabIndex(nextTabIndex++); + nextTabIndex = consoleTabContent.setTabIndexes(nextTabIndex); // ==Host Tab== nextTabIndex = hostTab.setTabIndexes(nextTabIndex); @@ -1921,18 +1496,9 @@ } protected List<Widget> poolSpecificFields() { - return Arrays.<Widget> asList(numOfVmsEditor, - newPoolEditVmsPanel, - editPoolEditVmsPanel, - editPoolIncraseNumOfVmsPanel, - poolTab, - prestartedVmsEditor, - poolNameIcon, - newPoolEditMaxAssignedVmsPerUserPanel, - editPoolEditMaxAssignedVmsPerUserPanel, - spiceProxyEditor, - spiceProxyEnabledCheckboxWithInfoIcon, - spiceProxyOverrideEnabledEditor); + final List<Widget> widgets = Arrays.<Widget>asList(poolTab, spiceProxyEditor, spiceProxyEnabledCheckboxWithInfoIcon, spiceProxyOverrideEnabledEditor); + widgets.addAll(generalTabContent.poolSpecificFields()); + return widgets; } protected List<Widget> allTabs() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.ui.xml new file mode 100644 index 0000000..ed0822b --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmPopupWidget.ui.xml @@ -0,0 +1,509 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget" + xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" + xmlns:t="urn:import:org.ovirt.engine.ui.common.widget.dialog.tab" + xmlns:s="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage" + xmlns:k="urn:import:org.ovirt.engine.ui.common.widget.form.key_value" + xmlns:vm="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.vm"> + + <ui:with field='resources' type='org.ovirt.engine.ui.common.CommonApplicationResources' /> + <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> + + <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.vm.AbstractVmPopupWidget.Style"> + + .sectionPanel { + margin-bottom: 20px; + } + + .sectionPanelTight { + margin-bottom: 6px; + float: left; + width: 100%; + } + + .sectionLabel { + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; + } + + .sectionComment { + margin-top: 10px; + margin-left: 5px; + font-style: italic; + } + + .migrationDowntimePanel { + padding-left: 1px; + line-height: 30px; + } + + .overrideMigrationDowntime { + display: inline; + float: left; + width: 50px; + } + + .overrideMigrationDowntime div { + width: 20px; + margin-top: 0; + } + + .overrideMigrationDowntime>div { + width: 50px; + } + + .migrationDowntimeLabel { + display: inline-block; + float: left; + max-width: 184px; + } + + .migrationDowntimeInfoIcon { + display: inline; + float: left; + } + + .migrationDowntime { + display: inline; + float: right; + padding-right: 9px; + } + <!-- turns off the original styles --> + + .checkbox { + margin-left: -9px; + } + + .longCheckboxContent { + width: 90%; + } + + .provisioningEditor { + padding-right: 25px; + } + + .provisioningEditorContent { + display: none; + } + + .provisioningRadioContent { + padding-top: 3px; + width: 100%; + } + + .disksPanel { + width: 490px; + margin: 10px 0; + display: inline-table; + } + + .textBox { + width: 30px; + float: right; + } + + .numOfVmsLabel { + margin-left: 5px; + color: #333333; + } + + .assignedVmsLabel { + margin-left: 8px; + } + + .prestartedHintLabel { + font-size: 7pt; + color: gray; + text-align: right; + } + + .radioButton { + + } + + .radioButtonSpecificHost { + margin-left: 5px; + } + + .label { + width: 350px; + } + + .labelDisabled { + color: gray; + } + + .runHostPanel { + + } + + .attachCdPanel { + width: 100%; + } + + .cdAttachedLabelWidth { + width: 30px; + } + + .hostRunMigrationOptions { + margin-left: 6px; + } + + .cpuPinningStyle { + float: left; + } + + .expanderContent { + padding-left: 10px; + float: left; + } + + .infoIcon { + float: left; + padding-top: 5px; + padding-left: 2px; + } + + .migrationSelect { + margin-right: 7px; + } + + .generalTabExtendedRightWidgetWidth { + /* pfly_fix hack + width: 250px !important; + */ + } + + .generalTabExtendedRightWidgetWrapperWidth { + width: 280px !important; + } + + .headerPanel { + padding-bottom: 6px; + } + + .refreshButton { + float: right; + font-size: 12px; + height: 14px; + line-height: 14px; + width: 12px; + margin-right: 5px; + padding: 2px; + background: transparent; + border: 1px solid transparent; + } + + .cdImageEditor { + width: 197px; + } + + .isVirtioScsiEnabledEditor { + width: 100%; + } + + .hostSelector { + width: 416px; + } + + .labelToCouple { + line-height: 30px; + text-align: left; + float: left; + width: 100%; + } + + .labelToCoupleLabel { + color: gray; + font-family: Verdana, sans-serif; + font-size: 13px; + line-height: 30px; + padding: 0 5px; + float: left; + } + + .labelToCoupleCouple { + float: right; + line-height: 30px; + padding: 0 5px; + width: 230px; + } + + .labelToCoupleCoupleLeft { + float: left; + } + + .labelToCoupleCoupleRight { + float: left; + } + + .cpuSahresValueListBox, .cpuSahresValueTextBox { + width: 110px; + } + + .cpuPinningTextBox { + width: 197px; + padding-left: 5px; + } + + .cpuSahresValueTextBox { + padding-left: 5px; + } + + .migrationSelectorInner { + width: 260px; + } + + .headerCol { + float: left; + } + + .floatLeft { + float: left; + } + + .fullWidth { + width: 100%; + } + + .detachableStyle { + display: inline-block; + } + + </ui:style> + + <t:DialogTabPanel width="100%" height="100%" ui:field="mainTabPanel"> + <t:header> + <g:FlowPanel addStyleNames="{style.headerPanel}"> + <e:ListModelTypeAheadListBoxEditor ui:field="dataCenterWithClusterEditor" /> + <e:ListModelTypeAheadListBoxEditor ui:field="quotaEditor" /> + <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> + <t:tab> + <t:DialogTab ui:field="generalTab"> + <t:content> + <vm:GeneralVmTabContent ui:field="generalTabContent" /> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="systemTab"> + <t:content> + <vm:SystemVmTabContent ui:field="systemTabContent" /> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="poolTab"> + <t:content> + <g:FlowPanel> + <e:ListModelListBoxEditor ui:field="poolTypeEditor" /> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="initialRunTab"> + <t:content> + <g:FlowPanel> + <ge:EntityModelCheckBoxEditor ui:field="vmInitEnabledEditor"/> + <vm:VmPopupVmInitWidget ui:field="vmInitEditor" /> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="consoleTab"> + <t:content> + <vm:ConsoleVmTabContent ui:field="consoleTabContent" /> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="hostTab"> + <t:content> + <g:FlowPanel> + <g:FlowPanel ui:field="startRunningOnPanel"> + <d:InfoIcon ui:field="nonEditableWhileVmNotDownInfo" addStyleNames="{style.labelToCoupleCoupleLeft} avmpw_infoIcon_pfly_fix"/> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.runOnVmPopup}" /> + <g:VerticalPanel addStyleNames="{style.runHostPanel}" verticalAlignment='ALIGN_MIDDLE'> + <ge:EntityModelRadioButtonEditor ui:field="isAutoAssignEditor" + addStyleNames="{style.radioButton}" /> + <g:HorizontalPanel verticalAlignment='ALIGN_MIDDLE'> + <g:RadioButton ui:field="specificHost" addStyleNames="{style.radioButtonSpecificHost}" /> + <g:Label ui:field="specificHostLabel" text="{constants.specificVmPopup}" addStyleNames="avmpw_specificHostLabel_pfly_fix" /> + <e:ListModelListBoxEditor ui:field="defaultHostEditor" addStyleNames="{style.hostSelector}"/> + </g:HorizontalPanel> + </g:VerticalPanel> + </g:FlowPanel> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.runMigrationOptionsVmPopup}" /> + <g:VerticalPanel width="100%" addStyleNames="{style.hostRunMigrationOptions}"> + <ge:EntityModelDetachableWidget ui:field="migrationModeEditorWithDetachable" addStyleNames="{style.migrationSelect}"/> + <g:FlowPanel addStyleNames="{style.migrationDowntimePanel}"> + <ge:EntityModelDetachableWidget ui:field="overrideMigrationDowntimeEditorWithDetachable" addStyleNames="{style.overrideMigrationDowntime} avmpw_overrideMigrationDowntime_pfly_fix" /> + <g:Label text="{constants.overrideMigrationDowntimeLabel}" addStyleNames="{style.migrationDowntimeLabel} avmpw_migrationDowntimeLabel_pfly_fix" /> + <d:InfoIcon ui:field="migrationDowntimeInfoIcon" addStyleNames="{style.migrationDowntimeInfoIcon} avmpw_infoIcon_pfly_fix" /> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="migrationDowntimeEditor" addStyleNames="{style.migrationDowntime}" /> + </g:FlowPanel> + <ge:EntityModelCheckBoxEditor ui:field="hostCpuEditor" addStyleNames="{style.checkbox}"/> + </g:VerticalPanel> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="highAvailabilityTab"> + <t:content> + <g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <ge:EntityModelDetachableWidget ui:field="isHighlyAvailableEditorWithDetachable" addStyleNames="{style.checkbox}" /> + </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <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}, {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> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="resourceAllocationTab"> + <t:content> + <g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanelTight}" ui:field="cpuAllocationPanel" > + <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}"> + <e:ListModelListBoxOnlyEditor ui:field="cpuSharesAmountSelectionEditor" addStyleNames="{style.labelToCoupleCoupleLeft}" contentWidgetStyleName="{style.cpuSahresValueListBox}" /> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="cpuSharesAmountEditor" addStyleNames="{style.labelToCoupleCoupleRight}" contentWidgetStyleName="{style.cpuSahresValueTextBox} avmpw_cpuSahresValueTextBox_pfly_fix" /> + </g:FlowPanel> + </g:FlowPanel> + + <g:FlowPanel addStyleNames="{style.labelToCouple}"> + <g:Label text="{constants.cpuPinningLabel}" addStyleNames="{style.labelToCoupleLabel}"/> + <g:FlowPanel addStyleNames="{style.labelToCoupleCouple}"> + <d:InfoIcon ui:field="cpuPinningInfo" addStyleNames="{style.labelToCoupleCoupleLeft} avmpw_infoIcon_pfly_fix"/> + <ge:StringEntityModelTextBoxOnlyEditor ui:field="cpuPinning" addStyleNames="{style.labelToCoupleCoupleRight}" contentWidgetStyleName="{style.cpuPinningTextBox} avmpw_cpuPinningTextBox_pfly_fix"/> + </g:FlowPanel> + </g:FlowPanel> + + </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanelTight}"> + <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> + <g:FlowPanel ui:field="storageAllocationPanel" addStyleNames="{style.sectionPanelTight}"> + <g:HorizontalPanel> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.storageAllocVmPopup}" /> + <g:Label addStyleNames="{style.sectionComment}" text="{constants.availOnlyTemplSelectedVmPopup}" /> + </g:HorizontalPanel> + <g:HorizontalPanel ui:field="provisionSelectionPanel"> + <e:ListModelListBoxEditor ui:field="provisioningEditor" addStyleNames="{style.provisioningEditor}" /> + <g:VerticalPanel> + <ge:EntityModelRadioButtonEditor ui:field="provisioningThinEditor"/> + <ge:EntityModelRadioButtonEditor ui:field="provisioningCloneEditor"/> + </g:VerticalPanel> + </g:HorizontalPanel> + </g:FlowPanel> + <g:FlowPanel ui:field="disksAllocationPanel" addStyleNames="{style.sectionPanelTight}"> + <g:HorizontalPanel> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.disksAllocation}" /> + </g:HorizontalPanel> + <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 ui:field="disksPanel"> + <s:DisksAllocationView ui:field="disksAllocationView" listHeight="170px" listWidth="490px" showVolumeType="true" addStyleNames="{style.disksPanel}" /> + </g:FlowPanel> + </g:FlowPanel> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="bootOptionsTab"> + <t:content> + <g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.bootSequenceVmPopup}" /> + <e:ListModelListBoxEditor ui:field="firstBootDeviceEditor" /> + <e:ListModelListBoxEditor ui:field="secondBootDeviceEditor" /> + <g:HorizontalPanel addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE"> + <ge:EntityModelCheckBoxEditor label="{constants.attachCdVmPopup}" ui:field="cdAttachedEditor" /> + <e:ListModelListBoxEditor ui:field="cdImageEditor" addStyleNames="avmpw_cdImageEditor_pfly_fix" /> + <g:PushButton ui:field="refreshButton" addStyleNames="{style.refreshButton} avmpw_refreshButton_pfly_fix"> + <g:upFace image='{resources.refreshButtonImage}' /> + </g:PushButton> + </g:HorizontalPanel> + <ge:EntityModelCheckBoxEditor ui:field="bootMenuEnabledEditor" label="{constants.bootMenuEnabled}" addStyleNames="{style.checkbox}" /> + </g:FlowPanel> + <g:FlowPanel ui:field="linuxBootOptionsPanel" addStyleNames="{style.sectionPanel}" visible="false"> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.linuxBootOptionsVmPopup}" /> + <ge:StringEntityModelTextBoxEditor ui:field="kernel_pathEditor" /> + <ge:StringEntityModelTextBoxEditor ui:field="initrd_pathEditor" /> + <ge:StringEntityModelTextBoxEditor ui:field="kernel_parametersEditor" /> + </g:FlowPanel> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="rngDeviceTab"> + <t:content> + <g:FlowPanel> + <w:EntityModelDetachableWidgetWithInfo ui:field="isRngEnabledCheckboxWithInfoIcon" addStyleNames="{style.checkbox}" /> + <g:FlowPanel ui:field="rngPanel"> + <ge:IntegerEntityModelTextBoxEditor ui:field="rngPeriodEditor"/> + <ge:IntegerEntityModelTextBoxEditor ui:field="rngBytesEditor" /> + <g:Label ui:field="rngSourceLabel" text="{constants.deviceSource}" addStyleNames="{style.sectionLabel}" /> + <ge:EntityModelRadioButtonEditor ui:field="rngSourceRandom" /> + <ge:EntityModelRadioButtonEditor ui:field="rngSourceHwrng" /> + </g:FlowPanel> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + <t:tab> + <t:DialogTab ui:field="customPropertiesTab"> + <t:content> + <g:FlowPanel> + <k:KeyValueWidget ui:field="customPropertiesSheetEditor"/> + </g:FlowPanel> + </t:content> + </t:DialogTab> + </t:tab> + </t:DialogTabPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmTabContent.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmTabContent.java new file mode 100644 index 0000000..0e89f40 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/AbstractVmTabContent.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +public abstract class AbstractVmTabContent extends AbstractModelBoundPopupWidget<UnitVmModel> { + protected final AbstractVmPopupWidget vmPopupWidget; + + public AbstractVmTabContent(AbstractVmPopupWidget vmPopupWidget) { + this.vmPopupWidget = vmPopupWidget; + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.java new file mode 100644 index 0000000..969751a --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.java @@ -0,0 +1,186 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +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.FlowPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; +import org.ovirt.engine.core.common.businessentities.DisplayType; +import org.ovirt.engine.core.common.businessentities.UsbPolicy; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.idhandler.WithElementId; +import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; +import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; +import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; +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.EntityModelRadioButtonEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +public class ConsoleVmTabContent extends AbstractVmTabContent { + + interface Driver extends SimpleBeanEditorDriver<UnitVmModel, ConsoleVmTabContent> { + } + private final Driver driver = GWT.create(Driver.class); + + interface ViewUiBinder extends UiBinder<FlowPanel, ConsoleVmTabContent> { + + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + interface ViewIdHandler extends ElementIdHandler<ConsoleVmTabContent> { + + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + interface Style extends CssResource { + + } + + @UiField + @Ignore + public Label ssoMethodLabel; + + @UiField(provided = true) + @Path(value = "ssoMethodNone.entity") + @WithElementId("ssoMethodNone") + public EntityModelRadioButtonEditor ssoMethodNone; + + @UiField(provided = true) + @Path(value = "ssoMethodGuestAgent.entity") + @WithElementId("ssoMethodGuestAgent") + public EntityModelRadioButtonEditor ssoMethodGuestAgent; + + @Path(value = "isSoundcardEnabled.entity") + @WithElementId("isSoundcardEnabled") + public EntityModelCheckBoxEditor isSoundcardEnabledEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isSoundcardEnabledEditorWithDetachable; + + @UiField(provided = true) + @Path(value = "displayProtocol.selectedItem") + @WithElementId("displayProtocol") + public ListModelListBoxEditor<EntityModel<DisplayType>> displayProtocolEditor; + + @UiField(provided = true) + @Path(value = "vncKeyboardLayout.selectedItem") + @WithElementId("vncKeyboardLayout") + public ListModelListBoxEditor<String> vncKeyboardLayoutEditor; + + @UiField(provided = true) + @Path(value = "usbPolicy.selectedItem") + @WithElementId("usbPolicy") + public ListModelListBoxEditor<UsbPolicy> usbSupportEditor; + + @UiField(provided = true) + @Path(value = "numOfMonitors.selectedItem") + @WithElementId("numOfMonitors") + public ListModelListBoxEditor<Integer> numOfMonitorsEditor; + + @UiField + @Ignore + public Label numOfMonitorsLabel; + + @UiField(provided = true) + @Path(value = "isSingleQxlEnabled.entity") + @WithElementId("isSingleQxlEnabled") + public EntityModelCheckBoxEditor isSingleQxlEnabledEditor; + + @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; + + + @Path(value = "isConsoleDeviceEnabled.entity") + @WithElementId("isConsoleDeviceEnabled") + public EntityModelCheckBoxEditor isConsoleDeviceEnabledEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidget isConsoleDeviceEnabledEditorWithDetachable; + + @UiField + @Path(value = "spiceProxy.entity") + @WithElementId + public StringEntityModelTextBoxEditor spiceProxyEditor; + + @UiField(provided = true) + @Ignore + public EntityModelWidgetWithInfo<String> spiceProxyEnabledCheckboxWithInfoIcon; + + @Path(value = "spiceProxyEnabled.entity") + @WithElementId + public EntityModelCheckBoxOnlyEditor spiceProxyOverrideEnabledEditor; + + @UiField(provided = true) + @Path("spiceFileTransferEnabled.entity") + @WithElementId("spiceFileTransferEnabled") + public EntityModelCheckBoxEditor spiceFileTransferEnabledEditor; + + @UiField(provided = true) + @Path("spiceCopyPasteEnabled.entity") + @WithElementId("spiceCopyPasteEnabled") + public EntityModelCheckBoxEditor spiceCopyPasteEnabledEditor; + + @UiField + @Ignore + Label nativeUsbWarningMessage; + + @UiField + @Ignore + protected AdvancedParametersExpander expander; + + @UiField + @Ignore + Panel expanderContent; + + public ConsoleVmTabContent(AbstractVmPopupWidget vmPopupWidget) { + super(vmPopupWidget); + } + + @Override + public void edit(UnitVmModel model) { + driver.edit(model); + } + + @Override + public UnitVmModel flush() { + return driver.flush(); + } + + @Override + public int setTabIndexes(int nextTabIndex) { + displayProtocolEditor.setTabIndex(nextTabIndex++); + vncKeyboardLayoutEditor.setTabIndex(nextTabIndex++); + usbSupportEditor.setTabIndex(nextTabIndex++); + isSingleQxlEnabledEditor.setTabIndex(nextTabIndex++); + numOfMonitorsEditor.setTabIndex(nextTabIndex++); + isSmartcardEnabledEditor.setTabIndex(nextTabIndex++); + ssoMethodNone.setTabIndex(nextTabIndex++); + ssoMethodGuestAgent.setTabIndex(nextTabIndex++); + nextTabIndex = expander.setTabIndexes(nextTabIndex); + allowConsoleReconnectEditor.setTabIndex(nextTabIndex++); + isSoundcardEnabledEditor.setTabIndex(nextTabIndex++); + isConsoleDeviceEnabledEditor.setTabIndex(nextTabIndex++); + spiceProxyOverrideEnabledEditor.setTabIndex(nextTabIndex++); + spiceProxyEditor.setTabIndex(nextTabIndex++); + spiceFileTransferEnabledEditor.setTabIndex(nextTabIndex++); + spiceCopyPasteEnabledEditor.setTabIndex(nextTabIndex++); + + return nextTabIndex; + } +} \ No newline at end of file diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.ui.xml new file mode 100644 index 0000000..6f835a7 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ConsoleVmTabContent.ui.xml @@ -0,0 +1,117 @@ +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget" + xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic"> + <ui:style> + .sectionPanel { + margin-bottom: 20px; + } + + .sectionLabel { + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; + } + + .checkbox { + margin-left: -9px; + } + + .floatLeft { + float: left; + } + + .warningLabel { + color: red; + font-weight: bold; + margin-bottom: 10px; + } + + .warningMessageLabel { + color: #CD2127; + position: absolute; + bottom: 10px; + } + + .expanderContent { + padding-left: 10px; + float: left; + } + + .monitorsStyles { + width: 40px; + padding-left: 5px; + } + + .monitorPanel { + line-height: 30px; + padding-bottom: 0; + padding-left: 5px; + padding-right: 5px; + padding-top: 0; + width: 230px; + height: 30px; + } + + .monitorsLabel { + float: left; + color: #333333; + width: 265px; + } + + .checkboxWithLongLabel { + width: 400px; + float: left; + clear: both; + } + + .checkboxWithLongLabel label { + margin-left: 26px; + margin-top: -18px; + display: block; + line-height: 20px; + width: 400px; + float: left; + } + + </ui:style> + + <g:FlowPanel> + <e:ListModelListBoxEditor ui:field="displayProtocolEditor" /> + <e:ListModelListBoxEditor ui:field="vncKeyboardLayoutEditor" /> + <e:ListModelListBoxEditor ui:field="usbSupportEditor" /> + <g:FlowPanel width="100%"> + <g:FlowPanel addStyleNames="{style.monitorPanel}"> + <g:HorizontalPanel verticalAlignment="middle"> + <g:Label text="{constants.monitors}" ui:field="numOfMonitorsLabel" addStyleNames="{style.monitorsLabel} avmpw_monitorsLabel_pfly_fix" /> + <e:ListModelListBoxEditor ui:field="numOfMonitorsEditor" addStyleNames="{style.monitorsStyles}" /> + <ge:EntityModelCheckBoxEditor ui:field="isSingleQxlEnabledEditor" addStyleNames="{style.checkbox}" /> + </g:HorizontalPanel> + </g:FlowPanel> + </g:FlowPanel> + <ge:EntityModelDetachableWidget ui:field="isSmartcardEnabledEditorWithDetachable" addStyleNames="{style.floatLeft} avmpw_smartcard_pfly_fix" /> + <g:Label ui:field="nativeUsbWarningMessage" text="{constants.nativeUsbSupportWarning}" addStyleNames="{style.warningMessageLabel}" /> + + <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"/> + </g:FlowPanel> + <d:AdvancedParametersExpander ui:field="expander"/> + <g:FlowPanel ui:field="expanderContent" addStyleNames="{style.expanderContent}"> + <g:Label addStyleNames="{style.warningLabel}" text="{constants.advancedOptionsLabel}" /> + <ge:EntityModelCheckBoxEditor ui:field="allowConsoleReconnectEditor" addStyleNames="{style.checkboxWithLongLabel}" /> + </g:FlowPanel> + + <ge:EntityModelDetachableWidget ui:field="isSoundcardEnabledEditorWithDetachable" addStyleNames="{style.checkboxWithLongLabel}" /> + <ge:EntityModelDetachableWidget ui:field="isConsoleDeviceEnabledEditorWithDetachable" addStyleNames="{style.checkboxWithLongLabel}" /> + + <w:EntityModelWidgetWithInfo ui:field="spiceProxyEnabledCheckboxWithInfoIcon" /> + <ge:StringEntityModelTextBoxEditor ui:field="spiceProxyEditor" /> + + <ge:EntityModelCheckBoxEditor ui:field="spiceFileTransferEnabledEditor" addStyleNames="{style.checkboxWithLongLabel}" /> + <ge:EntityModelCheckBoxEditor ui:field="spiceCopyPasteEnabledEditor" addStyleNames="{style.checkboxWithLongLabel}" /> + </g:FlowPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.java new file mode 100644 index 0000000..642c678 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.java @@ -0,0 +1,341 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import java.util.Arrays; +import java.util.List; + +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.CommonApplicationMessages; +import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.idhandler.WithElementId; +import org.ovirt.engine.ui.common.widget.Align; +import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.profile.ProfilesInstanceTypeEditor; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.text.shared.AbstractRenderer; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.ValueLabel; +import com.google.gwt.user.client.ui.Widget; + +public class GeneralVmTabContent extends AbstractVmTabContent { + + interface Driver extends SimpleBeanEditorDriver<UnitVmModel, GeneralVmTabContent> { + } + + private final Driver driver = GWT.create(Driver.class); + + interface ViewUiBinder extends UiBinder<FlowPanel, GeneralVmTabContent> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + interface ViewIdHandler extends ElementIdHandler<GeneralVmTabContent> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + + interface Style extends CssResource { + + } + + @UiField + @Ignore + public Label nameLabel; + + @UiField(provided = true) + @Path(value = "name.entity") + @WithElementId("name") + public StringEntityModelTextBoxOnlyEditor nameEditor; + + @UiField(provided = true) + @Path(value = "templateVersionName.entity") + @WithElementId("templateVersionName") + public StringEntityModelTextBoxEditor templateVersionNameEditor; + + @UiField(provided = true) + @Ignore + public InfoIcon poolNameIcon; + + @UiField(provided = true) + @Path(value = "description.entity") + @WithElementId("description") + public StringEntityModelTextBoxEditor descriptionEditor; + + @UiField + @Path(value = "comment.entity") + @WithElementId("comment") + public StringEntityModelTextBoxEditor commentEditor; + + @UiField(provided = true) + @Path(value = "isDeleteProtected.entity") + @WithElementId("isDeleteProtected") + public EntityModelCheckBoxEditor isDeleteProtectedEditor; + + @UiField + public Panel logicalNetworksEditorPanel; + + @UiField + @Ignore + @WithElementId("vnicsEditor") + public ProfilesInstanceTypeEditor profilesInstanceTypeEditor; + + @UiField + @Ignore + Label generalWarningMessage; + + @UiField(provided = true) + @Path("copyPermissions.entity") + @WithElementId("copyTemplatePermissions") + public EntityModelCheckBoxEditor copyTemplatePermissionsEditor; + + // == Pools == + @UiField(provided = true) + @Ignore + public InfoIcon newPoolPrestartedVmsIcon; + + @UiField(provided = true) + @Ignore + public InfoIcon editPoolPrestartedVmsIcon; + + @UiField(provided = true) + @Ignore + public InfoIcon newPoolMaxAssignedVmsPerUserIcon; + + @UiField(provided = true) + @Ignore + public InfoIcon editPoolMaxAssignedVmsPerUserIcon; + + @UiField(provided = true) + @Path(value = "prestartedVms.entity") + @WithElementId("prestartedVms") + public IntegerEntityModelTextBoxOnlyEditor prestartedVmsEditor; + + @UiField(provided = true) + @Path("maxAssignedVmsPerUser.entity") + @WithElementId("maxAssignedVmsPerUser") + public IntegerEntityModelTextBoxOnlyEditor maxAssignedVmsPerUserEditor; + + @UiField + @Ignore + public FlowPanel newPoolEditVmsPanel; + + @UiField + @Ignore + public FlowPanel newPoolEditMaxAssignedVmsPerUserPanel; + + @UiField + @Ignore + public Label prestartedLabel; + + @UiField(provided = true) + @Path("numOfDesktops.entity") + @WithElementId("numOfVms") + public EntityModelTextBoxEditor<Integer> numOfVmsEditor; + + @UiField + @Ignore + public FlowPanel editPoolEditVmsPanel; + + @UiField + public FlowPanel editIncreaseVmsPanel; + + @UiField + @Ignore + public FlowPanel editPoolIncraseNumOfVmsPanel; + + @UiField + public FlowPanel editPrestartedVmsPanel; + @UiField + @Ignore + public FlowPanel editPoolEditMaxAssignedVmsPerUserPanel; + + @UiField + @Ignore + public Label editPrestartedVmsLabel; + + @UiField(provided = true) + @Path("prestartedVms.entity") + @WithElementId("editPrestartedVms") + public IntegerEntityModelTextBoxOnlyEditor editPrestartedVmsEditor; + + @UiField(provided = true) + @Path("numOfDesktops.entity") + @WithElementId("incraseNumOfVms") + public EntityModelTextBoxOnlyEditor<Integer> incraseNumOfVmsEditor; + + @UiField(provided = true) + @Path("maxAssignedVmsPerUser.entity") + @WithElementId("editMaxAssignedVmsPerUser") + public IntegerEntityModelTextBoxOnlyEditor editMaxAssignedVmsPerUserEditor; + + @UiField(provided = true) + @Path("assignedVms.entity") + public ValueLabel<Integer> outOfxInPool; + + @UiField(provided = true) + @Path(value = "isStateless.entity") + @WithElementId("isStateless") + public EntityModelCheckBoxEditor isStatelessEditor; + + @UiField(provided = true) + @Path(value = "isRunAndPause.entity") + @WithElementId("isRunAndPause") + public EntityModelCheckBoxEditor isRunAndPauseEditor; + + public GeneralVmTabContent(AbstractVmPopupWidget vmPopupWidget, + CommonApplicationResources resources, + CommonApplicationMessages messages, + CommonApplicationConstants constants, + CommonApplicationTemplates applicationTemplates) { + super(vmPopupWidget); + + isStatelessEditor = new EntityModelCheckBoxEditor(Align.RIGHT, vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + isRunAndPauseEditor = new EntityModelCheckBoxEditor(Align.RIGHT, vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + isDeleteProtectedEditor = new EntityModelCheckBoxEditor(Align.RIGHT, vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + copyTemplatePermissionsEditor = new EntityModelCheckBoxEditor(Align.RIGHT, vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + + initPoolSpecificWidgets(resources, applicationTemplates, messages); + initTextBoxEditors(); + + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + + localize(constants); + + editPrestartedVmsEditor.setKeepTitleOnSetEnabled(true); + + driver.initialize(this); + ViewIdHandler.idHandler.generateAndSetIds(this); + } + + private void localize(CommonApplicationConstants constants) { + nameLabel.setText(constants.nameVmPopup()); + templateVersionNameEditor.setLabel(constants.templateVersionName()); + descriptionEditor.setLabel(constants.descriptionVmPopup()); + commentEditor.setLabel(constants.commentLabel()); + + isStatelessEditor.setLabel(constants.statelessVmPopup()); + isRunAndPauseEditor.setLabel(constants.runAndPauseVmPopup()); + isDeleteProtectedEditor.setLabel(constants.deleteProtectionPopup()); + + copyTemplatePermissionsEditor.setLabel(constants.copyTemplatePermissions()); + + editPrestartedVmsLabel.setText(constants.prestartedVms()); + + prestartedLabel.setText(constants.prestartedPoolPopup()); + numOfVmsEditor.setLabel(constants.numOfVmsPoolPopup()); + maxAssignedVmsPerUserEditor.setLabel(constants.maxAssignedVmsPerUser()); + editMaxAssignedVmsPerUserEditor.setLabel(constants.maxAssignedVmsPerUser()); + } + + protected void initPoolSpecificWidgets(CommonApplicationResources resources, + CommonApplicationTemplates applicationTemplates, + final CommonApplicationMessages messages) { + vmPopupWidget.createNumOfDesktopEditors(); + + incraseNumOfVmsEditor.setKeepTitleOnSetEnabled(true); + numOfVmsEditor.setKeepTitleOnSetEnabled(true); + + newPoolPrestartedVmsIcon = + new InfoIcon(applicationTemplates.italicText(messages.prestartedHelp()), resources); + + editPoolPrestartedVmsIcon = + new InfoIcon(applicationTemplates.italicText(messages.prestartedHelp()), resources); + + poolNameIcon = + new InfoIcon(applicationTemplates.italicText(messages.poolNameHelp()), resources); + + newPoolMaxAssignedVmsPerUserIcon = + new InfoIcon(applicationTemplates.italicText(messages.maxAssignedVmsPerUserHelp()), resources); + + editPoolMaxAssignedVmsPerUserIcon = + new InfoIcon(applicationTemplates.italicText(messages.maxAssignedVmsPerUserHelp()), resources); + + outOfxInPool = new ValueLabel<Integer>(new AbstractRenderer<Integer>() { + + @Override + public String render(Integer object) { + return messages.outOfXVMsInPool(object.toString()); + } + + }); + + } + + private void initTextBoxEditors() { + templateVersionNameEditor = new StringEntityModelTextBoxEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + descriptionEditor = new StringEntityModelTextBoxEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + commentEditor = new StringEntityModelTextBoxEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + numOfVmsEditor = new IntegerEntityModelTextBoxEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + + nameEditor = new StringEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + prestartedVmsEditor = new IntegerEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + editPrestartedVmsEditor = new IntegerEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + maxAssignedVmsPerUserEditor = new IntegerEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + editMaxAssignedVmsPerUserEditor = new IntegerEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + } + + @Override + public int setTabIndexes(int nextTabIndex) { + + nameEditor.setTabIndex(nextTabIndex++); + templateVersionNameEditor.setTabIndex(nextTabIndex++); + descriptionEditor.setTabIndex(nextTabIndex++); + commentEditor.setTabIndex(nextTabIndex++); + isStatelessEditor.setTabIndex(nextTabIndex++); + isRunAndPauseEditor.setTabIndex(nextTabIndex++); + isDeleteProtectedEditor.setTabIndex(nextTabIndex++); + copyTemplatePermissionsEditor.setTabIndex(nextTabIndex++); + + numOfVmsEditor.setTabIndex(nextTabIndex++); + prestartedVmsEditor.setTabIndex(nextTabIndex++); + editPrestartedVmsEditor.setTabIndex(nextTabIndex++); + incraseNumOfVmsEditor.setTabIndex(nextTabIndex++); + maxAssignedVmsPerUserEditor.setTabIndex(nextTabIndex++); + editMaxAssignedVmsPerUserEditor.setTabIndex(nextTabIndex++); + + return nextTabIndex; + } + + @Override + public void focusInput() { + nameEditor.setFocus(true); + } + + @Override + public void edit(UnitVmModel model) { + driver.edit(model); + + profilesInstanceTypeEditor.edit(model.getNicsWithLogicalNetworks()); + } + + @Override + public UnitVmModel flush() { + return driver.flush(); + } + + + protected List<Widget> poolSpecificFields() { + return Arrays.asList(numOfVmsEditor, + newPoolEditVmsPanel, + editPoolEditVmsPanel, + editPoolIncraseNumOfVmsPanel, + prestartedVmsEditor, + poolNameIcon, + newPoolEditMaxAssignedVmsPerUserPanel, + editPoolEditMaxAssignedVmsPerUserPanel); + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.ui.xml new file mode 100644 index 0000000..6cd685d --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/GeneralVmTabContent.ui.xml @@ -0,0 +1,148 @@ +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" + xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:p="urn:import:org.ovirt.engine.ui.common.widget.profile"> + + <ui:with field='resources' type='org.ovirt.engine.ui.common.CommonApplicationResources' /> + <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> + + <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.vm.GeneralVmTabContent.Style"> + .sectionPanel { + margin-bottom: 20px; + } + + .warningMessageLabel { + color: #CD2127; + position: absolute; + bottom: 10px; + } + + .poolEditVms, .name { + line-height: 30px; + padding: 0 5px; + padding-bottom: 35px; + } + + .prestartedVmsEditorContent, .nameEditorContent, .maxAssignedVmsPerUserEditorContent { + width: 230px; + } + + .prestartedVmsEditor, .nameEditor, .maxAssignedVmsPerUserEditor { + float: right; + width: 230px; + } + + .editPrestartedVmsEditor, .editMaxAssignedVmsPerUserEditor { + float: left; + padding-right: 10px; + } + + .prestartedLabelWithHelp, .increasePrestartedLabel, .maxAssignedVmsPerUserLabel { + float: left; + } + + .editPrestartedVms, .editIncreaseVms, .editMaxAssignedVmsPerUser { + float: right; + /* width: 250px; pfly_fix */ + width: 220px; + } + + .prestartedLabel, .nameLabel { + float: left; + color: #333333; + } + + .increaseVmsInPoolVms, .maxAssignedVmsPerUserVms { + float: left; + } + + .prestartedVmsIcon, .poolNameIcon, .maxAssignedVmsPerUserIcon { + float: left; + padding-top: 5px; + padding-left: 2px; + } + + .horizontallyAlignedCheckBox { + float: left; + padding-right: 15px; + } + + .horizontallyAlignedCheckBoxContent { + } + </ui:style> + + <g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <g:FlowPanel addStyleNames="{style.name} avmpw_name_pfly_fix"> + <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> + <g:Label ui:field="nameLabel" addStyleNames="{style.nameLabel}" /> + <d:InfoIcon ui:field="poolNameIcon" addStyleNames="{style.poolNameIcon} avmpw_infoIcon_pfly_fix" /> + </g:FlowPanel> + <ge:EntityModelTextBoxOnlyEditor ui:field="nameEditor" addStyleNames="{style.nameEditor} avmpw_nameEditor_pfly_fix" contentWidgetStyleName="{style.nameEditorContent}"/> + </g:FlowPanel> + <ge:StringEntityModelTextBoxEditor ui:field="templateVersionNameEditor" /> + <ge:StringEntityModelTextBoxEditor ui:field="descriptionEditor" /> + <ge:StringEntityModelTextBoxEditor ui:field="commentEditor" /> + + <!-- New VM Pool --> + <ge:EntityModelTextBoxEditor ui:field="numOfVmsEditor" /> + <g:FlowPanel ui:field="newPoolEditVmsPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> + <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> + <g:Label ui:field="prestartedLabel" addStyleNames="{style.prestartedLabel}" /> + <d:InfoIcon ui:field="newPoolPrestartedVmsIcon" addStyleNames="{style.prestartedVmsIcon} avmpw_infoIcon_pfly_fix" /> + </g:FlowPanel> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="prestartedVmsEditor" addStyleNames="{style.prestartedVmsEditor}" contentWidgetStyleName="{style.prestartedVmsEditorContent} avmpw_prestartedVmsEditorContent_pfly_fix" /> + </g:FlowPanel> + + <g:FlowPanel ui:field="newPoolEditMaxAssignedVmsPerUserPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> + <g:FlowPanel addStyleNames="{style.maxAssignedVmsPerUserLabel}"> + <g:Label text="{constants.maxAssignedVmsPerUser}" addStyleNames="{style.maxAssignedVmsPerUserLabel}" /> + <d:InfoIcon ui:field="newPoolMaxAssignedVmsPerUserIcon" addStyleNames="{style.maxAssignedVmsPerUserIcon} avmpw_infoIcon_pfly_fix" /> + </g:FlowPanel> + <ge:EntityModelTextBoxOnlyEditor ui:field="maxAssignedVmsPerUserEditor" addStyleNames="{style.maxAssignedVmsPerUserEditor}" contentWidgetStyleName="{style.maxAssignedVmsPerUserEditorContent} avmpw_maxAssignedVmsPerUserEditorContent_pfly_fix" /> + </g:FlowPanel> + + <!-- Edit VM Pool --> + <g:FlowPanel addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix" ui:field="editPoolEditVmsPanel"> + <g:FlowPanel addStyleNames="{style.prestartedLabelWithHelp}"> + <g:Label ui:field="editPrestartedVmsLabel" addStyleNames="{style.prestartedLabel}" /> + <d:InfoIcon ui:field="editPoolPrestartedVmsIcon" addStyleNames="{style.prestartedVmsIcon} avmpw_infoIcon_pfly_fix" /> + </g:FlowPanel> + <g:FlowPanel ui:field="editPrestartedVmsPanel" addStyleNames="{style.editPrestartedVms}" > + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="editPrestartedVmsEditor" addStyleNames="{style.editPrestartedVmsEditor}" contentWidgetStyleName="{style.textBox}" /> + <g:ValueLabel ui:field="outOfxInPool" /> + </g:FlowPanel> + </g:FlowPanel> + + <g:FlowPanel ui:field="editPoolIncraseNumOfVmsPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> + <g:Label text="{constants.increaseNumberOfVMsInPoolBy}" addStyleNames="{style.increasePrestartedLabel}" /> + <g:FlowPanel ui:field="editIncreaseVmsPanel" addStyleNames="{style.editIncreaseVms}"> + <ge:EntityModelTextBoxOnlyEditor ui:field="incraseNumOfVmsEditor" addStyleNames="{style.editPrestartedVmsEditor}" contentWidgetStyleName="{style.textBox}" /> + <g:Label text="{constants.vms}" addStyleNames="{style.increaseVmsInPoolVms}" /> + </g:FlowPanel> + </g:FlowPanel> + + <g:FlowPanel ui:field="editPoolEditMaxAssignedVmsPerUserPanel" addStyleNames="{style.poolEditVms} avmpw_poolEditVms_pfly_fix"> + <g:FlowPanel addStyleNames="{style.maxAssignedVmsPerUserLabel}"> + <g:Label text="{constants.maxAssignedVmsPerUser}" addStyleNames="{style.maxAssignedVmsPerUserLabel}" /> + <d:InfoIcon ui:field="editPoolMaxAssignedVmsPerUserIcon" addStyleNames="{style.maxAssignedVmsPerUserIcon} avmpw_infoIcon_pfly_fix" /> + </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.editMaxAssignedVmsPerUser}"> + <ge:EntityModelTextBoxOnlyEditor ui:field="editMaxAssignedVmsPerUserEditor" addStyleNames="{style.editMaxAssignedVmsPerUserEditor}" contentWidgetStyleName="{style.textBox}" /> + <g:Label text="{constants.vms}" addStyleNames="{style.maxAssignedVmsPerUserVms}" /> + </g:FlowPanel> + </g:FlowPanel> + </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <ge:EntityModelCheckBoxEditor ui:field="isStatelessEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> + <ge:EntityModelCheckBoxEditor ui:field="isRunAndPauseEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> + <ge:EntityModelCheckBoxEditor ui:field="isDeleteProtectedEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> + <ge:EntityModelCheckBoxEditor ui:field="copyTemplatePermissionsEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> + </g:FlowPanel> + <g:FlowPanel ui:field="logicalNetworksEditorPanel" addStyleNames="{style.sectionPanel}"> + <p:ProfilesInstanceTypeEditor ui:field="profilesInstanceTypeEditor" /> + </g:FlowPanel> + <g:Label ui:field="generalWarningMessage" addStyleNames="{style.warningMessageLabel}" /> + </g:FlowPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.java new file mode 100644 index 0000000..ca45e18 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.java @@ -0,0 +1,185 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.shared.EventBus; +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.FlowPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.CommonApplicationMessages; +import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +import org.ovirt.engine.ui.common.idhandler.WithElementId; +import org.ovirt.engine.ui.common.widget.EntityModelDetachableWidgetWithInfo; +import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; +import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; +import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelDetachableWidgetWithLabel; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBoxEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelLabel; +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxOnlyEditor; +import org.ovirt.engine.ui.common.widget.parser.MemorySizeParser; +import org.ovirt.engine.ui.common.widget.renderer.MemorySizeRenderer; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModeSwitchingPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.TimeZoneModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +public class SystemVmTabContent extends AbstractVmTabContent { + + interface Driver extends SimpleBeanEditorDriver<UnitVmModel, SystemVmTabContent> { + } + + private final Driver driver = GWT.create(Driver.class); + + interface ViewUiBinder extends UiBinder<FlowPanel, SystemVmTabContent> { + + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + + } + + interface Style extends CssResource { + + } + + @Path(value = "memSize.entity") + @WithElementId("memSize") + public EntityModelTextBoxEditor<Integer> memSizeEditor; + + @Path(value = "totalCPUCores.entity") + @WithElementId("totalCPUCores") + public StringEntityModelTextBoxOnlyEditor totalvCPUsEditor; + + @Path(value = "numOfSockets.selectedItem") + @WithElementId("numOfSockets") + public ListModelListBoxEditor<Integer> numOfSocketsEditor; + + @Path(value = "coresPerSocket.selectedItem") + @WithElementId("coresPerSocket") + public ListModelListBoxEditor<Integer> corePerSocketEditor; + + @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel detachableMemSizeEditor; + + @UiField(provided = true) + @Ignore + public EntityModelDetachableWidgetWithInfo<String> totalvCPUsEditorWithInfoIcon; + + @UiField + @Ignore + AdvancedParametersExpander vcpusAdvancedParameterExpander; + + @UiField + @Ignore + Panel vcpusAdvancedParameterExpanderContent; + + @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel numOfSocketsEditorWithDetachable; + + @UiField(provided = true) + public EntityModelDetachableWidgetWithLabel corePerSocketEditorWithDetachable; + + @Path(value = "timeZone.selectedItem") + @WithElementId("timeZone") + public ListModelListBoxOnlyEditor<TimeZoneModel> timeZoneEditor; + + @UiField(provided = true) + @Ignore + @WithElementId("serialNumberPolicy") + public SerialNumberPolicyWidget serialNumberPolicyEditor; + + @UiField + @Ignore + // system tab -> general time zone + public Label generalLabel; + + @UiField(provided = true) + @Ignore + public EntityModelWidgetWithInfo<String> timeZoneEditorWithInfo; + + public SystemVmTabContent(AbstractVmPopupWidget vmPopupWidget, + EventBus eventBus, + CommonApplicationMessages messages, + CommonApplicationResources resources, + CommonApplicationConstants constants, + CommonApplicationTemplates applicationTemplates) { + super(vmPopupWidget); + + serialNumberPolicyEditor = new SerialNumberPolicyWidget(eventBus, applicationTemplates, messages, resources, vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + memSizeEditor = new EntityModelTextBoxEditor<Integer>( + new MemorySizeRenderer<Integer>(constants), new MemorySizeParser(), vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + + initListBoxEditors(applicationTemplates, constants); + initTotalVcpus(constants, applicationTemplates, messages); + initDetachableFields(); + + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + + vcpusAdvancedParameterExpander.initWithContent(vcpusAdvancedParameterExpanderContent.getElement()); + } + + private void initDetachableFields() { + detachableMemSizeEditor = new EntityModelDetachableWidgetWithLabel(memSizeEditor); + } + + private void initTotalVcpus(CommonApplicationConstants constants, CommonApplicationTemplates applicationTemplates, CommonApplicationMessages messages) { + StringEntityModelLabel label = new StringEntityModelLabel(); + label.setText(constants.numOfVCPUs()); + label.addStyleName("numCPUs_pfly_fix"); //$NON-NLS-1$ + totalvCPUsEditor = new StringEntityModelTextBoxOnlyEditor(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + totalvCPUsEditorWithInfoIcon = new EntityModelDetachableWidgetWithInfo<String>(label, totalvCPUsEditor); + totalvCPUsEditorWithInfoIcon.setExplanation(applicationTemplates.italicText(messages.hotPlugUnplugCpuWarning())); + } + + private void initListBoxEditors(CommonApplicationTemplates applicationTemplates, CommonApplicationConstants constants) { + + numOfSocketsEditor = new ListModelListBoxEditor<Integer>(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + numOfSocketsEditorWithDetachable = new EntityModelDetachableWidgetWithLabel(numOfSocketsEditor); + corePerSocketEditor = new ListModelListBoxEditor<Integer>(vmPopupWidget.new ModeSwitchingVisibilityRenderer()); + corePerSocketEditorWithDetachable = new EntityModelDetachableWidgetWithLabel(corePerSocketEditor); + + + StringEntityModelLabel label = new StringEntityModelLabel(); + label.setText(constants.tzVmPopup()); + timeZoneEditorWithInfo = new EntityModelWidgetWithInfo<String>(label, timeZoneEditor); + timeZoneEditorWithInfo.setExplanation(applicationTemplates.italicText(constants.timeZoneInfo())); + + } + + protected void localize(CommonApplicationConstants constants) { + memSizeEditor.setLabel(constants.memSizeVmPopup()); + detachableMemSizeEditor.setLabel(constants.memSizeVmPopup()); + totalvCPUsEditor.setLabel(constants.numOfVCPUs()); + corePerSocketEditorWithDetachable.setLabel(constants.coresPerSocket()); + numOfSocketsEditorWithDetachable.setLabel(constants.numOfSockets()); + } + + @Override + public void edit(UnitVmModel model) { + driver.edit(model); + + serialNumberPolicyEditor.edit(model.getSerialNumberPolicy()); + } + + @Override + public UnitVmModel flush() { + serialNumberPolicyEditor.flush(); + + return driver.flush(); + } + + @Override + public int setTabIndexes(int nextTabIndex) { + memSizeEditor.setTabIndex(nextTabIndex++); + totalvCPUsEditor.setTabIndex(nextTabIndex++); + + nextTabIndex = vcpusAdvancedParameterExpander.setTabIndexes(nextTabIndex); + corePerSocketEditor.setTabIndex(nextTabIndex++); + numOfSocketsEditor.setTabIndex(nextTabIndex++); + return serialNumberPolicyEditor.setTabIndexes(nextTabIndex); + } +} \ No newline at end of file diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.ui.xml new file mode 100644 index 0000000..5fed8d2 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/SystemVmTabContent.ui.xml @@ -0,0 +1,37 @@ +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget" + xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" + xmlns:vm="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.vm"> + <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.vm.SystemVmTabContent.Style"> + .sectionPanel { + margin-bottom: 20px; + } + + .sectionLabel { + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; + } + + .generalExpanderContent { + padding-left: 10px; + } + </ui:style> + + <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:FlowPanel> + <g:Label ui:field="generalLabel" addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" /> + <w:EntityModelWidgetWithInfo ui:field="timeZoneEditorWithInfo" /> + <vm:SerialNumberPolicyWidget ui:field="serialNumberPolicyEditor" /> + </g:FlowPanel> +</ui:UiBinder> \ No newline at end of file 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 3372f61..d24576c 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 @@ -7,7 +7,7 @@ import org.ovirt.engine.ui.common.CommonApplicationResources; import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; -import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.AbstractVmPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import static org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.hiddenField; -- To view, visit http://gerrit.ovirt.org/31093 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I72fc8a92c964d3b4acd840190ac727a3ada0c500 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Betak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
