diff options
-rw-r--r-- | frontend/frontend_gtk.py | 39 | ||||
-rw-r--r-- | plugins/openscap_plugin.py | 11 | ||||
-rw-r--r-- | pyfirstaidkit/reporting.py | 7 |
3 files changed, 42 insertions, 15 deletions
diff --git a/frontend/frontend_gtk.py b/frontend/frontend_gtk.py index 7bdfc31..408f41d 100644 --- a/frontend/frontend_gtk.py +++ b/frontend/frontend_gtk.py @@ -317,31 +317,52 @@ class CallbacksFlagList(object): return True class ListDialog(object): - def __init__(self, title, description, items, dir=""): + def __init__(self, title, description, items, dir="", mode = 0): gtkb = gtk.Builder() gtkb.add_from_file(os.path.join(dir, "gtk-list.xml")) self._dialog = gtkb.get_object("listdialog") self._dialog.set_title(title) - self._store = gtk.ListStore(gobject.TYPE_STRING, + + if mode == 0: + self._store = gtk.ListStore(gobject.TYPE_STRING, + gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_PYOBJECT, + gobject.TYPE_STRING) + elif mode == 1: + self._store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_STRING) + self._label = gtkb.get_object("label") self._label.set_text(description) self._view = gtkb.get_object("view") self._view.set_model(self._store) rend_text = gtk.CellRendererText() - rend_text_edit = gtk.CellRendererText() - rend_text_edit.set_property("editable", True) - rend_text_edit.connect('edited', self.edited_cb, self._store) + + if mode == 0: + rend_text_edit = gtk.CellRendererText() + rend_text_edit.set_property("editable", True) + rend_text_edit.connect('edited', self.edited_cb, self._store) + elif mode == 1: + rend_text_check = gtk.CellRendererToggle() + rend_text_check.connect('toggled', self.toggled_cb, self._store) + rend_text_check.set_property('activatable', True) col_0 = gtk.TreeViewColumn('Key', rend_text, text = 1) col_0.set_resizable(True) col_0.set_expand(False) - col_1 = gtk.TreeViewColumn('Value', rend_text_edit, text = 2) + + if mode == 0: + col_1 = gtk.TreeViewColumn('Value', rend_text_edit, text = 2) + elif mode == 1: + col_1 = gtk.TreeViewColumn('Value', rend_text_check) + col_1.add_attribute(rend_text_check, "active", 2) col_1.set_resizable(True) col_1.set_expand(True) self._view.append_column(col_0) @@ -369,6 +390,9 @@ class ListDialog(object): err.run() err.destroy() + def toggled_cb(self, cell, path, store): + store[path][2] = not store[path][2] + def destroy(self): self._dialog.destroy() @@ -797,7 +821,8 @@ class MainWindow(object): dlg = ListDialog(title = question.title, description = question.description, items = question.items, - dir = os.path.dirname(self._glade.relative_file(".")) + dir = os.path.dirname(self._glade.relative_file(".")), + mode = question.mode ) res = dlg.run() diff --git a/plugins/openscap_plugin.py b/plugins/openscap_plugin.py index dc28792..82efa30 100644 --- a/plugins/openscap_plugin.py +++ b/plugins/openscap_plugin.py @@ -64,19 +64,20 @@ class OpenSCAPPlugin(Plugin): all_rules = self._policy.get_rules() preprocess_rules = lambda x: (x.item, self._policy.model.benchmark.get_item(x.item).title[0].text, - x.selected and 1 or 0, + x.selected and True, self._policy.model.benchmark.get_item(x.item).description[0].text, - "0|1", - "Use 0 or 1 to disable or enable rule" + "", + "Use checkbox disable or enable rule" ) all_rules = map(preprocess_rules, all_rules) s = self._reporting.config_question_wait("Setup OpenScap rules", "Enable or disable rules and press OK", - all_rules, origin = self, + all_rules, mode = 1, + origin = self, level = PLUGIN) enabled_rules = [] for r in s: - if r[1] == "1": + if r[1]: enabled_rules.append(r[0]) self._reporting.info("Enabled rules: %s" % repr(enabled_rules), origin = self, level = PLUGIN) diff --git a/pyfirstaidkit/reporting.py b/pyfirstaidkit/reporting.py index ea133a1..67f2269 100644 --- a/pyfirstaidkit/reporting.py +++ b/pyfirstaidkit/reporting.py @@ -82,11 +82,12 @@ class ConfigQuestion(Question): Each item is a tuple (id, title, value, tooltip, regexp_validator, validator_error_msg)""" - def __init__(self, title, description, items): + def __init__(self, title, description, items, mode = 0): super(ConfigQuestion, self).__init__(title) assert len(items) > 0 self.title = title self.description = description + self.mode = mode self.items = map(lambda x: (x[0], x[1], x[2], x[3], re.compile("^("+x[4]+")$"), x[5]), items) @@ -345,8 +346,8 @@ class Reports(object): return self.__blocking_question(self.filename_question, args, kwargs) def config_question(self, reply_mb, title, description, items, origin, level = PLUGIN, - importance = logging.ERROR): - q = ConfigQuestion(title, description, items) + importance = logging.ERROR, mode = 0): + q = ConfigQuestion(title, description, items, mode = mode) self.put(q, origin, level, CONFIG_QUESTION, importance = importance, reply = reply_mb) return q |