aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2012-07-21 01:21:41 +0000
committerGerald Combs <gerald@wireshark.org>2012-07-21 01:21:41 +0000
commitd6533eb467b8a3083d3e2c7a1c81a4cf8a540519 (patch)
tree7b0b5eb191419d9f7dbb66f7244411b8aecab69e /ui/qt
parent75564d57c13a2912d644a1ec95897c59175915b2 (diff)
Add display filter and name resolution controls to the standard Qt open
file dialog. We still need to add a preview. svn path=/trunk/; revision=43879
Diffstat (limited to 'ui/qt')
-rw-r--r--ui/qt/capture_file_dialog.cpp64
-rw-r--r--ui/qt/capture_file_dialog.h8
-rw-r--r--ui/qt/display_filter_edit.cpp130
-rw-r--r--ui/qt/display_filter_edit.h15
4 files changed, 150 insertions, 67 deletions
diff --git a/ui/qt/capture_file_dialog.cpp b/ui/qt/capture_file_dialog.cpp
index 709db0bd26..5ba4f54876 100644
--- a/ui/qt/capture_file_dialog.cpp
+++ b/ui/qt/capture_file_dialog.cpp
@@ -36,9 +36,17 @@
#include "packet_list_record.h"
#include "cfile.h"
#include "ui/win32/file_dlg_win32.h"
+#else
+#include "../../epan/addr_resolv.h"
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QCheckBox>
#endif
-//#include <QDebug>
+#include <QDebug>
#ifdef Q_WS_WIN
// All of these routines are required by file_dlg_win32.c.
@@ -112,9 +120,46 @@ CaptureFileDialog::CaptureFileDialog(QWidget *parent, QString &fileName, QString
QFileDialog(parent), m_fileName(fileName), m_displayFilter(displayFilter)
{
#if !defined(Q_WS_WIN)
- setLabelText(QFileDialog::FileName, tr("Wireshark: Open Capture File"));
+ setWindowTitle(tr("Wireshark: Open Capture File"));
setNameFilters(build_file_open_type_list());
setFileMode(QFileDialog::ExistingFile);
+
+ if (!m_fileName.isEmpty()) {
+ selectFile(m_fileName);
+ }
+
+ // Add extra widgets
+ // http://qt-project.org/faq/answer/how_can_i_add_widgets_to_my_qfiledialog_instance
+ setOption(QFileDialog::DontUseNativeDialog, true);
+ QGridLayout *fdGrid = qobject_cast<QGridLayout*>(layout());
+ QHBoxLayout *hBox = new QHBoxLayout();
+ QVBoxLayout *controlsBox = new QVBoxLayout();
+
+ QLabel *dfLabel = new QLabel("Display Filter:");
+ fdGrid->addWidget(dfLabel, fdGrid->rowCount(), 0, 1, 1);
+
+ m_displayFilterEdit = new DisplayFilterEdit(this, true);
+ m_displayFilterEdit->setText(m_displayFilter);
+ fdGrid->addWidget(m_displayFilterEdit, fdGrid->rowCount() - 1, 1, 1, 1);
+
+ fdGrid->addLayout(hBox, fdGrid->rowCount(), 1, 1, -1);
+ hBox->addLayout(controlsBox);
+
+ m_macRes.setText("Enable &MAC name resolution");
+ m_macRes.setChecked(gbl_resolv_flags.mac_name);
+ controlsBox->addWidget(&m_macRes);
+
+ m_transportRes.setText("Enable &transport name resolution");
+ m_transportRes.setChecked(gbl_resolv_flags.transport_name);
+ controlsBox->addWidget(&m_transportRes);
+
+ m_networkRes.setText("Enable &network name resolution");
+ m_networkRes.setChecked(gbl_resolv_flags.network_name);
+ controlsBox->addWidget(&m_networkRes);
+
+ m_externalRes.setText("Use &external name resolver");
+ m_externalRes.setChecked(gbl_resolv_flags.use_external_net_name_resolver);
+ controlsBox->addWidget(&m_externalRes);
#endif
}
@@ -139,16 +184,21 @@ int CaptureFileDialog::exec() {
#else // not Q_WS_WINDOWS
int CaptureFileDialog::exec() {
- QFileDialog::exec();
-
m_fileName.clear();
m_displayFilter.clear();
- if (selectedFiles().length() > 0) {
+ if (QFileDialog::exec() && selectedFiles().length() > 0) {
m_fileName.append(selectedFiles()[0]);
- return 1;
+ m_displayFilter.append(m_displayFilterEdit->text());
+
+ gbl_resolv_flags.mac_name = m_macRes.isChecked();
+ gbl_resolv_flags.transport_name = m_transportRes.isChecked();
+ gbl_resolv_flags.network_name = m_networkRes.isChecked();
+ gbl_resolv_flags.use_external_net_name_resolver = m_externalRes.isChecked();
+
+ return QDialog::Accepted;
} else {
- return 0;
+ return QDialog::Rejected;
}
}
diff --git a/ui/qt/capture_file_dialog.h b/ui/qt/capture_file_dialog.h
index db4a43777d..71f1a52f24 100644
--- a/ui/qt/capture_file_dialog.h
+++ b/ui/qt/capture_file_dialog.h
@@ -24,6 +24,8 @@
#ifndef CAPTURE_FILE_DIALOG_H
#define CAPTURE_FILE_DIALOG_H
+#include "display_filter_edit.h"
+
#include <QFileDialog>
class CaptureFileDialog : public QFileDialog
@@ -64,6 +66,12 @@ private:
QString &m_fileName;
QString &m_displayFilter;
+ QCheckBox m_macRes;
+ QCheckBox m_transportRes;
+ QCheckBox m_networkRes;
+ QCheckBox m_externalRes;
+
+ DisplayFilterEdit* m_displayFilterEdit;
signals:
diff --git a/ui/qt/display_filter_edit.cpp b/ui/qt/display_filter_edit.cpp
index 9f79496739..6fa400a296 100644
--- a/ui/qt/display_filter_edit.cpp
+++ b/ui/qt/display_filter_edit.cpp
@@ -81,16 +81,21 @@ UIMiniCancelButton::UIMiniCancelButton(QWidget *pParent /* = 0 */)
// XXX - We need simplified (button- and dropdown-free) versions for use in dialogs and field-only checking.
-DisplayFilterEdit::DisplayFilterEdit(QWidget *parent) :
- QLineEdit(parent)
+DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, bool plain) :
+ QLineEdit(parent), m_plain(plain)
{
- fieldNameOnly = false;
+ m_fieldNameOnly = false;
m_syntaxState = Empty;
- emptyFilterMessage = QString(tr("Apply a display filter %1 <%2/>")).arg(UTF8_HORIZONTAL_ELLIPSIS)
-.arg(DEFAULT_MODIFIER);
setAccessibleName(tr("Display filter entry"));
+ if (m_plain) {
+ m_emptyFilterMessage = QString(tr("Enter a display filter %1")).arg(UTF8_HORIZONTAL_ELLIPSIS);
+ } else {
+ m_emptyFilterMessage = QString(tr("Apply a display filter %1 <%2/>")).arg(UTF8_HORIZONTAL_ELLIPSIS)
+ .arg(DEFAULT_MODIFIER);
+ }
+
// DFCombo
// Bookmark (star)
// DispalyFilterEdit
@@ -101,12 +106,12 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent) :
// XXX - Move bookmark and apply buttons to the toolbar a la Firefox, Chrome & Safari?
// XXX - Use native buttons on OS X?
- bookmarkButton = new QToolButton(this);
- bookmarkButton->setCursor(Qt::ArrowCursor);
- bookmarkButton->setStyleSheet(
+ m_bookmarkButton = new QToolButton(this);
+ m_bookmarkButton->setCursor(Qt::ArrowCursor);
+ m_bookmarkButton->setStyleSheet(QString(
"QToolButton { /* all types of tool button */"
" border 0 0 0 0;"
- " border-right: 1px solid gray;"
+ " border-right: %1px solid gray;"
" border-top-left-radius: 3px;"
" border-bottom-left-radius: 3px;"
" padding-left: 1px;"
@@ -127,12 +132,13 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent) :
// " stop: 0 #dadbde, stop: 1 #f6f7fa);"
// "}"
+ ).arg(m_plain ? 0 : 1)
);
- connect(bookmarkButton, SIGNAL(clicked()), this, SLOT(showDisplayFilterDialog()));
+ connect(m_bookmarkButton, SIGNAL(clicked()), this, SLOT(showDisplayFilterDialog()));
- clearButton = new QToolButton(this);
- clearButton->setCursor(Qt::ArrowCursor);
- clearButton->setStyleSheet(
+ m_clearButton = new QToolButton(this);
+ m_clearButton->setCursor(Qt::ArrowCursor);
+ m_clearButton->setStyleSheet(
"QToolButton {"
" image: url(:/dfilter/dfilter_erase_normal.png);"
" border: none;"
@@ -145,41 +151,49 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent) :
" image: url(:/dfilter/dfilter_erase_selected.png);"
"}"
);
- clearButton->hide();
- connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
+ m_clearButton->hide();
+ connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear()));
connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(checkFilter(const QString&)));
- applyButton = new QToolButton(this);
- applyButton->setCursor(Qt::ArrowCursor);
- applyButton->setStyleSheet(
- "QToolButton { /* all types of tool button */"
- " border 0 0 0 0;"
- " border-top-right-radius: 3px;"
- " border-bottom-right-radius: 3px;"
- " padding-right: 1px;"
- " image: url(:/dfilter/dfilter_apply_normal.png);"
- "}"
-
- "QToolButton:hover {"
- " image: url(:/dfilter/dfilter_apply_hover.png);"
- "}"
- "QToolButton:pressed {"
- " image: url(:/dfilter/dfilter_apply_pressed.png);"
- "}"
- );
- connect(applyButton, SIGNAL(clicked()), this, SLOT(applyDisplayFilter()));
- connect(this, SIGNAL(returnPressed()), this, SLOT(applyDisplayFilter()));
+ m_applyButton = NULL;
+ if (!m_plain) {
+ m_applyButton = new QToolButton(this);
+ m_applyButton->setCursor(Qt::ArrowCursor);
+ m_applyButton->setStyleSheet(
+ "QToolButton { /* all types of tool button */"
+ " border 0 0 0 0;"
+ " border-top-right-radius: 3px;"
+ " border-bottom-right-radius: 3px;"
+ " padding-right: 1px;"
+ " image: url(:/dfilter/dfilter_apply_normal.png);"
+ "}"
+
+ "QToolButton:hover {"
+ " image: url(:/dfilter/dfilter_apply_hover.png);"
+ "}"
+ "QToolButton:pressed {"
+ " image: url(:/dfilter/dfilter_apply_pressed.png);"
+ "}"
+ );
+ connect(m_applyButton, SIGNAL(clicked()), this, SLOT(applyDisplayFilter()));
+ connect(this, SIGNAL(returnPressed()), this, SLOT(applyDisplayFilter()));
+ }
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- QSize bksz = bookmarkButton->sizeHint();
- QSize cbsz = clearButton->sizeHint();
- QSize apsz = applyButton->sizeHint();
- syntaxStyleSheet = QString(
+ QSize bksz = m_bookmarkButton->sizeHint();
+ QSize cbsz = m_clearButton->sizeHint();
+ QSize apsz;
+ if (m_applyButton) {
+ apsz = m_applyButton->sizeHint();
+ } else {
+ apsz.setHeight(0); apsz.setWidth(0);
+ }
+ m_syntaxStyleSheet = QString(
"DisplayFilterEdit {"
" padding-left: %1px;"
" margin-left: %2px;"
" margin-right: %3px;"
- " background: transparent;"
+// " background: transparent;"
"}"
// Should the backgrounds fade away on the right?
@@ -207,7 +221,7 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent) :
.arg(Invalid)
.arg(Deprecated)
.arg(Valid);
- setStyleSheet(syntaxStyleSheet);
+ setStyleSheet(m_syntaxStyleSheet);
}
void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
@@ -230,7 +244,7 @@ void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
cr.setLeft(cr.left() + 2);
cr.setRight(cr.right() - 2);
- p.drawText(cr, Qt::AlignLeft|Qt::AlignVCenter, emptyFilterMessage);
+ p.drawText(cr, Qt::AlignLeft|Qt::AlignVCenter, m_emptyFilterMessage);
}
// else check filter syntax and set the background accordingly
// XXX - Should we add little warning/error icons as well?
@@ -238,13 +252,20 @@ void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
void DisplayFilterEdit::resizeEvent(QResizeEvent *)
{
- QSize cbsz = clearButton->sizeHint();
- QSize apsz = applyButton->sizeHint();
+ QSize cbsz = m_clearButton->sizeHint();
+ QSize apsz;
+ if (m_applyButton) {
+ apsz = m_applyButton->sizeHint();
+ } else {
+ apsz.setHeight(0); apsz.setWidth(0);
+ }
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- clearButton->move(rect().right() - frameWidth - cbsz.width() - apsz.width(),
+ m_clearButton->move(rect().right() - frameWidth - cbsz.width() - apsz.width(),
(rect().bottom() + 1 - cbsz.height())/2);
- applyButton->move(rect().right() - frameWidth - apsz.width(),
- (rect().bottom() + 1 - apsz.height())/2);
+ if (m_applyButton) {
+ m_applyButton->move(rect().right() - frameWidth - apsz.width(),
+ (rect().bottom() + 1 - apsz.height())/2);
+ }
}
void DisplayFilterEdit::checkFilter(const QString& text)
@@ -253,11 +274,11 @@ void DisplayFilterEdit::checkFilter(const QString& text)
GPtrArray *depr = NULL;
guchar c;
- clearButton->setVisible(!text.isEmpty());
+ m_clearButton->setVisible(!text.isEmpty());
popFilterSyntaxStatus();
- if (fieldNameOnly && (c = proto_check_field_name(text.toUtf8().constData()))) {
+ if (m_fieldNameOnly && (c = proto_check_field_name(text.toUtf8().constData()))) {
m_syntaxState = Invalid;
emit pushFilterSyntaxStatus(QString().sprintf("Illegal character in field name: '%c'", c));
} else if (dfilter_compile(text.toUtf8().constData(), &dfp)) {
@@ -288,9 +309,10 @@ void DisplayFilterEdit::checkFilter(const QString& text)
emit pushFilterSyntaxStatus(invalidMsg);
}
- setStyleSheet(syntaxStyleSheet);
- applyButton->setEnabled(m_syntaxState == Empty || m_syntaxState == Valid);
-
+ setStyleSheet(m_syntaxStyleSheet);
+ if (m_applyButton) {
+ m_applyButton->setEnabled(m_syntaxState == Empty || m_syntaxState == Valid);
+ }
}
void DisplayFilterEdit::showDisplayFilterDialog()
@@ -314,7 +336,9 @@ void DisplayFilterEdit::applyDisplayFilter()
g_free(dftext);
if (cf_status == CF_OK) {
- applyButton->setEnabled(false);
+ if (m_applyButton) {
+ m_applyButton->setEnabled(false);
+ }
if (dfString.length() < 1) {
// gtk_widget_set_sensitive (g_object_get_data (G_OBJECT(filter_cm), E_DFILTER_CLEAR_KEY), FALSE);
// gtk_widget_set_sensitive (g_object_get_data (G_OBJECT(filter_cm), E_DFILTER_SAVE_KEY), FALSE);
diff --git a/ui/qt/display_filter_edit.h b/ui/qt/display_filter_edit.h
index fe0562c3c3..2c0f05dfe1 100644
--- a/ui/qt/display_filter_edit.h
+++ b/ui/qt/display_filter_edit.h
@@ -32,7 +32,7 @@ class DisplayFilterEdit : public QLineEdit
Q_PROPERTY(SyntaxState syntaxState READ syntaxState)
Q_ENUMS(SyntaxState)
public:
- explicit DisplayFilterEdit(QWidget *parent = 0);
+ explicit DisplayFilterEdit(QWidget *parent = 0, bool plain = false);
enum SyntaxState { Empty, Invalid, Deprecated, Valid };
SyntaxState syntaxState() const
{ return m_syntaxState; }
@@ -50,13 +50,14 @@ private slots:
void applyDisplayFilter();
private:
- bool fieldNameOnly;
+ bool m_plain;
+ bool m_fieldNameOnly;
SyntaxState m_syntaxState;
- QString emptyFilterMessage;
- QString syntaxStyleSheet;
- QToolButton *bookmarkButton;
- QToolButton *clearButton;
- QToolButton *applyButton;
+ QString m_emptyFilterMessage;
+ QString m_syntaxStyleSheet;
+ QToolButton *m_bookmarkButton;
+ QToolButton *m_clearButton;
+ QToolButton *m_applyButton;
signals:
void pushFilterSyntaxStatus(QString&);