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. Questions or comments appreciated. Thanks, Cole
# HG changeset patch # User Cole Robinson <crobinso@xxxxxxxxxx> # Node ID c75fc4916794bf022044afac4ffa193e68d2c04e # Parent 0a90fb21b232139a620112ab474f7e018eff073d 'Add Physical Host Device' wizard for existing VMs. diff -r 0a90fb21b232 -r c75fc4916794 src/virtManager/addhardware.py --- a/src/virtManager/addhardware.py Sun Mar 08 15:44:26 2009 -0400 +++ b/src/virtManager/addhardware.py Sun Mar 08 19:30:55 2009 -0400 @@ -45,7 +45,8 @@ PAGE_INPUT = 3 PAGE_GRAPHICS = 4 PAGE_SOUND = 5 -PAGE_SUMMARY = 6 +PAGE_HOSTDEV = 6 +PAGE_SUMMARY = 7 class vmmAddHardware(gobject.GObject): __gsignals__ = { @@ -85,6 +86,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, }) @@ -170,6 +172,23 @@ 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 + host_devtype_model = gtk.ListStore(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) @@ -232,6 +251,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]) @@ -250,6 +276,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") @@ -396,6 +426,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: @@ -427,6 +465,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() @@ -495,6 +534,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() @@ -512,16 +555,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) @@ -553,6 +602,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(): @@ -753,6 +806,16 @@ 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 = src.get_model()[src.get_active()] + self.populate_host_device_model(devbox.get_model(), devtype, devcap) + devbox.set_active(0) + def validate(self, page_num): if page_num == PAGE_INTRO: if self.get_config_hardware_type() == None: @@ -881,7 +944,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 @@ -963,6 +1042,23 @@ for m in lst: model.append([m]) + def populate_host_device_type_model(self, model): + model.clear() + for m in [ ["PCI Device", "pci", None], + ["USB Device", "usb_device", None], + ["Wired NIC", "net", "80203"] ]: + model.append(m) + + def populate_host_device_model(self, model, devtype, devcap): + model.clear() + + devs = self.vm.get_connection().get_devices(devtype, devcap) + for m in devs: + model.append([m.pretty_name(), m.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 0a90fb21b232 -r c75fc4916794 src/virtManager/connection.py --- a/src/virtManager/connection.py Sun Mar 08 15:44:26 2009 -0400 +++ b/src/virtManager/connection.py Sun Mar 08 19:30:55 2009 -0400 @@ -292,6 +292,9 @@ def is_storage_capable(self): return virtinst.util.is_storage_capable(self.vmm) + 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) @@ -340,6 +343,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 0a90fb21b232 -r c75fc4916794 src/vmm-add-hardware.glade --- a/src/vmm-add-hardware.glade Sun Mar 08 15:44:26 2009 -0400 +++ b/src/vmm-add-hardware.glade Sun Mar 08 19:30:55 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