void draw() {
     setText(col_src_addr_, address_to_qstring(&src_addr_));
     setText(col_src_port_, QString::number(src_port_));
     setText(col_dst_addr_, address_to_qstring(&dst_addr_));
     setText(col_dst_port_, QString::number(dst_port_));
     setText(col_packets_, QString::number(num_packets_));
     setText(col_packets_s_, QString::number(avg_pps_, 'f', 2));
     setText(col_avg_bw_, bits_s_to_qstring(avg_bw_));
     setText(col_max_bw_, bits_s_to_qstring(max_bw_));
     setText(col_max_burst_, QString("%1 / %2ms").arg(top_burst_size_).arg(mcast_stream_burstint));
     setText(col_burst_alarms_, QString::number(num_bursts_));
     setText(col_max_buffers_, bits_s_to_qstring(top_buff_usage_));
     setText(col_buffer_alarms_, QString::number(num_buff_alarms_));
 }
    ProtocolHierarchyTreeWidgetItem(QTreeWidgetItem *parent, ph_stats_node_t& ph_stats_node) :
        QTreeWidgetItem(parent),
        total_packets_(ph_stats_node.num_pkts_total),
        last_packets_(ph_stats_node.num_pkts_last),
        total_bytes_(ph_stats_node.num_bytes_total),
        last_bytes_(ph_stats_node.num_bytes_last),
        percent_packets_(0),
        percent_bytes_(0),
        bits_s_(0.0),
        end_bits_s_(0.0)
    {
        filter_name_ = ph_stats_node.hfinfo->abbrev;

        if (!parent) return;
        ph_stats_t *ph_stats = VariantPointer<ph_stats_t>::asPtr(parent->treeWidget()->invisibleRootItem()->data(0, Qt::UserRole));

        if (!ph_stats || ph_stats->tot_packets < 1) return;
        percent_packets_ = total_packets_ * 100.0 / ph_stats->tot_packets;
        percent_bytes_ = total_bytes_ * 100.0 / ph_stats->tot_bytes;

        double seconds = ph_stats->last_time - ph_stats->first_time;

        if (seconds > 0.0) {
            bits_s_ = total_bytes_ * 8.0 / seconds;
            end_bits_s_ = last_bytes_ * 8.0 / seconds;
        }

        setText(protocol_col_, ph_stats_node.hfinfo->name);
        setData(pct_packets_col_, Qt::UserRole, percent_packets_);
        setText(packets_col_, QString::number(total_packets_));
        setData(pct_bytes_col_, Qt::UserRole, percent_bytes_);
        setText(bytes_col_, QString::number(total_bytes_));
        setText(bandwidth_col_, seconds > 0.0 ? bits_s_to_qstring(bits_s_) : UTF8_EM_DASH);
        setText(end_packets_col_, QString::number(last_packets_));
        setText(end_bytes_col_, QString::number(last_bytes_));
        setText(end_bandwidth_col_, seconds > 0.0 ? bits_s_to_qstring(end_bits_s_) : UTF8_EM_DASH);
    }