static void file_print_cmd(gboolean print_selected) { print_args_t *args = &print_args; if (print_win != NULL) { /* There's already a "Print" dialog box; reactivate it. */ reactivate_window(print_win); return; } /* get settings from preferences (and other initial values) only once */ if(print_prefs_init == FALSE) { print_prefs_init = TRUE; args->format = (print_format_e)prefs.pr_format; args->to_file = prefs.pr_dest; args->file = g_strdup(prefs.pr_file); args->cmd = g_strdup(prefs.pr_cmd); args->print_summary = TRUE; args->print_dissections = print_dissections_as_displayed; args->print_hex = FALSE; args->print_formfeed = FALSE; } /* init the printing range */ packet_range_init(&args->range, &cfile); args->range.process_filtered = TRUE; if(print_selected) { args->range.process = range_process_selected; } print_win = open_print_dialog("Wireshark: Print", output_action_print, args); g_signal_connect(print_win, "destroy", G_CALLBACK(print_destroy_cb), &print_win); }
PrintDialog::PrintDialog(QWidget *parent, capture_file *cf) : QDialog(parent), pd_ui_(new Ui::PrintDialog), cur_printer_(NULL), cur_painter_(NULL), preview_(new QPrintPreviewWidget(&printer_)), print_bt_(new QPushButton(tr("&Print..."))), cap_file_(cf) { if (!cf) done(QDialog::Rejected); // ...or assert? pd_ui_->setupUi(this); pd_ui_->previewLayout->insertWidget(0, preview_, Qt::AlignTop); preview_->setMinimumWidth(preview_->height() / 2); preview_->setToolTip(pd_ui_->zoomLabel->toolTip()); // XXX Make these configurable header_font_.setFamily("Times"); header_font_.setPointSizeF(header_font_.pointSizeF() * 0.8); packet_font_ = wsApp->monospaceFont(); packet_font_.setPointSizeF(packet_font_.pointSizeF() * 0.8); memset(&print_args_, 0, sizeof(print_args_)); memset(&stream_ops_, 0, sizeof(stream_ops_)); /* Init the export range */ packet_range_init(&print_args_.range, cap_file_); /* Default to displayed packets */ print_args_.range.process_filtered = TRUE; stream_ops_.print_preamble = print_preamble_pd; stream_ops_.print_line = print_line_pd; stream_ops_.new_page = new_page_pd; stream_.data = this; stream_.ops = &stream_ops_; print_args_.stream = &stream_; gchar *display_basename = g_filename_display_basename(cap_file_->filename); printer_.setDocName(display_basename); g_free(display_basename); pd_ui_->rangeGroupBox->initRange(&print_args_.range); pd_ui_->buttonBox->addButton(print_bt_, QDialogButtonBox::ActionRole); pd_ui_->buttonBox->addButton(tr("Page &Setup..."), QDialogButtonBox::ResetRole); print_bt_->setDefault(true); connect(preview_, SIGNAL(paintRequested(QPrinter*)), this, SLOT(paintPreview(QPrinter*))); connect(pd_ui_->rangeGroupBox, SIGNAL(rangeChanged()), this, SLOT(checkValidity())); connect(pd_ui_->formatGroupBox, SIGNAL(formatChanged()), this, SLOT(checkValidity())); connect(pd_ui_->formFeedCheckBox, SIGNAL(toggled(bool)), preview_, SLOT(updatePreview())); checkValidity(); }
ExportDissectionDialog::ExportDissectionDialog(QWidget *parent, capture_file *cap_file, export_type_e export_type): QFileDialog(parent), export_type_(export_type), cap_file_(cap_file) #if !defined(Q_OS_WIN) , save_bt_(NULL) #endif /* Q_OS_WIN */ { #if !defined(Q_OS_WIN) QDialogButtonBox *button_box = findChild<QDialogButtonBox *>(); QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout()); QHBoxLayout *h_box = new QHBoxLayout(); QStringList name_filters; int last_row; setWindowTitle(tr("Wireshark: Export Packet Dissections")); setAcceptMode(QFileDialog::AcceptSave); setLabelText(FileType, tr("Export as:")); // export_type_map_keys() sorts alphabetically. We don't want that. name_filters << tr("Plain text (*.txt)") << tr("Comma Separated Values - summary (*.csv)") << tr("PSML - summary (*.psml, *.xml)") << tr("PDML - details (*.pdml, *.xml)") << tr("C Arrays - bytes (*.c, *.h)"); export_type_map_[name_filters[0]] = export_type_text; export_type_map_[name_filters[1]] = export_type_csv; export_type_map_[name_filters[2]] = export_type_psml; export_type_map_[name_filters[3]] = export_type_pdml; export_type_map_[name_filters[4]] = export_type_carrays; setNameFilters(name_filters); selectNameFilter(export_type_map_.key(export_type)); exportTypeChanged(export_type_map_.key(export_type)); last_row = fd_grid->rowCount(); fd_grid->addItem(new QSpacerItem(1, 1), last_row, 0); fd_grid->addLayout(h_box, last_row, 1); /* Init the export range */ packet_range_init(&print_args_.range, cap_file_); /* Default to displayed packets */ print_args_.range.process_filtered = TRUE; packet_range_group_box_.initRange(&print_args_.range); h_box->addWidget(&packet_range_group_box_); h_box->addWidget(&packet_format_group_box_, 0, Qt::AlignTop); if (button_box) { button_box->addButton(QDialogButtonBox::Help); connect(button_box, SIGNAL(helpRequested()), this, SLOT(on_buttonBox_helpRequested())); save_bt_ = button_box->button(QDialogButtonBox::Save); } if (save_bt_) { connect(&packet_range_group_box_, SIGNAL(validityChanged(bool)), this, SLOT(checkValidity())); connect(&packet_format_group_box_, SIGNAL(formatChanged()), this, SLOT(checkValidity())); } connect(this, SIGNAL(filterSelected(QString)), this, SLOT(exportTypeChanged(QString))); // Grow the dialog to account for the extra widgets. resize(width(), height() + (packet_range_group_box_.height() * 2 / 3)); #else // Q_OS_WIN #endif // Q_OS_WIN }
ExportDissectionDialog::ExportDissectionDialog(QWidget *parent, capture_file *cap_file, export_type_e export_type): QFileDialog(parent), export_type_(export_type), cap_file_(cap_file) #if !defined(Q_OS_WIN) , save_bt_(NULL) #endif /* Q_OS_WIN */ { 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. */ setDirectory(wsApp->lastOpenDir()); 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') setDirectory(prefs.gui_fileopen_dir); break; } #if !defined(Q_OS_WIN) QDialogButtonBox *button_box = findChild<QDialogButtonBox *>(); // Add extra widgets // https://wiki.qt.io/Qt_project_org_faq#How_can_I_add_widgets_to_my_QFileDialog_instance.3F setOption(QFileDialog::DontUseNativeDialog, true); QGridLayout *fd_grid = qobject_cast<QGridLayout*>(layout()); QHBoxLayout *h_box = new QHBoxLayout(); QStringList name_filters; int last_row; setWindowTitle(wsApp->windowTitleString(tr("Export Packet Dissections"))); setAcceptMode(QFileDialog::AcceptSave); setLabelText(FileType, tr("Export As:")); // export_type_map_keys() sorts alphabetically. We don't want that. name_filters << tr("Plain text (*.txt)") << tr("Comma Separated Values - summary (*.csv)") << tr("PSML - summary (*.psml, *.xml)") << tr("PDML - details (*.pdml, *.xml)") << tr("JSON (*.json)") << tr("C Arrays - bytes (*.c, *.h)"); export_type_map_[name_filters[0]] = export_type_text; export_type_map_[name_filters[1]] = export_type_csv; export_type_map_[name_filters[2]] = export_type_psml; export_type_map_[name_filters[3]] = export_type_pdml; export_type_map_[name_filters[4]] = export_type_json; export_type_map_[name_filters[5]] = export_type_carrays; setNameFilters(name_filters); selectNameFilter(export_type_map_.key(export_type)); exportTypeChanged(export_type_map_.key(export_type)); last_row = fd_grid->rowCount(); fd_grid->addItem(new QSpacerItem(1, 1), last_row, 0); fd_grid->addLayout(h_box, last_row, 1); print_args_.file = NULL; /* Init the export range */ packet_range_init(&print_args_.range, cap_file_); /* Default to displayed packets */ print_args_.range.process_filtered = TRUE; packet_range_group_box_.initRange(&print_args_.range); h_box->addWidget(&packet_range_group_box_); h_box->addWidget(&packet_format_group_box_, 0, Qt::AlignTop); if (button_box) { button_box->addButton(QDialogButtonBox::Help); connect(button_box, SIGNAL(helpRequested()), this, SLOT(on_buttonBox_helpRequested())); save_bt_ = button_box->button(QDialogButtonBox::Save); } if (save_bt_) { connect(&packet_range_group_box_, SIGNAL(validityChanged(bool)), this, SLOT(checkValidity())); connect(&packet_format_group_box_, SIGNAL(formatChanged()), this, SLOT(checkValidity())); } connect(this, SIGNAL(filterSelected(QString)), this, SLOT(exportTypeChanged(QString))); // Grow the dialog to account for the extra widgets. resize(width(), height() + (packet_range_group_box_.height() * 2 / 3)); #else // Q_OS_WIN #endif // Q_OS_WIN }