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@xxxxxxxxxxxxxx> > --- > 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 \ > _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list