def addDataProducts(self, dps):
        """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)
        """
        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