[et-mgmt-tools] [PATCH] virt-manager: show sound devices

Daniel P. Berrange berrange at redhat.com
Tue Jul 29 08:35:58 UTC 2008


On Mon, Jul 28, 2008 at 11:51:28AM -0400, Cole Robinson wrote:
> The attached patch teaches virt-manager how to parse
> sound device xml for virtual machines. Each separate
> <sound model='blah'/> will show up as a separate
> device in the VM details listing. The patch also
> implements deleting these devices.

ACK this is good.

> 
> I put a screenshot up that should explain most of the
> changes:
> 
> http://crobinso.fedorapeople.org/virt-manager/vmm-sound.png

We sooooo badly need to find us a graphic designer who can build
a complete set of proper icons for  CPU, memory, disk, NIC, sound,
input, PCI and USB devices. The icons we use currently just look
rubbish - i'm inclined to say we should get rid of them unless
we can get good graphics because they're not really adding value
anymore.


> diff -r f4c491621a10 -r 8a86b6ed3a80 src/virtManager/details.py
> --- a/src/virtManager/details.py	Wed Jul 23 16:23:56 2008 -0400
> +++ b/src/virtManager/details.py	Wed Jul 23 17:24:12 2008 -0400
> @@ -55,6 +55,7 @@
>  HW_LIST_TYPE_NIC = 4
>  HW_LIST_TYPE_INPUT = 5
>  HW_LIST_TYPE_GRAPHICS = 6
> +HW_LIST_TYPE_SOUND = 7
>  
>  # Console pages
>  PAGE_UNAVAILABLE = 0
> @@ -252,6 +253,7 @@
>              "on_config_network_remove_clicked": self.remove_network,
>              "on_config_input_remove_clicked": self.remove_input,
>              "on_config_graphics_remove_clicked": self.remove_graphics,
> +            "on_config_sound_remove_clicked": self.remove_sound,
>              "on_add_hardware_button_clicked": self.add_hardware,
>  
>              "on_details_menu_view_fullscreen_activate": self.toggle_fullscreen,
> @@ -536,6 +538,8 @@
>                  self.refresh_input_page()
>              elif pagetype == HW_LIST_TYPE_GRAPHICS:
>                  self.refresh_graphics_page()
> +            elif pagetype == HW_LIST_TYPE_SOUND:
> +                self.refresh_sound_page()
>              elif pagetype == HW_LIST_TYPE_BOOT:
>                  self.refresh_boot_page()
>                  self.window.get_widget("config-boot-options-apply").set_sensitive(False)
> @@ -720,6 +724,8 @@
>                      self.refresh_input_page()
>                  elif pagetype == HW_LIST_TYPE_GRAPHICS:
>                      self.refresh_graphics_page()
> +                elif pagetype == HW_LIST_TYPE_SOUND:
> +                    self.refresh_sound_page()
>  
>      def refresh_summary(self):
>          self.window.get_widget("overview-cpu-usage-text").set_text("%d %%" % self.vm.cpu_time_percentage())
> @@ -889,6 +895,21 @@
>                  self.window.get_widget("config-input-remove").set_sensitive(False)
>              else:
>                  self.window.get_widget("config-input-remove").set_sensitive(True)
> +
> +    def refresh_sound_page(self):
> +        vmlist = self.window.get_widget("hw-list")
> +        selection = vmlist.get_selection()
> +        active = selection.get_selected()
> +        if active[1] is None:
> +            return
> +        sound = active[0].get_value(active[1], HW_LIST_COL_DEVICE)
> +        self.window.get_widget("sound-model").set_text(sound[3])
> +
> +        # Can't remove sound dev from live guest
> +        if self.vm.is_active():
> +            self.window.get_widget("config-sound-remove").set_sensitive(False)
> +        else:
> +            self.window.get_widget("config-sound-remove").set_sensitive(True)
>  
>      def refresh_boot_page(self):
>          # Refresh autostart
> @@ -1296,6 +1317,18 @@
>              self.remove_device(xml)
>              self.refresh_resources()
>  
> +    def remove_sound(self, src):
> +        vmlist = self.window.get_widget("hw-list")
> +        selection = vmlist.get_selection()
> +        active = selection.get_selected()
> +        if active[1] is None:
> +            return
> +        sound = active[0].get_value(active[1], HW_LIST_COL_DEVICE)
> +
> +        xml = "<sound model='%s'/>" % sound[3]
> +        self.remove_device(xml)
> +        self.refresh_resources()
> +
>      def prepare_hw_list(self):
>          hw_list_model = gtk.ListStore(str, str, int, gtk.gdk.Pixbuf, int, gobject.TYPE_PYOBJECT)
>          self.window.get_widget("hw-list").set_model(hw_list_model)
> @@ -1426,6 +1459,25 @@
>              if missing:
>                  hw_list_model.insert(insertAt, [_("Display"), gtk.STOCK_SELECT_COLOR, gtk.ICON_SIZE_LARGE_TOOLBAR, None, HW_LIST_TYPE_GRAPHICS, graphic])
>  
> +        # Populate list of sound devices
> +        currentSounds = {}
> +        for sound in self.vm.get_sound_devices():
> +            missing = True
> +            insertAt = 0
> +            currentSounds[sound[3]] = 1
> +            for row in hw_list_model:
> +                if row[HW_LIST_COL_TYPE] == HW_LIST_TYPE_SOUND and \
> +                   row[HW_LIST_COL_DEVICE][3] == sound[3]:
> +                    # Update metadata
> +                    row[HW_LIST_COL_DEVICE] = sound
> +                    missing = False
> +
> +                if row[HW_LIST_COL_TYPE] <= HW_LIST_TYPE_SOUND:
> +                    insertAt = insertAt + 1
> +            # Add in row
> +            if missing:
> +                hw_list_model.insert(insertAt, [_("Sound: %s" % sound[3]), gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_LARGE_TOOLBAR, None, HW_LIST_TYPE_SOUND, sound])
> +
>          # Now remove any no longer current devs
>          devs = range(len(hw_list_model))
>          devs.reverse()
> @@ -1441,6 +1493,9 @@
>              elif row[HW_LIST_COL_TYPE] == HW_LIST_TYPE_INPUT and not currentInputs.has_key(row[HW_LIST_COL_DEVICE][3]):
>                  removeIt = True
>              elif row[HW_LIST_COL_TYPE] == HW_LIST_TYPE_GRAPHICS and not currentGraphics.has_key(row[HW_LIST_COL_DEVICE][3]):
> +                removeIt = True
> +            elif row[HW_LIST_COL_TYPE] == HW_LIST_TYPE_SOUND and not \
> +                 currentSounds.has_key(row[HW_LIST_COL_DEVICE][3]):

If we're going to break long lines, break all of them in that
conditional :-)


Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the et-mgmt-tools mailing list