          label_frame.pack(padx=5, pady=5, fill=tk.X, expand=True)
          for idx, line in enumerate(self.header_text.splitlines()):
              if not line:
                  continue
              style = "Header.TLabel" if idx == 0 else "Body.TLabel"
              info = ttk.Label(label_frame, text=line, style=style, anchor=tk.W)
              info.bind("<Configure>", self._adjust_wraplength)
              info.pack(fill=tk.X, padx=0, pady=0, expand=True, side=tk.TOP)
  
      def build_panel(self, blank_nones, scrollbar):
 
</s> remove         self._config_cpanel_dict = self._get_config()
        self._build()
        self.update()
 </s> add         self._tree = _Tree(content_frame, configurations, name).tree
        self._tree.bind("<ButtonRelease-1>", self._select_item)

        self._opts_frame = DisplayArea(content_frame, configurations, self._tree)
        self._opts_frame.pack(fill=tk.BOTH, expand=True, side=tk.RIGHT)
        footer_frame = self._build_footer()

        header_frame.pack(fill=tk.X, padx=5, pady=5, side=tk.TOP)
        content_frame.pack(fill=tk.BOTH, padx=5, pady=(0, 5), expand=True, side=tk.TOP)
        footer_frame.pack(fill=tk.X, padx=5, pady=(0, 5), side=tk.BOTTOM) </s> remove         conf = dict()
        for section in self._config.config.sections():
            self._config.section = section
            category = section.split(".")[0]
            options = self._config.defaults[section]
            section = section.split(".")[-1]
            conf.setdefault(category, dict())[section] = OrderedDict()
            for key, val in options.items():
                if key == "helptext":
                    self._plugin_info[section] = val
                    continue
                initial_value = self._config.config_dict[key]
                initial_value = "none" if initial_value is None else initial_value
                conf[category][section][key] = ControlPanelOption(
                    title=key,
                    dtype=val["type"],
                    group=val["group"],
                    default=val["default"],
                    initial_value=initial_value,
                    choices=val["choices"],
                    is_radio=val["gui_radio"],
                    rounding=val["rounding"],
                    min_max=val["min_max"],
                    helptext=val["helptext"])
        logger.debug("Formatted Config for GUI: %s", conf)
        return conf

    def _build(self):
        """ Build the configuration pop-up window"""
        logger.debug("Building plugin config popup")
        container = ttk.Notebook(self._page_frame)
        categories = sorted(list(self._config_cpanel_dict.keys()))
        if "global" in categories:  # Move global to first item
            categories.insert(0, categories.pop(categories.index("global")))
        for category in categories:
            page = self._build_page(container, category)
            container.add(page, text=category.title())

        self._add_frame_separator()
        self._add_actions()

        container.pack(fill=tk.BOTH, expand=True)
        logger.debug("Built plugin config popup")

    def _build_page(self, container, category):
        """ Build a single tab within the plugin's configuration pop-up.
 </s> add         retval = dict()
        for plugin, conf in self._configs.items():
            for section in conf.config.sections():
                conf.section = section
                category = section.split(".")[0]
                sect = section.split(".")[-1]
                # Elevate global to root
                key = plugin if sect == "global" else "{}|{}|{}".format(plugin, category, sect)
                retval[key] = dict(helptext=None, options=OrderedDict())

                for option, params in conf.defaults[section].items():
                    if option == "helptext":
                        retval[key]["helptext"] = params
                        continue
                    initial_value = conf.config_dict[option]
                    initial_value = "none" if initial_value is None else initial_value
                    retval[key]["options"][option] = ControlPanelOption(
                        title=option,
                        dtype=params["type"],
                        group=params["group"],
                        default=params["default"],
                        initial_value=initial_value,
                        choices=params["choices"],
                        is_radio=params["gui_radio"],
                        rounding=params["rounding"],
                        min_max=params["min_max"],
                        helptext=params["helptext"])
        logger.debug("Formatted Config for GUI: %s", retval)
        return retval

    def _build_header(self):
        """ Build the dynamic header text. """
        header_frame = ttk.Frame(self)
        var = tk.StringVar()
        lbl = ttk.Label(header_frame, textvariable=var, anchor=tk.W, style="H2.TLabel")
        lbl.pack(fill=tk.X, expand=True, side=tk.TOP)
        header_frame.pack(fill=tk.X, padx=5, pady=(5, 0), side=tk.TOP)
        self._vars["header"] = var

    def select_options(self, section, subsections):
        """ Display the page for the given section and subsections. </s> remove         logger.debug("Building plugin config page: '%s'", category)
        plugins = sorted(list(key for key in self._config_cpanel_dict[category].keys()))
        panel_kwargs = dict(columns=2, max_columns=2, option_columns=2, blank_nones=False)
        if any(plugin != category for plugin in plugins):
            page = ttk.Notebook(container)
            for plugin in plugins:
                cp_options = list(self._config_cpanel_dict[category][plugin].values())
                frame = ControlPanel(page,
                                     cp_options,
                                     header_text=self._plugin_info[plugin],
                                     **panel_kwargs)
                title = plugin[plugin.rfind(".") + 1:]
                title = title.replace("_", " ").title()
                page.add(frame, text=title)
            page.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
 </s> add         key = "|".join([section] + subsections)
        if self._displayed_frame is not None:
            self._displayed_frame.pack_forget()

        if key not in self._cache:
            self._cache_page(key)

        self._displayed_frame = self._cache[key]
        self._displayed_frame.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

    def _cache_page(self, key):
        """ Create the control panel options for the requested configuration and cache.

        Parameters
        ----------
        key: str
            The lookup key to the settings cache
        """
        panel_kwargs = dict(columns=1, max_columns=1, option_columns=4, blank_nones=False)
        info = self._config_cpanel_dict.get(key, None)
        if info is None:
            logger.debug("key '%s' does not exist in options. Creating links page.", key)
            self._cache[key] = self._create_links_page(key) </s> remove         frame.pack(fill=tk.BOTH, padx=5, pady=5, side=tk.BOTTOM)
        btn_cls.pack(padx=2, side=tk.RIGHT)
        btn_ok.pack(padx=2, side=tk.RIGHT)
        btn_rst.pack(padx=2, side=tk.RIGHT)
 </s> add         Parameters
        ----------
        key: str
            The lookup key to set the links page for
        """
        frame = ttk.Frame(self)
        links = {item.replace(key, "")[1:].split("|")[0]
                 for item in self._config_cpanel_dict
                 if item.startswith(key)}

        if not links:
            return frame

        header_lbl = ttk.Label(frame, text="Select a plugin to configure:")
        header_lbl.pack(side=tk.TOP, fill=tk.X, padx=5, pady=(5, 10))
        for link in sorted(links):
            lbl = ttk.Label(frame,
                            text=link.replace("_", " ").title(),
                            anchor=tk.W,
                            foreground="blue",
                            cursor="hand2")
            lbl.pack(side=tk.TOP, fill=tk.X, padx=10, pady=(0, 5))
            bind = "{}|{}".format(key, link)
            lbl.bind("<Button-1>", lambda e, l=bind: self._link_callback(l))

        return frame

    def _link_callback(self, identifier):
        """ Set the tree view to the selected item and display the requested page on a link click. </s> remove         for section, items in self._config.defaults.items():
 </s> add         if "|" in selection:
            lookup = ".".join(selection.split("|")[1:])
        else:  # Expand global out from root node
            lookup = "global"

        if page_only and lookup not in config.config.sections():
            logger.info("No settings to save for the current page")
            return

        for section, items in config.defaults.items():
            style = "InfoHeader.TLabel" if idx == 0 else "InfoBody.TLabel"
          label_frame.pack(padx=5, pady=5, fill=tk.X, expand=True)
          for idx, line in enumerate(self.header_text.splitlines()):
              if not line:
                  continue
            style = "InfoHeader.TLabel" if idx == 0 else "InfoBody.TLabel"
              info = ttk.Label(label_frame, text=line, style=style, anchor=tk.W)
              info.bind("<Configure>", self._adjust_wraplength)
              info.pack(fill=tk.X, padx=0, pady=0, expand=True, side=tk.TOP)
  
      def build_panel(self, blank_nones, scrollbar):
keep keep keep keep replace keep keep keep keep keep
 GUI: Consolidate settings to single menu 
lib/gui/control_helper.py