From 83f232e55f41b06bb4f0af32773d73752853a30b Mon Sep 17 00:00:00 2001
From: Chris PeBenito <cpebenito@tresys.com>
Date: Thu, 9 Jun 2016 09:35:27 -0400
Subject: [PATCH] MLS/RBACRuleQueryTab: Add tab save/restore functions.

For #97 and #98.
---
 setoolsgui/apol/mlsrulequery.py  | 33 ++++++++++++++++++++++++++++++
 setoolsgui/apol/rbacrulequery.py | 35 ++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+)

diff --git a/setoolsgui/apol/mlsrulequery.py b/setoolsgui/apol/mlsrulequery.py
index c64629a..097eafc 100644
--- a/setoolsgui/apol/mlsrulequery.py
+++ b/setoolsgui/apol/mlsrulequery.py
@@ -29,6 +29,8 @@ from ..models import SEToolsListModel, invert_list_selection
 from ..mlsrulemodel import MLSRuleTableModel
 from ..widget import SEToolsWidget
 from .queryupdater import QueryResultsUpdater
+from .workspace import load_checkboxes, load_lineedits, load_listviews, load_textedits, \
+                       save_checkboxes, save_lineedits, save_listviews, save_textedits
 
 
 class MLSRuleQueryTab(SEToolsWidget, QScrollArea):
@@ -210,6 +212,37 @@ class MLSRuleQueryTab(SEToolsWidget, QScrollArea):
             self.default_range.setToolTip("Error: {0}".format(ex))
             self.default_range.setPalette(self.error_palette)
 
+    #
+    # Save/Load tab
+    #
+    def save(self):
+        """Return a dictionary of settings."""
+        settings = {}
+        save_checkboxes(self, settings, ["criteria_expander", "notes_expander",
+                                         "range_transition",
+                                         "source_indirect", "source_regex",
+                                         "target_indirect", "target_regex"])
+
+        save_lineedits(self, settings, ["source", "target", "default_range"])
+
+        save_listviews(self, settings, ["tclass"])
+
+        save_textedits(self, settings, ["notes"])
+
+        return settings
+
+    def load(self, settings):
+        load_checkboxes(self, settings, ["criteria_expander", "notes_expander",
+                                         "range_transition",
+                                         "source_indirect", "source_regex",
+                                         "target_indirect", "target_regex"])
+
+        load_lineedits(self, settings, ["source", "target", "default_range"])
+
+        load_listviews(self, settings, ["tclass"])
+
+        load_textedits(self, settings, ["notes"])
+
     #
     # Results runner
     #
diff --git a/setoolsgui/apol/rbacrulequery.py b/setoolsgui/apol/rbacrulequery.py
index acf5411..49bf580 100644
--- a/setoolsgui/apol/rbacrulequery.py
+++ b/setoolsgui/apol/rbacrulequery.py
@@ -29,6 +29,8 @@ from ..models import SEToolsListModel, invert_list_selection
 from ..rbacrulemodel import RBACRuleTableModel
 from ..widget import SEToolsWidget
 from .queryupdater import QueryResultsUpdater
+from .workspace import load_checkboxes, load_lineedits, load_listviews, load_textedits, \
+                       save_checkboxes, save_lineedits, save_listviews, save_textedits
 
 
 class RBACRuleQueryTab(SEToolsWidget, QScrollArea):
@@ -231,6 +233,39 @@ class RBACRuleQueryTab(SEToolsWidget, QScrollArea):
         self.clear_default_error()
         self.set_default_role()
 
+    #
+    # Save/Load tab
+    #
+    def save(self):
+        """Return a dictionary of settings."""
+        settings = {}
+        save_checkboxes(self, settings, ["criteria_expander", "notes_expander",
+                                         "allow", "role_transition",
+                                         "source_indirect", "source_regex",
+                                         "target_indirect", "target_regex",
+                                         "default_regex"])
+
+        save_lineedits(self, settings, ["source", "target", "default_role"])
+
+        save_listviews(self, settings, ["tclass"])
+
+        save_textedits(self, settings, ["notes"])
+
+        return settings
+
+    def load(self, settings):
+        load_checkboxes(self, settings, ["criteria_expander", "notes_expander",
+                                         "allow", "role_transition",
+                                         "source_indirect", "source_regex",
+                                         "target_indirect", "target_regex",
+                                         "default_regex"])
+
+        load_lineedits(self, settings, ["source", "target", "default_role"])
+
+        load_listviews(self, settings, ["tclass"])
+
+        load_textedits(self, settings, ["notes"])
+
     #
     # Results runner
     #