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 on_select_reader(self, event):
      if event.EventObject is self.active_readers:
          self.inactive_readers.SetSelection(-1)
          selected = event.EventObject.GetStringSelection()
          reader_class = ALL_READERS[selected]
          self.display_functional_reader(reader_class)
      elif event.EventObject is self.inactive_readers:
          self.active_readers.SetSelection(-1)
          selected = event.EventObject.GetStringSelection()
          if selected in ALL_READERS:
              reader_class = ALL_READERS[selected]
              self.display_functional_reader(reader_class)
          else:
              self.display_nonfunctional_reader(selected)
      else:
          LOGGER.warning(f"Unknown selection {event}")
          return
      self.Layout()
      self.Refresh()
  
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 3 for calling the ReadersDialog obj's underlying member method code with example usage: obj.on_select_reader(event) without return types