summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Robinson <crobinso@redhat.com>2013-09-01 18:36:58 -0400
committerCole Robinson <crobinso@redhat.com>2013-12-05 15:52:30 -0500
commit7b908d3cb6e871b7feabddfd4e83d25835032e58 (patch)
treedab3eef322f921e2ad6196f2e3ed3d75ca79dda3
parent0e9f4892b8631bfc4f5bd892038d77cb09c900ea (diff)
downloadvirt-manager-7b908d3cb6e871b7feabddfd4e83d25835032e58.tar.gz
manager: Merge some row creation, drop unneeded row keys
(cherry picked from commit 1bd6026515324430adbdd7a8b666e1b6a64879c3) Conflicts: virtManager/manager.py
-rw-r--r--virtManager/manager.py174
1 files changed, 79 insertions, 95 deletions
diff --git a/virtManager/manager.py b/virtManager/manager.py
index 97cb0682..2770b2f5 100644
--- a/virtManager/manager.py
+++ b/virtManager/manager.py
@@ -42,18 +42,16 @@ GRAPH_LEN = 40
# fields in the tree model data set
(ROW_HANDLE,
-ROW_NAME,
+ROW_SORT_KEY,
ROW_MARKUP,
-ROW_STATUS,
ROW_STATUS_ICON,
-ROW_KEY,
ROW_HINT,
ROW_IS_CONN,
ROW_IS_CONN_CONNECTED,
ROW_IS_VM,
ROW_IS_VM_RUNNING,
ROW_COLOR,
-ROW_INSPECTION_OS_ICON) = range(13)
+ROW_INSPECTION_OS_ICON) = range(11)
# Columns in the tree view
COL_NAME = 0
@@ -78,6 +76,24 @@ def _style_get_prop(widget, propname):
return value.get_int()
+def _get_inspection_icon_pixbuf(vm, w, h):
+ # libguestfs gives us the PNG data as a string.
+ png_data = vm.inspection.icon
+ if png_data is None:
+ return None
+
+ try:
+ pb = GdkPixbuf.PixbufLoader()
+ pb.set_size(w, h)
+ pb.write(png_data)
+ pb.close()
+ return pb.get_pixbuf()
+ except:
+ logging.exception("Error loading inspection icon data")
+ vm.inspection.icon = None
+ return None
+
+
class vmmManager(vmmGObjectUI):
__gsignals__ = {
"action-show-connect": (GObject.SignalFlags.RUN_FIRST, None, []),
@@ -380,11 +396,9 @@ class vmmManager(vmmGObjectUI):
rowtypes = []
rowtypes.insert(ROW_HANDLE, object) # backing object
- rowtypes.insert(ROW_NAME, str) # object name
+ rowtypes.insert(ROW_SORT_KEY, str) # object name
rowtypes.insert(ROW_MARKUP, str) # row markup text
- rowtypes.insert(ROW_STATUS, str) # object status string
rowtypes.insert(ROW_STATUS_ICON, str) # status icon name
- rowtypes.insert(ROW_KEY, str) # key/uuid
rowtypes.insert(ROW_HINT, str) # row tooltip
rowtypes.insert(ROW_IS_CONN, bool) # if object is a connection
rowtypes.insert(ROW_IS_CONN_CONNECTED, bool) # if conn is connected
@@ -764,8 +778,8 @@ class vmmManager(vmmGObjectUI):
hint += " (%s)" % _("Double click to connect")
return hint
- def _build_conn_markup(self, conn, row):
- name = util.xml_escape(row[ROW_NAME])
+ def _build_conn_markup(self, conn, name):
+ name = util.xml_escape(name)
text = name
if conn.state == conn.STATE_DISCONNECTED:
text += " - " + _("Not Connected")
@@ -781,31 +795,44 @@ class vmmManager(vmmGObjectUI):
color = "#5b5b5b"
return color
- def _build_vm_markup(self, row):
+ def _build_vm_markup(self, name, status):
domtext = ("<span size='smaller' weight='bold'>%s</span>" %
- util.xml_escape(row[ROW_NAME]))
- statetext = "<span size='smaller'>%s</span>" % row[ROW_STATUS]
+ util.xml_escape(name))
+ statetext = "<span size='smaller'>%s</span>" % status
return domtext + "\n" + statetext
- def _build_vm_row(self, vm):
- row = []
+ def _build_row(self, conn, vm):
+ if conn:
+ name = conn.get_pretty_desc_inactive(False)
+ markup = self._build_conn_markup(conn, name)
+ status = ("<span size='smaller'>%s</span>" %
+ conn.get_state_text())
+ status_icon = None
+ hint = self._build_conn_hint(conn)
+ color = self._build_conn_color(conn)
+ os_icon = None
+ else:
+ name = vm.get_name()
+ status = vm.run_status()
+ markup = self._build_vm_markup(name, status)
+ status_icon = vm.run_status_icon_name()
+ hint = vm.get_description()
+ color = None
+ os_icon = _get_inspection_icon_pixbuf(vm, 16, 16)
- row.insert(ROW_HANDLE, vm)
- row.insert(ROW_NAME, vm.get_name())
- row.insert(ROW_MARKUP, "")
- row.insert(ROW_STATUS, vm.run_status())
- row.insert(ROW_STATUS_ICON, vm.run_status_icon_name())
- row.insert(ROW_KEY, vm.get_uuid())
- row.insert(ROW_HINT, util.xml_escape(vm.get_description()))
- row.insert(ROW_IS_CONN, False)
- row.insert(ROW_IS_CONN_CONNECTED, True)
- row.insert(ROW_IS_VM, True)
- row.insert(ROW_IS_VM_RUNNING, vm.is_active())
- row.insert(ROW_COLOR, None)
- row.insert(ROW_INSPECTION_OS_ICON,
- self.get_inspection_icon_pixbuf(vm, 16, 16))
-
- row[ROW_MARKUP] = self._build_vm_markup(row)
+ row = []
+ row.insert(ROW_HANDLE, conn or vm)
+ row.insert(ROW_SORT_KEY, name)
+ row.insert(ROW_MARKUP, markup)
+ row.insert(ROW_STATUS_ICON, status_icon)
+ row.insert(ROW_HINT, util.xml_escape(hint))
+ row.insert(ROW_IS_CONN, bool(conn))
+ row.insert(ROW_IS_CONN_CONNECTED,
+ bool(conn) and conn.state != conn.STATE_DISCONNECTED)
+ row.insert(ROW_IS_VM, bool(vm))
+ row.insert(ROW_IS_VM_RUNNING, bool(vm) and vm.is_active())
+ row.insert(ROW_COLOR, color)
+ row.insert(ROW_INSPECTION_OS_ICON, os_icon)
return row
@@ -814,7 +841,7 @@ class vmmManager(vmmGObjectUI):
if row_key in self.rows:
return
- row = self._build_vm_row(vm)
+ row = self._build_row(None, vm)
parent = self.rows[conn.get_uri()].iter
_iter = model.append(parent, row)
@@ -824,28 +851,8 @@ class vmmManager(vmmGObjectUI):
# Expand a connection when adding a vm to it
self.widget("vm-list").expand_row(model.get_path(parent), False)
- def _build_conn_row(self, conn):
- row = []
- row.insert(ROW_HANDLE, conn)
- row.insert(ROW_NAME, conn.get_pretty_desc_inactive(False))
- row.insert(ROW_MARKUP, self._build_conn_markup(conn, row))
- row.insert(ROW_STATUS, ("<span size='smaller'>%s</span>" %
- conn.get_state_text()))
- row.insert(ROW_STATUS_ICON, None)
- row.insert(ROW_KEY, conn.get_uri())
- row.insert(ROW_HINT, self._build_conn_hint(conn))
- row.insert(ROW_IS_CONN, True)
- row.insert(ROW_IS_CONN_CONNECTED,
- conn.state != conn.STATE_DISCONNECTED)
- 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)
-
- return row
-
def _append_conn(self, model, conn):
- row = self._build_conn_row(conn)
+ row = self._build_row(conn, None)
_iter = model.append(None, row)
path = model.get_path(_iter)
@@ -877,11 +884,11 @@ class vmmManager(vmmGObjectUI):
if row[ROW_IS_CONN]:
connrows.append(row)
for row in connrows:
- descs.append(row[ROW_NAME])
+ descs.append(row[ROW_SORT_KEY])
for row in connrows:
conn = row[ROW_HANDLE]
- name = row[ROW_NAME]
+ name = row[ROW_SORT_KEY]
if descs.count(name) <= 1:
continue
@@ -919,7 +926,7 @@ class vmmManager(vmmGObjectUI):
missing = True
for row in range(model.iter_n_children(parent)):
_iter = model.iter_nth_child(parent, row)
- if model.get_value(_iter, ROW_KEY) == vm.get_uuid():
+ if model.get_value(_iter, ROW_HANDLE) == vm:
missing = False
break
@@ -931,20 +938,18 @@ class vmmManager(vmmGObjectUI):
self.vm_resources_sampled(vm)
def vm_resources_sampled(self, vm, config_changed=False):
- vmlist = self.widget("vm-list")
- model = vmlist.get_model()
-
- if self.vm_row_key(vm) not in self.rows:
+ row = self.rows.get(self.vm_row_key(vm), None)
+ if row is None:
return
-
try:
- row = self.rows[self.vm_row_key(vm)]
- row[ROW_NAME] = vm.get_name()
- row[ROW_STATUS] = vm.run_status()
+ name = vm.get_name()
+ status = vm.run_status()
+
+ row[ROW_SORT_KEY] = name
row[ROW_STATUS_ICON] = vm.run_status_icon_name()
row[ROW_IS_VM_RUNNING] = vm.is_active()
- row[ROW_MARKUP] = self._build_vm_markup(row)
+ row[ROW_MARKUP] = self._build_vm_markup(name, status)
if config_changed:
desc = vm.get_description()
@@ -956,53 +961,32 @@ class vmmManager(vmmGObjectUI):
return
raise
- model.row_changed(row.path, row.iter)
+ self.widget("vm-list").get_model().row_changed(row.path, row.iter)
def vm_inspection_changed(self, vm):
- vmlist = self.widget("vm-list")
- model = vmlist.get_model()
-
- if self.vm_row_key(vm) not in self.rows:
+ row = self.rows.get(self.vm_row_key(vm), None)
+ if row is None:
return
row = self.rows[self.vm_row_key(vm)]
- new_icon = self.get_inspection_icon_pixbuf(vm, 16, 16)
+ new_icon = _get_inspection_icon_pixbuf(vm, 16, 16)
if not can_set_row_none:
new_icon = new_icon or ""
row[ROW_INSPECTION_OS_ICON] = new_icon
- 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.inspection.icon
- if png_data is None:
- return None
- try:
- pb = GdkPixbuf.PixbufLoader()
- pb.set_size(w, h)
- pb.write(png_data)
- pb.close()
- return pb.get_pixbuf()
- except:
- logging.exception("Error loading inspection icon data")
- vm.inspection.icon = None
- return None
+ self.widget("vm-list").get_model().row_changed(row.path, row.iter)
def conn_state_changed(self, conn):
self.conn_resources_sampled(conn)
self.vm_selected()
def conn_resources_sampled(self, conn, newname=None):
- vmlist = self.widget("vm-list")
- model = vmlist.get_model()
+ model = self.widget("vm-list").get_model()
row = self.rows[conn.get_uri()]
if newname:
- row[ROW_NAME] = newname
- row[ROW_MARKUP] = self._build_conn_markup(conn, row)
- row[ROW_STATUS] = ("<span size='smaller'>%s</span>" %
- conn.get_state_text())
+ row[ROW_SORT_KEY] = newname
+ row[ROW_MARKUP] = self._build_conn_markup(conn, row[ROW_SORT_KEY])
row[ROW_IS_CONN_CONNECTED] = conn.state != conn.STATE_DISCONNECTED
row[ROW_COLOR] = self._build_conn_color(conn)
row[ROW_HINT] = self._build_conn_hint(conn)
@@ -1131,8 +1115,8 @@ class vmmManager(vmmGObjectUI):
#################
def vmlist_name_sorter(self, model, iter1, iter2, ignore):
- return cmp(model.get_value(iter1, ROW_NAME),
- model.get_value(iter2, ROW_NAME))
+ return cmp(model.get_value(iter1, ROW_SORT_KEY),
+ model.get_value(iter2, ROW_SORT_KEY))
def vmlist_guest_cpu_usage_sorter(self, model, iter1, iter2, ignore):
obj1 = model.get_value(iter1, ROW_HANDLE)