class_docstr: Display a dialog for configuring readers
  
  The dialog handles fetching current defaults and setting the
  defaults when the user hits OK.
class_docstr_tok: ["Display","a","dialog","for","configuring","readers","The","dialog","handles","fetching","current","defaults","and","setting","the","defaults","when","the","user","hits","OK","."]
code: def save_reader_config(self, event):
      event.Skip()
      changed_active_readers = False
      for key, value in self.changed_settings.items():
          if key.endswith(".enabled"):
              changed_active_readers = True
          config_write_typed(key, value)
      if changed_active_readers:
          activate_readers()
      self.Close()
      if not AVAILABLE_READERS:
          wx.MessageBox(
              "No image readers are enabled!\nCellProfiler will be unable to load data!",
              caption="Reader config",
          )
  
file_path: CellProfiler/src/frontend/cellprofiler/gui/readers_dialog/_readers_dialog.py
imports: import logging
  import textwrap
  import wx
  import wx.lib.scrolledpanel
  from wx.lib.agw.infobar import AutoWrapStaticText
  from cellprofiler_core.preferences import config_write_typed, config_read_typed
  from cellprofiler_core.reader import activate_readers
  from cellprofiler_core.constants.reader import ALL_READERS, BAD_READERS, AVAILABLE_READERS
  from ..html.utils import rst_to_html_fragment
  from ..htmldialog import HTMLDialog
label_desc: Use image node_id 8 for calling the ReadersDialog obj's underlying member method code with example usage: obj.save_reader_config(event) without return types