summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Robinson <crobinso@redhat.com>2014-01-28 13:51:59 -0500
committerCole Robinson <crobinso@redhat.com>2014-01-28 14:20:57 -0500
commit8bb9853ec8b26acd7fd7cf69b8a17240c2b13a16 (patch)
tree96faef5e4c1e5f3a4eb91c48f32f9c1938d9e6e3
parent745ec7cb9612f94e0ed8d5f728d07b197b2a5f05 (diff)
downloadvirt-manager-8bb9853ec8b26acd7fd7cf69b8a17240c2b13a16.tar.gz
Move shared cdrom media UI to mediacombo.py
-rw-r--r--ui/choosecd.ui33
-rw-r--r--ui/create.ui32
-rw-r--r--virtManager/baseclass.py4
-rw-r--r--virtManager/choosecd.py71
-rw-r--r--virtManager/create.py56
-rw-r--r--virtManager/mediacombo.py223
-rw-r--r--virtManager/sharedui.py142
7 files changed, 287 insertions, 274 deletions
diff --git a/ui/choosecd.ui b/ui/choosecd.ui
index fef35005..6b0725bc 100644
--- a/ui/choosecd.ui
+++ b/ui/choosecd.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.15.4 on Fri Sep 27 13:37:45 2013 -->
+<!-- Generated with glade 3.16.1 -->
<interface>
- <!-- interface-requires gtk+ 3.0 -->
+ <requires lib="gtk+" version="3.0"/>
<object class="GtkDialog" id="vmm-choose-cd">
<property name="can_focus">True</property>
<property name="has_focus">True</property>
@@ -216,33 +216,13 @@
</packing>
</child>
<child>
- <object class="GtkHBox" id="hbox2">
+ <object class="GtkAlignment" id="media-combo-align">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkComboBox" id="cd-path">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <signal name="changed" handler="on_cd_path_changed" swapped="no"/>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
<child>
- <object class="GtkImage" id="cd-path-warn">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-warning</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
+ <placeholder/>
</child>
</object>
<packing>
@@ -250,6 +230,7 @@
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
diff --git a/ui/create.ui b/ui/create.ui
index ca614c3b..31761424 100644
--- a/ui/create.ui
+++ b/ui/create.ui
@@ -687,40 +687,12 @@ bar</property>
</packing>
</child>
<child>
- <object class="GtkAlignment" id="alignment12">
+ <object class="GtkAlignment" id="install-local-cdrom-align">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">20</property>
<child>
- <object class="GtkHBox" id="hbox10">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkComboBox" id="install-local-cdrom-combo">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <signal name="changed" handler="on_install_local_cdrom_combo_changed" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkImage" id="install-local-cdrom-warn">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-warning</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
+ <placeholder/>
</child>
</object>
<packing>
diff --git a/virtManager/baseclass.py b/virtManager/baseclass.py
index 22f07e16..2d752d06 100644
--- a/virtManager/baseclass.py
+++ b/virtManager/baseclass.py
@@ -93,6 +93,10 @@ class vmmGObject(GObject.GObject):
ret = GObject.GObject.disconnect(self, handle)
self._gobject_handles.remove(handle)
return ret
+ def disconnect_by_func(self, *args, **kwargs):
+ handle = GObject.GObject.disconnect_by_func(*args, **kwargs)
+ self._gobject_handles.remove(handle)
+ return handle
def add_gconf_handle(self, handle):
self._gconf_handles.append(handle)
diff --git a/virtManager/choosecd.py b/virtManager/choosecd.py
index dee79c05..6129671d 100644
--- a/virtManager/choosecd.py
+++ b/virtManager/choosecd.py
@@ -24,10 +24,10 @@ import logging
from gi.repository import GObject
# pylint: enable=E0611
-from virtManager import uiutil
from virtManager import sharedui
from virtManager.baseclass import vmmGObjectUI
from virtManager.mediadev import MEDIA_FLOPPY
+from virtManager.mediacombo import vmmMediaCombo
from virtManager.storagebrowse import vmmStorageBrowser
@@ -47,18 +47,20 @@ class vmmChooseCD(vmmGObjectUI):
self.disk = disk
self.media_type = disk.device
+ self.mediacombo = vmmMediaCombo(self.conn, self.builder, self.topwin,
+ self.media_type)
+ self.widget("media-combo-align").add(self.mediacombo.top_box)
+
self.builder.connect_signals({
+ "on_vmm_choose_cd_delete_event": self.close,
+
"on_media_toggled": self.media_toggled,
"on_fv_iso_location_browse_clicked": self.browse_fv_iso_location,
- "on_cd_path_changed": self.change_cd_path,
+
"on_ok_clicked": self.ok,
- "on_vmm_choose_cd_delete_event": self.close,
"on_cancel_clicked": self.close,
})
- self.widget("iso-image").set_active(True)
-
- self.initialize_opt_media()
self.reset_state()
def close(self, ignore1=None, ignore2=None):
@@ -84,23 +86,27 @@ class vmmChooseCD(vmmGObjectUI):
if self.storage_browser:
self.storage_browser.cleanup()
self.storage_browser = None
+ if self.mediacombo:
+ self.mediacombo.cleanup()
+ self.mediacombo = None
+
+ def _init_ui(self):
+ if self.media_type == MEDIA_FLOPPY:
+ self.widget("physical-media").set_label(_("Floppy D_rive"))
+ self.widget("iso-image").set_label(_("Floppy _Image"))
def reset_state(self):
- cd_path = self.widget("cd-path")
- use_cdrom = (cd_path.get_active() > -1)
+ self.mediacombo.reset_state()
+ use_cdrom = (self.mediacombo.has_media())
- if use_cdrom:
- self.widget("physical-media").set_active(True)
- else:
- self.widget("iso-image").set_active(True)
+ self.widget("physical-media").set_active(use_cdrom)
+ self.widget("iso-image").set_active(not use_cdrom)
def ok(self, ignore1=None, ignore2=None):
if self.widget("iso-image").get_active():
path = self.widget("iso-path").get_text()
else:
- path = uiutil.get_list_selection(self.widget("cd-path"),
- sharedui.OPTICAL_DEV_PATH)
-
+ path = self.mediacombo.get_path()
if path == "" or path is None:
return self.err.val_err(_("Invalid Media Path"),
_("A media path must be specified."))
@@ -125,41 +131,14 @@ class vmmChooseCD(vmmGObjectUI):
self.close()
def media_toggled(self, ignore1=None, ignore2=None):
- if self.widget("physical-media").get_active():
- self.widget("cd-path").set_sensitive(True)
- self.widget("iso-path").set_sensitive(False)
- self.widget("iso-file-chooser").set_sensitive(False)
- else:
- self.widget("cd-path").set_sensitive(False)
- self.widget("iso-path").set_sensitive(True)
- self.widget("iso-file-chooser").set_sensitive(True)
-
- def change_cd_path(self, ignore1=None, ignore2=None):
- pass
+ is_phys = bool(self.widget("physical-media").get_active())
+ self.mediacombo.combo.set_sensitive(is_phys)
+ self.widget("iso-path").set_sensitive(not is_phys)
+ self.widget("iso-file-chooser").set_sensitive(not is_phys)
def browse_fv_iso_location(self, ignore1=None, ignore2=None):
self._browse_file()
- def initialize_opt_media(self):
- widget = self.widget("cd-path")
- warn = self.widget("cd-path-warn")
-
- error = self.conn.mediadev_error
- sharedui.build_mediadev_combo(widget)
- sharedui.populate_mediadev_combo(self.conn, widget, self.media_type)
-
- if error:
- warn.show()
- warn.set_tooltip_text(error)
- else:
- warn.hide()
-
- self.widget("physical-media").set_sensitive(not bool(error))
-
- if self.media_type == MEDIA_FLOPPY:
- self.widget("physical-media").set_label(_("Floppy D_rive"))
- self.widget("iso-image").set_label(_("Floppy _Image"))
-
def set_storage_path(self, src_ignore, path):
self.widget("iso-path").set_text(path)
diff --git a/virtManager/create.py b/virtManager/create.py
index 346ffc82..0ad4adfa 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -40,6 +40,7 @@ from virtManager.storagebrowse import vmmStorageBrowser
from virtManager.details import vmmDetails
from virtManager.domain import vmmDomainVirtinst
from virtManager.netlist import vmmNetworkList
+from virtManager.mediacombo import vmmMediaCombo
# Number of seconds to wait for media detection
DETECT_TIMEOUT = 20
@@ -109,6 +110,7 @@ class vmmCreate(vmmGObjectUI):
self.config_window_signals = []
self.netlist = None
+ self.mediacombo = None
self.builder.connect_signals({
"on_vmm_newcreate_delete_event" : self.close,
@@ -199,6 +201,13 @@ class vmmCreate(vmmGObjectUI):
self.netlist.cleanup()
self.netlist = None
+ if self.netlist:
+ self.netlist.cleanup()
+ self.netlist = None
+ if self.mediacombo:
+ self.mediacombo.cleanup()
+ self.mediacombo = None
+
def remove_conn(self):
if not self.conn:
return
@@ -288,11 +297,6 @@ class vmmCreate(vmmGObjectUI):
uiutil.set_combo_text_column(os_variant_list, 1)
os_variant_list.set_row_separator_func(sep_func, os_variant_list)
-
- # Physical CD-ROM model
- cd_list = self.widget("install-local-cdrom-combo")
- sharedui.build_mediadev_combo(cd_list)
-
# Archtecture
# [value, label]
archList = self.widget("config-arch")
@@ -550,26 +554,22 @@ class vmmCreate(vmmGObjectUI):
# Install local
iso_option = self.widget("install-local-iso")
cdrom_option = self.widget("install-local-cdrom")
- cdrom_list = self.widget("install-local-cdrom-combo")
- cdrom_warn = self.widget("install-local-cdrom-warn")
- sigs = sharedui.populate_mediadev_combo(self.conn, cdrom_list,
- MEDIA_CDROM)
- self.conn_signals.extend(sigs)
+ if self.mediacombo:
+ self.widget("install-local-cdrom-align").remove(
+ self.mediacombo.top_box)
+ self.mediacombo.cleanup()
+ self.mediacombo = None
- if self.conn.mediadev_error:
- cdrom_warn.show()
- cdrom_option.set_sensitive(False)
- cdrom_warn.set_tooltip_text(self.conn.mediadev_error)
- else:
- cdrom_warn.hide()
+ self.mediacombo = vmmMediaCombo(self.conn, self.builder, self.topwin,
+ MEDIA_CDROM)
+ self.mediacombo.reset_state()
+ self.widget("install-local-cdrom-align").add(
+ self.mediacombo.top_box)
# Don't select physical CDROM if no valid media is present
- use_cd = (cdrom_list.get_active() >= 0)
- if use_cd:
- cdrom_option.set_active(True)
- else:
- iso_option.set_active(True)
+ cdrom_option.set_active(self.mediacombo.has_media())
+ iso_option.set_active(not self.mediacombo.has_media())
# Only allow ISO option for remote VM
is_local = not self.conn.is_remote()
@@ -1012,9 +1012,7 @@ class vmmCreate(vmmGObjectUI):
def get_config_local_media(self, store_media=False):
if self.widget("install-local-cdrom").get_active():
- return uiutil.get_list_selection(
- self.widget("install-local-cdrom-combo"),
- sharedui.OPTICAL_DEV_PATH)
+ return self.mediacombo.get_path()
else:
ret = self.widget("install-local-box").get_child().get_text()
if ret and store_media:
@@ -1229,14 +1227,12 @@ class vmmCreate(vmmGObjectUI):
break
def toggle_local_cdrom(self, src):
- combo = self.widget("install-local-cdrom-combo")
is_active = src.get_active()
- if is_active:
- if combo.get_active() != -1:
- # Local CDROM was selected with media preset, detect distro
- self.detect_media_os()
+ if is_active and self.mediacombo.get_path():
+ # Local CDROM was selected with media preset, detect distro
+ self.detect_media_os()
- self.widget("install-local-cdrom-combo").set_sensitive(is_active)
+ self.widget("install-local-cdrom-align").set_sensitive(is_active)
def toggle_local_iso(self, src):
uselocal = src.get_active()
diff --git a/virtManager/mediacombo.py b/virtManager/mediacombo.py
new file mode 100644
index 00000000..f74505d0
--- /dev/null
+++ b/virtManager/mediacombo.py
@@ -0,0 +1,223 @@
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA.
+#
+
+# pylint: disable=E0611
+from gi.repository import Gtk
+# pylint: enable=E0611
+
+from virtManager import uiutil
+from virtManager.baseclass import vmmGObjectUI
+
+
+class vmmMediaCombo(vmmGObjectUI):
+ OPTICAL_FIELDS = 4
+ (OPTICAL_DEV_PATH,
+ OPTICAL_LABEL,
+ OPTICAL_HAS_MEDIA,
+ OPTICAL_DEV_KEY) = range(OPTICAL_FIELDS)
+
+ def __init__(self, conn, builder, topwin, media_type):
+ vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)
+ self.conn = conn
+ self.media_type = media_type
+
+ self.top_box = None
+ self.combo = None
+ self._warn_icon = None
+ self._populated = False
+ self._init_ui()
+
+ def _cleanup(self):
+ try:
+ self.conn.disconnect_by_func(self._mediadev_added)
+ self.conn.disconnect_by_func(self._mediadev_removed)
+ except:
+ pass
+
+ self.conn = None
+ self.top_box.destroy()
+ self.top_box = None
+
+ ##########################
+ # Initialization methods #
+ ##########################
+
+ def _init_ui(self):
+ self.top_box = Gtk.Box()
+ self.top_box.set_spacing(6)
+ self.top_box.set_orientation(Gtk.Orientation.HORIZONTAL)
+ self._warn_icon = Gtk.Image()
+ self._warn_icon.set_from_stock(
+ Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.MENU)
+ self.combo = Gtk.ComboBox()
+ self.top_box.add(self.combo)
+ self.top_box.add(self._warn_icon)
+ self.top_box.show_all()
+
+ # [Device path, pretty label, has_media?, device key, media key,
+ # vmmMediaDevice, is valid device]
+ fields = []
+ fields.insert(self.OPTICAL_DEV_PATH, str)
+ fields.insert(self.OPTICAL_LABEL, str)
+ fields.insert(self.OPTICAL_HAS_MEDIA, bool)
+ fields.insert(self.OPTICAL_DEV_KEY, str)
+ self.combo.set_model(Gtk.ListStore(*fields))
+
+ text = Gtk.CellRendererText()
+ self.combo.pack_start(text, True)
+ self.combo.add_attribute(text, 'text', self.OPTICAL_LABEL)
+
+ error = self.conn.mediadev_error
+ self._warn_icon.set_visible(bool(error))
+ self._warn_icon.set_tooltip_text(error)
+
+
+ def _set_mediadev_default(self):
+ model = self.combo.get_model()
+ if len(model) != 0:
+ return
+
+ row = [None] * self.OPTICAL_FIELDS
+ row[self.OPTICAL_DEV_PATH] = None
+ row[self.OPTICAL_LABEL] = _("No device present")
+ row[self.OPTICAL_HAS_MEDIA] = False
+ row[self.OPTICAL_DEV_KEY] = None
+ model.append(row)
+
+ def _set_mediadev_row_from_object(self, row, obj):
+ row[self.OPTICAL_DEV_PATH] = obj.get_path()
+ row[self.OPTICAL_LABEL] = obj.pretty_label()
+ row[self.OPTICAL_HAS_MEDIA] = obj.has_media()
+ row[self.OPTICAL_DEV_KEY] = obj.get_key()
+
+ def _mediadev_set_default_selection(self):
+ # Set the first active cdrom device as selected, otherwise none
+ widget = self.combo
+ model = widget.get_model()
+ idx = 0
+ active = widget.get_active()
+
+ if active != -1:
+ # already a selection, don't change it
+ return
+
+ for row in model:
+ if row[self.OPTICAL_HAS_MEDIA] is True:
+ widget.set_active(idx)
+ return
+ idx += 1
+
+ widget.set_active(0)
+
+ def _mediadev_media_changed(self, newobj):
+ widget = self.combo
+ model = widget.get_model()
+ active = widget.get_active()
+ idx = 0
+
+ # Search for the row with matching device node and
+ # fill in info about inserted media. If model has no current
+ # selection, select the new media.
+ for row in model:
+ if row[self.OPTICAL_DEV_PATH] == newobj.get_path():
+ self._set_mediadev_row_from_object(row, newobj)
+ has_media = row[self.OPTICAL_HAS_MEDIA]
+
+ if has_media and active == -1:
+ widget.set_active(idx)
+ elif not has_media and active == idx:
+ widget.set_active(-1)
+
+ idx = idx + 1
+
+ self._mediadev_set_default_selection()
+
+ def _mediadev_added(self, ignore, newobj):
+ widget = self.combo
+ model = widget.get_model()
+
+ if newobj.get_media_type() != self.media_type:
+ return
+ if model is None:
+ return
+
+ if len(model) == 1 and model[0][self.OPTICAL_DEV_PATH] is None:
+ # Only entry is the 'No device' entry
+ model.clear()
+
+ newobj.connect("media-added", self._mediadev_media_changed)
+ newobj.connect("media-removed", self._mediadev_media_changed)
+
+ # Brand new device
+ row = [None] * self.OPTICAL_FIELDS
+ self._set_mediadev_row_from_object(row, newobj)
+ model.append(row)
+
+ self._mediadev_set_default_selection()
+
+ def _mediadev_removed(self, ignore, key):
+ widget = self.combo
+ model = widget.get_model()
+ active = widget.get_active()
+ idx = 0
+
+ for row in model:
+ if row[self.OPTICAL_DEV_KEY] == key:
+ # Whole device removed
+ del(model[idx])
+
+ if idx > active and active != -1:
+ widget.set_active(active - 1)
+ elif idx == active:
+ widget.set_active(-1)
+
+ idx += 1
+
+ self._set_mediadev_default()
+ self._mediadev_set_default_selection()
+
+ def _populate_media(self):
+ if self._populated:
+ return
+
+ widget = self.combo
+ model = widget.get_model()
+ model.clear()
+ self._set_mediadev_default()
+
+ self.conn.connect("mediadev-added", self._mediadev_added)
+ self.conn.connect("mediadev-removed", self._mediadev_removed)
+
+ widget.set_active(-1)
+ self._mediadev_set_default_selection()
+ self._populated = True
+
+
+ ##############
+ # Public API #
+ ##############
+
+ def reset_state(self):
+ self._populate_media()
+
+ def get_path(self):
+ return uiutil.get_list_selection(self.combo, self.OPTICAL_DEV_PATH)
+
+ def has_media(self):
+ return uiutil.get_list_selection(self.combo, self.OPTICAL_HAS_MEDIA)
diff --git a/virtManager/sharedui.py b/virtManager/sharedui.py
index 3c539061..286e8296 100644
--- a/virtManager/sharedui.py
+++ b/virtManager/sharedui.py
@@ -223,148 +223,6 @@ def check_path_search_for_qemu(err, conn, path):
config.running_config.add_perms_fix_ignore(errors.keys())
-############################################
-# Populate media widget (choosecd, create) #
-############################################
-
-OPTICAL_DEV_PATH = 0
-OPTICAL_LABEL = 1
-OPTICAL_IS_MEDIA_PRESENT = 2
-OPTICAL_DEV_KEY = 3
-OPTICAL_MEDIA_KEY = 4
-OPTICAL_IS_VALID = 5
-
-
-def _set_mediadev_default(model):
- if len(model) == 0:
- model.append([None, _("No device present"), False, None, None, False])
-
-
-def _set_mediadev_row_from_object(row, obj):
- row[OPTICAL_DEV_PATH] = obj.get_path()
- row[OPTICAL_LABEL] = obj.pretty_label()
- row[OPTICAL_IS_MEDIA_PRESENT] = obj.has_media()
- row[OPTICAL_DEV_KEY] = obj.get_key()
- row[OPTICAL_MEDIA_KEY] = obj.get_media_key()
- row[OPTICAL_IS_VALID] = True
-
-
-def _mediadev_set_default_selection(widget):
- # Set the first active cdrom device as selected, otherwise none
- model = widget.get_model()
- idx = 0
- active = widget.get_active()
-
- if active != -1:
- # already a selection, don't change it
- return
-
- for row in model:
- if row[OPTICAL_IS_MEDIA_PRESENT] is True:
- widget.set_active(idx)
- return
- idx += 1
-
- widget.set_active(-1)
-
-
-def _mediadev_media_changed(newobj, widget):
- model = widget.get_model()
- active = widget.get_active()
- idx = 0
-
- # Search for the row with matching device node and
- # fill in info about inserted media. If model has no current
- # selection, select the new media.
- for row in model:
- if row[OPTICAL_DEV_PATH] == newobj.get_path():
- _set_mediadev_row_from_object(row, newobj)
- has_media = row[OPTICAL_IS_MEDIA_PRESENT]
-
- if has_media and active == -1:
- widget.set_active(idx)
- elif not has_media and active == idx:
- widget.set_active(-1)
-
- idx = idx + 1
-
- _mediadev_set_default_selection(widget)
-
-
-def _mediadev_added(ignore_helper, newobj, widget, devtype):
- model = widget.get_model()
-
- if newobj.get_media_type() != devtype:
- return
- if model is None:
- return
-
- if len(model) == 1 and model[0][OPTICAL_IS_VALID] is False:
- # Only entry is the 'No device' entry
- model.clear()
-
- newobj.connect("media-added", _mediadev_media_changed, widget)
- newobj.connect("media-removed", _mediadev_media_changed, widget)
-
- # Brand new device
- row = [None, None, None, None, None, None]
- _set_mediadev_row_from_object(row, newobj)
- model.append(row)
-
- _mediadev_set_default_selection(widget)
-
-
-def _mediadev_removed(ignore_helper, key, widget):
- model = widget.get_model()
- active = widget.get_active()
- idx = 0
-
- for row in model:
- if row[OPTICAL_DEV_KEY] == key:
- # Whole device removed
- del(model[idx])
-
- if idx > active and active != -1:
- widget.set_active(active - 1)
- elif idx == active:
- widget.set_active(-1)
-
- idx += 1
-
- _set_mediadev_default(model)
- _mediadev_set_default_selection(widget)
-
-
-def build_mediadev_combo(widget):
- # [Device path, pretty label, has_media?, device key, media key,
- # vmmMediaDevice, is valid device]
- model = Gtk.ListStore(str, str, bool, str, str, bool)
- widget.set_model(model)
- model.clear()
-
- text = Gtk.CellRendererText()
- widget.pack_start(text, True)
- widget.add_attribute(text, 'text', OPTICAL_LABEL)
- widget.add_attribute(text, 'sensitive', OPTICAL_IS_VALID)
-
-
-def populate_mediadev_combo(conn, widget, devtype):
- sigs = []
-
- model = widget.get_model()
- model.clear()
- _set_mediadev_default(model)
-
- sigs.append(conn.connect("mediadev-added",
- _mediadev_added, widget, devtype))
- sigs.append(conn.connect("mediadev-removed", _mediadev_removed, widget))
-
- widget.set_active(-1)
- _mediadev_set_default_selection(widget)
-
- return sigs
-
-
####################################################################
# Build toolbar shutdown button menu (manager and details toolbar) #
####################################################################