code: def dropEvent( self, event ):
          
          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()
docs: Handles the drop event.
          
          :param      event | <QDropEvent>