def dropEvent( self, event ):
        """
        Handles the drop event.
        
        :param      event | <QDropEvent>
        """
        tags = nativestring(event.mimeData().text())
        
        # handle an internal move
        if event.source() == self:
            curr_item = self.selectedItems()[0]
            create_item = self.createItem()
            
            # don't allow moving of the creation item
            if curr_item == create_item:
                return
            
            targ_item = self.itemAt(event.pos())
            if not targ_item:
                targ_item = create_item
            
            curr_idx  = self.row(curr_item)
            targ_idx  = self.row(targ_item)
            if ( targ_idx == self.count() - 1 ):
                targ_idx -= 1
            
            # don't bother moving the same item
            if ( curr_idx == targ_idx ):
                return
            
            self.takeItem(self.row(curr_item))
            self.insertItem(targ_idx, curr_item)
            self.setCurrentItem(curr_item)
        
        elif ( tags ):
            for tag in tags.split(','):
                tag = tag.strip()
                if ( self.isTagValid(tag) ):
                    self.addTag(tag)
            
        else:
            event.accept()