Something went wrong on our end
'''
Created on 5 févr. 2014
@author: inso
'''
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
from cutecoin.models.node.itemModel import MainNodeItem, NodeItem
from cutecoin.models.community.itemModel import CommunityItemModel
import logging
class CommunityTreeModel(QAbstractItemModel):
'''
A Qt abstract item model to display nodes of a community
'''
def __init__(self, community):
'''
Constructor
'''
super(CommunityTreeModel, self).__init__(None)
self.community = community
self.rootItem = CommunityItemModel(self.community)
self.refreshTreeNodes()
def columnCount(self, parent):
return 1
def data(self, index, role):
if not index.isValid():
return None
if role != Qt.DisplayRole:
return None
item = index.internalPointer()
return item.data(0)
def flags(self, index):
if not index.isValid():
return Qt.NoItemFlags
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
def headerData(self, section, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self.rootItem.data(0)
return None
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
childItem = parentItem.child(row)
if childItem:
return self.createIndex(row, column, childItem)
else:
return QModelIndex()
def parent(self, index):
if not index.isValid():
return QModelIndex()
childItem = index.internalPointer()
parentItem = childItem.parent()
if parentItem == self.rootItem:
return QModelIndex()
return self.createIndex(parentItem.row(), 0, parentItem)
def rowCount(self, parent):
if parent.column() > 0:
return 0
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
return parentItem.childCount()
def refreshTreeNodes(self):
logging.debug("root : " + self.rootItem.data(0))
for mainNode in self.community.trustedNodes:
mainNodeItem = MainNodeItem(mainNode, self.rootItem)
logging.debug("mainNode : " + mainNode.getText() + " / " + mainNodeItem.data(0))
self.rootItem.appendChild(mainNodeItem)
for node in mainNode.downstreamPeers():
nodeItem = NodeItem(node, mainNodeItem)
logging.debug("\t node : " + node.getText()+ " / " + nodeItem.data(0))
mainNodeItem.appendChild(nodeItem)