package org.ovirt.engine.ui.userportal.client.modalpanels; import java.util.LinkedHashMap; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.uicommon.models.vms.IRdp; import org.ovirt.engine.ui.uicommon.models.vms.ISpice; import org.ovirt.engine.ui.uicommon.models.vms.RdpConsoleModel; import org.ovirt.engine.ui.uicommon.models.vms.SpiceConsoleModel; import org.ovirt.engine.ui.userportal.client.components.Button; import org.ovirt.engine.ui.userportal.client.components.NonDraggableModalPanel; import org.ovirt.engine.ui.userportal.client.protocols.ConsoleUtils; import org.ovirt.engine.ui.userportal.client.protocols.Protocol; import org.ovirt.engine.ui.userportal.client.protocols.ProtocolOptionContainer; import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.CheckboxItem; import com.smartgwt.client.widgets.form.fields.HeaderItem; import com.smartgwt.client.widgets.form.fields.RadioGroupItem; import com.smartgwt.client.widgets.form.fields.SpacerItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; public class ConsoleEditPanel extends NonDraggableModalPanel { private UserPortalItemModel currentItem; private ProtocolOptionContainer protocolContainer; public ConsoleEditPanel(UserPortalItemModel item, final ProtocolOptionContainer protocolContainer) { super(300, 300, "Console Options"); this.protocolContainer = protocolContainer; this.currentItem = item; HeaderItem consoleTypeLabel = new HeaderItem(); consoleTypeLabel.setDefaultValue("Select Console for '" + currentItem.getName() + "':"); consoleTypeLabel.setTextBoxStyle("generalLabel"); final RadioGroupItem consoleType = new RadioGroupItem(); LinkedHashMap<String,String> consoleTypeOptions = new LinkedHashMap<String, String>(); if (currentItem.getDefaultConsole() instanceof SpiceConsoleModel && ConsoleUtils.isSpiceAvailable()) consoleTypeOptions.put(Protocol.SPICE.name(), Protocol.SPICE.displayName); if (currentItem.getHasAdditionalConsole() && ConsoleUtils.isRDPAvailable()) consoleTypeOptions.put(Protocol.RDP.name(), Protocol.RDP.displayName); // Create Spice/RDP options final DynamicForm spiceOptionsForm = getSpiceOptionsForm(); final DynamicForm rdpOptionsForm = getRdpOptionsForm(); consoleType.setValueMap(consoleTypeOptions); consoleType.setDefaultValue(protocolContainer.getProtocol().name()); consoleType.setShowTitle(false); consoleType.setWrap(false); consoleType.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { // Set visible options according to the selected protocol Protocol selection = Protocol.valueOf((String)consoleType.getValue()); spiceOptionsForm.setVisible(selection.equals(Protocol.SPICE)); rdpOptionsForm.setVisible(selection.equals(Protocol.RDP)); } }); DynamicForm f = new DynamicForm(); f.setItems(consoleTypeLabel, consoleType, new SpacerItem(), new SpacerItem()); addItem(f); addItem(spiceOptionsForm); addItem(rdpOptionsForm); Button okButton = new Button("OK"); Button cancelButton = new Button("Cancel"); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { destroy(); } }); okButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Protocol selection = Protocol.valueOf((String)consoleType.getValue()); if (!protocolContainer.getProtocol().equals(selection)) { GWT.log("Changing the selected protocol to: " + selection); protocolContainer.setProtocol(selection); } destroy(); } }); setFooterButtons(Alignment.RIGHT, okButton, cancelButton); } DynamicForm getSpiceOptionsForm() { // Create form DynamicForm spiceOptionsForm = new DynamicForm(); spiceOptionsForm.setVisible(protocolContainer.getProtocol().equals(Protocol.SPICE)); spiceOptionsForm.setNumCols(1); if (!(currentItem.getDefaultConsole() instanceof SpiceConsoleModel)) return spiceOptionsForm; // Create header HeaderItem spiceOptionsHeader = new HeaderItem(); spiceOptionsHeader.setDefaultValue("SPICE Options"); spiceOptionsHeader.setTextBoxStyle("generalLabel"); // Get SPICE model final ISpice spice = ((SpiceConsoleModel)currentItem.getDefaultConsole()).getspice(); // Create check boxes CheckboxItem sendCtrlAltDelete = new CheckboxItem("sendCtrlAltDelete", "Pass Ctrl-Alt-Del to virtual machine"); sendCtrlAltDelete.setDefaultValue(spice.getSendCtrlAltDelete()); sendCtrlAltDelete.setShowTitle(false); sendCtrlAltDelete.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { spice.setSendCtrlAltDelete((Boolean)event.getValue()); spice.setNoTaskMgrExecution((Boolean)event.getValue()); } }); CheckboxItem usbAutoShare = new CheckboxItem("usbAutoShare", "Enable USB Auto-Share"); usbAutoShare.setDefaultValue(spice.getUsbAutoShare()); usbAutoShare.setShowTitle(false); usbAutoShare.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { spice.setUsbAutoShare((Boolean)event.getValue()); } }); CheckboxItem fullscreen = new CheckboxItem("fullscreen", "Open in Full Screen"); fullscreen.setDefaultValue(spice.getFullScreen()); fullscreen.setShowTitle(false); fullscreen.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { spice.setFullScreen((Boolean)event.getValue()); } }); // Add header and check boxes spiceOptionsForm.setItems(spiceOptionsHeader, sendCtrlAltDelete, usbAutoShare, fullscreen); return spiceOptionsForm; } DynamicForm getRdpOptionsForm() { // Create form DynamicForm rdpOptionsForm = new DynamicForm(); rdpOptionsForm.setVisible(protocolContainer.getProtocol().equals(Protocol.RDP)); rdpOptionsForm.setNumCols(1); // Create header HeaderItem rdpOptionsHeader = new HeaderItem(); rdpOptionsHeader.setDefaultValue("RDP Options"); rdpOptionsHeader.setTextBoxStyle("generalLabel"); if (currentItem.getHasAdditionalConsole()) { // Get RDP model final IRdp rdp = ((RdpConsoleModel)currentItem.getAdditionalConsole()).getrdp(); // Create check boxes CheckboxItem useLocalDrives = new CheckboxItem("useLocalDrives", "Use Local Drives"); useLocalDrives.setDefaultValue(rdp.getUseLocalDrives()); useLocalDrives.setShowTitle(false); useLocalDrives.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { rdp.setUseLocalDrives((Boolean)event.getValue()); } }); // Add header and check boxes rdpOptionsForm.setItems(rdpOptionsHeader, useLocalDrives); } return rdpOptionsForm; } }