code: def dropEvent(self, event: QDropEvent):
          items = [item for item in self.items(event.scenePos()) if isinstance(item, GraphicsItem) and item.acceptDrops()]
          item = None if len(items) == 0 else items[0]
          if len(event.mimeData().urls()) > 0:
              self.files_dropped.emit(event.mimeData().urls())
  
          indexes = list(event.mimeData().text().split("/")[:-1])
  
          group_nodes = []
          file_nodes = []
          for index in indexes:
              try:
                  row, column, parent = map(int, index.split(","))
                  if parent == -1:
                      parent = self.tree_root_item
                  else:
                      parent = self.tree_root_item.child(parent)
                  node = parent.child(row)
                  if node.is_group:
                      group_nodes.append(node)
                  else:
                      file_nodes.append(node)
              except ValueError:
                  continue
  
          # Which Nodes to add?
          nodes_to_add = []
          
          for group_node in group_nodes:
              nodes_to_add.extend(group_node.children)
          nodes_to_add.extend([file_node for file_node in file_nodes if file_node not in nodes_to_add])
          protocols_to_add = [node.protocol for node in nodes_to_add]
  
          ref_item = item
          position = None if ref_item is None else item.drop_indicator_position
          self.add_protocols(ref_item, position, protocols_to_add)
          super().dropEvent(event)
docs: :type: list of ProtocolTreeItem