def add_address_to_list(qtreelist: QTreeWidget, addr):
        for i in range(qtreelist.topLevelItemCount()):
            item = qtreelist.topLevelItem(i)  # type: QTreeWidgetItem
            if int(item.text(0), 16) == addr:
                return None # deduplicate

        item = QTreeWidgetItem(qtreelist)
        item.setText(0, "%#x" % addr)
        item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
        item.setData(0, Qt.CheckStateRole, Qt.Checked)
        return item
 def _get_checked_items(qlist: QTreeWidget):
     items = []
     for i in range(qlist.topLevelItemCount()):
         item = qlist.topLevelItem(i)
         if item.checkState(0) == Qt.Checked:
             items.append(item)
             for j in range(item.childCount()):
                 sub_item = item.child(j)
                 if sub_item.checkState(0) == Qt.Checked:
                     items.append(sub_item)
     return items
 def _remove_addr(qlist: QTreeWidget, addr):
     for i in range(qlist.topLevelItemCount()):
         qitem = qlist.topLevelItem(i)
         if int(qitem.text(0), 16) == addr:
             qlist.takeTopLevelItem(i)
             return