Daniel P. Berrange wrote: > On Sun, Mar 08, 2009 at 07:34:46PM -0400, Cole Robinson wrote: >> Hi all, >> >> The attached patch adds an option in the 'Add Hardware' wizard to attach >> a physical host device to a VM. Current explicitly supported options are >> USB, PCI, and Wired NICs (which really just attaches the parent PCI >> device, but this way provides a nicer interface). >> >> Some screenshots: >> >> http://fedorapeople.org/~crobinso/virt-manager/vmm-add-hostdev1.png >> http://fedorapeople.org/~crobinso/virt-manager/vmm-add-hostdev2.png >> http://fedorapeople.org/~crobinso/virt-manager/vmm-add-hostdev3.png >> >> It's all pretty straightforward: most of the work is done at the >> virtinst level to pull the useful info out of the nodedev xml. > > I'm not sure I like having 'Wired NICs' as a separate option. How about > listing the logic device type against each PCI / USB devices. > > eg, in the drop down for PCI devices, alongside the POCI device > description, also include the nameof the logical device (eth1) > associated with it. This lets you see that assigning PCI device > 'X.y.z' means the host will no longer be able to use the device > 'eth1'. I think it would help people to avoid shooting themselvs > in the foot when choosing a PCI/USB device > Sounds good, updated patch attached. Attaching a network card now looks like: http://fedorapeople.org/~crobinso/virt-manager/vmm-add-hostdev4.png Thanks, Cole
diff -r 5db5666451b7 src/virtManager/addhardware.py --- a/src/virtManager/addhardware.py Mon Mar 09 01:04:29 2009 -0400 +++ b/src/virtManager/addhardware.py Mon Mar 09 11:29:43 2009 -0400 @@ -43,7 +43,8 @@ PAGE_INPUT = 3 PAGE_GRAPHICS = 4 PAGE_SOUND = 5 -PAGE_SUMMARY = 6 +PAGE_HOSTDEV = 6 +PAGE_SUMMARY = 7 class vmmAddHardware(gobject.GObject): __gsignals__ = { @@ -81,6 +82,7 @@ "on_graphics_type_changed": self.change_graphics_type, "on_graphics_port_auto_toggled": self.change_port_auto, "on_graphics_keymap_toggled": self.change_keymap, + "on_host_device_type_changed": self.change_host_device_type, "on_create_help_clicked": self.show_help, }) @@ -166,6 +168,24 @@ sound_list.pack_start(text, True) sound_list.add_attribute(text, 'text', 0) + host_devtype = self.window.get_widget("host-device-type") + # Description, nodedev type, specific type capability, sub type, + # sub cap + host_devtype_model = gtk.ListStore(str, str, str, str, str) + host_devtype.set_model(host_devtype_model) + text = gtk.CellRendererText() + host_devtype.pack_start(text, True) + host_devtype.add_attribute(text, 'text', 0) + + host_dev = self.window.get_widget("host-device") + # Description, nodedev name + host_dev_model = gtk.ListStore(str, str) + host_dev.set_model(host_dev_model) + text = gtk.CellRendererText() + host_dev.pack_start(text, True) + host_dev.add_attribute(text, 'text', 0) + host_dev_model.set_sort_column_id(0, gtk.SORT_ASCENDING) + def reset_state(self): notebook = self.window.get_widget("create-pages") notebook.set_current_page(0) @@ -228,6 +248,13 @@ self.populate_sound_model_model(sound_box.get_model()) sound_box.set_active(0) + host_devtype = self.window.get_widget("host-device-type") + self.populate_host_device_type_model(host_devtype.get_model()) + host_devtype.set_active(0) + + # FIXME: All of these needs to have better transparency. + # All options should be listed, but disabled with a tooltip if + # it can't be used. model = self.window.get_widget("hardware-type").get_model() model.clear() model.append(["Storage", gtk.STOCK_HARDDISK, PAGE_DISK]) @@ -246,6 +273,10 @@ if self.vm.is_hvm(): model.append(["Sound", gtk.STOCK_MEDIA_PLAY, PAGE_SOUND]) + if (self.vm.get_connection().get_driver().lower() != "xen" or + not self.vm.get_connection().is_nodedev_capable()): + # Libvirt doesn't support this for xen yet + model.append(["Physical Host Device", None, PAGE_HOSTDEV]) def forward(self, ignore=None): notebook = self.window.get_widget("create-pages") @@ -392,6 +423,14 @@ modelstr = model.get_model().get_value(model.get_active_iter(), 0) return modelstr + def get_config_host_device_type_info(self): + devbox = self.window.get_widget("host-device-type") + return devbox.get_model()[devbox.get_active()] + + def get_config_host_device_info(self): + devbox = self.window.get_widget("host-device") + return devbox.get_model()[devbox.get_active()] + def page_changed(self, notebook, page, page_number): remote = self.vm.get_connection().is_remote() if page_number == PAGE_DISK: @@ -425,6 +464,7 @@ self.window.get_widget("summary-input").hide() self.window.get_widget("summary-graphics").hide() self.window.get_widget("summary-sound").hide() + self.window.get_widget("summary-hostdev").hide() if hwpage == PAGE_DISK: self.window.get_widget("summary-disk").show() @@ -493,6 +533,10 @@ elif hwpage == PAGE_SOUND: self.window.get_widget("summary-sound").show() self.window.get_widget("summary-sound-model").set_text(self._dev.model) + elif hwpage == PAGE_HOSTDEV: + self.window.get_widget("summary-hostdev").show() + self.window.get_widget("summary-host-device-type").set_text(self.get_config_host_device_type_info()[0]) + self.window.get_widget("summary-host-device").set_text(self.get_config_host_device_info()[0]) def close(self, ignore1=None,ignore2=None): self.topwin.hide() @@ -510,16 +554,22 @@ self.topwin.set_sensitive(False) self.topwin.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) - if hw == PAGE_NETWORK: - self.add_network() - elif hw == PAGE_DISK: - self.add_storage() - elif hw == PAGE_INPUT: - self.add_input() - elif hw == PAGE_GRAPHICS: - self.add_graphics() - elif hw == PAGE_SOUND: - self.add_sound() + try: + if hw == PAGE_NETWORK: + self.add_network() + elif hw == PAGE_DISK: + self.add_storage() + elif hw == PAGE_INPUT: + self.add_input() + elif hw == PAGE_GRAPHICS: + self.add_graphics() + elif hw == PAGE_SOUND: + self.add_sound() + elif hw == PAGE_HOSTDEV: + self.add_hostdev() + except Exception, e: + self.err.show_err(_("Uncaught error adding device: %s") % str(e), + "".join(traceback.format_exc())) if self.install_error is not None: self.err.show_err(self.install_error, self.install_details) @@ -551,6 +601,10 @@ def add_sound(self): self.add_device(self._dev.get_xml_config()) + def add_hostdev(self): + self._dev.setup() + self.add_device(self._dev.get_xml_config()) + def add_storage(self): used = [] for d in self.vm.get_disk_devices(): @@ -729,6 +783,18 @@ else: self.window.get_widget("graphics-keymap").set_sensitive(True) + def change_host_device_type(self, src): + devbox = self.window.get_widget("host-device") + if src.get_active() < 0: + devbox.get_model().clear() + return + + (ignore, devtype, devcap, + subtype, subcap) = src.get_model()[src.get_active()] + self.populate_host_device_model(devbox.get_model(), devtype, devcap, + subtype, subcap) + devbox.set_active(0) + def validate(self, page_num): if page_num == PAGE_INTRO: if self.get_config_hardware_type() == None: @@ -857,7 +923,23 @@ try: self._dev = virtinst.VirtualAudio(model=smodel) except Exception, e: - self.err.val_err(_("Sound device parameter error"), str(e)) + return self.err.val_err(_("Sound device parameter error"), + str(e)) + + elif page_num == PAGE_HOSTDEV: + ignore, nodedev_name = self.get_config_host_device_info() + + if nodedev_name == None: + return self.err.val_err(_("Physical Device Requried"), + _("A device must be selected.")) + + try: + self._dev = virtinst.VirtualHostDevice.device_from_node( + conn = self.vm.get_connection().vmm, + name = nodedev_name) + except Exception, e: + return self.err.val_err(_("Host device parameter error", + str(e))) return True @@ -939,6 +1021,33 @@ for m in lst: model.append([m]) + def populate_host_device_type_model(self, model): + model.clear() + for m in [ ["PCI Device", "pci", None, "net", "80203"], + ["USB Device", "usb_device", None, None, None]]: + model.append(m) + + def populate_host_device_model(self, model, devtype, devcap, subtype, + subcap): + model.clear() + subdevs = [] + + if subtype: + subdevs = self.vm.get_connection().get_devices(subtype, subcap) + + devs = self.vm.get_connection().get_devices(devtype, devcap) + for dev in devs: + prettyname = dev.pretty_name() + + for subdev in subdevs: + if dev.name == subdev.parent: + prettyname = dev.pretty_name(subdev) + + model.append([prettyname, dev.name]) + + if len(model) == 0: + model.append([_("No Devices Available"), None]) + def is_sparse_file(self): if self.window.get_widget("non-sparse").get_active(): return False diff -r 5db5666451b7 src/virtManager/connection.py --- a/src/virtManager/connection.py Mon Mar 09 01:04:29 2009 -0400 +++ b/src/virtManager/connection.py Mon Mar 09 11:29:43 2009 -0400 @@ -278,6 +278,9 @@ def is_remote(self): return virtinst.util.is_uri_remote(self.uri) + def is_nodedev_capable(self): + return virtinst.NodeDeviceParser.is_nodedev_capable(self.vmm) + def is_qemu_session(self): (scheme, ignore, ignore, \ path, ignore, ignore) = virtinst.util.uri_split(self.uri) @@ -300,6 +303,24 @@ def get_pool(self, uuid): return self.pools[uuid] + def get_devices(self, devtype=None, devcap=None): + if not self.is_nodedev_capable(): + return [] + + devs = self.vmm.listDevices(devtype, 0) + retdevs = [] + + for name in devs: + dev = self.vmm.nodeDeviceLookupByName(name) + vdev = virtinst.NodeDeviceParser.parse(dev.XMLDesc(0)) + + if devcap and vdev.capability_type != devcap: + continue + + retdevs.append(vdev) + + return retdevs + def is_valid_saved_image(self, path): # FIXME: Not really sure why we are even doing this check? If libvirt # isn't exporting this information, seems like we shouldn't be duping diff -r 5db5666451b7 src/vmm-add-hardware.glade --- a/src/vmm-add-hardware.glade Mon Mar 09 01:04:29 2009 -0400 +++ b/src/vmm-add-hardware.glade Mon Mar 09 11:29:43 2009 -0400 @@ -76,6 +76,17 @@ <property name="column_spacing">3</property> <property name="row_spacing">3</property> <child> + <widget class="GtkLabel" id="label385"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Hardware type:</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> <widget class="GtkComboBox" id="hardware-type"> <property name="visible">True</property> <accessibility> @@ -88,17 +99,6 @@ <property name="y_options">GTK_FILL</property> </packing> </child> - <child> - <widget class="GtkLabel" id="label385"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Hardware type:</property> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> </widget> </child> </widget> @@ -247,44 +247,58 @@ <placeholder/> </child> <child> - <widget class="GtkCheckButton" id="non-sparse"> + <widget class="GtkAlignment" id="alignment79"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Allocate entire virtual disk now</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <placeholder/> + </child> </widget> <packing> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label219"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">Loc_ation:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">storage-partition-address</property> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkHBox" id="hbox49"> + <widget class="GtkHBox" id="hbox33"> <property name="visible">True</property> <child> - <widget class="GtkImage" id="image98"> + <widget class="GtkImage" id="image84"> <property name="visible">True</property> - <property name="yalign">0</property> - <property name="icon_name">gtk-dialog-warning</property> + <property name="icon_name">gtk-info</property> </widget> <packing> <property name="expand">False</property> </packing> </child> <child> - <widget class="GtkLabel" id="label349"> + <widget class="GtkLabel" id="label221"> <property name="visible">True</property> <property name="xpad">7</property> - <property name="label" translatable="yes"><small><b>Warning:</b>If you do not allocate the entire disk now, space will be allocated as needed while the virtual machine is running. If sufficient free space is not available on the host, this may result in data corruption on the virtual machine.</small></property> + <property name="label" translatable="yes"><small><b>Example:</b> /dev/hdc2</small></property> <property name="use_markup">True</property> - <property name="wrap">True</property> </widget> <packing> <property name="expand">False</property> @@ -294,11 +308,188 @@ </child> </widget> <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label222"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">_Location:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">storage-file-address</property> + </widget> + <packing> <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label282"> + <property name="visible">True</property> + <property name="xalign">0</property> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment78"> + <property name="visible">True</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkRadioButton" id="storage-partition"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Block device (partition):</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_storage_toggled"/> + </widget> + </child> + </widget> + <packing> <property name="right_attach">5</property> - <property name="top_attach">8</property> - <property name="bottom_attach">9</property> <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment80"> + <property name="visible">True</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkRadioButton" id="storage-file-backed"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">F_ile (disk image):</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <property name="group">storage-partition</property> + <signal name="toggled" handler="on_storage_toggled"/> + </widget> + </child> + </widget> + <packing> + <property name="right_attach">5</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="storage-partition-box"> + <property name="visible">True</property> + <child> + <widget class="GtkEntry" id="storage-partition-address"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <accessibility> + <atkproperty name="AtkObject::accessible_name" translatable="yes">Partition Location Field</atkproperty> + </accessibility> + </widget> + </child> + <child> + <widget class="GtkButton" id="storage-partition-address-browse"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Browse...</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <signal name="clicked" handler="on_storage_partition_address_browse_clicked"/> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">5</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="storage-file-box"> + <property name="visible">True</property> + <child> + <widget class="GtkEntry" id="storage-file-address"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <accessibility> + <atkproperty name="AtkObject::accessible_name" translatable="yes">File Location Field</atkproperty> + </accessibility> + <signal name="changed" handler="on_storage_file_address_changed"/> + </widget> + </child> + <child> + <widget class="GtkButton" id="storage-file-address-browse"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Browse...</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <signal name="clicked" handler="on_storage_file_address_browse_clicked"/> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">5</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label300"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">_Size:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">storage-file-size</property> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> @@ -355,45 +546,25 @@ </packing> </child> <child> - <widget class="GtkLabel" id="label300"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">_Size:</property> - <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">storage-file-size</property> - </widget> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="storage-file-box"> + <widget class="GtkHBox" id="hbox49"> <property name="visible">True</property> <child> - <widget class="GtkEntry" id="storage-file-address"> + <widget class="GtkImage" id="image98"> <property name="visible">True</property> - <property name="can_focus">True</property> - <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="yes">File Location Field</atkproperty> - </accessibility> - <signal name="changed" handler="on_storage_file_address_changed"/> + <property name="yalign">0</property> + <property name="icon_name">gtk-dialog-warning</property> </widget> + <packing> + <property name="expand">False</property> + </packing> </child> <child> - <widget class="GtkButton" id="storage-file-address-browse"> + <widget class="GtkLabel" id="label349"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Browse...</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <signal name="clicked" handler="on_storage_file_address_browse_clicked"/> + <property name="xpad">7</property> + <property name="label" translatable="yes"><small><b>Warning:</b>If you do not allocate the entire disk now, space will be allocated as needed while the virtual machine is running. If sufficient free space is not available on the host, this may result in data corruption on the virtual machine.</small></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> </widget> <packing> <property name="expand">False</property> @@ -403,203 +574,32 @@ </child> </widget> <packing> - <property name="left_attach">3</property> + <property name="left_attach">2</property> <property name="right_attach">5</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> + <property name="top_attach">8</property> + <property name="bottom_attach">9</property> <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <widget class="GtkHBox" id="storage-partition-box"> + <widget class="GtkCheckButton" id="non-sparse"> <property name="visible">True</property> - <child> - <widget class="GtkEntry" id="storage-partition-address"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="yes">Partition Location Field</atkproperty> - </accessibility> - </widget> - </child> - <child> - <widget class="GtkButton" id="storage-partition-address-browse"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Browse...</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <signal name="clicked" handler="on_storage_partition_address_browse_clicked"/> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </widget> - <packing> - <property name="left_attach">3</property> - <property name="right_attach">5</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment80"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="yscale">0</property> - <child> - <widget class="GtkRadioButton" id="storage-file-backed"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">F_ile (disk image):</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <property name="group">storage-partition</property> - <signal name="toggled" handler="on_storage_toggled"/> - </widget> - </child> - </widget> - <packing> - <property name="right_attach">5</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment78"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="yscale">0</property> - <child> - <widget class="GtkRadioButton" id="storage-partition"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Block device (partition):</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_storage_toggled"/> - </widget> - </child> - </widget> - <packing> - <property name="right_attach">5</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label282"> - <property name="visible">True</property> - <property name="xalign">0</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Allocate entire virtual disk now</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </widget> <packing> <property name="left_attach">3</property> <property name="right_attach">4</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> - <child> - <widget class="GtkLabel" id="label222"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">_Location:</property> - <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">storage-file-address</property> - </widget> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="hbox33"> - <property name="visible">True</property> - <child> - <widget class="GtkImage" id="image84"> - <property name="visible">True</property> - <property name="icon_name">gtk-info</property> - </widget> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label221"> - <property name="visible">True</property> - <property name="xpad">7</property> - <property name="label" translatable="yes"><small><b>Example:</b> /dev/hdc2</small></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </widget> - <packing> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label219"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">Loc_ation:</property> - <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">storage-partition-address</property> - </widget> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment79"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="yscale">0</property> - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> </widget> </child> </widget> @@ -698,7 +698,7 @@ <child> <widget class="GtkLabel" id="label146"> <property name="visible">True</property> - <property name="label" translatable="yes">Storage</property> + <property name="label">Storage</property> </widget> <packing> <property name="type">tab</property> @@ -760,148 +760,96 @@ <property name="n_columns">2</property> <property name="row_spacing">6</property> <child> - <widget class="GtkComboBox" id="net-model"> + <widget class="GtkComboBox" id="net-device"> <property name="visible">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">8</property> - <property name="bottom_attach">9</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label6"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Device Model:</property> - </widget> - <packing> - <property name="top_attach">8</property> - <property name="bottom_attach">9</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkEntry" id="create-mac-address"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="max_length">17</property> <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="yes">MAC Address Field</atkproperty> + <atkproperty name="AtkObject::accessible_name" translatable="yes">Network Device Select</atkproperty> </accessibility> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> - <property name="y_options"></property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <widget class="GtkLabel" id="label386"> + <widget class="GtkRadioButton" id="net-type-network"> <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_MAC address:</property> - <property name="use_markup">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Virtual network</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">create-mac-address</property> + <property name="response_id">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_network_toggled"/> </widget> <packing> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> + <property name="right_attach">2</property> <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <widget class="GtkCheckButton" id="mac-address"> + <widget class="GtkRadioButton" id="net-type-device"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Set fixed MAC _address for this NIC?</property> + <property name="label" translatable="yes">_Shared physical device</property> <property name="use_underline">True</property> <property name="response_id">0</property> <property name="draw_indicator">True</property> - <signal name="clicked" handler="on_mac_address_clicked"/> + <property name="group">net-type-network</property> + <signal name="toggled" handler="on_network_toggled"/> </widget> <packing> <property name="right_attach">2</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <widget class="GtkAlignment" id="alignment147"> + <widget class="GtkAlignment" id="alignment144"> <property name="visible">True</property> <property name="left_padding">40</property> <child> - <widget class="GtkEventBox" id="eventbox2"> + <widget class="GtkHBox" id="hbox63"> <property name="visible">True</property> <child> - <widget class="GtkLabel" id="label368"> + <widget class="GtkImage" id="image104"> <property name="visible">True</property> - <property name="xalign">1</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">_Device:</property> + <property name="yalign">0</property> + <property name="icon_name">gtk-dialog-info</property> + </widget> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label374"> + <property name="visible">True</property> + <property name="xpad">7</property> + <property name="label" translatable="yes"><small><b>Tip:</b> Choose this option if your host is disconnected, connected via wireless, or dynamically configured with NetworkManager.</small></property> <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">storage-file-address</property> + <property name="wrap">True</property> </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </widget> </child> </widget> <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment146"> - <property name="visible">True</property> - <property name="left_padding">40</property> - <child> - <widget class="GtkEventBox" id="eventbox1"> - <property name="visible">True</property> - <child> - <widget class="GtkLabel" id="label366"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">_Network:</property> - <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">storage-partition-address</property> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkComboBox" id="net-network"> - <property name="visible">True</property> - <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="yes">Virtual Network Select</atkproperty> - </accessibility> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options">GTK_FILL</property> </packing> </child> <child> @@ -946,96 +894,148 @@ </packing> </child> <child> - <widget class="GtkAlignment" id="alignment144"> + <widget class="GtkComboBox" id="net-network"> + <property name="visible">True</property> + <accessibility> + <atkproperty name="AtkObject::accessible_name" translatable="yes">Virtual Network Select</atkproperty> + </accessibility> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment146"> <property name="visible">True</property> <property name="left_padding">40</property> <child> - <widget class="GtkHBox" id="hbox63"> + <widget class="GtkEventBox" id="eventbox1"> <property name="visible">True</property> <child> - <widget class="GtkImage" id="image104"> + <widget class="GtkLabel" id="label366"> <property name="visible">True</property> - <property name="yalign">0</property> - <property name="icon_name">gtk-dialog-info</property> + <property name="xalign">1</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">_Network:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">storage-partition-address</property> </widget> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label374"> - <property name="visible">True</property> - <property name="xpad">7</property> - <property name="label" translatable="yes"><small><b>Tip:</b> Choose this option if your host is disconnected, connected via wireless, or dynamically configured with NetworkManager.</small></property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> </widget> </child> </widget> <packing> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkRadioButton" id="net-type-device"> + <widget class="GtkAlignment" id="alignment147"> + <property name="visible">True</property> + <property name="left_padding">40</property> + <child> + <widget class="GtkEventBox" id="eventbox2"> + <property name="visible">True</property> + <child> + <widget class="GtkLabel" id="label368"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">_Device:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">storage-file-address</property> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkCheckButton" id="mac-address"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">_Shared physical device</property> + <property name="label" translatable="yes">Set fixed MAC _address for this NIC?</property> <property name="use_underline">True</property> <property name="response_id">0</property> <property name="draw_indicator">True</property> - <property name="group">net-type-network</property> - <signal name="toggled" handler="on_network_toggled"/> + <signal name="clicked" handler="on_mac_address_clicked"/> </widget> <packing> <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkRadioButton" id="net-type-network"> + <widget class="GtkLabel" id="label386"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Virtual network</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_MAC address:</property> + <property name="use_markup">True</property> <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_network_toggled"/> + <property name="mnemonic_widget">create-mac-address</property> </widget> <packing> - <property name="right_attach">2</property> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkComboBox" id="net-device"> + <widget class="GtkEntry" id="create-mac-address"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">17</property> <accessibility> - <atkproperty name="AtkObject::accessible_name" translatable="yes">Network Device Select</atkproperty> + <atkproperty name="AtkObject::accessible_name" translatable="yes">MAC Address Field</atkproperty> </accessibility> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Device Model:</property> + </widget> + <packing> + <property name="top_attach">8</property> + <property name="bottom_attach">9</property> <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkComboBox" id="net-model"> + <property name="visible">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">8</property> + <property name="bottom_attach">9</property> </packing> </child> </widget> @@ -1059,7 +1059,7 @@ <child> <widget class="GtkLabel" id="label355"> <property name="visible">True</property> - <property name="label" translatable="yes">Network</property> + <property name="label">Network</property> </widget> <packing> <property name="type">tab</property> @@ -1133,26 +1133,6 @@ <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> - <widget class="GtkComboBox" id="input-type"> - <property name="visible">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label395"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Type:</property> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> <widget class="GtkAlignment" id="alignment153"> <property name="visible">True</property> <property name="left_padding">40</property> @@ -1193,6 +1173,26 @@ <property name="x_options">GTK_FILL</property> </packing> </child> + <child> + <widget class="GtkLabel" id="label395"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Type:</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkComboBox" id="input-type"> + <property name="visible">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> </widget> </child> </widget> @@ -1228,7 +1228,7 @@ <child> <widget class="GtkLabel" id="label391"> <property name="visible">True</property> - <property name="label" translatable="yes">Input</property> + <property name="label">Input</property> </widget> <packing> <property name="type">tab</property> @@ -1313,98 +1313,33 @@ <placeholder/> </child> <child> - <widget class="GtkTable" id="table1"> + <widget class="GtkLabel" id="label429"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">1</property> - <property name="n_columns">4</property> - <child> - <widget class="GtkEntry" id="graphics-keymap"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - </widget> - <packing> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Other:</property> - </widget> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="x_options"></property> - <property name="y_options"></property> - <property name="x_padding">10</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> - <property name="x_padding">17</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="graphics-keymap-chk"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Same as host</property> - <property name="relief">GTK_RELIEF_HALF</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_graphics_keymap_toggled"/> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - </packing> - </child> + <property name="xalign">1</property> + <property name="label" translatable="yes">Type:</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkComboBox" id="graphics-type"> + <property name="visible">True</property> + <signal name="changed" handler="on_graphics_type_changed"/> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> </packing> </child> <child> - <widget class="GtkLabel" id="label4"> + <widget class="GtkLabel" id="label430"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">1</property> - <property name="label" translatable="yes">Keymap:</property> + <property name="label" translatable="yes">Address:</property> </widget> <packing> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="graphics-address"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Listen on all public network interfaces </property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> @@ -1412,46 +1347,86 @@ </packing> </child> <child> - <widget class="GtkAlignment" id="alignment161"> + <widget class="GtkLabel" id="label431"> <property name="visible">True</property> - <property name="bottom_padding">6</property> - <property name="left_padding">20</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Port:</property> + </widget> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label432"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Password:</property> + </widget> + <packing> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="hbox68"> + <property name="visible">True</property> <child> - <widget class="GtkHBox" id="hbox69"> + <widget class="GtkSpinButton" id="graphics-port"> <property name="visible">True</property> - <child> - <widget class="GtkImage" id="image108"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="icon_name">gtk-dialog-info</property> - </widget> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label433"> - <property name="visible">True</property> - <property name="xpad">7</property> - <property name="label" translatable="yes"><small><b>Tip:</b> Automatically allocating the port ensures that every virtual machine uses a unique port. If two machines try to use the same port, one of them will fail to start.</small></property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="adjustment">5900 5900 5999 1 10 0</property> + <property name="climb_rate">1</property> + <property name="snap_to_ticks">True</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_IF_VALID</property> </widget> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <widget class="GtkCheckButton" id="graphics-port-auto"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Automatically allocated</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_graphics_port_auto_toggled"/> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkEntry" id="graphics-password"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="y_options"></property> </packing> </child> <child> @@ -1499,95 +1474,60 @@ </packing> </child> <child> - <widget class="GtkEntry" id="graphics-password"> + <widget class="GtkAlignment" id="alignment161"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="visibility">False</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkHBox" id="hbox68"> - <property name="visible">True</property> + <property name="bottom_padding">6</property> + <property name="left_padding">20</property> <child> - <widget class="GtkSpinButton" id="graphics-port"> + <widget class="GtkHBox" id="hbox69"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment">5900 5900 5999 1 10 0</property> - <property name="climb_rate">1</property> - <property name="snap_to_ticks">True</property> - <property name="numeric">True</property> - <property name="update_policy">GTK_UPDATE_IF_VALID</property> + <child> + <widget class="GtkImage" id="image108"> + <property name="visible">True</property> + <property name="yalign">0</property> + <property name="icon_name">gtk-dialog-info</property> + </widget> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label433"> + <property name="visible">True</property> + <property name="xpad">7</property> + <property name="label" translatable="yes"><small><b>Tip:</b> Automatically allocating the port ensures that every virtual machine uses a unique port. If two machines try to use the same port, one of them will fail to start.</small></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> </widget> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <widget class="GtkCheckButton" id="graphics-port-auto"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Automatically allocated</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_graphics_port_auto_toggled"/> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <widget class="GtkLabel" id="label432"> + <widget class="GtkCheckButton" id="graphics-address"> <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Password:</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Listen on all public network interfaces </property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> </widget> <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label431"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Port:</property> - </widget> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label430"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Address:</property> - </widget> - <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> @@ -1595,24 +1535,84 @@ </packing> </child> <child> - <widget class="GtkComboBox" id="graphics-type"> + <widget class="GtkLabel" id="label4"> <property name="visible">True</property> - <signal name="changed" handler="on_graphics_type_changed"/> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Keymap:</property> + </widget> + <packing> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + </packing> + </child> + <child> + <widget class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">1</property> + <property name="n_columns">4</property> + <child> + <widget class="GtkCheckButton" id="graphics-keymap-chk"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Same as host</property> + <property name="relief">GTK_RELIEF_HALF</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_graphics_keymap_toggled"/> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options"></property> + <property name="y_options"></property> + <property name="x_padding">17</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Other:</property> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options"></property> + <property name="y_options"></property> + <property name="x_padding">10</property> + </packing> + </child> + <child> + <widget class="GtkEntry" id="graphics-keymap"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="y_options"></property> + </packing> + </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label429"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Type:</property> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> </packing> </child> </widget> @@ -1650,7 +1650,7 @@ <child> <widget class="GtkLabel" id="label401"> <property name="visible">True</property> - <property name="label" translatable="yes">Graphics</property> + <property name="label">Graphics</property> </widget> <packing> <property name="type">tab</property> @@ -1691,8 +1691,7 @@ <property name="xalign">0</property> <property name="xpad">20</property> <property name="ypad">10</property> - <property name="label" translatable="yes">Please indicate what sound device type -to connect to the virtual machine.</property> + <property name="label" translatable="yes">Please indicate what sound device type to connect to the virtual machine.</property> <property name="use_markup">True</property> <property name="wrap">True</property> </widget> @@ -1725,6 +1724,16 @@ <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> + <widget class="GtkComboBox" id="sound-model"> + <property name="visible">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> <widget class="GtkLabel" id="label10"> <property name="visible">True</property> <property name="xalign">1</property> @@ -1735,15 +1744,6 @@ <property name="y_options"></property> </packing> </child> - <child> - <widget class="GtkComboBox" id="sound-model"> - <property name="visible">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> </widget> </child> </widget> @@ -1779,7 +1779,7 @@ <child> <widget class="GtkLabel" id="label5"> <property name="visible">True</property> - <property name="label" translatable="yes">Sound</property> + <property name="label">Sound</property> </widget> <packing> <property name="type">tab</property> @@ -1788,6 +1788,160 @@ </packing> </child> <child> + <widget class="GtkVBox" id="vbox3"> + <property name="visible">True</property> + <property name="border_width">1</property> + <child> + <widget class="GtkEventBox" id="page6-title"> + <property name="visible">True</property> + <child> + <widget class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xpad">5</property> + <property name="ypad">6</property> + <property name="label" translatable="yes"><span weight="heavy" size="xx-large" foreground="#FFF">Host Device</span></property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_FILL</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox4"> + <property name="visible">True</property> + <child> + <widget class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">20</property> + <property name="ypad">10</property> + <property name="label" translatable="yes">Please indicate what physical device +to connect to the virtual machine.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="left_padding">25</property> + <property name="right_padding">15</property> + <child> + <widget class="GtkFrame" id="frame6"> + <property name="visible">True</property> + <property name="border_width">6</property> + <property name="label_xalign">0</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <widget class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="top_padding">2</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkTable" id="table3"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> + <child> + <widget class="GtkComboBox" id="host-device"> + <property name="visible">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkComboBox" id="host-device-type"> + <property name="visible">True</property> + <signal name="changed" handler="on_host_device_type_changed"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label20"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Device:</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label18"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Device Type:</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + <child> + <widget class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Physical Host Device</b></property> + <property name="use_markup">True</property> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="position">6</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="label">Hostdev</property> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">6</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> <widget class="GtkVBox" id="vbox41"> <property name="visible">True</property> <property name="border_width">1</property> @@ -1795,7 +1949,7 @@ <widget class="GtkAlignment" id="alignment95"> <property name="visible">True</property> <child> - <widget class="GtkEventBox" id="page6-title"> + <widget class="GtkEventBox" id="page7-title"> <property name="visible">True</property> <child> <widget class="GtkLabel" id="label247"> @@ -1829,9 +1983,9 @@ <child> <widget class="GtkVBox" id="vbox54"> <property name="visible">True</property> + <property name="spacing">2</property> <child> <widget class="GtkTable" id="summary-disk"> - <property name="visible">True</property> <property name="border_width">6</property> <property name="n_rows">3</property> <property name="n_columns">3</property> @@ -1923,7 +2077,6 @@ </child> <child> <widget class="GtkTable" id="summary-network"> - <property name="visible">True</property> <property name="border_width">6</property> <property name="n_rows">5</property> <property name="n_columns">3</property> @@ -2083,7 +2236,6 @@ </child> <child> <widget class="GtkTable" id="summary-input"> - <property name="visible">True</property> <property name="border_width">6</property> <property name="n_rows">3</property> <property name="n_columns">3</property> @@ -2178,7 +2330,6 @@ </child> <child> <widget class="GtkTable" id="summary-graphics"> - <property name="visible">True</property> <property name="border_width">6</property> <property name="n_rows">6</property> <property name="n_columns">3</property> @@ -2374,7 +2525,7 @@ </child> <child> <widget class="GtkTable" id="summary-sound"> - <property name="visible">True</property> + <property name="border_width">6</property> <property name="n_rows">2</property> <property name="n_columns">2</property> <property name="column_spacing">3</property> @@ -2420,6 +2571,80 @@ <property name="position">4</property> </packing> </child> + <child> + <widget class="GtkTable" id="summary-hostdev"> + <property name="visible">True</property> + <property name="border_width">3</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">8</property> + <property name="row_spacing">3</property> + <child> + <widget class="GtkLabel" id="summary-host-device"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">summary-host-device</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="summary-host-device-type"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label">summary-host-device-type</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label23"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Device:</property> + </widget> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label22"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Device Type:</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label21"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><b>Physical Host Device</b></property> + <property name="use_markup">True</property> + </widget> + <packing> + <property name="right_attach">2</property> + </packing> + </child> + </widget> + <packing> + <property name="position">5</property> + </packing> + </child> </widget> </child> </widget> @@ -2429,7 +2654,7 @@ </child> </widget> <packing> - <property name="position">6</property> + <property name="position">7</property> </packing> </child> <child> @@ -2439,7 +2664,7 @@ </widget> <packing> <property name="type">tab</property> - <property name="position">6</property> + <property name="position">7</property> <property name="tab_fill">False</property> </packing> </child>
_______________________________________________ et-mgmt-tools mailing list et-mgmt-tools@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/et-mgmt-tools