      Parameters
      ----------
      parent: tkinter object
          Parent tkinter object
      title: str
          Title of the control. Will be used for label text
      dtype: datatype object
          Datatype of the control.
      default: str
          Default value for the control
      selected_value: str, optional
          Selected value for the control. If None, default will be used
      choices: list or tuple, object
          Used for combo boxes and radio control option setting
      is_radio: bool, optional
          Specifies to use a Radio control instead of combobox if choices are passed
      rounding: int or float, optional
          For slider controls. Sets the stepping
      min_max: int or float, optional
          For slider controls. Sets the min and max values
      sysbrowser: dict, optional
          Adds Filesystem browser buttons to ttk.Entry options.
          Expects a dict: {sysbrowser: str, filetypes: str}
      helptext: str, optional
          Sets the tooltip text
      option_columns: int, optional
          Sets the number of columns to use for grouping radio buttons
      label_width: int, optional
          Sets the width of the control label. Defaults to 20
      checkbuttons_frame: tk.frame, optional
          If a checkbutton frame is passed in, then checkbuttons will be placed in this frame
          rather than the main options frame
      control_width: int, optional
          Sets the width of the control. Default is to auto expand
      blank_nones: bool, optional
 
</s> remove     control_width: int, optional
        Sets the width of the control. Default is to auto expand
    blank_nones: bool, optional
        Sets selected values to an empty string rather than None if this is true. Default is true
 </s> add     blank_nones: bool
        Sets selected values to an empty string rather than None if this is true. </s> remove     def __init__(self, parent, options, label_width=20, columns=1, option_columns=4,
                 header_text=None, blank_nones=True):
 </s> add     Parameters
    ----------
    parent: tk object
        Parent widget that should hold this control panel
    options: list of  ControlPanelOptions objects
        The list of controls that are to be built into this control panel
    label_width: int, optional
        The width that labels for controls should be set to.
        Defaults to 20
    columns: int, optional
        The maximum number of columns that this control panel should be able
        to accomodate. Setting to 1 means that there will only be 1 column
        regardless of how wide the control panel is. Higher numbers will
        dynamically fill extra columns if space permits. Defaults to 1
    option_columns: int, optional
        For checkbutton and radiobutton containers, how many options should
        be displayed on each row. Defaults to 4
    header_text: str, optional
        If provided, will place an information box at the top of the control
        panel with these contents.
    blank_nones: bool, optional
        How the control panel should handle Nones. If set to True then Nones
        will be converted to empty strings. Default: False
    """

    def __init__(self, parent, options,  # pylint:disable=too-many-arguments
                 label_width=20, columns=1, option_columns=4, header_text=None, blank_nones=True): </s> remove     def __init__(self, parent, title, dtype, default,
                 selected_value=None, choices=None, is_radio=False, rounding=None,
                 min_max=None, sysbrowser=None, helptext=None, option_columns=3, label_width=20,
                 checkbuttons_frame=None, control_width=None, blank_nones=True):
        logger.debug("Initializing %s: (parent: %s, title: %s, dtype: %s, default: %s, "
                     "selected_value: %s, choices: %s, is_radio: %s, rounding: %s, min_max: %s, "
                     "sysbrowser: %s, helptext: %s, option_columns: %s, label_width: %s, "
                     "checkbuttons_frame: %s, control_width: %s, blank_nones: %s)",
                     self.__class__.__name__, parent, title, dtype, default, selected_value,
                     choices, is_radio, rounding, min_max, sysbrowser, helptext, option_columns,
                     label_width, checkbuttons_frame, control_width, blank_nones)

        self.title = title
        self.default = default
        self.helptext = self.format_helptext(helptext)
 </s> add     def __init__(self, parent, option, option_columns, label_width,  # pylint: disable=too-many-arguments
                 checkbuttons_frame, blank_nones):
        logger.debug("Initializing %s: (parent: %s, option: %s, option_columns: %s, "
                     "label_width: %s, checkbuttons_frame: %s, blank_nones: %s)",
                     self.__class__.__name__, parent, option, option_columns, label_width,
                     checkbuttons_frame, blank_nones)

        self.option = option
        self.option_columns = option_columns </s> remove 
    Currently only setup for config items
 </s> add     This should only be called from the ControlPanel class </s> remove         """ Return a consistent object for processing
            regardless of whether processing all commands
            or just one command for reset and clear """
 </s> add         """ Return a consistent object for processing regardless of whether processing all commands
            or just one command for reset and clear. Removes helptext from return value """
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
      Parameters
      ----------
      parent: tkinter object
          Parent tkinter object
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
    option: ControlPanelOption object
        Holds all of the required option information
    option_columns: int
        Number of options to put on a single row for checkbuttons/radiobuttons
    label_width: int
        Sets the width of the control label
    checkbuttons_frame: tk.frame
          If a checkbutton frame is passed in, then checkbuttons will be placed in this frame
          rather than the main options frame
      control_width: int, optional
          Sets the width of the control. Default is to auto expand
      blank_nones: bool, optional
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace 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