          self.destroy_children()
          self.repack_columns()
          self.pack_widget_clones(self._widget_config)
  
      def compile_widget_config(self):
          """ Compile all children recursively in correct order if not already compiled """
          zipped = zip_longest(*(subframe.winfo_children() for subframe in self.subframes))
          children = [child for group in zipped for child in group if child is not None]
          self._widget_config = [{"class": child.__class__,
 
</s> remove                                 "tooltip": _TOOLTIPS.get(str(child), None),
 </s> add                                 "tooltip": _RECREATE_OBJECTS["tooltips"].get(str(child), None),
                                "rc_menu": _RECREATE_OBJECTS["contextmenus"].get(str(child), None), </s> remove     @staticmethod
    def set_control_width(ctl, control_width):
        """ Set the control width if required """
        if control_width is not None:
            ctl.config(width=control_width)

    def radio_control(self, choices, columns):
 </s> add     def radio_control(self): </s> remove                 child_list.append({"class": child.__class__,
                                   "id": id_,
                                   "tooltip": _TOOLTIPS.get(id_, None),
                                   "pack_info": self.pack_config_cleaner(child),
                                   "name": child.winfo_name(),
                                   "config": self.config_cleaner(child),
                                   "parent": child.winfo_parent()})
 </s> add                 child_list.append({
                    "class": child.__class__,
                    "id": id_,
                    "tooltip": _RECREATE_OBJECTS["tooltips"].get(id_, None),
                    "rc_menu": _RECREATE_OBJECTS["contextmenus"].get(str(id_), None),
                    "pack_info": self.pack_config_cleaner(child),
                    "name": child.winfo_name(),
                    "config": self.config_cleaner(child),
                    "parent": child.winfo_parent()}) </s> remove         logger.debug("Adding radio group: %s", self.title)
        all_help = [line for line in self.helptext.splitlines()]
 </s> add         logger.debug("Adding radio group: %s", self.option.name)
        all_help = [line for line in self.option.helptext.splitlines()] </s> remove             options = [opt for opt in self.opts[command].values()]
 </s> add             options = [opt for opt in self.opts[command].values() if isinstance(opt, dict)]
    def validate(self, width):
        """ Validate that passed in width should trigger column re-arranging """
        if ((width < self.single_column_width and self.columns == 1) or
                (width > self.max_width and self.columns == self.max_columns)):
            logger.debug("width outside min/max thresholds: (min: %s, width: %s, max: %s)",
                         self.single_column_width, width, self.max_width)
            return False
        range_min = self.columns * self.single_column_width
        range_max = (self.columns + 1) * self.single_column_width
        if range_min < width < range_max:
            logger.debug("width outside next step refresh threshold: (step down: %s, width: %s,"
                         "step up: %s)", range_min, width, range_max)
            return False
        return True

          self.destroy_children()
          self.repack_columns()
          self.pack_widget_clones(self._widget_config)
  
    def validate(self, width):
        """ Validate that passed in width should trigger column re-arranging """
        if ((width < self.single_column_width and self.columns == 1) or
                (width > self.max_width and self.columns == self.max_columns)):
            logger.debug("width outside min/max thresholds: (min: %s, width: %s, max: %s)",
                         self.single_column_width, width, self.max_width)
            return False
        range_min = self.columns * self.single_column_width
        range_max = (self.columns + 1) * self.single_column_width
        if range_min < width < range_max:
            logger.debug("width outside next step refresh threshold: (step down: %s, width: %s,"
                         "step up: %s)", range_min, width, range_max)
            return False
        return True

      def compile_widget_config(self):
          """ Compile all children recursively in correct order if not already compiled """
          zipped = zip_longest(*(subframe.winfo_children() for subframe in self.subframes))
          children = [child for group in zipped for child in group if child is not None]
          self._widget_config = [{"class": child.__class__,
keep keep keep add keep keep keep keep keep
 GUI Fixups

- GUI Bugfix: Startup options - fix min/max thresholds
- GUI Bugfix: Make console read-only
- GUI Bugfix: Rightclick menu for recreated widgets
- Enhancement: Create ControlPanelOptions Class + migrate options 
lib/gui/control_helper.py