[virt-tools-list] [virt-manager PATCH 2/3] addhardware: enable setting model when adding controller

Chen Hanxiao chenhanxiao at cn.fujitsu.com
Mon Jun 9 10:15:59 UTC 2014


This patch will enable setting controller model
when adding controller.

If no USB controller or usb model = none,
we could add a new one;
if had, disable 'create-finish' button.

Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
---
 virtManager/addhardware.py | 41 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 224baf4..0678f03 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -73,6 +73,8 @@ class vmmAddHardware(vmmGObjectUI):
         self.storage_browser = None
 
         self._dev = None
+        self._remove_usb_controller = None
+        self._selected_model = None
 
         self.gfxdetails = vmmGraphicsDetails(
             self.vm, self.builder, self.topwin)
@@ -325,9 +327,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()
@@ -756,7 +755,7 @@ class vmmAddHardware(vmmGObjectUI):
         else:
             if add_default:
                 model.append([None, "Default"])
-                combo.set_sensitive(False)
+                uiutil.set_grid_row_visible(combo, False)
             if widget_name is not None:
                 widget_name.set_sensitive(True)
 
@@ -873,6 +872,21 @@ class vmmAddHardware(vmmGObjectUI):
         controller_type = self.get_config_controller_type()
         modellist = self.widget("controller-model")
         modellist.set_sensitive(True)
+
+        controllers = self.vm.get_controller_devices()
+        if controller_type == VirtualController.TYPE_USB:
+            usb_controllers = [x for x in controllers if
+                    (x.type == VirtualController.TYPE_USB)]
+            if (len(usb_controllers) == 0):
+                self.widget("create-finish").set_sensitive(True)
+            elif (len(usb_controllers) == 1 and usb_controllers[0].model == "none"):
+                self._remove_usb_controller = usb_controllers[0]
+                self.widget("create-finish").set_sensitive(True)
+            else:
+                self.widget("create-finish").set_sensitive(False)
+        else:
+            self.widget("create-finish").set_sensitive(True)
+        uiutil.set_grid_row_visible(modellist, True)
         self.populate_controller_model_combo(modellist, controller_type, None, True)
 
         if len(modellist.get_model()) > 0:
@@ -1407,6 +1421,18 @@ class vmmAddHardware(vmmGObjectUI):
         self._dev.get_xml_config()
         logging.debug("Adding device:\n" + self._dev.get_xml_config())
 
+        if self._remove_usb_controller:
+            kwargs = {}
+            kwargs["model"] = self._selected_model
+
+            self.change_config_helper(self.vm.define_controller,
+                    kwargs, self.vm, self.err, self._remove_usb_controller)
+
+            self._remove_usb_controller = None
+            self._selected_model = None
+
+            return
+
         controller = getattr(self._dev, "vmm_controller", None)
         if controller is not None:
             logging.debug("Adding controller:\n%s",
@@ -1861,7 +1887,9 @@ 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)
+        self._selected_model = model
 
         controllers = self.vm.get_controller_devices()
         controller_num = [x for x in controllers if
@@ -1872,6 +1900,11 @@ class vmmAddHardware(vmmGObjectUI):
 
         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 \
                self.get_config_rng_backend_mode()
-- 
1.9.0




More information about the virt-tools-list mailing list