code: def addComponentEditor(self):
          
          row = self._model.rowCount()
  
          comp_stack_editor = ExploreComponentEditor()
          self.ui.trackStack.addWidget(comp_stack_editor)
  
          idx_button = IndexButton(row)
          idx_button.pickMe.connect(self.ui.trackStack.setCurrentIndex)
          self.trackBtnGroup.addButton(idx_button)
          self.ui.trackBtnLayout.addWidget(idx_button)
          self.ui.trackStack.setCurrentIndex(row)
  
          comp_stack_editor.closePlease.connect(self.removeComponentEditor)
  
          delay = Silence()
          comp_stack_editor.delaySpnbx.setValue(delay.duration())
          self._model.insertComponent(delay, row,0)
  
          self._allComponents.append([x() for x in self.stimuli_types if x.explore])
          for stim in self._allComponents[row]:
              editor = wrapComponent(stim).showEditor()
              comp_stack_editor.addWidget(editor, stim.name)
  
          exvocal = comp_stack_editor.widgetForName("Vocalization")
          if exvocal is not None:
              exvocal.filelistView.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
  
          initcomp = self._allComponents[row][0]
          self._model.insertComponent(initcomp, row, 1)
  
          self.buttons.append(idx_button)
  
          comp_stack_editor.exploreStimTypeCmbbx.currentIndexChanged.connect(lambda x : self.setStimIndex(row, x))
          comp_stack_editor.delaySpnbx.valueChanged.connect(lambda x : self.setDelay(row, x))
          comp_stack_editor.valueChanged.connect(self.valueChanged.emit)
          return comp_stack_editor
docs: Adds a new component to the model, and an editor for this component to this editor