1 /* packet_range_group_box.cpp
3 * Wireshark - Network traffic analyzer
4 * By Gerald Combs <gerald@wireshark.org>
5 * Copyright 1998 Gerald Combs
7 * SPDX-License-Identifier: GPL-2.0-or-later
10 #include "packet_range_group_box.h"
11 #include <ui_packet_range_group_box.h>
13 PacketRangeGroupBox::PacketRangeGroupBox(QWidget *parent) :
15 pr_ui_(new Ui::PacketRangeGroupBox),
17 syntax_state_(SyntaxLineEdit::Empty)
19 pr_ui_->setupUi(this);
22 pr_ui_->displayedButton->setChecked(true);
23 pr_ui_->allButton->setChecked(true);
26 PacketRangeGroupBox::~PacketRangeGroupBox()
29 wmem_free(NULL, range_->user_range);
33 void PacketRangeGroupBox::initRange(packet_range_t *range) {
38 if (range_->process_filtered) {
39 pr_ui_->displayedButton->setChecked(true);
41 pr_ui_->capturedButton->setChecked(true);
44 if (range_->user_range) {
45 char* tmp_str = range_convert_range(NULL, range_->user_range);
46 pr_ui_->rangeLineEdit->setText(tmp_str);
47 wmem_free(NULL, tmp_str);
52 bool PacketRangeGroupBox::isValid() {
53 if (pr_ui_->rangeButton->isChecked() && syntax_state_ != SyntaxLineEdit::Empty) {
59 void PacketRangeGroupBox::updateCounts() {
60 SyntaxLineEdit::SyntaxState orig_ss = syntax_state_;
61 bool displayed_checked = pr_ui_->displayedButton->isChecked();
64 bool selected_packets;
65 int ignored_cnt = 0, displayed_ignored_cnt = 0;
68 if (!range_ || !range_->cf) return;
70 if (range_->displayed_cnt != 0) {
71 pr_ui_->displayedButton->setEnabled(true);
73 displayed_checked = false;
74 pr_ui_->capturedButton->setChecked(true);
75 pr_ui_->displayedButton->setEnabled(false);
79 pr_ui_->allCapturedLabel->setEnabled(!displayed_checked);
80 label_count = range_->cf->count;
81 if (range_->remove_ignored) {
82 label_count -= range_->ignored_cnt;
84 pr_ui_->allCapturedLabel->setText(QString("%1").arg(label_count));
87 pr_ui_->allDisplayedLabel->setEnabled(displayed_checked);
88 if (range_->include_dependents) {
89 label_count = range_->displayed_plus_dependents_cnt;
91 label_count = range_->displayed_cnt;
93 if (range_->remove_ignored) {
94 label_count -= range_->displayed_ignored_cnt;
96 pr_ui_->allDisplayedLabel->setText(QString("%1").arg(label_count));
98 // Selected / Captured + Displayed
99 selected_num = (range_->cf->current_frame) ? range_->cf->current_frame->num : 0;
100 can_select = (selected_num != 0);
102 pr_ui_->selectedButton->setEnabled(true);
103 pr_ui_->selectedCapturedLabel->setEnabled(!displayed_checked);
104 pr_ui_->selectedDisplayedLabel->setEnabled(displayed_checked);
106 if (range_->process == range_process_selected) {
107 pr_ui_->allButton->setChecked(true);
109 pr_ui_->selectedButton->setEnabled(false);
110 pr_ui_->selectedCapturedLabel->setEnabled(false);
111 pr_ui_->selectedDisplayedLabel->setEnabled(false);
113 if ((range_->remove_ignored && can_select && range_->cf->current_frame->flags.ignored) || selected_num < 1) {
114 pr_ui_->selectedCapturedLabel->setText("0");
115 pr_ui_->selectedDisplayedLabel->setText("0");
117 pr_ui_->selectedCapturedLabel->setText("1");
118 pr_ui_->selectedDisplayedLabel->setText("1");
121 // Marked / Captured + Displayed
122 if (displayed_checked) {
123 selected_packets = (range_->displayed_marked_cnt != 0);
125 selected_packets = (range_->cf->marked_count > 0);
127 if (selected_packets) {
128 pr_ui_->markedButton->setEnabled(true);
129 pr_ui_->markedCapturedLabel->setEnabled(!displayed_checked);
130 pr_ui_->markedDisplayedLabel->setEnabled(displayed_checked);
132 if (range_->process == range_process_marked) {
133 pr_ui_->allButton->setChecked(true);
135 pr_ui_->markedButton->setEnabled(false);
136 pr_ui_->markedCapturedLabel->setEnabled(false);
137 pr_ui_->markedDisplayedLabel->setEnabled(false);
139 label_count = range_->cf->marked_count;
140 if (range_->remove_ignored) {
141 label_count -= range_->ignored_marked_cnt;
143 pr_ui_->markedCapturedLabel->setText(QString("%1").arg(label_count));
144 label_count = range_->cf->marked_count;
145 if (range_->remove_ignored) {
146 label_count -= range_->displayed_ignored_marked_cnt;
148 pr_ui_->markedDisplayedLabel->setText(QString("%1").arg(label_count));
150 // First to last marked / Captured + Displayed
151 if (displayed_checked) {
152 selected_packets = (range_->displayed_mark_range_cnt != 0);
154 selected_packets = (range_->mark_range_cnt != 0);
156 if (selected_packets) {
157 pr_ui_->ftlMarkedButton->setEnabled(true);
158 pr_ui_->ftlCapturedLabel->setEnabled(!displayed_checked);
159 pr_ui_->ftlDisplayedLabel->setEnabled(displayed_checked);
161 if (range_->process == range_process_marked_range) {
162 pr_ui_->allButton->setChecked(true);
164 pr_ui_->ftlMarkedButton->setEnabled(false);
165 pr_ui_->ftlCapturedLabel->setEnabled(false);
166 pr_ui_->ftlDisplayedLabel->setEnabled(false);
168 label_count = range_->mark_range_cnt;
169 if (range_->remove_ignored) {
170 label_count -= range_->ignored_mark_range_cnt;
172 pr_ui_->ftlCapturedLabel->setText(QString("%1").arg(label_count));
173 label_count = range_->displayed_mark_range_cnt;
174 if (range_->remove_ignored) {
175 label_count -= range_->displayed_ignored_mark_range_cnt;
177 pr_ui_->ftlDisplayedLabel->setText(QString("%1").arg(label_count));
179 // User specified / Captured + Displayed
181 pr_ui_->rangeButton->setEnabled(true);
182 pr_ui_->rangeCapturedLabel->setEnabled(!displayed_checked);
183 pr_ui_->rangeDisplayedLabel->setEnabled(displayed_checked);
185 packet_range_convert_str(range_, pr_ui_->rangeLineEdit->text().toUtf8().constData());
187 switch (packet_range_check(range_)) {
190 label_count = range_->user_range_cnt;
191 if (range_->remove_ignored) {
192 label_count -= range_->ignored_user_range_cnt;
194 pr_ui_->rangeCapturedLabel->setText(QString("%1").arg(label_count));
195 label_count = range_->displayed_user_range_cnt;
196 if (range_->remove_ignored) {
197 label_count -= range_->displayed_ignored_user_range_cnt;
199 pr_ui_->rangeDisplayedLabel->setText(QString("%1").arg(label_count));
200 syntax_state_ = SyntaxLineEdit::Empty;
203 case CVT_SYNTAX_ERROR:
204 pr_ui_->rangeCapturedLabel->setText("<small><i>Bad range</i></small>");
205 pr_ui_->rangeDisplayedLabel->setText("-");
206 syntax_state_ = SyntaxLineEdit::Invalid;
209 case CVT_NUMBER_TOO_BIG:
210 pr_ui_->rangeCapturedLabel->setText("<small><i>Number too large</i></small>");
211 pr_ui_->rangeDisplayedLabel->setText("-");
212 syntax_state_ = SyntaxLineEdit::Invalid;
216 g_assert_not_reached();
221 switch(range_->process) {
222 case(range_process_all):
223 ignored_cnt = range_->ignored_cnt;
224 displayed_ignored_cnt = range_->displayed_ignored_cnt;
226 case(range_process_selected):
227 ignored_cnt = (can_select && range_->cf->current_frame->flags.ignored) ? 1 : 0;
228 displayed_ignored_cnt = ignored_cnt;
230 case(range_process_marked):
231 ignored_cnt = range_->ignored_marked_cnt;
232 displayed_ignored_cnt = range_->displayed_ignored_marked_cnt;
234 case(range_process_marked_range):
235 ignored_cnt = range_->ignored_mark_range_cnt;
236 displayed_ignored_cnt = range_->displayed_ignored_mark_range_cnt;
238 case(range_process_user_range):
239 ignored_cnt = range_->ignored_user_range_cnt;
240 displayed_ignored_cnt = range_->displayed_ignored_user_range_cnt;
243 g_assert_not_reached();
246 if (displayed_checked)
247 selected_packets = (displayed_ignored_cnt != 0);
249 selected_packets = (ignored_cnt != 0);
251 if (selected_packets) {
252 pr_ui_->ignoredCheckBox->setEnabled(true);
253 pr_ui_->ignoredCapturedLabel->setEnabled(!displayed_checked);
254 pr_ui_->ignoredDisplayedLabel->setEnabled(displayed_checked);
256 pr_ui_->ignoredCheckBox->setEnabled(false);
257 pr_ui_->ignoredCapturedLabel->setEnabled(false);
258 pr_ui_->ignoredDisplayedLabel->setEnabled(false);
260 pr_ui_->ignoredCapturedLabel->setText(QString("%1").arg(ignored_cnt));
261 pr_ui_->ignoredDisplayedLabel->setText(QString("%1").arg(displayed_ignored_cnt));
263 if (orig_ss != syntax_state_) {
264 pr_ui_->rangeLineEdit->setSyntaxState(syntax_state_);
265 emit validityChanged(isValid());
272 void PacketRangeGroupBox::on_rangeLineEdit_textChanged(const QString &)
274 if (!pr_ui_->rangeButton->isChecked()) {
275 pr_ui_->rangeButton->setChecked(true);
281 void PacketRangeGroupBox::processButtonToggled(bool checked, packet_range_e process) {
282 if (checked && range_) {
283 range_->process = process;
288 void PacketRangeGroupBox::on_allButton_toggled(bool checked)
290 processButtonToggled(checked, range_process_all);
293 void PacketRangeGroupBox::on_selectedButton_toggled(bool checked)
295 processButtonToggled(checked, range_process_selected);
298 void PacketRangeGroupBox::on_markedButton_toggled(bool checked)
300 processButtonToggled(checked, range_process_marked);
303 void PacketRangeGroupBox::on_ftlMarkedButton_toggled(bool checked)
305 processButtonToggled(checked, range_process_marked_range);
308 void PacketRangeGroupBox::on_rangeButton_toggled(bool checked)
310 processButtonToggled(checked, range_process_user_range);
313 void PacketRangeGroupBox::on_capturedButton_toggled(bool checked)
316 if (range_) range_->process_filtered = FALSE;
321 void PacketRangeGroupBox::on_displayedButton_toggled(bool checked)
324 if (range_) range_->process_filtered = TRUE;
329 void PacketRangeGroupBox::on_ignoredCheckBox_toggled(bool checked)
331 if (range_) range_->remove_ignored = checked ? TRUE : FALSE;