Blob Blame History Raw
From 47bda76d8a951b095c464931f5e9f81ee04fa2a9 Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Mon, 24 Aug 2015 13:18:32 +0200
Subject: [PATCH 3/3] Only allow DS and XCCDF ID selection if it makes sense
 (#1254876)

If there's only one DS and a single XCCDF in it, there's no point in showing the
combo boxes that allow user to select the DS and XCCDF.

Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
---
 org_fedora_oscap/gui/spokes/oscap.py | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/org_fedora_oscap/gui/spokes/oscap.py b/org_fedora_oscap/gui/spokes/oscap.py
index af60841..3b8dbd7 100644
--- a/org_fedora_oscap/gui/spokes/oscap.py
+++ b/org_fedora_oscap/gui/spokes/oscap.py
@@ -418,11 +418,8 @@ class OSCAPSpoke(NormalSpoke):
             for dstream in self._ds_checklists.iterkeys():
                 add_ds_ids.add_action(self._add_ds_id, dstream)
             add_ds_ids.fire()
-            fire_gtk_action(really_show, self._ids_box)
-        else:
-            # hide the labels and comboboxes for datastream-id and xccdf-id
-            # selection
-            fire_gtk_action(really_hide, self._ids_box)
+
+        self._update_ids_visibility()
 
         # refresh UI elements
         self.refresh()
@@ -487,6 +484,25 @@ class OSCAPSpoke(NormalSpoke):
         self._ds_store.append([ds_id])
 
     @gtk_action_wait
+    def _update_ids_visibility(self):
+        """
+        Updates visibility of the combo boxes that are used to select the DS and
+        XCCDF IDs.
+
+        """
+
+        if self._using_ds:
+            # only show the combo boxes if there are multiple data streams or
+            # multiple xccdfs (IOW if there's something to choose from)
+            ds_ids = self._ds_checklists.keys()
+            if len(ds_ids) > 1 or len(self._ds_checklists[ds_ids[0]]) > 1:
+                really_show(self._ids_box)
+                return
+
+        # not showing, hide instead
+        really_hide(self._ids_box)
+
+    @gtk_action_wait
     def _update_xccdfs_store(self):
         """
         Clears and repopulates the store with XCCDF IDs from the currently
@@ -818,8 +834,9 @@ class OSCAPSpoke(NormalSpoke):
 
         self._active_profile = self._addon_data.profile_id
 
+        self._update_ids_visibility()
+
         if self._using_ds:
-            fire_gtk_action(really_show, self._ids_box)
             if self._addon_data.datastream_id:
                 set_combo_selection(self._ds_combo,
                                     self._addon_data.datastream_id,
@@ -837,7 +854,6 @@ class OSCAPSpoke(NormalSpoke):
                                         self._addon_data.xccdf_id,
                                         unset_first=True)
         else:
-            fire_gtk_action(really_hide, self._ids_box)
             # no combobox changes --> need to update profiles store manually
             self._update_profiles_store()
 
-- 
2.1.0