18 QAbstractTableModel(parent),
23 timer =
new QTimer(
this);
48 if (parent.isValid()) {
56 if (parent.isValid()) {
70 if (role == Qt::DisplayRole) {
91 }
else if (role == Qt::TextAlignmentRole) {
94 return QVariant(Qt::AlignRight | Qt::AlignVCenter);
99 return QVariant(Qt::AlignCenter);
103 return QVariant(Qt::AlignRight | Qt::AlignVCenter);
109 return QVariant::fromValue(rec);
117 if(orientation == Qt::Horizontal)
119 if(role == Qt::DisplayRole && section <
columns.size())
129 if (!
index.isValid())
return Qt::NoItemFlags;
131 Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
140 return createIndex(row, column, const_cast<CNodeCombinedStats*>(&
m_peers_data[row]));
143 return QModelIndex();
151 new_peers_data.reserve(nodes_stats.size());
152 for (
const auto& node_stats : nodes_stats) {
153 const CNodeCombinedStats stats{std::get<0>(node_stats), std::get<2>(node_stats), std::get<1>(node_stats)};
154 new_peers_data.append(stats);
163 if (i < new_peers_data.size() &&
m_peers_data.at(i).nodeStats.nodeid == new_peers_data.at(i).nodeStats.nodeid) {
168 beginRemoveRows(QModelIndex(), i, i);
175 beginInsertRows(QModelIndex(),
m_peers_data.size(), new_peers_data.size() - 1);
182 const auto top_left =
index(0, 0);
184 Q_EMIT dataChanged(top_left, bottom_right);
std::chrono::microseconds m_min_ping_time
std::vector< std::tuple< CNodeStats, bool, CNodeStateStats > > NodesStats
Get stats for connected nodes.
QString formatPingTime(std::chrono::microseconds ping_time)
Format a CNodeStats.m_last_ping_time into a user-readable string or display N/A, if 0...
int columnCount(const QModelIndex &parent=QModelIndex()) const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
QString formatBytes(uint64_t bytes)
Qt::ItemFlags flags(const QModelIndex &index) const override
ConnectionType m_conn_type
QList< CNodeCombinedStats > m_peers_data
Internal peer data structure.
QString NetworkToQString(Network net)
Convert enum Network to QString.
interfaces::Node & m_node
QString ConnectionTypeToQString(ConnectionType conn_type, bool prepend_direction)
Convert enum ConnectionType to QString.
const QStringList columns
static const int MODEL_UPDATE_DELAY
virtual bool getNodesStats(NodesStats &stats)=0
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
PeerTableModel(interfaces::Node &node, QObject *parent)
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Top-level interface for a bitcoin node (bitcoind process).