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 }