class_docstr: Handle representation of the filter panel
  
  The code for handling the filter UI is moderately massive, so it gets
  its own class, if for no other reason than to organize the code.
docstr: Find or create the sizer that's associated with a particular address
docstr_tok: ["Find","or","create","the","sizer","that","'s","associated","with","a","particular","address"]
code: def get_sizer(self, address):
      """Find or create the sizer that's associated with a particular address"""
      key = tuple(address)
      line_name = self.line_name(address)
      self.hide_show_dict[line_name] = True
      if key in self.sizer_dict:
          if len(address) > 0:
              self.hide_show_dict[
                  self.remove_button_name(address)
              ] = True
              self.hide_show_dict[self.add_button_name(address)] = True
              self.hide_show_dict[
                  self.add_group_button_name(address)
              ] = True
          return self.sizer_dict[key]
      #
      # Four possibilities:
      #
      # * The sizer is the top level one
      # * There is a sizer at the same level whose last address is one more.
      # * There are sizers at the same level whose next to last to address is
      #   one more than the next to last address of the address and whose
      #   last address is zero.
      # * None of the above which means the sizer can be added at the end.
      #
      line_style = wx.LI_HORIZONTAL | wx.BORDER_SUNKEN
      sizer = wx.BoxSizer(wx.HORIZONTAL)
      self.indent(sizer, address)
      self.stretch_spacer_dict[key] = sizer.AddStretchSpacer()
      line = wx.StaticLine(
          self.panel, -1, style=line_style, name=self.line_name(address)
      )
  
      if len(address) == 0:
          key = None
      else:
          sizer.Add(
              self.make_delete_button(address),
              0,
              wx.ALIGN_CENTER_VERTICAL,
          )
          sizer.Add(
              self.make_add_rule_button(address),
              0,
              wx.ALIGN_CENTER_VERTICAL,
          )
          sizer.Add(
              self.make_add_rules_button(address),
              0,
              wx.ALIGN_CENTER_VERTICAL,
          )
          key = tuple(address[:-1] + [address[-1] + 1])
          if key not in self.sizer_dict:
              if len(address) == 1:
                  key = None
              else:
                  key = tuple(address[:-2] + [address[-2] + 1])
                  if key not in self.sizer_dict:
                      key = None
      if key is not None:
          next_sizer = self.sizer_dict[key]
          idx = self.get_sizer_index(self.panel.Sizer, next_sizer)
          self.panel.Sizer.Insert(idx, sizer, 0, wx.EXPAND)
          self.panel.Sizer.Insert(idx + 1, line, 0, wx.EXPAND)
      else:
          self.panel.Sizer.Add(sizer, 0, wx.EXPAND)
          self.panel.Sizer.Add(line, 0, wx.EXPAND)
      self.sizer_dict[tuple(address)] = sizer
      return sizer
  
imports: import logging
  import wx
  from cellprofiler_core.setting.filter import Filter, FilterPredicate
  from cellprofiler_core.setting.filter._filter import AND_PREDICATE, OR_PREDICATE, LITERAL_PREDICATE
  from ._module_view import ModuleView
  from ..utilities.module_view import edit_control_name
label_desc: Use image node_id 2 for calling the FilterPanelController obj's underlying member method code with example usage: obj.get_sizer(address) and returns: sizer, self