[virt-tools-list] [virt-manager PATCH v2 3/3] addhardware: enable setting model when adding controller
Cole Robinson
crobinso at redhat.com
Thu Apr 24 15:26:22 UTC 2014
On 04/23/2014 06:23 AM, Chen Hanxiao wrote:
> If no USB controller, we could add a new one;
> if had, disable 'create-finish' button and
> add a tooltip beside type combo.
>
> Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
> ---
> ui/addhardware.ui | 22 ++++++++++++++++++---
> virtManager/addhardware.py | 48 +++++++++++++++++++++++++++++++++++-----------
> 2 files changed, 56 insertions(+), 14 deletions(-)
>
> diff --git a/ui/addhardware.ui b/ui/addhardware.ui
> index 97d03c0..7a5b30d 100644
> --- a/ui/addhardware.ui
> +++ b/ui/addhardware.ui
> @@ -1,7 +1,7 @@
> <?xml version="1.0" encoding="UTF-8"?>
> -<!-- Generated with glade 3.16.1 -->
> +<!-- Generated with glade 3.16.0 on Wed Apr 23 16:58:20 2014 -->
> <interface>
> - <requires lib="gtk+" version="3.0"/>
> + <!-- interface-requires gtk+ 3.0 -->
> <object class="GtkAdjustment" id="adjustment1">
> <property name="upper">67000</property>
> <property name="step_increment">1</property>
> @@ -169,12 +169,12 @@
> <property name="visible">True</property>
> <property name="can_focus">False</property>
> <property name="halign">start</property>
> - <signal name="changed" handler="on_config_storage_devtype_changed" swapped="no"/>
> <child internal-child="accessible">
> <object class="AtkObject" id="config-storage-devtype-atkobject">
> <property name="AtkObject::accessible-name" translatable="yes">Device Type Field</property>
> </object>
> </child>
> + <signal name="changed" handler="on_config_storage_devtype_changed" swapped="no"/>
> </object>
> <packing>
> <property name="left_attach">1</property>
> @@ -387,6 +387,22 @@
> <property name="height">1</property>
> </packing>
> </child>
> + <child>
> + <object class="GtkImage" id="controller-tooltip">
> + <property name="visible">True</property>
> + <property name="can_focus">False</property>
> + <property name="stock">gtk-info</property>
> + </object>
> + <packing>
> + <property name="left_attach">2</property>
> + <property name="top_attach">0</property>
> + <property name="width">1</property>
> + <property name="height">1</property>
> + </packing>
> + </child>
> + <child>
> + <placeholder/>
> + </child>
> </object>
> <packing>
> <property name="position">2</property>
> diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
> index 78235bb..4fc5532 100644
> --- a/virtManager/addhardware.py
> +++ b/virtManager/addhardware.py
> @@ -325,9 +325,6 @@ class vmmAddHardware(vmmGObjectUI):
> target_model = Gtk.ListStore(str, str)
> combo.set_model(target_model)
> uiutil.set_combo_text_column(combo, 1)
> - # FIXME: we should deal with controller model
> - combo.set_visible(False)
> - self.widget("controller-model-label").set_visible(False)
>
> # Available HW options
> is_local = not self.conn.is_remote()
> @@ -872,6 +869,22 @@ class vmmAddHardware(vmmGObjectUI):
>
> controller_type = self.get_config_controller_type()
> modellist = self.widget("controller-model")
> + model_tooltip = self.widget("controller-tooltip")
> + model_tooltip.set_visible(False)
> +
> + controllers = self.vm.get_controller_devices()
> + if (controller_type == VirtualController.TYPE_USB and
> + len([x for x in controllers if
> + (x.type == VirtualController.TYPE_USB)])):
> + vmname = self.vm.get_name()
> + tooltip = (_("%s already has a USB controller attached.\n"
> + "Adding more than one USB controller is not supported.\nYou can change "
> + "the USB controller type in the VM details screen.") % vmname)
> + model_tooltip.set_visible(True)
> + model_tooltip.set_tooltip_text(tooltip)
> + self.widget("create-finish").set_sensitive(False)
> + else:
> + self.widget("create-finish").set_sensitive(True)
> modellist.set_sensitive(True)
> self.populate_controller_model_combo(modellist, controller_type, None, True)
>
> @@ -1806,16 +1819,29 @@ class vmmAddHardware(vmmGObjectUI):
> def validate_page_controller(self):
> conn = self.conn.get_backend()
> controller_type = self.get_config_controller_type()
> + model = self.get_config_controller_model()
> self._dev = VirtualController(conn)
>
> - controllers = self.vm.get_controller_devices()
> - controller_num = [x for x in controllers if
> - (x.type == controller_type)]
> - if len(controller_num) > 0:
> - index_new = max([x.index for x in controller_num]) + 1
> - self._dev.index = index_new
> -
> - self._dev.type = controller_type
> + if model == "ich9-ehci1":
> + for dev in VirtualController.get_usb2_controllers(conn):
> + self._dev.type = dev.type
> + self._dev.model = dev.model
> + self._dev.master_startport = dev.master_startport
> + if dev.model != "ich9-uhci3":
> + self.add_device()
Calling add_device during validation is not okay, since this will actually
attempt to alter the VM. We need to make self._dev a list in this case
containing all the devices we want to add, and only then do it during
add_device. We also need to avoid hotplug in that case since we can't hotplug
multiple devices at once.
Also, if a controller type doesn't support any 'model' values, we should hide
the model row (set_grid_row_visible) rather than de-sensitize it.
- Cole
> + else:
> + controllers = self.vm.get_controller_devices()
> + controller_num = [x for x in controllers if
> + (x.type == controller_type)]
> + if len(controller_num) > 0:
> + index_new = max([x.index for x in controller_num]) + 1
> + self._dev.index = index_new
> +
> + self._dev.type = controller_type
> + if model != "none":
> + if model == "default":
> + model = None
> + self._dev.model = model
>
> def validate_page_rng(self):
> conn = virtinst.VirtualRNGDevice.BACKEND_MODE_CONNECT in \
>
More information about the virt-tools-list
mailing list