add parameter dcerpc_info to PIDL_dissect_ipv?address()
[wireshark-wip.git] / ui / qt / packet_range_group_box.cpp
blobdeee6b25ccbc3d37e30a25f8498741a7a29d99c8
1 /* packet_range_group_box.cpp
3 * $Id$
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) :
28 QGroupBox(parent),
29 pr_ui_(new Ui::PacketRangeGroupBox),
30 range_(NULL),
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()
41 delete pr_ui_;
44 void PacketRangeGroupBox::initRange(packet_range_t *range) {
45 if (!range) return;
47 range_ = range;
49 if (range_->process_filtered) {
50 pr_ui_->displayedButton->setChecked(true);
51 } else {
52 pr_ui_->capturedButton->setChecked(true);
55 if (range_->user_range) {
56 pr_ui_->rangeLineEdit->setText(range_convert_range(range_->user_range));
58 updateCounts();
61 bool PacketRangeGroupBox::isValid() {
62 if (pr_ui_->rangeButton->isChecked() && syntax_state_ != SyntaxLineEdit::Empty) {
63 return false;
65 return true;
68 void PacketRangeGroupBox::updateCounts() {
69 SyntaxLineEdit::SyntaxState orig_ss = syntax_state_;
70 bool displayed_checked = pr_ui_->displayedButton->isChecked();
71 int selected_num;
72 bool can_select;
73 bool selected_packets;
74 int ignored_cnt = 0, displayed_ignored_cnt = 0;
75 int label_count;
77 if (!range_ || !range_->cf) return;
79 if (range_->displayed_cnt != 0) {
80 pr_ui_->displayedButton->setEnabled(true);
81 } else {
82 displayed_checked = false;
83 pr_ui_->capturedButton->setChecked(true);
84 pr_ui_->displayedButton->setEnabled(false);
87 // All / Captured
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));
95 // All / Displayed
96 pr_ui_->allDisplayedLabel->setEnabled(displayed_checked);
97 if (range_->include_dependents) {
98 label_count = range_->displayed_plus_dependents_cnt;
99 } else {
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);
110 if (can_select) {
111 pr_ui_->selectedButton->setEnabled(true);
112 pr_ui_->selectedCapturedLabel->setEnabled(!displayed_checked);
113 pr_ui_->selectedDisplayedLabel->setEnabled(displayed_checked);
114 } else {
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");
125 } else {
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);
133 } else {
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);
140 } else {
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);
162 } else {
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);
169 } else {
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_)) {
198 case CVT_NO_ERROR:
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;
210 break;
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;
216 break;
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;
222 break;
224 default:
225 g_assert_not_reached();
226 return;
229 // Ignored
230 switch(range_->process) {
231 case(range_process_all):
232 ignored_cnt = range_->ignored_cnt;
233 displayed_ignored_cnt = range_->displayed_ignored_cnt;
234 break;
235 case(range_process_selected):
236 ignored_cnt = (can_select && range_->cf->current_frame->flags.ignored) ? 1 : 0;
237 displayed_ignored_cnt = ignored_cnt;
238 break;
239 case(range_process_marked):
240 ignored_cnt = range_->ignored_marked_cnt;
241 displayed_ignored_cnt = range_->displayed_ignored_marked_cnt;
242 break;
243 case(range_process_marked_range):
244 ignored_cnt = range_->ignored_mark_range_cnt;
245 displayed_ignored_cnt = range_->displayed_ignored_mark_range_cnt;
246 break;
247 case(range_process_user_range):
248 ignored_cnt = range_->ignored_user_range_cnt;
249 displayed_ignored_cnt = range_->displayed_ignored_user_range_cnt;
250 break;
251 default:
252 g_assert_not_reached();
255 if (displayed_checked)
256 selected_packets = (displayed_ignored_cnt != 0);
257 else
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);
264 } else {
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());
276 emit rangeChanged();
279 // Slots
281 void PacketRangeGroupBox::on_rangeLineEdit_textChanged(const QString &range_str)
283 Q_UNUSED(range_str)
284 if (!pr_ui_->rangeButton->isChecked()) {
285 pr_ui_->rangeButton->setChecked(true);
286 } else {
287 updateCounts();
291 void PacketRangeGroupBox::processButtonToggled(bool checked, packet_range_e process) {
292 if (checked && range_) {
293 range_->process = process;
295 updateCounts();
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();