]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py
IntelFsp2Pkg: Support Config File and Binary delta comparison
[mirror_edk2.git] / IntelFsp2Pkg / Tools / ConfigEditor / ConfigEditor.py
index 008c7d7a160ad863037dde4955959a0b7b8c8009..680b90e09d8d31810ba491bb219fb307c39f34c1 100644 (file)
@@ -807,12 +807,12 @@ class application(tkinter.Frame):
         self.page_id = ''\r
         self.page_list = {}\r
         self.conf_list = {}\r
+        self.cfg_page_dict = {}\r
         self.cfg_data_obj = None\r
         self.org_cfg_data_bin = None\r
         self.in_left = state()\r
         self.in_right = state()\r
         self.search_text = ''\r
-        self.binseg_dict = {}\r
 \r
         # Check if current directory contains a file with a .yaml extension\r
         # if not default self.last_dir to a Platform directory where it is\r
@@ -1009,10 +1009,17 @@ class application(tkinter.Frame):
             return visible\r
         if self.cfg_data_obj.binseg_dict:\r
             str_split = item['path'].split('.')\r
-            if self.cfg_data_obj.binseg_dict[str_split[-2]] == -1:\r
-                visible = False\r
-                widget.grid_remove()\r
-                return visible\r
+            if str_split[-2] not in CGenYamlCfg.available_fv and \\r
+                    str_split[-2] not in CGenYamlCfg.missing_fv:\r
+                if self.cfg_data_obj.binseg_dict[str_split[-3]] == -1:\r
+                    visible = False\r
+                    widget.grid_remove()\r
+                    return visible\r
+            else:\r
+                if self.cfg_data_obj.binseg_dict[str_split[-2]] == -1:\r
+                    visible = False\r
+                    widget.grid_remove()\r
+                    return visible\r
         result = 1\r
         if item['condition']:\r
             result = self.evaluate_condition(item)\r
@@ -1371,8 +1378,34 @@ class application(tkinter.Frame):
         self.clear_widgets_inLayout()\r
         self.on_config_page_select_change(None)\r
 \r
+    def set_config_data_page(self):\r
+        page_id_list = []\r
+        for idx, page in enumerate(\r
+                self.cfg_data_obj._cfg_page['root']['child']):\r
+            page_id_list.append(list(page.keys())[0])\r
+            page_list = self.cfg_data_obj.get_cfg_list(page_id_list[idx])\r
+            self.cfg_page_dict[page_id_list[idx]] = 0\r
+            for item in page_list:\r
+                str_split = item['path'].split('.')\r
+                if str_split[-2] not in CGenYamlCfg.available_fv and \\r
+                        str_split[-2] not in CGenYamlCfg.missing_fv:\r
+                    if self.cfg_data_obj.binseg_dict[str_split[-3]] != -1:\r
+                        self.cfg_page_dict[page_id_list[idx]] += 1\r
+                else:\r
+                    if self.cfg_data_obj.binseg_dict[str_split[-2]] != -1:\r
+                        self.cfg_page_dict[page_id_list[idx]] += 1\r
+        removed_page = 0\r
+        for idx, id in enumerate(page_id_list):\r
+            if self.cfg_page_dict[id] == 0:\r
+                del self.cfg_data_obj._cfg_page['root']['child'][idx-removed_page]  # noqa: E501\r
+                removed_page += 1\r
+\r
     def reload_config_data_from_bin(self, bin_dat):\r
         self.cfg_data_obj.load_default_from_bin(bin_dat)\r
+        self.set_config_data_page()\r
+        self.left.delete(*self.left.get_children())\r
+        self.build_config_page_tree(self.cfg_data_obj.get_cfg_page()['root'],\r
+                                    '')\r
         self.refresh_config_data_page()\r
 \r
     def set_config_item_value(self, item, value_str):\r