RpcServiceResponseTimeDialog::RpcServiceResponseTimeDialog(QWidget &parent, CaptureFile &cf, struct register_srt *srt, RpcFamily dlg_type, const QString filter) : ServiceResponseTimeDialog(parent, cf, srt, filter), dlg_type_(dlg_type) { setRetapOnShow(false); setHint(tr("<small><i>Select a program and version and enter a filter if desired, then press Apply.</i></small>")); QHBoxLayout *filter_layout = filterLayout(); program_combo_ = new QComboBox(this); version_combo_ = new QComboBox(this); filter_layout->insertStretch(0, 1); filter_layout->insertWidget(0, version_combo_); filter_layout->insertWidget(0, new QLabel(tr("Version:"))); filter_layout->insertWidget(0, program_combo_); filter_layout->insertWidget(0, new QLabel(tr("Program:"))); if (dlg_type == DceRpc) { setWindowSubtitle(tr("DCE-RPC Service Response Times")); g_hash_table_foreach(dcerpc_uuids, dce_rpc_add_program, this); // This is a loooooong list. The GTK+ UI addresses this by making // the program combo a tree instead of a list. We might want to add a // full-height list to the left of the stats tree instead. QStringList programs = dce_name_to_uuid_key_.keys(); std::sort(programs.begin(), programs.end(), qStringCaseLessThan); connect(program_combo_, SIGNAL(currentIndexChanged(QString)), this, SLOT(dceRpcProgramChanged(QString))); program_combo_->addItems(programs); } else { setWindowSubtitle(tr("ONC-RPC Service Response Times")); g_hash_table_foreach(rpc_progs, onc_rpc_add_program, this); QStringList programs = onc_name_to_program_.keys(); std::sort(programs.begin(), programs.end(), qStringCaseLessThan); connect(program_combo_, SIGNAL(currentIndexChanged(QString)), this, SLOT(oncRpcProgramChanged(QString))); program_combo_->addItems(programs); } }
// Constructor. LteMacStatisticsDialog::LteMacStatisticsDialog(QWidget &parent, CaptureFile &cf, const char *filter) : TapParameterDialog(parent, cf, HELP_STATS_LTE_MAC_TRAFFIC_DIALOG), commonStatsCurrent_(false) { setWindowSubtitle(tr("LTE Mac Statistics")); loadGeometry(parent.width() * 1, parent.height() * 3 / 4, "LTEMacStatisticsDialog"); clearCommonStats(); // Create common_stats_grid to appear just above the filter area. int statstree_layout_idx = verticalLayout()->indexOf(filterLayout()->widget()); QGridLayout *common_stats_grid = new QGridLayout(); // Insert into the vertical layout verticalLayout()->insertLayout(statstree_layout_idx, common_stats_grid); int one_em = fontMetrics().height(); common_stats_grid->setColumnMinimumWidth(2, one_em * 2); common_stats_grid->setColumnStretch(2, 1); common_stats_grid->setColumnMinimumWidth(5, one_em * 2); common_stats_grid->setColumnStretch(5, 1); // Create statistics label. commonStatsLabel_ = new QLabel(this); commonStatsLabel_->setObjectName("statisticsLabel"); commonStatsLabel_->setTextFormat(Qt::RichText); commonStatsLabel_->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse); common_stats_grid->addWidget(commonStatsLabel_); // Create a grid for filtering-related widgetsto also appear in layout. int filter_controls_layout_idx = verticalLayout()->indexOf(filterLayout()->widget()); QGridLayout *filter_controls_grid = new QGridLayout(); // Insert into the vertical layout verticalLayout()->insertLayout(filter_controls_layout_idx, filter_controls_grid); filter_controls_grid->setColumnMinimumWidth(2, one_em * 2); filter_controls_grid->setColumnStretch(2, 1); filter_controls_grid->setColumnMinimumWidth(5, one_em * 2); filter_controls_grid->setColumnStretch(5, 1); // Add individual controls into the grid showSRFilterCheckBox_ = new QCheckBox(tr("Include SR frames in filter")); filter_controls_grid->addWidget(showSRFilterCheckBox_); showRACHFilterCheckBox_ = new QCheckBox(tr("Include RACH frames in filter")); filter_controls_grid->addWidget(showRACHFilterCheckBox_); // Will set whole-UE headings originally. updateHeaderLabels(); statsTreeWidget()->setItemDelegateForColumn(col_ul_padding_percent_, new PercentBarDelegate()); statsTreeWidget()->setItemDelegateForColumn(col_dl_padding_percent_, new PercentBarDelegate()); statsTreeWidget()->sortByColumn(col_rnti_, Qt::AscendingOrder); // Set up column widths. // resizeColumnToContents doesn't work well here, so set sizes manually. for (int col = 0; col < statsTreeWidget()->columnCount() - 1; col++) { switch (col) { case col_rnti_: statsTreeWidget()->setColumnWidth(col, one_em * 8); break; case col_ul_frames_: statsTreeWidget()->setColumnWidth(col, one_em * 5); break; case col_ul_bytes_: statsTreeWidget()->setColumnWidth(col, one_em * 5); break; case col_ul_mb_s_: statsTreeWidget()->setColumnWidth(col, one_em * 4); break; case col_ul_padding_percent_: statsTreeWidget()->setColumnWidth(col, one_em * 6); break; case col_ul_retx_: statsTreeWidget()->setColumnWidth(col, one_em * 6); break; case col_dl_frames_: statsTreeWidget()->setColumnWidth(col, one_em * 5); break; case col_dl_bytes_: statsTreeWidget()->setColumnWidth(col, one_em * 5); break; case col_dl_mb_s_: statsTreeWidget()->setColumnWidth(col, one_em * 4); break; case col_dl_padding_percent_: statsTreeWidget()->setColumnWidth(col, one_em * 6); break; case col_dl_crc_failed_: statsTreeWidget()->setColumnWidth(col, one_em * 6); break; case col_dl_retx_: statsTreeWidget()->setColumnWidth(col, one_em * 6); break; default: // The rest are numeric statsTreeWidget()->setColumnWidth(col, one_em * 4); statsTreeWidget()->headerItem()->setTextAlignment(col, Qt::AlignRight); break; } } addFilterActions(); if (filter) { setDisplayFilter(filter); } // Set handler for when the tree item changes to set the appropriate labels. connect(statsTreeWidget(), SIGNAL(itemSelectionChanged()), this, SLOT(updateHeaderLabels())); // Set handler for when display filter string is changed. connect(this, SIGNAL(updateFilter(QString)), this, SLOT(filterUpdated(QString))); }
MulticastStatisticsDialog::MulticastStatisticsDialog(QWidget &parent, CaptureFile &cf, const char *filter) : TapParameterDialog(parent, cf) { setWindowSubtitle(tr("UDP Multicast Streams")); // XXX Use recent settings instead resize(parent.width() * 4 / 5, parent.height() * 3 / 4); tapinfo_ = new mcaststream_tapinfo_t(); tapinfo_->user_data = this; tapinfo_->tap_reset = tapReset; tapinfo_->tap_draw = tapDraw; QStringList header_names = QStringList() << tr("Source Address") << tr("Source Port") << tr("Destination Address") << tr("Destination Port") << tr("Packets") << tr("Packets/s") << tr("Avg BW (bps)") << tr("Max BW (bps)") << tr("Max Burst") << tr("Burst Alarms") << tr("Max Buffers (B)") << tr("Buffer Alarms"); statsTreeWidget()->setHeaderLabels(header_names); for (int col = 0; col < statsTreeWidget()->columnCount(); col++) { if (col == col_src_addr_ || col == col_dst_addr_) continue; statsTreeWidget()->headerItem()->setTextAlignment(col, Qt::AlignRight); } burst_measurement_interval_le_ = new SyntaxLineEdit(this); burst_alarm_threshold_le_ = new SyntaxLineEdit(this); buffer_alarm_threshold_le_ = new SyntaxLineEdit(this); stream_empty_speed_le_ = new SyntaxLineEdit(this); total_empty_speed_le_ = new SyntaxLineEdit(this); int filter_layout_idx = verticalLayout()->indexOf(filterLayout()->widget()); QGridLayout *param_grid = new QGridLayout(); int one_em = fontMetrics().height(); verticalLayout()->insertLayout(filter_layout_idx, param_grid); // Label | LineEdit | | Label | LineEdit | | Label | LineEdit // 0 1 2 3 4 5 6 7 param_grid->setColumnMinimumWidth(2, one_em * 2); param_grid->setColumnStretch(2, 1); param_grid->setColumnMinimumWidth(5, one_em * 2); param_grid->setColumnStretch(5, 1); param_grid->addWidget(new QLabel(tr("Burst measurement interval (ms):")), 0, 0, Qt::AlignRight); param_grid->addWidget(burst_measurement_interval_le_, 0, 1); param_grid->addWidget(new QLabel(tr("Burst alarm threshold (packets):")), 0, 3, Qt::AlignRight); param_grid->addWidget(burst_alarm_threshold_le_, 0, 4); param_grid->addWidget(new QLabel(tr("Buffer alarm threshold (B):")), 0, 6, Qt::AlignRight); param_grid->addWidget(buffer_alarm_threshold_le_, 0, 7); param_grid->addWidget(new QLabel(tr("Stream empty speed (Kb/s:")), 1, 0, Qt::AlignRight); param_grid->addWidget(stream_empty_speed_le_, 1, 1); param_grid->addWidget(new QLabel(tr("Total empty speed (Kb/s:")), 1, 3, Qt::AlignRight); param_grid->addWidget(total_empty_speed_le_, 1, 4); burst_measurement_interval_le_->setText(QString::number(mcast_stream_burstint)); burst_alarm_threshold_le_->setText(QString::number(mcast_stream_trigger)); buffer_alarm_threshold_le_->setText(QString::number(mcast_stream_bufferalarm)); stream_empty_speed_le_->setText(QString::number(mcast_stream_emptyspeed)); total_empty_speed_le_->setText(QString::number(mcast_stream_cumulemptyspeed)); line_edits_ = QList<QWidget *>() << burst_measurement_interval_le_ << burst_alarm_threshold_le_ << buffer_alarm_threshold_le_ << stream_empty_speed_le_ << total_empty_speed_le_; foreach (QWidget *line_edit, line_edits_) { line_edit->setMinimumWidth(one_em * 5); connect(line_edit, SIGNAL(textEdited(QString)), this, SLOT(updateWidgets())); }