Add a PacketRangeGroupBox widget. Use it to implement "Export Selected
Packets". Not yet tested on Windows. "Ignore Packet" hasn't been implemented so we can't test that either. Create a SyntaxLineEdit widget from the QLineEdit code in DisplayFilterEdit. Use it in the file import and export dialogs and the PacketRangeGroupBox widget. This lets us provide instant feedback instead of popping up an error dialog. Expand the Tango color list based on http://emilis.info/other/extended_tango . Rearrange QtShark.pro to (hopefully) work better with Qt Creator. svn path=/trunk/; revision=45405
This commit is contained in:
parent
693ed306d3
commit
445148ac0e
|
@ -86,6 +86,7 @@ range_check_validity(packet_range_t *range)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
gboolean
|
gboolean
|
||||||
range_check_validity_modal(GtkWidget *parent, packet_range_t *range)
|
range_check_validity_modal(GtkWidget *parent, packet_range_t *range)
|
||||||
{
|
{
|
||||||
|
@ -153,6 +154,7 @@ range_update_dynamics(gpointer data)
|
||||||
gtk_widget_set_sensitive(range_displayed_bt, FALSE);
|
gtk_widget_set_sensitive(range_displayed_bt, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* All / Captured */
|
||||||
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY), !filtered_active);
|
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY), !filtered_active);
|
||||||
if (range->remove_ignored) {
|
if (range->remove_ignored) {
|
||||||
g_snprintf(label_text, sizeof(label_text), "%u", cfile.count - range->ignored_cnt);
|
g_snprintf(label_text, sizeof(label_text), "%u", cfile.count - range->ignored_cnt);
|
||||||
|
@ -160,6 +162,8 @@ range_update_dynamics(gpointer data)
|
||||||
g_snprintf(label_text, sizeof(label_text), "%u", cfile.count);
|
g_snprintf(label_text, sizeof(label_text), "%u", cfile.count);
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_C_KEY)), label_text);
|
||||||
|
|
||||||
|
/* All / Displayed */
|
||||||
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY), filtered_active);
|
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY), filtered_active);
|
||||||
if (range->include_dependents)
|
if (range->include_dependents)
|
||||||
displayed_cnt = range->displayed_plus_dependents_cnt;
|
displayed_cnt = range->displayed_plus_dependents_cnt;
|
||||||
|
@ -172,6 +176,7 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_ALL_D_KEY)), label_text);
|
||||||
|
|
||||||
|
/* Selected / Captured + Displayed */
|
||||||
/* Enable saving the currently-selected packet only if there *is* a
|
/* Enable saving the currently-selected packet only if there *is* a
|
||||||
currently-selected packet. */
|
currently-selected packet. */
|
||||||
selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0;
|
selected_num = (cfile.current_frame) ? cfile.current_frame->num : 0;
|
||||||
|
@ -206,6 +211,7 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_CURR_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_CURR_D_KEY)), label_text);
|
||||||
|
|
||||||
|
/* Marked / Captured + Displayed */
|
||||||
/* Enable the buttons for saving marked packets only if there *are*
|
/* Enable the buttons for saving marked packets only if there *are*
|
||||||
marked packets. */
|
marked packets. */
|
||||||
if (filtered_active)
|
if (filtered_active)
|
||||||
|
@ -240,6 +246,8 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_D_KEY)), label_text);
|
||||||
|
|
||||||
|
/* First to last marked / Captured + Displayed */
|
||||||
|
|
||||||
/* Enable the buttons for saving the range of marked packets only if
|
/* Enable the buttons for saving the range of marked packets only if
|
||||||
there *is* a range of marked packets. */
|
there *is* a range of marked packets. */
|
||||||
if (filtered_active)
|
if (filtered_active)
|
||||||
|
@ -275,6 +283,8 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_MARKED_RANGE_D_KEY)), label_text);
|
||||||
|
|
||||||
|
/* User specified / Captured + Displayed */
|
||||||
|
|
||||||
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_KEY), TRUE);
|
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_KEY), TRUE);
|
||||||
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_C_KEY), !filtered_active);
|
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_C_KEY), !filtered_active);
|
||||||
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY), filtered_active);
|
gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY), filtered_active);
|
||||||
|
@ -291,6 +301,7 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_SELECT_USER_D_KEY)), label_text);
|
||||||
|
|
||||||
|
/* Ignored */
|
||||||
switch(range->process) {
|
switch(range->process) {
|
||||||
case(range_process_all):
|
case(range_process_all):
|
||||||
ignored_cnt = range->ignored_cnt;
|
ignored_cnt = range->ignored_cnt;
|
||||||
|
@ -332,7 +343,8 @@ range_update_dynamics(gpointer data)
|
||||||
}
|
}
|
||||||
|
|
||||||
g_snprintf(label_text, sizeof(label_text), "%u", ignored_cnt);
|
g_snprintf(label_text, sizeof(label_text), "%u", ignored_cnt);
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_C_KEY)), label_text); g_snprintf(label_text, sizeof(label_text), "%u", displayed_ignored_cnt);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_C_KEY)), label_text);
|
||||||
|
g_snprintf(label_text, sizeof(label_text), "%u", displayed_ignored_cnt);
|
||||||
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_D_KEY)), label_text);
|
gtk_label_set_text(GTK_LABEL(g_object_get_data(G_OBJECT(data), RANGE_IGNORED_D_KEY)), label_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ set(QTSHARK_H_SRC
|
||||||
monospace_font.h
|
monospace_font.h
|
||||||
packet_list.h
|
packet_list.h
|
||||||
packet_list_model.h
|
packet_list_model.h
|
||||||
|
packet_range_group_box.h
|
||||||
progress_bar.h
|
progress_bar.h
|
||||||
proto_tree.h
|
proto_tree.h
|
||||||
recent_file_status.h
|
recent_file_status.h
|
||||||
|
@ -77,12 +78,14 @@ set(QTSHARK_CPP_SRC
|
||||||
packet_list.cpp
|
packet_list.cpp
|
||||||
packet_list_model.cpp
|
packet_list_model.cpp
|
||||||
packet_list_record.cpp
|
packet_list_record.cpp
|
||||||
|
packet_range_group_box.cpp
|
||||||
progress_bar.cpp
|
progress_bar.cpp
|
||||||
proto_tree.cpp
|
proto_tree.cpp
|
||||||
qt_ui_utils.cpp
|
qt_ui_utils.cpp
|
||||||
recent_file_status.cpp
|
recent_file_status.cpp
|
||||||
simple_dialog_qt.cpp
|
simple_dialog_qt.cpp
|
||||||
sparkline_delegate.cpp
|
sparkline_delegate.cpp
|
||||||
|
syntax_line_edit.cpp
|
||||||
wireshark_application.cpp
|
wireshark_application.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -95,6 +98,7 @@ set(QTSHARK_UI
|
||||||
import_text_dialog.ui
|
import_text_dialog.ui
|
||||||
main_welcome.ui
|
main_welcome.ui
|
||||||
main_window.ui
|
main_window.ui
|
||||||
|
packet_range_group_box.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
set(QTSHARK_QRC
|
set(QTSHARK_QRC
|
||||||
|
|
|
@ -31,8 +31,10 @@ GENERATED_HEADER_FILES =
|
||||||
|
|
||||||
# Generated header files that we don't want in the distribution.
|
# Generated header files that we don't want in the distribution.
|
||||||
GENERATED_NODIST_HEADER_FILES = \
|
GENERATED_NODIST_HEADER_FILES = \
|
||||||
|
ui_file_set_dialog.h \
|
||||||
ui_main_welcome.h \
|
ui_main_welcome.h \
|
||||||
ui_main_window.h
|
ui_main_window.h \
|
||||||
|
ui_packet_range_group_box.h
|
||||||
|
|
||||||
# Generated C source files that we want in the distribution.
|
# Generated C source files that we want in the distribution.
|
||||||
GENERATED_C_FILES =
|
GENERATED_C_FILES =
|
||||||
|
@ -85,11 +87,13 @@ MOC_HDRS = \
|
||||||
monospace_font.h \
|
monospace_font.h \
|
||||||
packet_list.h \
|
packet_list.h \
|
||||||
packet_list_model.h \
|
packet_list_model.h \
|
||||||
|
packet_range_group_box.h \
|
||||||
progress_bar.h \
|
progress_bar.h \
|
||||||
proto_tree.h \
|
proto_tree.h \
|
||||||
recent_file_status.h \
|
recent_file_status.h \
|
||||||
simple_dialog_qt.h \
|
simple_dialog_qt.h \
|
||||||
sparkline_delegate.h \
|
sparkline_delegate.h \
|
||||||
|
syntax_line_edit.h \
|
||||||
wireshark_application.h
|
wireshark_application.h
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -140,12 +144,14 @@ WIRESHARK_QT_SRC = \
|
||||||
packet_list.cpp \
|
packet_list.cpp \
|
||||||
packet_list_model.cpp \
|
packet_list_model.cpp \
|
||||||
packet_list_record.cpp \
|
packet_list_record.cpp \
|
||||||
|
packet_range_group_box.cpp \
|
||||||
progress_bar.cpp \
|
progress_bar.cpp \
|
||||||
proto_tree.cpp \
|
proto_tree.cpp \
|
||||||
qt_ui_utils.cpp \
|
qt_ui_utils.cpp \
|
||||||
recent_file_status.cpp \
|
recent_file_status.cpp \
|
||||||
simple_dialog_qt.cpp \
|
simple_dialog_qt.cpp \
|
||||||
sparkline_delegate.cpp \
|
sparkline_delegate.cpp \
|
||||||
|
syntax_line_edit.cpp \
|
||||||
wireshark_application.cpp
|
wireshark_application.cpp
|
||||||
|
|
||||||
noinst_HEADERS = \
|
noinst_HEADERS = \
|
||||||
|
|
|
@ -172,74 +172,14 @@ win32:SOURCES_WS_C += \
|
||||||
../../capture_wpcap_packet.c \
|
../../capture_wpcap_packet.c \
|
||||||
../../ui/win32/file_dlg_win32.c
|
../../ui/win32/file_dlg_win32.c
|
||||||
|
|
||||||
|
|
||||||
SOURCES_QT_CPP = \
|
|
||||||
byte_view_tab.cpp \
|
|
||||||
byte_view_text.cpp \
|
|
||||||
capture_file_dialog.cpp \
|
|
||||||
capture_info_dialog.cpp \
|
|
||||||
capture_interface_dialog.cpp \
|
|
||||||
color_dialog.cpp \
|
|
||||||
color_utils.cpp \
|
|
||||||
display_filter_combo.cpp \
|
|
||||||
display_filter_edit.cpp \
|
|
||||||
file_set_dialog.cpp \
|
|
||||||
interface_tree.cpp \
|
|
||||||
label_stack.cpp \
|
|
||||||
main.cpp \
|
|
||||||
main_status_bar.cpp \
|
|
||||||
main_welcome.cpp \
|
|
||||||
main_window.cpp \
|
|
||||||
main_window_slots.cpp \
|
|
||||||
monospace_font.cpp \
|
|
||||||
packet_list.cpp \
|
|
||||||
packet_list_model.cpp \
|
|
||||||
packet_list_record.cpp \
|
|
||||||
progress_bar.cpp \
|
|
||||||
proto_tree.cpp \
|
|
||||||
qt_ui_utils.cpp \
|
|
||||||
recent_file_status.cpp \
|
|
||||||
simple_dialog_qt.cpp \
|
|
||||||
sparkline_delegate.cpp \
|
|
||||||
wireshark_application.cpp
|
|
||||||
|
|
||||||
|
|
||||||
HEADERS_WS_C = \
|
HEADERS_WS_C = \
|
||||||
../../wsutil/privileges.h
|
../../wsutil/privileges.h
|
||||||
|
|
||||||
HEADERS_QT_CPP = \
|
|
||||||
byte_view_tab.h \
|
|
||||||
byte_view_text.h \
|
|
||||||
capture_file_dialog.h \
|
|
||||||
capture_info_dialog.h \
|
|
||||||
capture_interface_dialog.h \
|
|
||||||
color_dialog.h \
|
|
||||||
color_utils.h \
|
|
||||||
display_filter_combo.h \
|
|
||||||
display_filter_edit.h \
|
|
||||||
file_set_dialog.h \
|
|
||||||
interface_tree.h \
|
|
||||||
label_stack.h \
|
|
||||||
main_status_bar.h \
|
|
||||||
main_welcome.h \
|
|
||||||
main_window.h \
|
|
||||||
monospace_font.h \
|
|
||||||
packet_list.h \
|
|
||||||
packet_list_model.h \
|
|
||||||
packet_list_record.h \
|
|
||||||
progress_bar.h \
|
|
||||||
proto_tree.h \
|
|
||||||
qt_ui_utils.h \
|
|
||||||
qt_ui_utils.h \
|
|
||||||
recent_file_status.h \
|
|
||||||
simple_dialog_qt.h \
|
|
||||||
sparkline_delegate.h \
|
|
||||||
wireshark_application.h
|
|
||||||
|
|
||||||
FORMS += main_window.ui \
|
FORMS += main_window.ui \
|
||||||
main_welcome.ui \
|
main_welcome.ui \
|
||||||
import_text_dialog.ui \
|
import_text_dialog.ui \
|
||||||
file_set_dialog.ui
|
file_set_dialog.ui \
|
||||||
|
packet_range_group_box.ui
|
||||||
|
|
||||||
win32 { ## These should be in config.pri ??
|
win32 { ## These should be in config.pri ??
|
||||||
!isEmpty(PORTAUDIO_DIR) {
|
!isEmpty(PORTAUDIO_DIR) {
|
||||||
|
@ -262,10 +202,9 @@ win32 { ## These should be in config.pri ??
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HEADERS += $$HEADERS_WS_C
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
SOURCES += $$SOURCES_QT_CPP
|
|
||||||
HEADERS += $$HEADERS_WS_C
|
|
||||||
HEADERS += $$HEADERS_QT_CPP
|
|
||||||
OBJECTS_WS_C = $$SOURCES_WS_C
|
OBJECTS_WS_C = $$SOURCES_WS_C
|
||||||
OBJECTS_WS_C ~= s/[.]c/.obj/g
|
OBJECTS_WS_C ~= s/[.]c/.obj/g
|
||||||
OBJECTS_WS_C ~= s,/,\\,g
|
OBJECTS_WS_C ~= s,/,\\,g
|
||||||
|
@ -273,9 +212,6 @@ win32 {
|
||||||
} else {
|
} else {
|
||||||
## XXX: Shouldn't need to (re)compile WS_C sources ??
|
## XXX: Shouldn't need to (re)compile WS_C sources ??
|
||||||
SOURCES += $$SOURCES_WS_C
|
SOURCES += $$SOURCES_WS_C
|
||||||
SOURCES += $$SOURCES_QT_CPP
|
|
||||||
HEADERS += $$HEADERS_WS_C
|
|
||||||
HEADERS += $$HEADERS_QT_CPP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINES += INET6 REENTRANT
|
DEFINES += INET6 REENTRANT
|
||||||
|
@ -409,7 +345,66 @@ RC_FILE = qtshark.rc
|
||||||
win32: QMAKE_CLEAN += *.pdb
|
win32: QMAKE_CLEAN += *.pdb
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
import_text_dialog.h
|
byte_view_tab.h \
|
||||||
|
byte_view_text.h \
|
||||||
|
capture_file_dialog.h \
|
||||||
|
capture_info_dialog.h \
|
||||||
|
capture_interface_dialog.h \
|
||||||
|
color_dialog.h \
|
||||||
|
color_utils.h \
|
||||||
|
display_filter_combo.h \
|
||||||
|
display_filter_edit.h \
|
||||||
|
file_set_dialog.h \
|
||||||
|
import_text_dialog.h \
|
||||||
|
interface_tree.h \
|
||||||
|
label_stack.h \
|
||||||
|
main_status_bar.h \
|
||||||
|
main_welcome.h \
|
||||||
|
main_window.h \
|
||||||
|
monospace_font.h \
|
||||||
|
packet_list.h \
|
||||||
|
packet_list_model.h \
|
||||||
|
packet_list_record.h \
|
||||||
|
packet_range_group_box.h \
|
||||||
|
progress_bar.h \
|
||||||
|
proto_tree.h \
|
||||||
|
qt_ui_utils.h \
|
||||||
|
qt_ui_utils.h \
|
||||||
|
recent_file_status.h \
|
||||||
|
simple_dialog_qt.h \
|
||||||
|
sparkline_delegate.h \
|
||||||
|
syntax_line_edit.h \
|
||||||
|
wireshark_application.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
import_text_dialog.cpp
|
byte_view_tab.cpp \
|
||||||
|
byte_view_text.cpp \
|
||||||
|
capture_file_dialog.cpp \
|
||||||
|
capture_info_dialog.cpp \
|
||||||
|
capture_interface_dialog.cpp \
|
||||||
|
color_dialog.cpp \
|
||||||
|
color_utils.cpp \
|
||||||
|
display_filter_combo.cpp \
|
||||||
|
display_filter_edit.cpp \
|
||||||
|
file_set_dialog.cpp \
|
||||||
|
import_text_dialog.cpp \
|
||||||
|
interface_tree.cpp \
|
||||||
|
label_stack.cpp \
|
||||||
|
main.cpp \
|
||||||
|
main_status_bar.cpp \
|
||||||
|
main_welcome.cpp \
|
||||||
|
main_window.cpp \
|
||||||
|
main_window_slots.cpp \
|
||||||
|
monospace_font.cpp \
|
||||||
|
packet_list.cpp \
|
||||||
|
packet_list_model.cpp \
|
||||||
|
packet_list_record.cpp \
|
||||||
|
packet_range_group_box.cpp \
|
||||||
|
progress_bar.cpp \
|
||||||
|
proto_tree.cpp \
|
||||||
|
qt_ui_utils.cpp \
|
||||||
|
recent_file_status.cpp \
|
||||||
|
simple_dialog_qt.cpp \
|
||||||
|
sparkline_delegate.cpp \
|
||||||
|
syntax_line_edit.cpp \
|
||||||
|
wireshark_application.cpp
|
||||||
|
|
|
@ -21,12 +21,9 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#include <wiretap/wtap.h>
|
#include <wiretap/wtap.h>
|
||||||
|
|
||||||
|
#include "packet_range_group_box.h"
|
||||||
#include "capture_file_dialog.h"
|
#include "capture_file_dialog.h"
|
||||||
|
|
||||||
#ifdef Q_WS_WIN
|
#ifdef Q_WS_WIN
|
||||||
|
@ -49,6 +46,7 @@
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QSpacerItem>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
@ -120,12 +118,15 @@ extern void topic_cb(gpointer *widget, int topic) {
|
||||||
// End stub routines
|
// End stub routines
|
||||||
#endif // Q_WS_WIN
|
#endif // Q_WS_WIN
|
||||||
|
|
||||||
CaptureFileDialog::CaptureFileDialog(QWidget *parent, QString &display_filter) :
|
CaptureFileDialog::CaptureFileDialog(QWidget *parent, capture_file *cf, QString &display_filter) :
|
||||||
QFileDialog(parent), display_filter_(display_filter)
|
QFileDialog(parent),
|
||||||
|
display_filter_(display_filter),
|
||||||
|
cap_file_(cf),
|
||||||
#if !defined(Q_WS_WIN)
|
#if !defined(Q_WS_WIN)
|
||||||
, default_ft_(-1)
|
default_ft_(-1),
|
||||||
|
save_bt_(NULL)
|
||||||
#else
|
#else
|
||||||
, file_type_(-1)
|
file_type_(-1)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if !defined(Q_WS_WIN)
|
#if !defined(Q_WS_WIN)
|
||||||
|
@ -135,15 +136,15 @@ CaptureFileDialog::CaptureFileDialog(QWidget *parent, QString &display_filter) :
|
||||||
QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout());
|
QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout());
|
||||||
QHBoxLayout *h_box = new QHBoxLayout();
|
QHBoxLayout *h_box = new QHBoxLayout();
|
||||||
|
|
||||||
df_row_ = fd_grid->rowCount();
|
last_row_ = fd_grid->rowCount();
|
||||||
|
|
||||||
fd_grid->addLayout(h_box, fd_grid->rowCount(), 1, 1, -1);
|
fd_grid->addItem(new QSpacerItem(1, 1), last_row_, 0);
|
||||||
|
fd_grid->addLayout(h_box, last_row_, 1);
|
||||||
|
last_row_++;
|
||||||
|
|
||||||
// Left and right boxes for controls and preview
|
// Left and right boxes for controls and preview
|
||||||
h_box->addLayout(&left_v_box_);
|
h_box->addLayout(&left_v_box_);
|
||||||
h_box->addLayout(&right_v_box_);
|
h_box->addLayout(&right_v_box_);
|
||||||
|
|
||||||
|
|
||||||
#else // Q_WS_WIN
|
#else // Q_WS_WIN
|
||||||
merge_type_ = 0;
|
merge_type_ = 0;
|
||||||
#endif // Q_WS_WIN
|
#endif // Q_WS_WIN
|
||||||
|
@ -157,7 +158,7 @@ check_savability_t CaptureFileDialog::checkSaveAsWithComments(QWidget *
|
||||||
#if defined(Q_WS_WIN)
|
#if defined(Q_WS_WIN)
|
||||||
if (!parent || !cf)
|
if (!parent || !cf)
|
||||||
return CANCELLED;
|
return CANCELLED;
|
||||||
return win32_check_save_as_with_comments(parent->effectiveWinId(), cf, file_type);
|
return win32_check_save_as_with_comments(parent->effectiveWinId(), cap_file_, file_type);
|
||||||
#else // Q_WS_WIN
|
#else // Q_WS_WIN
|
||||||
QMessageBox msg_dialog;
|
QMessageBox msg_dialog;
|
||||||
int response;
|
int response;
|
||||||
|
@ -385,17 +386,33 @@ int CaptureFileDialog::open(QString &file_name) {
|
||||||
return (int) wof_status;
|
return (int) wof_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_savability_t CaptureFileDialog::saveAs(capture_file *cf, QString &file_name, bool must_support_comments) {
|
check_savability_t CaptureFileDialog::saveAs(QString &file_name, bool must_support_comments) {
|
||||||
GString *fname = g_string_new(file_name.toUtf8().constData());
|
GString *fname = g_string_new(file_name.toUtf8().constData());
|
||||||
gboolean wsf_status;
|
gboolean wsf_status;
|
||||||
|
|
||||||
wsf_status = win32_save_as_file(parentWidget()->effectiveWinId(), cf, fname, &file_type_, &compressed_, must_support_comments);
|
wsf_status = win32_save_as_file(parentWidget()->effectiveWinId(), cap_file_, fname, &file_type_, &compressed_, must_support_comments);
|
||||||
file_name = fname->str;
|
file_name = fname->str;
|
||||||
|
|
||||||
g_string_free(fname, TRUE);
|
g_string_free(fname, TRUE);
|
||||||
|
|
||||||
if (wsf_status) {
|
if (wsf_status) {
|
||||||
return win32_check_save_as_with_comments(parentWidget()->effectiveWinId(), cf, file_type_);
|
return win32_check_save_as_with_comments(parentWidget()->effectiveWinId(), cap_file_, file_type_);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
check_savability_t CaptureFileDialog::exportSelectedPackets(QString &file_name) {
|
||||||
|
GString *fname = g_string_new(file_name.toUtf8().constData());
|
||||||
|
gboolean wespf_status;
|
||||||
|
|
||||||
|
wespf_status = win32_export_specified_packets_file(parentWidget()->effectiveWinId(), fname, &file_type_, &compressed_, &range_);
|
||||||
|
file_name = fname->str;
|
||||||
|
|
||||||
|
g_string_free(fname, TRUE);
|
||||||
|
|
||||||
|
if (wespf_status) {
|
||||||
|
return win32_check_save_as_with_comments(parentWidget()->effectiveWinId(), cap_file_, file_type_);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CANCELLED;
|
return CANCELLED;
|
||||||
|
@ -432,12 +449,12 @@ bool CaptureFileDialog::isCompressed() {
|
||||||
void CaptureFileDialog::addDisplayFilterEdit() {
|
void CaptureFileDialog::addDisplayFilterEdit() {
|
||||||
QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout());
|
QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout());
|
||||||
|
|
||||||
fd_grid->addWidget(new QLabel(tr("Display Filter:")), df_row_, 0, 1, 1);
|
fd_grid->addWidget(new QLabel(tr("Display Filter:")), last_row_, 0);
|
||||||
|
|
||||||
display_filter_edit_ = new DisplayFilterEdit(this, true);
|
display_filter_edit_ = new DisplayFilterEdit(this, true);
|
||||||
display_filter_edit_->setText(display_filter_);
|
display_filter_edit_->setText(display_filter_);
|
||||||
fd_grid->addWidget(display_filter_edit_, df_row_, 1, 1, 1);
|
fd_grid->addWidget(display_filter_edit_, last_row_, 1);
|
||||||
|
last_row_++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CaptureFileDialog::addResolutionControls(QVBoxLayout &v_box) {
|
void CaptureFileDialog::addResolutionControls(QVBoxLayout &v_box) {
|
||||||
|
@ -458,9 +475,9 @@ void CaptureFileDialog::addResolutionControls(QVBoxLayout &v_box) {
|
||||||
v_box.addWidget(&external_res_);
|
v_box.addWidget(&external_res_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CaptureFileDialog::addGzipControls(QVBoxLayout &v_box, capture_file *cf) {
|
void CaptureFileDialog::addGzipControls(QVBoxLayout &v_box) {
|
||||||
compress_.setText(tr("Compress with g&zip"));
|
compress_.setText(tr("Compress with g&zip"));
|
||||||
if (cf->iscompressed && wtap_dump_can_compress(default_ft_)) {
|
if (cap_file_->iscompressed && wtap_dump_can_compress(default_ft_)) {
|
||||||
compress_.setChecked(true);
|
compress_.setChecked(true);
|
||||||
} else {
|
} else {
|
||||||
compress_.setChecked(false);
|
compress_.setChecked(false);
|
||||||
|
@ -469,6 +486,15 @@ void CaptureFileDialog::addGzipControls(QVBoxLayout &v_box, capture_file *cf) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CaptureFileDialog::addRangeControls(packet_range_t *range) {
|
||||||
|
QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout());
|
||||||
|
|
||||||
|
packet_range_group_box_.initRange(range);
|
||||||
|
|
||||||
|
fd_grid->addWidget(&packet_range_group_box_, last_row_, 1, 1, -1);
|
||||||
|
last_row_++;
|
||||||
|
}
|
||||||
|
|
||||||
int CaptureFileDialog::open(QString &file_name) {
|
int CaptureFileDialog::open(QString &file_name) {
|
||||||
setWindowTitle(tr("Wireshark: Open Capture File"));
|
setWindowTitle(tr("Wireshark: Open Capture File"));
|
||||||
setNameFilters(buildFileOpenTypeList());
|
setNameFilters(buildFileOpenTypeList());
|
||||||
|
@ -502,16 +528,16 @@ int CaptureFileDialog::open(QString &file_name) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_savability_t CaptureFileDialog::saveAs(capture_file *cf, QString &file_name, bool must_support_comments) {
|
check_savability_t CaptureFileDialog::saveAs(QString &file_name, bool must_support_comments) {
|
||||||
setWindowTitle(tr("Wireshark: Save Capture File As"));
|
setWindowTitle(tr("Wireshark: Save Capture File As"));
|
||||||
// XXX There doesn't appear to be a way to use setNameFilters without restricting
|
// XXX There doesn't appear to be a way to use setNameFilters without restricting
|
||||||
// what the user can select. We might want to use our own combobox instead and
|
// what the user can select. We might want to use our own combobox instead and
|
||||||
// let the user select anything.
|
// let the user select anything.
|
||||||
setNameFilters(buildFileSaveAsTypeList(cf, must_support_comments));
|
setNameFilters(buildFileSaveAsTypeList(must_support_comments));
|
||||||
setAcceptMode(QFileDialog::AcceptSave);
|
setAcceptMode(QFileDialog::AcceptSave);
|
||||||
setLabelText(FileType, "Save as:");
|
setLabelText(FileType, "Save as:");
|
||||||
|
|
||||||
addGzipControls(left_v_box_, cf);
|
addGzipControls(left_v_box_);
|
||||||
|
|
||||||
// Grow the dialog to account for the extra widgets.
|
// Grow the dialog to account for the extra widgets.
|
||||||
resize(width(), height() + left_v_box_.minimumSize().height());
|
resize(width(), height() + left_v_box_.minimumSize().height());
|
||||||
|
@ -522,7 +548,40 @@ check_savability_t CaptureFileDialog::saveAs(capture_file *cf, QString &file_nam
|
||||||
|
|
||||||
if (QFileDialog::exec() && selectedFiles().length() > 0) {
|
if (QFileDialog::exec() && selectedFiles().length() > 0) {
|
||||||
file_name = selectedFiles()[0];
|
file_name = selectedFiles()[0];
|
||||||
return checkSaveAsWithComments(this, cf, selectedFileType());
|
return checkSaveAsWithComments(this, cap_file_, selectedFileType());
|
||||||
|
}
|
||||||
|
return CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
check_savability_t CaptureFileDialog::exportSelectedPackets(QString &file_name, packet_range_t *range) {
|
||||||
|
QDialogButtonBox *button_box = findChild<QDialogButtonBox *>();
|
||||||
|
|
||||||
|
setWindowTitle(tr("Wireshark: Export Specified Packets"));
|
||||||
|
// XXX See comment in ::saveAs regarding setNameFilters
|
||||||
|
setNameFilters(buildFileSaveAsTypeList(false));
|
||||||
|
setAcceptMode(QFileDialog::AcceptSave);
|
||||||
|
setLabelText(FileType, "Export as:");
|
||||||
|
|
||||||
|
addGzipControls(left_v_box_);
|
||||||
|
addRangeControls(range);
|
||||||
|
|
||||||
|
if (button_box) {
|
||||||
|
save_bt_ = button_box->button(QDialogButtonBox::Save);
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(&packet_range_group_box_, SIGNAL(validityChanged(bool)),
|
||||||
|
this, SLOT(rangeValidityChanged(bool)));
|
||||||
|
|
||||||
|
// Grow the dialog to account for the extra widgets.
|
||||||
|
resize(width(), height() + (packet_range_group_box_.height() * 2 / 3) + left_v_box_.minimumSize().height());
|
||||||
|
|
||||||
|
if (!file_name.isEmpty()) {
|
||||||
|
selectFile(file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (QFileDialog::exec() && selectedFiles().length() > 0) {
|
||||||
|
file_name = selectedFiles()[0];
|
||||||
|
return checkSaveAsWithComments(this, cap_file_, selectedFileType());
|
||||||
}
|
}
|
||||||
return CANCELLED;
|
return CANCELLED;
|
||||||
}
|
}
|
||||||
|
@ -552,14 +611,14 @@ int CaptureFileDialog::merge(QString &file_name) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList CaptureFileDialog::buildFileSaveAsTypeList(capture_file *cf, bool must_support_comments) {
|
QStringList CaptureFileDialog::buildFileSaveAsTypeList(bool must_support_comments) {
|
||||||
QStringList filters;
|
QStringList filters;
|
||||||
GArray *savable_file_types;
|
GArray *savable_file_types;
|
||||||
guint i;
|
guint i;
|
||||||
int ft;
|
int ft;
|
||||||
|
|
||||||
type_hash_.clear();
|
type_hash_.clear();
|
||||||
savable_file_types = wtap_get_savable_file_types(cf->cd_t, cf->linktypes);
|
savable_file_types = wtap_get_savable_file_types(cap_file_->cd_t, cap_file_->linktypes);
|
||||||
|
|
||||||
if (savable_file_types != NULL) {
|
if (savable_file_types != NULL) {
|
||||||
QString file_type;
|
QString file_type;
|
||||||
|
@ -594,6 +653,12 @@ int CaptureFileDialog::mergeType() {
|
||||||
}
|
}
|
||||||
#endif // Q_WS_WINDOWS
|
#endif // Q_WS_WINDOWS
|
||||||
|
|
||||||
|
// Slots
|
||||||
|
|
||||||
|
void CaptureFileDialog::rangeValidityChanged(bool is_valid) {
|
||||||
|
if (save_bt_) save_bt_->setEnabled(is_valid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* do a preview run on the currently selected capture file */
|
/* do a preview run on the currently selected capture file */
|
||||||
void CaptureFileDialog::preview(const QString & path)
|
void CaptureFileDialog::preview(const QString & path)
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#define CAPTURE_FILE_DIALOG_H
|
#define CAPTURE_FILE_DIALOG_H
|
||||||
|
|
||||||
#include "display_filter_edit.h"
|
#include "display_filter_edit.h"
|
||||||
|
#include "packet_range_group_box.h"
|
||||||
|
|
||||||
#include "packet_list_record.h"
|
#include "packet_list_record.h"
|
||||||
#include "cfile.h"
|
#include "cfile.h"
|
||||||
|
@ -61,11 +62,11 @@ class CaptureFileDialog : public QFileDialog
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit CaptureFileDialog(QWidget *parent = NULL, QString &display_filter = *new QString());
|
explicit CaptureFileDialog(QWidget *parent = NULL, capture_file *cf = NULL, QString &display_filter = *new QString());
|
||||||
static check_savability_t checkSaveAsWithComments(QWidget *
|
static check_savability_t checkSaveAsWithComments(QWidget *
|
||||||
#if defined(Q_WS_WIN)
|
#if defined(Q_WS_WIN)
|
||||||
parent
|
parent
|
||||||
#endif
|
#endif // Q_WS_WIN
|
||||||
, capture_file *cf, int file_type);
|
, capture_file *cf, int file_type);
|
||||||
|
|
||||||
int mergeType();
|
int mergeType();
|
||||||
|
@ -83,8 +84,9 @@ private:
|
||||||
QVBoxLayout right_v_box_;
|
QVBoxLayout right_v_box_;
|
||||||
|
|
||||||
QString &display_filter_;
|
QString &display_filter_;
|
||||||
|
capture_file *cap_file_;
|
||||||
DisplayFilterEdit* display_filter_edit_;
|
DisplayFilterEdit* display_filter_edit_;
|
||||||
int df_row_;
|
int last_row_;
|
||||||
|
|
||||||
QLabel preview_format_;
|
QLabel preview_format_;
|
||||||
QLabel preview_size_;
|
QLabel preview_size_;
|
||||||
|
@ -101,9 +103,10 @@ private:
|
||||||
|
|
||||||
#if !defined(Q_WS_WIN)
|
#if !defined(Q_WS_WIN)
|
||||||
void addResolutionControls(QVBoxLayout &v_box);
|
void addResolutionControls(QVBoxLayout &v_box);
|
||||||
void addGzipControls(QVBoxLayout &v_box, capture_file *cf);
|
void addGzipControls(QVBoxLayout &v_box);
|
||||||
|
void addRangeControls(packet_range_t *range);
|
||||||
|
|
||||||
QStringList buildFileSaveAsTypeList(capture_file *cf, bool must_support_comments);
|
QStringList buildFileSaveAsTypeList(bool must_support_comments);
|
||||||
|
|
||||||
int default_ft_;
|
int default_ft_;
|
||||||
|
|
||||||
|
@ -113,6 +116,10 @@ private:
|
||||||
QCheckBox external_res_;
|
QCheckBox external_res_;
|
||||||
|
|
||||||
QCheckBox compress_;
|
QCheckBox compress_;
|
||||||
|
|
||||||
|
PacketRangeGroupBox packet_range_group_box_;
|
||||||
|
QPushButton *save_bt_;
|
||||||
|
|
||||||
#else // Q_WS_WIN
|
#else // Q_WS_WIN
|
||||||
int file_type_;
|
int file_type_;
|
||||||
int merge_type_;
|
int merge_type_;
|
||||||
|
@ -125,8 +132,12 @@ public slots:
|
||||||
|
|
||||||
int exec();
|
int exec();
|
||||||
int open(QString &file_name);
|
int open(QString &file_name);
|
||||||
check_savability_t saveAs(capture_file *cf, QString &file_name, bool must_support_comments);
|
check_savability_t saveAs(QString &file_name, bool must_support_comments);
|
||||||
|
check_savability_t exportSelectedPackets(QString &file_name, packet_range_t *range);
|
||||||
int merge(QString &file_name);
|
int merge(QString &file_name);
|
||||||
|
#if !defined(Q_WS_WIN)
|
||||||
|
void rangeValidityChanged(bool is_valid);
|
||||||
|
#endif // Q_WS_WIN
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void preview(const QString & path);
|
void preview(const QString & path);
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <epan/proto.h>
|
#include <epan/proto.h>
|
||||||
|
|
||||||
#include "display_filter_edit.h"
|
#include "display_filter_edit.h"
|
||||||
#include "tango_colors.h"
|
#include "syntax_line_edit.h"
|
||||||
|
|
||||||
#include "ui/utf8_entities.h"
|
#include "ui/utf8_entities.h"
|
||||||
|
|
||||||
|
@ -83,11 +83,10 @@ UIMiniCancelButton::UIMiniCancelButton(QWidget *pParent /* = 0 */)
|
||||||
// XXX - We need simplified (button- and dropdown-free) versions for use in dialogs and field-only checking.
|
// XXX - We need simplified (button- and dropdown-free) versions for use in dialogs and field-only checking.
|
||||||
|
|
||||||
DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, bool plain) :
|
DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, bool plain) :
|
||||||
QLineEdit(parent), plain_(plain)
|
SyntaxLineEdit(parent),
|
||||||
|
plain_(plain),
|
||||||
|
field_name_only_(false)
|
||||||
{
|
{
|
||||||
field_name_only_ = false;
|
|
||||||
syntax_state_ = Empty;
|
|
||||||
|
|
||||||
setAccessibleName(tr("Display filter entry"));
|
setAccessibleName(tr("Display filter entry"));
|
||||||
|
|
||||||
if (plain_) {
|
if (plain_) {
|
||||||
|
@ -189,46 +188,21 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, bool plain) :
|
||||||
} else {
|
} else {
|
||||||
apsz.setHeight(0); apsz.setWidth(0);
|
apsz.setHeight(0); apsz.setWidth(0);
|
||||||
}
|
}
|
||||||
syntax_style_sheet_ = QString(
|
setStyleSheet(QString(
|
||||||
"DisplayFilterEdit {"
|
"DisplayFilterEdit {"
|
||||||
" padding-left: %1px;"
|
" padding-left: %1px;"
|
||||||
" margin-left: %2px;"
|
" margin-left: %2px;"
|
||||||
" margin-right: %3px;"
|
" margin-right: %3px;"
|
||||||
// " background: transparent;"
|
|
||||||
"}"
|
|
||||||
|
|
||||||
// Should the backgrounds fade away on the right?
|
|
||||||
"DisplayFilterEdit[syntaxState=\"%4\"] {"
|
|
||||||
" color: white;"
|
|
||||||
" background-color: #%7;"
|
|
||||||
"}"
|
|
||||||
|
|
||||||
"DisplayFilterEdit[syntaxState=\"%5\"] {"
|
|
||||||
" color: #%8;"
|
|
||||||
" background-color: #%9;"
|
|
||||||
"}"
|
|
||||||
|
|
||||||
"DisplayFilterEdit[syntaxState=\"%6\"] {"
|
|
||||||
" color: #%8;"
|
|
||||||
" background-color: #%10;"
|
|
||||||
"}"
|
"}"
|
||||||
)
|
)
|
||||||
.arg(frameWidth + 1)
|
.arg(frameWidth + 1)
|
||||||
.arg(bksz.width())
|
.arg(bksz.width())
|
||||||
.arg(cbsz.width() + apsz.width() + frameWidth + 1)
|
.arg(cbsz.width() + apsz.width() + frameWidth + 1)
|
||||||
.arg(Invalid)
|
);
|
||||||
.arg(Deprecated)
|
|
||||||
.arg(Valid)
|
|
||||||
.arg(tango_scarlet_red_1, 6, 16, QChar('0')) // Invalid
|
|
||||||
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Deprecated/valid foreground
|
|
||||||
.arg(tango_butter_1, 6, 16, QChar('0')) // Deprecated
|
|
||||||
.arg(tango_chameleon_1, 6, 16, QChar('0')) // Valid
|
|
||||||
;
|
|
||||||
setStyleSheet(syntax_style_sheet_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
|
void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
|
||||||
QLineEdit::paintEvent(evt);
|
SyntaxLineEdit::paintEvent(evt);
|
||||||
|
|
||||||
// http://wiki.forum.nokia.com/index.php/Custom_QLineEdit
|
// http://wiki.forum.nokia.com/index.php/Custom_QLineEdit
|
||||||
if (text().isEmpty() && ! this->hasFocus()) {
|
if (text().isEmpty() && ! this->hasFocus()) {
|
||||||
|
@ -282,17 +256,17 @@ void DisplayFilterEdit::checkFilter(const QString& text)
|
||||||
popFilterSyntaxStatus();
|
popFilterSyntaxStatus();
|
||||||
|
|
||||||
if (field_name_only_ && (c = proto_check_field_name(text.toUtf8().constData()))) {
|
if (field_name_only_ && (c = proto_check_field_name(text.toUtf8().constData()))) {
|
||||||
syntax_state_ = Invalid;
|
setSyntaxState(Invalid);
|
||||||
emit pushFilterSyntaxStatus(QString().sprintf("Illegal character in field name: '%c'", c));
|
emit pushFilterSyntaxStatus(QString().sprintf("Illegal character in field name: '%c'", c));
|
||||||
} else if (dfilter_compile(text.toUtf8().constData(), &dfp)) {
|
} else if (dfilter_compile(text.toUtf8().constData(), &dfp)) {
|
||||||
if (dfp != NULL) {
|
if (dfp != NULL) {
|
||||||
depr = dfilter_deprecated_tokens(dfp);
|
depr = dfilter_deprecated_tokens(dfp);
|
||||||
}
|
}
|
||||||
if (text.length() < 1) {
|
if (text.length() < 1) {
|
||||||
syntax_state_ = Empty;
|
setSyntaxState(Empty);
|
||||||
} else if (depr) {
|
} else if (depr) {
|
||||||
/* You keep using that word. I do not think it means what you think it means. */
|
/* You keep using that word. I do not think it means what you think it means. */
|
||||||
syntax_state_ = Deprecated;
|
setSyntaxState(Deprecated);
|
||||||
/*
|
/*
|
||||||
* We're being lazy and only printing the first "problem" token.
|
* We're being lazy and only printing the first "problem" token.
|
||||||
* Would it be better to print all of them?
|
* Would it be better to print all of them?
|
||||||
|
@ -300,11 +274,11 @@ void DisplayFilterEdit::checkFilter(const QString& text)
|
||||||
emit pushFilterSyntaxWarning(QString().sprintf("\"%s\" may have unexpected results (see the User's Guide)",
|
emit pushFilterSyntaxWarning(QString().sprintf("\"%s\" may have unexpected results (see the User's Guide)",
|
||||||
(const char *) g_ptr_array_index(depr, 0)));
|
(const char *) g_ptr_array_index(depr, 0)));
|
||||||
} else {
|
} else {
|
||||||
syntax_state_ = Valid;
|
setSyntaxState(Valid);
|
||||||
}
|
}
|
||||||
dfilter_free(dfp);
|
dfilter_free(dfp);
|
||||||
} else {
|
} else {
|
||||||
syntax_state_ = Invalid;
|
setSyntaxState(Invalid);
|
||||||
QString invalidMsg(tr("Invalid filter"));
|
QString invalidMsg(tr("Invalid filter"));
|
||||||
if (dfilter_error_msg) {
|
if (dfilter_error_msg) {
|
||||||
invalidMsg.append(QString().sprintf(": %s", dfilter_error_msg));
|
invalidMsg.append(QString().sprintf(": %s", dfilter_error_msg));
|
||||||
|
@ -312,9 +286,8 @@ void DisplayFilterEdit::checkFilter(const QString& text)
|
||||||
emit pushFilterSyntaxStatus(invalidMsg);
|
emit pushFilterSyntaxStatus(invalidMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
setStyleSheet(syntax_style_sheet_);
|
|
||||||
if (apply_button_) {
|
if (apply_button_) {
|
||||||
apply_button_->setEnabled(syntax_state_ == Empty || syntax_state_ == Valid);
|
apply_button_->setEnabled(SyntaxState() == Empty || syntaxState() == Valid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +302,7 @@ void DisplayFilterEdit::applyDisplayFilter()
|
||||||
gchar *dftext = NULL;
|
gchar *dftext = NULL;
|
||||||
cf_status_t cf_status;
|
cf_status_t cf_status;
|
||||||
|
|
||||||
if (syntax_state_ != Valid && syntax_state_ != Empty) {
|
if (syntaxState() != Valid && syntaxState() != Empty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,18 +25,13 @@
|
||||||
#define DISPLAYFILTEREDIT_H
|
#define DISPLAYFILTEREDIT_H
|
||||||
|
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
|
#include "syntax_line_edit.h"
|
||||||
|
|
||||||
class DisplayFilterEdit : public QLineEdit
|
class DisplayFilterEdit : public SyntaxLineEdit
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(SyntaxState syntaxState READ syntaxState)
|
|
||||||
Q_ENUMS(SyntaxState)
|
|
||||||
public:
|
public:
|
||||||
explicit DisplayFilterEdit(QWidget *parent = 0, bool plain = false);
|
explicit DisplayFilterEdit(QWidget *parent = 0, bool plain = false);
|
||||||
enum SyntaxState { Empty, Invalid, Deprecated, Valid };
|
|
||||||
SyntaxState syntaxState() const
|
|
||||||
{ return syntax_state_; }
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *evt);
|
void paintEvent(QPaintEvent *evt);
|
||||||
|
@ -52,9 +47,7 @@ private slots:
|
||||||
private:
|
private:
|
||||||
bool plain_;
|
bool plain_;
|
||||||
bool field_name_only_;
|
bool field_name_only_;
|
||||||
SyntaxState syntax_state_;
|
|
||||||
QString empty_filter_message_;
|
QString empty_filter_message_;
|
||||||
QString syntax_style_sheet_;
|
|
||||||
QToolButton *bookmark_button_;
|
QToolButton *bookmark_button_;
|
||||||
QToolButton *clear_button_;
|
QToolButton *clear_button_;
|
||||||
QToolButton *apply_button_;
|
QToolButton *apply_button_;
|
||||||
|
|
|
@ -52,33 +52,33 @@
|
||||||
|
|
||||||
ImportTextDialog::ImportTextDialog(QWidget *parent) :
|
ImportTextDialog::ImportTextDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::ImportTextDialog),
|
ti_ui_(new Ui::ImportTextDialog),
|
||||||
import_info_()
|
import_info_()
|
||||||
{
|
{
|
||||||
int encap;
|
int encap;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ui->setupUi(this);
|
ti_ui_->setupUi(this);
|
||||||
memset(&import_info_, 0, sizeof(import_info_));
|
memset(&import_info_, 0, sizeof(import_info_));
|
||||||
|
|
||||||
ok_button_ = ui->buttonBox->button(QDialogButtonBox::Ok);
|
ok_button_ = ti_ui_->buttonBox->button(QDialogButtonBox::Ok);
|
||||||
ok_button_->setEnabled(false);
|
ok_button_->setEnabled(false);
|
||||||
|
|
||||||
#ifdef Q_WS_MAC
|
#ifdef Q_WS_MAC
|
||||||
// The grid layout squishes each line edit otherwise.
|
// The grid layout squishes each line edit otherwise.
|
||||||
int le_height = ui->textFileLineEdit->sizeHint().height();
|
int le_height = ti_ui_->textFileLineEdit->sizeHint().height();
|
||||||
ui->ethertypeLineEdit->setMinimumHeight(le_height);
|
ti_ui_->ethertypeLineEdit->setMinimumHeight(le_height);
|
||||||
ui->protocolLineEdit->setMinimumHeight(le_height);
|
ti_ui_->protocolLineEdit->setMinimumHeight(le_height);
|
||||||
ui->sourcePortLineEdit->setMinimumHeight(le_height);
|
ti_ui_->sourcePortLineEdit->setMinimumHeight(le_height);
|
||||||
ui->destinationPortLineEdit->setMinimumHeight(le_height);
|
ti_ui_->destinationPortLineEdit->setMinimumHeight(le_height);
|
||||||
ui->tagLineEdit->setMinimumHeight(le_height);
|
ti_ui_->tagLineEdit->setMinimumHeight(le_height);
|
||||||
ui->ppiLineEdit->setMinimumHeight(le_height);
|
ti_ui_->ppiLineEdit->setMinimumHeight(le_height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
on_dateTimeLineEdit_textChanged(ui->dateTimeLineEdit->text());
|
on_dateTimeLineEdit_textChanged(ti_ui_->dateTimeLineEdit->text());
|
||||||
|
|
||||||
for (i = 0; i < ui->headerGridLayout->count(); i++) {
|
for (i = 0; i < ti_ui_->headerGridLayout->count(); i++) {
|
||||||
QRadioButton *rb = qobject_cast<QRadioButton *>(ui->headerGridLayout->itemAt(i)->widget());
|
QRadioButton *rb = qobject_cast<QRadioButton *>(ti_ui_->headerGridLayout->itemAt(i)->widget());
|
||||||
|
|
||||||
if (rb) encap_buttons_.append(rb);
|
if (rb) encap_buttons_.append(rb);
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ ImportTextDialog::ImportTextDialog(QWidget *parent) :
|
||||||
/* If it has got a name */
|
/* If it has got a name */
|
||||||
if ((name = wtap_encap_string(encap)))
|
if ((name = wtap_encap_string(encap)))
|
||||||
{
|
{
|
||||||
ui->encapComboBox->addItem(name, QVariant(encap));
|
ti_ui_->encapComboBox->addItem(name, QVariant(encap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ ImportTextDialog::ImportTextDialog(QWidget *parent) :
|
||||||
|
|
||||||
ImportTextDialog::~ImportTextDialog()
|
ImportTextDialog::~ImportTextDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ti_ui_;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString &ImportTextDialog::capfileName() {
|
QString &ImportTextDialog::capfileName() {
|
||||||
|
@ -160,29 +160,29 @@ void ImportTextDialog::enableHeaderWidgets(bool enable_buttons) {
|
||||||
bool sctp_ppi = false;
|
bool sctp_ppi = false;
|
||||||
|
|
||||||
if (enable_buttons) {
|
if (enable_buttons) {
|
||||||
if (ui->ethernetButton->isChecked()) {
|
if (ti_ui_->ethernetButton->isChecked()) {
|
||||||
ethertype = true;
|
ethertype = true;
|
||||||
on_ethertypeLineEdit_textChanged(ui->ethertypeLabel->text());
|
on_ethertypeLineEdit_textChanged(ti_ui_->ethertypeLineEdit->text());
|
||||||
} else if (ui->ipv4Button->isChecked()) {
|
} else if (ti_ui_->ipv4Button->isChecked()) {
|
||||||
ipv4_proto = true;
|
ipv4_proto = true;
|
||||||
on_protocolLineEdit_textChanged(ui->protocolLineEdit->text());
|
on_protocolLineEdit_textChanged(ti_ui_->protocolLineEdit->text());
|
||||||
} else if (ui->udpButton->isChecked() || ui->tcpButton->isChecked()) {
|
} else if (ti_ui_->udpButton->isChecked() || ti_ui_->tcpButton->isChecked()) {
|
||||||
port = true;
|
port = true;
|
||||||
on_sourcePortLineEdit_textChanged(ui->sourcePortLineEdit->text());
|
on_sourcePortLineEdit_textChanged(ti_ui_->sourcePortLineEdit->text());
|
||||||
on_destinationPortLineEdit_textChanged(ui->destinationPortLineEdit->text());
|
on_destinationPortLineEdit_textChanged(ti_ui_->destinationPortLineEdit->text());
|
||||||
} else if (ui->sctpButton->isChecked()) {
|
} else if (ti_ui_->sctpButton->isChecked()) {
|
||||||
port = true;
|
port = true;
|
||||||
sctp_tag = true;
|
sctp_tag = true;
|
||||||
on_sourcePortLineEdit_textChanged(ui->sourcePortLineEdit->text());
|
on_sourcePortLineEdit_textChanged(ti_ui_->sourcePortLineEdit->text());
|
||||||
on_destinationPortLineEdit_textChanged(ui->destinationPortLineEdit->text());
|
on_destinationPortLineEdit_textChanged(ti_ui_->destinationPortLineEdit->text());
|
||||||
on_tagLineEdit_textChanged(ui->tagLineEdit->text());
|
on_tagLineEdit_textChanged(ti_ui_->tagLineEdit->text());
|
||||||
}
|
}
|
||||||
if (ui->sctpDataButton->isChecked()) {
|
if (ti_ui_->sctpDataButton->isChecked()) {
|
||||||
port = true;
|
port = true;
|
||||||
sctp_ppi = true;
|
sctp_ppi = true;
|
||||||
on_sourcePortLineEdit_textChanged(ui->sourcePortLineEdit->text());
|
on_sourcePortLineEdit_textChanged(ti_ui_->sourcePortLineEdit->text());
|
||||||
on_destinationPortLineEdit_textChanged(ui->destinationPortLineEdit->text());
|
on_destinationPortLineEdit_textChanged(ti_ui_->destinationPortLineEdit->text());
|
||||||
on_ppiLineEdit_textChanged(ui->ppiLineEdit->text());
|
on_ppiLineEdit_textChanged(ti_ui_->ppiLineEdit->text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,18 +190,18 @@ void ImportTextDialog::enableHeaderWidgets(bool enable_buttons) {
|
||||||
rb->setEnabled(enable_buttons);
|
rb->setEnabled(enable_buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->ethertypeLabel->setEnabled(ethertype);
|
ti_ui_->ethertypeLabel->setEnabled(ethertype);
|
||||||
ui->ethertypeLineEdit->setEnabled(ethertype);
|
ti_ui_->ethertypeLineEdit->setEnabled(ethertype);
|
||||||
ui->protocolLabel->setEnabled(ipv4_proto);
|
ti_ui_->protocolLabel->setEnabled(ipv4_proto);
|
||||||
ui->protocolLineEdit->setEnabled(ipv4_proto);
|
ti_ui_->protocolLineEdit->setEnabled(ipv4_proto);
|
||||||
ui->sourcePortLabel->setEnabled(port);
|
ti_ui_->sourcePortLabel->setEnabled(port);
|
||||||
ui->sourcePortLineEdit->setEnabled(port);
|
ti_ui_->sourcePortLineEdit->setEnabled(port);
|
||||||
ui->destinationPortLabel->setEnabled(port);
|
ti_ui_->destinationPortLabel->setEnabled(port);
|
||||||
ui->destinationPortLineEdit->setEnabled(port);
|
ti_ui_->destinationPortLineEdit->setEnabled(port);
|
||||||
ui->tagLabel->setEnabled(sctp_tag);
|
ti_ui_->tagLabel->setEnabled(sctp_tag);
|
||||||
ui->tagLineEdit->setEnabled(sctp_tag);
|
ti_ui_->tagLineEdit->setEnabled(sctp_tag);
|
||||||
ui->ppiLabel->setEnabled(sctp_ppi);
|
ti_ui_->ppiLabel->setEnabled(sctp_ppi);
|
||||||
ui->ppiLineEdit->setEnabled(sctp_ppi);
|
ti_ui_->ppiLineEdit->setEnabled(sctp_ppi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::exec() {
|
void ImportTextDialog::exec() {
|
||||||
|
@ -213,7 +213,7 @@ void ImportTextDialog::exec() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
import_info_.import_text_filename = ui->textFileLineEdit->text().toUtf8().data();
|
import_info_.import_text_filename = ti_ui_->textFileLineEdit->text().toUtf8().data();
|
||||||
import_info_.import_text_file = ws_fopen(import_info_.import_text_filename, "rb");
|
import_info_.import_text_file = ws_fopen(import_info_.import_text_filename, "rb");
|
||||||
if (!import_info_.import_text_file) {
|
if (!import_info_.import_text_file) {
|
||||||
open_failure_alert_box(import_info_.import_text_filename, errno, FALSE);
|
open_failure_alert_box(import_info_.import_text_filename, errno, FALSE);
|
||||||
|
@ -222,28 +222,28 @@ void ImportTextDialog::exec() {
|
||||||
}
|
}
|
||||||
|
|
||||||
import_info_.offset_type =
|
import_info_.offset_type =
|
||||||
ui->hexOffsetButton->isChecked() ? OFFSET_HEX :
|
ti_ui_->hexOffsetButton->isChecked() ? OFFSET_HEX :
|
||||||
ui->decimalOffsetButton->isChecked() ? OFFSET_DEC :
|
ti_ui_->decimalOffsetButton->isChecked() ? OFFSET_DEC :
|
||||||
ui->octalOffsetButton->isChecked() ? OFFSET_OCT :
|
ti_ui_->octalOffsetButton->isChecked() ? OFFSET_OCT :
|
||||||
OFFSET_NONE;
|
OFFSET_NONE;
|
||||||
import_info_.date_timestamp = ui->dateTimeLineEdit->text().length() > 0;
|
import_info_.date_timestamp = ti_ui_->dateTimeLineEdit->text().length() > 0;
|
||||||
import_info_.date_timestamp_format = ui->dateTimeLineEdit->text().toUtf8().data();
|
import_info_.date_timestamp_format = ti_ui_->dateTimeLineEdit->text().toUtf8().data();
|
||||||
|
|
||||||
encap_val = ui->encapComboBox->itemData(ui->encapComboBox->currentIndex());
|
encap_val = ti_ui_->encapComboBox->itemData(ti_ui_->encapComboBox->currentIndex());
|
||||||
import_info_.dummy_header_type = HEADER_NONE;
|
import_info_.dummy_header_type = HEADER_NONE;
|
||||||
if (encap_val.isValid() && encap_val.toUInt() == WTAP_ENCAP_ETHERNET && !ui->noDummyButton->isChecked()) {
|
if (encap_val.isValid() && encap_val.toUInt() == WTAP_ENCAP_ETHERNET && !ti_ui_->noDummyButton->isChecked()) {
|
||||||
// Inputs were validated in the on_xxx_textChanged slots.
|
// Inputs were validated in the on_xxx_textChanged slots.
|
||||||
if (ui->ethernetButton->isChecked()) {
|
if (ti_ui_->ethernetButton->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_ETH;
|
import_info_.dummy_header_type = HEADER_ETH;
|
||||||
} else if (ui->ipv4Button->isChecked()) {
|
} else if (ti_ui_->ipv4Button->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_IPV4;
|
import_info_.dummy_header_type = HEADER_IPV4;
|
||||||
} else if(ui->udpButton->isChecked()) {
|
} else if(ti_ui_->udpButton->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_UDP;
|
import_info_.dummy_header_type = HEADER_UDP;
|
||||||
} else if(ui->tcpButton->isChecked()) {
|
} else if(ti_ui_->tcpButton->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_TCP;
|
import_info_.dummy_header_type = HEADER_TCP;
|
||||||
} else if(ui->sctpButton->isChecked()) {
|
} else if(ti_ui_->sctpButton->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_SCTP;
|
import_info_.dummy_header_type = HEADER_SCTP;
|
||||||
} else if(ui->sctpDataButton->isChecked()) {
|
} else if(ti_ui_->sctpDataButton->isChecked()) {
|
||||||
import_info_.dummy_header_type = HEADER_SCTP_DATA;
|
import_info_.dummy_header_type = HEADER_SCTP_DATA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,7 +280,7 @@ void ImportTextDialog::on_textFileBrowseButton_clicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
QString file_name = QFileDialog::getOpenFileName(this, tr("Wireshark: Import text file"), open_dir);
|
QString file_name = QFileDialog::getOpenFileName(this, tr("Wireshark: Import text file"), open_dir);
|
||||||
ui->textFileLineEdit->setText(file_name);
|
ti_ui_->textFileLineEdit->setText(file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_textFileLineEdit_textChanged(const QString &file_name)
|
void ImportTextDialog::on_textFileLineEdit_textChanged(const QString &file_name)
|
||||||
|
@ -298,7 +298,7 @@ void ImportTextDialog::on_textFileLineEdit_textChanged(const QString &file_name)
|
||||||
|
|
||||||
void ImportTextDialog::on_encapComboBox_currentIndexChanged(int index)
|
void ImportTextDialog::on_encapComboBox_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
QVariant val = ui->encapComboBox->itemData(index);
|
QVariant val = ti_ui_->encapComboBox->itemData(index);
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
|
||||||
if (val != QVariant::Invalid) {
|
if (val != QVariant::Invalid) {
|
||||||
|
@ -319,10 +319,10 @@ void ImportTextDialog::on_dateTimeLineEdit_textChanged(const QString &time_forma
|
||||||
|
|
||||||
time(&cur_time);
|
time(&cur_time);
|
||||||
cur_tm = localtime(&cur_time);
|
cur_tm = localtime(&cur_time);
|
||||||
strftime(time_str, 100, ui->dateTimeLineEdit->text().toUtf8().constData(), cur_tm);
|
strftime(time_str, 100, ti_ui_->dateTimeLineEdit->text().toUtf8().constData(), cur_tm);
|
||||||
ui->timestampExampleLabel->setText(QString(tr("Example: %1")).arg(time_str));
|
ti_ui_->timestampExampleLabel->setText(QString(tr("Example: %1")).arg(time_str));
|
||||||
} else {
|
} else {
|
||||||
ui->timestampExampleLabel->setText(tr("<i>(No format will be applied)</i>"));
|
ti_ui_->timestampExampleLabel->setText(tr("<i>(No format will be applied)</i>"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,88 +361,66 @@ void ImportTextDialog::on_sctpDataButton_toggled(bool checked)
|
||||||
on_noDummyButton_toggled(checked);
|
on_noDummyButton_toggled(checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImportTextDialog::check_line_edit(SyntaxLineEdit *le, const QString &num_str, int base, guint max_val, bool is_short, guint *val_ptr) {
|
||||||
|
bool conv_ok;
|
||||||
|
SyntaxLineEdit::SyntaxState syntax_state = SyntaxLineEdit::Empty;
|
||||||
|
bool ok_enabled = true;
|
||||||
|
|
||||||
|
if (!le || !val_ptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (num_str.length() < 1) {
|
||||||
|
*val_ptr = 0;
|
||||||
|
} else {
|
||||||
|
if (is_short) {
|
||||||
|
*val_ptr = num_str.toUShort(&conv_ok, base);
|
||||||
|
} else {
|
||||||
|
*val_ptr = num_str.toULong(&conv_ok, base);
|
||||||
|
}
|
||||||
|
if (conv_ok && *val_ptr <= max_val) {
|
||||||
|
syntax_state = SyntaxLineEdit::Valid;
|
||||||
|
} else {
|
||||||
|
syntax_state = SyntaxLineEdit::Invalid;
|
||||||
|
ok_enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
le->setSyntaxState(syntax_state);
|
||||||
|
ok_button_->setEnabled(ok_enabled);
|
||||||
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_ethertypeLineEdit_textChanged(const QString ðertype_str)
|
void ImportTextDialog::on_ethertypeLineEdit_textChanged(const QString ðertype_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->ethertypeLineEdit, ethertype_str, 16, 0xffff, true, &import_info_.pid);
|
||||||
|
|
||||||
import_info_.pid = ethertype_str.toUShort(&conv_ok, 16);
|
|
||||||
if (conv_ok && import_info_.pid <= 0xffff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_protocolLineEdit_textChanged(const QString &protocol_str)
|
void ImportTextDialog::on_protocolLineEdit_textChanged(const QString &protocol_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->protocolLineEdit, protocol_str, 10, 0xff, true, &import_info_.protocol);
|
||||||
|
|
||||||
import_info_.protocol = protocol_str.toUShort(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.protocol <= 0xff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_sourcePortLineEdit_textChanged(const QString &source_port_str)
|
void ImportTextDialog::on_sourcePortLineEdit_textChanged(const QString &source_port_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->sourcePortLineEdit, source_port_str, 10, 0xffff, true, &import_info_.src_port);
|
||||||
|
|
||||||
import_info_.src_port = source_port_str.toUShort(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.src_port <= 0xffff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_destinationPortLineEdit_textChanged(const QString &destination_port_str)
|
void ImportTextDialog::on_destinationPortLineEdit_textChanged(const QString &destination_port_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->destinationPortLineEdit, destination_port_str, 10, 0xffff, true, &import_info_.dst_port);
|
||||||
|
|
||||||
import_info_.dst_port = destination_port_str.toUShort(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.dst_port <= 0xffff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_tagLineEdit_textChanged(const QString &tag_str)
|
void ImportTextDialog::on_tagLineEdit_textChanged(const QString &tag_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->tagLineEdit, tag_str, 10, 0xffffffff, false, &import_info_.tag);
|
||||||
|
|
||||||
import_info_.tag = tag_str.toULong(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.tag <= 0xffffffff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_ppiLineEdit_textChanged(const QString &ppi_str)
|
void ImportTextDialog::on_ppiLineEdit_textChanged(const QString &ppi_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->ppiLineEdit, ppi_str, 10, 0xffffffff, false, &import_info_.ppi);
|
||||||
|
|
||||||
import_info_.ppi = ppi_str.toULong(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.ppi <= 0xffffffff) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_maxLengthLineEdit_textChanged(const QString &max_frame_len_str)
|
void ImportTextDialog::on_maxLengthLineEdit_textChanged(const QString &max_frame_len_str)
|
||||||
{
|
{
|
||||||
bool conv_ok;
|
check_line_edit(ti_ui_->maxLengthLineEdit, max_frame_len_str, 10, IMPORT_MAX_PACKET, true, &import_info_.max_frame_length);
|
||||||
|
|
||||||
import_info_.max_frame_length = max_frame_len_str.toUShort(&conv_ok, 10);
|
|
||||||
if (conv_ok && import_info_.max_frame_length <= IMPORT_MAX_PACKET) {
|
|
||||||
ok_button_->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ok_button_->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportTextDialog::on_buttonBox_helpRequested()
|
void ImportTextDialog::on_buttonBox_helpRequested()
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
|
|
||||||
#include "ui/text_import.h"
|
#include "ui/text_import.h"
|
||||||
|
|
||||||
|
#include <syntax_line_edit.h>
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QRadioButton>
|
#include <QRadioButton>
|
||||||
|
@ -52,8 +54,9 @@ public:
|
||||||
private:
|
private:
|
||||||
void convertTextFile();
|
void convertTextFile();
|
||||||
void enableHeaderWidgets(bool enable_buttons = true);
|
void enableHeaderWidgets(bool enable_buttons = true);
|
||||||
|
void check_line_edit(SyntaxLineEdit *le, const QString &num_str, int base, guint max_val, bool is_short, guint *val_ptr);
|
||||||
|
|
||||||
Ui::ImportTextDialog *ui;
|
Ui::ImportTextDialog *ti_ui_;
|
||||||
|
|
||||||
QPushButton *ok_button_;
|
QPushButton *ok_button_;
|
||||||
QList<QRadioButton *>encap_buttons_;
|
QList<QRadioButton *>encap_buttons_;
|
||||||
|
|
|
@ -186,13 +186,10 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLineEdit" name="maxLengthLineEdit">
|
<widget class="SyntaxLineEdit" name="maxLengthLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The maximum size of the frames to write to the import capture file (max 64000)</string>
|
<string>The maximum size of the frames to write to the import capture file (max 64000)</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="inputMask">
|
|
||||||
<string>90000; </string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -250,21 +247,21 @@
|
||||||
<item row="1" column="0" colspan="2">
|
<item row="1" column="0" colspan="2">
|
||||||
<layout class="QGridLayout" name="headerGridLayout">
|
<layout class="QGridLayout" name="headerGridLayout">
|
||||||
<item row="3" column="2">
|
<item row="3" column="2">
|
||||||
<widget class="QLineEdit" name="sourcePortLineEdit">
|
<widget class="SyntaxLineEdit" name="sourcePortLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The UDP, TCP or SCTP source port for each frame</string>
|
<string>The UDP, TCP or SCTP source port for each frame</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="2">
|
<item row="6" column="2">
|
||||||
<widget class="QLineEdit" name="ppiLineEdit">
|
<widget class="SyntaxLineEdit" name="ppiLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The SCTP DATA payload protocol identifier for each frame</string>
|
<string>The SCTP DATA payload protocol identifier for each frame</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="2">
|
<item row="4" column="2">
|
||||||
<widget class="QLineEdit" name="destinationPortLineEdit">
|
<widget class="SyntaxLineEdit" name="destinationPortLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The UDP, TCP or SCTP destination port for each frame</string>
|
<string>The UDP, TCP or SCTP destination port for each frame</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -355,7 +352,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QLineEdit" name="ethertypeLineEdit">
|
<widget class="SyntaxLineEdit" name="ethertypeLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The Ethertype value of each frame</string>
|
<string>The Ethertype value of each frame</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -375,7 +372,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="2">
|
<item row="5" column="2">
|
||||||
<widget class="QLineEdit" name="tagLineEdit">
|
<widget class="SyntaxLineEdit" name="tagLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The SCTP verification tag for each frame</string>
|
<string>The SCTP verification tag for each frame</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -396,7 +393,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2">
|
<item row="2" column="2">
|
||||||
<widget class="QLineEdit" name="protocolLineEdit">
|
<widget class="SyntaxLineEdit" name="protocolLineEdit">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>The IPv4 protocol ID for each frame</string>
|
<string>The IPv4 protocol ID for each frame</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -429,6 +426,13 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>SyntaxLineEdit</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>syntax_line_edit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
|
|
@ -119,7 +119,7 @@ MainWelcome::MainWelcome(QWidget *parent) :
|
||||||
// "}"
|
// "}"
|
||||||
)
|
)
|
||||||
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Text color
|
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Text color
|
||||||
.arg(tango_sky_blue_2, 6, 16, QChar('0')) // Selected background
|
.arg(tango_sky_blue_4, 6, 16, QChar('0')) // Selected background
|
||||||
.arg(tango_aluminium_2, 6, 16, QChar('0')) // Hover background
|
.arg(tango_aluminium_2, 6, 16, QChar('0')) // Hover background
|
||||||
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Hover foreground
|
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Hover foreground
|
||||||
);
|
);
|
||||||
|
|
|
@ -363,7 +363,7 @@ void MainWindow::mergeCaptureFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CaptureFileDialog merge_dlg(this, display_filter);
|
CaptureFileDialog merge_dlg(this, cap_file_, display_filter);
|
||||||
int file_type;
|
int file_type;
|
||||||
cf_status_t merge_status;
|
cf_status_t merge_status;
|
||||||
char *in_filenames[2];
|
char *in_filenames[2];
|
||||||
|
@ -593,10 +593,6 @@ void MainWindow::saveAsCaptureFile(capture_file *cf, bool must_support_comments,
|
||||||
int file_type;
|
int file_type;
|
||||||
gboolean compressed;
|
gboolean compressed;
|
||||||
cf_write_status_t status;
|
cf_write_status_t status;
|
||||||
QString file_name_lower;
|
|
||||||
QString file_suffix;
|
|
||||||
GSList *extensions_list, *extension;
|
|
||||||
gboolean add_extension;
|
|
||||||
gchar *dirname;
|
gchar *dirname;
|
||||||
gboolean discard_comments = FALSE;
|
gboolean discard_comments = FALSE;
|
||||||
|
|
||||||
|
@ -605,7 +601,7 @@ void MainWindow::saveAsCaptureFile(capture_file *cf, bool must_support_comments,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CaptureFileDialog save_as_dlg(this);
|
CaptureFileDialog save_as_dlg(this, cf);
|
||||||
|
|
||||||
switch (prefs.gui_fileopen_style) {
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
@ -630,7 +626,7 @@ void MainWindow::saveAsCaptureFile(capture_file *cf, bool must_support_comments,
|
||||||
/* If the file has comments, does the format the user selected
|
/* If the file has comments, does the format the user selected
|
||||||
support them? If not, ask the user whether they want to
|
support them? If not, ask the user whether they want to
|
||||||
discard the comments or choose a different format. */
|
discard the comments or choose a different format. */
|
||||||
switch(save_as_dlg.saveAs(cf, file_name, must_support_comments)) {
|
switch(save_as_dlg.saveAs(file_name, must_support_comments)) {
|
||||||
|
|
||||||
case SAVE:
|
case SAVE:
|
||||||
/* The file can be saved in the specified format as is;
|
/* The file can be saved in the specified format as is;
|
||||||
|
@ -665,52 +661,7 @@ void MainWindow::saveAsCaptureFile(capture_file *cf, bool must_support_comments,
|
||||||
file_type = save_as_dlg.selectedFileType();
|
file_type = save_as_dlg.selectedFileType();
|
||||||
compressed = save_as_dlg.isCompressed();
|
compressed = save_as_dlg.isCompressed();
|
||||||
|
|
||||||
/*
|
fileAddExtension(file_name, file_type, compressed);
|
||||||
* Append the default file extension if there's none given by
|
|
||||||
* the user or if they gave one that's not one of the valid
|
|
||||||
* extensions for the file type.
|
|
||||||
*/
|
|
||||||
file_name_lower = file_name.toLower();
|
|
||||||
extensions_list = wtap_get_file_extensions_list(file_type, FALSE);
|
|
||||||
if (extensions_list != NULL) {
|
|
||||||
/* We have one or more extensions for this file type.
|
|
||||||
Start out assuming we need to add the default one. */
|
|
||||||
add_extension = TRUE;
|
|
||||||
|
|
||||||
/* OK, see if the file has one of those extensions. */
|
|
||||||
for (extension = extensions_list; extension != NULL;
|
|
||||||
extension = g_slist_next(extension)) {
|
|
||||||
file_suffix += tr(".") + (char *)extension->data;
|
|
||||||
if (file_name_lower.endsWith(file_suffix)) {
|
|
||||||
/*
|
|
||||||
* The file name has one of the extensions for
|
|
||||||
* this file type.
|
|
||||||
*/
|
|
||||||
add_extension = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
file_suffix += ".gz";
|
|
||||||
if (file_name_lower.endsWith(file_suffix)) {
|
|
||||||
/*
|
|
||||||
* The file name has one of the extensions for
|
|
||||||
* this file type.
|
|
||||||
*/
|
|
||||||
add_extension = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* We have no extensions for this file type. Don't add one. */
|
|
||||||
add_extension = FALSE;
|
|
||||||
}
|
|
||||||
if (add_extension) {
|
|
||||||
if (wtap_default_file_extension(file_type) != NULL) {
|
|
||||||
file_name += tr(".") + wtap_default_file_extension(file_type);
|
|
||||||
if (compressed) {
|
|
||||||
file_name += ".gz";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//#ifndef _WIN32
|
//#ifndef _WIN32
|
||||||
// /* If the file exists and it's user-immutable or not writable,
|
// /* If the file exists and it's user-immutable or not writable,
|
||||||
|
@ -749,6 +700,197 @@ void MainWindow::saveAsCaptureFile(capture_file *cf, bool must_support_comments,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::exportSelectedPackets() {
|
||||||
|
QString file_name = "";
|
||||||
|
int file_type;
|
||||||
|
gboolean compressed;
|
||||||
|
packet_range_t range;
|
||||||
|
cf_write_status_t status;
|
||||||
|
gchar *dirname;
|
||||||
|
gboolean discard_comments = FALSE;
|
||||||
|
|
||||||
|
if (!cap_file_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* init the packet range */
|
||||||
|
packet_range_init(&range, cap_file_);
|
||||||
|
range.process_filtered = TRUE;
|
||||||
|
range.include_dependents = TRUE;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
CaptureFileDialog esp_dlg(this, cap_file_);
|
||||||
|
|
||||||
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
case FO_STYLE_LAST_OPENED:
|
||||||
|
/* The user has specified that we should start out in the last directory
|
||||||
|
we looked in. If we've already opened a file, use its containing
|
||||||
|
directory, if we could determine it, as the directory, otherwise
|
||||||
|
use the "last opened" directory saved in the preferences file if
|
||||||
|
there was one. */
|
||||||
|
/* This is now the default behaviour in file_selection_new() */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FO_STYLE_SPECIFIED:
|
||||||
|
/* The user has specified that we should always start out in a
|
||||||
|
specified directory; if they've specified that directory,
|
||||||
|
start out by showing the files in that dir. */
|
||||||
|
if (prefs.gui_fileopen_dir[0] != '\0')
|
||||||
|
esp_dlg.setDirectory(prefs.gui_fileopen_dir);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the file has comments, does the format the user selected
|
||||||
|
support them? If not, ask the user whether they want to
|
||||||
|
discard the comments or choose a different format. */
|
||||||
|
switch(esp_dlg.exportSelectedPackets(file_name, &range)) {
|
||||||
|
|
||||||
|
case SAVE:
|
||||||
|
/* The file can be saved in the specified format as is;
|
||||||
|
just drive on and save in the format they selected. */
|
||||||
|
discard_comments = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SAVE_WITHOUT_COMMENTS:
|
||||||
|
/* The file can't be saved in the specified format as is,
|
||||||
|
but it can be saved without the comments, and the user
|
||||||
|
said "OK, discard the comments", so save it in the
|
||||||
|
format they specified without the comments. */
|
||||||
|
discard_comments = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SAVE_IN_ANOTHER_FORMAT:
|
||||||
|
/* There are file formats in which we can save this that
|
||||||
|
support comments, and the user said not to delete the
|
||||||
|
comments. The combo box of file formats has had the
|
||||||
|
formats that don't support comments trimmed from it,
|
||||||
|
so run the dialog again, to let the user decide
|
||||||
|
whether to save in one of those formats or give up. */
|
||||||
|
discard_comments = FALSE;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case CANCELLED:
|
||||||
|
/* The user said "forget it". Just get rid of the dialog box
|
||||||
|
and return. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that we're not going to save on top of the current
|
||||||
|
* capture file.
|
||||||
|
* We do it here so we catch all cases ...
|
||||||
|
* Unfortunately, the file requester gives us an absolute file
|
||||||
|
* name and the read file name may be relative (if supplied on
|
||||||
|
* the command line). From Joerg Mayer.
|
||||||
|
*/
|
||||||
|
if (files_identical(cap_file_->filename, file_name.toUtf8().constData())) {
|
||||||
|
QMessageBox msg_box;
|
||||||
|
gchar *display_basename = g_filename_display_basename(file_name.toUtf8().constData());
|
||||||
|
|
||||||
|
msg_box.setIcon(QMessageBox::Critical);
|
||||||
|
msg_box.setText(QString(tr("Unable to export to \"%1\".").arg(display_basename)));
|
||||||
|
msg_box.setInformativeText(tr("You cannot export packets to the current capture file."));
|
||||||
|
msg_box.setStandardButtons(QMessageBox::Ok);
|
||||||
|
msg_box.setDefaultButton(QMessageBox::Ok);
|
||||||
|
msg_box.exec();
|
||||||
|
g_free(display_basename);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
file_type = esp_dlg.selectedFileType();
|
||||||
|
compressed = esp_dlg.isCompressed();
|
||||||
|
fileAddExtension(file_name, file_type, compressed);
|
||||||
|
|
||||||
|
//#ifndef _WIN32
|
||||||
|
// /* If the file exists and it's user-immutable or not writable,
|
||||||
|
// ask the user whether they want to override that. */
|
||||||
|
// if (!file_target_unwritable_ui(top_level, file_name.toUtf8().constData())) {
|
||||||
|
// /* They don't. Let them try another file name or cancel. */
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
/* Attempt to save the file */
|
||||||
|
status = cf_export_specified_packets(cap_file_, file_name.toUtf8().constData(), &range, file_type, compressed);
|
||||||
|
switch (status) {
|
||||||
|
|
||||||
|
case CF_WRITE_OK:
|
||||||
|
/* The save succeeded; we're done. */
|
||||||
|
/* Save the directory name for future file dialogs. */
|
||||||
|
dirname = get_dirname(file_name.toUtf8().data()); /* Overwrites cf_name */
|
||||||
|
set_last_open_dir(dirname);
|
||||||
|
/* If we discarded comments, redraw the packet list to reflect
|
||||||
|
any packets that no longer have comments. */
|
||||||
|
if (discard_comments)
|
||||||
|
packet_list_queue_draw();
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CF_WRITE_ERROR:
|
||||||
|
/* The save failed; let the user try again. */
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case CF_WRITE_ABORTED:
|
||||||
|
/* The user aborted the save; just return. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::fileAddExtension(QString &file_name, int file_type, bool compressed) {
|
||||||
|
QString file_name_lower;
|
||||||
|
QString file_suffix;
|
||||||
|
GSList *extensions_list, *extension;
|
||||||
|
gboolean add_extension;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Append the default file extension if there's none given by
|
||||||
|
* the user or if they gave one that's not one of the valid
|
||||||
|
* extensions for the file type.
|
||||||
|
*/
|
||||||
|
file_name_lower = file_name.toLower();
|
||||||
|
extensions_list = wtap_get_file_extensions_list(file_type, FALSE);
|
||||||
|
if (extensions_list != NULL) {
|
||||||
|
/* We have one or more extensions for this file type.
|
||||||
|
Start out assuming we need to add the default one. */
|
||||||
|
add_extension = TRUE;
|
||||||
|
|
||||||
|
/* OK, see if the file has one of those extensions. */
|
||||||
|
for (extension = extensions_list; extension != NULL;
|
||||||
|
extension = g_slist_next(extension)) {
|
||||||
|
file_suffix += tr(".") + (char *)extension->data;
|
||||||
|
if (file_name_lower.endsWith(file_suffix)) {
|
||||||
|
/*
|
||||||
|
* The file name has one of the extensions for
|
||||||
|
* this file type.
|
||||||
|
*/
|
||||||
|
add_extension = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
file_suffix += ".gz";
|
||||||
|
if (file_name_lower.endsWith(file_suffix)) {
|
||||||
|
/*
|
||||||
|
* The file name has one of the extensions for
|
||||||
|
* this file type.
|
||||||
|
*/
|
||||||
|
add_extension = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* We have no extensions for this file type. Don't add one. */
|
||||||
|
add_extension = FALSE;
|
||||||
|
}
|
||||||
|
if (add_extension) {
|
||||||
|
if (wtap_default_file_extension(file_type) != NULL) {
|
||||||
|
file_name += tr(".") + wtap_default_file_extension(file_type);
|
||||||
|
if (compressed) {
|
||||||
|
file_name += ".gz";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
bool MainWindow::testCaptureFileClose(bool from_quit, QString &before_what) {
|
||||||
bool capture_in_progress = FALSE;
|
bool capture_in_progress = FALSE;
|
||||||
|
|
||||||
|
@ -955,8 +1097,7 @@ void MainWindow::setMenusForCaptureFile(bool force_disable)
|
||||||
* "Export Specified Packets..." should be available only if
|
* "Export Specified Packets..." should be available only if
|
||||||
* we can write the file out in at least one format.
|
* we can write the file out in at least one format.
|
||||||
*/
|
*/
|
||||||
// set_menu_sensitivity(ui_manager_main_menubar, "/Menubar/FileMenu/ExportSpecifiedPackets",
|
main_ui_->actionFileExportPackets->setEnabled(cf_can_write_with_wiretap(cap_file_));
|
||||||
// cf_can_write_with_wiretap(cf));
|
|
||||||
main_ui_->actionFileExportPacketDissections->setEnabled(true);
|
main_ui_->actionFileExportPacketDissections->setEnabled(true);
|
||||||
main_ui_->actionFileExportPacketBytes->setEnabled(true);
|
main_ui_->actionFileExportPacketBytes->setEnabled(true);
|
||||||
main_ui_->actionFileExportSSLSessionKeys->setEnabled(true);
|
main_ui_->actionFileExportSSLSessionKeys->setEnabled(true);
|
||||||
|
@ -978,6 +1119,7 @@ void MainWindow::setMenusForCaptureInProgress(bool capture_in_progress) {
|
||||||
main_ui_->menuFileSet->setEnabled(!capture_in_progress);
|
main_ui_->menuFileSet->setEnabled(!capture_in_progress);
|
||||||
main_ui_->actionFileQuit->setEnabled(true);
|
main_ui_->actionFileQuit->setEnabled(true);
|
||||||
|
|
||||||
|
qDebug() << "FIX: packet list heading menu sensitivity";
|
||||||
// set_menu_sensitivity(ui_manager_packet_list_heading, "/PacketListHeadingPopup/SortAscending",
|
// set_menu_sensitivity(ui_manager_packet_list_heading, "/PacketListHeadingPopup/SortAscending",
|
||||||
// !capture_in_progress);
|
// !capture_in_progress);
|
||||||
// set_menu_sensitivity(ui_manager_packet_list_heading, "/PacketListHeadingPopup/SortDescending",
|
// set_menu_sensitivity(ui_manager_packet_list_heading, "/PacketListHeadingPopup/SortDescending",
|
||||||
|
|
|
@ -100,6 +100,9 @@ private:
|
||||||
void importCaptureFile();
|
void importCaptureFile();
|
||||||
void saveCaptureFile(capture_file *cf, bool stay_closed);
|
void saveCaptureFile(capture_file *cf, bool stay_closed);
|
||||||
void saveAsCaptureFile(capture_file *cf, bool must_support_comments, bool stay_closed);
|
void saveAsCaptureFile(capture_file *cf, bool must_support_comments, bool stay_closed);
|
||||||
|
void exportSelectedPackets();
|
||||||
|
|
||||||
|
void fileAddExtension(QString &file_name, int file_type, bool compressed);
|
||||||
bool testCaptureFileClose(bool from_quit = false, QString& before_what = *new QString());
|
bool testCaptureFileClose(bool from_quit = false, QString& before_what = *new QString());
|
||||||
void captureStop();
|
void captureStop();
|
||||||
|
|
||||||
|
@ -155,6 +158,7 @@ private slots:
|
||||||
void on_actionFileSetListFiles_triggered();
|
void on_actionFileSetListFiles_triggered();
|
||||||
void on_actionFileSetNextFile_triggered();
|
void on_actionFileSetNextFile_triggered();
|
||||||
void on_actionFileSetPreviousFile_triggered();
|
void on_actionFileSetPreviousFile_triggered();
|
||||||
|
void on_actionFileExportPackets_triggered();
|
||||||
|
|
||||||
void on_actionGoGoToPacket_triggered();
|
void on_actionGoGoToPacket_triggered();
|
||||||
void resetPreviousFocus();
|
void resetPreviousFocus();
|
||||||
|
|
|
@ -78,7 +78,7 @@ void MainWindow::openCaptureFile(QString &cf_path)
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
if (cf_path.isEmpty()) {
|
if (cf_path.isEmpty()) {
|
||||||
CaptureFileDialog open_dlg(this, display_filter);
|
CaptureFileDialog open_dlg(this, cap_file_, display_filter);
|
||||||
|
|
||||||
switch (prefs.gui_fileopen_style) {
|
switch (prefs.gui_fileopen_style) {
|
||||||
|
|
||||||
|
@ -537,6 +537,11 @@ void MainWindow::on_actionFileSaveAs_triggered()
|
||||||
saveAsCaptureFile(cap_file_, FALSE, TRUE);
|
saveAsCaptureFile(cap_file_, FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_actionFileExportPackets_triggered()
|
||||||
|
{
|
||||||
|
exportSelectedPackets();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionFileSetListFiles_triggered()
|
void MainWindow::on_actionFileSetListFiles_triggered()
|
||||||
{
|
{
|
||||||
file_set_dialog_.exec();
|
file_set_dialog_.exec();
|
||||||
|
|
|
@ -0,0 +1,331 @@
|
||||||
|
/* packet_range_group_box.cpp
|
||||||
|
*
|
||||||
|
* $Id: capture_file_dialog.h 45164 2012-09-27 02:43:09Z eapache $
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "packet_range_group_box.h"
|
||||||
|
#include "ui_packet_range_group_box.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
PacketRangeGroupBox::PacketRangeGroupBox(QWidget *parent) :
|
||||||
|
QGroupBox(parent),
|
||||||
|
pr_ui_(new Ui::PacketRangeGroupBox),
|
||||||
|
range_(NULL),
|
||||||
|
syntax_state_(SyntaxLineEdit::Empty)
|
||||||
|
{
|
||||||
|
pr_ui_->setupUi(this);
|
||||||
|
|
||||||
|
pr_ui_->displayedButton->setChecked(true);
|
||||||
|
pr_ui_->allButton->setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
PacketRangeGroupBox::~PacketRangeGroupBox()
|
||||||
|
{
|
||||||
|
delete pr_ui_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::initRange(packet_range_t *range) {
|
||||||
|
if (!range) return;
|
||||||
|
|
||||||
|
range_ = range;
|
||||||
|
|
||||||
|
if (range_->process_filtered) {
|
||||||
|
pr_ui_->displayedButton->setChecked(true);
|
||||||
|
} else {
|
||||||
|
pr_ui_->capturedButton->setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range_->user_range) {
|
||||||
|
pr_ui_->rangeLineEdit->setText(range_convert_range(range_->user_range));
|
||||||
|
}
|
||||||
|
updateCounts();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PacketRangeGroupBox::isValid() {
|
||||||
|
if (pr_ui_->rangeButton->isChecked() && syntax_state_ != SyntaxLineEdit::Empty) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::updateCounts() {
|
||||||
|
SyntaxLineEdit::SyntaxState orig_ss = syntax_state_;
|
||||||
|
bool displayed_checked = pr_ui_->displayedButton->isChecked();
|
||||||
|
int selected_num;
|
||||||
|
bool can_select;
|
||||||
|
bool selected_packets;
|
||||||
|
int ignored_cnt = 0, displayed_ignored_cnt = 0;
|
||||||
|
int label_count;
|
||||||
|
|
||||||
|
if (!range_ || !range_->cf) return;
|
||||||
|
|
||||||
|
if (range_->displayed_cnt != 0) {
|
||||||
|
pr_ui_->displayedButton->setEnabled(true);
|
||||||
|
} else {
|
||||||
|
displayed_checked = false;
|
||||||
|
pr_ui_->capturedButton->setChecked(true);
|
||||||
|
pr_ui_->displayedButton->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// All / Captured
|
||||||
|
pr_ui_->allCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
label_count = range_->cf->count;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->ignored_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->allCapturedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
|
||||||
|
// All / Displayed
|
||||||
|
pr_ui_->allDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
if (range_->include_dependents) {
|
||||||
|
label_count = range_->displayed_plus_dependents_cnt;
|
||||||
|
} else {
|
||||||
|
label_count = range_->displayed_cnt;
|
||||||
|
}
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->displayed_ignored_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->allDisplayedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
|
||||||
|
// Selected / Captured + Displayed
|
||||||
|
selected_num = (range_->cf->current_frame) ? range_->cf->current_frame->num : 0;
|
||||||
|
can_select = (selected_num != 0);
|
||||||
|
if (can_select) {
|
||||||
|
pr_ui_->selectedButton->setEnabled(true);
|
||||||
|
pr_ui_->selectedCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
pr_ui_->selectedDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
} else {
|
||||||
|
if (range_->process == range_process_selected) {
|
||||||
|
pr_ui_->allButton->setChecked(true);
|
||||||
|
}
|
||||||
|
pr_ui_->selectedButton->setEnabled(false);
|
||||||
|
pr_ui_->selectedCapturedLabel->setEnabled(false);
|
||||||
|
pr_ui_->selectedDisplayedLabel->setEnabled(false);
|
||||||
|
}
|
||||||
|
if ((range_->remove_ignored && can_select && range_->cf->current_frame->flags.ignored) || selected_num < 1) {
|
||||||
|
pr_ui_->selectedCapturedLabel->setText("0");
|
||||||
|
pr_ui_->selectedDisplayedLabel->setText("0");
|
||||||
|
} else {
|
||||||
|
pr_ui_->selectedCapturedLabel->setText("1");
|
||||||
|
pr_ui_->selectedDisplayedLabel->setText("1");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marked / Captured + Displayed
|
||||||
|
if (displayed_checked) {
|
||||||
|
selected_packets = (range_->displayed_marked_cnt != 0);
|
||||||
|
} else {
|
||||||
|
selected_packets = (range_->cf->marked_count > 0);
|
||||||
|
}
|
||||||
|
if (selected_packets) {
|
||||||
|
pr_ui_->markedButton->setEnabled(true);
|
||||||
|
pr_ui_->markedCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
pr_ui_->markedDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
} else {
|
||||||
|
if (range_->process == range_process_marked) {
|
||||||
|
pr_ui_->allButton->setChecked(true);
|
||||||
|
}
|
||||||
|
pr_ui_->markedButton->setEnabled(false);
|
||||||
|
pr_ui_->markedCapturedLabel->setEnabled(false);
|
||||||
|
pr_ui_->markedDisplayedLabel->setEnabled(false);
|
||||||
|
}
|
||||||
|
label_count = range_->cf->marked_count;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->ignored_marked_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->markedCapturedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
label_count = range_->cf->marked_count;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->displayed_ignored_marked_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->markedDisplayedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
|
||||||
|
// First to last marked / Captured + Displayed
|
||||||
|
if (displayed_checked) {
|
||||||
|
selected_packets = (range_->displayed_mark_range_cnt != 0);
|
||||||
|
} else {
|
||||||
|
selected_packets = (range_->mark_range_cnt != 0);
|
||||||
|
}
|
||||||
|
if (selected_packets) {
|
||||||
|
pr_ui_->ftlMarkedButton->setEnabled(true);
|
||||||
|
pr_ui_->ftlCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
pr_ui_->ftlDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
} else {
|
||||||
|
if (range_->process == range_process_marked_range) {
|
||||||
|
pr_ui_->allButton->setChecked(true);
|
||||||
|
}
|
||||||
|
pr_ui_->ftlMarkedButton->setEnabled(false);
|
||||||
|
pr_ui_->ftlCapturedLabel->setEnabled(false);
|
||||||
|
pr_ui_->ftlDisplayedLabel->setEnabled(false);
|
||||||
|
}
|
||||||
|
label_count = range_->mark_range_cnt;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->ignored_mark_range_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->ftlCapturedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
label_count = range_->displayed_mark_range_cnt;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->displayed_ignored_mark_range_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->ftlDisplayedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
|
||||||
|
// User specified / Captured + Displayed
|
||||||
|
|
||||||
|
pr_ui_->rangeButton->setEnabled(true);
|
||||||
|
pr_ui_->rangeCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
pr_ui_->rangeDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
|
||||||
|
packet_range_convert_str(range_, pr_ui_->rangeLineEdit->text().toUtf8().constData());
|
||||||
|
|
||||||
|
switch (packet_range_check(range_)) {
|
||||||
|
|
||||||
|
case CVT_NO_ERROR:
|
||||||
|
label_count = range_->user_range_cnt;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->ignored_user_range_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->rangeCapturedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
label_count = range_->displayed_user_range_cnt;
|
||||||
|
if (range_->remove_ignored) {
|
||||||
|
label_count -= range_->displayed_ignored_user_range_cnt;
|
||||||
|
}
|
||||||
|
pr_ui_->rangeDisplayedLabel->setText(QString("%1").arg(label_count));
|
||||||
|
syntax_state_ = SyntaxLineEdit::Empty;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CVT_SYNTAX_ERROR:
|
||||||
|
pr_ui_->rangeCapturedLabel->setText("<small><i>Bad range</i></small>");
|
||||||
|
pr_ui_->rangeDisplayedLabel->setText("-");
|
||||||
|
syntax_state_ = SyntaxLineEdit::Invalid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CVT_NUMBER_TOO_BIG:
|
||||||
|
pr_ui_->rangeCapturedLabel->setText("<small><i>Number too large</i></small>");
|
||||||
|
pr_ui_->rangeDisplayedLabel->setText("-");
|
||||||
|
syntax_state_ = SyntaxLineEdit::Invalid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignored
|
||||||
|
switch(range_->process) {
|
||||||
|
case(range_process_all):
|
||||||
|
ignored_cnt = range_->ignored_cnt;
|
||||||
|
displayed_ignored_cnt = range_->displayed_ignored_cnt;
|
||||||
|
break;
|
||||||
|
case(range_process_selected):
|
||||||
|
ignored_cnt = (can_select && range_->cf->current_frame->flags.ignored) ? 1 : 0;
|
||||||
|
displayed_ignored_cnt = ignored_cnt;
|
||||||
|
break;
|
||||||
|
case(range_process_marked):
|
||||||
|
ignored_cnt = range_->ignored_marked_cnt;
|
||||||
|
displayed_ignored_cnt = range_->displayed_ignored_marked_cnt;
|
||||||
|
break;
|
||||||
|
case(range_process_marked_range):
|
||||||
|
ignored_cnt = range_->ignored_mark_range_cnt;
|
||||||
|
displayed_ignored_cnt = range_->displayed_ignored_mark_range_cnt;
|
||||||
|
break;
|
||||||
|
case(range_process_user_range):
|
||||||
|
ignored_cnt = range_->ignored_user_range_cnt;
|
||||||
|
displayed_ignored_cnt = range_->displayed_ignored_user_range_cnt;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (displayed_checked)
|
||||||
|
selected_packets = (displayed_ignored_cnt != 0);
|
||||||
|
else
|
||||||
|
selected_packets = (ignored_cnt != 0);
|
||||||
|
|
||||||
|
if (selected_packets) {
|
||||||
|
pr_ui_->ignoredCheckBox->setEnabled(true);
|
||||||
|
pr_ui_->ignoredCapturedLabel->setEnabled(!displayed_checked);
|
||||||
|
pr_ui_->ignoredDisplayedLabel->setEnabled(displayed_checked);
|
||||||
|
} else {
|
||||||
|
pr_ui_->ignoredCheckBox->setEnabled(false);
|
||||||
|
pr_ui_->ignoredCapturedLabel->setEnabled(false);
|
||||||
|
pr_ui_->ignoredDisplayedLabel->setEnabled(false);
|
||||||
|
}
|
||||||
|
pr_ui_->ignoredCapturedLabel->setText(QString("%1").arg(ignored_cnt));
|
||||||
|
pr_ui_->ignoredDisplayedLabel->setText(QString("%1").arg(displayed_ignored_cnt));
|
||||||
|
|
||||||
|
if (orig_ss != syntax_state_) {
|
||||||
|
pr_ui_->rangeLineEdit->setSyntaxState(syntax_state_);
|
||||||
|
emit validityChanged(isValid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slots
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_rangeLineEdit_textChanged(const QString &range_str)
|
||||||
|
{
|
||||||
|
Q_UNUSED(range_str)
|
||||||
|
if (!pr_ui_->rangeButton->isChecked()) {
|
||||||
|
pr_ui_->rangeButton->setChecked(true);
|
||||||
|
} else {
|
||||||
|
updateCounts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::processButtonToggled(bool checked, packet_range_e process) {
|
||||||
|
if (checked && range_) {
|
||||||
|
range_->process = process;
|
||||||
|
}
|
||||||
|
updateCounts();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_allButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
processButtonToggled(checked, range_process_all);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_selectedButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
processButtonToggled(checked, range_process_selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_markedButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
processButtonToggled(checked, range_process_marked);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_ftlMarkedButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
processButtonToggled(checked, range_process_marked_range);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_rangeButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
processButtonToggled(checked, range_process_user_range);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_capturedButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
if (checked) updateCounts();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketRangeGroupBox::on_displayedButton_toggled(bool checked)
|
||||||
|
{
|
||||||
|
if (checked) updateCounts();
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
/* packet_range_group_box.h
|
||||||
|
*
|
||||||
|
* $Id: capture_file_dialog.h 45164 2012-09-27 02:43:09Z eapache $
|
||||||
|
*
|
||||||
|
* Wireshark - Network traffic analyzer
|
||||||
|
* By Gerald Combs <gerald@wireshark.org>
|
||||||
|
* Copyright 1998 Gerald Combs
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PACKET_RANGE_GROUP_BOX_H
|
||||||
|
#define PACKET_RANGE_GROUP_BOX_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "packet-range.h"
|
||||||
|
|
||||||
|
#include "syntax_line_edit.h"
|
||||||
|
#include <QGroupBox>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class PacketRangeGroupBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PacketRangeGroupBox : public QGroupBox
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit PacketRangeGroupBox(QWidget *parent = 0);
|
||||||
|
~PacketRangeGroupBox();
|
||||||
|
void initRange(packet_range_t *range);
|
||||||
|
bool isValid();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void validityChanged(bool is_valid);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateCounts();
|
||||||
|
void processButtonToggled(bool checked, packet_range_e process);
|
||||||
|
|
||||||
|
Ui::PacketRangeGroupBox *pr_ui_;
|
||||||
|
packet_range_t *range_;
|
||||||
|
SyntaxLineEdit::SyntaxState syntax_state_;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_rangeLineEdit_textChanged(const QString &range_str);
|
||||||
|
|
||||||
|
void on_allButton_toggled(bool checked);
|
||||||
|
|
||||||
|
void on_selectedButton_toggled(bool checked);
|
||||||
|
|
||||||
|
void on_markedButton_toggled(bool checked);
|
||||||
|
|
||||||
|
void on_ftlMarkedButton_toggled(bool checked);
|
||||||
|
|
||||||
|
void on_rangeButton_toggled(bool checked);
|
||||||
|
|
||||||
|
void on_capturedButton_toggled(bool checked);
|
||||||
|
void on_displayedButton_toggled(bool checked);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PACKET_RANGE_GROUP_BOX_H
|
|
@ -0,0 +1,261 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>PacketRangeGroupBox</class>
|
||||||
|
<widget class="QGroupBox" name="PacketRangeGroupBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>454</width>
|
||||||
|
<height>241</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Packet Range</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="2" column="3">
|
||||||
|
<widget class="QLabel" name="selectedDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QRadioButton" name="displayedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Displayed</string>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">capturedDisplayedButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLabel" name="allCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<widget class="QRadioButton" name="markedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Marked packets only</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">packetSelectionButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QRadioButton" name="rangeButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Range:</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">packetSelectionButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="3">
|
||||||
|
<widget class="QLabel" name="rangeDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="ignoredCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove &ignored packets</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="3">
|
||||||
|
<widget class="QLabel" name="markedDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" colspan="2">
|
||||||
|
<widget class="QRadioButton" name="ftlMarkedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>First &to last marked</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">packetSelectionButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLabel" name="selectedCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QRadioButton" name="allButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&All packets</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">packetSelectionButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLabel" name="ftlCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QLabel" name="allDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QLabel" name="rangeCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QRadioButton" name="selectedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Selected packets only</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">packetSelectionButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QRadioButton" name="capturedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Captured</string>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">capturedDisplayedButtonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLabel" name="markedCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>63</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="SyntaxLineEdit" name="rangeLineEdit">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="3">
|
||||||
|
<widget class="QLabel" name="ftlDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="2">
|
||||||
|
<widget class="QLabel" name="ignoredCapturedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="3">
|
||||||
|
<widget class="QLabel" name="ignoredDisplayedLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>-</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>SyntaxLineEdit</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>syntax_line_edit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
<buttongroups>
|
||||||
|
<buttongroup name="packetSelectionButtonGroup"/>
|
||||||
|
<buttongroup name="capturedDisplayedButtonGroup"/>
|
||||||
|
</buttongroups>
|
||||||
|
</ui>
|
|
@ -0,0 +1,49 @@
|
||||||
|
#include "syntax_line_edit.h"
|
||||||
|
|
||||||
|
#include "tango_colors.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
SyntaxLineEdit::SyntaxLineEdit(QWidget *parent) :
|
||||||
|
QLineEdit(parent)
|
||||||
|
{
|
||||||
|
state_style_sheet_ = QString(
|
||||||
|
"SyntaxLineEdit[syntaxState=\"%1\"] {"
|
||||||
|
" color: #%4;"
|
||||||
|
" background-color: #%5;"
|
||||||
|
"}"
|
||||||
|
|
||||||
|
"SyntaxLineEdit[syntaxState=\"%2\"] {"
|
||||||
|
" color: #%4;"
|
||||||
|
" background-color: #%6;"
|
||||||
|
"}"
|
||||||
|
|
||||||
|
"SyntaxLineEdit[syntaxState=\"%3\"] {"
|
||||||
|
" color: #%4;"
|
||||||
|
" background-color: #%7;"
|
||||||
|
"}"
|
||||||
|
)
|
||||||
|
.arg(Invalid)
|
||||||
|
.arg(Deprecated)
|
||||||
|
.arg(Valid)
|
||||||
|
.arg(tango_aluminium_6, 6, 16, QChar('0')) // Foreground
|
||||||
|
.arg(tango_scarlet_red_1, 6, 16, QChar('0')) // Invalid
|
||||||
|
.arg(tango_butter_1, 6, 16, QChar('0')) // Deprecated
|
||||||
|
.arg(tango_chameleon_1, 6, 16, QChar('0')) // Valid
|
||||||
|
;
|
||||||
|
setStyleSheet(tr(""));
|
||||||
|
setSyntaxState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyntaxLineEdit::setSyntaxState(SyntaxState state) {
|
||||||
|
syntax_state_ = state;
|
||||||
|
setStyleSheet(style_sheet_);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SyntaxLineEdit::styleSheet() const {
|
||||||
|
return style_sheet_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyntaxLineEdit::setStyleSheet(const QString &style_sheet) {
|
||||||
|
style_sheet_ = style_sheet;
|
||||||
|
QLineEdit::setStyleSheet(style_sheet_ + state_style_sheet_);
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef SYNTAX_LINE_EDIT_H
|
||||||
|
#define SYNTAX_LINE_EDIT_H
|
||||||
|
|
||||||
|
#include <QLineEdit>
|
||||||
|
|
||||||
|
class SyntaxLineEdit : public QLineEdit
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(SyntaxState syntaxState READ syntaxState)
|
||||||
|
Q_ENUMS(SyntaxState)
|
||||||
|
public:
|
||||||
|
explicit SyntaxLineEdit(QWidget *parent = 0);
|
||||||
|
enum SyntaxState { Empty, Invalid, Deprecated, Valid };
|
||||||
|
|
||||||
|
SyntaxState syntaxState() const { return syntax_state_; }
|
||||||
|
void setSyntaxState(SyntaxState state = Empty);
|
||||||
|
QString styleSheet() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
SyntaxState syntax_state_;
|
||||||
|
QString style_sheet_;
|
||||||
|
QString state_style_sheet_;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setStyleSheet(const QString &style_sheet);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SYNTAX_LINE_EDIT_H
|
|
@ -26,28 +26,9 @@
|
||||||
#define __TANGO_COLORS_H__
|
#define __TANGO_COLORS_H__
|
||||||
|
|
||||||
// http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines
|
// http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines
|
||||||
|
// with added hues from http://emilis.info/other/extended_tango/
|
||||||
|
// (all colors except aluminium)
|
||||||
|
|
||||||
const QRgb tango_butter_1 = 0xfce94f;
|
|
||||||
const QRgb tango_butter_2 = 0xedd400;
|
|
||||||
const QRgb tango_butter_3 = 0xc4a000;
|
|
||||||
const QRgb tango_chameleon_1 = 0x8ae234;
|
|
||||||
const QRgb tango_chameleon_2 = 0x73d216;
|
|
||||||
const QRgb tango_chameleon_3 = 0x4e9a06;
|
|
||||||
const QRgb tango_orange_1 = 0xfcaf3e;
|
|
||||||
const QRgb tango_orange_2 = 0xf57900;
|
|
||||||
const QRgb tango_orange_3 = 0xce5c00;
|
|
||||||
const QRgb tango_sky_blue_1 = 0x729fcf;
|
|
||||||
const QRgb tango_sky_blue_2 = 0x3465a4;
|
|
||||||
const QRgb tango_sky_blue_3 = 0x204a87;
|
|
||||||
const QRgb tango_plum_1 = 0xad7fa8;
|
|
||||||
const QRgb tango_plum_2 = 0x75507b;
|
|
||||||
const QRgb tango_plum_3 = 0x5c3566;
|
|
||||||
const QRgb tango_chocolate_1 = 0xe9b96e;
|
|
||||||
const QRgb tango_chocolate_2 = 0xc17d11;
|
|
||||||
const QRgb tango_chocolate_3 = 0x8f5902;
|
|
||||||
const QRgb tango_scarlet_red_1 = 0xef2929;
|
|
||||||
const QRgb tango_scarlet_red_2 = 0xcc0000;
|
|
||||||
const QRgb tango_scarlet_red_3 = 0xa40000;
|
|
||||||
const QRgb tango_aluminium_1 = 0xeeeeec;
|
const QRgb tango_aluminium_1 = 0xeeeeec;
|
||||||
const QRgb tango_aluminium_2 = 0xd3d7cf;
|
const QRgb tango_aluminium_2 = 0xd3d7cf;
|
||||||
const QRgb tango_aluminium_3 = 0xbabdb6;
|
const QRgb tango_aluminium_3 = 0xbabdb6;
|
||||||
|
@ -55,4 +36,53 @@ const QRgb tango_aluminium_4 = 0x888a85;
|
||||||
const QRgb tango_aluminium_5 = 0x555753;
|
const QRgb tango_aluminium_5 = 0x555753;
|
||||||
const QRgb tango_aluminium_6 = 0x2e3436;
|
const QRgb tango_aluminium_6 = 0x2e3436;
|
||||||
|
|
||||||
|
const QRgb tango_butter_1 = 0xfeffd0;
|
||||||
|
const QRgb tango_butter_2 = 0xfffc9c;
|
||||||
|
const QRgb tango_butter_3 = 0xfce94f;
|
||||||
|
const QRgb tango_butter_4 = 0xedd400;
|
||||||
|
const QRgb tango_butter_5 = 0xc4a000;
|
||||||
|
const QRgb tango_butter_6 = 0x725000;
|
||||||
|
|
||||||
|
const QRgb tango_chameleon_1 = 0xe4ffc7;
|
||||||
|
const QRgb tango_chameleon_2 = 0xb7f774;
|
||||||
|
const QRgb tango_chameleon_3 = 0x8ae234;
|
||||||
|
const QRgb tango_chameleon_4 = 0x73d216;
|
||||||
|
const QRgb tango_chameleon_5 = 0x4e9a06;
|
||||||
|
const QRgb tango_chameleon_6 = 0x2a5703;
|
||||||
|
|
||||||
|
const QRgb tango_chocolate_1 = 0xfaf0d7;
|
||||||
|
const QRgb tango_chocolate_2 = 0xefd0a7;
|
||||||
|
const QRgb tango_chocolate_3 = 0xe9b96e;
|
||||||
|
const QRgb tango_chocolate_4 = 0xc17d11;
|
||||||
|
const QRgb tango_chocolate_5 = 0x8f5902;
|
||||||
|
const QRgb tango_chocolate_6 = 0x503000;
|
||||||
|
|
||||||
|
const QRgb tango_orange_1 = 0xfff0d7;
|
||||||
|
const QRgb tango_orange_2 = 0xffd797;
|
||||||
|
const QRgb tango_orange_3 = 0xfcaf3e;
|
||||||
|
const QRgb tango_orange_4 = 0xf57900;
|
||||||
|
const QRgb tango_orange_5 = 0xce5c00;
|
||||||
|
const QRgb tango_orange_6 = 0x8c3700;
|
||||||
|
|
||||||
|
const QRgb tango_plum_1 = 0xfce0ff;
|
||||||
|
const QRgb tango_plum_2 = 0xe0c0e4;
|
||||||
|
const QRgb tango_plum_3 = 0xad7fa8;
|
||||||
|
const QRgb tango_plum_4 = 0x75507b;
|
||||||
|
const QRgb tango_plum_5 = 0x5c3566;
|
||||||
|
const QRgb tango_plum_6 = 0x371740;
|
||||||
|
|
||||||
|
const QRgb tango_scarlet_red_1 = 0xffcccc;
|
||||||
|
const QRgb tango_scarlet_red_2 = 0xf78787;
|
||||||
|
const QRgb tango_scarlet_red_3 = 0xef2929;
|
||||||
|
const QRgb tango_scarlet_red_4 = 0xcc0000;
|
||||||
|
const QRgb tango_scarlet_red_5 = 0xa40000;
|
||||||
|
const QRgb tango_scarlet_red_6 = 0x600000;
|
||||||
|
|
||||||
|
const QRgb tango_sky_blue_1 = 0xdaeeff;
|
||||||
|
const QRgb tango_sky_blue_2 = 0x97c4f0;
|
||||||
|
const QRgb tango_sky_blue_3 = 0x729fcf;
|
||||||
|
const QRgb tango_sky_blue_4 = 0x3465a4;
|
||||||
|
const QRgb tango_sky_blue_5 = 0x204a87;
|
||||||
|
const QRgb tango_sky_blue_6 = 0x0a3050;
|
||||||
|
|
||||||
#endif // __TANGO_COLORS_H__
|
#endif // __TANGO_COLORS_H__
|
||||||
|
|
|
@ -1795,7 +1795,7 @@ export_specified_packets_file_hook_proc(HWND sf_hwnd, UINT msg, WPARAM w_param,
|
||||||
if (files_identical(cfile.filename, file_name8_selected)) {
|
if (files_identical(cfile.filename, file_name8_selected)) {
|
||||||
/* XXX: Is MessageBox the best way to pop up an error ? How to make text bold ? */
|
/* XXX: Is MessageBox the best way to pop up an error ? How to make text bold ? */
|
||||||
gchar *str = g_strdup_printf(
|
gchar *str = g_strdup_printf(
|
||||||
"Capture File \"%s\" identical to loaded file !!\n\n"
|
"Capture File \"%s\" identical to loaded file.\n\n"
|
||||||
"Please choose a different filename.",
|
"Please choose a different filename.",
|
||||||
file_name8_selected);
|
file_name8_selected);
|
||||||
MessageBox( parent, utf_8to16(str), _T("Error"), MB_ICONERROR | MB_APPLMODAL | MB_OK);
|
MessageBox( parent, utf_8to16(str), _T("Error"), MB_ICONERROR | MB_APPLMODAL | MB_OK);
|
||||||
|
|
Loading…
Reference in New Issue