Example #1
0
CaptureFileDialog::CaptureFileDialog(QWidget *parent, QString &fileName, QString &displayFilter) :
    QFileDialog(parent), m_fileName(fileName), m_displayFilter(displayFilter)
{
#if !defined(Q_WS_WIN)
    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();
    QGridLayout *previewGrid = new QGridLayout();
    QLabel *lbl;

    fdGrid->addWidget(new QLabel(tr("Display Filter:")), 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);

    // Filter and resolution controls
    hBox->addLayout(controlsBox);

    m_macRes.setText(tr("&MAC name resolution"));
    m_macRes.setChecked(gbl_resolv_flags.mac_name);
    controlsBox->addWidget(&m_macRes);

    m_transportRes.setText(tr("&Transport name resolution"));
    m_transportRes.setChecked(gbl_resolv_flags.transport_name);
    controlsBox->addWidget(&m_transportRes);

    m_networkRes.setText(tr("&Network name resolution"));
    m_networkRes.setChecked(gbl_resolv_flags.network_name);
    controlsBox->addWidget(&m_networkRes);

    m_externalRes.setText(tr("&External name resolver"));
    m_externalRes.setChecked(gbl_resolv_flags.use_external_net_name_resolver);
    controlsBox->addWidget(&m_externalRes);

    // Preview
    hBox->addLayout(previewGrid);

    previewGrid->setColumnStretch(0, 0);
    previewGrid->setColumnStretch(1, 10);

    lbl = new QLabel("Format:");
    previewGrid->addWidget(lbl, 0, 0);
    previewGrid->addWidget(&m_previewFormat, 0, 1);
    m_previewLabels << lbl << &m_previewFormat;

    lbl = new QLabel("Size:");
    previewGrid->addWidget(lbl, 1, 0);
    previewGrid->addWidget(&m_previewSize, 1, 1);
    m_previewLabels << lbl << &m_previewSize;

    lbl = new QLabel("Packets:");
    previewGrid->addWidget(lbl, 2, 0);
    previewGrid->addWidget(&m_previewPackets, 2, 1);
    m_previewLabels << lbl << &m_previewPackets;

    lbl = new QLabel("First Packet:");
    previewGrid->addWidget(lbl, 3, 0);
    previewGrid->addWidget(&m_previewFirst, 3, 1);
    m_previewLabels << lbl << &m_previewFirst;

    lbl = new QLabel("Elapsed Time:");
    previewGrid->addWidget(lbl, 4, 0);
    previewGrid->addWidget(&m_previewElapsed, 4, 1);
    m_previewLabels << lbl << &m_previewElapsed;

    // Grow the dialog to account for the extra widgets.
    resize(width(), height() + hBox->minimumSize().height() + m_displayFilterEdit->minimumSize().height());

    connect(this, SIGNAL(currentChanged(const QString &)), this, SLOT(preview(const QString &)));

    preview("");

#endif
}