1 /* packet_range_group_box.cpp
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include "packet_range_group_box.h"
25 #include "ui_packet_range_group_box.h"
27 PacketRangeGroupBox::PacketRangeGroupBox(QWidget
*parent
) :
29 pr_ui_(new Ui::PacketRangeGroupBox
),
31 syntax_state_(SyntaxLineEdit::Empty
)
33 pr_ui_
->setupUi(this);
35 pr_ui_
->displayedButton
->setChecked(true);
36 pr_ui_
->allButton
->setChecked(true);
39 PacketRangeGroupBox::~PacketRangeGroupBox()
44 void PacketRangeGroupBox::initRange(packet_range_t
*range
) {
49 if (range_
->process_filtered
) {
50 pr_ui_
->displayedButton
->setChecked(true);
52 pr_ui_
->capturedButton
->setChecked(true);
55 if (range_
->user_range
) {
56 pr_ui_
->rangeLineEdit
->setText(range_convert_range(range_
->user_range
));
61 bool PacketRangeGroupBox::isValid() {
62 if (pr_ui_
->rangeButton
->isChecked() && syntax_state_
!= SyntaxLineEdit::Empty
) {
68 void PacketRangeGroupBox::updateCounts() {
69 SyntaxLineEdit::SyntaxState orig_ss
= syntax_state_
;
70 bool displayed_checked
= pr_ui_
->displayedButton
->isChecked();
73 bool selected_packets
;
74 int ignored_cnt
= 0, displayed_ignored_cnt
= 0;
77 if (!range_
|| !range_
->cf
) return;
79 if (range_
->displayed_cnt
!= 0) {
80 pr_ui_
->displayedButton
->setEnabled(true);
82 displayed_checked
= false;
83 pr_ui_
->capturedButton
->setChecked(true);
84 pr_ui_
->displayedButton
->setEnabled(false);
88 pr_ui_
->allCapturedLabel
->setEnabled(!displayed_checked
);
89 label_count
= range_
->cf
->count
;
90 if (range_
->remove_ignored
) {
91 label_count
-= range_
->ignored_cnt
;
93 pr_ui_
->allCapturedLabel
->setText(QString("%1").arg(label_count
));
96 pr_ui_
->allDisplayedLabel
->setEnabled(displayed_checked
);
97 if (range_
->include_dependents
) {
98 label_count
= range_
->displayed_plus_dependents_cnt
;
100 label_count
= range_
->displayed_cnt
;
102 if (range_
->remove_ignored
) {
103 label_count
-= range_
->displayed_ignored_cnt
;
105 pr_ui_
->allDisplayedLabel
->setText(QString("%1").arg(label_count
));
107 // Selected / Captured + Displayed
108 selected_num
= (range_
->cf
->current_frame
) ? range_
->cf
->current_frame
->num
: 0;
109 can_select
= (selected_num
!= 0);
111 pr_ui_
->selectedButton
->setEnabled(true);
112 pr_ui_
->selectedCapturedLabel
->setEnabled(!displayed_checked
);
113 pr_ui_
->selectedDisplayedLabel
->setEnabled(displayed_checked
);
115 if (range_
->process
== range_process_selected
) {
116 pr_ui_
->allButton
->setChecked(true);
118 pr_ui_
->selectedButton
->setEnabled(false);
119 pr_ui_
->selectedCapturedLabel
->setEnabled(false);
120 pr_ui_
->selectedDisplayedLabel
->setEnabled(false);
122 if ((range_
->remove_ignored
&& can_select
&& range_
->cf
->current_frame
->flags
.ignored
) || selected_num
< 1) {
123 pr_ui_
->selectedCapturedLabel
->setText("0");
124 pr_ui_
->selectedDisplayedLabel
->setText("0");
126 pr_ui_
->selectedCapturedLabel
->setText("1");
127 pr_ui_
->selectedDisplayedLabel
->setText("1");
130 // Marked / Captured + Displayed
131 if (displayed_checked
) {
132 selected_packets
= (range_
->displayed_marked_cnt
!= 0);
134 selected_packets
= (range_
->cf
->marked_count
> 0);
136 if (selected_packets
) {
137 pr_ui_
->markedButton
->setEnabled(true);
138 pr_ui_
->markedCapturedLabel
->setEnabled(!displayed_checked
);
139 pr_ui_
->markedDisplayedLabel
->setEnabled(displayed_checked
);
141 if (range_
->process
== range_process_marked
) {
142 pr_ui_
->allButton
->setChecked(true);
144 pr_ui_
->markedButton
->setEnabled(false);
145 pr_ui_
->markedCapturedLabel
->setEnabled(false);
146 pr_ui_
->markedDisplayedLabel
->setEnabled(false);
148 label_count
= range_
->cf
->marked_count
;
149 if (range_
->remove_ignored
) {
150 label_count
-= range_
->ignored_marked_cnt
;
152 pr_ui_
->markedCapturedLabel
->setText(QString("%1").arg(label_count
));
153 label_count
= range_
->cf
->marked_count
;
154 if (range_
->remove_ignored
) {
155 label_count
-= range_
->displayed_ignored_marked_cnt
;
157 pr_ui_
->markedDisplayedLabel
->setText(QString("%1").arg(label_count
));
159 // First to last marked / Captured + Displayed
160 if (displayed_checked
) {
161 selected_packets
= (range_
->displayed_mark_range_cnt
!= 0);
163 selected_packets
= (range_
->mark_range_cnt
!= 0);
165 if (selected_packets
) {
166 pr_ui_
->ftlMarkedButton
->setEnabled(true);
167 pr_ui_
->ftlCapturedLabel
->setEnabled(!displayed_checked
);
168 pr_ui_
->ftlDisplayedLabel
->setEnabled(displayed_checked
);
170 if (range_
->process
== range_process_marked_range
) {
171 pr_ui_
->allButton
->setChecked(true);
173 pr_ui_
->ftlMarkedButton
->setEnabled(false);
174 pr_ui_
->ftlCapturedLabel
->setEnabled(false);
175 pr_ui_
->ftlDisplayedLabel
->setEnabled(false);
177 label_count
= range_
->mark_range_cnt
;
178 if (range_
->remove_ignored
) {
179 label_count
-= range_
->ignored_mark_range_cnt
;
181 pr_ui_
->ftlCapturedLabel
->setText(QString("%1").arg(label_count
));
182 label_count
= range_
->displayed_mark_range_cnt
;
183 if (range_
->remove_ignored
) {
184 label_count
-= range_
->displayed_ignored_mark_range_cnt
;
186 pr_ui_
->ftlDisplayedLabel
->setText(QString("%1").arg(label_count
));
188 // User specified / Captured + Displayed
190 pr_ui_
->rangeButton
->setEnabled(true);
191 pr_ui_
->rangeCapturedLabel
->setEnabled(!displayed_checked
);
192 pr_ui_
->rangeDisplayedLabel
->setEnabled(displayed_checked
);
194 packet_range_convert_str(range_
, pr_ui_
->rangeLineEdit
->text().toUtf8().constData());
196 switch (packet_range_check(range_
)) {
199 label_count
= range_
->user_range_cnt
;
200 if (range_
->remove_ignored
) {
201 label_count
-= range_
->ignored_user_range_cnt
;
203 pr_ui_
->rangeCapturedLabel
->setText(QString("%1").arg(label_count
));
204 label_count
= range_
->displayed_user_range_cnt
;
205 if (range_
->remove_ignored
) {
206 label_count
-= range_
->displayed_ignored_user_range_cnt
;
208 pr_ui_
->rangeDisplayedLabel
->setText(QString("%1").arg(label_count
));
209 syntax_state_
= SyntaxLineEdit::Empty
;
212 case CVT_SYNTAX_ERROR
:
213 pr_ui_
->rangeCapturedLabel
->setText("<small><i>Bad range</i></small>");
214 pr_ui_
->rangeDisplayedLabel
->setText("-");
215 syntax_state_
= SyntaxLineEdit::Invalid
;
218 case CVT_NUMBER_TOO_BIG
:
219 pr_ui_
->rangeCapturedLabel
->setText("<small><i>Number too large</i></small>");
220 pr_ui_
->rangeDisplayedLabel
->setText("-");
221 syntax_state_
= SyntaxLineEdit::Invalid
;
225 g_assert_not_reached();
230 switch(range_
->process
) {
231 case(range_process_all
):
232 ignored_cnt
= range_
->ignored_cnt
;
233 displayed_ignored_cnt
= range_
->displayed_ignored_cnt
;
235 case(range_process_selected
):
236 ignored_cnt
= (can_select
&& range_
->cf
->current_frame
->flags
.ignored
) ? 1 : 0;
237 displayed_ignored_cnt
= ignored_cnt
;
239 case(range_process_marked
):
240 ignored_cnt
= range_
->ignored_marked_cnt
;
241 displayed_ignored_cnt
= range_
->displayed_ignored_marked_cnt
;
243 case(range_process_marked_range
):
244 ignored_cnt
= range_
->ignored_mark_range_cnt
;
245 displayed_ignored_cnt
= range_
->displayed_ignored_mark_range_cnt
;
247 case(range_process_user_range
):
248 ignored_cnt
= range_
->ignored_user_range_cnt
;
249 displayed_ignored_cnt
= range_
->displayed_ignored_user_range_cnt
;
252 g_assert_not_reached();
255 if (displayed_checked
)
256 selected_packets
= (displayed_ignored_cnt
!= 0);
258 selected_packets
= (ignored_cnt
!= 0);
260 if (selected_packets
) {
261 pr_ui_
->ignoredCheckBox
->setEnabled(true);
262 pr_ui_
->ignoredCapturedLabel
->setEnabled(!displayed_checked
);
263 pr_ui_
->ignoredDisplayedLabel
->setEnabled(displayed_checked
);
265 pr_ui_
->ignoredCheckBox
->setEnabled(false);
266 pr_ui_
->ignoredCapturedLabel
->setEnabled(false);
267 pr_ui_
->ignoredDisplayedLabel
->setEnabled(false);
269 pr_ui_
->ignoredCapturedLabel
->setText(QString("%1").arg(ignored_cnt
));
270 pr_ui_
->ignoredDisplayedLabel
->setText(QString("%1").arg(displayed_ignored_cnt
));
272 if (orig_ss
!= syntax_state_
) {
273 pr_ui_
->rangeLineEdit
->setSyntaxState(syntax_state_
);
274 emit
validityChanged(isValid());
281 void PacketRangeGroupBox::on_rangeLineEdit_textChanged(const QString
&range_str
)
284 if (!pr_ui_
->rangeButton
->isChecked()) {
285 pr_ui_
->rangeButton
->setChecked(true);
291 void PacketRangeGroupBox::processButtonToggled(bool checked
, packet_range_e process
) {
292 if (checked
&& range_
) {
293 range_
->process
= process
;
298 void PacketRangeGroupBox::on_allButton_toggled(bool checked
)
300 processButtonToggled(checked
, range_process_all
);
303 void PacketRangeGroupBox::on_selectedButton_toggled(bool checked
)
305 processButtonToggled(checked
, range_process_selected
);
308 void PacketRangeGroupBox::on_markedButton_toggled(bool checked
)
310 processButtonToggled(checked
, range_process_marked
);
313 void PacketRangeGroupBox::on_ftlMarkedButton_toggled(bool checked
)
315 processButtonToggled(checked
, range_process_marked_range
);
318 void PacketRangeGroupBox::on_rangeButton_toggled(bool checked
)
320 processButtonToggled(checked
, range_process_user_range
);
323 void PacketRangeGroupBox::on_capturedButton_toggled(bool checked
)
325 if (checked
) updateCounts();
328 void PacketRangeGroupBox::on_displayedButton_toggled(bool checked
)
330 if (checked
) updateCounts();