void StatsTreeDialog::on_actionCopyToClipboard_triggered() { GString* s= stats_tree_format_as_str(st_ ,ST_FORMAT_PLAIN, ui->statsTreeWidget->sortColumn(), ui->statsTreeWidget->header()->sortIndicatorOrder()==Qt::DescendingOrder); wsApp->clipboard()->setText(s->str); g_string_free(s,TRUE); }
QByteArray StatsTreeDialog::getTreeAsString(st_format_type format) { GString *str_tree; // produce output in selected format using current sort information str_tree = stats_tree_format_as_str(st_, format, statsTreeWidget()->sortColumn(), statsTreeWidget()->header()->sortIndicatorOrder()==Qt::DescendingOrder); return gstring_free_to_qbytearray(str_tree); }
static void draw_stats_tree(void *psp) { stats_tree *st = (stats_tree *)psp; GString *s; s= stats_tree_format_as_str(st, ST_FORMAT_PLAIN, stats_tree_get_default_sort_col(st), stats_tree_is_default_sort_DESC(st)); printf("%s", s->str); g_string_free(s, TRUE); }
/* Only call this once the entire list is drawn - else Gtk seems */ /* to get sorting order wrong (sorting broken when new nodes are */ /* added after setting sort column.) Also for performance. */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (st->pr->store), sort_column, order); } static gboolean copy_tree_to_clipboard (GtkWidget *win _U_, stats_tree *st) { gint sort_column = N_RESERVED_COL; /* default */ GtkSortType order = GTK_SORT_DESCENDING; GString *s; gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (st->pr->store), &sort_column, &order); s= stats_tree_format_as_str(st,ST_FORMAT_PLAIN,sort_column-N_RESERVED_COL,order==GTK_SORT_DESCENDING); copy_to_clipboard(s); g_string_free (s,TRUE); return TRUE; } #ifndef USE_WIN32_FILE_DIALOGS static gboolean gtk_save_as_statstree(GtkWidget *win, GString *file_name, int *file_type) { GtkWidget *saveas_w; GtkWidget *main_vb; GtkWidget *ft_hb, *ft_lb, *ft_combo_box; char *st_name;
void StatsTreeDialog::on_actionSaveAs_triggered() { QString selectedFilter; st_format_type file_type; const char *file_ext; FILE *f; GString *str_tree; bool success= false; int last_errno; QFileDialog SaveAsDialog(this, tr("Wireshark: Save stats tree as ..."), get_last_open_dir()); SaveAsDialog.setNameFilter(tr("Plain text file (*.txt);;" "Comma separated values (*.csv);;" "XML document (*.xml);;" "YAML document (*.yaml)")); SaveAsDialog.selectNameFilter(tr("Plain text file (*.txt)")); SaveAsDialog.setAcceptMode(QFileDialog::AcceptSave); if (!SaveAsDialog.exec()) { return; } selectedFilter= SaveAsDialog.selectedNameFilter(); if (selectedFilter.contains("*.yaml", Qt::CaseInsensitive)) { file_type= ST_FORMAT_YAML; file_ext = ".yaml"; } else if (selectedFilter.contains("*.xml", Qt::CaseInsensitive)) { file_type= ST_FORMAT_XML; file_ext = ".xml"; } else if (selectedFilter.contains("*.csv", Qt::CaseInsensitive)) { file_type= ST_FORMAT_CSV; file_ext = ".csv"; } else { file_type= ST_FORMAT_PLAIN; file_ext = ".txt"; } // Get selected filename and add extension of necessary QString file_name = SaveAsDialog.selectedFiles()[0]; if (!file_name.endsWith(file_ext, Qt::CaseInsensitive)) { file_name.append(file_ext); } // produce output in selected format using current sort information str_tree=stats_tree_format_as_str(st_ ,file_type, ui->statsTreeWidget->sortColumn(), ui->statsTreeWidget->header()->sortIndicatorOrder()==Qt::DescendingOrder); // actually save the file f= ws_fopen (file_name.toUtf8().constData(),"w"); last_errno= errno; if (f) { if (fputs(str_tree->str, f)!=EOF) { success= true; } last_errno= errno; fclose(f); } if (!success) { QMessageBox::warning(this, tr("Error saving file %1").arg(file_name), g_strerror (last_errno)); } g_string_free(str_tree, TRUE); }