[virt-tools-list] [PATCH 3/4] Display operating system inspection icons in main vmlist.
Cole Robinson
crobinso at redhat.com
Thu Jul 7 14:52:01 UTC 2011
On 06/30/2011 04:02 AM, Richard W.M. Jones wrote:
> From: "Richard W.M. Jones" <rjones at redhat.com>
>
> ---
> src/virtManager/manager.py | 41 +++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/src/virtManager/manager.py b/src/virtManager/manager.py
> index c7cca67..a52fd90 100644
> --- a/src/virtManager/manager.py
> +++ b/src/virtManager/manager.py
> @@ -43,6 +43,7 @@ ROW_IS_CONN_CONNECTED = 8
> ROW_IS_VM = 9
> ROW_IS_VM_RUNNING = 10
> ROW_COLOR = 11
> +ROW_INSPECTION_OS_ICON = 12
>
> # Columns in the tree view
> COL_NAME = 0
> @@ -352,9 +353,10 @@ class vmmManager(vmmGObjectUI):
> self.window.get_widget("vm-notebook").set_show_tabs(False)
>
> # Handle, name, markup, status, status icon, key/uuid, hint, is conn,
> - # is conn connected, is vm, is vm running, fg color
> + # is conn connected, is vm, is vm running, fg color, inspection icon
> model = gtk.TreeStore(object, str, str, str, gtk.gdk.Pixbuf, str, str,
> - bool, bool, bool, bool, gtk.gdk.Color)
> + bool, bool, bool, bool, gtk.gdk.Color,
> + gtk.gdk.Pixbuf)
> vmlist.set_model(model)
> util.tooltip_wrapper(vmlist, ROW_HINT, "set_tooltip_column")
>
> @@ -384,6 +386,12 @@ class vmmManager(vmmGObjectUI):
> statusCol.add_attribute(status_icon, 'pixbuf', ROW_STATUS_ICON)
> statusCol.add_attribute(status_icon, 'visible', ROW_IS_VM)
>
> + inspection_os_icon = gtk.CellRendererPixbuf()
> + statusCol.pack_start(inspection_os_icon, False)
> + statusCol.add_attribute(inspection_os_icon, 'pixbuf',
> + ROW_INSPECTION_OS_ICON)
> + statusCol.add_attribute(inspection_os_icon, 'visible', ROW_IS_VM)
> +
> name_txt = gtk.CellRendererText()
> nameCol.pack_start(name_txt, True)
> nameCol.add_attribute(name_txt, 'markup', ROW_MARKUP)
> @@ -679,6 +687,7 @@ class vmmManager(vmmGObjectUI):
> vm.connect("status-changed", self.vm_status_changed)
> vm.connect("resources-sampled", self.vm_resources_sampled)
> vm.connect("config-changed", self.vm_resources_sampled)
> + vm.connect("inspection-changed", self.vm_inspection_changed)
>
Hmm, this makes me think maybe we shouldn't have a separate signal for
'inspection-changed' and just wrap this up into 'config-changed', since
from the UIs perspective it's all just domain details.
> vmlist = self.window.get_widget("vm-list")
> model = vmlist.get_model()
> @@ -747,6 +756,8 @@ class vmmManager(vmmGObjectUI):
> row.insert(ROW_IS_VM, True)
> row.insert(ROW_IS_VM_RUNNING, vm.is_active())
> row.insert(ROW_COLOR, gtk.gdk.Color(0, 0, 0))
> + row.insert(ROW_INSPECTION_OS_ICON,
> + self.get_inspection_icon_pixbuf(vm,16,16))
>
> row[ROW_MARKUP] = self._build_vm_markup(vm, row)
>
> @@ -784,6 +795,7 @@ class vmmManager(vmmGObjectUI):
> row.insert(ROW_IS_VM, False)
> row.insert(ROW_IS_VM_RUNNING, False)
> row.insert(ROW_COLOR, self._build_conn_color(conn))
> + row.insert(ROW_INSPECTION_OS_ICON, None)
>
> _iter = model.append(None, row)
> path = model.get_path(_iter)
> @@ -883,6 +895,31 @@ class vmmManager(vmmGObjectUI):
> row[ROW_MARKUP] = self._build_vm_markup(vm, row)
> model.row_changed(row.path, row.iter)
>
> + def vm_inspection_changed(self, vm):
> + vmlist = self.window.get_widget("vm-list")
> + model = vmlist.get_model()
> +
> + if self.vm_row_key(vm) not in self.rows:
> + return
> +
> + row = self.rows[self.vm_row_key(vm)]
> + row[ROW_INSPECTION_OS_ICON] = self.get_inspection_icon_pixbuf(vm,16,16)
> + model.row_changed(row.path, row.iter)
> +
> + def get_inspection_icon_pixbuf(self, vm, w, h):
> + # libguestfs gives us the PNG data as a string.
> + png_data = vm.get_inspection_icon()
> + if png_data == None:
> + return None
> + try:
> + pb = gtk.gdk.PixbufLoader(image_type="png")
> + pb.set_size(w, h)
> + pb.write (png_data)
> + pb.close()
> + return pb.get_pixbuf()
> + except:
> + return None
> +
Maybe we should do this just once when we set the data in
vmmInspectionData? If we need multiple sizes, just precreate multiple PNGs.
In general I like the idea though!
Thanks,
Cole
More information about the virt-tools-list
mailing list