code: def addDataProducts(self, dps):
          
          busy = Purr.BusyIndicator()
          wakeup = False
          # build up list of items to be inserted
          itemlist = []
          for dp in dps:
              item = self.dpitems.get(dp.sourcepath)
              # If item already exists, it needs to be moved to its new position
              # If takeTopLevelItem() returns None, then item was already removed (this shouldn't happen,
              # but let's be defensive), and we make a new one anyway.
              if item and self.takeTopLevelItem(self.indexOfTopLevelItem(item)):
                  itemlist.append(item)
              else:
                  itemlist.append(self._makeDPItem(None, dp))
              wakeup = wakeup or not (dp.ignored or dp.quiet)
          # if these DPs were added as a result of a drag-and-drop, we need to insert them in FRONT of the dropped-on item
          if self._dropped_on:
              index = self.indexOfTopLevelItem(self._dropped_on)
          # else insert at end (after=None)
          else:
              index = self.topLevelItemCount()
          if itemlist:
              self.insertTopLevelItems(index, itemlist)
              self.emit(SIGNAL("updated"))
          for item in itemlist:
              # ensure combobox widgets are made
              self._itemComboBox(item, self.ColAction)
              self._itemComboBox(item, self.ColRender)
          return wakeup
docs: Adds new data products to listview. dps is a list of DP objects.
          Returns True if new (non-quiet) DPs are added, or if existing non-quiet dps are updated.
          (this usually tells the main window to wake up)